fbpx
维基百科

線性程式碼順序及跳轉

線性程式碼順序及跳轉(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

線性程式碼順序及跳轉, linear, code, sequence, jump, 簡稱lcsaj, 是軟體測試相關的術語, 其廣義的定義是一種程式分析方式, 可以識別出要測試程式碼中的結構單元, 其主要用途是用在動態軟體分析, 英语, dynamic, program, analysis, 來確認, 測試到什麼程度才算是足夠, 動態軟體分析用來衡量軟體測試資料的品質以及有效性, 而其量化數據是由要測試程式碼中的結構單元數量來確認, 動態分析若是用來量化測試資料中的結構單元數量, 此分析也會稱為是結結構覆蓋率分析,. 線性程式碼順序及跳轉 Linear code sequence and jump 簡稱LCSAJ 是軟體測試相關的術語 其廣義的定義是一種程式分析方式 可以識別出要測試程式碼中的結構單元 其主要用途是用在動態軟體分析 英语 Dynamic program analysis 中 來確認 測試到什麼程度才算是足夠 1 動態軟體分析用來衡量軟體測試資料的品質以及有效性 而其量化數據是由要測試程式碼中的結構單元數量來確認 動態分析若是用來量化測試資料中的結構單元數量 此分析也會稱為是結結構覆蓋率分析 線性程式碼順序及跳轉也有狹義的定義 是程式碼中明確定義的一段連續程式碼 此定義下的LCSAJ也稱為跳躍 跳躍路徑 JJ path 目录 1 歷史 2 LCSAJ程式區塊的定義及特點 3 有效測試的比率 4 例子 5 參考資料歷史 编辑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 T E R 1 number of statements executed by the test data total number of executable statements displaystyle TER text 1 frac text number of statements executed by the test data text total number of executable statements 也有較高階的覆蓋率分析度量 例如考慮執行到控制流跳躍的比例 或是執行到LCSAJ的比例 11 T E R 2 number of control flow branches executed by the test data total number of control flow branches displaystyle TER text 2 frac text number of control flow branches executed by the test data text total number of control flow branches T E R 3 number of LCSAJs executed by the test data total number of LCSAJs displaystyle TER text 3 frac text number of LCSAJs executed by the test data text total number of LCSAJs 上述的度量有階層的關係 若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 lt stdlib h gt include lt string h gt include lt math h gt 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 lt ITERATIONS val abs rand MAXCOLUMNS totals val 1 if totals val gt MAXCOUNT totals val MAXCOUNT count return 0 這段程式中對應的LCSAJ程式啟始 結束及跳轉目標列表如下 LCSAJ編號 啟始行 結束行 跳轉目標行1 10 17 282 10 21 253 10 26 174 17 17 285 17 21 256 17 26 177 25 26 178 28 28 1從這段程式可以看出LCSAJ識別到的程式碼可能會包括決策點 表示有經過決策判斷 判斷後的結果是繼續執行後面的程式 例如例子中的LCSAJ 2就包括了while指令 而當時的情形是 count lt 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 取自 https zh wikipedia org w index php title 線性程式碼順序及跳轉 amp oldid 67937954, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。