《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 解決方案 > 充分應(yīng)用功能安全性開發(fā)環(huán)境中集成的代碼分析工具

充分應(yīng)用功能安全性開發(fā)環(huán)境中集成的代碼分析工具

2021-11-14
來源:IAR
關(guān)鍵詞: 代碼分析 MISRAC FunctionalSafety

  目前,,越來越多的汽車,、工業(yè)和其他應(yīng)用都在強(qiáng)調(diào)功能安全性(functional safety),,其開發(fā)過程也需要先進(jìn)和完善的工具鏈支持,,以及一些重要的開發(fā)工具使用經(jīng)驗(yàn)。作為功能安全性產(chǎn)品的研發(fā)工程師,,一定聽說過類似MISRA C的靜態(tài)代碼檢查,,以及其他一些代碼標(biāo)準(zhǔn)和自動化檢查工具。但是,,在日常的開發(fā)流程中,,僅僅知道這些標(biāo)準(zhǔn)并不代表著能夠高效地讓代碼符合代碼標(biāo)準(zhǔn)。

  本文將從代碼標(biāo)準(zhǔn)本身,、以及配套的檢查工具如何使用及流程兩方面,,通過以業(yè)界常見的IAR開發(fā)工具鏈為例來提供一些思路,,解釋為什么在開發(fā)需要安全認(rèn)證的產(chǎn)品時(shí),推薦使用其自帶的代碼分析工具,。在實(shí)際應(yīng)用中,,針對Renesas RX和Arm系列內(nèi)核,,C-STAT 靜態(tài)代碼分析和 C-RUN 運(yùn)行時(shí)分析組件往往都作為插件,,被添加到IAR Embedded Workbench開發(fā)環(huán)境中。

  功能安全標(biāo)準(zhǔn)與代碼分析

  在 IEC 61508 2.0 版的第 3 部分中,,對安全類系統(tǒng)的軟件作出了規(guī)定,,要求必須采用可靠良好的開發(fā)流程。例如,,第 7 部分“技術(shù)和措施概述”的第 C.4.2 節(jié)中指出要使用編程語言子集:

  目的:降低引入編程錯(cuò)誤的概率,,并增加發(fā)現(xiàn)殘余錯(cuò)誤的概率。

  描述:對編程語言進(jìn)行檢查,,比如使用靜態(tài)分析法來確定容易出錯(cuò)或難以分析的編程結(jié)構(gòu),。然后定義編程語言子集來排除此類編程結(jié)構(gòu)。

  第 C.4.2 節(jié)還指出,,如果軟件的安全完整性等級 (SIL) 高于 1,,則不建議在未設(shè)定此類限制的情況下使用 C 語言進(jìn)行編程。換言之,,如果您想使用C/C++ 軟件開發(fā) SIL 2-4 認(rèn)證系統(tǒng),,則基本上都需要使用靜態(tài)分析工具。

  類似地,,對于運(yùn)行時(shí)分析,,第 7 部分“技術(shù)和措施概述”的第 B.6.5 節(jié)“動態(tài)分析和測試”指出:

  目的:通過對即將完成的原型進(jìn)行動態(tài)行為檢查,檢測是否存在規(guī)范失效問題,。

  描述:對安全類系統(tǒng)進(jìn)行動態(tài)分析的方法是,,在安全類系統(tǒng)的基本可運(yùn)行原型上,運(yùn)行目標(biāo)環(huán)境中的典型輸入數(shù)據(jù),。如果經(jīng)觀察,,安全類系統(tǒng)的行為符合所要求的行為,則表明系統(tǒng)通過了分析檢查,。如果安全類系統(tǒng)出現(xiàn)任何失效問題,,則必須予以糾正,然后重新分析新的可運(yùn)行版本,。

  下面我們來看看 C-RUN 是如何滿足此類分析需求的:

  C-RUN 是集成在編譯器和 C-SPY 調(diào)試器中的工具,。借助此工具,可在運(yùn)行時(shí)觀察可執(zhí)行代碼,,并報(bào)告代碼在運(yùn)行時(shí)出現(xiàn)的異常行為,。C-RUN 會執(zhí)行算術(shù)檢查,、邊界檢查和堆檢查,并且可在 IAR Embedded Workbench 的工程設(shè)置中輕松進(jìn)行配置:  

1.jpg

  運(yùn)行時(shí)分析工具的一般特點(diǎn)是誤報(bào)率低,,C-RUN 也不例外,。換言之,C-RUN 報(bào)告的錯(cuò)誤很可能是真的錯(cuò)誤,,因?yàn)閳?zhí)行和分析的均為真實(shí)代碼,,并且是在真實(shí)的目標(biāo)系統(tǒng)上進(jìn)行的。C-RUN 可查看有關(guān)應(yīng)用程序狀態(tài)的所有信息,,并會報(bào)告實(shí)際發(fā)生的錯(cuò)誤,。盡管如此,在執(zhí)行過程中,,您可設(shè)置適當(dāng)?shù)?C-SPY 消息規(guī)則,,讓檢測到的錯(cuò)誤通過檢查,如下圖所示,?! ?/p>

