收藏 分享(赏)

软件学报2016年排版样例.doc

上传人:weiwoduzun 文档编号:2808364 上传时间:2018-09-27 格式:DOC 页数:5 大小:279KB
下载 相关 举报
软件学报2016年排版样例.doc_第1页
第1页 / 共5页
软件学报2016年排版样例.doc_第2页
第2页 / 共5页
软件学报2016年排版样例.doc_第3页
第3页 / 共5页
软件学报2016年排版样例.doc_第4页
第4页 / 共5页
软件学报2016年排版样例.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: Journal of Software, doi: 10.13328/ki.jos.000000 http:/中国科学院软件研究所版权所有. Tel: +86-10-62562563静态软件缺陷预测方法 陈 翔 1,2, 顾 庆 2, 刘望舒 2, 刘树龙 2, 倪 超 21(南通大学 计算机科学与技术学院,江苏 南通 226019)2(计算机软件新技术国家重点实验室(南京大学),江苏 南京 210023)通讯作者: 陈翔, E-mail: *摘 要: 静态软件缺陷预测是软件工程数据挖掘领域中的一个研究热点.通

2、过分析软件代码或开发过程,设计出与软件缺陷相关的度量元;随后,通过挖掘软件历史仓库来创建缺陷预测数据集,旨在构建出缺陷预测模型,以预测出被测项目内的潜在缺陷程序模块,最终达到优化测试资源分配和提高软件产品质量的目的.对近些年来国内外学者在该研究领域取得的成果进行了系统总结.首先,给出了研究框架并识别出了影响缺陷预测性能的 3 个重要影响因素:度量元的设定、缺陷预测模型的构建方法和缺陷预测数据集的相关问题;接着,依次总结了这 3 个影响因素的已有研究成果;随后,总结了一类特殊的软件缺陷预测问题(即,基于代码修改的缺陷预测) 的已有研究工作;最后,对未来研究可能面临的挑战进行了展望.关键词: 软件

3、质量保障;软件缺陷预测;软件度量元;机器学习;数据集预处理中图法分类号: TP311中文引用格式: 陈翔,顾庆,刘望舒,刘树龙 ,倪超.静态软件缺陷预测方法研究 .软件学报. http:/ 0000.htm英文引用格式: Chen X, Gu Q, Liu WS, Liu SL, Ni C. State-of-the-Art survey of static software defect prediction. Ruan Jian Xue Bao/Journal of Software, 2016 (in Chinese). http:/ Survey of Static Software

4、Defect PredictionCHEN Xiang1,2, GU Qing2, LIU Wang-Shu2, LIU Shu-Long2, NI Chao21(School of Computer Science and Technology, Nantong University, Nantong 226019, China)2(State Key Laboratory for Novel Software Technology (Nanjing University), Nanjing 210023, China)Abstract: Static software defect pre

5、diction is an active research topic in the domain of software engineering data mining. It first aims to design novel code or process metrics, which have strong correlation with the faults in the program modules. It second constructs a software defect prediction model based on the training data, whic

6、h is gathered after mining software historical repositories. It finally uses the trained model to predict potential defect-proness program modules. The research on software defect prediction can optimize the allocation of testing resources and then improve the quality of software. This survey offers

7、 a systematic survey of existing research achievements of the domestic and foreign researchers in recent years. First, a research framework is proposed and three key factors (i.e., metrics, model construction approaches, and issues in datasets) influencing the performance of defect prediction are id

8、entified. Next, existing research achievements in these three key factors are discussed in sequence. Furthermore, the existing achievements on a special defect prediction issues (i.e., code change based defect prediction) are summarized. Finally a perspective of the future work in this research area

9、 is discussed.Key words: software quality assurance; software defect prediction; software metrics; machine learning; data preprocessing 基金项目: 国家自然科学基金(00000000, 00000000); 南京大学计算机软件新技术国家重点实验室开放课题(KFKT00000000)Foundation item: National Natural Science Foundation of China (00000000, 00000000); State K

