數(shù)十種工具旨在告訴您您的 C 或 C++ 代碼是否違反 MISRA 規(guī)則。但是,雖然識(shí)別和解決分析工具標(biāo)記的違規(guī)行為對(duì)于單個(gè)開(kāi)發(fā)人員來(lái)說(shuō)可能是一項(xiàng)重大挑戰(zhàn),但它僅代表整個(gè)開(kāi)發(fā)團(tuán)隊(duì)合規(guī)流程的一部分。
事實(shí)上,讓許多人感到驚訝的是,MISRA C:2012 文檔在定義指南之前就包含了六章指南!
回過(guò)頭來(lái)對(duì)違規(guī)行為進(jìn)行詳細(xì)分析,很容易看到關(guān)于整個(gè)過(guò)程的更大問(wèn)題。MISRA 的文檔“MISRA 合規(guī)性:2016”比語(yǔ)言子集本身受到的新聞報(bào)道要少得多,但它對(duì)于了解您選擇的靜態(tài)分析工具突出顯示的信息如何與 MISRA 合規(guī)應(yīng)用程序的大局相關(guān)聯(lián)非常寶貴。
很容易誤解 MISRA 合規(guī)性的性質(zhì),并假設(shè)最小化的違規(guī)計(jì)數(shù)可確保優(yōu)化的應(yīng)用程序安全性。但要有效,MISRA 指南需要在一個(gè)框架內(nèi)應(yīng)用,該框架利用合規(guī)代碼的優(yōu)勢(shì)并管理任何必要的偏差,以使合規(guī)概念具有可信度。
MISRA 合規(guī)性:2016 文檔長(zhǎng)達(dá) 33 頁(yè),像這樣的短文無(wú)法觸及它討論的所有內(nèi)容。但是,它可以讓我們深入了解合規(guī)項(xiàng)目的外觀。這些提示源自 MISRA 合規(guī)性文件本身概述的原則,它們反映了一點(diǎn)技術(shù)智慧和很多常識(shí)。
提示 1. MISRA 合規(guī)性需要記錄在案的軟件開(kāi)發(fā)過(guò)程
MISRA 指南旨在用于正式軟件開(kāi)發(fā)過(guò)程的框架內(nèi)(如圖 1 所示)。這樣的過(guò)程將確保完整、明確和正確的軟件需求,并且所有且僅這些需求都反映在開(kāi)發(fā)生命周期的每個(gè)階段創(chuàng)建的人工制品中。
圖 1:結(jié)構(gòu)化開(kāi)發(fā)生命周期對(duì)于 MISRA 合規(guī)性至關(guān)重要,如 LDRA 工具套件的 TBmanager 組件中的“Uniview”所示。(來(lái)源:LDRA)
如果您的代碼沒(méi)有違反規(guī)定但沒(méi)有滿足其要求的功能,那么它仍然是糟糕的代碼。
提示 2. 并非所有 MISRA 指南都可以通過(guò)分析工具進(jìn)行檢查
MISRA C:2012 指南引入了一個(gè)系統(tǒng),在該系統(tǒng)下,每條指南都被分類為規(guī)則或指令。
通常,規(guī)則定義得足夠好,可以通過(guò)自動(dòng)化工具進(jìn)行檢查,而指令可能更主觀一些。例如,MISRA C:2012 的指令 1.1 要求“程序輸出所依賴的任何實(shí)現(xiàn)定義的行為都應(yīng)記錄并理解”。
在 MISRA C:2012 中,一些規(guī)則被標(biāo)記為“不可判定”,這意味著基本上不可能有一種方法可以確定是否存在違規(guī)行為。工具可能會(huì)警告潛在的問(wèn)題,也可能不會(huì)。無(wú)論哪種方式,都需要某種程度的人工干預(yù)。
并非所有工具都相同。有些人會(huì)聲稱對(duì)規(guī)則的覆蓋范圍比其他人多,而有些人則無(wú)法進(jìn)行更微妙的侵權(quán)。顯示“無(wú)違規(guī)”的工具可能實(shí)際上是在說(shuō)“沒(méi)有違規(guī),除了我沒(méi)有發(fā)現(xiàn)的那些”。
牛津詞典對(duì)“工具”的定義是“用來(lái)幫助完成工作的東西”。工具有幫助——它們不會(huì)為你完成這項(xiàng)工作。
提示 3. 指南只有在有執(zhí)行計(jì)劃時(shí)才有用
對(duì)于大多數(shù)指南,最簡(jiǎn)單、最可靠和最具成本效益的實(shí)施方式是使用靜態(tài)分析工具、編譯器或兩者的組合(參見(jiàn)圖 2)。
圖 2:使用 LDRA 靜態(tài)分析工具強(qiáng)制遵守 MISRA C:2012(來(lái)源:LDRA)
對(duì)于這些指南,重要的是要確保要使用的工具已被證明是合適的,并且它的類型和版本是指定和固定的。
對(duì)于那些需要手動(dòng)驗(yàn)證的指南,還必須制定執(zhí)行計(jì)劃。
提示 4. “偏差”不是一個(gè)骯臟的詞
對(duì)于任何現(xiàn)實(shí)生活中的嵌入式應(yīng)用程序,很可能一些違規(guī)行為是不可避免的。如果對(duì)由此產(chǎn)生的應(yīng)用程序的任何合規(guī)性聲明是可信的,則必須通過(guò)明確定義的流程授權(quán)管理這些違規(guī)行為,并由適當(dāng)?shù)摹捌钣涗洝蔽臋n支持。
這些偏差記錄需要包括違反的準(zhǔn)則、這種/這些違反的理由、偏差適用的情況以及它在代碼庫(kù)中的應(yīng)用位置。
Tip 5. 采用的代碼不能被忽略
與功能安全的嵌入式軟件相關(guān)的許多文檔和許多標(biāo)準(zhǔn)都是從“綠地”項(xiàng)目的假設(shè)開(kāi)始的。在現(xiàn)實(shí)生活中,開(kāi)發(fā)人員需要利用內(nèi)部遺留代碼或第三方代碼,例如設(shè)備驅(qū)動(dòng)程序、數(shù)學(xué)庫(kù)或圖形庫(kù)。
盡管將 MISRA 準(zhǔn)則追溯應(yīng)用于此類代碼顯然是不切實(shí)際的,但要聲稱符合 MISRA,重要的是要確保這種所謂的“采用的代碼”不會(huì)損害整個(gè)系統(tǒng)的安全性。
許多根據(jù) ISO 26262、IEC 61508 和 DO-178C 等標(biāo)準(zhǔn)開(kāi)發(fā)的功能安全系統(tǒng)都利用 MISRA 語(yǔ)言子集,這并非巧合,而且很容易假設(shè) MISRA 合規(guī)性僅適用于這些環(huán)境。
但那將是謬誤。同樣真實(shí)的是,除了語(yǔ)言子集本身的指導(dǎo)方針之外,在 MISRA 合規(guī)之前要滿足的許多基本要求可以合理地歸結(jié)為一種常識(shí)方法,以及對(duì)“正確行事”的奉獻(xiàn)精神。這不能是關(guān)鍵系統(tǒng)社區(qū)的專屬特權(quán),因?yàn)橄到y(tǒng)在有動(dòng)力可靠地工作之前不必是關(guān)鍵的。
審核編輯:郭婷
-
C++
+關(guān)注
關(guān)注
21文章
2102瀏覽量
73457 -
編譯器
+關(guān)注
關(guān)注
1文章
1617瀏覽量
49019
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論