什么是误报?如何识别误报和漏报

创提信息
2022/05/17

分享到

不管开发人员技能多么精通,误报和漏报总是会发生,很可能是他们的代码有某种无意的错误或漏洞。为了确保尽早发现这些编码错误和漏洞,开发人员通常使用代码静态分析 工具,工具会根据开发人员设置的规则检查代码。
 
然而,代码静态分析工具并不完美,工具有时也会出现误报和漏报。这些编码错误如果没有被捕获,可能会对代码产生显著的影响。
 
因此,我们将阐释什么是误报,概述误报和漏报的区别,并提供一个误报示例和和一个漏报示例。


本文将包含如下几个部分:
 
     • 什么是误报?
 
     • 什么是漏报?
 
     • 是什么导致了误报和漏报?
 
     • 如何诊断误报和漏报?
 
     • 什么是误报示例和什么是漏报示例?
 
     • 如何减少误报和漏报?


什么是误报?
 
误报是指实际上并不存在于代码中的问题。它不需要修复。代码没有违反规则,但却被报了一个诊断问题,发生这种情况就是误报。
 
与之相反的真的问题就是需要被修复的。它违反了规则,实际上是一个真实的问题。
 
但是从误报中筛选出真的问题是很棘手的。而漏报可能更加棘手。


什么是漏报?
 
漏报是指没有被发现的问题。违反规则,但却没有被报出来,发生这种情况就是漏报。
 
除此之外都表示代码不违反规则。
 
所以,找出漏报真得很棘手。您如何知道自己是否漏掉了一个缺陷呢?


是什么导致了误报和漏报?
 
误报和漏报的主要原因有两个。


工具出错
 
工具并不完美,也会出错,因此误报和漏报是不可避免的。
 
这就是为什么让一个人评审您的代码以及复核工具检测到的任何违规是至关重要的。
 
例如,您可能设置一个规则,即不存在除零(DBZ)问题。然后,该工具可能会标记一段存在DBZ问题的代码。所以,您仔细看看这段代码,可能会发现其实并没有什么问题。这只是一个误报。


不可判定的规则
 
您可能有一些无法判定的编码规则。这意味着它不能以100%的准确性执行。


不可判定性是如何发生的?
 
当您缺乏可见性时,就会发生不可判定性。
 
如果您能够充分了解程序中的所有内容,那么您就可以判定是否违反了某个规则。您能够从一个静态分析工具中查看诊断结果,并知道“这是一个误报!”
 
但是,您无法了解程序中包含的所有内容。您无法访问其他程序员为程序的其他部分(例如,固件)所编写的代码。其他部分也会有输入。因此,如果不能清晰了解所有内容,您就无法判断是否存在真正的问题。


如何判断误报和漏报?
 
有一些误报和漏报是显而易见的,清晰可辨。
 
但是总有一个灰色地带。


识别误报和漏报
 
对诊断的判定是主观的,取决于您所从事的行业,以及您使用的编码规则。


误报各不相同
 
一家公司的误报可能不会是另一家公司的误报。
 
这里有一个误报的示例。您可能正在开发一款安装在汽车里的软件。如果软件出现问题,生命可能会受到威胁。因此,如果您设置一个规则,即不存在DBZ问题,而却得到了存在DBZ问题的诊断,那么您将需要仔细评估每个违规行为。
 
然而,您可能正在开发用于娱乐系统的软件。因此,您会只想要快速排除误报,只会去管那些真的问题。


漏报也各不相同
 
同样地,一家公司的漏报可能不会是另一家公司的漏报。
 
这里有一个漏报的示例。如果您需要对您的程序进行真正的防御,您可能会用到CERT或MISRA编码规则。如果一个规则没有捕获到某些事情发生的可能性,那么它就是一个漏报。
 
但是,对于另一家公司来说,只有当一个规则没有捕获到一些绝对会发生的事情,它才是一个漏报。
 
随着您的可见性增强,您所认为的误报或漏报会得到改进。


如何证明误报和漏报?
 
您需要做多少工作来证明误报和漏报是不同的。如果您在一个高风险的安全关键型行业,您需要证明它是误报还是漏报。如果您所在的行业风险较低,您可能会查看诊断结果,排除它是误报或漏报,然后继续检查。


什么是误报示例和什么是漏报示例?
 
不同的开发人员对诊断结果有不同的阐释。这与他们所从事的行业以及经验有关。
 
下面介绍三种类型的开发人员如何阐释诊断结果。


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


如何减少误报和漏报?
 
不幸的是,误报和漏报是不可避免的。
 
误报需要额外的检查时间,而且可能会导致真正的问题被草率地排除在外。
 
漏报是任务关键型软件开发人员的主要顾虑。对这些开发人员来说,误报胜过漏报。


并非所有的代码检查工具都是一样的…
 
并非所有的代码检查工具(如MISRA检查工具)都是一样的。有些检查工具的准确性更高。而有些会产生更多的误报和漏报。


选择针对误报和漏报最好的代码检查工具
 
选择正确的代码分析工具可以为您提供更好的诊断结果,并帮助您更好地识别误报和漏报。
 
当您获得正确的诊断结果时,您可以减少误报和漏报。因此,您将拥有安全可靠的代码、一致的风格以及更容易维护的代码库。
 
欲了解Perforce静态分析工具Helix QACKlocwork如何帮助提高代码质量,立刻注册申请免费试用吧。