10、ey Laboratory for Novel Software Technology (Nanjing University)开放课题 (KFKT00000000)收稿时间: 0000-00-00; 修改时间: 0000-00-00; 采用时间: 0000-00-00; jos 在线出版时间: 0000-00-00CNKI 在线出版时间: 0000-00-002 Journal of Software 软件学报 软件缺陷(software defect)产生于开发人员的编码过程,需求理解不正确、软件开发过程不合理或开发人员的经验不足,均有可能产生软件缺陷.而含有缺陷的软件在运行时可能会产生意

11、料之外的结果或行为,严重的时候会给企业造成巨大的经济损失,甚至会威胁到人们的生命安全.在软件项目的开发生命周期中,检测出内在缺陷的时间越晚,修复该缺陷的代价也越高.尤其在软件发布后,检测和修复缺陷的代价将大幅度增加.因此,项目主管借助软件测试或代码审查等软件质量保障手段,希望能够在软件部署前尽可能多地检测出内在缺陷.但是若关注所有的程序模块会消耗大量的人力物力,因此,项目主管希望能够预先识别出可能含有缺陷的程序模块,并对其分配足够的测试资源.软件缺陷预测 1,2是其中一种可行方法,根据软件历史开发数据以及已发现的缺陷,借助机器学习等方法来预测软件项目中的缺陷数目和类型等.目前,已有的软件缺陷方

12、法可以简单分为静态缺陷预测方法和动态缺陷预测方法1,其中:静态预测方法基于缺陷相关的度量数据,对程序模块的缺陷倾向性、缺陷密度或缺陷数进行预测;而动态缺陷预测方法则是基于缺陷或失效产生的时间对系统缺陷随时间的分布进行预测,以发现软件缺陷随其生命周期或其中某些阶段的时间关系的分布规律.本文重点对静态软件缺陷预测的已有研究工作进行综述.具体来说,该类方法通过分析软件代码或开发过程设计出与软件缺陷相关的度量元,随后,通过挖掘软件历史仓库(software historical repositories)来创建缺陷预测数据集.目前,可以挖掘与分析的软件历史仓库包括项目所处的版本控制系统( 例如 CVS

13、,SVN 或 Git 等)、缺陷跟踪系统( 例如 Bugzilla,Mantis,Jira 或 Trac 等)或相关开发人员的电子邮件等.最后,基于上述搜集的缺陷预测数据集,构建缺陷预测模型,并用于预测出项目内的潜在缺陷程序模块.静态软件缺陷预测属于当前软件工程数据挖掘领域 3中的一个重要研究问题.随着新的数据挖掘技术的不断涌现以及研究人员对软件历史仓库挖掘的日益深入,静态软件缺陷预测研究在近些年来取得了大量的研究成果,其缺陷预测结果也逐渐成为判断一个系统是否可以交付使用的重要依据.因此,针对该问题的深入研究对提高和保障软件产品的质量具有重要的研究意义.为了对该研究问题进行系统的分析、总结和比

14、较,我们首先在 IEEE,ACM,Springer,Elsevier 和 CNKI 等论文数据库中进行检索,检索时采用的主要英文关键词包括“defect prediction”,“software defect prediction”,“fault prediction”和“software fault prediction”等;然后 ,对检索出的论文,通过人工审查方式移除掉与研究问题无关的论文,并通过查阅相关论文的参考文献和相关研究人员发表的论文列表来进一步识别出遗漏的论文;最终,我们选择出与该研究问题直接相关的高质量论文共 113 篇( 截止到 2015 年 7 月). 从选择出的论文所发

15、表的会议和期刊来看 ,绝大部分论文发表在软件工程领域的权威会议或期刊上,例如 ICSE 会议(21 篇)、ESEC/FSE( 或 FSE)会议(13 篇)、ISSRE 会议(5篇)、TSE 期刊(16 篇) 、IST 期刊(7 篇)和 JSS 期刊(4 篇) 等.本文第 1 节对静态软件缺陷预测方法的研究框架进行总结,并识别出其中 3 个重要的影响因素(即,度量元的设定、缺陷预测模型的构建方法和缺陷预测数据集的相关问题).第 2 节对已有的度量元设计进行总结.第 3 节对已有的缺陷预测模型构建方法进行总结.第 4 节对缺陷预测数据集相关问题的产生根源和解决方法进行总结.第 5节对一类特殊的软件

