[Paper] 基于统计的度量阈值设定方法用于固件项目的软件故障预测:工业经验
发布: (2026年2月7日 GMT+8 00:19)
7 分钟阅读
原文: arXiv
Source: arXiv - 2602.06831v1
Overview
本文提出了一种轻量级、基于统计的方法,用于设定度量阈值,以预测嵌入式固件项目中的错误函数。通过从一组项目中提取静态分析度量,并将得到的阈值复用于新的、无关的固件,作者提供了一种可解释的替代方案,取代黑箱机器学习故障预测器——这与 ISO 26262 等安全关键标准高度契合。
关键贡献
- 一种可重复的阈值推导过程,可在独立的固件项目之间使用,无需重新训练。
- 使用假设检验进行区分性代码度量的统计识别(例如,圈复杂度、代码行数、耦合度)。
- 经验阈值,在标记易出错函数时实现高精度,已在三个真实的 C 语言固件系统中验证。
- 实用的集成蓝图,用于在现有 SQA 流程中整合静态分析工具(Coverity、Understand),为开发者提供可操作的洞察。
- 证据表明基于度量的预测能够满足功能安全合规性,同时保持透明和可审计。
方法论
- 数据收集 – 作者从三个基于 C 的工业固件项目中收集源代码,并运行 Coverity + Understand 来计算每个函数的一系列静态度量(大小、复杂度、深度等)。
- 标记有缺陷的函数 – 将历史缺陷日志映射到相应的函数,生成二元的“有缺陷 / 干净”标签。
- 统计过滤 – 对每个度量执行非参数假设检验(Mann‑Whitney U),检查有缺陷函数与干净函数之间的分布是否显著不同。仅保留统计上显著差异的度量。
- 阈值提取 – 使用所选度量的经验累计分布,确定能够最大化分离的截断点(例如,有缺陷函数的第 75 百分位与干净函数的第 25 百分位)。
- 跨项目验证 – 将从项目 A 中得出的阈值应用于项目 B 和 C,并使用精确率、召回率和 F1‑score 对预测结果进行评估。
- 可解释性检查 – 最终阈值由领域工程师审查,以确保其在固件开发实践中的合理性。
结果与发现
| 指标(示例) | 派生阈值 | 精度(跨项目) |
|---|---|---|
| Cyclomatic Complexity | > 12 | 0.84 |
| Lines of Code per function | > 45 | 0.79 |
| Number of Pointers | > 3 | 0.81 |
- 高精度(≈ 80 %–85 %)在标记易出错函数方面,意味着大多数警报对应真实缺陷。
- 召回率适中(≈ 45 %–55 %),反映出有意倾向于精度,以避免用大量误报淹没开发者。
- 跨项目复用成功:从一个固件基线派生的阈值在另外两个基线上仍具预测能力,验证了该方法的通用性。
- 可解释性:工程师可以直接读取阈值(“如果函数的循环复杂度超过12,则检查它”),并据此行动,无需理解隐藏模型。
实际影响
- 即时 QA 集成 – 团队可以将阈值检查嵌入 CI 流水线(例如,作为静态分析门),在代码审查前捕获高风险函数。
- 安全关键合规 – 由于该方法透明,审计员可以追踪函数被标记的原因,满足 ISO 26262 证据要求。
- 成本有效的缺陷降低 – 通过将测试和代码审查工作集中在少量高风险函数上,组织可以缩短检查时间并降低现场故障。
- 可扩展性 – 无需持续模型再训练;阈值可以定期(例如,每季度)刷新,以适应新缺陷数据的出现。
- 工具无关 – 适用于任何能够导出标准指标的静态分析套件,使其能够适配现有工具链(SonarQube、clang‑tidy 等)。
限制与未来工作
- 召回权衡 – 对精确度的强调导致许多有缺陷的函数未被检测;未来的工作可以探索将阈值与轻量级机器学习分类器相结合的混合方法,以提升召回率。
- 度量集依赖性 – 结果依赖于 Coverity/Understand 提取的特定度量;其他工具可能产生不同的数值,需要重新验证。
- 领域特异性 – 虽然该方法已在三个固件项目中迁移,但其对截然不同代码库(例如高级应用程序)的适用性仍需测试。
- 动态行为被忽略 – 仅考虑了静态代码属性;加入运行时分析可能进一步细化阈值。
结论: 本研究提供了一条务实且统计上可靠的路径,使开发者能够将故障预测直接嵌入固件质量保证工作流——在不引入不透明 AI 模型开销的情况下,提供安全关键软件所需的可解释性和合规性。
作者
- Marco De Luca
- Domenico Amalfitano
- Anna Rita Fasolino
- Porfirio Tramontana
论文信息
- arXiv ID: 2602.06831v1
- 分类: cs.SE
- 出版日期: 2026年2月6日
- PDF: 下载 PDF