如何選擇代碼測試工具

                                                                     一、如何建立屬於自己的代碼測試框架                   


       如何在代碼走查中選擇合適的自動化工具,一直困擾着嵌入式軟件工程師。在嵌入式軟件中涉及大量的對齊、大小端以及臨界資源保護等等,再加上實時性要求等,目前市面上可選的代碼測試工具少之又少。目前適合嵌入式C代碼靜態測試的工具在國內能使用到的收費的有TESTBED、QAC、PCLINT,這些都支持MISRA98和MISRA04,但MISRA的規則是靈動的,不同的項目和平臺的側重也不一樣,並不完全適用,這個時候就涉及到規則定製了。收費的工具在規則定製上肯定會遇到瓶頸(雖然都開放第三方的可定製的規則和協議),因爲工具兼顧通用性,工具的生產商是不會單獨爲某個項目特徵去更改分析器,就算同意修改,也需要擔負高昂的設計成本。


        這樣我們需要一個開源的分析工具,可以針對公司的代碼規範和項目特點進行規則定製(首先規範要對比MISRA標準,是可行的,驗證有效的,且規範的條款之間是互補而不是互斥的),這樣在代碼編寫階段(編碼規範檢查)和代碼走查階段(一旦項目代碼達到一定量級,比如使用了OS\GUI\網絡協議棧等等,且公司追逐硬件成本,需要經常移植更換平臺,對代碼編寫人員的要求很高),可以利用定製的工具,幫助開發人員快速定位BUG,並且協助項目管理人員在代碼模塊提交時進行規範驗證和管理。


        目前開源的C分析工具使用比較多的有Cppcheck、Splint、Valgrind,其中Cppcheck、Splint屬於靜態測試工具(只做語義分析,不運行),Valgrind是動態測試工具(編譯且運行代碼),cppcheck和Valgrind的側重點是內存和資源泄漏,而splint較兩種工具來說比較全面,這樣對後期的規則定製可以少走點彎路,有一定的平臺和基礎可以搭建屬於自己的測試架構。如果公司願意投入,可以結合splint和valgrind打造一個靜態和動態兼顧的測試架構,能覆蓋到管理流程的所有階段,因爲valgrind支持覆蓋率分析統計,這個是評價單元測試的有效手段。這個看似說起來容易,動起來難,因爲splint是維吉尼亞大學和麻省理工聯合制作的,而valgrind也是獲得了第二屆Google-O'Reilly開源代碼獎的優秀產品,他們的定製都需要有豐富的C語言基礎(都是C做的且都是百萬級的代碼量),且對主流的linux下的開源詞法分析器有一定的瞭解,好了,大家止步了。


        在這裏,筆者告訴大家,一切看起來難的東西都是紙老虎(老毛的名言)。爲什麼這麼說,要知道,這些工具使用的詞法分析器也是別人做的,他們也是借用了大量的素材,搭建了這個開源的測試框架,但不可否認他們對代碼測試做出的貢獻。但我們不應該害怕。後面作者會操刀分解splint和定製優化內存溢出分析實例來幫助讀者瞭解這個工具。當然,文章內容爲了通俗易懂且僅代表個人觀點,難免會觸怒工具的作者,在這裏深表歉意。開源之路慢慢,需要大家的無私奉獻。歡迎大家拍磚,今天寫到這裏。收工。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章