论文部分内容阅读
随着现代计算机软件的高速发展,软件缺陷(bugs)越来越成为影响软件开发效率和质量的关键因素。软件缺陷分析是一种重要的软件维护行为。如何尽早发现并修复软件缺陷成为软件工程领域的一个研究热点。软件缺陷预测技术预测新生成代码单元存在缺陷的概率,帮助开发人员及早发现缺陷。缺陷报告管理技术可将提交到缺陷追踪系统的缺陷,定位到源代码中需要变更的代码单元,帮助开发者尽快修复缺陷。虽然目前已有许多研究关注于软件缺陷分析技术,但依然面临一些困难和挑战:1)现有的缺陷预测技术不能很好的解决跨项目缺陷预测问题;2)软件漏洞预测难度较大,现有的技术性能不理想;3)现有的缺陷报告定位技术无法分析源代码和缺陷报告之间的深层次的语义关联,从而拉低了缺陷报告定位的准确度;4)重复或类似的缺陷很多,但关于开发者频繁遇见的软件缺陷信息无从获得。针对以上所诉困难和挑战,本文重点研究了缺陷预测、漏洞预测、缺陷报告定位和软件频繁缺陷挖掘等缺陷分析关键技术,提出了一系列自动化技术,旨在为软件开发者提供高性能自动化工具,优化软件缺陷发现、定位和修复过程。本文的主要工作和贡献如下:1.针对跨项目软件缺陷预测这个挑战,本文实证研究了七种机器学习领域的集成学习算法在跨项目缺陷预测中的性能:average voting(Ave),Max,BaggingJ48,BaggingNaive,BoostingJ48,BoostingNaive和Random Forest(RF),并和当前性能较好的CODEP方法和Zimmermann等人提出的LR方法进行了对比。结果显示Max和BaggingJ48算法性能较其他方法要好。2.软件漏洞是一类会影响软件安全性的软件缺陷。本文提出新的自动化算法VULPREDICTOR来预测软件系统中可能存在漏洞的文件,该算法结合了软件度量特征和文本特征构建了一个集成分类模型。实验结果显示,VULPREDICTOR的性能比Walden等人提出的算法性能要好,优于VULPREDICTOR自身的6个基础分类器。同时,VULPREDICTOR的性能优于之前实证研究中发现的性能较好的两个集成分类算法Max和BaggingJ48。与时下先进的因式分解机算法(Factorization Machine,以下简称FM)对比时,结果显示两种算法在漏洞预测问题上的性能表现差不多。3.提出一个多抽象层次的缺陷报告定位方法MULAB,提取源代码和缺陷报告中的文本信息,并用多个主题模型表示成多个抽象层次,然后计算缺陷报告和代码单元之间的相似度,本文用不同的数据融合方法衍生出MULAB的12个变体。实验结果表明12个变体中COMBMNZ-DEF方法的性能最佳,并且COMBMNZ-DEF的性能大幅度优于Scanniello等人提出的当前较先进的方法PR。4.提出软件频繁缺陷(frequently encountered bugs,以下统称FEBugs)这个概念,并提出名为RFEB的算法,它可以分析Stack Overflow上海量的与软件缺陷相关的问答信息,使用迭代查询优化技术挖掘出特定领域的前N个FEBugs。本文在10个领域上评估了RFEB的性能,结果显示RFEB的性能在10个领域都优于Stack Overflow默认的搜索引擎。