Polyspace for MISRA C

使用Polyspace工具--讓你的程式碼更好更快地符合MISRA的規範

報名參加Polyspace-MISRA C程式設計規範檢查-免費體驗課程

最新MISRA標準編碼規則的版本是MISRA C:2012,它成功的延續了MISRA C:2004的規範,而2004現在已被各行各業的軟體社群廣泛採用於嵌入式系統中。

簡而言之,MISRA編碼規範的一個子集定義了C語言的開發標準,能增進嵌入式系統編程的可靠性以及可移植性。遵守標準的需求最初是來自於對認證的要求,但現在MISRA C標準已經被廣泛接受,因為它有助於在開發複雜的軟體時減輕風險和責任。

不過MISRA C:2004的規範版本主要是以當時流行的C90的C編程語言為基礎。不過,自2004年標準發布以來中間已有許多變化,像現在新的C99和C11版本對C語言擴展了更多新功能;C90版本的一些有用功能可以使開發人員能夠編寫更簡單、更高效的程式碼,但是MISRA C:2004標準卻不允許這樣做,雖然這有助於防止不可靠或不安全的編程結構,但它過於嚴格。另外,還有一個很好的例子是MISRA C:2004規則第17.4條,這是強制要求的規則,它規定array indexing是pointer arithmetic的唯一形式,這意味著使用帶有++和 - - 運算符號的pointer arithmetic違反了標準;而新的MISRA C:2012標準已經將其標準放寬轉變為推薦使用規則,允許在pointer arithmetic上使用++和 - - 運算符號。

MISRA C:2004規則17.4將pointer arithmetic算法限制為array indexing。

MISRA C:2012刪除了對pointer arithmetic的限制,並不違反編碼規則。

因此,MISRA C:2012通過以下方式解決了一些關鍵問題:

  • 支持新的C99版本以及現有的C90版本
  • 提供所有編碼規則的詳細理由
  • 糾正2004版的問題
  • 轉向指令2004年標準中的某些規則不具有靜態可執行性(使自動化靜態分析工具更容易檢查合規性)
  • 新標準還將某些規則分類為不可判定,因為許多靜態分析工具在分析數據流方面不夠,導致大量誤報和漏報。

而Polyspace®靜態分析工具在這方面是獨一無二的,它利用形式化方法對控制流和數據流進行詳盡分析,以幫助遵守所有靜態可執行的規則。Polyspace工具對2004年和2012年版本的MISRA標準都支持且為內建功能,並具有自動生成程式碼的子集(MISRA AC AGC)以及定義標準的自定義子集的完整攻能。

更多關於Polyspace介紹

提示:

MISRA C:2012的附錄1也已在MISRA網站上提供,其中包含規則對照,以幫助用戶從2004版本轉移到2012版本。它提供了MISRA C:2004和MISRA C:2012之間的雙向規則對照。

MISRA C 規範及重要性

MISRA (The Motor Industry Software Reliability Association汽車工業軟體可靠性協會)是一個跨國性的汽車工業協會,成員包括了大部分歐美汽車生產商,它的主要任務是為汽車工業提供服務和協助,幫助廠方開發安全的、高可靠性的嵌入式軟體。該協會最為人所知的是MISRA C語言開發標準(MISRA C Coding Standard),目的是在增進嵌入式系統的安全性及可移植性。針對C++語言也有對應的標準MISRA C++。 MISRA C的第一版《Guidelines for the use of the C language in vehicle based software》在1998年發行,一般稱為MISRA-C:1998,包含127項規則,其中有93項是強制要求,其餘的34項是推薦使用的規則。2004年時則發行了第二版的MISRA C:2004,有141項規則,其中121項是強制要求,其餘的20項是推薦使用的規則,規則分為21類,從「開發環境」到「運行期錯誤」等。之後則陸續發布新的C99和C11版本。

這些條款確實有許多可取之處,能對C/C++的程式碼品質進行良好的管理。一般認為,如果能夠完全遵守MISRA C的這些標準,則C程式碼是易讀、可靠、可移植和易於維護的。經過多年來的發展,很多嵌入式開發者都以MISRA C來衡量自己的編碼風格,對於大部分軟體開發者來說,在MISRA的基礎上適當修改就可以形成自己的規範,當然其中也有一些過於嚴苛的東西,這就需要各個開發部門依情況處理。基本上,如果能夠嚴格地遵守編碼規範,代表了該組織具有很高的組織性及紀律性,並有良好的程式碼評審機制,因此,遵守MISRA C的規範就代表了一個開發部門具有實力的最佳證明。

MISRA C一開始主要是針對汽車產業,不過現在已陸續有許多產業都逐漸開始使用MISRA C:包括航太、電信、國防、醫療設備、鐵路等領域中都已有廠商使用MISRA C。