2.jpg

  不過,運(yùn)行時(shí)分析也有一些不足,。首先,,使用這種方法時(shí),通常要到軟件開發(fā)流程的后期才能發(fā)現(xiàn)問題,,因?yàn)檫\(yùn)行時(shí)分析工具需要使用代碼的可執(zhí)行文件,。此外,運(yùn)行時(shí)分析僅對實(shí)際運(yùn)行的應(yīng)用程序部分進(jìn)行檢查,。如果無法觸發(fā)所有條件使得應(yīng)用程序的全部代碼都得到分析,,則最終將有部分代碼處于未經(jīng)測試的狀態(tài)。盡管如此,,C-RUN 仍可提供非常有價(jià)值的反饋,,并且由于其與 IAR Embedded Workbench 深度集成,所以非常易用,。

  接下來說說 C-STAT,,這是一種靜態(tài)分析工具,可通過執(zhí)行一項(xiàng)或多項(xiàng)規(guī)則檢查來發(fā)現(xiàn)是否存在偏離編碼規(guī)則的問題,。C-STAT 檢查代碼是否符合 MISRA C:2012,、MISRA C++:2008 和 MISRA C:2004 規(guī)定的規(guī)則,以及對應(yīng) CWE 和 CERT C/C++ 所涵蓋的各種問題的檢查,。跟 C-RUN 一樣,,在 IAR Embedded Workbench 的工程設(shè)置中也可輕松地對 C-STAT 進(jìn)行配置。  

3.jpg

  與 C-RUN 不同的是,,C-STAT 無需實(shí)際運(yùn)行應(yīng)用程序,,即可檢查代碼是否存在缺陷。它能在不依賴程序的執(zhí)行路徑及所使用的數(shù)據(jù)集的情況下找到錯(cuò)誤,。C-STAT 可在軟件開發(fā)流程的早期發(fā)現(xiàn)錯(cuò)誤和缺陷,,實(shí)際上從開發(fā)的第 1 天就可以使用,而且不會影響系統(tǒng)性能,。

  雖然市面上有幾款獨(dú)立的靜態(tài)分析工具可供 C/C++ 開發(fā)人員使用,,但 C-STAT 的一大優(yōu)勢在于可直接投入使用,無需進(jìn)行繁瑣的配置,。而且,,它能理解和分析專為高效嵌入式編程設(shè)計(jì)的各種 IAR Systems特定的C/C++ 語言結(jié)構(gòu),。將 C-STAT 集成到日常開發(fā)中,,就可以輕松地檢查代碼是否符合大部分重要編碼規(guī)則。這樣就能為后期的測試和調(diào)試省下更多的時(shí)間和資源,。

  C-STAT 可集成到 IAR Embedded Workbench IDE 中,,與常規(guī)的構(gòu)建工具一樣簡單易用:  4.jpg

  對于檢測到的每個(gè)錯(cuò)誤,在線幫助系統(tǒng)中都會有相應(yīng)的描述,,按下 F1,,就可看到對應(yīng)的規(guī)則說明和相應(yīng)的示例代碼來說明如何滿足該規(guī)則: 

5.jpg

  可生成 HTML 格式的報(bào)告,用以記錄測試結(jié)果:  

6.jpg

  結(jié)語

  回到本文第一部分談到的功能安全標(biāo)準(zhǔn),,來看看上述工具如何幫助您的軟件達(dá)到規(guī)定標(biāo)準(zhǔn),。

  第 7 部分“技術(shù)和措施概述”的第 C.4.2 節(jié)中指出要使用編程語言子集:對編程語言進(jìn)行檢查,比如使用靜態(tài)分析法來確定容易出錯(cuò)或難以分析的編程結(jié)構(gòu),。然后定義編程語言子集來排除此類編程結(jié)構(gòu),。

  對此,C-STAT 能夠派上用場,,可檢查代碼是否符合 MISRA 規(guī)定的規(guī)則,。如前所述,如果想使用 C/C++ 軟件開發(fā) SIL 2-4 認(rèn)證系統(tǒng),,則確實(shí)需要使用靜態(tài)分析工具,。

  再來看第 B.6.5 節(jié)“動態(tài)分析和測試”:對安全類系統(tǒng)進(jìn)行動態(tài)分析的方法是,在安全類系統(tǒng)的基本可運(yùn)行原型上,,運(yùn)行目標(biāo)環(huán)境中的典型輸入數(shù)據(jù),。如果經(jīng)觀察,安全類系統(tǒng)的行為符合所要求的行為,,則表明系統(tǒng)通過了分析檢查,。如果安全類系統(tǒng)出現(xiàn)任何失效問題,則必須予以糾正,然后重新分析新的可運(yùn)行版本,。

  用于運(yùn)行時(shí)分析的 C-RUN 雖然無法全面檢查整個(gè)安全類系統(tǒng)中的所有動態(tài)行為,,但它仍是一個(gè)非常好用的工具,至少能在安全類系統(tǒng)的軟件部分中找到真實(shí)存在的和潛在的錯(cuò)誤,。需要記住的是,,必須將安全概念與系統(tǒng)的危險(xiǎn)失效率關(guān)聯(lián)起來,而不僅僅是組件(如軟件)的失效率,。

  用于運(yùn)行時(shí)分析的 C-RUN 和用于靜態(tài)分析的 C-STAT 是兩類不同的代碼質(zhì)量分析工具,,在安全類軟件的開發(fā)中都非常有用,二者不形成競爭關(guān)系,,而是構(gòu)成優(yōu)勢互補(bǔ),。因此,IAR的C-RUN 和 C-STAT工具 能為開發(fā)人員帶來互補(bǔ)的代碼檢查能力,,自然而然地集成到日常的開發(fā)流程中,。在IAR的評估版工具中自帶C-RUN和C-STAT插件,歡迎工程師朋友們試用,。




圖片.jpg


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點(diǎn),。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容、版權(quán)和其它問題,,請及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,避免給雙方造成不必要的經(jīng)濟(jì)損失,。聯(lián)系電話:010-82306118,;郵箱:[email protected]