线性程式码顺序及跳转
线性程式码顺序及跳转(Linear code sequence and jump)简称LCSAJ,是软体测试相关的术语。其广义的定义是一种程式分析方式,可以识别出要测试程式码中的结构单元。其主要用途是用在动态软体分析中,来确认“测试到什么程度才算是足够?”[1]。动态软体分析用来衡量软体测试资料的品质以及有效性,而其量化数据是由要测试程式码中的结构单元数量来确认。动态分析若是用来量化测试资料中的结构单元数量,此分析也会称为是结结构覆盖率分析。
线性程式码顺序及跳转也有狭义的定义,是程式码中明确定义的一段连续程式码,此定义下的LCSAJ也称为跳跃—跳跃路径(JJ-path)。
历史
[编辑]LCSAJ分析法是由Michael Hennell教授提出,目的是为了评估原子核物理学用到的数学函式库的品质[2][3]。Hennell教授后来成立了LDRA公司,将为计划开发的测试平台商品化贩售,也就是后来的LDRA Testbed。
LCSAJ是从1976年开始的[4],现在也称为是跳跃—跳跃路径(JJ-path)[5]。
LCSAJ程式区块的定义及特点
[编辑]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%的覆盖率等级。
参考资料
[编辑]- ^ M.A.Hennell, D.Hedley and M.R.Woodward, "Quantifying the test effectiveness of Algol 68 programs", Proceedings of the Strathclyde ALGOL 68 conference 1977, pp. 36 – 41, ISSN 0362-1340
- ^ M. A. Hennell, An experimental testbed for numerical software. {I}. {Fortran}, The Computer Journal 21(4):333--336, @nov, 1978
- ^ M. A. Hennell and D. Hedley, An experimental testbed for numerical software. {II}. {ALGOL 68}, The Computer Journal 22(1):53--56, @feb, 1979
- ^ M.A. Hennell, M.R.Woodward and D.Hedley, "On program analysis", Information Processing Letters, 5(5), pp. 136 – 140, 1976
- ^ M. R. Woodward, M. A. Hennell, "On the relationship between two control-flow coverage criteria: all JJ-paths and MCDC", Information and Software Technology 48 (2006) pp. 433–440
- ^ M.A.Hennell, D.Hedley and I.J.Riddell, "Assessing a Class of Software Tools", Proceedings of the 7th International Conference on Software Engineering March 1984, pp. 266 – 277. ISSN 0270-5257
- ^ Martyn A. Ould and Charles Unwin (编). Testing in Software Development. Cambridge University Press. 1986: 102. ISBN 978-0-521-33786-1.
- ^ Groenda, Henning. Certifying Software Component Performance Specifications. KIT Scientific Publishing. 2013: 198–200. ISBN 978-3-7315-0080-3. quoting from Yates, D. F. Inclusion, subsumption, JJ-paths, and structured path testing: a Redress. Software Testing, Verification and Reliability. 2009, 19 (3): 199–213. doi:10.1002/stvr.400.
- ^ Paul C. Jorgensen. Software Testing: A Craftsman’s Approach, Fourth Edition. CRC Press. 2013: 136. ISBN 978-1-4665-6068-0.
- ^ J.R.Brown, "Practical Application of Automated Software Tools", TRW Report No. TRW-SS-72-05, presented at WESCON, 1972
- ^ M.R.Woodward, D.Hedley and M.A.Hennell, “Experience with Path Analysis and Testing of Programs”, IEEE Transactions on Software Engineering, Vol. 6, No. 3, pp. 278 – 286, May 1980
- ^ Software Considerations in Airborne System and Equipment Certification-RTCA/DO-178B, RTCA Inc., Washington D.C., December 1992