在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

嵌入式代碼覆蓋率如何進行統計有哪些方法和經驗

Wildesbeast ? 來源:21IC ? 作者:21IC ? 2021-01-09 11:12 ? 次閱讀

代碼覆蓋率是衡量軟件測試完成情況的指標,通常基于測試過程中已檢查的程序源代碼比例 計算得出。代碼覆蓋率可以有效避免包含未測試代碼的程序被發布。

代碼覆蓋率能不能提高軟件的可靠性?答案是肯定的,代碼的覆蓋率分析是保證軟件質量最簡 便易行的方法。

代碼覆蓋率等級

代碼覆蓋率可以通過多種方法測量。最常用的是測量以下一個或多個指標:語句覆蓋率,分支 覆蓋率,修訂的條件/判定覆蓋率(MC/DC)。以下章節中將逐一詳解這些代碼覆蓋率。

語句覆蓋率

語句覆蓋率用來度量被測代碼中的可執行語句是否被執行到,它并不考慮循環或者條件語句, 只針對語句度量可執行代碼。應當特別注意的是:“語句”并不等同于代碼行。

一般情況下,對于 C,C++JavaAda,分號代表語句結束。在某些情況下,一條語句會跨越多 行代碼。語句覆蓋率可以有效度量可執行代碼是否被執行,但同時也有一定的局限性。

語句覆蓋率的局限

考慮如下圖1的代碼段:

int* p = NULL;

if (condition)

p = &variable;

*p = 123;

圖 1 – 語句覆蓋局限代碼示例

如果“condition”為true,那么就有可能達到100%的語句覆蓋,然而這個測試用例忽略了另 一種情況:如果“condition”為假,程序將引用空指針,因此,雖然語句覆蓋率是一個很好 的度量指標,它仍舊是入門級的代碼覆蓋率。理想情況下,即使“condition”為false,測試 用例也應當被計算。

分支覆蓋率

分支覆蓋率用來度量程序中所有的判定和分支以及相應的輸出是否都被測試執行到,例如 “if”語句必須將“true”和“false”都考慮到以覆蓋所有的輸出。如果只有一個路徑被執行,那么覆蓋率將被標記為部分執行。

和語句覆蓋率類似,分支覆蓋浪費也有一些需要注意的細節,尤其在針對“惰性求值”的編程語言時,惰性求值是將代碼的求值操作延遲到需要結果值時再進行的一項技術。

分支覆蓋率的局限

典型的情況是當有復雜的布爾表達式的“惰性求值”出現時,如下圖2的代碼片段:

int* p = NULL;

if (condition1 && (condition2 || function1(*p)))

statement1;

else

圖 2 – 分支覆蓋率局限代碼示例

考慮“condition1”為假的情況,惰性求值將不會度量“condition2”或,此種情況同樣會導致 代碼“if (condition1 && (condition2 || function1(*p)))”的分支覆蓋率計算錯誤。

繼續考慮“condition1”和“condition2”都為真的情況。惰性求值將再次導致“function1(*p)” 不會被度量,也同樣會導致代碼“if (condition1 && (condition2 || function1(*p)))”的分支覆蓋率 計算錯誤。在此種情況下,有可能出現分支覆蓋率為100%但軟件中仍有潛在缺陷的情況。

修訂條件/判定覆蓋率(MC/DC)

MC/DC是一種特殊的分支覆蓋率,它不但會使用分支覆蓋率報告復雜條件下的true和false輸出,同時也會報告復雜條件下的全部分支條件輸出。

MC/DC最初由波音公司創建,用于航空軟件中DO-178B的A級認證。通過對所有的子條件輸出分支的獨立證明,有效解決了惰性求值帶來的問題。

繼續討論代碼示例2,我們需要在“condition2”和“function1(*p)”固定的條件下驗證“condition1” 的“true”和“false”判定分支,之后繼續固定“condition1”和“function1(*p)”驗證“condition2” 的判定分支。

同樣的,讓我們在固定“condition1”和“condition2”的條件下討論 “function1(*p)”。在其他分支條件固定的情況下驗證某個分支條件的“true”和“false”值稱作“MC/DC對”。MC/DC對一般使用MC/DC真值表描述。表1就是一個MC/DC真值表示例。

在軟件開發的不同階段獲取覆蓋率

軟件測試有很多種類,本文將其簡要的分為三類:

》 系統/函數測試: 測試集成后的整個應用

》 集成測試::測試集成的子系統

》 單元測試:測試一個或多個文件或類

每個軟件項目在系統測試的過程中都會模擬最終用戶的操作對源代碼做一些系統測試。導致軟件發布后仍舊存在缺陷最重要的一個原因通常是程序在運行過程中遇到了非預期的,即沒有測試的輸入組合。

