论文部分内容阅读
随着软件系统的日益复杂,软件质量越来越受到人们的关注。由于软件设计和编码错误产生的软件缺陷使得软件产品不能满足用户需求或者在系统运行中出现意料之外的结果和行为。严重的软件缺陷会导致巨大的经济损失甚至威胁生命安全。发现和找到软件中的缺陷是很困难的,软件开发人员和质量保障人员采取一系列措施来尽早发现软件缺陷,保证软件产品质量。静态检查技术和缺陷预测技术能够帮助开发人员发现软件缺陷。静态检查技术通过使用静态检查工具,在不执行代码的情况下发现代码中存在的潜在异常,向开发者提示各种警告信息,开发者审查警告信息对代码做出必要的修正。缺陷预测技术通过充分挖掘软件仓库历史数据,发现代码特征和软件缺陷之间的关系,构建缺陷预测模型,向开发者推荐有可能包含缺陷的软件模块。静态检查技术和缺陷预测技术帮助软件实践参与者了解软件缺陷分布,合理分配有限的人力物力资源,提高软件测试和维护的效率。在已有研究中,大多数研究者一般聚焦静态检查技术和缺陷预测技术其中之一展开,鲜有交集。尽管静态检查的结果是警告信息,缺陷预测的结果是依据预测结果排序后的模块序列,但是两者拥有共同的目标一—发现软件中的缺陷。那么,静态检查技术同缺陷预测技术能否彼此增强,即静态检查产生的警告信息能否提升缺陷预测的性能?缺陷预测的结果能否改进静态检查警告的排序?为回答这些问题,本文进行一系列研究和实验,主要工作和结论如下:(1)对静态检查工具检测缺陷的能力进行实证研究,分析两款静态检查工具FindBugs和PMD检测缺陷的召回率和精度,同时将静态检查技术同缺陷预测技术相比较。结果表明,静态检查工具能够检测出相当数量的软件缺陷,但是检测缺陷的精度比较低,同缺陷预测技术相比,随着代码审查工作量增大,静态检查工具检测缺陷的能力比不上缺陷预测技术。(2)提出使用静态检查产生的警告信息提升缺陷预测性能的方法。将静态检查产生警告类别和数目作为度量元,构建基于警告信息的缺陷预测模型。实验结果表明,静态警告的度量能够提升缺陷预测的性能。其中,PMD相比于FindBugs在缺陷预测中提升更明显,综合使用两款工具会产生更好的预测结果,静态检查工具产生的警告信息能够成为现有缺陷预测的有益补充。(3)提出使用缺陷预测结果优化静态检查警告排序的方法。将缺陷预测产生的软件模块缺陷概率作为静态检查警告的排序依据,同时使用基于软件依赖图k-core分解的模块核心度值修正静态检查警告排序。实验结果表明,基于缺陷预测结果的排序策略能够优化静态检查警告的排序。总体来看,静态检查和缺陷预测尽管存在诸多的不同,但是两者都能够相互影响、相互增益、相互补充。