[英]How to make the Clang Static Analyzer output its working from command line?
[英]how to deal with a static analyzer output
我們已開始在代碼庫中使用靜態分析器(Coverity)。 我們收到了大量的警告(數十萬),我們很快就被驚呆了,整個團隊需要幾個月才能清除所有這些警告(一點也不可能)。
我們到目前為止討論的選項是
1)雇用承包商來整理警告並修復它們 - 他的缺點是:我們可能需要非常經驗的人來做所有這些修改,並且沒有承包商需要了解代碼。
2)過濾掉警告並僅處理危險警告 - 這里的問題是我們的靜態分析輸出總是被警告混亂,使我們難以隔離問題。 過濾警告也是一項重大努力。
無論哪種方式,將我們的代碼帶到一個狀態,當靜態分析器對我們來說是一個有用的工具似乎是一個巨大的任務。
那么如何才能使用靜態分析儀,而無需將當前的開發工作納入完整的支架?
每周一天:開啟分析; 挑選100個最煩人的警告; 解決它們; 關閉分析。 簡而言之:不要驚慌; 你的代碼按原樣運行(不是嗎?); 以一口大小的方式處理警告。
如果您發現相同類型的警告再次出現(錯誤的編碼實踐),請教育您的團隊將來避免使用它們。
我用一個舊的代碼庫做了這個:我早上進入(在團隊的其他成員之前),在編譯器上調高警告/分析級別,修復一些警告,然后將其設置回默認值。
首先要做的是調整分析設置; Coverity支持可能會給你一個相當通用的配置。
讓我以幾個免責聲明結束:
我這樣做是為了生活,也許你想聘請我們( http://codeintegritysolutions.com/ ); 我今天在斯坦福大學就這個問題發表演講。 聘請顧問進行調整很有意義; 在公司外面有人做分類是比較棘手的。 有一個局外人做修復工作仍然比較棘手; 從錯誤中吸取教訓比修復錯誤更重要。
對於您的承包商選項,您可能會采用更溫和的方式,讓他們只修復明確的問題,本地問題並且不需要完全理解您的代碼。 我猜想大量的Coverity命中是可能的NULL指針解引用或可能的寫入超過緩沖區的末尾,可以通過簡單的檢查來解決,這些檢查完全是有問題的代碼本地的,並且不需要理解大圖。
我承認 - 在使用preFAST / preFIX或者微軟調用的工具之前,我已經完成了這樣的工作,其中很多都是機械式的變化。 非常適合承包商或甚至實習生。 但是會有一些需要更多分析的東西 - 只要確保承包商明白他們不應該試圖深入研究。
對他們很好 - 這是苦差事,所以做任何你可以愉快的事情。
人們告訴我們第一次使用時會忽略所有警告。 然后在下一個差異構建中,它會逐漸增加新的警告:你應該修復它。 然后,在您使用該工具幾個月后,您會對它感到滿意,然后返回並開始修復舊的警告。
嘗試其他靜態分析儀。 我以前使用Parasoft C ++ Test,它有一種方便的方法來根據嚴重程度過濾警告。
這是否意味着您根據需要定制它有問題?
如
“”可定制分析
Coverity Static Analysis提供了通過修改部署的檢查器數量或特定於單個檢查器的設置(例如空指針解除引用的閾值)來微調分析的功能。 為特定代碼塊或應用程序配置Coverity的功能允許開發人員選擇最適合其應用程序的性能級別,從而獲得更准確可靠的結果。 Coverity軟件開發工具包允許您通過創建自定義檢查器來檢測C和C ++代碼中的唯一缺陷類型。 除了創建用於查找並發性,異常處理和其他關鍵問題的自定義檢查器之外,還可以使用此功能。“
http://www.coverity.com/products/static-analysis.html
Coverity的典型開箱即用分析配置往往會為每千行代碼提供一到三個缺陷。 如果您有數十萬個缺陷,並且您的代碼行數遠遠少於1億行,我可以保證您的分析配置不正確或對您的組織不是最理想的。
除了調整分析配置本身,您還可以通過影響確定優先級 - 默認的“高”,“中”和“低”映射應該足以讓您開始,直到您了解哪些子類別最容易受到影響你的申請。
第三,如果您的代碼庫很大(並且不是),則將其細分為組件,以便每個團隊或開發人員組只能查看他們直接維護的代碼 - 這樣可以處理更易於管理的工作塊,以及它還允許您對組件進行優先級排序(服務器代碼中的缺陷比客戶端代碼中的缺陷,測試代碼或第三方代碼等更為重要)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.