CN103559122B - 基于程序行为切片的测试案例约减方法 - Google Patents
基于程序行为切片的测试案例约减方法 Download PDFInfo
- Publication number
- CN103559122B CN103559122B CN201310479195.8A CN201310479195A CN103559122B CN 103559122 B CN103559122 B CN 103559122B CN 201310479195 A CN201310479195 A CN 201310479195A CN 103559122 B CN103559122 B CN 103559122B
- Authority
- CN
- China
- Prior art keywords
- path
- node
- statement
- program
- dependence
- 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
- 238000012360 testing method Methods 0.000 title claims abstract description 78
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000004458 analytical method Methods 0.000 claims abstract description 24
- 238000004364 calculation method Methods 0.000 claims abstract description 14
- 238000010276 construction Methods 0.000 claims abstract description 7
- 230000003068 static effect Effects 0.000 claims abstract description 6
- 230000005540 biological transmission Effects 0.000 claims description 8
- 238000004880 explosion Methods 0.000 abstract description 4
- 238000000605 extraction Methods 0.000 abstract description 2
- 230000006399 behavior Effects 0.000 description 105
- 230000004087 circulation Effects 0.000 description 8
- 238000010586 diagram Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000005206 flow analysis Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 238000013138 pruning Methods 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 230000031068 symbiosis, encompassing mutualism through parasitism Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提出一种基于程序行为切片的测试案例约减方法,在无需对全部程序路径进行扫描的情况下,生成可以覆盖全部程序行为的测试案例集,缓解程序测试面临的状态空间爆炸问题。在静态分析阶段该方法根据输入的程序代码分析程序的控制流和信息流,提取程序的控制依赖和数据依赖;根据程序的控制依赖和数据依赖,计算程序的潜在依赖;在控制依赖,数据依赖和潜在依赖的基础上,构建程序的组合依赖;在动态执行阶段根据执行路径和依赖关系计算被路径覆盖的程序行为切片和未被覆盖的程序行为切片,根据未被覆盖的程序行为切片来引导符号执行生成能覆盖新的程序切片的路径。相比现有的符号执行方法,本方法可以保证测试案例集的有效性,同时显著减少生成的测试案例数目。
Description
技术领域
本发明涉及可信软件及软件测试领域,特别涉及模型检验和程序控制流分析技术中测试案例约减方法。
背景技术
软件测试是用来保证软件质量的基本手段,并且也是软件开发过程中最耗费人力和物力的过程。在正常情况下,程序的输入空间往往很大甚至不能穷尽,测试人员不可能运行完所有的测试用例。因此选择和生成有效的具有代表性的测试案例集,是软件测试中最基础的需求和问题。传统的挑选测试案例的方法根据其测试标准主要包括代码覆盖、分支覆盖和路径覆盖。
基于代码覆盖和分支覆盖的测试案例生成方法在工业上应用广泛,但是这两种方法在发现程序错误方面并没有比随机案例生成方法具有统计意义上的优势。
路径覆盖测试案例生成方法在这几年得到了大力发展,各种工具也不断出现,比如JPF-SE,Concolic,KLEE等等,但都面临程序状态空间爆炸的问题。这些路径覆盖的测试案例生成工具都是基于符号执行实现的。符号执行是20世纪70年代提出的一种程序验证方法,是一种基于符号化的模型检验方法。广泛用于符号调试,测试案例生成等。其核心思想是使用符号值代替具体的变量输入,并使用符号表达式来表示程序中各变量的值。最终,程序的输出值被转化为一个以符号值作为输入的函数。符号执行将程序抽象为符号执行树,其中顺序语句对应着树的计算节点,分支语句对应着分支节点,而对于循环语句,将其按循环次数展开为语义上等价的分支语句。一般,一条循环语句对应一组分支节点。可以认为,在符号执行过程中,程序只有顺序和分支两种结构。符号执行的过程本质上是路径条件的构造过程。路径条件指的是对于执行该路径的测试案例,程序输入值所需要满足的数学约束条件。因而一个路径条件唯一地对应一条执行路径。一个路径条件由一组子条件(sub-condition)组成,每一个被执行分支的条件作为一个子条件。在初始时路径条件为true,在探索程序的过程中,每遇到一个分支语句,就更新路径条件,将被执行分支的条件加入到路径条件中,公式为PC=PC^newsub-condition。由于每一个分支语句都对应着true和false两个分支,而符号执行基于静态分析,变量没有具体的数值,因而无法确定执行哪一条分支。所以对两条分支都进行探索(搜索顺序可按需定义,深度优先,广度优先等),即分别以两个分支的条件作为子条件来更新路径条件。这样就得到了两个新的路径条件,对应两条不同的执行路径。之后,继续对这两条路径分别进行探索。符号执行实现了对程序的全路径探索。当程序探索结束时就得到了被测程序所有执行路径的路径条件。最后,检查所有得到的路径条件,如果路径条件是无法被满足的,则说明该路径是一条不可执行路径,如果路径条件可以被满足,则说明该路径是一条可执行路径。将路径条件输入约束求解器即可解出对应的测试案例。
符号执行存在两个阻碍,使得其难以大规模使用。1)符号执行是一种基于搜索的遍历算法,需要对程序的所有分支进行遍历,虽然可以通过一些附加的剪枝条件进行优化,但其算法的复杂度非常高,为O(2n),其中n为被测程序中条件语句(包括分支,循环,逻辑运算)的数目;2)符号执行不能很好地解决测试案例集更新的问题,每次代码进行修改后,只能重新遍历一次符号执行树来生成一个新的测试案例集。由前面的分析可知,重新生成一个测试案例集的时间开销比较大,而且一个软件可能会频繁变更,如果每次变更之后都通过符号执行生成一个新的测试案例集,测试的效率就会受到影响。
如果一种测试案例生成方法能够和全部路径覆盖同样的程序行为并且避免列举全部程序路径将能大大提高程序的测试效率。
发明内容:
本发明提出一种基于程序行为切片的测试案例约减方法,在无需对全部程序路径进行扫描的情况下,生成可以覆盖全部程序行为的测试案例集,缓解程序测试面临的状态空间爆炸问题。
为了实现上述目的,本发明采用如下技术方案:
基于程序行为切片的测试案例约减方法,包括如下步骤:
S1)根据输入的待测程序,利用静态程序分析方法,分析待测程序的控制流和信息流,提取待测程序的控制依赖和数据依赖;
S2)根据待测程序的控制依赖和数据依赖,计算待测程序的潜在依赖;
S3)根据待测程序的控制依赖、数据依赖和潜在依赖,在程序控制流图上构建程序的组合依赖;
S4)利用符号执行方法随机生成一条初始路径,并将对应初始路径的测试案例存入有效测试案例集;
S5)计算新生成的路径覆盖的程序行为切片,第一次执行时为初始路径:对路径执行的每一个分支节点,计算它在路径上的程序行为切片;路径上某个节点ni的程序行为切片包含所有满足如下性质的节点:节点在路径上通过控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递和节点ni存在影响关系;
S6)计算新生成的路径未覆盖的程序行为切片,第一次执行时为初始路径:根据依赖关系计算路径上所有需要取反的分支,并计算这些分支取反后在路径上的程序行为切片;
S7)对未覆盖程序行为切片库进行更新:删除被新生成路径覆盖的程序行为切片,并添加新生成路径未被覆盖的程序行为切片;
S8)如果未覆盖程序行为切片库为空,即不存在未被覆盖的程序行为切片,转步骤S10);否则,转步骤S9);
S9)根据广度优先算法搜索从未覆盖程序行为切片库中选取一条程序行为切片,引导符号执行生成测试路径,若路径有效,将其对应的测试案例存入有效测试案例集,并转步骤S5);若无法生成有效路径,从未覆盖程序行为切片库中删除该程序行为切片,转步骤S8);
S10)输出:有效测试案例集,该测试案例集覆盖待测程序程序的所有程序行为切片。
本发明进一步的改进在于:所述步骤S2)中潜在依赖的定义:条件语句s1和语句s2同时满足如下两个条件,称条件语句s1和语句s2存在潜在依赖:1)当条件语句s1取分支br时,存在一条语句s’1满足如下条件:语句s1和语句s’1通过br存在直接或间接控制依赖并且语句s’1和语句s2存在数据依赖;2)当条件语句s1取br的反向分支br’时,不存在语句s’1满足如下条件:语句s1和语句s’1通过分支br’存在直接或间接控制依赖并且语句s’1和语句s2存在数据依赖;控制依赖和数据依赖描述了语句s1的执行对另外一条语句s2的影响,然而潜在依赖刻画了语句s1控制另外一条语句s’1不执行时对语句s2的影响。程序执行失败不仅可以由某些语句的执行而导致,还可以由某些需要的语句没有被执行而导致。
本发明进一步的改进在于:步骤S3)中组合依赖的定义:语句s1和语句s2同时满足如下三个条件,称语句s1和语句s2存在组合依赖:1)存在一条路径从语句s1,经过语句s2能够到达语句s3;2)在该路径上,语句s1和语句s3存在控制依赖、数据依赖或者潜在依赖;3)在该路径上,语句s2和语句s3存在控制依赖、数据依赖或者潜在依赖。组合依赖刻画了两条语句共同作用于第三条语句的情况,在程序测试中经常出现程序执行失败是由多条非控制依赖,数据依赖或者潜在依赖语句共同作用导致的。
本发明进一步的改进在于:所述步骤S3)中组合依赖的构建方法包括以下步骤:
S301)根据数据流分析方法,将待测程序的每条语句当作一个节点并计算每个节点的流入节点集合和流出节点集合;
S302)计算每个节点处流入的节点对:该节点的直接前继节点的输出节点对之和;
S303)计算在每个节点处产生的节点对:流入该节点的节点一一和该节点组合形成节点对;计算在每个节点处消失的节点对:如果流入节点对中任意一个节点被该节点重定义,则该节点对在此处消失;
S304)计算每个节点处流出节点对:该节点的流入节点对加上产生节点对,然后减掉在此处消失的节点对;
S305)计算组合依赖:对某个节点的流入节点对,如果节点对中的两个节点都和该节点存在控制依赖,数据依赖或者潜在依赖,则认为节点对中的两个节点存在组合依赖。
本发明进一步的改进在于:所述步骤S5)中程序行为切片为:给定一条执行路径ε以及路径上的一个切片标准节点c,在路径ε上节点c的程序行为切片包括满足如下性质的节点:节点在路径上通过控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递和节点c存在影响关系。程序行为切片能够用来精确描述程序行为,如果程序执行过程中在某个节点处发生了错误,则导致该错误的原因必然存在该节点的程序行为切片里。
本发明进一步的改进在于:所述步骤S6)中未覆盖的程序行为切片是指:给定一条路径以及路径上需要取反的分支bri,bri取反后的分支br’i在路径上的程序行为切片构成了一条未被覆盖的程序行为切片;未覆盖的程序行为切片的计算方法:
S601)判断路径ε是否是初始路径,如果是,转步骤S602),否则转步骤S603);
S602)将路径上所有分支取反,生成对应的程序行为切片,转步骤S605);
S603)如果路径ε是由程序行为切片引导生成的,则在路径ε上找出和程序行为切片最后一个节点对应的节点ni;
S604)对路径ε上的任意分支节点bri,如果节点ni和bri的反向分支br’i在路径ε上存在控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递,则将分支bri取反并生成对应的程序行为切片;
S605)输出:所有生成的程序行为切片即为该路径上未覆盖的程序行为切片。
本发明进一步的改进在于:步骤S9)中生成新的测试路径的方法包括以下步骤:
S901)采用广度优先算法从未覆盖程序行为切片库中选择一条路径行为切片;
S902)计算程序行为切片条件,并将该程序行为切片从未覆盖程序行为切片库中删除;
S903)利用程序行为切片的分支语句条件引导符号执行,利用约束求解其计算满足所有分支语句条件的路径;
S904)判断路径是否可以有效执行,如果是转步骤S905),否则转步骤S906);
S905)输出:输出一条满足程序行为切片条件的路径;
S906)输出:无法生成有效执行路径,转步骤S8);
程序行为切片条件是指程序行为切片中的所有条件语句集合。
相对于现有技术,本发明具有以下有益效果:本发明提出一种基于程序行为切片的测试案例约减方法,在无需对全部程序路径进行扫描的情况下,生成可以覆盖全部程序行为的测试案例集,缓解程序测试面临的状态空间爆炸问题。本发明在静态分析阶段根据输入的程序代码分析程序的控制流和信息流,提取程序的控制依赖、计算程序的潜在依赖;在控制依赖,数据依赖和潜在依赖的基础上,定义并构建程序的组合依赖;在动态执行阶段,根据执行路径和依赖关系,计算被路径覆盖和未被覆盖的程序行为切片;根据未被覆盖的程序行为切片,引导符号执行生成能覆盖新的程序切片的路径;通过迭代生成测试案例,保证生成的测试案例集可以覆盖所有的程序行为切片,达到与路径覆盖同样的测试效果。相比现有的符号执行方法,本方法可以保证测试案例集的有效性,同时显著减少生成的测试案例数目。
附图说明:
图1为本发明方法整体流程图;
图2为组合依赖计算方法流程图;
图3为程序行为切片生成方法流程图;
图4为根据程序行为切片生成路径的方法流程图;
图5为说明具体实施方式的示例程序示意图。
具体实施方式
以下结合附图和实例详细说明本发明的实施方式。待测程序如图5所示,对于执行路径,以路径上经过的分支语句来表示。假设某一执行路径经过了2F,3T这两个分支语句,则其表示为[2F,3T]。
步骤S1:根据输入的待测程序,利用数据流分析方法,提取待测程序的控制依赖和数据依赖,结果如表1所示。
表1静态依赖表
步骤S2:根据待测程序的控制依赖和数据依赖,在程序控制流图上计算出待测程序的潜在依赖,结果如表1所示。
步骤S3:根据待测程序的控制依赖、数据依赖和潜在依赖,在程序控制流图上构建待测程序的组合依赖,流程如图2所示,具体包括:
步骤S301:基于数据流分析方法,计算待测程序的每条语句能够到达的语句集合,即将待测程序的每条语句当作一个节点并计算每个节点的流入节点集合和流出节点集合,计算结果如表2所示。
表2流入与流出语句集合表
步骤S302:计算在每个节点处流入的节点对:该节点的直接前继节点的输出节点对之和,结果如表3所示。
表3流入节点对表
步骤S303:计算在每个节点处产生的节点对及消失的节点对。流入该节点的节点一一和该节点组合形成节点对;如果流入节点对中任意一个节点被该节点重定义,则该节点对在此处消失。
步骤S304:计算在每个节点处流出的节点对:该节点的流入节点对加上产生节点对,然后减掉在此处消失的节点对,结果如表4所示。
表4流出节点对表
步骤S305:计算组合依赖:对某个节点的流入节点对,如果节点对中的两个节点都和该节点存在控制依赖,数据依赖或者潜在依赖,则认为节点对中的两个节点存在组合依赖,其结果如表1所示。
步骤S4:利用符号执行方法随机生成一条初始路径,假设生成的测试案例为(0,-2,1,3),对应的路径为[6T,8T,10T,12T],如表5中第一行所示,将测试案例(0,-2,1,3)存入有效测试案例集。
表5有效测试案例集表
步骤S5:计算新生成的路径(第一次执行时为初始路径)覆盖的程序行为切片:对路径执行的每一个分支节点,计算它在路径上的程序行为切片。路径上某个节点ni的程序行为切片包含所有满足如下性质的节点:节点在路径上通过控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递和节点ni存在影响关系。各次循环中的分析结果为如表5中第5列所示。以初始路径为例,其覆盖的程序行为切片如表5第一行第5列所示。
程序行为切片的定义:给定一条路径ε以及路径上的一个节点ni,该节点ni在路径ε上的程序行为切片是该路径上所有对节点ni存在影响的节点。因此程序行为切片是对程序路径的一种划分,并且需要计算路径上每个节点的程序行为切片。从直观上来看,程序行为切片对路径的划分和程序语句对路径的划分一样,可以有多条路径包含有相同的程序行为切片。在这种情况下就只需要生成其中的一条路径,能够大大减少路径的数目。此外,程序行为切片覆盖能够跟路径覆盖一样检测出相同的程序行为,因此路径覆盖能够检测出的错误,程序行为切片覆盖也能检测出来。
步骤S6:计算新生成的路径(第一次执行时为初始路径)未覆盖的行为切片:根据依赖关系计算路径上所有需要取反的分支,并计算这些分支取反后在路径上的程序行为切片。流程如图3所示,各次循环中路径为覆盖的路径如表5中第6列中“新增”所示。未覆盖的程序行为切片的计算方法:
S601)判断路径ε是否是初始路径,如果是,转步骤S602),否则转步骤S603)。
S602)将路径上所有分支取反,生成对应的程序行为切片,转步骤S605)。
S603)如果路径ε是由程序行为切片引导生成的,则在路径ε上找出和程序行为切片最后一个节点对应的节点ni。
S604)对路径ε上的任意分支节点bri,如果节点ni和bri的反向分支br’i在路径ε上存在控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递,则将分支bri取反并生成对应的程序行为切片。
S605)输出:所有生成的程序行为切片即为该路径上未覆盖的程序行为切片。
以初始路径为例,其具体流程包括:
步骤S601:判定为初始执行路径,转S602。
步骤S602:将路径上所有分支取反,生成对应的程序行为切片,转S605。
步骤S605:得到未覆盖行为切片[6F],[6T,8F],[10F],[12F]。
步骤S7:根据路径中发现的覆盖和未覆盖程序行为切片,更新未覆盖程序行为切片库,如表5中第6列所示。其中“已有”表示原未覆盖程序行为切片库中的所有切片;其中标识“(删除)”的原未覆盖程序行为切片库中的切片,表示该切片被新生成的路径所覆盖;“新增”表示该切片是根据新生成的路径发现的未覆盖程序行为切片。
步骤S8:判断未覆盖程序行为切片库是否为空,如果不存在未被覆盖的程序行为切片,转步骤S10);否则,转步骤S9)。在初始路径中,未覆盖程序行为切片库不为空,如表5中第1条记录的第6列所示,因此转步骤S9;在第6次循环,未覆盖程序行为切片库为空,如表5中第6条记录的第6列所示,循环结束,转步骤S10。
步骤S9:根据广度优先算法搜索从未覆盖程序行为切片库中选取一条程序行为切片,引导符号执行生成新的测试路径,若路径有效,将其对应的测试案例存入有效测试案例集,转步骤S5);若无法生成有效路径,从未覆盖程序行为切片库中删除该程序行为切片,转步骤S8)。流程如图4所示,根据程序行为切片生成路径的方法:
S901)采用广度优先算法从未覆盖程序行为切片库中选择一条路径行为切片。
S902)计算程序行为切片条件,并将该程序行为切片从未覆盖程序行为切片库中删除。
S903)利用程序行为切片的分支语句条件引导符号执行,利用约束求解其计算满足所有分支语句条件的路径。
S904)判断路径是否可以有效执行,如果是转步骤S905),否则转步骤S906)。
S905)输出:输出一条满足程序行为切片条件的路径。
S906)输出:无法生成有效执行路径,转步骤S8)。
程序行为切片条件是指程序行为切片中的所有条件语句集合。
以初始路径为例,其具体流程包括:
步骤S901:采用广度优先算法,从未覆盖程序行为切片库(如表5中第1条记录第6列所示),选择[6F]。
步骤S902:计算程序行为切片条件,第6行的分支语句选择False分支;并将切片[6F]从未覆盖程序行为切片库中删除,如表5中第1条记录第6列所示。
步骤S903:第6行的分支语句选择False分支作为约束条件,利用约束求解器中求解。
步骤S904:生成执行路径[6F,8T,10T,12T]对应测试案例为(2,0,1,3),将测试案例为(2,0,1,3)存入有效测试案例集。
步骤S905:路径和测试案例有效,将其输出。
重复上述步骤,各次循环中新发现的已覆盖和未覆盖程序行为切片、新生成的测试路径等,本专利中示例程序共经过6次循环,未覆盖程序行为切片库中所有记录被清空,详细过程如表5所示。6次循环共生成6条有效测试路径,对应6个测试案例,覆盖所有程序行为切片。
步骤S10):输出:有效测试案例集,该测试案例集会覆盖目标程序的所有程序行为切片。相比现有的符号执行方法,该实施例所生成的测试案例数目只有现有符号执行方法的三分之一,显著减少生成测试案例数目的同时,可以保证测试案例集的有效性,测试效果与现有方法相等。如果待测程序的分支较多的情况下,本发明方法所生成的测试案例数目只有现有符号执行方法的百分之一左右,显著减少生成的测试案例数目。
Claims (5)
1.基于程序行为切片的测试案例约减方法,其特征在于,包括如下步骤:
S1)根据输入的待测程序,利用静态程序分析方法,分析待测程序的控制流和信息流,提取待测程序的控制依赖和数据依赖;
S2)根据待测程序的控制依赖和数据依赖,计算待测程序的潜在依赖;
S3)根据待测程序的控制依赖、数据依赖和潜在依赖,在程序控制流图上构建程序的组合依赖;
S4)利用符号执行方法随机生成一条初始路径,并将对应初始路径的测试案例存入有效测试案例集;
S5)计算新生成的路径覆盖的程序行为切片,第一次执行时为初始路径:对路径执行的每一个分支节点,计算它在路径上的程序行为切片;路径上某个节点ni的程序行为切片包含所有满足如下性质的节点:节点在路径上通过控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递和节点ni存在影响关系;
S6)计算新生成的路径未覆盖的程序行为切片,第一次执行时为初始路径:根据依赖关系计算路径上所有需要取反的分支,并计算这些分支取反后在路径上的程序行为切片;
S7)对未覆盖程序行为切片库进行更新:删除被新生成路径覆盖的程序行为切片,并添加新生成路径未被覆盖的程序行为切片;
S8)如果未覆盖程序行为切片库为空,即不存在未被覆盖的程序行为切片,转步骤S10);否则,转步骤S9);
S9)根据广度优先算法搜索从未覆盖程序行为切片库中选取一条程序行为切片,引导符号执行生成测试路径,若路径有效,将其对应的测试案例存入有效测试案例集,并转步骤S5);若无法生成有效路径,从未覆盖程序行为切片库中删除该程序行为切片,转步骤S8);
S10)输出:有效测试案例集,该测试案例集覆盖待测程序的所有程序行为切片;
步骤S2)中潜在依赖的定义:条件语句s1和语句s2同时满足如下两个条件,称条件语句s1和语句s2存在潜在依赖:1)当条件语句s1取分支br时,存在一条语句s’1满足如下条件:语句s1和语句s’1通过br存在直接或间接控制依赖并且语句s’1和语句s2存在数据依赖;2)当条件语句s1取br的反向分支br’时,不存在语句s’1满足如下条件:语句s1和语句s’1通过分支br’存在直接或间接控制依赖并且语句s’1和语句s2存在数据依赖;控制依赖和数据依赖描述了语句s1的执行对另外一条语句s2的影响,然而潜在依赖刻画了语句s1控制另外一条语句s’1不执行时对语句s2的影响;
步骤S3)中组合依赖的定义:语句s1和语句s2同时满足如下三个条件,称语句s1和语句s2存在组合依赖:1)存在一条路径从语句s1,经过语句s2能够到达语句s3;2)在该路径上,语句s1和语句s3存在控制依赖、数据依赖或者潜在依赖;3)在该路径上,语句s2和语句s3存在控制依赖、数据依赖或者潜在依赖。
2.根据权利要求1所述的测试案例约减方法,其特征在于,所述步骤S3)中组合依赖的构建方法包括以下步骤:
S301)根据数据流分析方法,将待测程序的每条语句当作一个节点并计算每个节点的流入节点集合和流出节点集合;
S302)计算每个节点处流入的节点对:该节点的直接前继节点的输出节点对之和;
S303)计算在每个节点处产生的节点对:流入该节点的节点一一和该节点组合形成节点对;计算在每个节点处消失的节点对:如果流入节点对中任意一个节点被该节点重定义,则该节点对在此处消失;
S304)计算每个节点处流出节点对:该节点的流入节点对加上产生节点对,然后减掉在此处消失的节点对;
S305)计算组合依赖:对某个节点的流入节点对,如果节点对中的两个节点都和该节点存在控制依赖,数据依赖或者潜在依赖,则认为节点对中的两个节点存在组合依赖。
3.根据权利要求1所述的测试案例约减方法,其特征在于,所述步骤S5)中程序行为切片为:给定一条执行路径ε以及路径上的一个切片标准节点c,在路径ε上节点c的程序行为切片包括满足如下性质的节点:节点在路径上通过控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递和节点c存在影响关系。
4.根据权利要求1所述的测试案例约减方法,其特征在于,所述步骤S6)中未覆盖的程序行为切片是指:给定一条路径以及路径上需要取反的分支bri,bri取反后的分支br’i在路径上的程序行为切片构成了一条未被覆盖的程序行为切片;未覆盖的程序行为切片的计算方法:
S601)判断路径ε是否是初始路径,如果是,转步骤S602),否则转步骤S603);
S602)将路径上所有分支取反,生成对应的程序行为切片,转步骤S605);
S603)如果路径ε是由程序行为切片引导生成的,则在路径ε上找出和程序行为切片最后一个节点对应的节点ni;
S604)对路径ε上的任意分支节点bri,如果节点ni和bri的反向分支br’i在路径ε上存在控制依赖,数据依赖,潜在依赖,组合依赖或者它们的传递,则将分支bri取反并生成对应的程序行为切片;
S605)输出:所有生成的程序行为切片即为该路径上未覆盖的程序行为切片。
5.根据权利要求1所述的测试案例约减方法,其特征在于,步骤S9)中生成测试路径的方法包括以下步骤:
S901)采用广度优先算法从未覆盖程序行为切片库中选择一条路径行为切片;
S902)计算程序行为切片条件,并将该程序行为切片从未覆盖程序行为切片库中删除;
S903)利用程序行为切片的分支语句条件引导符号执行,利用约束求解其计算满足所有分支语句条件的路径;
S904)判断路径是否可以有效执行,如果是转步骤S905),否则转步骤S906);
S905)输出:输出一条满足程序行为切片条件的路径;
S906)输出:无法生成有效执行路径,转步骤S8);
程序行为切片条件是指程序行为切片中的所有条件语句集合。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310479195.8A CN103559122B (zh) | 2013-10-14 | 2013-10-14 | 基于程序行为切片的测试案例约减方法 |
US14/761,617 US9355019B2 (en) | 2013-10-14 | 2013-11-07 | Method for test case reduction based on program behavior slices |
PCT/CN2013/086709 WO2015054938A1 (zh) | 2013-10-14 | 2013-11-07 | 基于程序行为切片的测试案例约减方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310479195.8A CN103559122B (zh) | 2013-10-14 | 2013-10-14 | 基于程序行为切片的测试案例约减方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103559122A CN103559122A (zh) | 2014-02-05 |
CN103559122B true CN103559122B (zh) | 2016-04-27 |
Family
ID=50013373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310479195.8A Expired - Fee Related CN103559122B (zh) | 2013-10-14 | 2013-10-14 | 基于程序行为切片的测试案例约减方法 |
Country Status (3)
Country | Link |
---|---|
US (1) | US9355019B2 (zh) |
CN (1) | CN103559122B (zh) |
WO (1) | WO2015054938A1 (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9619375B2 (en) * | 2014-05-23 | 2017-04-11 | Carnegie Mellon University | Methods and systems for automatically testing software |
US10330728B2 (en) * | 2015-05-26 | 2019-06-25 | Samsung Electronics Co., Ltd. | Method and apparatus for obtaining a maximally compressed verification test set |
TWI570554B (zh) * | 2015-11-05 | 2017-02-11 | 財團法人資訊工業策進會 | 軟體測試裝置、軟體測試方法及其電腦程式產品 |
CN105487983B (zh) * | 2015-12-24 | 2018-01-12 | 郑州恩倍网络科技有限公司 | 基于智能路径引导的敏感点逼近方法 |
CN106095662A (zh) * | 2016-05-23 | 2016-11-09 | 浪潮电子信息产业股份有限公司 | 一种基于程序切片的测试用例集约简方法 |
US10176086B2 (en) * | 2016-10-03 | 2019-01-08 | Fujitsu Limited | Event-driven software test sequence determination |
CN106951303B (zh) * | 2017-02-20 | 2020-09-22 | 南京邮电大学 | 一种基于信息流分析的llvm中间表示程序切片方法 |
JP6790921B2 (ja) * | 2017-03-02 | 2020-11-25 | 富士通株式会社 | プログラム分析装置、プログラム分析方法及びプログラム分析プログラム |
EP3404535A1 (en) * | 2017-05-15 | 2018-11-21 | Ecole Nationale de l'Aviation Civile | Method and apparatus for processing code |
US10558550B2 (en) * | 2017-11-10 | 2020-02-11 | Blackberry Limited | Static program analysis of a partial software program |
CN108304317B (zh) * | 2017-12-28 | 2021-01-05 | 东南大学 | 一种基于路径执行频率的单过程程序静态切片方法及系统 |
CN108509347B (zh) * | 2018-04-20 | 2020-10-02 | 四川大学 | 等价变异体识别方法及装置 |
CN108536606B (zh) * | 2018-04-22 | 2021-01-19 | 北京化工大学 | 一种基于复合依赖关系覆盖准则的efsm测试方法 |
CN108763094B (zh) * | 2018-06-01 | 2021-08-10 | 百度在线网络技术(北京)有限公司 | 测试用例生成方法、装置、设备及存储介质 |
US10877870B2 (en) * | 2018-06-11 | 2020-12-29 | Tata Consultancy Services Limited | Method and system for verifying properties of source code |
CN109376535B (zh) * | 2018-08-14 | 2022-03-04 | 中国信息安全测评中心 | 一种基于智能化符号执行的漏洞分析方法及系统 |
EP3929751B1 (en) * | 2019-03-25 | 2023-03-01 | Mitsubishi Electric Corporation | Test case generation device, test case generation method, and test case generation program |
CN110457208B (zh) * | 2019-07-16 | 2023-01-06 | 百度在线网络技术(北京)有限公司 | 符号执行的引导方法、装置、设备及计算机可读存储介质 |
CN110618809B (zh) * | 2019-08-08 | 2020-11-03 | 北京大学 | 一种前端网页输入约束提取方法和装置 |
CN115237748B (zh) * | 2022-06-01 | 2023-07-04 | 北京邮电大学 | 基于反馈增量驱动的符号执行方法 |
CN115037648B (zh) * | 2022-06-07 | 2023-11-10 | 河海大学 | 基于数据流约简的智能合约测试用例生成方法及系统 |
CN116302994B (zh) * | 2023-02-28 | 2023-10-10 | 浙江大学 | 一种程序路径的层次化匹配方法、装置、设备及存储介质 |
CN116361182B (zh) * | 2023-04-03 | 2023-12-05 | 南京航空航天大学 | 一种错误状态引导的符号执行方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082876A (zh) * | 2006-05-30 | 2007-12-05 | 四川华智信息技术有限公司 | 软件自动测评工具包 |
CN101714119A (zh) * | 2009-12-09 | 2010-05-26 | 北京邮电大学 | 基于二进制程序的测试数据生成器和方法 |
CN101901188A (zh) * | 2010-07-23 | 2010-12-01 | 哈尔滨工程大学 | 一种基于可达路径的软件测试方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5161216A (en) * | 1989-03-08 | 1992-11-03 | Wisconsin Alumni Research Foundation | Interprocedural slicing of computer programs using dependence graphs |
US20100287534A1 (en) * | 2009-05-07 | 2010-11-11 | Microsoft Corporation | Test case analysis and clustering |
US8589898B2 (en) * | 2010-03-29 | 2013-11-19 | GM Global Technology Operations LLC | Method and apparatus for analyzing software including a calibrated value |
-
2013
- 2013-10-14 CN CN201310479195.8A patent/CN103559122B/zh not_active Expired - Fee Related
- 2013-11-07 WO PCT/CN2013/086709 patent/WO2015054938A1/zh active Application Filing
- 2013-11-07 US US14/761,617 patent/US9355019B2/en not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082876A (zh) * | 2006-05-30 | 2007-12-05 | 四川华智信息技术有限公司 | 软件自动测评工具包 |
CN101714119A (zh) * | 2009-12-09 | 2010-05-26 | 北京邮电大学 | 基于二进制程序的测试数据生成器和方法 |
CN101901188A (zh) * | 2010-07-23 | 2010-12-01 | 哈尔滨工程大学 | 一种基于可达路径的软件测试方法 |
Non-Patent Citations (2)
Title |
---|
"一种基于程序切片的测试用例集约简方法研究";吴洁;《中国优秀硕士学位论文全文数据库 信息科技辑》;20100815(第08期);I138-218 * |
"基于方法切片的软件回归测试研究";杜章华;《中国优秀硕士学位论文全文数据库 信息科技辑》;20110315(第03期);I138-104 * |
Also Published As
Publication number | Publication date |
---|---|
US20150363305A1 (en) | 2015-12-17 |
CN103559122A (zh) | 2014-02-05 |
US9355019B2 (en) | 2016-05-31 |
WO2015054938A1 (zh) | 2015-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103559122B (zh) | 基于程序行为切片的测试案例约减方法 | |
KR101981028B1 (ko) | 바이너리 기반 보안 취약점 탐색 시스템, 그 방법 및 프로그램 | |
CN103116540B (zh) | 基于全局超级块支配图的动态符号执行方法 | |
CN102708045B (zh) | 一种缓解路径爆炸的动态符号执行方法 | |
US9594543B2 (en) | Activity diagram model-based system behavior simulation method | |
CN105868116A (zh) | 基于语义变异算子的测试用例生成和优化方法 | |
CN102231134A (zh) | 基于静态分析的冗余代码缺陷检测方法 | |
CN102915271A (zh) | 基于控制流图的单元回归测试用例集合优化方法 | |
KR20060045568A (ko) | 프로그램 계측 동안의 프로브 최적화 방법 및 시스템 | |
CN104503917A (zh) | 基于数据流函数调用路径的变更影响域分析方法及系统 | |
CN102968375B (zh) | 基于关联规则挖掘的不可达路径检测方法 | |
CN103914374B (zh) | 基于程序切片和频繁模式提取的代码缺陷检测方法及装置 | |
US8838559B1 (en) | Data mining through property checks based upon string pattern determinations | |
CN105468517B (zh) | 一种基于黑盒测试用例约简的统计错误定位方法 | |
CN102968369B (zh) | 一种动态断点的自动生成方法及系统 | |
CN103914379A (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN105224455B (zh) | 一种自动生成字符串类型测试用例的方法 | |
US6691079B1 (en) | Method and system for analyzing test coverage | |
Wong et al. | Software fault localization: An overview of research, techniques, and tools | |
CN101930401B (zh) | 一种基于检测对象的软件漏洞模型检测方法 | |
Sullivan | Hawkeye: user-guided enumeration of scenarios | |
CN109002723B (zh) | 一种分段式符号执行方法 | |
CN115080448A (zh) | 一种软件代码不可达路径自动检测的方法和装置 | |
CN110659200A (zh) | 航空机载软件的源码和目标码对比分析方法及系统 | |
JP2006277282A (ja) | モデル評価解析システムおよびモデル評価解析プログラム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for 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 |
Granted publication date: 20160427 |