對(duì)于安全關(guān)鍵代碼,確保應(yīng)用程序執(zhí)行它應(yīng)該執(zhí)行的操作并正確執(zhí)行這些操作的功能測試只是表面上的問題。應(yīng)用程序包含隱藏的復(fù)雜性,這些復(fù)雜性可能會(huì)在不可預(yù)測的條件下出現(xiàn)。如果編碼不正確,它們可能會(huì)導(dǎo)致災(zāi)難。開發(fā)人員必須深入挖掘以測試所有底層代碼是否存在細(xì)微錯(cuò)誤。但這究竟是什么意思?
雖然可以從系統(tǒng)需求文檔手動(dòng)生成基本功能測試,但使用自動(dòng)化工具(生成測試工具和測試用例的工具、運(yùn)行這些測試的工具以及評(píng)估測試有效性的工具)進(jìn)行更深層次的測試會(huì)更有效。 最后,關(guān)鍵活動(dòng)是通過覆蓋分析完成的。
在基本層面上,函數(shù)(或過程)覆蓋分析顯示每個(gè)函數(shù)是否已被調(diào)用。語句覆蓋更進(jìn)一步,提供了一種方法來確保每一行代碼至少被執(zhí)行一次。但是雖然這些都很有用,但覆蓋分析不僅僅是函數(shù)和語句覆蓋。
安全關(guān)鍵代碼需要更深入的分析
可以在多個(gè)級(jí)別測試代碼,安全關(guān)鍵代碼需要深入、徹底的研究。分支/決策覆蓋提供了更徹底的檢查,旨在證明每個(gè)分支至少被采用一次,而分支條件組合覆蓋需要測試所有可能的條件組合。
這聽起來很簡單,但如果一個(gè)決定取決于四個(gè)或更多條件,那么測試每個(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ān)已執(zhí)行哪些函數(shù)調(diào)用的信息來構(gòu)建函數(shù)覆蓋概念。這很重要,因?yàn)殄e(cuò)誤通常發(fā)生在模塊之間的接口中。
在某些情況下,例如受 DO-178C 等標(biāo)準(zhǔn)約束的關(guān)鍵航空電子應(yīng)用,還需要進(jìn)行更苛刻的測試。對(duì)于最關(guān)鍵的“DAL A”應(yīng)用,DO-178C 需要目標(biāo)代碼驗(yàn)證,其中包括分析匯編代碼和源代碼的覆蓋信息。
動(dòng)態(tài)測試通常使用軟件工具進(jìn)行,該工具檢測源代碼的副本以在運(yùn)行時(shí)提供覆蓋率數(shù)據(jù)。隨后分析該數(shù)據(jù)以準(zhǔn)確揭示代碼的哪些部分已被執(zhí)行,以及執(zhí)行到什么級(jí)別。它以數(shù)據(jù)和控制流程圖以及帶有符號(hào)的源代碼等顯示形式使開發(fā)人員可以看到結(jié)果(圖 1)。

