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

運行生成配置腳本。

在跟蹤模式下運行 PVS-Studio 并生成項目。

根據上一步的結果分析項目文件。

將日志轉換為 html。

審核編輯:郭婷
-
微控制器
+關注
關注
48文章
8375瀏覽量
164558 -
C++
+關注
關注
22文章
2124瀏覽量
77112 -
MISRA
+關注
關注
0文章
22瀏覽量
7436
發布評論請先 登錄
網絡分析儀的設置與基本原理
頻譜分析儀的工作原理與應用
C語言安全編碼指南:MISRA C、CERT C、CWE 與 C Secure 標準對比與Perforce QAC應用詳解
矢量網絡分析儀與標量網絡分析儀的區別
網絡分析儀為什么需要校準?
矢量網絡分析儀與標量網絡分析儀技術差異與應用場景解析
如何合理選擇頻譜分析儀,便攜式頻譜分析儀,手持式頻譜分析儀
同步熱分析儀的聯用技術的應用
是德科技信號分析儀靈敏度的設置
熱重分析儀品牌有哪些?具備哪些優勢
熱重分析儀在塑料領域的應用
MISRA C:2025新標準解析:新增規則、優化點與靜態代碼分析工具支持(Perforce QAC、Klocwork)
是德N9917A FieldFox手持分析儀 N9917B便攜式分析儀
同步熱分析儀有哪些品牌?怎么選
MISRA編碼標準和靜態代碼分析儀
評論