没有合适的资源?快使用搜索试试~ 我知道了~
基于演化数据的软件缺陷预测性能改进_王丹丹2
试读
16页
需积分: 0 0 下载量 158 浏览量
更新于2022-08-03
收藏 559KB PDF 举报
【基于演化数据的软件缺陷预测性能改进】
软件缺陷预测是软件工程领域的重要研究课题,旨在通过分析软件的各种属性,预测出潜在的缺陷,以便在早期阶段进行修复,降低开发成本和风险。传统的缺陷预测方法主要依赖于软件工作制品,如文档、源代码和测试用例等静态属性。然而,随着软件的持续演化,这些方法可能无法全面捕捉到缺陷产生的动态变化。
文章“基于演化数据的软件缺陷预测性能改进”提出了一个新的视角,将软件视为一个动态进化的“物种”,认为软件的演化过程会影响缺陷的产生和表现。这种观点强调了软件历史演变轨迹对缺陷预测的重要性。研究者们设计并引入了两类能够描述软件演化轨迹的度量元,这些度量元能够反映出软件在生命周期内不断适应需求变化的过程。
一类度量元关注软件结构的演化,例如代码的复杂性增加、模块间的耦合度变化等,这些指标可能与缺陷的产生密切相关。另一类度量元则关注软件行为的演化,如功能的添加、修改和删除,以及错误修复的历史模式。通过对这些演化度量元的分析,可以更深入地理解缺陷的成因,从而提高预测的准确性。
为了验证这种方法的有效性,研究者选取了6个著名的开源软件数据集进行实证研究,构建了基于演化度量元的缺陷预测模型,并进行了训练和验证。实验结果表明,这些模型在预测软件缺陷方面的性能表现良好,证实了演化数据对于提升缺陷预测性能的显著作用。
此外,该研究对于软件工程实践也有重要的启示。它强调了在软件开发过程中不仅要关注静态的属性,还要重视软件的演化过程,尤其是历史演化对软件质量的影响。这为软件质量保证提供了新的思路,即通过跟踪和分析软件的演化信息,可以更有效地预防和管理缺陷,进一步优化软件开发和维护流程。
这篇研究论文揭示了软件演化数据在缺陷预测中的重要价值,为缺陷预测模型的构建提供了新的途径,同时也对未来的软件工程研究和实践提供了宝贵的参考。通过引入和利用软件演化度量元,软件开发者和质量保证团队可以更好地理解和预测软件缺陷,从而实现更高效、更精准的软件质量管理。
软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn
Journal of Software,2016,27(12):30143029 [doi: 10.13328/j.cnki.jos.004869] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
基于演化数据的软件缺陷预测性能改进
王丹丹
1
,
王
青
1,2
1
(中国科学院 软件研究所 互联网软件技术实验室,北京 100190)
2
(计算机科学国家重点实验室(中国科学院 软件研究所),北京 100190)
通讯作者: 王丹丹, E-mail: wangdandan@itechs.iscas.ac.cn
摘 要: 软件持续演化已经是不争的事实,演化意味着需求的变化,也就必然导致了缺陷的不断产生.现有的缺陷
预测技术多偏重于基于软件工作制品,如文档、代码、测试用例等的属性来预测缺陷,但如果把软件看作一种物种,
其生命周期内的演化本质上是一个物种的逐步进化,其缺陷的表现也必然带着该物种的特征,而且还受到进化历史
中的演化轨迹的影响.已有一些研究人员开始研究软件演化过程,并提出了一些演化度量元.研究和提出了可以刻画
软件演化轨迹的两类演化度量元,并通过案例研究,建立缺陷预测模型.在 6 个著名开源软件数据集上训练和验证了
由软件演化度量元建立的缺陷预测模型,获得了良好的预测性能,验证了演化度量元对缺陷预测性能的改进.
关键词: 缺陷预测;软件演化;演化度量元
中图法分类号: TP311
中文引用格式: 王丹丹,王青.基于演化数据的软件缺陷预测性能改进.软件学报,2016,27(12):30143029. http://www.jos.org.
cn/1000-9825/4869.htm
英文引用格式: Wang DD, Wang Q. Improving the performance of defect prediction based on evolution data. Ruan Jian Xue
Bao/Journal of Software, 2016,27(12):30143029 (in Chinese). http://www.jos.org.cn/1000-9825/4869.htm
Improving the Performance of Defect Prediction Based on Evolution Data
WANG Dan-Dan
1
, WANG Qing
1,2
1
(Laboratory for Internet Software Technologies, Institute of Software, The Chinese Academy of Sciences, Beijing 100190, China)
2
(State Key Laboratory of Computer Science (Institute of Software, The Chinese Academy of Sciences), Beijing 100190, China)
Abstract: It is an undisputed fact that software continues to evolve. Software evolution is caused by requirement changes which often
result in injection of defects. Existing defect prediction techniques mainly focus on utilizing the attributes of software work products, such
as documents, source codes and test cases, to predict defects. Consider an evolving software as a species and its development process as a
natural species’ evolutionary process, the injection of defects may have the characters of a species and will be impacted by its evolution. A
great many of researchers have studied the process of software evolution and proposed some evolution related metrics. In this study, a set
of new metrics is first proposed based on evolutionary history to characterize software evolution process, and then a case study on
building defect prediction models is presented. Experiments on six well-known open source projects achieved good performance,
demonstrating the effectiveness of the proposed metrics.
Key words: defect prediction; software evolution; evolution metrics
为了更好地满足用户的需求、提高软件产品的市场竞争能力,一个软件产品需要不断地演化来适应需求的
变化.每次软件演化都存在引入缺陷的风险,为了准确地检测缺陷,合理地安排测试工作量,许多缺陷预测技术
应运而生.不过,目前大多数缺陷预测技术都是基于软件工作制品的属性进行预测,如需求、设计等的文档和代
基金项目: 国家自然科学基金(91318301, 91218302, 61432001)
Foundation item: National Natural Science Foundation of China (91318301, 91218302, 61432001)
收稿时间: 2015-01-26; 修改时间: 2015-03-18; 采用时间: 2015-06-12
王丹丹 等:基于演化数据的软件缺陷预测性能改进
3015
码等,很多与工作制品相关的度量元被提出来.在这些度量元中,代码类和设计类的度量元被研究人员和实践者
广泛的接受并应用,比如 Halstead
[1]
,McCabe
[2]
,CK
[3]
等.然而,软件都不是一蹴而就的,所有成功的软件都经历了
一个漫长的演化历史,并不得不继续保持演化.演化过程中累积了大量的制品和数据,这些制品刻画了该软件品
种的本质特征,而过程数据必然可以反映出其作为一种物种的演化轨迹.这些数据是否有助于我们建立更好的
缺陷预测模型?这就是本文研究工作的主要动机.
自从软件演化这个概念被提出来,已有研究人员挖掘出了一些与演化相关的度量元,应用在缺陷预测领域.
例如:Moser 等人
[4]
使用文件存在的周期作为一个缺陷预测的度量元;Kpodjedo 等人
[57]
提出了两个通过 Error-
Correcting Graph Matching(ECGM)算法计算的新的度量元,这两个度量元分别是类的排名和演化成本,通过这
两个度量元,我们可以标出最重要的和变化最频繁的类;D’Ambros等人
[8]
讨论了代码演化和软件缺陷的关系,他
们提出把代码度量元的变化作为预测软件缺陷的度量元.
软件演化会导致代码的变化,其在代码层次上主要体现在两个方面:一个是新增需求所变动的代码,另一个
是修改需求所变动的代码.本文根据一个 Java 类是否存在演化历史,把类分为新增类(new)和已有类(old)两种,
以代码类度量元刻画其品种的本质特征.对于演化数据,后者自身有演化数据;前者自身虽没有演化数据,但由
于软件组件间的依赖性以及存在于同样的开发和运行环境,新增的类也必然受到该软件品种一些固有演化模
式的影响.本文主要针对已有类,对于新增类的分析是下一步的工作之一.本文首先建立基于软件缺陷信息的软
件演化矩阵来分析软件中类的演化过程,针对该种软件已有 Java 类的演化过程,提出了两类代码演化度量元:一
类是与演化模式相关的度量元,它们是粗粒度的度量,主要是在版本级别上度量 Java 类的变化,比如类存在的时
间\出现缺陷的概率和类持续不出现缺陷的时间;另一类是代码变更度量元,它们是细粒度的度量元,主要是在
代码级别上度量两个连续版本中代码属性的变化,比如代码行数的变化和代码复杂度的变化等.
本文利用 6 个著名开源软件的数据建立缺陷预测模型,进行案例研究.实验结果表明:在代码、代码变更和
演化模式的 7 种组合度量元建立的模型中,仅用演化模式度量元的模型在召回率和 F 值上有着最好的预测性
能;代码和演化模式的组合度量元建立的模型在 AUC(area under ROC-curve,ROC 曲线下面积)上的表现最好,
也就是说,有着更好的召回率和更低的假正率;7 种组合度量元在精确度上差别不显著.此外,除代码度量元外,最
近
版本数据建立的模型比全部历史数据建立的模型具有更好的预测性能.这说明在软件进化历程中,最近的演
化轨迹对产品的影响更大,这也符合自然界进化的规律.代码类度量元表征产品的本质特征随时间的影响不大.
本文第 1 节介绍软件演化和缺陷预测相关研究工作.第 2 节给出软件演化度量元.第 3 节介绍使用的数据
集、数据预处理方法、预测方法和性能评价指标.第 4 节给出实验与结果分析;实验分析软件演化对已有类缺
陷预测性能的影响;使用 6 个开源软件作为数据集,4 种常用的方法作为建模方法,分析不同软件演化度量元对
缺陷预测性能的影响,并与代码度量元进行对比,从而验证软件演化度量元的有效性.最后总结全文并讨论下一
步的研究工作.
1 相关工作
1.1 软件缺陷预测研究
本文之前的研究
[9]
调研了 2005 年~2012 年间 219 篇缺陷预测论文,这些论文关注 10 类不同的预测目的,例
如预测易出缺陷模块、缺陷数目、缺陷目睹、缺陷优先级、缺陷严重程度等.调研结果表明:预测易出缺陷模
块,也就是预测一个代码模块是否存在缺陷,是研究人员最关注的预测目的.因此,本文关注在预测 Java 代码类
是否存在缺陷.除此之外,该调研论文还发现:代码类和设计类度量元是缺陷预测中最常用的两类度量元,并且
获得了较好的预测性能.因此,本文选择常用的代码和设计类度量元作为基准度量元.
1.2 软件演化研究
软件需要不断演化去适应用户或市场的需求,在其漫长的演化过程中累积了大量的制品和数据,这些制品
刻画了该软件品种的本质特征,而过程数据必然可以反映出其作为一种物种的演化轨迹.自软件演化这个概念
3016
Journal of Software 软件学报 Vol.27, No.12, December 2016
被提出来,软件演化特征现在已经成为多版本软件产品的一个重要特征.Gall 等人
[10]
分析了电信产品多个版本
的结构,他们发现:虽然系统的整个开发过程比较稳定,但随着产品的演化,不同的版本体现了完全不同的特征,
比如模块的规模和改变的比率.
经过多年的研究,研究者已经提出了很多方法来形象化地刻画软件的演化过程,比如:Gall 等人
[11]
提出了基
于时间、软件系统结果和一种属性值的表示方法来检测软件的历史信息;Lanza
[12]
提出了一种演化矩阵的方法,
演化矩阵代表了软件产品的各个类文件的演化,矩阵的每一行代表了一个类文件,每一列表示该类文件在不同
版本中的变化;Wu 等人
[13,14]
使用光谱来研究软件的演化;Girba 等人
[15]
根据软件在运行过程中的一系列需求,
提出了演化分析方法 Hismo,通过可视化的手段对软件历史行为进行建模,从而刻画软件演化过程;Robbes
[16]
为
软件中操作和信息的变化进行建模,以此来监控软件的运行.本文结合软件缺陷信息和演化矩阵
[12]
得到了基于
软件缺陷信息的软件演化改进矩阵来分析软件的演化过程.
1.3 软件演化引入缺陷问题的研究
对于演化的软件产品,特征化软件的演化行为可能对软件缺陷的预测有改进作用.现在很多软件演化分析
技术要么集中在源代码,要么集中在其他与源代码有间接关系的数据源上,这些分析已经被用在了缺陷预测上.
2000 年,Graves 等人
[17]
提出改变相关度量元,比如,修改的次数(比如文件的年龄、修改的规模等)比代码度
量元(如麦凯布圈复杂度)有着更好的缺陷预测效果.2005 年,Nagappan 和 Ball
[18]
成功地在相对代码变化度量元
基础上,使用统计回归方法去预测软件缺陷密度.他们的实验结果表明:与绝对代码变化度量元相比,相对代码
变化度量元对于缺陷密度的预测有着更好的预测能力.同年,Sliwerski 等人
[19]
通过分析指出,变更规模和时间对
缺陷引入有影响.2006年,Bell等人
[20]
采用负的二项回归方法去预测更容易产生缺陷的文件(20%的文件,它们包
含 75%的软件缺陷).他们使用了文件的年龄和它们的变化历史、编码语言等作为预测变量.实验结果表明:与只
是用代码行作为预测变量相比,使用改变相关度量元能够显著地提高缺陷的预测精度(大概两倍).2007 年,
Zimmermann 等人
[21]
把 Eclipse 项目的 3 个版本缺陷数据与代码关联起来,并且给出了代码的规模和复杂度相
关的度量数据.他们的分析表明,复杂度度量元与发布前和发布后的缺陷有显著的相关性.Aversano 等人
[22]
基于
文本分类的思想,以代码变更作为学习和预测对象,预测一个代码变更是否会引入缺陷.2008 年,Moser 等人
[4]
对
比了代码度量元和改变相关度量元的预测能力,结果表明:对于 Eclipse 数据来说,改变相关度量元比代码度量
元更有效.D’Ambros
[23]
使用历史的依赖性和缺陷信息去分析软件的演化,把缺陷作为演化的实体,使用从源代
码中检测到的设计缺陷来预测未来可能出现缺陷的位置.Kpodjedo 等人
[57]
提出了两个新的度量元来预测缺
陷,它们是从错误-修正匹配图算法(error-correcting graph matching algorithm,简称 ECGM)中得来——类的排序
(class rank,简称 CR)和演化成本(evolution cost,简称 EC).这两个度量元度量了最重要和改变最多的类文件.Kim
等人
[24]
针对文件级变更,分析了一条代码变更是否会引入缺陷,从 3 个不同的源(变更)提取度量数据,然后建立
预测模型.2009 年,Abreu 等人
[25]
发现,开发人员之间过于频繁地交流会增加变更引入缺陷的风险.2010
年,D’Ambros
[8]
分析了源代码的演化和软件缺陷的关系.他提出使用源代码的改变这个度量元来预测版本发布
后的缺陷,并且得出:相比源代码度量元,源代码的改变度量元具有更好的和稳定的解释性和预测能力.2011
年,Eyolfson 等人
[26]
发现,时间对缺陷引入有影响.Rahman 等人
[27]
发现,代码的所有权和开发人员的经验对变更
质量有影响.2013 年,Shivaji 等人
[28]
使用属性选择方法对属性进行降维,从而提高基于代码变更的缺陷预测
性能.
2014 年,原子等人
[29]
提出了面向细粒度源代码变更的缺陷预测方法.他们采用特征熵差值矩阵分析了软件
演化过程中概念漂移问题的特点,并提出一种伴随概念回顾的动态窗口学习机制来实现长时间的稳定预测.
本文是在 Java 类级上预测易出缺陷的类,使用两种类型的演化度量元:一种是演化模式相关的度量元,另一
类是代码变更类的度量元,并与传统的代码度量元做对比,从而验证演化度量元是否对缺陷预测性能有改进作
用.现有相关研究大多针对哪些属性对缺陷引入有影响或改进现有缺陷预测模型性能,而本文考虑了两种不同
类型的演化度量元,不仅验证了演化相关度量元是否比传统代码度量元预测效果好,而且分析了哪类演化度量
元预测效果相对较好.
剩余15页未读,继续阅读
资源推荐
资源评论
169 浏览量
2020-05-05 上传
5星 · 资源好评率100%
2023-03-04 上传
131 浏览量
141 浏览量
2021-09-07 上传
2021-08-08 上传
135 浏览量
112 浏览量
2021-05-18 上传
2021-01-18 上传
2022-08-03 上传
2020-01-05 上传
资源评论
我要WhatYouNeed
- 粉丝: 48
- 资源: 287
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功