MISRA 2004 (先前作者寫的MISRA文檔是基於 1998版本,這個是基於更新的MISRA 2004版本)

汽車行業軟件可靠性聯盟(MISRAMotor Industry Software Reliability Association)的使命爲了提高車輛系統中軟件的安全性和可靠性,是對汽車工業的軟件應用和開發提供相應支持和幫助。MISRA-C的早期目的是爲了指導汽車行業中C語言軟件的開發,但是,從1998年,MISRA-C已經在汽車工業、航空航天、醫療設備、以及其它工業環境中得到應用和發展。

MISRA-C2004MISRA-C1998的更新版MISRA-C:2004糾正了軟件工程師在實現MISRA-C:1998中存在的問題。爲了適合嵌入式系統的開發,本文檔描述了一個C語言的子集。它包含一個C編程語言的規則列表以及相應的判斷和實例。

1.     C語言背景

C語言在汽車工業中相關實時嵌入式應用軟件的使用率和重要性逐漸提高,這主要是源於該語言的靈活性,可擴展性以及潛在的多種平臺的可移植性。具體來說,1C語言可以直接應用於多種硬件平臺;2C語言提供高速、低層、輸入/輸出操作,而這些往往是很多汽車嵌入式系統需要的;3)應用軟件的複雜性使開發人員更樂於選擇高級開發語言而不是彙編語言;4C語言可以產生更小的軟件,與其它高級語言相比,使用RAM更少;5)爲了降低硬件成本,軟件往往被移植到新的低成本的處理器上;6)能夠自動產生C語言代碼的模型軟件包的增長;7)開源系統和家庭環境中不斷增加的利潤。因此,C語言在實時嵌入式系統中的廣泛使用,推動了對C語言安全性能的要求。

任何一種編程語言都無法保證最終的可執行代碼完全按照程序員的目的進行活動。C語言中存在哪些非安全因素呢?

           程序員的錯誤。錯誤變量名稱的輸入或者是被捲入了晦澀難懂的算法之中。程序員就常常忍受這些錯誤:1)語言的編程風格和表達可以幫助和阻礙程序員對算法清晰的思考,2)編程語言可以使程序員很容易或者很困難的將一種有效結構通過輸入錯誤轉換爲另外一個,例如邏輯運算符“==”寫成了賦值預算法“=”;3)並且編程語言可以或者不可以檢測出這些由他們自己弄出的錯誤。

           程序員對語言理解的錯誤。最典型的就是運算符優先級問題,程序員往往錯誤的理解了運算符的優先級而引出問題。

           編譯器並沒有按照程序員的期望進行編譯。如果語言特徵並沒有明確定義,或者很模棱兩可,從而使程序員與編譯器對同一種結構有兩種不同的解釋。例如變量的長度問題,不同的編譯器對變量長度可能不同。

           編譯器本身的錯誤。編譯器作爲一個軟件工具,不可能永遠可以正確編譯代碼,它們可能在某些條件下沒有遵循語言標準,或者是含有BUGS

           運行時錯誤。C語言對運行時檢查相當差,這也是爲什麼C語言代碼小且高效的原因,這也源於需要消耗一定的時間和代碼去檢測錯誤。最常見的問題是數學異常,溢出,非法指針地址,或數組越界。

從上面的分析結果中可以清晰看到,如果將C語言應用於安全相關係統中,必須要加以小心。同時可以看出,整個C語言不適用於安全相關係統的編程應用。但是,C語言的成熟和應用又吸引了C語言在實時嵌入式系統中的應用。爲此,將C語言應用於安全相關係統必須有一定的限制。本文檔就列出了針對C語言在安全相關係統中的限制條件。

2.     目的

文檔的目的是爲了盡力保證最安全的使用C語言;從個人和企業層次上鼓勵培訓和提高C語言編程能力;強調針對該語言子集的靜態檢查工具的使用;使汽車工業中相關工程師和管理人員在語言選擇上更加清晰。總之,文檔的最終目的是使他們的產品更加適合汽車工業的應用。

MISRA-C僅僅適用於ISO標準,而不適用於K&R CC++,和其它C語言的擴展。由於編碼風格和尺寸相當主管,因此,本文檔併爲包含這些問題。文檔僅僅適用於嵌入式系統,因此對於主機系統並不必須。文檔中的所有術語遵循ISO/IEC 9899標準。另外,基於該文檔的工具或編譯器在測試時並不需要實現所有的文檔設計規則。關於c++和代碼自動產生工具相關問題,讀者可以參考MISRA-C:2004的英文版本,這裏不再累述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章