很多軟件項目并不是沒有做集成測試或者單元測試。只是在完成集成測試或單元測試后,開發團隊可能苦于為隔離程序中的單個或多個文必須所需的大量測試代碼量。

對于最嚴格的單元測試和集成測試來說,最終生成的測試代碼量比待測代碼量還要龐大是很經常出現的情況。因此,這兩種級別的測試普遍適用于關鍵和高安全領域,例如:航空航天、醫療、交通運輸、工業過程控制、高速汽車等。此類軟件中包含大量的嵌入式應用軟件。

關鍵領域的結構化測試流程一般會將需求的級別高低作為重點,代碼覆蓋率因而會在這種“基于需求”的測試中進行分析。在許多項目中,高等級的需求最先被測試。此時代碼覆蓋率可以被用來檢測和報告所達到的覆蓋比例。

然而不幸的是,在系統測試和功能測試階段想要達到100%的代碼覆蓋率幾乎是不可能的。通常情況下系統測試和功能測試只能達到60%-70%的代碼覆蓋率,剩余30%-40%的代碼覆蓋率需要在單元測試和集成測試階段才能夠完成。

單元測試使用包含驅動和樁的測試代碼隔離系統中的特定函數,同時使用測試用例模擬這些函數的執行。這些所謂的“低等級測試需求” 對被測試代碼提供了更高的控制,可以提高先前執行的系統測試覆蓋率(甚至能達到100%)。因此,在不同的測試之間共享覆蓋率數據是非常有必要的。

嵌入式環境中獲取覆蓋率帶來的挑戰

常言道“有得必有失”,在嵌入式環境獲取代碼覆蓋率的問題上,要付出的代價是對待測代碼額外的插樁工作。

插樁是將額外的代碼添加到程序中,從而實現測試過程中的覆蓋率收集和分析操作。

由于插樁的相關操作將導致程序源代碼增多,進而延長程序的執行時間,因而需要預測插樁后的源代碼的覆蓋范圍預測,尤其當測試實時嵌入式系統環境時,此項工作就更為重要。

事實上,要精準的預測程序文件插樁的影響幾乎是不可能的。沒有算法支持(也不可能有)。 每個系統都包含很多的變量,具有獨立唯一的復雜性。當然,對于典型的示例系統來說,獲取一組準確的估計還是可能實現的。

在共享環境中獲取覆蓋率數據

在嵌入式環境下管理代碼覆蓋率的主要問題在于如何配置內存以容納額外的插樁代碼。

VectorCAST針對大量示例代碼評估后發現添加了上文中提出的各種覆蓋率額外配置之后,源代碼量增長量普遍達到了10%。對于絕大多數的32位目標板,這并不是一個很大的問題,但對于存儲容量有限的8位或者16位目標板來說,幾乎可以肯定這會是一個問題。

為了降低可執行文件的大小,各種各樣的代碼插樁技術被發明出來,針對不同大小的存儲區域有不同的數據采集技術。植入存儲器內部的收集系統可以用于監測被檢測到的代碼。這是插樁技術中保證使用最少RAM的關鍵技術。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5082

    文章

    19123

    瀏覽量

    305151
  • JAVA
    +關注

    關注

    19

    文章

    2967

    瀏覽量

    104749
  • C++
    C++
    +關注

    關注

    22

    文章

    2108

    瀏覽量

    73646
