[发明专利]基于程序行为切片的测试案例约减方法有效
申请号: | 201310479195.8 | 申请日: | 2013-10-14 |
公开(公告)号: | CN103559122A | 公开(公告)日: | 2014-02-05 |
发明(设计)人: | 管晓宏;郑庆华;刘烃;王海军;俞乐晨;黄小龙 | 申请(专利权)人: | 西安交通大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 西安通大专利代理有限责任公司 61200 | 代理人: | 蔡和平 |
地址: | 710049 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 基于 程序 行为 切片 测试 案例 方法 | ||
技术领域
本发明涉及可信软件及软件测试领域,特别涉及模型检验和程序控制流分析技术中测试案例约减方法。
背景技术
软件测试是用来保证软件质量的基本手段,并且也是软件开发过程中最耗费人力和物力的过程。在正常情况下,程序的输入空间往往很大甚至不能穷尽,测试人员不可能运行完所有的测试用例。因此选择和生成有效的具有代表性的测试案例集,是软件测试中最基础的需求和问题。传统的挑选测试案例的方法根据其测试标准主要包括代码覆盖、分支覆盖和路径覆盖。
基于代码覆盖和分支覆盖的测试案例生成方法在工业上应用广泛,但是这两种方法在发现程序错误方面并没有比随机案例生成方法具有统计意义上的优势。
路径覆盖测试案例生成方法在这几年得到了大力发展,各种工具也不断出现,比如JPF-SE,Concolic,KLEE等等,但都面临程序状态空间爆炸的问题。这些路径覆盖的测试案例生成工具都是基于符号执行实现的。符号执行是20世纪70年代提出的一种程序验证方法,是一种基于符号化的模型检验方法。广泛用于符号调试,测试案例生成等。其核心思想是使用符号值代替具体的变量输入,并使用符号表达式来表示程序中各变量的值。最终,程序的输出值被转化为一个以符号值作为输入的函数。符号执行将程序抽象为符号执行树,其中顺序语句对应着树的计算节点,分支语句对应着分支节点,而对于循环语句,将其按循环次数展开为语义上等价的分支语句。一般,一条循环语句对应一组分支节点。可以认为,在符号执行过程中,程序只有顺序和分支两种结构。符号执行的过程本质上是路径条件的构造过程。路径条件指的是对于执行该路径的测试案例,程序输入值所需要满足的数学约束条件。因而一个路径条件唯一地对应一条执行路径。一个路径条件由一组子条件(sub-condition)组成,每一个被执行分支的条件作为一个子条件。在初始时路径条件为true,在探索程序的过程中,每遇到一个分支语句,就更新路径条件,将被执行分支的条件加入到路径条件中,公式为PC=PC^new sub-condition。由于每一个分支语句都对应着true和false两个分支,而符号执行基于静态分析,变量没有具体的数值,因而无法确定执行哪一条分支。所以对两条分支都进行探索(搜索顺序可按需定义,深度优先,广度优先等),即分别以两个分支的条件作为子条件来更新路径条件。这样就得到了两个新的路径条件,对应两条不同的执行路径。之后,继续对这两条路径分别进行探索。符号执行实现了对程序的全路径探索。当程序探索结束时就得到了被测程序所有执行路径的路径条件。最后,检查所有得到的路径条件,如果路径条件是无法被满足的,则说明该路径是一条不可执行路径,如果路径条件可以被满足,则说明该路径是一条可执行路径。将路径条件输入约束求解器即可解出对应的测试案例。
符号执行存在两个阻碍,使得其难以大规模使用。1)符号执行是一种基于搜索的遍历算法,需要对程序的所有分支进行遍历,虽然可以通过一些附加的剪枝条件进行优化,但其算法的复杂度非常高,为O(2n),其中n为被测程序中条件语句(包括分支,循环,逻辑运算)的数目;2)符号执行不能很好地解决测试案例集更新的问题,每次代码进行修改后,只能重新遍历一次符号执行树来生成一个新的测试案例集。由前面的分析可知,重新生成一个测试案例集的时间开销比较大,而且一个软件可能会频繁变更,如果每次变更之后都通过符号执行生成一个新的测试案例集,测试的效率就会受到影响。
如果一种测试案例生成方法能够和全部路径覆盖同样的程序行为并且避免列举全部程序路径将能大大提高程序的测试效率。
发明内容:
本发明提出一种基于程序行为切片的测试案例约减方法,在无需对全部程序路径进行扫描的情况下,生成可以覆盖全部程序行为的测试案例集,缓解程序测试面临的状态空间爆炸问题。
为了实现上述目的,本发明采用如下技术方案:
基于程序行为切片的测试案例约减方法,包括如下步骤:
S1)根据输入的待测程序,利用静态程序分析方法,分析待测程序的控制流和信息流,提取待测程序的控制依赖和数据依赖;
S2)根据待测程序的控制依赖和数据依赖,计算待测程序的潜在依赖;
S3)根据待测程序的控制依赖、数据依赖和潜在依赖,在程序控制流图上构建程序的组合依赖;
S4)利用符号执行方法随机生成一条初始路径,并将对应初始路径的测试案例存入有效测试案例集;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于西安交通大学,未经西安交通大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201310479195.8/2.html,转载请声明来源钻瓜专利网。