16、缺陷预测问题( 即,基于代码修改的缺陷预测) 的已有研究工作进行总结 .传统的缺陷预测问题重点预测的是程序模块内部是否含有缺陷,而该问题的特殊之处在于需要预测出提交的代码修改是否会产生缺陷.最后总结全文,并对未来值得关注的研究方向进行初步探讨.1 研究框架静态软件缺陷预测可以将程序模块的缺陷倾向性、缺陷密度或缺陷数设置为预测目标.以预测模块的缺陷倾向性为例,其典型研究框架如图 1 所示.图 1 上半部分总结的是软件缺陷预测过程,该过程主要包括两个阶段:模型构建阶段和模型应用阶段.具体来说,模型构建阶段包括 3 个步骤.(1) 挖掘软件历史仓库,从中抽取出程序模块.程序模块的粒度根据实际应用的场

17、景,可设置为文件、包、类或函数等.随后,将该程序模块标记为有缺陷模块或无缺陷模块,在图 1 中,我们将有缺陷模块用红色进行陈翔 等:静态软件缺陷预测方法研究 3标记,无缺陷模块用绿色进行标记;(2) 通过分析软件代码或开发过程设计出与软件缺陷存在相关性的度量元,借助这些度量元对程序模块进行软件度量,并构建出缺陷预测数据集;(3) 对缺陷预测数据集进行必要的数据预处理( 例如噪音移除、特征子集选择、数据归一化等 )后,借助特定的建模方法构建出缺陷预测模型.大部分建模方法都基于机器学习方法,其常用的模型性能评测指标包括准确率(accuracy)、查准率(precision) 、查全率(recall

18、)、F-measure 或 AUC(area under the ROC curve)取值等.而在模型应用阶段,当面对新程序模块时,在完成对该模块的软件度量后,基于前一阶段构造出的缺陷预测模型和具体度量元取值,可以完成对该模块的分类,即将该模块预测为有缺陷倾向性(defect-proneness,简称 FP)模块或无缺陷倾向性(non defect-proneness,简称 NFP)模块.软 件 历 史仓 库 抽 取程 序 模 块 .程 序 模 块 .对 模 块 进 行度 量 并 标 记 度 量 元 类 型 缺 陷 预测 模 型 新 的 程 序 模 块对 模 块 进 行 度 量 NFP类 型类

19、 型输 出预 测 模 型 构 建 阶 段 模 型 应 用 阶 段度 量 元 的 设 计 模 型 的 构 建 方 法 数 据 集 的 相 关 问 题影 响 因 素 数 据 预 处 理 并 构建 缺 陷 预 测 模 型软 件 缺 陷 预 测 过 程Fig.1 Static software defect prediction research framework using defect-proneness as prediction target图 1 以缺陷倾向性为预测目标的静态软件缺陷预测研究框架若将预测目标设置为缺陷密度或缺陷数时,其预测流程与图 1 基本相同,主要的不同点是模型构建阶段中

20、的模块标记(即 ,需要标记出已有模块内的缺陷密度或缺陷数 )和模型预测阶段中的新模块的类型输出 (即,预测输出的是新模块内的缺陷密度或缺陷数).通过分析上述软件缺陷预测过程,我们识别出影响缺陷预测性能的 3 个重要影响因素(如图 1 的下半部分所示).(1) 度量元的设计( 见第 2 节).挖掘软件历史仓库、设置新颖的与软件缺陷存在强相关性的度量元,是构建高质量缺陷预测模型的关键.本文将已有的度量元分为两类,其中:第一类重点关注的是程序模块的代码规模和内在复杂度;而第二类则重点分析软件开发过程,从分析代码修改特征、开发人员经验、模块间的依赖性以及项目团队组织构架等角度出发来设计度量元.(2)

