對(duì)于安全關(guān)鍵代碼,確保應(yīng)用程序執(zhí)行它應(yīng)該執(zhí)行的操作并正確執(zhí)行這些操作的功能測(cè)試只是表面上的問(wèn)題。應(yīng)用程序包含隱藏的復(fù)雜性,這些復(fù)雜性可能會(huì)在不可預(yù)測(cè)的條件下出現(xiàn)。如果編碼不正確,它們可能會(huì)導(dǎo)致災(zāi)難。開(kāi)發(fā)人員必須深入挖掘以測(cè)試所有底層代碼是否存在細(xì)微錯(cuò)誤。但這究竟是什么意思?
雖然可以從系統(tǒng)需求文檔手動(dòng)生成基本功能測(cè)試,但使用自動(dòng)化工具(生成測(cè)試工具和測(cè)試用例的工具、運(yùn)行這些測(cè)試的工具以及評(píng)估測(cè)試有效性的工具)進(jìn)行更深層次的測(cè)試會(huì)更有效。 最后,關(guān)鍵活動(dòng)是通過(guò)覆蓋分析完成的。
在基本層面上,函數(shù)(或過(guò)程)覆蓋分析顯示每個(gè)函數(shù)是否已被調(diào)用。語(yǔ)句覆蓋更進(jìn)一步,提供了一種方法來(lái)確保每一行代碼至少被執(zhí)行一次。但是雖然這些都很有用,但覆蓋分析不僅僅是函數(shù)和語(yǔ)句覆蓋。
安全關(guān)鍵代碼需要更深入的分析
可以在多個(gè)級(jí)別測(cè)試代碼,安全關(guān)鍵代碼需要深入、徹底的研究。分支/決策覆蓋提供了更徹底的檢查,旨在證明每個(gè)分支至少被采用一次,而分支條件組合覆蓋需要測(cè)試所有可能的條件組合。
這聽(tīng)起來(lái)很簡(jiǎn)單,但如果一個(gè)決定取決于四個(gè)或更多條件,那么測(cè)試每個(gè)組合的要求就會(huì)變得不合理。修改條件/決策覆蓋或 MC/DC 旨在提供一種實(shí)用的替代方案。MC/DC 確保:
調(diào)用每個(gè)入口和出口點(diǎn)
每一個(gè)決定都有每一個(gè)可能的結(jié)果
決策中的每個(gè)條件都包含所有可能的結(jié)果
決策中的每個(gè)條件都顯示為獨(dú)立地影響決策的結(jié)果
函數(shù)調(diào)用覆蓋擴(kuò)展了該查詢線,并通過(guò)生成有關(guān)已執(zhí)行哪些函數(shù)調(diào)用的信息來(lái)構(gòu)建函數(shù)覆蓋概念。這很重要,因?yàn)殄e(cuò)誤通常發(fā)生在模塊之間的接口中。
在某些情況下,例如受 DO-178C 等標(biāo)準(zhǔn)約束的關(guān)鍵航空電子應(yīng)用,還需要進(jìn)行更苛刻的測(cè)試。對(duì)于最關(guān)鍵的“DAL A”應(yīng)用,DO-178C 需要目標(biāo)代碼驗(yàn)證,其中包括分析匯編代碼和源代碼的覆蓋信息。
動(dòng)態(tài)測(cè)試通常使用軟件工具進(jìn)行,該工具檢測(cè)源代碼的副本以在運(yùn)行時(shí)提供覆蓋率數(shù)據(jù)。隨后分析該數(shù)據(jù)以準(zhǔn)確揭示代碼的哪些部分已被執(zhí)行,以及執(zhí)行到什么級(jí)別。它以數(shù)據(jù)和控制流程圖以及帶有符號(hào)的源代碼等顯示形式使開(kāi)發(fā)人員可以看到結(jié)果(圖 1)。
【圖1 | LDRA 的 TBvision 代碼覆蓋為 DO-178C 等安全關(guān)鍵標(biāo)準(zhǔn)提供語(yǔ)句、分支和 MC/DC 覆蓋。背景是一個(gè)分支/決策圖,交叉引用了帶注釋的源代碼。前景是每個(gè)功能和通過(guò)/失敗結(jié)果的覆蓋范圍摘要。]
使用自動(dòng)化工具減輕瑣碎的測(cè)試任務(wù)
動(dòng)態(tài)分析可以應(yīng)用于完整的應(yīng)用程序(系統(tǒng)測(cè)試)或它的子集(單元測(cè)試,包括集成組件測(cè)試),并且通常在完整系統(tǒng)可用時(shí)使用這兩種方法的組合。一個(gè)集成的工具套件整理來(lái)自兩個(gè)來(lái)源的信息,以提供整體覆蓋率指標(biāo)。單元測(cè)試工具通過(guò)靜態(tài)分析代碼結(jié)構(gòu),然后圍繞應(yīng)用程序創(chuàng)建一個(gè)“線束”或框架,在測(cè)試期間注入輸入并接收輸出,從而減輕了設(shè)置測(cè)試環(huán)境的繁瑣工作。對(duì)于安全關(guān)鍵型應(yīng)用程序,“測(cè)試向量”必須基于要求,以提供證據(jù)證明代碼對(duì)預(yù)期和未預(yù)期的輸入都按預(yù)期執(zhí)行,但仍滿足要求,僅此而已。
還可以通過(guò)對(duì)源代碼的深入靜態(tài)分析自動(dòng)生成測(cè)試向量,這通常會(huì)導(dǎo)致在運(yùn)行時(shí)覆蓋 50% 到 75% 的代碼。顯然,這并不能提供正確功能的證據(jù),但它確實(shí)在非關(guān)鍵應(yīng)用程序中占有一席之地,否則覆蓋率分析可能不會(huì)發(fā)生。即使在關(guān)鍵應(yīng)用程序中,這種方法通過(guò)驗(yàn)證面對(duì)邊界值、空指針和默認(rèn) switch 語(yǔ)句條件等數(shù)據(jù)的穩(wěn)健行為,將動(dòng)態(tài)分析超越了基于需求的測(cè)試。
在開(kāi)發(fā)周期中盡早開(kāi)始單元測(cè)試是最具成本效益的,甚至可能在目標(biāo)硬件可供開(kāi)發(fā)人員使用之前。這意味著使用在主機(jī)開(kāi)發(fā)系統(tǒng)和目標(biāo)硬件上應(yīng)用相同測(cè)試向量的工具非常重要,以便生成一次測(cè)試用例,從而節(jié)省時(shí)間和金錢(qián)。
一個(gè)完整的工具套件還可以提供數(shù)據(jù)和控制流分析形式的分析,這是 DO-178C(航空電子)和 ISO 26262(汽車(chē))等標(biāo)準(zhǔn)所要求的,以確保功能的每次調(diào)用都已執(zhí)行,并且對(duì)數(shù)據(jù)的每次訪問(wèn)都已執(zhí)行。它通過(guò)源代碼跟蹤變量并報(bào)告異常使用(圖 2)。
【圖2 | 基于當(dāng)前測(cè)試運(yùn)行的變量和參數(shù)使用報(bào)告突出顯示文件中使用變量的文件和位置,并使用允許更精細(xì)測(cè)試的自定義過(guò)濾器。]
這種深層次的測(cè)試——以及對(duì)測(cè)試的徹底和嚴(yán)格的評(píng)估——只有使用一套集成的軟件分析工具才能可靠地完成。
審核編輯:郭婷
-
源代碼
+關(guān)注
關(guān)注
96文章
2946瀏覽量
66894 -
代碼
+關(guān)注
關(guān)注
30文章
4823瀏覽量
68954 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3292瀏覽量
57871
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論