一种新程序变体测试方法.docVIP

  • 7
  • 0
  • 约6.91千字
  • 约 15页
  • 2018-08-13 发布于福建
  • 举报
一种新程序变体测试方法

一种新的程序变体测试方法   摘要:在对程序分片技术研究的基础上,提出一种新的片变体测试方法。通过实例说明,该方法能更有效地提高变体测试的准确性及测试效率。   关键词:变体测试;程序分片;片变体测试;测试指标   中图分类号:TP311 文献标志码:A   文章编号:1001-3695(2008)05-1393-03      高质量的软件(程序)离不开高质量的测试。为了保证测试的质量及提供一种度量测试用例好坏的指标,人们提出了一种基于缺陷的测试方法(fault-based testing)――变体测试。区别于别的测试方法,变体测试根据一定的准则(变体算子)在程序中引入bug来判断测试用例集的好坏(是否充分)。对于现实中的一般程序,由于其整个输入集一般都趋于无穷大或大到无法控制的范围,只能根据一定的原则选取其中的一个子集作为测试用例集。准则的意义就在于提供一种量化测试等级的指标。通过等级越高的测试,程序的可信度就越高。??   本文利用一种有效的程序分析技术,即程序分片对传统的变体测试技术进行分析,提出基于程序片的变体测试指标,该指标涵盖了传统变体测试指标。所谓涵盖就是一定存在这样的情况,永远有缺陷会在测试的一个层次上被发现,并能够在测试的下层上逃避检测[1]。另外给出了基于该指标的一般性测试方法――结合分片的片变体测试方法。??      1程序变体与分片??      1.1变体测试??   变体测试思想始于20世纪70年代末[2],基本思想是:对于一个待测程序P,假设给定的测试用例集T足够好(充分)的话,应该能测试出P中所有的缺陷。基于以上假设,人为地在通过测试后的程序P中引入缺陷(称引入缺陷的程序为源程序的变体),再用原测试用例集T对所有的变体进行测试。当变体中引入的缺陷被检测出来时,则称变体P被消灭。如果所有的变体都能被消灭,那么就认为测试用例集T是足够好(充分)的,通过T测试的程序P也是可信赖的。如果还存在变体没有被消灭,则认为测试用例集T是不够充分的,通过T测试的程序P也是不可信赖的。变体测试的基本流程如图1所示。??   程序缺陷是通过修改源程序部分代码的形式引入的。这种修改遵循一定的标准算子,称为变体算子,如修改算术运算符、修改逻辑运算符、修改变量等操作算子。这种引入缺陷的方法可能会造成等价变体问题,即修改后的程序和源程序是功能等价的(也就是对于任意相同的输入,它们的输出是一样的),所以在进行变体测试时只要求非等价变体被消灭。就如何识别等价变体这一问题,人们已进行了很多研究[3],具体的方法本文不进行讨论。??   为进一步讨论的需要,先给出本文的一些表示符号。对于任一个程序P,用P′表示程序P的一个变体;P表示P的所有变体集合;P.t表示P对于输入t的输出; fp(t)表示P实际要完成的函数功能;D为程序的整个输入域。 ??   定义1测试用例集T满足变体测试指标iff ??P′.P′∈P→(??t∈T. P′.t≠fp(t))∨(??t∈D.P′.t=P.t)。当程序P通过了满足以上指标的T测试,则称P通过了变体测试。??   1.2程序分片??   程序分片是一种有效的程序分析技术,它根据给定的分片准则从源程序中提取出所需部分进行分析。最早的程序分片概念由Weiser提出[4]。 Weiser定义的程序分片是一个可执行的程序,它是通过从源程序中移去零条或多条语句来构造的。 原始的程序分片定义如下:??   定义2对于某一语句s和某一变量v,程序p关于分片准则〈s, v〉的程序分片是可能影响语句s处变量v值的所有语句的集合。??   目前比较流行的分片技术大多是借助于系统依赖图(SDG)来实现[5]。其主要思路是先对目标程序构造SDG来表示其内部的依赖关系,然后通过回溯算法(也称为节点反向可达性算法)来计算分片。由于本文第3章讨论的需要,简要介绍一下基于SDG的分片技术。??   SDG是由过程间的控制和数据依赖边相连接的过程依赖图(PDG)[5]的集合。一个PDG表示程序中的单个过程,它是一个有向图,其节点分为表示赋值语句或谓词的节点、表示过程输入和输出的节点及表示方法调用的节点;边表示过程各部分间的依赖关系,依赖关系有控制依赖和数据依赖两种。节点间可以有多种边。如果图中有一条控制依赖边〈v??1,v??2〉,当且仅当满足下列条件之一:a)v??1是初始节点,且v??2没有嵌套在条件或循环中;b)v??1是谓词,v??2直接嵌套在谓词v??1的条件或循环中。如果图中有一条数据依赖边〈v??1,v??2〉,当且仅当同时满足以下三个条件:a)v??1定义了某个变量x;b)v??2使用了变量x;c)v??1和v??2间有一条可执行的路径且没有对x重新定义。??  

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档