线性代码序列和跳转测试,线性代码序列和跳转测试主要针对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会受到的影响。
酷客教程相关文章:
评论前必须登录!
注册