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