【圖1 | LDRA 的 TBvision 代碼覆蓋為 DO-178C 等安全關(guān)鍵標(biāo)準(zhǔn)提供語句、分支和 MC/DC 覆蓋。背景是一個(gè)分支/決策圖,交叉引用了帶注釋的源代碼。前景是每個(gè)功能和通過/失敗結(jié)果的覆蓋范圍摘要。]
使用自動(dòng)化工具減輕瑣碎的測試任務(wù)
動(dòng)態(tài)分析可以應(yīng)用于完整的應(yīng)用程序(系統(tǒng)測試)或它的子集(單元測試,包括集成組件測試),并且通常在完整系統(tǒng)可用時(shí)使用這兩種方法的組合。一個(gè)集成的工具套件整理來自兩個(gè)來源的信息,以提供整體覆蓋率指標(biāo)。單元測試工具通過靜態(tài)分析代碼結(jié)構(gòu),然后圍繞應(yīng)用程序創(chuàng)建一個(gè)“線束”或框架,在測試期間注入輸入并接收輸出,從而減輕了設(shè)置測試環(huán)境的繁瑣工作。對(duì)于安全關(guān)鍵型應(yīng)用程序,“測試向量”必須基于要求,以提供證據(jù)證明代碼對(duì)預(yù)期和未預(yù)期的輸入都按預(yù)期執(zhí)行,但仍滿足要求,僅此而已。
還可以通過對(duì)源代碼的深入靜態(tài)分析自動(dòng)生成測試向量,這通常會(huì)導(dǎo)致在運(yùn)行時(shí)覆蓋 50% 到 75% 的代碼。顯然,這并不能提供正確功能的證據(jù),但它確實(shí)在非關(guān)鍵應(yīng)用程序中占有一席之地,否則覆蓋率分析可能不會(huì)發(fā)生。即使在關(guān)鍵應(yīng)用程序中,這種方法通過驗(yàn)證面對(duì)邊界值、空指針和默認(rèn) switch 語句條件等數(shù)據(jù)的穩(wěn)健行為,將動(dòng)態(tài)分析超越了基于需求的測試。
在開發(fā)周期中盡早開始單元測試是最具成本效益的,甚至可能在目標(biāo)硬件可供開發(fā)人員使用之前。這意味著使用在主機(jī)開發(fā)系統(tǒng)和目標(biāo)硬件上應(yīng)用相同測試向量的工具非常重要,以便生成一次測試用例,從而節(jié)省時(shí)間和金錢。
一個(gè)完整的工具套件還可以提供數(shù)據(jù)和控制流分析形式的分析,這是 DO-178C(航空電子)和 ISO 26262(汽車)等標(biāo)準(zhǔn)所要求的,以確保功能的每次調(diào)用都已執(zhí)行,并且對(duì)數(shù)據(jù)的每次訪問都已執(zhí)行。它通過源代碼跟蹤變量并報(bào)告異常使用(圖 2)。

【圖2 | 基于當(dāng)前測試運(yùn)行的變量和參數(shù)使用報(bào)告突出顯示文件中使用變量的文件和位置,并使用允許更精細(xì)測試的自定義過濾器。]
這種深層次的測試——以及對(duì)測試的徹底和嚴(yán)格的評(píng)估——只有使用一套集成的軟件分析工具才能可靠地完成。
審核編輯:郭婷
-
源代碼
+關(guān)注
關(guān)注
96文章
2953瀏覽量
70328 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
73974 -
應(yīng)用程序
+關(guān)注
關(guān)注
38文章
3344瀏覽量
60259
發(fā)布評(píng)論請(qǐng)先 登錄
Parasoft C/C++test:嵌入式安全關(guān)鍵行業(yè)的一體化軟件測試解決方案
嵌入式軟件單元測試必要性與專業(yè)工具重要性的系統(tǒng)性專業(yè)研究報(bào)告
芯片測試覆蓋率99%就夠了嗎?給DFT設(shè)計(jì)提個(gè)醒
汽車軟件質(zhì)量躍遷的系統(tǒng)性路徑:基于ISO 26262標(biāo)準(zhǔn)的單元測試體系重構(gòu)與中日實(shí)踐深度對(duì)比(2026學(xué)術(shù)研究報(bào)告)
嵌入式軟件單元測試中AI自動(dòng)化與人工檢查的協(xié)同機(jī)制研究:基于專業(yè)工具的實(shí)證分析
分析嵌入式軟件代碼的漏洞-代碼注入
C語言單元測試在嵌入式軟件開發(fā)中的作用及專業(yè)工具的應(yīng)用
智能網(wǎng)聯(lián)汽車測試場景覆蓋度分析
如何確保電能質(zhì)量在線監(jiān)測裝置的安全防護(hù)檢查覆蓋所有關(guān)鍵環(huán)節(jié)
上海 11月2日-3日《電路測試技術(shù)與測試實(shí)例及案例分析》公開課即將開始!
通過覆蓋分析深入研究安全關(guān)鍵代碼測試
評(píng)論