簡體   English   中英

何時停止遵循靜態代碼分析的建議?

[英]When to stop following the advice of static code analysis?

我現在使用靜態代碼分析對一個包含超過100.000行Java代碼的項目進行了一段時間。 我從Findbugs開始,它在開始時給了我大約1500個問題。 隨着時間的推移我修復了最嚴重的問題並開始使用其他工具,如PMD,Lint4J,JNorm和現在的Enerjy。

隨着更嚴重的問題得到解決,存在大量低嚴重性問題。 你如何處理這些低優先級的問題?

  • 你試着修理所有這些嗎?
  • 或者只在新編寫的代碼中?
  • 你經常禁用某些規則嗎? (我發現我幾乎可以使用任何可用的工具)。

如果你忽略或禁用規則,你會記錄這些規則嗎? 你的經理們對“留下幾千個低優先級問題沒有修復”有什么看法? 您是否在代碼中使用(多個)工具特定注釋,或者有更好的方法嗎?

請記住,靜態分析意味着產生大量誤報; 這是您為通常避免誤報所支付的價格。 也就是說,他們認為你更願意被錯誤地告知某些事情看起來很可疑(誤報),而不是被告知事實上一個問題是完全正確的(假陰性)。

因此,一般來說,您應該配置這些工具,而不是接受現成的默認設置,這會產生很多噪音。

你試着修理所有這些嗎?

在我有技術控制的項目中,我的標准運作方式是鼓勵人們審查CI系統中所有新的靜態分析缺陷的文化。 如果我們拒絕在特定類型的一段時間內修復足夠的缺陷,我們會禁用該規則,因為它只會變成噪音。 我們經常會看到殘疾人規則,以確保他們仍然具有相關性。

但是,一旦我們關閉了效率較低的規則,是的,我們就會修復所有缺陷。 如果您認為某些問題存在,如果優先級不超過您必須執行的其他操作,則應該修復它。 忽略它會損害您團隊的文化並發送錯誤信息。

如果你忽略或禁用規則,你會記錄這些規則嗎?

規則文件是我們項目的一部分,因此提交消息足以記錄在此提交中禁用此類規則的事實。

你的經理們對“留下幾千個低優先級問題沒有修復”有什么看法?

沒有。 我們確保他們了解我們正在做什么以及為什么,但他們通常(理所當然地)專注於更高級別的指標,如速度和整體項目健康。

你的經理們對“留下幾千個低優先級問題沒有修復”有什么看法?

我希望管理者優先考慮:決定(或被告知)任何任務是高優先級還是低優先級,並對人們花在高優先級而不是低優先級任務上的時間感到滿意。

確定您希望在公司遵循哪些規則並禁用其余規則。 您可以使用這些工具設置的許多規則都是主觀風格問題,可以安全地忽略。 你應該記錄你在一個公司的風格指南以下哪些規則一次 (這樣你就不會與該信息搞亂你的代碼)。

我不會僅根據靜態分析工具的建議對舊代碼進行更改。 該代碼已經過測試,可能正在運行。 如果我需要進入代碼並因任何其他原因進行更改, 那么我將運行分析並進行其建議的任何更改。

我心中的關鍵是至少要審查所有問題,即使你最終決定不修復它們。 原因是,像苦難一樣的錯誤,喜歡公司。 我不能多次列舉我發現了各種令人討厭的臭蟲,這些臭蟲都沒有報告; 但是通過查看它確實報告的看似不重要的人來找到它們。

如果您要查看錯誤跟蹤數據庫的類比,那么報告的大量錯誤是您可能永遠無法獲得的低優先級錯誤。 當然,它們是真正的錯誤,你想修復它們,但大多數程序員在非常實際的約束下工作,沒有時間解決所有問題。 我最近寫了一篇關於靜態分析缺陷特殊性的文章。

解決靜態分析錯誤的一個重要區別是,它們通常比定期報告的錯誤更容易處理。 因此,快速掃描缺陷以識別不僅要修復的高優先級項目,而且還要識別最容易修復的項目可能是有用的。 畢竟在開發過程中很早就發現了靜態分析缺陷,並且非常清楚地說明了相關代碼的特定部分。 因此,你可能會在較低優先級的水果上捕獲相當多的低水果。

我見過這種成功的各種策略包括:*首先,確保分析得到正確調整。 靜態分析帶有出廠設置“開箱即用”,無法理解所有代碼。 如果你不能自己調整得到一些幫助(免責聲明,我們提供一些類型的幫助)。 你會降低誤報率並找到更好的錯誤。 *確定大多數優先考慮缺陷的特征(它們可以是特定類別,代碼的特定區域,靜態分析工具提供的內置優先級評分等)。 *確定什么級別的閾值是重要的並且可能使其成為驗收標准(例如,所有高級和關鍵需要解決)*確保解決阻止驗收標准的每個缺陷(解決意味着它至少必須被查看)因為有些可能是誤報)*確保通過同行代碼審查流程或通過尾端審核流程檢查標記為誤報的那些,這樣您就不會有任何錯誤標記問題。

底線:選擇要關注的內容,審查必要的內容,除非您的業務需求促成,否則不要修復所有內容

我個人覺得代碼分析雖然有用但卻被高估了。

我不能說Java,但使用C#還有代碼分析這樣的東西。 我同意它為你提供了很多聰明的想法,如何做得更好,但有時建議只是煩人。 一些建議不是基於常識,而只是風格問題。 經過一段時間玩代碼分析后,我停止使用它。 原因是我碰巧不同意許多警告,並且不想遵循這些建議。

一般來說,我建議做代碼分析所說的。 但到了某一點。 無論誰編寫規則定義的個人風格似乎都很容易被忽略。 您可以為規則1添加例外,然后添加2,然后添加三個...直到它變舊。 然后,您只需停用該功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM