如何对Eclipse CDT的程序修改与信息提取
好酷屋教程网小编为您收集和整理了如何对Eclipse CDT的程序修改与信息提取的相关教程:软件白盒测试中,需要对待测程序的结构进行分析,根据不同的覆盖策略,设计不同功能的探针函数并确定合适的插入点。同时,为了完成插装、保证搜集到正确的被测程序执行信息,便于统计执行结果以及输出测试报告,还需
软件白盒测试中,需要对待测程序的结构进行分析,根据不同的覆盖策略,设计不同功能的探针函数并确定合适的插入点。同时,为了完成插装、保证搜集到正确的被测程序执行信息,便于统计执行结果以及输出测试报告,还需要进行程序结构的调整、辅助信息的添加等程序修改以及信息的提取操作。 目前常用来进行信息提取修改的工具主要有Gcc、JavaCC等,虽然可以达到目的,但无论实现的复杂度还是可操作性都面临较大的挑战,而Eclipse CDT开源工具提供了有力的支持,基于其强大的方法库以及清晰简洁的架构,我们可以方便地使用程序抽象语法树(AST)信息。本文采用Eclipse CDT开源包,进行待测程序AST的获取,并结合此结构完成覆盖策略实现的部分工作。
1 程序修改与信息提取工具 对源程序进行修改及信息提取主要有以下两种方式: (1)直接编写针对源程序语言的词法、语法分析器,对源程序进行分析,得到源程序的信息,并在修改后重建。 (2)利用开源工具实现。常用工具属于第一种方式,这种方式特点是,语法识别准确,提取的源代码信息比较准确,编写静态信息输出接口也有利于实现交互,但是由于语言描述比较复杂,实现难度比较大。 2 基于Eclipse CDT的程序修改 2.1 程序标准化 本文所说的标准化,主要是进行源程序结构的调整。主要的调整有:①注释语句的去除②为分支循环语句添加语句块标记“{}”。在AST中注释语句对应的节点类型为IASTComment,当遍历到该类型节点时,不进行其他操作。CASTIfStatement类型对应if语句,CASTCompoundStatement类型对应语句块“{}”节点并作为CASTIfStatement节点的孩子节点出现,因此可以通过判断CASTIfStatement节点下是否存在CASTCompoundStatement节点判断该if语句是否有语句块标记,如果没有的话,在将if语句的对应的token写入新文件之前,应该先写入“{”,然后写入if语句,最后写入“}”,而对应CASTSwitchStatement语句以及循环语句CASTForStatement,CASTWhileStatement等有相似的操作。这样,通过去除注释以及添加花括号,我们得到标准的程序结构,为后续插桩点确定、路径统计等做准备。 2.2 隐藏段的添加 隐藏段的作用主要是用来记录程序的执行路径, 以便于进行覆盖分析、路径分析乃至测试用例生成等工作,列如只有if语句而缺少与之搭配的else语句,就需要在遍历AST的过程中自动添加else隐藏段。 2.3 探针函数的插桩 在对AST访问的过程中,读取之前信息提取时确定的插装点信息,将探针库的头文件“probe.h”以及相应的探针函数调用使用文件流写到文件中。为了不影响源程序的逻辑完整,插入探针函数时可以采用特殊结构,例如逗号表达式、多目表达式等。 3 基于Eclipse CDT的程序信息提取 具体到不同的策略,item可以是可执行语句、条件语句、分支语句和路径等。利用AST节点类型,实现这些信息的统计非常方便。 3.1 统计信息 对于待测程序来说,通过CDT得到的AST中,每一条语句都对应一个IASTStatement节点,统计总的可执行语句数时,只需要排除非可执行语句,然后设置全局变量,对可执行语句进行计数,当AST遍历完成之后,整个待测函数的可执行语句数即可获得。同样,AST中,每个分支、每个条件都会作为单独的节点出现,相应的全局变量即可完成统计。 3.2 计算信息 覆盖测试中的路径总数,需要通过计算获取。分析如下: 对于一条路径,需要考虑两个元素,一是节点,二是节点之间的边。 3.2.1 节点 首先,对于一组顺序执行语句来说,可以将其看作一个节点。对于条件语句来说,情况较为复杂,往往需要考虑条件的类型,具体来说,例如表达式“if(a < b || b < c && c > 1)”,我们需要建立三个节点,节点1为“a < b”,当取真时,则进入if语句块内执行,否则执行节点2“b < c”,对于节点2,当取真时,执行节点3“c > 1”,否则,会直接执行整个if条件表达式为假之后的语句。另外,跳转语句之后不应该与其他节点有边相连。 3.2.2 节点之间的边 根据节点类型,边的关系有,顺序节点与条件节点相连,条件节点与顺序节点相连,条件节点中不同类型的子表达式节点相连,其他节点与跳转节点相连等。 在遍历AST过程中,我们通过节点名来判断节点类型,并以此来建立节点与节点之间的边的关系,可以选邻接矩阵来进行存储表示。当AST访问完成,通过邻接矩阵即可完成路径总数计算。 4 总结 软件白盒测试中,程序信息的修改与获取是关键点,常规工具如Gcc、JavaCC等面临复杂度高,操作不方便的问题,而Eclipse CDT提供了强大的分析功能。在此基础之上,可以集中在覆盖算法设计实现上,本文提出了几种覆盖策略所需条件的算法实现。同时,除了本文中CDT适用于C/C++,基于Eclipse的AST提取工具还可以支持Java、Javascript等,它们都可以同CDT集成,对于完成更加强大通用的应用,提供广泛的支持。
以上就是好酷屋教程网小编为您收集和整理的标签,简介,程序,技术相关内容,如果对您有帮助,请帮忙分享这篇文章^_^
本文来源: https://www.haoku5.com/shenghuo/656d48e4e4eedd7e2e06586c.html
相关推荐
热门专题
喝酒后喝咖啡好吗
历来有美酒加咖啡的说法,美酒加咖啡听上去意境很美好,很多人也有这个习惯,在喝完酒后,来一杯香浓醇厚的咖啡解酒提神,喝酒后喝咖啡好吗?喝酒后喝咖啡不好美酒加咖啡不仅对身体没有好处,起不到醒酒提神的作用,白糖为什么能溶解鱼刺 用什么可以溶解鱼刺
鱼是生活中常见的常见的食物,很多人都喜欢吃吧,吃鱼的时候稍不注意就被鱼刺卡住了怎么办呢?听说用白糖可以帮助溶解鱼刺,这是为什么呢?白糖为什么能溶解鱼刺白糖没有溶解鱼刺的作用。白糖是生活中常见的食物,很葫芦岛财政局每月拨款时间几号
葫芦岛财政局每月拨款时间为15号。通过查询官方网站显示,财政局每月15号左右对事业单位拔款。具体消息可关注官方网站,获得第一手权威信息。财政局负责地方的财政工作,贯彻执行财务制度,按照政策组织财政收入全新胜达怎么下载酷狗
全新胜达可通过U盘、SD卡等设备里下好音乐,插入车上的相应接口,直接进行下载安装即可。建议使用系统自带的播放器,另外安装可能会出现不兼容的情况。全新胜达是北京现代旗下的高端中型豪华SUV,配备2.0T腐竹不能和什么一起吃
腐竹由于味道鲜美,营养丰富受到很多人的喜爱,所以也出现了各种腐竹的吃法,但是腐竹一旦没有搭配吃好就会拉肚子,那么腐竹不能和什么一起吃呢?腐竹不能和什么一起吃1、蜂蜜腐竹跟蜂蜜一起搭配,会造成腹泻,有损如何将多个类目放在一个海报里
用DW软件或者用PS软件做成切片连接,即可将多个类目放在一个海报里。海报这一名称,最早起源于上海,是一种宣传方式。旧时,海报是用于戏剧、电影等演出,活动的招帖。上海的人通常把职业性的戏剧演出称为海,而广州行间网络科技有限公司(关于广州行间网络科技有限公司介绍)
导读大家好,小升来为大家解答以上的问题。广州行间网络科技有限公司,关于广州行间网络科技有限公司介绍这个很多人还不知道,现在让我们一起来看...大家好,小升来为大家解答以上的问题。广州行间网络科技有限公白糖和鸡蛋能一起吃吗 白糖和鸡蛋一起吃有什么危害
鸡蛋是生活中很常见的食物,白糖是生活中常见的调味品,白糖和鸡蛋能一起吃吗?下面一起来看看吧!白糖和鸡蛋能一起吃吗建议不要。糖水荷包蛋是很多人日常喜欢吃的食物,夏天到了,不少人会选择白糖作为首选糖类,但金纹石有没有蜡质光泽
金纹石有蜡质光泽,金纹石主要是黑底(也有褐色底)以金黄色图纹为特征的图纹石,金纹石是奇石界的后起之秀,金纹石一般都质地坚硬,其水冲度高,石体光洁平滑细腻,部分玉化程度高。莫氏硬度在5到8度,金色纹路和女生去塔尔寺禁忌
1、在寺院里,不能用手摸佛经、佛像、法器等,更不能跨越;转经轮时,一定是从左向右;不要乱摸藏族人的头和帽子。2、塔尔寺内很多经院殿堂有禁止拍照的告示牌。3、最好不要穿裙子。4、塔尔寺是藏传佛教,普通人