當(dāng)嵌入式開發(fā)人員測試他們的軟件時(shí),有多種力量在起作用。由于對更大的計(jì)算工作負(fù)載、更廣泛的連接以及改進(jìn)的安全性的需求,系統(tǒng)的復(fù)雜性不斷增加,這使得開發(fā)人員更難根據(jù)需求驗(yàn)證代碼。隨著發(fā)布時(shí)間的縮短,測試團(tuán)隊(duì)努力使傳統(tǒng)的測試方法適應(yīng)更大的復(fù)雜性和規(guī)模。
需要一種新的測試方法,團(tuán)隊(duì)正在尋求數(shù)學(xué)上證明的代碼正確性,以顯著提高對其應(yīng)用程序的信心。要了解當(dāng)今的產(chǎn)品目標(biāo)與傳統(tǒng)測試方法之間的差距,考慮復(fù)雜性如何影響測試會有所幫助:
覆蓋。隨著軟件復(fù)雜性的增長,創(chuàng)建涵蓋足夠級別的代碼庫(包括函數(shù)、語句、路徑、決策和條件)的測試變得越來越困難。
規(guī)模。無論測試范圍(特性、組件、庫或功能)如何,單元越多,測試它們所需的時(shí)間和資源就越多。
速度。傳統(tǒng)的測試開發(fā)和執(zhí)行實(shí)踐無法跟上發(fā)布時(shí)間表的步伐,不可避免地迫使在測試覆蓋率和時(shí)間之間進(jìn)行權(quán)衡。
長期以來,人們一直認(rèn)為接近 100% 的代碼覆蓋率是不可能的,因?yàn)檫@樣的目標(biāo)極難實(shí)現(xiàn)且運(yùn)行成本高昂。單元測試、滲透測試、動態(tài)分析 – 所有傳統(tǒng)技術(shù)都需要大量的時(shí)間和資源來執(zhí)行,并導(dǎo)致對系統(tǒng)中錯誤和漏洞的不完整視圖。
隨著軟件技術(shù)和計(jì)算能力的最新進(jìn)步,這種信念現(xiàn)在已成為一個被證明的神話。學(xué)術(shù)和行業(yè)研究人員已經(jīng)開發(fā)出數(shù)學(xué)上嚴(yán)格的技術(shù),稱為形式化方法,可實(shí)現(xiàn)高達(dá) 100% 的代碼覆蓋率并保證系統(tǒng)的正確性 - 現(xiàn)在可供企業(yè)就緒平臺中的安全和安保關(guān)鍵型開發(fā)團(tuán)隊(duì)使用。
了解基于正式方法的測試工具
在紙面上,形式化方法明確證明代碼沒有錯誤和安全漏洞等問題。這些方法使用嚴(yán)格指定的數(shù)學(xué)模型,根據(jù)精確定義的規(guī)范驗(yàn)證軟件的屬性和行為。換句話說,形式化方法可以找到代碼中出現(xiàn)的所有問題。
在實(shí)踐中,任何開發(fā)人員都可以使用且負(fù)擔(dān)得起基于企業(yè)級正式方法的測試工具。它們被稱為詳盡的靜態(tài)分析工具,經(jīng)過精心設(shè)計(jì)和驗(yàn)證,可將正式方法的強(qiáng)大功能集成到安全和安保關(guān)鍵型開發(fā)團(tuán)隊(duì)的現(xiàn)有驗(yàn)證和確認(rèn)流程中。
與傳統(tǒng)的測試和靜態(tài)分析方法相比,這些工具有幾個優(yōu)點(diǎn):
高達(dá) 100% 的應(yīng)用程序覆蓋率,涵蓋所有可能的功能、語句、路徑、決策和條件。
高達(dá) 100% 的輸入覆蓋率,涵蓋被測單元范圍內(nèi)的所有可能值。
數(shù)學(xué)保證代碼中沒有未定義的行為(錯誤和漏洞),導(dǎo)致部署中零問題。
零漏報(bào),因此開發(fā)人員可以增強(qiáng)發(fā)現(xiàn)所有問題的信心。
誤報(bào)率低至零,這意味著開發(fā)人員花在追逐并非真正問題上的時(shí)間更少。
顯著縮短測試時(shí)間,提高資源消耗效率。
圖 1 說明了差異。傳統(tǒng)的測試方法通常是測試用例開發(fā)和算法設(shè)計(jì)的“最大努力”嘗試,受到人力和項(xiàng)目進(jìn)度的限制。這會導(dǎo)致測試每次運(yùn)行執(zhí)行一個代碼分支,并限制團(tuán)隊(duì)在給定測試階段可以覆蓋的內(nèi)容。以正式方法為后盾的詳盡靜態(tài)分析可在單次測試運(yùn)行中并行分析所有分支,將覆蓋率提高到 100%,并顯著縮短測試時(shí)間。
圖 1:傳統(tǒng)測試方法(左)和聲音靜態(tài)分析(右)之間的代碼路徑比較。訪問的段以橙色顯示;未訪問的段為黑色。
詳盡的靜態(tài)分析可以為開發(fā)人員提供一種強(qiáng)大的方法來管理軟件復(fù)雜性,從而極大地改變他們對軟件復(fù)雜性的看法。
詳盡的靜態(tài)分析如何提供幫助
傳統(tǒng)測試方法的一個限制是它們的狀態(tài)空間覆蓋,即數(shù)據(jù)值和輸入、控制和數(shù)據(jù)流的不同組合的數(shù)量以及它們可以覆蓋的輸出路徑的固有限制。例如,傳統(tǒng)的測試方法通常會在給定預(yù)期輸入的情況下測試預(yù)期輸出的函數(shù)。一些靜態(tài)分析工具對此進(jìn)行了擴(kuò)展,以涵蓋更廣泛的輸入和輸出。但由于測試設(shè)計(jì)、實(shí)現(xiàn)和計(jì)劃約束,這些工具無法測試所有可能的行為。
下面的代碼示例演示了一個遞增數(shù)組中的單元格值的 C 函數(shù)。
典型的單元測試將根據(jù)函數(shù)的要求進(jìn)行驗(yàn)證,檢查函數(shù)是否遞增了輸出數(shù)組中的單元格值,并根據(jù)結(jié)果報(bào)告通過或失敗。此測試不一定會檢查數(shù)組索引 *p 是否由于系統(tǒng)中意外或不希望的副作用而導(dǎo)致越界內(nèi)存訪問 - 就像本代碼示例中由于 while 循環(huán)中指定的不正確條件而發(fā)生的那樣。
盡管存在緩沖區(qū)溢出,但針對要求的傳統(tǒng)測試將在調(diào)用函數(shù)后驗(yàn)證數(shù)組是否為 {2, 4, 6, 8},并且始終通過,如以下控制臺輸出所示:
除非測試設(shè)計(jì)者考慮越界數(shù)組訪問的可能性,否則永遠(yuǎn)不會識別此緩沖區(qū)溢出。
這些類型的細(xì)微缺陷可能導(dǎo)致內(nèi)存損壞,從而導(dǎo)致潛在的錯誤、崩潰或應(yīng)用程序漏洞 - 傳統(tǒng)測試方法不可見,但可以通過詳盡的靜態(tài)分析工具發(fā)現(xiàn),如圖 2 所示。該工具檢測到數(shù)組開頭后有 16 個字節(jié)的寫入:緩沖區(qū)溢出。
圖 2:在 TrustInSoft 詳盡靜態(tài)分析工具中查找結(jié)果的屏幕截圖。
這種內(nèi)存損壞可以通過更詳細(xì)的測試用例來揭示,其中越界寫入條件會影響變量名稱的值,即使它不參與測試的函數(shù),如以下控制臺輸出所示:
但是,開發(fā)團(tuán)隊(duì)很少實(shí)現(xiàn)此級別的測試深度,尤其是當(dāng)代碼比此示例更復(fù)雜時(shí)。
硬件感知在靜態(tài)分析中的重要性
更 高級 的 詳盡 靜態(tài) 分析 工具 為 驗(yàn)證 和 確認(rèn) 活動 帶來 硬件 感知, 從而 實(shí)現(xiàn) 更 準(zhǔn)確 和 高效 的 測試 覆蓋率。硬件感知的重要性怎么強(qiáng)調(diào)都不為過,因?yàn)榫幾g器實(shí)現(xiàn)、硬件架構(gòu)和內(nèi)存對齊的差異可能導(dǎo)致測試條件和代碼行為大不相同。例如:
在 64 位目標(biāo)上,long 通常為 64 位,int 通常為 32 位。
在 32 位目標(biāo)上,long 和 int 通常都是 32 位。
這些硬件差異會影響測試條件、輸入和路徑,如以下代碼示例所示:
如果沒有硬件感知,測試或分析方法將無法確定最后一條語句是否導(dǎo)致整數(shù)溢出(32 位目標(biāo))或不導(dǎo)致整數(shù)溢出(64 位目標(biāo))。在某些情況下,測試將執(zhí)行比必要的更多的運(yùn)行,以涵蓋硬件支持范圍之外的條件。在其他情況下,測試可能只是錯過潛在的溢出。硬件感知靜態(tài)分析在 100% 覆蓋率和實(shí)現(xiàn)覆蓋率所需的最少測試用例數(shù)量之間提供了完美的平衡。
另一個關(guān)鍵的硬件差異是字節(jié)序,如以下代碼示例所示:
根據(jù)底層硬件的字節(jié)序,變量 c 將設(shè)置為 0xBE(大端序)或0xEF(小端序)——這是測試執(zhí)行的關(guān)鍵區(qū)別。
這種微妙的差異可能會導(dǎo)致災(zāi)難性的結(jié)果。請考慮將以下語句添加到上述代碼示例中的情況:
在大端系統(tǒng)上,此語句將導(dǎo)致除以零條件,并可能導(dǎo)致應(yīng)用程序崩潰或其他不良行為。在小端系統(tǒng)上,此語句是有效的。了解這些差異的測試方法可以得出更準(zhǔn)確的結(jié)果。
包含硬件感知的詳盡靜態(tài)分析工具還具有以下優(yōu)點(diǎn):
開發(fā)人員可以運(yùn)行硬件感知分析,而無需將物理目標(biāo)連接到主機(jī)。
目標(biāo)測試可以在開發(fā)生命周期的早期運(yùn)行,甚至在物理硬件可用之前。
開發(fā)團(tuán)隊(duì)可以提高測試能力并降低成本,因?yàn)椴恍枰總€主機(jī)和開發(fā)人員都使用物理硬件。
詳盡靜態(tài)分析的未來
優(yōu)先考慮詳盡靜態(tài)分析的嵌入式開發(fā)團(tuán)隊(duì)(代碼覆蓋率高達(dá) 100%,準(zhǔn)確性遠(yuǎn)高于傳統(tǒng)測試)將從其測試投資中獲得最高價(jià)值。那些現(xiàn)在能夠加入的開發(fā)人員將能夠更好地提供更高質(zhì)量的代碼,并隨著時(shí)間的推移提高測試效率。
從長遠(yuǎn)來看,從這種嚴(yán)格的測試中獲得的結(jié)果和知識將導(dǎo)致“零問題”保證。這些原則將在開發(fā)過程的早期帶來更強(qiáng)的可測試性,以支持安全和安保關(guān)鍵型產(chǎn)品要求和設(shè)計(jì),并顯著降低現(xiàn)場軟件故障和漏洞的可能性。
編輯:黃飛
-
函數(shù)
+關(guān)注
關(guān)注
3文章
4341瀏覽量
62797 -
嵌入式軟件
+關(guān)注
關(guān)注
4文章
240瀏覽量
26672 -
代碼
+關(guān)注
關(guān)注
30文章
4808瀏覽量
68808 -
軟件測試
+關(guān)注
關(guān)注
2文章
231瀏覽量
18612
發(fā)布評論請先 登錄
相關(guān)推薦
評論