精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

如何獲得100%的安全關鍵系統結構代碼覆蓋率

麥克泰技術 ? 來源:麥克泰技術 ? 2022-12-26 11:12 ? 次閱讀

前言

許多軟件開發和驗證工程師其實并不能真正理解獲得結構覆蓋率的重要性。大部分人這么做只是因為這是他們行業的功能標準所要求的,而并沒有真正認真對待它。

ADAS這樣的安全關鍵系統能夠實現在沒有司機的情況下運送乘客、能夠讓自動駕駛飛行器能夠在天空中飛行、通過醫療設備維持患者的生命。人們的生命依賴于這些系統。因此,獲得結構化代碼覆蓋率是至關重要的。接下來讓我們來看看什么是結構覆蓋率,以及它重要的更多原因。

什么是結構覆蓋率

簡而言之,結構覆蓋率是為了確定系統是否經過充分測試而對已執行和記錄的代碼的標識。安全關鍵系統覆蓋率的徹底性取決于安全完整性級別(SIL)、汽車工業中的ASIL和航空電子設備中常用的開發保證級別(DAL)。

所謂徹底性,指的是代碼中的結構元素。在嵌入式系統中,這些通常被細分為代碼語句、分支、修改的條件決策,此外還可以深入到更細的粒度級別,如目標代碼或匯編語言。

語句及分支覆蓋率

語句覆蓋是最簡單的工作,它表示程序中的每一行代碼。然而,代碼語句可能具有不同程度的復雜性。例如,分支語句在代碼中表示if then else條件,像case或switch這樣的語句被解釋為分支。但是,如果您要獲得分支的覆蓋率,這意味著必須同時覆蓋真實和錯誤決策路徑的執行。

99b5f14c-82c9-11ed-bfe3-dac502259ad0.png

如果需要考慮更高的安全級別,則可能需要修改條件/決策覆蓋率(MC/DC)。分支的復雜性可能會逐步遞增,其中一個決策中有多個條件,而每個條件都必須獨立測試。

對于覆蓋率標準,這意味著決策中的每個條件都已被證明能夠獨立地影響該決策的結果。真值表可用于幫助進行分析,如下圖所示。

此外,程序中決策的每個條件都至少采用了一次所有可能的結果,程序中的每個決策至少一次采用了所有可能的結果。

在下面包含4個條件語句的示例中,有16個可能的測試用例。在本例中,MC/DC只需要5個。取條件的數量并添加1。

公式:(C + 1)

99cc888a-82c9-11ed-bfe3-dac502259ad0.jpg

目標代碼覆蓋率

對于最嚴格的安全關鍵應用,如航空電子設備,流程標準DO-178B/C Level A要求目標代碼覆蓋率。這是由于編譯器或鏈接器會產生額外的代碼,這些代碼不能直接追蹤到源代碼語句。因此,必須進行匯編級覆蓋。

想象一下執行這項任務的嚴格程度和人工成本。幸運的是,有Parasoft ASMTools這樣一個獲得目標代碼覆蓋率的自動化解決方案。

99df5960-82c9-11ed-bfe3-dac502259ad0.png

(Parasoft ASMTools匯編語言代碼覆蓋)

獲取代碼覆蓋率

代碼覆蓋率通常是通過對代碼進行檢測來確定的。工具化是指在用戶代碼中添加額外的代碼,以便在執行期間確定該語句、分支或MC/CD是否已被執行。

根據嵌入式目標或設備的不同,覆蓋數據可以存儲在文件系統中,也可以寫入內存,也可以通過串口、TCP/IP端口USB甚至JTAG等各種通信通道發送出去。

部分插樁

值得注意的是,代碼插樁會導致代碼膨脹,代碼大小的增加可能會影響將代碼加載到內存受限的目標硬件上進行測試的能力。

其解決方法是對部分代碼進行插樁。

運行您的測試并獲取覆蓋率。

對另一部分代碼進行插樁

再次執行測試

獲取覆蓋率。

合并以往測試執行的覆蓋率。

根據您的目標限制,理想狀態是不會有太多的插樁分區要處理。不停重復運行相同的測試會非常耗時及花費成本。簡單來說,插樁也許還會導致有關不良的時間和性能影響。

獲得嵌入式功能及信息安全關鍵系統的代碼覆蓋率

讓我們深入了解一下組織如何獲得嵌入式功能及信息安全關鍵系統獲得代碼覆蓋率。

對于代碼覆蓋率需求,比如強制的100%結構、分支和MC/DC覆蓋率,有幾種測試方法可以用來滿足您的目標。以下為最常見的方法:

系統測試

單元測試

手動測試

結合這些不同實踐的覆蓋率指標是典型的。

系統測試覆蓋率

通過系統測試獲得代碼覆蓋率是確定是否執行了足夠測試的最佳方法。其方法是運行所有的系統測試,然后檢查代碼的哪些部分沒有執行。

未執行的代碼意味著可能需要新的測試用例來執行可能潛伏著缺陷的未觸及代碼,并有助于確認以下問題:我們是否做了足夠的測試?

單元測試覆蓋率

如前所述,單元測試可以作為系統測試的補充方法,以獲得100%的覆蓋率。通過單元測試獲得代碼覆蓋率是一種比較流行的方法,但是它并不能暴露您是否對系統進行了足夠的測試,因為重點是在單元級別(函數/過程)。

