Loading AI tools
来自维基百科,自由的百科全书
线性程式码顺序及跳转(Linear code sequence and jump)简称LCSAJ,是软体测试相关的术语。其广义的定义是一种程式分析方式,可以识别出要测试程式码中的结构单元。其主要用途是用在动态软体分析中,来确认“测试到什么程度才算是足够?”[1]。动态软体分析用来衡量软体测试资料的品质以及有效性,而其量化数据是由要测试程式码中的结构单元数量来确认。动态分析若是用来量化测试资料中的结构单元数量,此分析也会称为是结结构覆盖率分析。
线性程式码顺序及跳转也有狭义的定义,是程式码中明确定义的一段连续程式码,此定义下的LCSAJ也称为跳跃—跳跃路径(JJ-path)。
LCSAJ分析法是由Michael Hennell教授提出,目的是为了评估原子核物理学用到的数学函式库的品质[2][3]。Hennell教授后来成立了LDRA公司,将为计划开发的测试平台商品化贩售,也就是后来的LDRA Testbed。
LCSAJ是程式路径中的一部份,包括一段线性(连续)程式码,后面有条件流程跳跃指令,并且包括以下三部份的程式码 [6]:
LCSAJ和(最大的)基础区块不同,LCSAJ可以彼此重叠,因为可能在LCSAJ程式码中间会出现跳跃到其他程式的跳跃指令,而基础区块程式码中间不允许有跳跃指令。而且,条件式跳跃就会产生互相重叠的LCSAJ,条件成立时会执行程式码A,条件不成立时会执行程式码B,这就产生二段重叠的LCSAJ。因此,每一个基础区块都是LCSAJ,但LCSAJ可能会包括一个到多个基础区块。根据1986年的一篇文章指出,LCSAJ的大小多半是基础区块的四倍[7]。
以下是用到基础区块的正式LCSAJ定义[8]:
一个到多个连续编号p, (p+1), ..., q基础区块程式单元的序列,之后有一个控制流程的跳跃,可能是跳出此程式码单元,或是到编号为r的基础区块,r≠(q+1)。有关编号p,可能p=1,或者有其他的基础区块会跳到编号为p的基础区块(在LCSAJ的跳跃指令中,会说明要跳跃到的基础区块)
根据Jorgensen 2013年版的教科书,在英国以外,且不是ISTQB以外的文献中,会将此叙述称为是决策到决策路径(DD-path)[9]。
覆盖率分析度量可以确认测试进行的程度如何。最基本的度量是有执行到叙述,相对于所有叙述的比例,有效测试比率1(TER1)[10]:
也有较高阶的覆盖率分析度量,例如考虑执行到控制流跳跃的比例,或是执行到LCSAJ的比例[11]:
上述的度量有阶层的关系,若TER3 = 100%,表示TER2 = 100%,且TER1 = 100%。
TER1和TER2的度量约在1970年代初期出现,TER3则是在1970年代末期。在DO-178标准刚开始时,有要求TER1 = 100%,后来在1992年加上MC/DC(修改条件判断覆盖)的额外要求[12]。许多专案会强制要求更高阶的 TER3 = 100%,例如航太、通讯以及银行[来源请求]。在使用TER3时,有一个实务上的问题,是许多LCSAJ有包括互相矛盾的条件,因此无法执行到。
考虑以下的C语言程式:
#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程式启始、结束及跳转目标列表如下:
LCSAJ编号 | 启始行 | 结束行 | 跳转目标行 |
---|---|---|---|
1 | 10 | 17 | 28 |
2 | 10 | 21 | 25 |
3 | 10 | 26 | 17 |
4 | 17 | 17 | 28 |
5 | 17 | 21 | 25 |
6 | 17 | 26 | 17 |
7 | 25 | 26 | 17 |
8 | 28 | 28 | −1 |
从这段程式可以看出LCSAJ识别到的程式码可能会包括决策点,表示有经过决策判断,判断后的结果是继续执行后面的程式。例如例子中的LCSAJ 2就包括了while
指令,而当时的情形是(count < ITERATIONS)
条件成立。
每一行程式都会划分在一个或是多个LCSAJ范围内,因此有每一行的LCSAJ密度,例如第17行出现在6个LCSAJ范围内,因此其LCSAJ密度为6。在评估程式的可维护性时很有帮助,每一行的LCSAJ密度也反映了修改那一行会影响的LCSAJ数量。
若测试资料可以使所有的LCSAJ都至少执行一次,就满足TER3 = 100%的覆盖率等级。
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.