MISRA 簡(jiǎn)史
協(xié)作 MISRA 項(xiàng)目是在 1990 年代初構(gòu)思的,旨在為在道路車輛電子系統(tǒng)中創(chuàng)建嵌入式軟件制定指南。1994 年 11 月,發(fā)布了基于車輛的軟件的開發(fā)指南。
合作繼續(xù)進(jìn)行,并于 1998 年 4 月出版了 MISRA C 的第一版。
最初,MISRA C 僅針對(duì)汽車行業(yè)。然而,很快就認(rèn)識(shí)到它的適用性要廣泛得多……這可以通過(guò)第二版的名稱更改來(lái)體現(xiàn)。
1998 年 4 月 第1版《基于車輛的軟件中使用 C 語(yǔ)言的指南》
2004 年 10 月 第2版C 語(yǔ)言在關(guān)鍵系統(tǒng)中的使用指南
第 3版 2013 年 3 月 C語(yǔ)言在關(guān)鍵系統(tǒng)中的使用指南
現(xiàn)在,在其第 3版中,MISRA C 已成為大多數(shù)安全相關(guān)行業(yè)中嵌入式 C 編程的事實(shí)標(biāo)準(zhǔn),在這些行業(yè)中,安全性至關(guān)重要,并且即使在安全性或安全性不是主要的情況下,也用于提高軟件質(zhì)量考慮。
MISRA C 的背景
C 語(yǔ)言定義
雖然非常流行,但 C 語(yǔ)言有幾個(gè)缺點(diǎn)。特別是,語(yǔ)言定義(ISO 標(biāo)準(zhǔn))并未完全指定語(yǔ)言,而是將某些方面置于編譯器實(shí)現(xiàn)的控制之下。這是有意的,部分原因是希望支持許多針對(duì)不同目標(biāo)處理器的預(yù)先存在的實(shí)現(xiàn)。
因此,該語(yǔ)言的某些領(lǐng)域:
行為未定義——即標(biāo)準(zhǔn)沒有強(qiáng)加任何要求
行為是未指定的 - 即標(biāo)準(zhǔn)允許兩種或多種可能性,并且在任何情況下都沒有對(duì)選擇的進(jìn)一步要求
實(shí)現(xiàn)可以自由選擇自己的行為,前提是已記錄在案
依賴于未定義或未指定行為的程序不能保證以可預(yù)測(cè)的方式運(yùn)行;同樣,依賴于實(shí)現(xiàn)定義行為的程序可能難以移植到不同的目標(biāo)。
語(yǔ)言濫用
雖然 C 程序可以以結(jié)構(gòu)化和易于理解的方式進(jìn)行布局,但 C 使程序員可以輕松編寫難以理解的晦澀代碼。
運(yùn)算符的規(guī)范使得編譯器難以檢測(cè)到編程錯(cuò)誤。例如,以下兩段代碼都是完全合法的,因此編譯器不可能知道其中一個(gè)是否被錯(cuò)誤地用來(lái)代替另一個(gè):
if ( a == b ) /* 測(cè)試 a 和 b 是否相等 */
if ( a = b ) /* 將 b 賦值給 a,然后測(cè)試 a 是否非零 */
語(yǔ)言誤解
程序員通常會(huì)誤解該語(yǔ)言的某些領(lǐng)域。例如,C 比其他一些語(yǔ)言有更多的運(yùn)算符,因此有大量不同的運(yùn)算符優(yōu)先級(jí),其中一些不直觀。
C 提供的類型規(guī)則也會(huì)讓熟悉強(qiáng)類型語(yǔ)言的程序員感到困惑。例如,操作數(shù)可能被“提升”為更廣泛的類型,這意味著操作產(chǎn)生的類型不一定與操作數(shù)的類型相同。
例如:
uint8_t c = 0x82;
簽名 int d;
d = c 《《 1; // UINT8 上的 《《 運(yùn)算符返回 SIGNED INT
運(yùn)行時(shí)錯(cuò)誤檢查
C 程序可以編譯成小而高效的機(jī)器代碼,但代價(jià)是運(yùn)行時(shí)檢查的程度非常有限。C 程序通常不為常見問(wèn)題提供運(yùn)行時(shí)檢查,例如算術(shù)異常(例如被零除)、溢出、指針有效性或數(shù)組綁定錯(cuò)誤。
C 哲學(xué)是程序員負(fù)責(zé)進(jìn)行此類檢查……
那么,什么是 MISRA C?
考慮到所有這些,MISRA C 指南定義了一個(gè)可預(yù)測(cè)的 C 語(yǔ)言子集,其中消除或減少了出錯(cuò)的機(jī)會(huì)。
除了定義這個(gè)子集之外,這些 MISRA C 指南還提供:
開發(fā) C 程序的教育材料
工具開發(fā)人員參考資料
這些指南中的建議,當(dāng)在文檔化的軟件開發(fā)過(guò)程中使用時(shí),解決了 C 語(yǔ)言的許多缺點(diǎn),而與開發(fā)代碼的最終用途無(wú)關(guān)。
通過(guò)定義 C 語(yǔ)言的可預(yù)測(cè)子集并為開發(fā)人員提供指導(dǎo),MISRA C 為嵌入式控制系統(tǒng)和獨(dú)立軟件的安全應(yīng)用提供了最佳實(shí)踐指南。
審核編輯:郭婷
評(píng)論