[发明专利]一种程序中不可达路径的静态检测方法有效
申请号: | 201010622214.4 | 申请日: | 2010-12-27 |
公开(公告)号: | CN102073587A | 公开(公告)日: | 2011-05-25 |
发明(设计)人: | 王雅文;宫云战;肖庆;杨朝红;金大海;李青翠;王思岚 | 申请(专利权)人: | 北京邮电大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 北京汇泽知识产权代理有限公司 11228 | 代理人: | 程殿军 |
地址: | 100876 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序 不可 路径 静态 检测 方法 | ||
1.一种程序中不可达路径的静态检测方法,其特征在于,该方法包括以下步骤:
A、对待测试程序的函数单元进行词法分析、语法分析及语义分析,生成函数的控制流图;
B、通过所述待测试程序中变量值范围的函数间分析得到被调用函数单元的函数摘要;
C、在控制流图的入口和出口节点之间选取一条路径p,如果路径中含有循环语句节点,则采用进入循环体0次或1次的策略;
D、从所述路径p的入口节点开始,计算各语句节点处的上下文状态;如果存在某节点的上下文状态中有变量取值为空的情况,则表示所述路径p为不可达路径,否则,为可达路径。
2.根据权利要求1所述的程序中不可达路径的静态检测方法,其特征在于,所述步骤C进一步包括:在所述控制流图中,同一节点的多次出现视为不同的路径节点。
3.根据权利要求1所述的程序中不可达路径的静态检测方法,其特征在于,步骤D进一步包括:
D1、设路径p的入口节点为entry,出口节点为exit,并将所述入口节点设为当前节点;
D2、计算当前语句节点n在路径p中的上下文状态,即应用扩展区间技术计算各变量的取值范围情况;
D3、判断节点n处的上下文状态中是否出现变量取值为空的情况,若是,则执行步骤D4,否则执行步骤D5;
D4、当前路径p为不可达路径,结束路径遍历;
D5、判断当前节点是否为出口节点exit;若是,则当前路径p为可达路径,结束路径遍历;否则,取当前节点的下一个节点作为目标节点,返回步骤D2。
4.根据权利要求3所述的程序中不可达路径的静态检测方法,其特征在于,步骤D2的进一步包括:
D21、若所述当前节点为入口节点entry,取函数定义的参数列表,并将所有的参数取值初始区间设为Unknown;否则执行步骤D22。
D22、取所述当前节点在路径p上的前驱节点上出现的每一个变量的区间取值,设为该变量在当前节点上的初始区间值;
D23、若所述当前节点为变量声明语句,将该变量的取值区间设为该变量类型的默认区间;否则执行步骤D24;
D24、若所述当前节点包含函数调用,根据当前节点处的上下文状态和函数摘要更新函数调用的返回值区间以及其他与上下文环境相关的变量的区间值;否则执行步骤D25;
D25、若所述当前节点包含赋值语句,则计算右端表达式的区间取值并以此值来更新被赋值变量的取值区间;否则执行步骤D26;
D26、若所述当前节点所对应的语句类型为分支条件判断语句,则根据出边的取值来计算该节点所关联的每一变量的新取值区间;否则执行步骤D27;
D27、若所述当前节点n所对应的语句类型为循环条件判断语句,则根据路径p中包含循环体的次数来计算各变量的取值区间。
5.根据权利要求4所述的程序中不可达路径的静态检测方法,其特征在于,所述步骤D23进一步包括:
D231、若所述当前节点为数值类型变量的声明语句,则将变量的取值区间设为{[MIN,MAX]};否则执行步骤D232;
D232、若所述当前节点为布尔类型变量的声明语句,则将变量的取值区间设为TRUE_OR_FALSE;否则执行步骤D233;
D233、若所述当前节点为指针类型变量vp的声明语句,则为vp生成一个取值六元组,其中包括以下6个域:vp的变量标识、vp的解引用值DerefVal(vp)、vp将要关联的内存空间标识Mem(vp)、vp的别名集AliasSet(vp)、vp在Mem(vp)上的偏移位置Offset(vp)以及与Mem(vp)关联的指针变量集合RelVar(vp)。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京邮电大学,未经北京邮电大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010622214.4/1.html,转载请声明来源钻瓜专利网。