什麼是誤報?如何識別誤報和漏報

創提科技
2022/05/17

分享到

不管開發人員技能多麼精通,誤報和漏報總是會發生,很可能是他們的程式碼有某種無意的錯誤或漏洞。為了確保儘早發現這些編碼錯誤和漏洞,開發人員通常使用程式碼靜態分析 工具,工具會根據開發人員設置的規則檢查程式碼。
 
然而,程式碼靜態分析工具並不完美,工具有時也會出現誤報和漏報。這些編碼錯誤如果沒有被捕獲,可能會對程式碼產生顯著的影響。
 
因此,我們將闡釋什麼是誤報,概述誤報和漏報的區別,並提供一個誤報示例和和一個漏報示例。


本文將包含如下幾個部分:
 
     • 什麼是誤報?
 
     • 什麼是漏報?
 
     • 是什麼導致了誤報和漏報?
 
     • 如何診斷誤報和漏報?
 
     • 什麼是誤報示例和什麼是漏報示例?
 
     • 如何減少誤報和漏報?


什麼是誤報?
 
誤報是指實際上並不存在於程式碼中的問題。它不需要修復。程式碼沒有違反規則,但卻被報了一個診斷問題,發生這種情況就是誤報。
 
與之相反的真的問題就是需要被修復的。它違反了規則,實際上是一個真實的問題。
 
但是從誤報中篩選出真的問題是很棘手的。而漏報可能更加棘手。


什麼是漏報?
 
漏報是指沒有被發現的問題。違反規則,但卻沒有被報出來,發生這種情況就是漏報。
 
除此之外都表示程式碼不違反規則。
 
所以,找出漏報真得很棘手。您如何知道自己是否漏掉了一個缺陷呢?


是什麼導致了誤報和漏報?
 
誤報和漏報的主要原因有兩個。


工具出錯
 
工具並不完美,也會出錯,因此誤報和漏報是不可避免的。
 
這就是為什麼讓一個人評審您的程式碼以及覆核工具檢測到的任何違規是至關重要的。
 
例如,您可能設置一個規則,即不存在除零(DBZ)問題。然後,該工具可能會標記一段存在DBZ問題的程式碼。所以,您仔細看看這段程式碼,可能會發現其實並沒有什麼問題。這只是一個誤報。


不可判定的規則
 
您可能有一些無法判定的編碼規則。這意味著它不能以100%的準確性執行。


不可判定性是如何發生的?
 
當您缺乏可見性時,就會發生不可判定性。
 
如果您能夠充分瞭解程式中的所有內容,那麼您就可以判定是否違反了某個規則。您能夠從一個靜態分析工具中查看診斷結果,並知道“這是一個誤報!”
 
但是,您無法瞭解程式中包含的所有內容。您無法訪問其他程式師為程式的其他部分(例如,固件)所編寫的程式碼。其他部分也會有輸入。因此,如果不能清晰瞭解所有內容,您就無法判斷是否存在真正的問題。


如何判斷誤報和漏報?
 
有一些誤報和漏報是顯而易見的,清晰可辨。
 
但是總有一個灰色地帶。


識別誤報和漏報
 
對診斷的判定是主觀的,取決於您所從事的行業,以及您使用的編碼規則。


誤報各不相同
 
一家公司的誤報可能不會是另一家公司的誤報。
 
這裡有一個誤報的示例。您可能正在開發一款安裝在汽車裡的軟體。如果軟體出現問題,生命可能會受到威脅。因此,如果您設置一個規則,即不存在DBZ問題,而卻得到了存在DBZ問題的診斷,那麼您將需要仔細評估每個違規行為。
 
然而,您可能正在開發用於娛樂系統的軟體。因此,您會只想要快速排除誤報,只會去管那些真的問題。


漏報也各不相同
 
同樣地,一家公司的漏報可能不會是另一家公司的漏報。
 
這裡有一個漏報的示例。如果您需要對您的程式進行真正的防禦,您可能會用到CERT或MISRA編碼規則。如果一個規則沒有捕獲到某些事情發生的可能性,那麼它就是一個漏報。
 
但是,對於另一家公司來說,只有當一個規則沒有捕獲到一些絕對會發生的事情,它才是一個漏報。
 
隨著您的可見性增強,您所認為的誤報或漏報會得到改進。


如何證明誤報和漏報?
 
您需要做多少工作來證明誤報和漏報是不同的。如果您在一個高風險的安全關鍵型行業,您需要證明它是誤報還是漏報。如果您所在的行業風險較低,您可能會查看診斷結果,排除它是誤報或漏報,然後繼續檢查。


什麼是誤報示例和什麼是漏報示例?
 
不同的開發人員對診斷結果有不同的闡釋。這與他們所從事的行業以及經驗有關。
 
下面介紹三種類型的開發人員如何闡釋診斷結果。


什么是误报--如何识别误报和漏报-1.png


如何減少誤報和漏報?
 
不幸的是,誤報和漏報是不可避免的。
 
誤報需要額外的檢查時間,而且可能會導致真正的問題被草率地排除在外。
 
漏報是任務關鍵型軟體發展人員的主要顧慮。對這些開發人員來說,誤報勝過漏報。


並非所有的程式碼檢查工具都是一樣的…
 
並非所有的程式碼檢查工具(如MISRA檢查工具)都是一樣的。有些檢查工具的準確性更高。而有些會產生更多的誤報和漏報。


選擇針對誤報和漏報最好的程式碼檢查工具
 
選擇正確的程式碼分析工具可以為您提供更好的診斷結果,並幫助您更好地識別誤報和漏報。
 
當您獲得正確的診斷結果時,您可以減少誤報和漏報。因此,您將擁有安全可靠的程式碼、一致的風格以及更容易維護的程式碼庫。
 
欲瞭解Perforce靜態分析工具Helix QACKlocwork如何幫助提高程式碼品質,立刻註冊申請免費試用吧。