對覆蓋率分析的討論可能會提出許多不同的假設(shè),這些假設(shè)并不總是一致的。這是否意味著檢查所有代碼是否已執(zhí)行?這是否意味著所有要求都已得到執(zhí)行和測試?它是否帶來了一些 100% 以外的數(shù)字可以依賴的功能代碼?我們要做的是確保自己,即使在危及生命的情況下,程序也已經(jīng)過徹底的測試,可以信賴。我們?nèi)绾螌?shí)現(xiàn)這一目標(biāo)以及覆蓋范圍的哪些方面?會讓我們高枕無憂嗎?
軟件測試和分析可以被認(rèn)為是由許多相互依賴的部分組成的整體活動。其中包括需求跟蹤、靜態(tài)和動態(tài)分析、編碼標(biāo)準(zhǔn)合規(guī)性等,包括覆蓋范圍分析。歸根結(jié)底,覆蓋率分析應(yīng)該讓我們了解一段代碼的測試程度和徹底程度。當(dāng)然,這取決于其他測試方法的應(yīng)用程度和徹底性及其結(jié)果。因此,它實(shí)際上是對我們測試的測試,而不是對程序本身的測試。
那么,是什么可以讓我們很好地了解我們測試的好壞呢?
一種方法可能是檢查程序中的所有行是否已執(zhí)行。然而,僅憑這一點(diǎn)并不能告訴我們執(zhí)行路徑是如何到達(dá)這些行的,或者它以什么順序和在什么條件下這樣做。它與需求沒有直接關(guān)系。畢竟,這些要求是首先生成自動和手動測試的基礎(chǔ)。
覆蓋率的另一個(gè)做法是分支覆蓋率,它顯示了代碼段之間的執(zhí)行路徑,但不一定是每一行。分支覆蓋率可以根據(jù)執(zhí)行路徑揭示程序的結(jié)構(gòu)。分支是“這個(gè)”或“那個(gè)”。它告訴我們執(zhí)行可以走哪條路,但它沒有說明為什么代碼會以一種或另一種方式進(jìn)行。這為我們提供了執(zhí)行結(jié)構(gòu)的圖片,但即使它揭示了所有分支在執(zhí)行過程中至少執(zhí)行過一次,它也沒有顯示從分支獲取一條或另一條路徑的條件。也就是說,它不一定表示所有情況(布爾表達(dá)式、條件)都經(jīng)過測試,或者至少測試了所有滿足要求的情況。
表達(dá)式“如果 A 是分支”。當(dāng)然,它可能是一個(gè)更復(fù)雜的表達(dá)式,會導(dǎo)致真或假 A,因此 A 的結(jié)果值就是決策。決策覆蓋率意味著每個(gè)點(diǎn)分支至少被調(diào)用過一次,并且每個(gè)分支采取的所有決策都至少執(zhí)行過一次。這是比分支覆蓋率更強(qiáng)的度量,因?yàn)樗鼘⒎种ф溄拥铰窂健R虼?,旨在?zhí)行程序中每個(gè)決策點(diǎn)的每個(gè)結(jié)果的測試就是分支決策測試。但是,每個(gè)結(jié)果的執(zhí)行并不涉及可能導(dǎo)致該(如果,那么)決定的不同輸入和條件。為此,我們必須轉(zhuǎn)向分支/決策測試及其表親,修改條件/決策覆蓋率(MC / DC)。
MC/DC 使用每個(gè)條件至少調(diào)用一次程序中的每個(gè)進(jìn)入和退出點(diǎn),以便決策至少一次采取所有可能的結(jié)果,并且可以證明更改決策中的任何條件可以獨(dú)立影響該決策。一個(gè)條件被證明通過改變該條件同時(shí)保持固定所有其他可能的條件來獨(dú)立地影響決策的結(jié)果。
雖然指標(biāo)很棒,但僅靠指標(biāo)并不能幫助我們確信我們的代碼將按照我們預(yù)期的方式工作。測試必須與程序的要求相關(guān) - 程序是否做了它應(yīng)該做的事情 - 并且這些測試必須是生成和跟蹤適當(dāng)覆蓋指標(biāo)的測試。這種觀點(diǎn) - 通過可追溯性增強(qiáng)覆蓋范圍 - 是DO-178B和IEC 61508等不同標(biāo)準(zhǔn)所描述的功能安全的關(guān)鍵。這種組合使我們能夠知道代碼做了它應(yīng)該做的事情——我們已經(jīng)通過測試場景執(zhí)行了它。
審核編輯:郭婷
-
代碼
+關(guān)注
關(guān)注
30文章
4788瀏覽量
68616
發(fā)布評論請先 登錄
相關(guān)推薦
評論