xj822908 发表于 2009-9-17 12:59:26

数据流测试

软件测试充分性准则是决定一个软件系统能否被充分测试的规则,而测试充分性的关键问题是其检测故障的能力以及数据流的测试。
首先强调一下,数据流测试与数据流图没有任何的关系。 他是指关注变量接受值的点和使用(或引用)这些值的点的结构性测试形式,它可以做路径测试的真实性检查,它包含两种形式,一种提供一组基本定义和一种统一的测试覆盖指标结构,另一种基于叫做“程序片”的概念。这两种方法都形式化了测试人员的直觉行为(和分析),他们都接近与测试用例。

什么是测试人员的直觉行为(和分析)?从早期的数据流测试分析所应用的领域可以看出一些端倪:
1、变量被定义,但是从来没有使用(引用)
2、所使用的变量没有被定义
3、变量在使用之前被定义两次
从以上三方面来看,早期的数据流测试大概就是用来检测我们现在写程序时候常常会出现的一些warning——"您所定义的变量未被使用等"之内的问题,这些问题光靠简单的语法分析器或者是语义分析器是无法检测出来的,我想这个是不是就是数据流的功能呢?现在一般都是依靠静态分析来得到这些异常问题的。

基于数据流的基本的概念等东西倒是非常的简单,我下面阐述一下几个比较重要的关于数据流的概念,还是按照定义使用路径和程序片两类区分。
      首先要明确一个假设,数据流的假设还是和路径的假设一致,程序图是一个单入口,单出口,并且不允许有从某个结点到其自身的边。
定义使用路径:
   a、DEF(v,n),定义结点,变量v在结点n处定义,定义包括输入语句,赋值语句(等号左侧),过程调用都是定义结点的例子,如果执行这些语句,变量的值往往会发生变化。
   b、USE(v,n),使用结点,变量v在结点n处被使用,使用包括输出语句、赋值语句(等号右侧)、条件语句、循环语句、过程调用语句都是结点的使用语句,如果执行这类语句,值不会被改变。
   c、P-use当且进当USE(v,n)是谓词使用,比如a>=2,对于P-use的程序图出度>=2
   d、C-use当且仅当USE(v,n)是计算使用,对于C-use的程序图入度<=1
   e、定义使用路径:开始结点是DEF(v,n),结束结点是USE(v,n)的路径
   f、清除路径,当定义结点和清除结点中间没有其他的定义结点的时候为清除路径。

定义使用路径也是一组指标,包括全路径、全定义-使用路径、全使用、全计算使用/部分谓词使用、全谓词使用/部分谓词使用、全定义、全谓词使用、全边、全结点,这些都是通过对定义使用路径的定义得到的一些测试指标,与前面的DD路径一样是用来检测功能性测试覆盖率的。

程序片:
程序片的概念倒是很简单,就一个S(V,n)就是说结点n之前的所有对V中的变量值做出贡献的所有语句片段的总和。很明显的,做出贡献的一定是上面所述的USE(v,n),但是要注意的是这里的使用路径包括直接和间接的。举个例子说明。比如说在结点n有个变量a=a+b+c,那么很明显的知道这里影响a的值包括a,b,c,所以自然要将在结点n前影响到值a,b,c三个变量的所有结点都算进去,知道出现一个常量语句,例如b=2230,那么说明没有什么再影响b了。

程序片的一个最大的使用我认为是用来排除程序片段的,比如说现在有两个程序片,一个是第8行的v,一个是第10行的v,假设第8行和第10行之间没有任何常量对v进行赋值,那么p2=(p1,9,10),这里假设第9行和第10行影响了v的值,那么很自然的想到,如果8行之前的程序片p1中的变量v没有发生问题,而第10行的程序片p2出现了问题,那么变量v的异常必然在p2-p1这段程序片上。因此程序片能够很快定位出异常,这个和我们在调试程序的时候的直觉是一致的。
      另外有个知识点,如果两个不同结点的变量的v的程序片p1和p2相等,那么对应的路径就是清除路径。
   
      如此数据流测试的基本概念就完结了,数据流测试往往应用于计算密集的程序,数据流能够很方便的描述程序的部分片段结构,定义使用路径具有和程序片相似的性质,如果p1是包含了p2的一条定义使用路径 ,如果p2没有出现问题,那么问题必然出现在p1-p2这段路径上了。然后片与定义使用路径一个区别在于片并不能很好的反应测试用例,这个也很容易理解,因为片是反应局部状况的,而定义使用路径则是基于路径的,路径是具有结构化性质指标的。这些就是基于数据流测试的全部。
页: [1]
查看完整版本: 数据流测试