线性程式码顺序及跳转

线性程式码顺序及跳转(Linear code sequence and jump)简称LCSAJ,是软体测试相关的术语。其广义的定义是一种程式分析方式,可以识别出要测试程式码中的结构单元。其主要用途是用在动态软体分析英语Dynamic program analysis中,来确认“测试到什么程度才算是足够?”[1]。动态软体分析用来衡量软体测试资料的品质以及有效性,而其量化数据是由要测试程式码中的结构单元数量来确认。动态分析若是用来量化测试资料中的结构单元数量,此分析也会称为是结结构覆盖率分析

线性程式码顺序及跳转也有狭义的定义,是程式码中明确定义的一段连续程式码,此定义下的LCSAJ也称为跳跃—跳跃路径(JJ-path)。

历史

编辑

LCSAJ分析法是由Michael Hennell英语Michael Hennell教授提出,目的是为了评估原子核物理学用到的数学函式库的品质[2][3]。Hennell教授后来成立了LDRA公司英语Liverpool Data Research Associates,将为计划开发的测试平台商品化贩售,也就是后来的LDRA Testbed英语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英语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%的覆盖率等级。

参考资料

编辑
  1. ^ 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
  2. ^ M. A. Hennell, An experimental testbed for numerical software. {I}. {Fortran}, The Computer Journal 21(4):333--336, @nov, 1978
  3. ^ M. A. Hennell and D. Hedley, An experimental testbed for numerical software. {II}. {ALGOL 68}, The Computer Journal 22(1):53--56, @feb, 1979
  4. ^ M.A. Hennell, M.R.Woodward and D.Hedley, "On program analysis", Information Processing Letters, 5(5), pp. 136 – 140, 1976
  5. ^ 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
  6. ^ 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
  7. ^ Martyn A. Ould and Charles Unwin (编). Testing in Software Development. Cambridge University Press. 1986: 102. ISBN 978-0-521-33786-1. 
  8. ^ 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. 
  9. ^ Paul C. Jorgensen. Software Testing: A Craftsman’s Approach, Fourth Edition. CRC Press. 2013: 136. ISBN 978-1-4665-6068-0. 
  10. ^ J.R.Brown, "Practical Application of Automated Software Tools", TRW Report No. TRW-SS-72-05, presented at WESCON, 1972
  11. ^ 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
  12. ^ Software Considerations in Airborne System and Equipment Certification-RTCA/DO-178B, RTCA Inc., Washington D.C., December 1992