[发明专利]一种程序中不可达路径的静态检测方法有效
申请号: | 201010622214.4 | 申请日: | 2010-12-27 |
公开(公告)号: | CN102073587A | 公开(公告)日: | 2011-05-25 |
发明(设计)人: | 王雅文;宫云战;肖庆;杨朝红;金大海;李青翠;王思岚 | 申请(专利权)人: | 北京邮电大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京汇泽知识产权代理有限公司 11228 | 代理人: | 程殿军 |
地址: | 100876 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序 不可 路径 静态 检测 方法 | ||
技术领域
本发明涉及软件测试技术,尤其涉及一种程序中不可达路径的静态检测方法。
背景技术
在软件的测试过程中,如果能够尽早发现程序中存在不可达路径,可以避免在动态测试阶段耗费大量的人力物力来为不可达路径生成测试用例。因此,程序中不可达路径的检测对于软件开发的整个过程都具有十分重要的意义。
目前,利用静态分析方法来检测程序中的不可达路径,尽管还不可能检测出所有的不可达路径,但却可以通过分析路径条件中的变量取值范围信息来确定一部分不可达路径,并可验证该程序中检测出的不可达路径的结果百分之百正确,这对测试的精确性的提高是非常有益的。
程序不可达路径信息,不仅可以优化一些基于数据流分析的工具,更有利于软件测试过程的实现,主要体现在以下几个方面:
1、改善程序静态分析的准确性:路径敏感的数据流分析方法考虑程序分支间的组合关系,存在矛盾的分支条件可能由于位于不可达路径上而不必分析。
2、直接应用于单元测试:在路径覆盖测试以及其他的覆盖测试(如:分支覆盖、判定覆盖、修改的条件判定覆盖)中,选择待测路径的算法可以避免由分支条件矛盾所造成的不可达路径,从而减少了测试用例生成的耗费。
3、提高路径敏感缺陷检测算法的准确性:如果静态分析在一条不可达路径上报告了一个缺陷,那么这无疑是个误报。尽早地检测出不可达路径可有效地减少误报,降低误报率,提高算法识别潜在缺陷的效率。
发明内容
有鉴于此,本发明的主要目的在于提供一种程序中不可达路径的静态检测方法,解决软件测试中不可达路径无效计算的问题,以提高程序静态分析和测试用例生成的效率。
为达到上述目的,本发明的技术方案是这样实现的:
一种程序中不可达路径的静态检测方法,该方法包括以下步骤:
A、对待测试程序的函数单元进行词法分析、语法分析及语义分析,生成函数的控制流图;
B、通过所述待测试程序中变量值范围的函数间分析得到被调用函数单元的函数摘要;
C、在控制流图的入口和出口节点之间选取一条路径p,如果路径中含有循环语句节点,则采用进入循环体0次或1次的策略;
D、从所述路径p的入口节点开始,计算各语句节点处的上下文状态;如果存在某节点的上下文状态中有变量取值为空的情况,则表示所述路径p为不可达路径,否则,为可达路径。
其中,所述步骤C进一步包括:在所述控制流图中,同一节点的多次出现视为不同的路径节点。
其中,所述步骤D进一步包括:
D1、设路径p的入口节点为entry,出口节点为exit,并将所述入口节点设为当前节点;
D2、计算当前语句节点n在路径p中的上下文状态,即应用扩展区间技术计算各变量的取值范围情况;
D3、判断节点n处的上下文状态中是否出现变量取值为空的情况,若是,则执行步骤D4,否则执行步骤D5;
D4、当前路径p为不可达路径,结束路径遍历;
D5、判断当前节点是否为出口节点exit;若是,则当前路径p为可达路径,结束路径遍历;否则,取当前节点的下一个节点作为目标节点,返回步骤D2。
步骤D2的进一步包括:
D21、若所述当前节点为入口节点entry,取函数定义的参数列表,并将所有的参数取值初始区间设为Unknown;否则执行步骤D22。
D22、取所述当前节点在路径p上的前驱节点上出现的每一个变量的区间取值,设为该变量在当前节点上的初始区间值;
D23、若所述当前节点为变量声明语句,将该变量的取值区间设为该变量类型的默认区间;否则执行步骤D24;
D24、若所述当前节点包含函数调用,根据当前节点处的上下文状态和函数摘要更新函数调用的返回值区间以及其他与上下文环境相关的变量的区间值;否则执行步骤D25;
D25、若所述当前节点包含赋值语句,则计算右端表达式的区间取值并以此值来更新被赋值变量的取值区间;否则执行步骤D26;
D26、若所述当前节点所对应的语句类型为分支条件判断语句,则根据出边的取值来计算该节点所关联的每一变量的新取值区间;否则执行步骤D27;
D27、若所述当前节点n所对应的语句类型为循环条件判断语句,则根据路径p中包含循环体的次数来计算各变量的取值区间。
所述步骤D23进一步包括:
D231、若所述当前节点为数值类型变量的声明语句,则将变量的取值区间设为{[MIN,MAX]};否则执行步骤D232;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京邮电大学,未经北京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010622214.4/2.html,转载请声明来源钻瓜专利网。