許多 軟件 開發(fā) 人員 測量 嵌入式 系統(tǒng) 中 的 代碼 覆蓋 率 使用 的 測試 系統(tǒng) 與 其 原始 設(shè)計 非常 不同。工程師知道這是一種糟糕的方法,但它很容易發(fā)生。就像沸騰的青蛙寓言一樣,不被注意的增量溫度變化會導(dǎo)致可憐的青蛙死亡。..。..
讓我們探討一下軟件開發(fā)人員的困境。
代碼覆蓋率通常發(fā)生在開發(fā)過程的后期。此時,硬件和軟件都針對成本進(jìn)行了優(yōu)化,系統(tǒng)緊密滿足了指定的要求。在此階段開始代碼覆蓋率分析通常意味著將“printf”語句或某種類型的串行傳輸代碼添加到代碼的每個功能中,以便微控制器可以說“程序計數(shù)器= X”。在整個項目中添加這些代碼段后,代碼資源要求通常會超過成本優(yōu)化控制器的限制。一種替代方法是用更大的內(nèi)存變體替換微控制器(希望在同一封裝中提供一種)。執(zhí)行速度可能會因額外的代碼而陷入困境,因此也許可以提高MCU時鐘速度以提高系統(tǒng)性能?
該設(shè)備還需要一個通信通道來輸出信息。需要電線來拼接通信端口和收發(fā)器,以便計算機捕獲輸出流。如果沒有額外的引腳可用,則需要一塊新板來容納引腳數(shù)更高的微控制器?;蛘撸璧墓δ芸梢蕴鎿Q為代碼覆蓋例程,這需要多個軟件版本來測試塊中的代碼。
現(xiàn)在,代碼覆蓋功能已經(jīng)(痛苦地)添加,生成的數(shù)據(jù)日志文件非常龐大,笨拙,難以與原始源代碼相關(guān)聯(lián)。任何 注重 質(zhì)量 的 開發(fā) 人員 都會 問 “這個 測試 系統(tǒng) 如何 代表 原始 設(shè)計?
讓我們來看看代碼覆蓋率的優(yōu)點和局限性,MPLAB?代碼覆蓋率的工作原理,以及如何使用它來衡量嵌入式系統(tǒng)中的代碼覆蓋率。
優(yōu)點和局限性
適當(dāng)?shù)臏y試方法對于開發(fā)強大的嵌入式系統(tǒng)至關(guān)重要,正確使用代碼覆蓋率工具是確保測試完成工作的唯一方法。明智的代碼開發(fā)人員明白“未經(jīng)測試的代碼是損壞的代碼”。任何經(jīng)歷過產(chǎn)品召回的人都了解代碼覆蓋率對提高產(chǎn)品質(zhì)量帶來的價值。
具有最低代碼覆蓋率要求的代碼開發(fā)人員通常會驚訝于其初始代碼覆蓋率結(jié)果的低。編寫涵蓋特定流的測試代碼也可能非常困難。使用需要對原始設(shè)計進(jìn)行大量修改的工具會使這項工作進(jìn)一步復(fù)雜化。
代碼覆蓋率是一個看似簡單的等式:
執(zhí)行
的代碼量 ______ 代碼
總量 一個精明的工程師用 C 編寫嵌入式代碼,或者C++知道他們的代碼編譯成匯編代碼,可能會問:“計算哪個代碼?這是一個需要理解的重要問題,因為答案因工具提供商而異,并且會顯著影響此等式的結(jié)果。我們l 在本博客后面介紹 MPLAB 代碼覆蓋率實現(xiàn)。
一個常見的誤解是,覆蓋率為 100% 的代碼比覆蓋率為 95% 的代碼“更好”。代碼覆蓋率百分比指示測試套件對應(yīng)用程序的執(zhí)行程度。它沒有指示代碼效率低下、缺少功能、性能或正確性。
將測試方法與代碼覆蓋率工具區(qū)分開來也很重要。在互聯(lián)網(wǎng)上搜索,您可以找到聲稱語句覆蓋率、函數(shù)覆蓋率、分支覆蓋率、MC/DC 等的代碼覆蓋率工具。這些類型的描述可能會令人困惑,因為供應(yīng)商正在使用測試方法術(shù)語來描述其代碼覆蓋率工具。這是兩個不同的概念。分支覆蓋或 MC/DC 等測試方法描述了如何執(zhí)行源代碼。相反,代碼覆蓋率工具確定執(zhí)行了哪些機器指令。由于一行高級源代碼可以生成多個機器指令,因此該工具可以將一行源代碼指示為完全或部分執(zhí)行或根本不執(zhí)行。
MPLAB 代碼覆蓋
率的工作原理
對于初學(xué)者來說,MPLAB 代碼覆蓋率專為小型嵌入式系統(tǒng)而設(shè)計。它很特別,因為它利用了只有MPLAB XC編譯器才能掌握的有關(guān)您項目的知識。沒有工具比編譯器更了解您的代碼。由于Microchip制造了我們自己的編譯器,因此我們的代碼覆蓋率工具可以利用這些信息。
我們的編譯器知道所需的最小檢測點數(shù)量以及放置它們的位置,以最大程度地減少對代碼大小和性能的影響。我們的編譯器還知道有多少數(shù)據(jù)存儲器可用,并以最佳方式使用它來存儲運行時信息。我們的分析表明,我們的MPLAB代碼覆蓋率工具使用的檢測點是競爭產(chǎn)品的一半到三分之一。而且由于它僅使用單個位集指令作為標(biāo)記,因此與基于“printf”指令的競爭對手解決方案的比較并不接近。MPLAB 代碼覆蓋率的影響非常小,通常為 《1%,以至于我們找不到無法使用其原始硬件執(zhí)行分析的項目。
MPLAB 代碼覆蓋率具有用于導(dǎo)航結(jié)果的便捷工具。每一行源代碼和匯編指令都被標(biāo)記為完全或部分執(zhí)行或根本不執(zhí)行。為了澄清這個問題,我們的工具分析了匯編指令級別的覆蓋范圍。因此,覆蓋率信息在匯編的MPLAB X集成開發(fā)環(huán)境(IDE)程序內(nèi)存窗口中本機顯示,但也被吸收以在源代碼窗口中顯示各種級別的執(zhí)行。支持源代碼和匯編指令代碼之間的快速跳轉(zhuǎn),以快速評估部分覆蓋的代碼。
顯示單個文件和函數(shù)以及項目級別的代碼覆蓋率??梢暂p松打開和關(guān)閉突出顯示,以便于閱讀。儀表板跟蹤代碼覆蓋率進(jìn)度,只需按一下按鈕即可生成 HTML 報告。最重要的是,MPLAB代碼覆蓋率完全集成到Microchip的MPLAB X IDE中,可在工具之間輕松切換任務(wù),并在可配置的輸出窗口中顯示結(jié)果。
輕松測量嵌入式系統(tǒng)中
的代碼覆蓋率
MPLAB 代碼覆蓋率是市場上最簡單的代碼覆蓋率工具,只需在 MPLAB X IDE 中啟用它,然后構(gòu)建、編程、練習(xí)和讀取您的設(shè)備。
該工具巧妙地使用數(shù)據(jù)存儲器來存儲已解碼并在 IDE 中顯示的覆蓋范圍信息。這個過程非常獨特,受美國專利號10402309保護(hù)。它支持Microchip的所有PIC,SAM,AVR和DSPIC產(chǎn)品,適用于MPLAB XC編譯器的免費版和專業(yè)版,并可作為工作站許可證提供。
審核編輯:郭婷
-
嵌入式
關(guān)注
5082文章
19104瀏覽量
304783 -
測試系統(tǒng)
+關(guān)注
關(guān)注
6文章
818瀏覽量
62112 -
MPLAB
+關(guān)注
關(guān)注
9文章
215瀏覽量
66860
發(fā)布評論請先 登錄
相關(guān)推薦
評論