0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

更好地測量代碼覆蓋率的 9 個技巧

鄭成枝 ? 來源:ze55me ? 作者:ze55me ? 2022-07-14 15:58 ? 次閱讀

測量代碼覆蓋率對于嵌入式系統(tǒng)來說越來越重要,但需要一些經(jīng)驗。這是因為有一些障礙需要克服,尤其是小目標(biāo)。但是,使用正確的方法和合適的工具,無需過多努力即可測量測試覆蓋率。九個實用技巧可幫助您入門。

測量測試覆蓋率,也稱為代碼覆蓋率,對于嵌入式系統(tǒng)變得越來越重要。在許多情況下,這些設(shè)備對安全或業(yè)務(wù)至關(guān)重要。流程基于物聯(lián)網(wǎng)設(shè)備,患者依賴工作起搏器和智能胰島素泵,沒有嵌入式軟件就無法想象汽車和航空業(yè)。這份清單幾乎可以無限延續(xù)。隨著各種設(shè)備的重要性增加,在安全、安保和功能方面必須滿足的要求也在增加。安全標(biāo)準(zhǔn)將這一點考慮在內(nèi),并明確要求將測試覆蓋率記錄為產(chǎn)品驗證的一部分。

特別是對于初學(xué)者來說,測量代碼覆蓋率似乎非常復(fù)雜和耗時。但是,如果您注意一些基本方面,事情很快就會變得容易。

1.設(shè)定期望

通常并不完全清楚對代碼覆蓋的期望。覆蓋率測量并非旨在直接改進(jìn)代碼。他們的目的是確定代碼是否經(jīng)過全面測試以及測試用例是否完整。因此,代碼覆蓋率更適合于改進(jìn)測試——并最終證明已經(jīng)執(zhí)行了足夠的測試。

2. 確定所需的測試覆蓋水平

有許多不同的測試覆蓋級別??梢哉f:測試覆蓋率越嚴(yán)格和詳細(xì),實現(xiàn)它所需的努力和成本就越大。

不幸的是,只有少數(shù)標(biāo)準(zhǔn),如航空領(lǐng)域的 DO-178C、電氣/電子、可編程電子安全相關(guān)系統(tǒng)的功能安全性 IEC 61508 或汽車領(lǐng)域的 ISO 26262,對所需的代碼覆蓋級別給出了具體指導(dǎo)。

根據(jù) IEC 61508 的安全完整性等級 (SIL) 或 ISO 26262 的汽車安全等級 (ASIL),需要語句覆蓋率、分支覆蓋率或 MC/DC(修改條件/決策覆蓋率)(有關(guān)代碼覆蓋率級別的更多信息,請參閱單獨解釋)。以下適用于所有標(biāo)準(zhǔn):可能錯誤的影響越危險,所需的覆蓋級別就越嚴(yán)格。

這可以從 ISO 26262 標(biāo)準(zhǔn)的下表中看出。最高安全等級 ASIL D 需要最高覆蓋等級 MC/DC。表中++代表強(qiáng)烈推薦,+代表推薦。在這里我們可以說完整的修改條件/決策覆蓋自動意味著完整的分支覆蓋,而完整的分支覆蓋自動意味著完整的語句覆蓋。

poYBAGLOlCqAFr98AADFMQ8UCp8885.png

poYBAGLOlCqAFr98AADFMQ8UCp8885.png


圖 1:ISO 26262 表 12 – 軟件單元級別的結(jié)構(gòu)覆蓋度量(來源:國際標(biāo)準(zhǔn) ISO 26262-6)

對于沒有通過標(biāo)準(zhǔn)規(guī)定的軟件,提前確定哪些代碼需要根據(jù)哪些標(biāo)準(zhǔn)進(jìn)行測試也很重要。將上述標(biāo)準(zhǔn)用作指南并將測試范圍與系統(tǒng)的關(guān)鍵性保持一致可能會有所幫助。

三、測試范圍的確定

完整的代碼覆蓋率最初意味著已達(dá)到指定測試級別的 100%。然而,這通常只在安全關(guān)鍵區(qū)域是必要的。