21、缺陷预测模型的构建方法( 见第 3 节).本文将已有的构建方法分为两类,其中:基于机器学习的方法是目前主流的建模方法,根据预测目标的不同,可以进一步细分为分类方法和回归分析方法;而基于缓存的方法则借助缺陷的局部性原理来尝试识别出缺陷模块.(3) 缺陷预测数据集的相关问题( 见第 4 节).4 Journal of Software 软件学报 本文从两个角度对缺陷预测数据集相关问题进行分析:首先分析了数据集质量对软件缺陷预测的影响,重点对其中的噪音问题、维数灾难问题和类不平衡问题的产生原因及其相应解决方案进行了分析和总结;随后,针对需要预测的目标项目可能是一个全新项目,或这个项目已有的训练数据较

22、少的问题,分析了利用其他项目的数据集来为目标项目构建缺陷预测模型的可行性,并将该问题称为跨项目缺陷预测问题.然后,从实例选择、实例权重设置、特征映射和度量元选择等角度对基于迁移学习的跨项目缺陷预测方法进行了总结.2 度量元的设计挖掘软件历史仓库、设置新颖的与软件缺陷存在强相关性的度量元,是构建高质量缺陷预测模型的关键.因此,度量元的设计一直是软件缺陷预测研究中的一个核心问题 4.早期的研究工作主要集中于分析源代码,重点关注基于软件代码(software code)的软件度量.近些年来,更多的研究工作集中于挖掘不同的软件历史存档,重点关注基于软件开发过程(software process)的软件

23、度量 .本节将重点从这两个角度出发,对已有研究工作进行系统总结.2.1 基于软件代码的度量在研究早期,大部分研究工作通过分析软件代码来设计度量元.这类度量元重点关注程序模块的代码规模和内在复杂度等属性,其潜在的假设是:代码规模或复杂度越高的程序模块,其内部含有缺陷的可能性越高.研究人员 5最早借助代码行数(lines of code,简称 LOC)进行度量,例如,Akiyama 给出了缺陷数(D)与 LOC(L)的关系式:D=4.86+0.018L.但该度量元过于简单,难以合理地去度量软件系统的复杂性.随后,研究人员逐渐考虑了Halstead 科学度量 6和 McCabe 环路复杂度(cycl

24、omatic complexity) 7.其中: Halstead 科学度量 6通过统计程序内操作符和操作数的数量来度量代码的阅读难度 ,其假设是代码的阅读难度越高,其含有缺陷的可能性也越高,涉及到的主要度量元包括程序的长度、容量、难度和工作量等; 而 McCabe 环路复杂度 7关注的是程序的控制流复杂度,其假设是程序的控制流复杂度越高,其含有缺陷的可能性也越高.在度量时,首先将程序建模为控制流图(control flow graph),其中,节点对应的是语句,边表示从一个语句到另一个语句的控制流.随后,通过公式 v(G)=en+2 计算出控制流图 G 的环路复杂度,其中,e 表示边的数量,

25、n 表示节点的数量 .最后,可以进一步计算出程序的基本复杂度(essential complexity)和设计复杂度(design complexity).随着面向对象开发方法的普及,其特有的封装、继承和多态等特性给传统的软件度量提出了挑战.研究人员提出了适用于面向对象程序的度量元,其中最为典型的是 Chidamber 和 Kemerer 提出的 CK 度量元 8.CK 度量元综合考虑了面向对象程序中的继承、耦合性和内聚性等特征,给定一个类,其包含的度量元名称及相关描述见表 1.Table 1 CK metrics表 1 CK 度量元名称 描述WMC 类的加权方法数DIT 类在继承树中的深度N

26、OC 类在继承树中的孩子节点数CBO 与该类存在耦合关系的其他类的数目RFC 该类可以调用的外部方法数LCOM 类内访问一个或多个属性的方法数Basili 等人 9基于一些中等规模的信息管理系统 ,首次验证了 CK 度量元与程序模块内的缺陷存在相关性.随后,Subramanyam 和 Krishnan10基于 8 个工业界项目,进一步验证了 Basili 等人的发现.周毓明等人 11也对基于面向对象程序的度量元与程序模块缺陷间的相关性进行了深入的分析,随后他们 12,13发现:类规模度量元在分析时存在潜在的混和效应,并会对缺陷预测模型的性能产生影响.因此,他们提出了一种基于线性回归的方法来尝试

