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