僅僅為了滿足這個標(biāo)準(zhǔn)而瞄準(zhǔn) 100% 的代碼覆蓋率通常是沒有幫助的。重要的是要知道為什么要運行某些測試用例。如果您不知道,那么重復(fù)測試一遍又一遍地運行已經(jīng)測試過的代碼的風(fēng)險很高。這種更高的努力并沒有得到回報,因為這些額外的測試并沒有提供任何新的見解。順便說一句,使用代碼覆蓋分析器是避免這種冗余測試的好方法。

在非關(guān)鍵應(yīng)用領(lǐng)域,測試既不應(yīng)該“太少”也不“完整”,而應(yīng)該“足夠”。

4. 確定支持的編程語言

有許多代碼覆蓋分析器:從免費工具(例如 GNU 編譯器集合 (GCC) 的一部分 GNU Coverage Testing Tool Gcov)到全面的解決方案(例如Verifysoft Technology 的Testwell CTC++ ),它除了支持所有代碼覆蓋之外級別還支持各種語言。如果可能,公司使用的所有語言都應(yīng)該能夠使用單一的覆蓋工具進(jìn)行處理。這樣,開發(fā)人員和測試人員可以在統(tǒng)一的界面中工作,而不必熟悉不同的工具。對于嵌入式軟件開發(fā),該工具應(yīng)至少涵蓋 C、C++ 和 Java


關(guān)于代碼覆蓋級別的進(jìn)一步說明

功能覆蓋

函數(shù)覆蓋率測量是否調(diào)用了程序的所有函數(shù)。功能覆蓋率是通常測試覆蓋率級別中“最弱的”。由于它忽略了軟件的內(nèi)部工作,所以它的實用性很低。

聲明覆蓋范圍

語句覆蓋率決定了測試執(zhí)行了哪些語句。例如,這可以用于檢測死代碼。它還顯示測試是否適用于所有語句。

決策覆蓋/分支覆蓋

在此覆蓋級別上,每個決策必須至少測試一次為真,一次為假。對于普通的 if 語句,這對應(yīng)于分支覆蓋,其中每個分支都必須已執(zhí)行。

條件覆蓋

條件覆蓋詳細(xì)考慮復(fù)合決策。對于由通過布爾運算符組成的多個原子條件組成的決策,必須將這些條件中的每一個單獨測試為“真”和“假”。

多條件覆蓋和修改條件/決策覆蓋 (MC/DC)

對于多條件覆蓋,必須檢查所有可能的真假組合以進(jìn)行復(fù)合決策。在一個決策中有多個條件的情況下,這需要大量幾乎不切實際的測試用例。因此,在實踐和標(biāo)準(zhǔn)中,修改的條件/決策覆蓋(MC/DC)是相關(guān)的,其中測試用例的數(shù)量減少了,而測試覆蓋的信息價值仍然足夠高。對于 MC/DC,使用復(fù)合條件的所有原子條件。對每一個原子條件測試一個測試用例對,這會導(dǎo)致復(fù)合條件的整體結(jié)果發(fā)生變化,但只有考慮的原子條件的真值發(fā)生變化,而其他原子條件的真值必須保持不變持續(xù)的。

5.節(jié)省內(nèi)存空間

在小目標(biāo)上測量代碼覆蓋率時,有限的內(nèi)存空間通常是一個障礙。原因是需要對代碼進(jìn)行檢測:為了測量覆蓋率,代碼覆蓋率工具會在代碼中插入計數(shù)器。此外,必須在要測試的目標(biāo)上實現(xiàn)一個庫,其中包括處理到主機(jī)的數(shù)據(jù)傳輸。

計數(shù)器通常作為全局?jǐn)?shù)組存儲在數(shù)據(jù)存儲器中。特別是對于尺寸非常緊湊的目標(biāo),這可能會導(dǎo)致問題。

補(bǔ)救措施是專門用于嵌入式設(shè)備的代碼覆蓋率分析器。此類工具盡可能少用。在檢測開銷仍然很高的情況下,可以針對各個代碼部分單獨分析代碼覆蓋率。

第三種方法是減小計數(shù)器的大小。通常,計數(shù)器的大小為 32 位。特殊安排將計數(shù)器大小減少到 16 或 8 位。但是,必須注意避免溢出。覆蓋分析儀 Testwell CTC++ 的 bit-cov-measure 是針對小型嵌入式目標(biāo)和微處理器的特殊安排。

