2008-09-15 50 views
10

我有一個要求使大量的代碼MISRA兼容。
第一個問題:有人可以給估計爲基於經驗的嵌入式系統傳遞良好的代碼。我明白「寫得好」的定義不明確,模糊,所以我要求原始估計。第二個問題:任何可定製工具的建議(即允許禁止特定警告)並用於自動構建環境(即命令行界面)
任何其他有用的建議,可以幫助完成此任務。
謝謝伊利亞。嵌入式軟件的Misra標準

+0

這個問題很大程度上取決於你需要哪個版本的MISRA。 2012年的最新版本仍然缺乏來自許多公司的工具支持。 – Lundin 2013-12-20 10:09:30

回答

12

我也強烈推薦PC-Lint。如果你碰巧用Visual Studio編譯你的代碼,我推薦Riverblade插件'Visual Lint'。如果您無法在Visual Studio中編譯代碼,則仍然可以從命令行運行PC-Lint以取得良好效果。

某些嵌入式系統編譯器提供MISRA兼容性測試作爲編譯器警告。我使用ARM7/Arm9開發的IAR編譯器。它在編譯器設置中提供了一個易於配置的MISRA合規檢查清單。

很難拿出一個經驗法則來估計你需要編寫一些寫得很好的代碼MISRA的時間。很大程度上取決於程序員現有的編碼習慣,以及他們首先遵循MISRA規則的程度。

粗略估計值:
2 - 3天將擅長使用PC-Lint。
使現有代碼符合MISRA的初始通行證:首先編寫代碼的時間佔10-25%。
保持代碼MISRA兼容性:5%到10%添加到代碼開發中。這一成本的一半正在改變編程人員遵循'MISRA方式'做事的習慣。另一半是代碼測試和檢查的額外成本,以確保MISRA合規性。

+0

請注意,這些工具都不支持MISRA-C:2012。我最近問了IAR他們是否支持它,他們似乎甚至沒有意識到有新的版本出來...... – Lundin 2013-12-20 10:10:41

+0

這樣說,我會建議得到一個廉價的工具,如林特。它會帶來數百個虛假警告,但所謂的「最先進的」靜態分析儀也是如此,這是一筆巨大的財富。像LDRA或Klocwork這樣昂貴的工具與Lint在MISRA檢查方面同樣有問題。 – Lundin 2013-12-20 10:18:26

4

我使用PC Lint進行C和C++代碼的靜態分析。它可以配置爲顯示違反了MISRA規則,並且它有一個命令行界面。

8

如果你遵循相當好的編程習慣,讓代碼Misra符合它不是太多雜事。你可能會發現一些指針規則稍微有點棘手,如果你試圖製作的代碼有一些奇怪而精彩的指針算術。

雖然在他們(和編譯器的警告系統)之間,我估計Greg的建議是PC Lint,但開源Splint也值得關注,我估計你仍然只能覆蓋80% Misra規則 - 其餘的可能需要手動進行代碼審查。

3

我已經使用了一個名爲QAC的商業工具。該工具能夠執行MISRA

它有一個命令行界面,因此您可以將其設置爲從自動構建環境運行。要應用的規則是可配置的,但希望有人花一些時間來設置它。 MISRA的執行非常簡單,並且運行良好。我被告知(這只是第三隻手),這是一些機構(如FDA)用來評估代碼的工具之一。像大多數靜態分析工具一樣,有噪聲(誤報)需要處理。上次我使用它時,它沒有一個好的方法來標記/阻止再次發生誤報(不改變它所抱怨的代碼)。

我懷疑初級工程師最多需要一週(4-5天),以得到它設置(假設他們決心要得到它的工作,只要你想)。

在一個側面說明,其他商業靜態分析工具可能有MISRA執法爲好。據報道(按他們的銷售代表),Klocwork呢。

3

我們有一個類似的改造Misra規則的問題。我們在一個大型項目中遇到了一些代碼質量問題,並決定使用MISRA來提高代碼質量。

我們使用支持MISRA C規則的Green Hills編譯器。還有獨立的跳棋可用。取決於你想要做什麼,可能會有點過分的關閉所有規則。我們每次切換一條規則,讓人們有時間修復有限數量的類似問題,否則您會完全被錯誤數量所淹沒。

由於是由編譯器,而不是你所看到的錯誤,你開發,而不是隻有當你運行檢查一個獨立的工具生成我們的警告。在我們繼續開發的過程中,我們獲得了我們的代碼合規性,而不是一言九鼎。這也可以防止破壞新代碼的舊習慣,從而導致您不得不稍後重新編寫代碼。

有的時候是很難得的舊代碼兼容的,因爲沒有人知道確切的代碼是如何工作的。我希望你有單元測試。

1

我明白這是一個古老的問題,但爲了其他考古學家(或搜索者)的利益,重要的是要記住,MISRA提供準則不應該總是盲目追隨。

我推薦用MISRA編寫新的代碼;因此保持合規性會更容易。

然而,這並不總是可能的 - 特別是試圖扭轉工程師代碼來滿足規範的。在這種情況下,我建議你把重點放在必要的規則上,並把顧問視爲一種獎勵......成本v利益也適用於此!

而且,記住,是有偏差的過程 - 這是更好地保持清潔和維護的代碼有偏差,不是圖謀一些規定,卻難以辨認意大利麪條。