這里的目標是創建一組單元測試用例,在所需的覆蓋率遵從性需求(語句、分支和MC/DC)下執行整個單元,以便達到單個單元的100%覆蓋率。每個單元都要重復做,直到覆蓋整個代碼庫。然而,要充分利用單元測試,不能只關注獲得代碼覆蓋率。這通常可以通過行路徑測試用例來完成。

為了通過單元測試加速代碼覆蓋,Parasoft C/ C++test中存在可配置的和自動化的測試用例生成功能。可以自動生成測試用例來測試空指針、最小-中-最大值范圍、邊界值的使用等。這種自動化可以讓您走得更遠,在幾分鐘內,您將獲得大量的代碼覆蓋率。

然而,與系統測試一樣,由于使用了防御性代碼或形式語言語義,獲得100%的代碼覆蓋率是難以實現的。在單元的粒度級別上,防御代碼可能以交換機中的默認語句的形式出現。如果捕獲了交換機中所有可能的情況,則會導致無法訪問默認語句。在下面的例子中,返回0;將永遠不會被執行,因為while(1)是無限的。

9a05d144-82c9-11ed-bfe3-dac502259ad0.png

用戶可以使用調試器對語句進行標記或標記,修改調用堆棧并執行返回0;聲明。視覺上見證執行過程,至少記錄文件名、代碼行和代碼語句。

通過手動/可視化檢查執行的覆蓋率和報告可以用來補充通過單元測試捕獲的覆蓋率。兩個覆蓋率報告的添加可以用來證明100%的結構代碼覆蓋率。

9a201ffe-82c9-11ed-bfe3-dac502259ad0.png

(Parasoft DTP儀表板代碼覆蓋報告示例)

總結

結構代碼覆蓋率可以幫助回答以下問題:我是否進行了足夠的測試?

它也可能是您必須滿足的遵從性需求。獲得代碼覆蓋率的目標是幫助我們確保代碼功能安全、信息安全和可靠性的一種附加手段。它顯示已執行測試的證據。通過該測試我們能夠識別和修復缺陷。

您可能需要執行不同級別的覆蓋(語句、分支、MC/DC等覆蓋率),其中所用標準是基于您的SIL、ASIL或DAL級別。幸運的是,Parasoft提供了自動化軟件測試解決方案和為了獲得100%的結構代碼覆蓋率而所需的解決方法。

審核編輯:湯梓紅

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

    關注

    14

    文章

    409

    瀏覽量

    35745
  • 代碼
    +關注

    關注

    30

    文章

    4753

    瀏覽量

    68368
  • 結構化
    +關注

    關注

    0

    文章

    27

    瀏覽量

    10303
  • 覆蓋率
    +關注

    關注

    0

    文章

    7

    瀏覽量

    6864

原文標題:如何獲得100%的安全關鍵系統結構代碼覆蓋率

文章出處:【微信號:麥克泰技術,微信公眾號:麥克泰技術】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    一文詳解Modelsim代碼覆蓋率功能使用

    作者:默宸? Modelsim代碼覆蓋率功能Code coverage,能報告出statement(語句)、branch(分支)、condition(條件)、expression(表達
    的頭像 發表于 12-09 11:45 ?5749次閱讀

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

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

    怎么用Vivado做覆蓋率分析

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

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

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

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

    (Code Coverage)。這兩項指標需要配合起來看,比如100%的代碼覆蓋率以及低于100%的功能覆蓋率,可以看出驗證不完整;
    發表于 09-14 11:57

    Verilog代碼覆蓋率檢查

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

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

    代碼覆蓋率是衡量軟件測試完成情況的指標,通常基于測試過程中已檢查的程序源代碼比例計算得出。代碼覆蓋率可以有效避免包含未測試
    的頭像 發表于 01-06 15:06 ?3127次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>統計方法和經驗

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

    代碼覆蓋率是衡量軟件測試完成情況的指標,通常基于測試過程中已檢查的程序源代碼比例 計算得出。代碼覆蓋率可以有效避免包含未測試
    的頭像 發表于 01-09 11:12 ?3035次閱讀
    嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>如何進行統計有哪些方法和經驗

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

    代碼覆蓋率是衡量軟件測試完成情況的指標,通常基于測試過程中已檢查的程序源代碼比例計算得出。代碼覆蓋率可以有效避免包含未測試
    的頭像 發表于 03-29 11:58 ?1912次閱讀
    統計嵌入式<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的方法和經驗

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

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

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

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

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

    。? 測量測試覆蓋率,也稱為代碼覆蓋率,對于嵌入式系統變得越來越重要。在許多情況下,這些設備對安全或業務至關重要。流程基于物聯網設備,患者依
    的頭像 發表于 07-14 15:58 ?2964次閱讀
    更好地測量<b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>的 9 個技巧

    100%代碼覆蓋率分析是否必不可少

    安全關鍵型軟件標準高度關注如何有效地測試軟件。他們指出,有效的軟件測試需要一種規范的方法,其中代碼覆蓋率用于提供有關迄今為止測試有效性的反饋。應用于
    的頭像 發表于 11-01 10:46 ?951次閱讀

    代碼覆蓋率工具的重要性

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

    代碼覆蓋率記錄

    為確保具體的產品(例如,醫療或航空電子市場)質量合格, 通常需要提供語句覆蓋與判定覆蓋認證證明。對于各種嵌 入式系統,規范要求高度優化的代碼需要實時測試。禁止
    發表于 11-03 11:02 ?0次下載
    <b class='flag-5'>代碼</b><b class='flag-5'>覆蓋率</b>記錄