6. 檢查可能對處理器造成的影響

為了節(jié)省成本,很多嵌入式設(shè)備不僅內(nèi)存小,而且處理器也經(jīng)常有局限性。但是,儀器也會影響處理器。因此,可能會超出定義的時間,這可能會導(dǎo)致在某些情況下程序運行錯誤。

不幸的是,由于處理器負(fù)載略高,無法提前可靠地預(yù)測是否會出現(xiàn)問題??赡艿挠绊懼粫谙鄳?yīng)的項目中變得明顯。出于這個原因,還應(yīng)根據(jù)其對時序的影響來選擇代碼覆蓋分析器。如有必要,使用較小的計數(shù)器(如上所述)或部分儀器可以糾正這種情況。

也可以在覆蓋分析的情況下運行一次測試,在沒有覆蓋分析的情況下運行一次,以確定覆蓋分析是否導(dǎo)致程序行為的變化。

7.檢查集成到您的工具鏈中的可能性

越來越多的測試正在自動化。這是有道理的,因為人工干預(yù)始終是潛在的錯誤來源,也會導(dǎo)致巨大的成本。構(gòu)建系統(tǒng)測試的自動化是必需的,尤其是在使用持續(xù)集成/持續(xù)部署 (CI/CD) 的敏捷開發(fā)中。但是,這要求使用的代碼覆蓋分析器可以集成到工具鏈和構(gòu)建系統(tǒng)中。此外,覆蓋工具也應(yīng)該獨立于所使用的編譯器。

尤其是在大型開發(fā)項目中,自動化測試和代碼覆蓋率的自動捕獲是不可缺少的。因此,重要的是代碼覆蓋工具可以輕松順利地集成到工具鏈中。另一方面,復(fù)雜的儀表板和前端對于自動化測試來說是微不足道的。

8. 驗證報告的可理解性

代碼覆蓋會產(chǎn)生大量數(shù)據(jù)。每個測試領(lǐng)域——單元測試、模塊測試、功能測試等——都提供了自己的代碼覆蓋率數(shù)據(jù)。為了獲得完整的圖片,應(yīng)該匯總這些信息。由代碼覆蓋率分析器以有意義且可解釋的方式準(zhǔn)備此信息。

此外,這些數(shù)據(jù)在可能需要的認(rèn)證或?qū)徍朔矫嬉埠苤匾?/p>

重要的是,覆蓋工具提供的信息既可以用于進(jìn)一步自動處理的機(jī)器可讀形式(例如 XML),也可以以人類可讀的形式(例如 HTML)提供,以便快速和良好地概覽。

pYYBAGLOlDCAYNZ1AAIyevPkWtA296.png

pYYBAGLOlDCAYNZ1AAIyevPkWtA296.png


圖 2:代碼覆蓋率分析器 Testwell CTC++ 的 HTML 報告(函數(shù)摘要)一目了然地顯示了測試覆蓋了哪些函數(shù)。完全覆蓋的功能以藍(lán)色顯示。對于以紅色顯示的功能,覆蓋率低于 100%。例如,函數(shù)“l(fā)ights()”具有 75% 的多條件覆蓋率和 83% 的語句覆蓋率(TER 代表“測試有效性比率”)。(來源:Verifysoft Technology)

pYYBAGLOlDaAHc7OAACblo2cpjI332.png

pYYBAGLOlDaAHc7OAACblo2cpjI332.png


圖 3:Testwell CTC++ 的執(zhí)行配置文件顯示了源代碼中涵蓋項目的詳細(xì)信息。(來源:Verifysoft Technology)

9. 檢查代碼覆蓋工具是否適合開發(fā)安全關(guān)鍵型軟件

對于安全關(guān)鍵型軟件的開發(fā),不言而喻,代碼覆蓋工具必須支持相應(yīng)標(biāo)準(zhǔn)要求的覆蓋水平。

此外,標(biāo)準(zhǔn)要求對整個工具鏈進(jìn)行鑒定。用于代碼覆蓋分析器的工具鑒定工具包的可用性大大簡化了這項工作。在這種情況下,工具提供商是否在此提供適當(dāng)?shù)慕ㄗh也很重要。

結(jié)論

