论文部分内容阅读
静态分析已成为软件质量保障的重要手段,且已有大量优秀的静态分析工具。但不同的工具具有不同的特点和优势,同时较高的误报和漏报仍然是现有静态分析技术和工具的一个主要问题。如何高效选择合适的工具和提高分析精度成为使用静态分析工具的主要挑战。针对这两个问题,论文开展了四个方面的研究。1、基于标准测试集Juliet的51399个测试用例,从CWE类型和代码结构复杂度类型两个评估维度,使用精确度、召回率、F-Score、区分度、交叉度、覆盖度六个评估指标,对三个著名的开源静态分析工具和某主流商业工具A进行了系统的评估。首先对四个工具在测试集上的整体性能进行了评估;接着基于91种CWE类型、48种代码结构复杂度类型对四个工具进行了详细的评估,得到了工具适合分析的缺陷类型。然后进行了工具交叉分析,评估了工具间的相似度,并对工具交叉缺陷进行了研究。最后评估了工具简单集成较单个工具检测性能的提升效果。2、基于四种静态分析工具的简单集成,使用朴素贝叶斯、逻辑回归、决策树、支持向量机这四种机器学习分类算法,把四种工具集成后的缺陷分为正报缺陷和误报缺陷,并去除误报缺陷。实现了在小幅度降低整体召回率的基础上,大幅度提高了简单集成后缺陷报告的精确度。3、针对静态分析工具评估的关键问题“测试集扩展”进行了探索和研究。首先,人工审查了两个开源工具和商业工具A在Nginx、麒麟操作系统部分代码等7个开源和闭源代码上的缺陷报告,记录了这200多个缺陷的缺陷原因、缺陷核心代码等,并对三个工具进行了评估。其次,实现了基于Bugzilla和JIRA的专用缺陷爬取程序,并提供了缺陷是否有补丁文件这一接口,可方便后人基于此实现更快速的测试集持续扩展。4、设计实现了代码静态分析工具评估框架,实现了评估工作的自动化和可视化。该框架可实现:测试集的批量检测、缺陷报告的解析与标准化、工具评估,具备较好的易用性和可扩展性。