近年來,軟件質(zhì)量、安全和保障已成為重中之重。在我們之前的文章中,我們已經(jīng)提到了歷史上的一些事件,這些事件既造成了巨大的經(jīng)濟(jì)損失,也造成了人員死亡。Ariane 5的爆炸,Therac-25放射治療機(jī)使患者暴露于 20,000 拉德的過量劑量,89 人因豐田的過錯(cuò)而死亡。所有這些故事都有一個(gè)共同點(diǎn):導(dǎo)致巨大損失的軟件錯(cuò)誤。
那么什么是 MISRA?
最初,MISRA(汽車行業(yè)軟件可靠性協(xié)會(huì))成立的目的是為道路車輛中使用的微控制器設(shè)計(jì)一套軟件開發(fā)指南。從那時(shí)起,它就被應(yīng)用于汽車工業(yè)、醫(yī)療設(shè)備、航空航天和國(guó)防等所有對(duì)可靠性和安全性至關(guān)重要的領(lǐng)域。MISRA 標(biāo)準(zhǔn)是由一組規(guī)則和建議組成的文檔,C 和 C++ 開發(fā)人員在開發(fā)其應(yīng)用程序時(shí)應(yīng)遵守這些規(guī)則和建議。MISRA-C:1998 版本有127條規(guī)則。
所有這些規(guī)則都可以分為以下幾類:
強(qiáng)制的
必需 – 允許偏離規(guī)則(但建議記錄在案)
咨詢——非強(qiáng)制性
(來源: 什么是 MISRA 以及如何烹飪)
首先要提到的是,MISRA 標(biāo)準(zhǔn)的應(yīng)用應(yīng)該在開發(fā)過程真正開始之前就開始,并且只有在真正需要的時(shí)候才開始。在其他情況下,特別是當(dāng)代碼庫(kù)足夠大并且不打算在嵌入式系統(tǒng)上使用時(shí),開發(fā)人員將不得不進(jìn)行漫長(zhǎng)而乏味的重構(gòu)。為什么這樣?
WinMerge 的源代碼長(zhǎng)約 25 萬(wàn)行 C 和 C++ 代碼。這是一個(gè)小項(xiàng)目,但是將if語(yǔ)句的主體括在花括號(hào)中的規(guī)則在其中被破壞了大約 2000 次。有 127-228 條這樣的規(guī)則(取決于標(biāo)準(zhǔn)的版本)。
Nana 是一個(gè)用于創(chuàng)建圖形用戶界面的跨平臺(tái)庫(kù),其源代碼長(zhǎng)度不到 10 萬(wàn)行。在這個(gè)項(xiàng)目中,同樣的規(guī)則被打破了大約三千次。
除了關(guān)于花括號(hào)的規(guī)則之外,還有一些規(guī)則:
不得使用 continue 語(yǔ)句;
每個(gè) switch 語(yǔ)句都應(yīng)該有一個(gè)默認(rèn)標(biāo)簽;
不得使用 goto 語(yǔ)句;
所有 if 。.. else if 結(jié)構(gòu)都應(yīng)以 else 子句終止;
那么,它是用來做什么的呢?
但是,這些規(guī)則并不意味著讓開發(fā)人員的生活更加艱難。這些是用鮮血寫成的規(guī)則,它們用于使安全關(guān)鍵代碼不易出現(xiàn)錯(cuò)誤。這個(gè)想法是簡(jiǎn)單而清晰的代碼不太可能包含錯(cuò)誤。以下是一些作為證據(jù)的診斷示例:
賦值運(yùn)算符不得用于返回布爾值的表達(dá)式;
所有非 void 的函數(shù)都應(yīng)該返回一個(gè)值;
循環(huán)計(jì)數(shù)器不應(yīng)具有本質(zhì)上的浮動(dòng)類型;
一個(gè)函數(shù)最后應(yīng)該有一個(gè)退出點(diǎn);
遵循 MISRA 指南將有助于提高軟件的可靠性。但是,不熟悉 MISRA 的人可能想知道它是如何使用的。你真的必須記住所有這 127 條規(guī)則嗎?這就是靜態(tài)分析器可以提供幫助的地方。
靜態(tài)分析的目的是什么?
手動(dòng)檢查代碼是否符合 MISRA 標(biāo)準(zhǔn)是一項(xiàng)漫長(zhǎng)而乏味的工作。但實(shí)際上你不必記住所有這些規(guī)則。靜態(tài)代碼分析器可以為您完成所有工作。
靜態(tài)代碼分析是檢測(cè)計(jì)算機(jī)程序源代碼中的錯(cuò)誤和小缺陷的過程。它可以被視為自動(dòng)代碼審查。一些靜態(tài)分析器可以檢查代碼是否符合 MISRA 規(guī)則,正是這些工具將幫助您找到并修復(fù)程序中所有不符合規(guī)則的點(diǎn)。為此,您只需使用分析儀檢查您的項(xiàng)目并研究檢查結(jié)束時(shí)生成的分析報(bào)告。下面我將簡(jiǎn)要演示如何使用 PVS-Studio 分析器和項(xiàng)目 Shairport 作為示例來執(zhí)行此操作。PVS-Studio 可在此處下載。
克隆存儲(chǔ)庫(kù)。
運(yùn)行構(gòu)建配置腳本。
在跟蹤模式下運(yùn)行 PVS-Studio 并構(gòu)建項(xiàng)目。
根據(jù)上一步的結(jié)果分析項(xiàng)目文件。
將日志轉(zhuǎn)換為 html。
完畢。我們現(xiàn)在可以查看日志。
所以,我們今天了解了 MISRA:我們查看了一些規(guī)則,討論了為什么需要這些指南,如何將它們應(yīng)用到您的項(xiàng)目中,等等。我希望這篇文章足夠有趣,不會(huì)讓你昏昏欲睡,而且仍然能提供豐富的信息,讓作者的工作值得。希望現(xiàn)在您對(duì) MISRA 是什么以及需要什么靜態(tài)代碼分析器有了更好的理解。
審核編輯:郭婷
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151421 -
C++
+關(guān)注
關(guān)注
22文章
2108瀏覽量
73649 -
源代碼
+關(guān)注
關(guān)注
96文章
2945瀏覽量
66747
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論