发明名称 一种程序中不可达路径的静态检测方法
摘要 本发明公开一种程序中不可达路径的静态检测方法,该方法包括:A、对待测试程序的函数单元进行词法分析、语法分析及语义分析,生成函数的控制流图;B、通过所述待测试程序中变量值范围的函数间分析得到被调用函数单元的函数摘要;C、在控制流图的入口和出口节点之间选取一条路径p,如果路径中含有循环语句节点,则采用进入循环体0次或1次的策略;D、从所述路径p的入口节点开始,计算各语句节点处的上下文状态;如果存在某节点的上下文状态中有变量取值为空的情况,则表示所述路径p为不可达路径,否则,为可达路径。应用本发明的方法,能够提高程序静态分析和测试用例生成的效率,以提高软件测试效率。
申请公布号 CN102073587B 申请公布日期 2013.07.03
申请号 CN201010622214.4 申请日期 2010.12.27
申请人 北京邮电大学 发明人 王雅文;宫云战;肖庆;杨朝红;金大海;李青;王思岚
分类号 G06F11/36(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 北京汇泽知识产权代理有限公司 11228 代理人 程殿军
主权项 一种程序中不可达路径的静态检测方法,其特征在于,该方法包括以下步骤:A、对待测试程序的函数单元进行词法分析、语法分析及语义分析,生成函数的控制流图;B、通过所述待测试程序中变量值范围的函数间分析得到被调用函数单元的函数摘要;C、在控制流图的入口和出口节点之间选取一条路径p,如果路径中含有循环语句节点,则采用进入循环体0次或1次的策略;D、从所述路径p的入口节点开始,计算各语句节点处的上下文状态;如果存在某节点的上下文状态中有变量取值为空的情况,则表示所述路径p为不可达路径,否则,为可达路径;具体包括: D1、设路径p的入口节点为entry,出口节点为exit,并将所述入口节点设为当前节点n;D2、计算当前节点n在路径p中的上下文状态,即应用扩展区间技术计算各变量的取值范围情况;包括:D21、若所述当前节点n为入口节点entry,取函数定义的参数列表,并将所有的参数取值初始区间设为Unknown;否则执行步骤D22;D22、取所述当前节点n在路径p上的前驱节点上出现的每一个变量的区间取值,设为该变量在当前节点n上的初始区间值;D23、若当前节点n为变量声明语句,将变量的取值区间设为变量类型的默认区间;否则执行步骤D24;D24、若所述当前节点n包含函数调用,根据当前节点n处的上下文状态和函数摘要更新函数调用的返回值区间以及其他与上下文环境相关的变量的区间值;否则执行步骤D25;D25、若所述当前节点n包含赋值语句,则计算右端表达式的区间取值并以此值来更新被赋值变量的取值区间;否则执行步骤D26;D26、若所述当前节点n所对应的语句类型为分支条件判断语句,则根据出边的取值来计算该节点所关联的每一变量的新取值区间;否则执行步骤D27;D27、若所述当前节点n所对应的语句类型为循环条件判断语句,则根据路径p中包含循环体的次数来计算各变量的取值区间;D3、判断当前节点n处的上下文状态中是否出现变量取值为空的情况,若是,则执行步骤D4,否则执行步骤D5;D4、当前路径p为不可达路径,结束路径遍历;D5、判断当前节点n是否为出口节点exit;若是,则当前路径p为可达路径,结束路径遍历;否则,取当前节点的下一个节点作为目标节点,返回步骤D2。
地址 100876 北京市海淀区西土城路10号