收藏 人收藏

    評論

    相關推薦

    測量嵌入式軟件的代碼覆蓋率

    度還是從功能安全角度。 對于安全可靠的嵌入式設備,測試是質量保證不可或缺的一部分。 安全關鍵型軟件開發標準對測試方法和測試覆蓋率設定了精確要求,這并非沒有道理。 通常,應用程序越關鍵,對代碼
    發表于 07-14 14:50 ?1312次閱讀
    測量<b class='flag-5'>嵌入式</b>軟件的<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>

    怎么用Vivado做覆蓋率分析

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

    如何改善5G覆蓋率

    改善5G覆蓋率方法
    發表于 12-15 07:52

    嵌入式仿真平臺SkyEye的覆蓋率分析相關資料下載

    代碼執娜行覆蓋情況的功能,來檢測代碼中未執行覆蓋情況。在覆蓋率分析時需要分析嵌入式軟件的指令
    發表于 12-17 07:27

    重點厘清覆蓋率相關的概念以及在芯片開發流程中跟覆蓋率相關的事項

    (Sample)覆蓋數據,然后進行統計數據的合并(Merge),最后做覆蓋率分析(Analysis)。這里提到的功能和應用場景,在不同層級的驗證中(模塊驗證/子系統驗證/系統驗證)有不
    發表于 09-14 11:57

    Verilog代碼覆蓋率檢查

    Verilog代碼覆蓋率檢查是檢查驗證工作是否完全的重要方法代碼覆蓋率(codecoverge)可以指示Verilog
    發表于 04-29 12:35 ?8430次閱讀

    嵌入式代碼覆蓋率統計方法經驗

    )是軟件測試中的一種度量,描述程式中源代碼被測試的比例和程度,所得比例稱為代碼覆蓋率。 ? 在進行代碼測試時,常常使用
    的頭像 發表于 01-06 15:06 ?3168次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b><b class='flag-5'>統計</b><b class='flag-5'>方法</b>和<b class='flag-5'>經驗</b>

    統計嵌入式代碼覆蓋率方法經驗

    )是軟件測試中的一種度量,描述程式中源代碼被測試的比例和程度,所得比例稱為代碼覆蓋率。 在進行代碼測試時,常常使用
    的頭像 發表于 03-29 11:58 ?1954次閱讀
    <b class='flag-5'>統計</b><b class='flag-5'>嵌入式</b><b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的<b class='flag-5'>方法</b>和<b class='flag-5'>經驗</b>

    怎么才能寫出高覆蓋率的Verilog代碼

    設計的角度上來討論,如何寫出高覆蓋率的Verilog代碼。assign慎用按位運算邏輯, | ^ ^~和三目運算符,慎用。使用這樣的描述方式本身功能并沒有什么問題,而且寫起來很爽,但是在很多
    的頭像 發表于 06-01 10:13 ?2629次閱讀

    覆蓋率的Verilog代碼的編寫技巧

    設計工程師需要關心的主要有行覆蓋率(Block),條件覆蓋率(Expression),翻轉覆蓋率(Toggle),狀態機覆蓋率。本文從ASIC設計的角度上來討論,如何寫出高
    的頭像 發表于 05-26 17:30 ?4281次閱讀

    如何使用覆蓋率指標進行更有效的嵌入式軟件測試

      聲明、決策或 MC/DC 覆蓋率等指標并不能保證軟件沒有缺陷。如前所述,真正詳盡的測試可能是不可能的,或者至少是不可行的。然而,結構覆蓋率度量可以更好地了解代碼的可靠性和對測試的更大信心。
    的頭像 發表于 06-29 10:20 ?1552次閱讀

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

    測量代碼覆蓋率對于嵌入式系統來說越來越重要,但需要一些經驗。這是因為有一些障礙需要克服,尤其是小目標。但是,使用正確的方法和合適的工具,無需
    的頭像 發表于 07-14 15:58 ?3026次閱讀
    更好地測量<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的 9 個技巧

    代碼覆蓋率工具的重要性

    測試覆蓋率是軟件質量的重要指標,也是軟件維護的重要組成部分。它通過提供不同承保項目的數據來幫助評估測試的有效性。這種洞察力允許通過為未經測試的代碼定義新的測試用例來改進測試,從而提高代碼質量,最終增加
    的頭像 發表于 12-08 15:13 ?1466次閱讀
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>工具的重要性

    測量嵌入式系統中的代碼覆蓋率

    許多 軟件 開發 人員 測量 嵌入式 系統 中 的 代碼 覆蓋 使用 的 測試系統 與 其 原始 設計 非常 不同。工程師知道這是一種糟糕的方法
    的頭像 發表于 04-23 10:50 ?994次閱讀

    代碼覆蓋率記錄

    為確保具體的產品(例如,醫療或航空電子市場)質量合格, 通常需要提供語句覆蓋與判定覆蓋認證證明。對于各種嵌 入系統,規范要求高度優化的代碼需要實時測試。禁止
    發表于 11-03 11:02 ?0次下載
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>記錄
    主站蜘蛛池模板: 黄色在线视频免费看| 夜夜夜爽| 全是肉的高h短篇列车| 特级黄色毛片| 国产精品久久国产三级国不卡顿| 成人看片在线观看| 67194最新网址| 乱肉情欲杂乱小说| 四虎影院黄色| 免费在线观看a| 成人性欧美丨区二区三区| 一起射综合网| 狠狠色狠狠干| 日产毛片| 天天操中文字幕| 91视频看看| 新天堂在线| www.91在线播放| 干干操| 日本aaaa毛片在线看| 美女张开大腿让男人捅| 校园春色亚洲欧美| 天天综合网网欲色| 久久国产精品视频| 天天操免费视频| 99久久国产综合精品国| 国产精品一区二区三区免费视频 | 好男人社区在线观看www| 天天爱天天干天天操| 成人aaa| 国产成人三级经典中文| 免费aa| 91视频精品| bt天堂资源种子在线| 亚洲黄色第一页| 久草色播| 34看网片午夜理| 免费黄色的视频| 欧美性性性性性ⅹxxbbbb| 日本特级视频| 天天艹|