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