CN102073587B - 一种程序中不可达路径的静态检测方法 - Google Patents
一种程序中不可达路径的静态检测方法 Download PDFInfo
- Publication number
- CN102073587B CN102073587B CN 201010622214 CN201010622214A CN102073587B CN 102073587 B CN102073587 B CN 102073587B CN 201010622214 CN201010622214 CN 201010622214 CN 201010622214 A CN201010622214 A CN 201010622214A CN 102073587 B CN102073587 B CN 102073587B
- Authority
- CN
- China
- Prior art keywords
- variable
- node
- value
- path
- interval
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开一种程序中不可达路径的静态检测方法,该方法包括:A、对待测试程序的函数单元进行词法分析、语法分析及语义分析,生成函数的控制流图;B、通过所述待测试程序中变量值范围的函数间分析得到被调用函数单元的函数摘要;C、在控制流图的入口和出口节点之间选取一条路径p,如果路径中含有循环语句节点,则采用进入循环体0次或1次的策略;D、从所述路径p的入口节点开始,计算各语句节点处的上下文状态;如果存在某节点的上下文状态中有变量取值为空的情况,则表示所述路径p为不可达路径,否则,为可达路径。应用本发明的方法,能够提高程序静态分析和测试用例生成的效率,以提高软件测试效率。
Description
技术领域
本发明涉及软件测试技术,尤其涉及一种程序中不可达路径的静态检测方法。
背景技术
在软件的测试过程中,如果能够尽早发现程序中存在不可达路径,可以避免在动态测试阶段耗费大量的人力物力来为不可达路径生成测试用例。因此,程序中不可达路径的检测对于软件开发的整个过程都具有十分重要的意义。
目前,利用静态分析方法来检测程序中的不可达路径,尽管还不可能检测出所有的不可达路径,但却可以通过分析路径条件中的变量取值范围信息来确定一部分不可达路径,并可验证该程序中检测出的不可达路径的结果百分之百正确,这对测试的精确性的提高是非常有益的。
程序不可达路径信息,不仅可以优化一些基于数据流分析的工具,更有利于软件测试过程的实现,主要体现在以下几个方面:
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;
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)。
所述步骤D25进一步包括:
D251、若所述当前节点上被赋值变量va为数值类型,则计算右端数值表达式的区间取值并以此值来更新va的取值区间;否则执行步骤D252;
D252、若所述当前节点上被赋值变量va为布尔类型,则计算右端数值表达式的区间取值并以此值来更新va的取值区间;否则执行步骤D253;
D253、若所述当前节点上赋值号左端为指针变量vp的解引用,则计算右端表达式的值并以此值来更新AliasSet(vp)中各元素的解引用值;否则执行步骤D254;
D254、若所述当前节点上赋值号左端为指针变量vp,右端为另一指针变量vp′,则将vp从AliasSet(vp)和RelVar(vp)中删除,加入AliasSet(vp′)和Alias Set(vp′)中,并用vp′的取值六元组中各个域值来更新vp的取值六元组中的对应域值;否则执行步骤D255;
D255、若所述当前节点上赋值号左端为指针变量vp,右端为变量vc的取地址操作,用vc的取值来更新DerefVal(vp);否则执行步骤D256;
D256、若所述当前节点上赋值号左端为指针变量vp,右端为指针变量vp′与常量C的“加”“减”运算,则将vp加入RelVar(vp′),用vp′的取值六元组中各个域值来更新vp的取值六元组中的对应域值,并根据常量C重新计算vp在内存空间上的偏移位置Offset(vp),若RelVar(vp′)中存在偏移位置与Offset(vp)相同的变量,则这些变量与vp互为别名。
所述步骤D27进一步包括:
D271、若当前路径p不包含节点n的“真”分支,根据各变量的初始取值区间来计算n中条件表达式取“假”值时的变量取值区间;否则执行步骤D272;
D272、若当前路径p包含节点n的“真”分支,对循环相关变量分别运用拓宽widening算子和收窄narrowing算子进行迭代计算,直到各变量的取值区间稳定为止。
本发明所提供的程序中不可达路径的静态检测方法,具有以下优点:
该静态检测方法基于静态分析技术,不用运行被测程序,所需的人力和时间成本很低;同时检测结果的准确率为100%,即检测出的不可达路径确定为实际的不可达路径。除此之外,该方法还可广泛应用于诸如路径敏感的数据流分析、测试用例自动生成等软件测试的各个子领域,能够提高软件测试的效率。
附图说明
图1为本发明静态检测程序不可达路径的总体流程示意图;
图2为本发明计算路径上语句节点的流程示意图;
图3为本发明实施例的源程序test1.c中函数calc1的一条不可达路径;
图4为本发明实施例的源程序test2.c中函数calc2的一条不可达路径;
具体实施方式
下面结合附图及本发明的实施例对本发明的静态检测方法作进一步详细的说明。
为了便于后文的说明,下面首先简单介绍控制流图、上下文状态、函数摘要、指针变量的六元组模型、抽象解释中的拓宽/收窄算子等概念。
1、控制流图(CFG),是一种反映程序逻辑控制流程的有向图。通常一个函数的控制流图可表示为(N,E,entry,exit),其中:N代表节点的集合,反映程序中的简单语句和复合语句的条件判断以及控制流汇合点等;E代表有向边的集合,反映程序中语句间的控制流关系;entry为函数的固定唯一入口节点;exit为函数唯一的出口节点。
2、一条路径p上变量的取值信息称为路径状态,路径状态由p中各节点处的上下文状态组成。上下文状态用于近似地表示程序动态执行时的变量取值信息,通过一组变量及其抽象取值来描述,C:Variables×Intervals,Variables代表变量集合,Intervals代表变量取值范围;C(i)代表变量i在C中取值:
例如:C1={(i,{[-1,3],[6,10]}),(b,TRUE)};则C1(i)={[-1,3],[6,10]},C1(j)=⊥。
3、利用函数摘要来代替函数调用是一种灵活的跨函数分析方法。一般首先由每个函数的本地分析算法为其创建一个函数摘要,当分析到该函数的调用时,就将该函数摘要作为函数调用的替代进行使用。
这里,PostCond是函数f的后置条件pc的集合,即f执行后对上下文的影响。pc={value(v1),value(v2),...,value(vn)}(vi∈Var(f),i=1,2,...,n),其中vi是函数f中能够对调用点上下文环境产生影响的因素,包括全局变量、类成员及返回值等。Context是上下文状态的集合。若想进一步了解具体函数摘要的生成方法,请参见申请号200910084547.3、名称为“应用跨函数分析的软件测试方法”的发明申请的公开文件。
4、对于指针类型变量vp,本发明采用一个六元组模型<vp,DerefVal,Mem,AliasSet,Offset,RelVar>对其取值情况进行表示和计算,这6个域的具体含义如下:
vp:变量标识;
DerefVal:vp的解引用值;
Mem:vp所指向的内存空间标识;
AliasSet:vp的别名集合;
Offset:vp在所指向内存空间Mem上的偏移位置;
RelVar:与内存空间Mem相关联的指针变量集合。
5、一条路径中循环变量的值范围分析计算是静态分析的一大难点,因为循环的确切次数一般很难得到。本方法在选取包含循环的路径时采用“Z路径”方法,即路径经过循环体的次数为0或1。这里的循环“0次”是指路径不进入循环体;“1次”指当前路径会进入循环体,对应于实际执行时的K次,K由循环变量经过拓宽/收窄算子迭代稳定后的结果确定。基于抽象解释理论中的拓宽/收窄(widening/narrowing)算子,对循环体中的变量取值区间进行迭代求精,使得语句的上下文状态快速收敛,又能在得到保守解的前提下使之更加“逼近”精确解。
图1为本发明静态检测程序不可达路径的总体流程示意图,如图1所示,该流程包括如下步骤:
步骤10、对待测试程序的函数单元进行词法分析、语法分析及语义分析,生成函数的控制流图。
步骤11、通过所述待测试程序中变量值范围的函数间分析得到被调用函数单元的函数摘要。
步骤12、在控制流图的入口和出口节点之间选取一条路径p,如果路径中含有循环语句节点,则采用进入循环体0次或1次的策略。
这里,所述控制流图中,同一节点的多次出现视为不同的路径节点。
步骤13、从所述路径p的入口节点开始,计算各语句节点处的上下文状态;如果存在某节点的上下文状态中有变量取值为空的情况,则表示所述路径p为不可达路径,否则,为可达路径。
上述流程中,所述步骤13进一步包括如下步骤:
步骤131、设路径p的入口节点为entry,出口节点为exit,并将所述入口节点设为当前节点。
步骤132、计算当前语句节点n在路径p中的上下文状态,即应用扩展区间技术计算各变量的取值范围情况。
步骤133、判断节点n处的上下文状态中是否出现变量取值为空的情况,若是,则执行步骤134,否则执行步骤135。
步骤134、当前路径p为不可达路径,结束路径遍历。
步骤135、判断当前节点是否为出口节点exit;若是,则当前路径p为可达路径,结束路径遍历;否则,取当前节点的下一个节点作为目标节点,返回步骤132。
若想要进一步了解具体如何应用扩展区间来表示和计算变量的取值信息,请参见专利号为ZL200810114262.5、名称为“应用区间运算的软件测试方法”的一文。
上述流程中,所述步骤132进一步包括如下步骤:
步骤1321、若所述当前节点为入口节点entry,取函数定义的参数列表,并将所有的参数取值初始区间设为Unknown;否则执行步骤1322。
步骤1322、取所述当前节点在路径p上的前驱节点上出现的每一个变量(超出作用域的变量除外)的区间取值,设为该变量在当前节点上的初始区间值。
步骤1323、若所述当前节点为变量声明语句(不含初始化操作),将该变量的取值区间设为该变量类型的默认区间;否则执行步骤1324。
步骤1324、若所述当前节点包含函数调用,根据当前节点处的上下文状态和函数摘要更新函数调用的返回值区间以及其他与上下文环境相关的变量(如全局变量、类成员变量和参数)的区间值;否则执行步骤1325。
步骤1325、若所述当前节点包含赋值语句(含带有初始化操作的声明语句及复合赋值语句),则计算右端表达式的区间取值并以此值来更新被赋值变量的取值区间;否则执行步骤1326。
步骤1326、若所述当前节点所对应的语句类型为分支条件判断语句(含单变量多分支判断语句),则根据出边的取值(“真”、“假”或常量值)来计算该节点所关联的每一变量的新取值区间;否则执行步骤1327。
步骤1327、若所述当前节点n所对应的语句类型为循环条件判断语句,则根据路径p中包含循环体的次数(0次或1次)来计算各变量的取值区间。
上述步骤1323具体还包括:
步骤13231、若所述当前节点为数值类型(包括整数型、浮点型和字符型)变量的声明语句,则将变量的取值区间设为{[MIN,MAX]};否则执行步骤13232。
步骤13232、若所述当前节点为布尔类型变量的声明语句,则将变量的取值区间设为TRUE_OR_FALSE;否则执行步骤13233。
步骤13233、若所述当前节点为指针类型变量vp的声明语句,则为vp生成一个取值六元组,其中包括以下6个域:vp的变量标识、vp的解引用值DerefVal(vp)、vp将要关联的内存空间标识Mem(vp)、vp的别名集AliasSet(vp)、vp在Mem(vp)上的偏移位置Offset(vp)以及与Mem(vp)关联的指针变量集合RelVar(vp)。
图2所示的计算路径上语句节点的流程示意图中,所述步骤1325进一步包括如下步骤:
步骤13251、若所述当前节点上被赋值变量va为数值类型(包括整数型、浮点型和字符型),则计算右端数值表达式的区间取值并以此值来更新va的取值区间;否则执行步骤13252。
步骤13252、若所述当前节点上被赋值变量va为布尔类型,则计算右端数值表达式的区间取值并以此值来更新va的取值区间;否则执行步骤13253。
步骤13253、若所述当前节点上赋值号左端为指针变量vp的解引用,则计算右端表达式的值并以此值来更新AliasSet(vp)中各元素的解引用值;否则执行步骤13254。
步骤13254、若所述当前节点上赋值号左端为指针变量vp,右端为另一指针变量vp′,则将vp从AliasSet(vp)和RelVar(vp)中删除,加入AliasSet(vp′)和AliasSet(vp′)中,并用vp′的取值六元组中各个域值来更新vp的取值六元组中的对应域值;否则执行步骤13255。
步骤13255、若所述当前节点上赋值号左端为指针变量vp,右端为变量vc的取地址操作,用vc的取值来更新DerefVal(vp);否则执行步骤13256。
步骤13256、若所述当前节点上赋值号左端为指针变量vp,右端为指针变量vp′与常量C的“加”“减”运算,则将vp加入RelVar(vp′),用vp′的取值六元组中各个域值来更新vp的取值六元组中的对应域值,并根据常量C重新计算vp在内存空间上的偏移位置Offset(vp),若RelVar(vp′)中存在偏移位置与Offset(vp)相同的变量,则这些变量与vp互为别名。
所述步骤1327进一步包括如下步骤:
步骤13271、若当前路径p不包含节点n的“真”分支(即循环体),根据各变量的初始取值区间来计算n中条件表达式取“假”值时的变量取值区间;否则执行步骤13272。
步骤13272、若当前路径p包含节点n的“真”分支(即循环体),对循环相关变量分别运用拓宽(widening)算子和收窄(narrowing)算子进行迭代计算,直到各变量的取值区间稳定为止。
下面对具体的实施例结合图3、图4所示的控制流图对本发明的程序不可达路径的静态检测方法作进一步的说明。
对于源程序test1.c,方法calc1的控制流图如附图3所示,图中节点名字的最后一个数字标识了产生的顺序号,边上标识的最后一个数字标识了该边产生的顺序号;以“T”开头命名的边表示为条件表达式的“真”分支,以“F”开头命名的边则表示为“假”分支。符号表中与区间运算有关的变量为m和n,m和n的初始取值区间集为{[-inf,inf]}。
对于该图中虚线标识部分所示的一条路径:0→1→2→4→5→6→7→8→9→10(数字表示控制流图中节点的序号),沿着这条路径计算各节点处的上下文状态,路径状态标识在图中的节点内。当到达节点while_out_8时,n的取值区间为空,根据上述不可达路径检测方法,当前路径即为不可达路径。
test1.c源代码:
再如,对于下面的源程序test2.c中的函数calc2,该函数包含2个条件判断语句,假设待分析的路径如图4中的虚线标识部分所示:0→1→2→4→5→6→7→8→9→10→11,沿着这条路径计算各节点处的上下文状态。当到达节点if_head_5(源代码的第6行)时,由于p和q互为别名,因此条件判断结果为“永假”,对应的“真”分支(源代码的第7行)上p和q的取值为空,表示当前路径不可达。
test2.c源代码:
利用本专利所述的程序不可达路径检测方法对10个开源的Java软件源代码进行了分析,其测试工程的信息如表1所示,检测结果如表2所示。对照表1和表2可知,随着函数的总路径数目增多,不可达路径所占比例也相应增大,其主要原因在于结构复杂的函数包含更多的条件判断语句,不同条件分支中的变量值范围存在更多的矛盾组合情况。
表1:10个开源Java软件的基本信息
表2:10个Java开源软件的不可达路径检测结果
函数的总路径数范围 | 函数个数 | 不可达路径比例 |
[1,2) | 34,532 | 0.00% |
[2,4) | 12,428 | 0.16% |
[4,8) | 4,686 | 2.20% |
[8,16) | 2,411 | 6.41% |
[16,32) | 1,104 | 11.13% |
[32,64) | 581 | 16.65% |
[64,128) | 341 | 25.27% |
[128,256) | 196 | 32.16% |
[256,512) | 123 | 30.82% |
[512,1024) | 118 | 35.33% |
[1024,2048) | 95 | 35.43% |
[2048,4096) | 54 | 44.64% |
[4096,8192) | 53 | 43.22% |
[8192,16384) | 45 | 46.85% |
[16384,32768) | 21 | 52.42% |
[32768,65536) | 33 | 49.73% |
[65536,131072) | 15 | 59.45% |
[131072,262144) | 26 | 56.17% |
[262144,524288) | 10 | 60.37% |
[524288,1048576) | 16 | 50.80% |
[1048576,2097152) | 8 | 66.82% |
[2097152,4194304) | 9 | 83.38% |
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (2)
1.一种程序中不可达路径的静态检测方法,其特征在于,该方法包括以下步骤:
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。
2.根据权利要求1所述的程序中不可达路径的静态检测方法,其特征在于,所述步骤C进一步包括:在所述控制流图中,同一节点的多次出现视为不同的路径节点。
3.根据权利要求1所述的程序中不可达路径的静态检测方法,其特征在于,所述步骤D23进一步包括:
D231、若所述当前节点n为数值类型变量的声明语句,则将变量的取值区间设为{[MIN,MAX]};否则执行步骤D232;
D232、若所述当前节点n为布尔类型变量的声明语句,则将变量的取值区间设为TRUE_OR_FALSE;否则执行步骤D233;
D233、若所述当前节点n为指针变量vp的声明语句,则为vp生成一个取值六元组,其中包括以下6个域:vp的变量标识、vp的解引用值DerefVal(vp)、vp将要关联的内存空间标识Mem(vp)、vp的别名集AliasSet(vp)、vp在Mem(vp)上的偏移位置Offset(vp)以及与Mem(vp)关联的指针变量集合RelVar(vp)。
4.根据权利要求3所述的程序中不可达路径的静态检测方法,其特征在于,步骤D25进一步包括:
D251、若所述当前节点n上被赋值变量va为数值类型,则计算右端数值表达式的区间取值并以此值来更新va的取值区间;否则执行步骤D252;
D252、若所述当前节点n上被赋值变量va为布尔类型,则计算右端数值表达式的区间取值并以此值来更新va的取值区间;否则执行步骤D253;
D253、若所述当前节点n上赋值号左端为指针变量vp的解引用,则计算右端表达式的值并以此值来更新vp的别名集AliasSet(vp)中各元素的解引用值;否则执行步骤D254;
D254、若所述当前节点n上赋值号左端为指针变量vp,右端为另一指针变量vp',则将vp从AliasSet(vp)和指针变量集合RelVar(vp)中删除,加入AliasSet(vp')和AliasSet(vp')中,并用vp'的取值六元组中各个域值来更新vp的取值六元组中的对应域值;否则执行步骤D255;
D255、若所述当前节点n上赋值号左端为指针变量vp,右端为变量vc的取地址操作,用vc的取值来更新vp的解引用值DerefVal(vp);否则执行步骤D256;
D256、若所述当前节点n上赋值号左端为指针变量vp,右端为指针变量vp'与常量C的“加”“减”运算,则将vp加入RelVar(vp'),用vp'的取值六元组中各个域值来更新vp的取值六元组中的对应域值,并根据常量C重新计算vp在内存空间上的偏移位置Offset(vp),若RelVar(vp')中存在偏移位置与Offset(vp)相同的变量,则这些变量与vp互为别名。
5.根据权利要求1所述的程序中不可达路径的静态检测方法,其特征在于,所述步骤D27进一步包括:
D271、若当前路径p不包含当前节点n的“真”分支,根据各变量的初始取值区间来计算n中条件表达式取“假”值时的变量取值区间;否则执行步骤D272;
D272、若当前路径p包含当前节点n的“真”分支,对循环相关变量分别运用拓宽widening算子和收窄narrowing算子进行迭代计算,直到各变量的取值区间稳定为止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010622214 CN102073587B (zh) | 2010-12-27 | 2010-12-27 | 一种程序中不可达路径的静态检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010622214 CN102073587B (zh) | 2010-12-27 | 2010-12-27 | 一种程序中不可达路径的静态检测方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102073587A CN102073587A (zh) | 2011-05-25 |
CN102073587B true CN102073587B (zh) | 2013-07-03 |
Family
ID=44032133
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010622214 Expired - Fee Related CN102073587B (zh) | 2010-12-27 | 2010-12-27 | 一种程序中不可达路径的静态检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102073587B (zh) |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102279795B (zh) * | 2011-08-24 | 2013-10-09 | 北京神州绿盟信息安全科技股份有限公司 | 一种测试方法及装置 |
CN102279799B (zh) * | 2011-08-31 | 2014-03-12 | 中国信息安全测评中心 | 基于路径包含处理方法的源代码静态分析方法及其装置 |
CN102495800A (zh) * | 2011-12-05 | 2012-06-13 | 北京邮电大学 | 循环语句中变量抽象取值的迭代求精方法 |
CN102708053B (zh) * | 2012-04-27 | 2017-10-20 | 北京邮电大学 | 程序路径中确定函数调用的上下文环境影响的方法 |
CN102968375B (zh) * | 2012-11-30 | 2015-10-28 | 中国矿业大学 | 基于关联规则挖掘的不可达路径检测方法 |
CN103207833B (zh) * | 2013-04-02 | 2016-04-06 | 北京邮电大学 | 软件测试中循环代码的处理方法与系统 |
CN104731696B (zh) * | 2013-12-19 | 2017-10-10 | 腾讯科技(深圳)有限公司 | 定位程序代码中bug的方法及相关装置 |
CN103914381B (zh) * | 2014-03-25 | 2017-06-13 | 北京邮电大学 | 生成时序安全属性类缺陷模式相关的函数摘要信息的方法 |
CN104407969B (zh) * | 2014-11-03 | 2017-04-05 | 东南大学 | 一种基于路径特征的程序执行轨迹状态自动获取方法 |
CN106940772B (zh) * | 2016-01-05 | 2020-09-18 | 阿里巴巴集团控股有限公司 | 变量对象的跟踪方法及装置 |
CN105868103A (zh) * | 2016-03-23 | 2016-08-17 | 中国联合网络通信集团有限公司 | 静态检测方法和静态检测装置 |
CN106021116B (zh) * | 2016-06-07 | 2018-07-13 | 北京信息科技大学 | 复杂系统中不可达函数调用路径检测方法 |
US10642584B2 (en) * | 2017-09-01 | 2020-05-05 | Shenzhen Qianhai Sourcebrella Inc. Ltd. | Defect detection method, device, system and computer readable medium |
CN109522232B (zh) * | 2018-11-16 | 2021-10-22 | 中山大学 | 空指针检测方法 |
CN112181426B (zh) * | 2020-09-19 | 2021-06-25 | 中国人民解放军战略支援部队信息工程大学 | 一种汇编程序控制流路径检测方法及装置 |
CN113010891B (zh) * | 2021-02-26 | 2023-02-07 | 中科天齐(山西)软件安全技术研究院有限公司 | 一种应用程序安全检测方法、装置、电子设备和存储介质 |
CN113010890B (zh) * | 2021-02-26 | 2023-02-07 | 中科天齐(山西)软件安全技术研究院有限公司 | 一种应用程序安全检测方法、装置、电子设备和存储介质 |
CN117369795B (zh) * | 2023-12-06 | 2024-03-01 | 中国科学院自动化研究所 | 用于无人机决策的行为树模型可达性分析方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
-
2010
- 2010-12-27 CN CN 201010622214 patent/CN102073587B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714118A (zh) * | 2009-11-20 | 2010-05-26 | 北京邮电大学 | 一种二进制代码缓冲区溢出漏洞的检测器及其检测方法 |
Non-Patent Citations (4)
Title |
---|
基于缺陷模式的软件测试中的区间运算应用;杨朝红等;《计算机辅助设计与图形学学报》;20081231;第20卷(第12期);1630-1635 * |
杨朝红等.基于缺陷模式的软件测试中的区间运算应用.《计算机辅助设计与图形学学报》.2008,第20卷(第12期),1630-1635. |
程序中不可达路径的检测方法;陈蕊等;《计算机工程》;20060831;第32卷(第16期);86-88 * |
陈蕊等.程序中不可达路径的检测方法.《计算机工程》.2006,第32卷(第16期),86-88. |
Also Published As
Publication number | Publication date |
---|---|
CN102073587A (zh) | 2011-05-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102073587B (zh) | 一种程序中不可达路径的静态检测方法 | |
CN111104335B (zh) | 一种基于多层次分析的c语言缺陷检测方法及装置 | |
US7617489B2 (en) | Method and system for detecting interprocedural vulnerability by analysis of source code | |
Kwon et al. | Mantis: Automatic performance prediction for smartphone applications | |
CN104899147B (zh) | 一种面向安全检查的代码静态分析方法 | |
US20060253739A1 (en) | Method and apparatus for performing unit testing of software modules with use of directed automated random testing | |
US7530056B1 (en) | Method and system for detecting runtime defects in a program by comparing correct and incorrect runs | |
CN108664391B (zh) | 一种面向程序状态的故障分类方法、变异测试方法及设备 | |
CN102402479B (zh) | 用于静态分析的中间表示结构 | |
CN101286132A (zh) | 一种基于软件缺陷模式的测试方法及系统 | |
Angerer et al. | Configuration-aware change impact analysis (t) | |
CN104536883A (zh) | 一种静态缺陷检测方法及其系统 | |
Padhye et al. | Travioli: A dynamic analysis for detecting data-structure traversals | |
CN101710303B (zh) | 基于流敏感上下文敏感指向图的内存泄漏检测方法 | |
Liuying et al. | Test selection from UML statecharts | |
Altisen et al. | SASA: a SimulAtor of Self-stabilizing Algorithms | |
Gao et al. | A systematic regression testing method and tool for software components | |
Ostrowski et al. | Knowledge-based software testing agent using evolutionary learning with cultural algorithms | |
Aslanyan et al. | Static analysis methods for memory leak detection: A survey | |
US10599554B2 (en) | Dynamic instrumentation based on detected errors | |
CN114691197A (zh) | 代码分析方法、装置、电子设备和存储介质 | |
Ibing | SMT-constrained symbolic execution for Eclipse CDT/Codan | |
CN112699376A (zh) | 源代码逻辑漏洞检测方法、装置、计算机设备及存储介质 | |
Popoola et al. | Evolution of Bad Smells in LabVIEW Graphical Models. | |
Zhou et al. | A static detecting model for invalid arithmetic operation based on alias analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20130703 Termination date: 20171227 |