线性代码序列和跳转测试

线性代码序列和跳转测试,线性代码序列和跳转测试主要针对LCSAJ覆盖来进行测试用例设计,LCSAJ覆盖指的是测试条件执行的LCSAJ数目占总的LCSAJ的百分比。100%的LCSAJ覆盖意味着100%的判定覆盖。LCSAJ在1976年引入,也被称为“跳转到跳转(Jump-to-Jump)路径”(JJ路径)。

LCSAJ指的是软件代码路径的片段,由控制流跳转跟着的序列代码构成,主要由下面的3个部分组成(通常通过源代码的行号来识别)。
(1)可执行语句线性序列的起始点。
(2)可执行语句线性序列的结束点。
(3)在线性序列结尾控制流所转移到的目标行。

LCSAJ用于覆盖分析时,其测试方法有如下3 个不同的测试有效性比率TER(Test Effectiveness Ratio)。
(1)执行语句的百分比TER1:测试条件执行的语句数目与总共可执行语句数目之间的比值。
(2)执行分支的百分比TER2:测试条件执行的控制流分支数目与总共控制流分支数目之间的比值。
(3)执行LCSAJ的百分比TER3:测试条件执行的LCSAJ的数目与总共LCSAJ数目之间的比值。

用于LCSAJ测试方法覆盖分析的这3个指标,具有完全的层次结构:当测试对象满足TER3 = 100%时,同时可以满足100%的TER1和100%的TER2。下面通过一个例子来阐述LCSAJ测试方法,代码如下:

#include <stdlib.h>
#include <string.h>
#include <math.h>

#define MAXCOLUMNS 26
#define MAXROW 20
#define MAXCOUNT 90
#define ITERATIONS 750

int main (void)
{
 int count = 0, totals[MAXCOLUMNS], val = 0;

 memset (totals,0,MAXCOLUMNS * sizeof(int));

 count = 0;
 while ( count < ITERATIONS )
 {
  val = abs(rand()) % MAXCOLUMNS;
  totals[val] += 1;
  if ( totals[val] > MAXCOUNT )
  {
   totals[val] = MAXCOUNT;
  }
  count++;
 }

 return (0);

}

根据上面的代码可以得到完整的LCSAJ列表,如表所示。
线性代码序列和跳转测试

如果测试覆盖要求满足100%的TER3,那么表中的每个LCSAJ都需要遍历一次。从这个例子可以看出,LCSAJ可以包含一个判定的点,以反映执行LCSAJ所需满足的条件。例如,LCSAJ 2包含while语句,其中的条件“(count < ITERATIONS)”取值必须是真(TRUE)。

另外每行代码都包含LCSAJ密度,如第17行在6个LCSAJ中出现,因此它具有代码密度6。这对于分析代码的可维护性非常有帮助。如果一行代码发生了变更,那么代码的密度可以显示多少LCSAJ会受到的影响。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!