我有一個要求使大量的代碼MISRA兼容。
第一個問題:有人可以給估計爲基於經驗的嵌入式系統傳遞良好的代碼。我明白「寫得好」的定義不明確,模糊,所以我要求原始估計。第二個問題:任何可定製工具的建議(即允許禁止特定警告)並用於自動構建環境(即命令行界面)
任何其他有用的建議,可以幫助完成此任務。
謝謝伊利亞。嵌入式軟件的Misra標準
回答
我也強烈推薦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合規性。
我使用PC Lint進行C和C++代碼的靜態分析。它可以配置爲顯示違反了MISRA規則,並且它有一個命令行界面。
如果你遵循相當好的編程習慣,讓代碼Misra符合它不是太多雜事。你可能會發現一些指針規則稍微有點棘手,如果你試圖製作的代碼有一些奇怪而精彩的指針算術。
雖然在他們(和編譯器的警告系統)之間,我估計Greg的建議是PC Lint,但開源Splint也值得關注,我估計你仍然只能覆蓋80% Misra規則 - 其餘的可能需要手動進行代碼審查。
我已經使用了一個名爲QAC的商業工具。該工具能夠執行MISRA
它有一個命令行界面,因此您可以將其設置爲從自動構建環境運行。要應用的規則是可配置的,但希望有人花一些時間來設置它。 MISRA的執行非常簡單,並且運行良好。我被告知(這只是第三隻手),這是一些機構(如FDA)用來評估代碼的工具之一。像大多數靜態分析工具一樣,有噪聲(誤報)需要處理。上次我使用它時,它沒有一個好的方法來標記/阻止再次發生誤報(不改變它所抱怨的代碼)。
我懷疑初級工程師最多需要一週(4-5天),以得到它設置(假設他們決心要得到它的工作,只要你想)。
在一個側面說明,其他商業靜態分析工具可能有MISRA執法爲好。據報道(按他們的銷售代表),Klocwork呢。
我們有一個類似的改造Misra規則的問題。我們在一個大型項目中遇到了一些代碼質量問題,並決定使用MISRA來提高代碼質量。
我們使用支持MISRA C規則的Green Hills編譯器。還有獨立的跳棋可用。取決於你想要做什麼,可能會有點過分的關閉所有規則。我們每次切換一條規則,讓人們有時間修復有限數量的類似問題,否則您會完全被錯誤數量所淹沒。
由於是由編譯器,而不是你所看到的錯誤,你開發,而不是隻有當你運行檢查一個獨立的工具生成我們的警告。在我們繼續開發的過程中,我們獲得了我們的代碼合規性,而不是一言九鼎。這也可以防止破壞新代碼的舊習慣,從而導致您不得不稍後重新編寫代碼。
有的時候是很難得的舊代碼兼容的,因爲沒有人知道確切的代碼是如何工作的。我希望你有單元測試。
我明白這是一個古老的問題,但爲了其他考古學家(或搜索者)的利益,重要的是要記住,MISRA提供準則不應該總是盲目追隨。
我推薦用MISRA編寫新的代碼;因此保持合規性會更容易。
然而,這並不總是可能的 - 特別是試圖扭轉工程師代碼來滿足規範的。在這種情況下,我建議你把重點放在必要的規則上,並把顧問視爲一種獎勵......成本v利益也適用於此!
而且,記住,是有偏差的過程 - 這是更好地保持清潔和維護的代碼有偏差,不是圖謀一些規定,卻難以辨認意大利麪條。
- 1. 獲得嵌入式軟件
- 2. 嵌入式軟件的Mips計算
- 3. 嵌入式軟件的歷史
- 4. 嵌入式播放器軟件開發
- 5. 嵌入式軟件程序塊,I2C?
- 6. 軟件版本標準
- 7. 軟件比較標準
- 8. UIStackView嵌入式UIStackView對準
- 9. 如何解決這個MISRA C++標準的警告
- 10. 智能軟件程序的標準
- 11. 如何爲ARM嵌入式linux環境編譯標準的linux軟件包(./configure; make; make install)
- 12. 符合XHTML標準的Live Messenger嵌入
- 13. 嵌入式軟件中的TTF/OTF文件類型?
- 14. Windows嵌入式標準不是有效的win32 C++
- 15. FileHelpers CSV中的非標準嵌入式行情
- 16. 標準適用於嵌入式數組的文檔數錯誤
- 17. 改進軟件度量標準?
- 18. 軟件功能測試標準
- 19. 更換Golang標準軟件包並在
- 20. 使用標準微軟庫寫入XML文件
- 21. mongoid嵌入文檔標準,不承認
- 22. 更新嵌入Swift標準庫設置
- 23. Mongoid相交標準上嵌入文檔
- 24. 識別嵌入式軟件設計中的線程
- 25. 嵌入式軟件中的聲學回聲消除(AEC)
- 26. 反向工程嵌入式系統的軟件或框架
- 27. 編譯嵌入式Linux發行版的軟件(openwrt)
- 28. netdb.h嵌入式軟件系統中的gethostbyname函數?
- 29. 如何決定的嵌入式系統應用/軟件
- 30. 嵌入式軟件上的Unicode字符串
這個問題很大程度上取決於你需要哪個版本的MISRA。 2012年的最新版本仍然缺乏來自許多公司的工具支持。 – Lundin 2013-12-20 10:09:30