《中国人工智能学会通讯》——8.43 基于缺陷标注挖掘软件缺陷-阿里云开发者社区

开发者社区> 人工智能> 正文

《中国人工智能学会通讯》——8.43 基于缺陷标注挖掘软件缺陷

简介: 本节书摘来自CCAI《中国人工智能学会通讯》一书中的第8章,第8.43节, 更多章节内容可以访问云栖社区“CCAI”公众号查看。

8.43 基于缺陷标注挖掘软件缺陷

除通过描述程序的正常模式以发现软件缺陷外,另一类有效的软件缺陷挖掘技术则是通过直接对带有人工缺陷标注的程序模块进行学习建模,建立从程序模块的特征表示到软件缺陷的映射关系,以预测给定程序模块的是否可能包含缺陷。

基于缺陷标注挖掘软件缺陷的一般流程如图 1所示。首先人工对软件源代码进行详细软件测试,获得每个模块的缺陷情况标注。然后,利用软件度量 (software metric) [8] 技术提取多种与软件模块的缺陷相关的代码级统计指标 ( 如代码长度、代码分支数、代码的圈复杂度等 ) 作为描述软件模块的特征,从而将程序代码转化为一组特征向量。基于特征向量表示的模块及其缺陷情况标注,通过监督学习得到预测模型,对新的模块的缺陷情况进行预测。

image

特征与学习算法
基于缺陷标注挖掘软件缺陷的建模过程有两个关键步骤,第一,如何提取适合于预测模块缺陷情况的特征;第二,如何选取合适的学习方法。 在特征提取方面,Menzies et al [9] 提出利用代码的静态特征 ( 包括 LOC ( 代码长度 )、McCabe 复杂度、Halstead 复杂度等 ) 来描述软件模块用于缺陷挖掘。在此基础上,Zimmermann et al [10] 提出了图结构特征。Kim et al [11] 提出了软件时空局部性特征,并基于此预测软件模块的缺陷情况。除设计和使用新的软件度量作为特征以外,还可以基于现有特征构建更有利于进行软件缺陷挖掘的特征[12-13] ,或是从源代码出发直接学习新型特征表示[14] 。

在学习算法的选取方面,研究者们早期对不同的学习算法在软件缺陷挖掘任务上的表现进行了研究,使用的学习算法包括朴素贝叶斯分类器[15] 、逻辑回归[16] 、神经网络 [17]等。Lessmann et al [18] 在11 个基准缺陷预测的数据集 NASA 上,通过大量实验对比了 19 个预测模型方法 (SVM、逻辑回归、决策树、朴素贝叶斯等 ),揭示出没有任何算法在所有数据上都一致优于其他算法,从而也为类似研究画上了句号。

应对昂贵的人工标注
由于软件模块的缺陷标注需要程序员对代码进行详细测试或人工代码检查,会消耗大量软件质量保障资源。对于一个刚完成的开发软件项目通常仅能获得极少量的缺陷标注。利用如此少量的数据进行学习建模,难以获得良好的性能。

为 缓 解昂贵人工缺陷标注导致训练样本不足这一问题,一种思路是利用有较多缺陷标注积累的早期版本或者软件项目来扩充训练数据。然而,由于发现不同项目的代码特征分布相差大,直接进行跨软件项目的缺陷挖掘性能很差[19] 。

针对这一问题,Turhan et al [20] 利用最近邻方法从其他公司的缺陷数据中筛选出与本项目数据分布相似的模块,并利用这些模块来帮助预测当前项目的缺陷,获得了性能的改善;Nam et al [21] 基于迁移学习技术将其他项目的缺陷信息映射到当前软件项目并加以利用,提升了跨项目缺陷预测的性能。

除利用其他项目的历史数据资源外,另一种思路是充分利用待预测的软件模块中蕴涵的分布信息来辅助提升学习性能。Seliya et al [22-23] 最早将半监督学习技术引入软件缺陷挖掘 , 他们使用基于约束的 k- 均值算法来对当前的软件模块数据进行半监督聚类,并据此标注软件模块的缺陷情况;Lu et al [24]使用了一种基于自我训练的半监督分类方法对软件缺陷进行预测,在此基础上,通过对软件模块数据进行降维,从而获得更好的性能[25] 。由于在实际应用中,包含软件缺陷的模块数量往往远少于正常模块数量。Jiang et al [26] 讨论了缺陷模块分布不平衡对学习性能造成的影响,并提出了一种的能够应对数据分布不平衡的半监督学习方法 ROCUS,较直接进行监督学习性能提升超过了 70%。Li et al [27]提出代价敏感半监督软件缺陷预测方法,能够在高风险应用场景中更加有效地识别高风险缺陷。为进一步降低人工标注开销,Li et al [28] 在半监督学习中进一步引入主动学习机制,通过主动挑选出最困难的模块获得人工缺陷标注并加以学习,在有限测试资源投放的情况下获得了尽可能大的性能提升。

面向更多实际问题
在基于缺陷标注的软件缺陷挖掘中,除需要有效应对昂贵人工标注为学习建模带来的困难,还需要考虑其他的各种实际问题,以提升软件缺陷挖掘在实际软件开发中的可用性。Jiang et al [29] 指出不同开发人员的编码习惯和风格会导致缺陷模式各异,因此需要针对不同开发人员构建预测模型,从而获得更优的缺陷预测性能。Tantithamthavorn etal [30] 研究了软件数据所包含噪声对缺陷预测结果的影响。Peters et al [31] 研究了跨项目挖掘中的隐私保护问题,提出了 LACE2 模型减少数据分享带来的隐私泄露隐患。Tan et al [32] 提出了软件缺陷挖掘的评估和建模应该考虑时序关系。

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章