測量代碼覆蓋率并非易事,但也不是太復(fù)雜。因此,幾乎沒有任何充分的理由放棄代碼覆蓋——即使在非關(guān)鍵領(lǐng)域也是如此。測試覆蓋率在多個層面上有所幫助:可以優(yōu)化測試和測試程序,從而帶來顯著的成本和時間優(yōu)勢。此外,代碼覆蓋率確保產(chǎn)品已經(jīng)過充分測試,并以一定的最低質(zhì)量到達(dá)客戶手中。

嵌入式系統(tǒng)供應(yīng)商不應(yīng)該重蹈 IT 行業(yè)的覆轍:交付在客戶現(xiàn)場成熟的“香蕉軟件”。嵌入式設(shè)備的用戶不會接受這一點——尤其是當(dāng)涉及“關(guān)鍵”產(chǎn)品時,例如汽車行業(yè)的醫(yī)療設(shè)備或 ECU。

審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 分析器
    +關(guān)注

    關(guān)注

    0

    文章

    92

    瀏覽量

    12493
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4788

    瀏覽量

    68611
  • 代碼覆蓋率
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    6826
收藏 人收藏

    評論

    相關(guān)推薦

    電導(dǎo)的定義和測量原理

    電導(dǎo)測量技術(shù)已經(jīng)經(jīng)歷了一多世紀(jì)的發(fā)展,至今它依然是分析領(lǐng)域中廣泛使用的一重要參數(shù)。由于其高度的可靠性、出色的靈敏度、迅速的響應(yīng)能力以及相對低廉的成本,電導(dǎo)
    的頭像 發(fā)表于 11-05 16:13 ?939次閱讀
    電導(dǎo)<b class='flag-5'>率</b>的定義和<b class='flag-5'>測量</b>原理

    一文帶你了解透過測量

    實驗室在這一領(lǐng)域擁有先進(jìn)的技術(shù)和設(shè)備,能夠為客戶提供精準(zhǔn)的透過測量服務(wù),確保測量結(jié)果的可靠性與科學(xué)性。測定透過的重要意義及其應(yīng)用透光
    的頭像 發(fā)表于 11-04 13:00 ?155次閱讀
    一文帶你了解透過<b class='flag-5'>率</b><b class='flag-5'>測量</b>

    光學(xué)透過測量儀的技術(shù)原理和應(yīng)用場景

    測量儀支持多波長測量功能,可以選擇不同的光源和濾光片來覆蓋紫外、可見光和紅外等多個波長范圍,以滿足不同材料的透過
    發(fā)表于 10-16 14:38

    synopsys 的design ware:DW_fpv_div,浮點數(shù)除法器,默認(rèn)32位下,想提升覆蓋率(TMAX),如果用功能case去提升覆蓋率呢?

    公司某個項目用到了這個DW:DW_fpv_div,但是scan跑完,這個模塊覆蓋率只有60%多,現(xiàn)在要我用TMAX軟件,通過功能去覆蓋,我看了下rpt報的faults點,嘗試去寫了幾個特殊值去做除法
    發(fā)表于 10-15 18:38

    如何測量THS3001的壓擺

    我想測量THS3001的壓擺,請問測量方法是怎樣的?對測量儀器有何要求?測量電路是隨便一
    發(fā)表于 09-24 07:20

    利用靜態(tài)檢查工具完善功能安全中測試覆蓋率

    在功能安全中測試覆蓋率是比較重要的概念,也是在驗證過程中通常需要花費時間較多的步驟,如果能借助于靜態(tài)檢查工具的死邏輯查找和聲明、測試用例自動補(bǔ)全等功能往往能取得事半功倍的效果。
    的頭像 發(fā)表于 09-05 09:15 ?346次閱讀
    利用靜態(tài)檢查工具完善功能安全中測試<b class='flag-5'>覆蓋率</b>

    2025年智能水表將覆蓋全北京!超聲波測量技術(shù)助力智能水表實現(xiàn)全天候高精度流量監(jiān)測

    北京日報報道,預(yù)計到“十四五”規(guī)劃期末,北京市將基本實現(xiàn)智能遠(yuǎn)傳水表的全覆蓋。據(jù)2023年3月22日的數(shù)據(jù)顯示,北京市自來水集團(tuán)已經(jīng)為用戶安裝了超過330萬支智能遠(yuǎn)傳水表,覆蓋率超過了50%。
    的頭像 發(fā)表于 07-19 16:05 ?665次閱讀
    2025年智能水表將<b class='flag-5'>覆蓋</b>全北京!超聲波<b class='flag-5'>測量</b>技術(shù)助力智能水表實現(xiàn)全天候高精度流量監(jiān)測

    瑞薩RX MCU功能安全解決方案簡介(4-2)SIL3系統(tǒng)軟件包

    經(jīng)證明,功能安全平臺軟件執(zhí)行的自我診斷和交叉監(jiān)測的診斷覆蓋率可以達(dá)到90%。
    的頭像 發(fā)表于 07-08 18:33 ?1318次閱讀
    瑞薩RX MCU功能安全解決方案簡介(4-2)SIL3系統(tǒng)軟件包

    單元測試工具TESSY 新版本亮點速覽:提供測試駕駛艙視圖、超級覆蓋率、代碼訪問分析、增強(qiáng)覆蓋率審查

    各種測試對象和方法的所有覆蓋率測量結(jié)果,并記錄在新的測試總結(jié)報告中。 了解更多TESSY新版本功能詳情或申請免費試用,歡迎咨詢TESSY中國授權(quán)分銷商——龍智。 新版本功能亮點速覽: 1、超級覆蓋率 逐行評估源
    的頭像 發(fā)表于 07-08 16:20 ?447次閱讀
    單元測試工具TESSY 新版本亮點速覽:提供測試駕駛艙視圖、超級<b class='flag-5'>覆蓋率</b>、<b class='flag-5'>代碼</b>訪問分析、增強(qiáng)<b class='flag-5'>覆蓋率</b>審查

    該如何提高代碼容錯、降低代碼耦合度?

    提高RT-Thread代碼的容錯和降低耦合度是確保代碼質(zhì)量和可維護(hù)性的關(guān)鍵,下面列舉了幾種在編寫代碼時,提高代碼容錯
    的頭像 發(fā)表于 06-26 08:10 ?669次閱讀
    該如何提高<b class='flag-5'>代碼</b>容錯<b class='flag-5'>率</b>、降低<b class='flag-5'>代碼</b>耦合度?

    如何將SystemVerilog斷言屬性和覆蓋屬性置于在設(shè)計上?

    功能覆蓋、激勵生成和運行管理是當(dāng)今功能驗證的三大相互關(guān)聯(lián)的任務(wù)。其中,功能覆蓋率可以說是最重要的,主要是因為覆蓋率收斂是tape的主要標(biāo)準(zhǔn)。
    的頭像 發(fā)表于 05-28 10:30 ?774次閱讀
    如何將SystemVerilog斷言屬性和<b class='flag-5'>覆蓋</b>屬性置于在設(shè)計上?

    如何使用示波器測量串口波特

    在通信和電子測量領(lǐng)域,串口波特是一至關(guān)重要的參數(shù),它決定了數(shù)據(jù)在串行通信線上的傳輸速率。使用示波器來測量串口波特是一種常見且有效的方法
    的頭像 發(fā)表于 05-27 16:25 ?5020次閱讀

    藍(lán)牙信標(biāo)覆蓋范圍

    藍(lán)牙信標(biāo)覆蓋范圍是一重要的考慮因素,對于藍(lán)牙技術(shù)的應(yīng)用和部署至關(guān)重要。了解藍(lán)牙信標(biāo)的覆蓋范圍可以幫助我們更好地規(guī)劃藍(lán)牙設(shè)備的布局和位置,從而實現(xiàn)最佳的信號
    的頭像 發(fā)表于 03-26 18:55 ?691次閱讀
    藍(lán)牙信標(biāo)<b class='flag-5'>覆蓋</b>范圍

    水質(zhì)電導(dǎo)測量方式(盤點)

    水質(zhì)電導(dǎo)測量方式(盤點)
    的頭像 發(fā)表于 01-29 13:58 ?1486次閱讀

    怎么用Vivado做覆蓋率分析

    在做仿真的時候往往會去做代碼覆蓋率和功能覆蓋率的分析,來保證仿真是做的比較充分完備的。
    的頭像 發(fā)表于 01-03 12:34 ?1719次閱讀
    怎么用Vivado做<b class='flag-5'>覆蓋率</b>分析