充分應用功能安全性開(kāi)發(fā)環(huán)境中集成的代碼分析工具
目前,越來(lái)越多的汽車(chē)、工業(yè)和其他應用都在強調功能安全性(functional safety),其開(kāi)發(fā)過(guò)程也需要先進(jìn)和完善的工具鏈支持,以及一些重要的開(kāi)發(fā)工具使用經(jīng)驗。作為功能安全性產(chǎn)品的研發(fā)工程師,一定聽(tīng)說(shuō)過(guò)類(lèi)似MISRA C的靜態(tài)代碼檢查,以及其他一些代碼標準和自動(dòng)化檢查工具。但是,在日常的開(kāi)發(fā)流程中,僅僅知道這些標準并不代表著(zhù)能夠高效地讓代碼符合代碼標準。
本文引用地址:http://dyxdggzs.com/article/202111/429630.htm本文將從代碼標準本身、以及配套的檢查工具如何使用及流程兩方面,通過(guò)以業(yè)界常見(jiàn)的IAR開(kāi)發(fā)工具鏈為例來(lái)提供一些思路,解釋為什么在開(kāi)發(fā)需要安全認證的產(chǎn)品時(shí),推薦使用其自帶的代碼分析工具。在實(shí)際應用中,針對Renesas RX和Arm系列內核,C-STAT 靜態(tài)代碼分析和 C-RUN 運行時(shí)分析組件往往都作為插件,被添加到IAR Embedded Workbench開(kāi)發(fā)環(huán)境中。
功能安全標準與代碼分析
在 IEC 61508 2.0 版的第 3 部分中,對安全類(lèi)系統的軟件作出了規定,要求必須采用可靠良好的開(kāi)發(fā)流程。例如,第 7 部分“技術(shù)和措施概述”的第 C.4.2 節中指出要使用編程語(yǔ)言子集:
目的:降低引入編程錯誤的概率,并增加發(fā)現殘余錯誤的概率。
描述:對編程語(yǔ)言進(jìn)行檢查,比如使用靜態(tài)分析法來(lái)確定容易出錯或難以分析的編程結構。然后定義編程語(yǔ)言子集來(lái)排除此類(lèi)編程結構。
第 C.4.2 節還指出,如果軟件的安全完整性等級 (SIL) 高于 1,則不建議在未設定此類(lèi)限制的情況下使用 C 語(yǔ)言進(jìn)行編程。換言之,如果您想使用C/C++ 軟件開(kāi)發(fā) SIL 2-4 認證系統,則基本上都需要使用靜態(tài)分析工具。
類(lèi)似地,對于運行時(shí)分析,第 7 部分“技術(shù)和措施概述”的第 B.6.5 節“動(dòng)態(tài)分析和測試”指出:
目的:通過(guò)對即將完成的原型進(jìn)行動(dòng)態(tài)行為檢查,檢測是否存在規范失效問(wèn)題。
描述:對安全類(lèi)系統進(jìn)行動(dòng)態(tài)分析的方法是,在安全類(lèi)系統的基本可運行原型上,運行目標環(huán)境中的典型輸入數據。如果經(jīng)觀(guān)察,安全類(lèi)系統的行為符合所要求的行為,則表明系統通過(guò)了分析檢查。如果安全類(lèi)系統出現任何失效問(wèn)題,則必須予以糾正,然后重新分析新的可運行版本。
下面我們來(lái)看看 C-RUN 是如何滿(mǎn)足此類(lèi)分析需求的:
C-RUN 是集成在編譯器和 C-SPY 調試器中的工具。借助此工具,可在運行時(shí)觀(guān)察可執行代碼,并報告代碼在運行時(shí)出現的異常行為。C-RUN 會(huì )執行算術(shù)檢查、邊界檢查和堆檢查,并且可在 IAR Embedded Workbench 的工程設置中輕松進(jìn)行配置:
運行時(shí)分析工具的一般特點(diǎn)是誤報率低,C-RUN 也不例外。換言之,C-RUN 報告的錯誤很可能是真的錯誤,因為執行和分析的均為真實(shí)代碼,并且是在真實(shí)的目標系統上進(jìn)行的。C-RUN 可查看有關(guān)應用程序狀態(tài)的所有信息,并會(huì )報告實(shí)際發(fā)生的錯誤。盡管如此,在執行過(guò)程中,您可設置適當的 C-SPY 消息規則,讓檢測到的錯誤通過(guò)檢查,如下圖所示。
不過(guò),運行時(shí)分析也有一些不足。首先,使用這種方法時(shí),通常要到軟件開(kāi)發(fā)流程的后期才能發(fā)現問(wèn)題,因為運行時(shí)分析工具需要使用代碼的可執行文件。此外,運行時(shí)分析僅對實(shí)際運行的應用程序部分進(jìn)行檢查。如果無(wú)法觸發(fā)所有條件使得應用程序的全部代碼都得到分析,則最終將有部分代碼處于未經(jīng)測試的狀態(tài)。盡管如此,C-RUN 仍可提供非常有價(jià)值的反饋,并且由于其與 IAR Embedded Workbench 深度集成,所以非常易用。
接下來(lái)說(shuō)說(shuō) C-STAT,這是一種靜態(tài)分析工具,可通過(guò)執行一項或多項規則檢查來(lái)發(fā)現是否存在偏離編碼規則的問(wèn)題。C-STAT 檢查代碼是否符合 MISRA C:2012、MISRA C++:2008 和 MISRA C:2004 規定的規則,以及對應 CWE 和 CERT C/C++ 所涵蓋的各種問(wèn)題的檢查。跟 C-RUN 一樣,在 IAR Embedded Workbench 的工程設置中也可輕松地對 C-STAT 進(jìn)行配置。
與 C-RUN 不同的是,C-STAT 無(wú)需實(shí)際運行應用程序,即可檢查代碼是否存在缺陷。它能在不依賴(lài)程序的執行路徑及所使用的數據集的情況下找到錯誤。C-STAT 可在軟件開(kāi)發(fā)流程的早期發(fā)現錯誤和缺陷,實(shí)際上從開(kāi)發(fā)的第 1 天就可以使用,而且不會(huì )影響系統性能。
雖然市面上有幾款獨立的靜態(tài)分析工具可供 C/C++ 開(kāi)發(fā)人員使用,但 C-STAT 的一大優(yōu)勢在于可直接投入使用,無(wú)需進(jìn)行繁瑣的配置。而且,它能理解和分析專(zhuān)為高效嵌入式編程設計的各種 IAR Systems特定的C/C++ 語(yǔ)言結構。將 C-STAT 集成到日常開(kāi)發(fā)中,就可以輕松地檢查代碼是否符合大部分重要編碼規則。這樣就能為后期的測試和調試省下更多的時(shí)間和資源。
C-STAT 可集成到 IAR Embedded Workbench IDE 中,與常規的構建工具一樣簡(jiǎn)單易用:
對于檢測到的每個(gè)錯誤,在線(xiàn)幫助系統中都會(huì )有相應的描述,按下 F1,就可看到對應的規則說(shuō)明和相應的示例代碼來(lái)說(shuō)明如何滿(mǎn)足該規則:
可生成 HTML 格式的報告,用以記錄測試結果:
結語(yǔ)
回到本文第一部分談到的功能安全標準,來(lái)看看上述工具如何幫助您的軟件達到規定標準。
第 7 部分“技術(shù)和措施概述”的第 C.4.2 節中指出要使用編程語(yǔ)言子集:對編程語(yǔ)言進(jìn)行檢查,比如使用靜態(tài)分析法來(lái)確定容易出錯或難以分析的編程結構。然后定義編程語(yǔ)言子集來(lái)排除此類(lèi)編程結構。
對此,C-STAT 能夠派上用場(chǎng),可檢查代碼是否符合 MISRA 規定的規則。如前所述,如果想使用 C/C++ 軟件開(kāi)發(fā) SIL 2-4 認證系統,則確實(shí)需要使用靜態(tài)分析工具。
再來(lái)看第 B.6.5 節“動(dòng)態(tài)分析和測試”:對安全類(lèi)系統進(jìn)行動(dòng)態(tài)分析的方法是,在安全類(lèi)系統的基本可運行原型上,運行目標環(huán)境中的典型輸入數據。如果經(jīng)觀(guān)察,安全類(lèi)系統的行為符合所要求的行為,則表明系統通過(guò)了分析檢查。如果安全類(lèi)系統出現任何失效問(wèn)題,則必須予以糾正,然后重新分析新的可運行版本。
用于運行時(shí)分析的 C-RUN 雖然無(wú)法全面檢查整個(gè)安全類(lèi)系統中的所有動(dòng)態(tài)行為,但它仍是一個(gè)非常好用的工具,至少能在安全類(lèi)系統的軟件部分中找到真實(shí)存在的和潛在的錯誤。需要記住的是,必須將安全概念與系統的危險失效率關(guān)聯(lián)起來(lái),而不僅僅是組件(如軟件)的失效率。
用于運行時(shí)分析的 C-RUN 和用于靜態(tài)分析的 C-STAT 是兩類(lèi)不同的代碼質(zhì)量分析工具,在安全類(lèi)軟件的開(kāi)發(fā)中都非常有用,二者不形成競爭關(guān)系,而是構成優(yōu)勢互補。因此,IAR的C-RUN 和 C-STAT工具 能為開(kāi)發(fā)人員帶來(lái)互補的代碼檢查能力,自然而然地集成到日常的開(kāi)發(fā)流程中。在IAR的評估版工具中自帶C-RUN和C-STAT插件,歡迎工程師朋友們試用。
評論