27、移除这种混和效应.最后,他们 14,15分别对 Sarkar 等人提出的 package-modularization 度量元 16和基于程序切片的内聚性度量元 17与程序模块缺陷间的相关性进行了深入分析.陈翔 等:静态软件缺陷预测方法研究 5References:1 Wang Q, Wu SJ, Li MS. Software defect prediction. Ruan Jian Xue Bao/Journal of Software, 2008,19(7):15651580 (in Chinese with English abstract). http:/ Hall T, Beech

28、am S, Bowes D, Gray D, Counsell S. A systematic literature review on fault prediction performance in software engineering. IEEE Trans. on Software Engineering, 2012,38(6):12761304.3 Yu SS, Zhou SG, Guan JH. Software engineering data mining: A survey. Journal of Frontiers of Computer Science and Tech

29、nology, 2012,6(1):131 (in Chinese with English abstract).4 Radjenovic D, Hericko M, Torkar R, Zivkovic A. Software fault prediction metrics: A systematic literature review. Information and Software Technology, 2013,55(8):13971418.5 Akiyama F. An example of software system debugging. In: Proc. of the

30、 IFIP Congress. 1971. 353359.6 Halstead MH. Elements of Software Science (Operating and Programming Systems Series). New York: Elsevier Science Inc., 1977.7 McCabe TJ. A complexity measure. IEEE Trans. on Software Engineering, 1976,2(4):308320.8 Chidamber SR, Kemerer CF. A metrics suite for object o

31、riented design. IEEE Trans. on Software Engineering, 1994,20(6): 476493.9 Basili VR, Briand LC, Melo WL. A validation of object-oriented design metrics as quality indicators. IEEE Trans. on Software Engineering, 1996,22(10):751761.10 Subramanyam R, Krishnan MS. Empirical analysis of CK metrics for o

32、bject-oriented design complexity: Implications for software defects. IEEE Trans. on Software Engineering, 2003,29(4):297310.11 Zhou YM, Xu BW, Leung H. On the ability of complexity metrics to predict fault-prone classes in object-oriented systems. Journal of Systems and Software, 2010,83(4):660674.1

33、2 Zhou YM, Leung H, Xu BW. Examining the potentially confounding effect of class size on the associations between object- oriented metrics and change-proneness. IEEE Trans. on Software Engineering, 2009,35(5):607623.13 Zhou YM, Xu BW, Leung H, Chen L. An in-depth study of the potentially confounding

34、 effect of class size in fault prediction. ACM Trans. on Software Engineering and Methodology, 2014,23(1):10:110:51.14 Zhao YY, Yang YB, Lu HM, Zhou YM, Song QB, Xu BW. An empirical analysis of package-modularization metrics: Implications for software fault-proneness. Information and Software Techno

35、logy, 2015,57:186203.15 Yang YB, Zhou YM, Lu HM, Chen L, Chen ZY, Xu BW, Leung H, Zhang ZY. Are slice-based cohesion metrics actually useful in effort-aware post-release fault-proneness prediction? an empirical study. IEEE Trans. on Software Engineering, 2015,41(4): 331357.16 Sarkar S, Kak AC, Rama

36、GM. Metrics for measuring the quality of modularization of large-scale object-oriented software. IEEE Trans. on Software Engineering, 2008,34(5):700720.17 Meyers TM, Binkley D. An empirical study of slice-based cohesion and coupling metrics. ACM Trans. on Software Engineering and Methodology, 2007,17(1):2:127.附中文参考文献:1 王青,伍书剑,李明树.软件缺陷预测技术.软件学报,2008,19(7):1565 1580. http:/ 郁抒思,周水庚,关佶红.软件工程数据挖掘研究进展.计算机科学与探索,2012,6(1):131.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报