MISRA C
MISRA C是由汽車產業軟體可靠性協會(MISRA)提出的C語言開發標準。其目的是在增進嵌入式系統的安全性及可移植性。針對C++語言也有對應的標準MISRA C++。
MISRA C一開始主要是針對汽車產業[1] ,不過其他產業也逐漸開始使用MISRA C:包括航空、電信、國防、醫療設備、鐵路等領域中都已有廠商使用MISRA C。[2][3]
MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》在1998年發行,一般稱為MISRA-C:1998.[4]。MISRA-C:1998有127項規則,規則從1號編號到127號,其中有93項是強制要求,其餘的34項是推薦使用的規則。
在2004年時發行了第二版的MISRA C的第一版《Guidelines for the use of the C language in critical systems》(或稱作MISRA-C:2004),其中有許多重要建議事項的變更,其規則也重新編號。MISRA-C:2004有141項規則,其中121項是強制要求,其餘的20項是推薦使用的規則。規則分為21類,從「開發環境」到「運行期錯誤」[5]。
規則舉例
[編輯]MISRA C的一些規則是針對運算符的限制,例如MISRA-C:2004的規則12.10為「不要使用逗號運算符」,也可以用其他方式達到一樣的效果。
動態分配記憶體功能是C語言的一大特色,可以在運行期依實際需求用malloc分配記憶體,在不使用此記憶體時再用free歸還,但許多問題也和未正確處理動態分配記憶體功能有關,例如MISRA-C:2004的規則20.4為「不能使用動態堆的內存分配」,限制malloc、free等程序的使用。
C語言 程式碼 if (x = y) 是完全合法且有效的 C語言 語句,但很可能是由於意外使用賦值運算子(=)而不是相等運算子(==)而導致的鍵入錯誤。
規則 8.18.2 表示 不應使用賦值運算子的結果,以確保報告此類程式碼並審查其正確性。
工具
[編輯]有許多工具聲稱可以檢查代碼和MISRA規則相容性,不過MISRA沒有相關認證的程序[6]。相關工具可以幫助使用者評估和比較檢查的結果,也會提供一些可符合MISRA-C規定的指南。
大部份的規定可以用支援靜態代碼分析的工具檢查,有些規定需要用支援動態代碼分析的工具檢查。
- 以下是一些可以配合MISRA C規則進行檢查的工具:
- Checkmarx (頁面存檔備份,存於網際網路檔案館)
- Polyspace[7]
- GrammaTech
- Klocwork[8]
- Coverity[9]
- LDRA[10]
- Parasoft[11]
- PC-Lint[12]
- QA-C[13]
- Understand (軟體)
- 以下是一些可以配合MISRA C規則進行檢查的編譯器:
相關條目
[編輯]參考資料
[編輯]- ^ 確保嵌入式系統的網路安全性. 電子工程專輯. 2006-04-28 [2012-04-24]. (原始內容存檔於2013-10-04) (中文).
- ^ 存档副本. [2012-04-24]. (原始內容存檔於2012-02-12).
- ^ 存档副本. [2012-04-24]. (原始內容存檔於2012-03-17).
- ^ A brief history of MISRA C. [2012-04-24]. (原始內容存檔於2017-06-07).
- ^ ([//web.archive.org/web/20120813183716/http://eetimes.com/discussion/beginner-s-corner/4023981/Introduction-to-MISRA-C 頁面存檔備份,存於網際網路檔案館) Introduction-to-MISRA-C
- ^ faqs. [2012-04-24]. (原始內容存檔於2017-07-06).
- ^ PolySpace announces MISRA compliance checker. [2012-04-24]. (原始內容存檔於2019-10-18).
- ^ MISRA Coding Standards. [2012-04-24]. (原始內容存檔於2014-10-04).
- ^ The 5 Steps. [2012-04-24]. (原始內容存檔於2012-08-20).
- ^ LDRA工具套件的MISRA-C: 2004验证. [2012-04-24]. (原始內容存檔於2012-09-04).
- ^ MISRA Compliance. [2012-04-24]. (原始內容存檔於2013-10-22).
- ^ PC-Lint. [2012-04-24]. (原始內容存檔於2020-09-29).
- ^ QA·C. [2012-04-24]. (原始內容存檔於2016-04-15).
- ^ MISRA C Support. [2012-04-24]. (原始內容存檔於2018-11-11).
- ^ MISRA C. [2012-04-24]. (原始內容存檔於2012-04-27).