线性程式码顺序及跳转
线性程式码顺序及跳转(Linear code sequence and jump)简称LCSAJ,是软体测试相关的术语。其广义的定义是一种程式分析方式,可以识别出要测试程式码中的结构单元。其主要用途是用在中,来确认「测试到什么程度才算是足够?」。动态软体分析用来衡量软体测试资料的品质以及有效性,而其量化数据是由要测试程式码中的结构单元数量来确认。动态分析若是用来量化测试资料中的结构单元数量,此分析也会称为是结结构覆盖率分析。
线性程式码顺序及跳转也有狭义的定义,是程式码中明确定义的一段连续程式码,此定义下的LCSAJ也称为跳跃—跳跃路径(JJ-path)。
历史.
LCSAJ分析法是由教授提出,目的是为了评估原子核物理学用到的数学函式库的品质。Hennell教授后来成立了,将为计划开发的测试平台商品化贩售,也就是后来的。
LCSAJ是从1976年开始的,现在也称为是跳跃—跳跃路径(JJ-path)。
LCSAJ程式区块的定义及特点.
LCSAJ是程式路径中的一部份,包括一段线性(连续)程式码,后面有条件流程跳跃指令,并且包括以下三部份的程式码
LCSAJ和(最大的)基础区块不同,LCSAJ可以彼此重叠,因为可能在LCSAJ程式码中间会出现跳跃到其他程式的跳跃指令,而基础区块程式码中间不允许有跳跃指令。而且,条件式跳跃就会产生互相重叠的LCSAJ,条件成立时会执行程式码A,条件不成立时会执行程式码B,这就产生二段重叠的LCSAJ。因此,每一个基础区块都是LCSAJ,但LCSAJ可能会包括一个到多个基础区块。根据1986年的一篇文章指出,LCSAJ的大小多半是基础区块的四倍。
以下是用到基础区块的正式LCSAJ定义:
一个到多个连续编号"p", ("p"+1), ..., "q"基础区块程式单元的序列,之后有一个控制流程的跳跃,可能是跳出此程式码单元,或是到编号为"r"的基础区块,"r"≠("q"+1)。有关编号"p",可能"p"=1,或者有其他的基础区块会跳到编号为"p"的基础区块(在LCSAJ的跳跃指令中,会说明要跳跃到的基础区块)
根据Jorgensen 2013年版的教科书,在英国以外,且不是ISTQB以外的文献中,会将此叙述称为是决策到决策路径(DD-path)。
有效测试的比率.
覆盖率分析度量可以确认测试进行的程度如何。最基本的度量是有执行到叙述,相对于所有叙述的比例,有效测试比率1(TER1):
formula_1
也有较高阶的覆盖率分析度量,例如考虑执行到控制流跳跃的比例,或是执行到LCSAJ的比例:
formula_2
formula_3
上述的度量有阶层的关系,若TER3 = 100%,表示TER2 = 100%,且TER1 = 100%。
TER1和TER2的度量约在1970年代初期出现,TER3则是在1970年代末期。在标准刚开始时,有要求TER1 = 100%,后来在1992年加上MC/DC(修改条件判断覆盖)的额外要求。许多专案会强制要求更高阶的 TER3 = 100%,例如航太、通讯以及银行#重定向
重定向;重新导向;字符;字元;文件; 档案;快捷方式; 捷径;项目;专案;计划;计划;计划;计算机; 电脑; 电脑;。在使用TER3时,有一个实务上的问题,是许多LCSAJ有包括互相矛盾的条件,因此无法执行到。
例子.
考虑以下的C语言程式:
int main (void)
int count = 0, totals[MAXCOLUMNS], val = 0;
memset (totals, 0, MAXCOLUMNS * sizeof(int));
count = 0;
while ( count MAXCOUNT )
totals[val] = MAXCOUNT;
count++;
return (0);
这段程式中对应的LCSAJ程式启始、结束及跳转目标列表如下:
从这段程式可以看出LCSAJ识别到的程式码可能会包括决策点,表示有经过决策判断,判断后的结果是继续执行后面的程式。例如例子中的LCSAJ 2就包括了codice_1指令,而当时的情形是codice_2条件成立。
每一行程式都会划分在一个或是多个LCSAJ范围内,因此有每一行的LCSAJ密度,例如第17行出现在6个LCSAJ范围内,因此其LCSAJ密度为6。在评估程式的可维护性时很有帮助,每一行的LCSAJ密度也反映了修改那一行会影响的LCSAJ数量。
若测试资料可以使所有的LCSAJ都至少执行一次,就满足TER3 = 100%的覆盖率等级。
生成维基百科快照图片,大概需要3-30秒!