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