知识卡片
静态分析的误报漏报权衡源于不可判定性
内容
用算法百分之百准确判断”这段程序会不会出错”,在数学上已被证明不可能(不可判定问题)——这意味着任何静态分析工具都必须在”报告更多问题但夹杂误报”和”只报告确定问题但可能漏报”间做取舍,不存在完美方案。这个理论限制决定了工具设计方向:代码审查里的工具应优先压低误报率(如Tricorder误报率不高于10%),航空电子、医疗设备这类需正式认证的关键系统,则可承受更高误报率换取更全面覆盖。
参考来源
- 位置:《Google系统架构解密:构建安全可靠的系统》第13章《代码测试》13.5节静态分析(源文件:`../OREILY动物书合辑 图灵新版/_epub-src/text/part0014_split_109.html`)
- 结论依据:原文明确说明"在误报和漏报间,不同工具也有各自的分析权衡。这些权衡不可避免,部分原因是受静态分析的底层机制影响:通过静态方式验证程序是一个不可判定的问题",并指出代码审查工具只检查新代码、发精确告警,而航电软件等领域需要更正式严格的分析。
- 原始内容:在误报和漏报间,不同工具也有各自的分析权衡。这些权衡不可避免,部分原因是受静态分析的底层机制影响:通过静态方式验证程序是一个不可判定的问题……例如,集成在代码审查系统中的静态分析工具很可能只检查新开发的源代码,并对非常容易出现的问题发出精确告警。