论文部分内容阅读
开源软件中预测问题是软件工程领域热点课题之一,一直受到研究者和软件开发从业者的广泛关注,特别是对GitHub中开源软件的研究。GitHub是当前最大开源社区,到目前为止已拥有5700万开源项目。开源软件预测问题研究的基本思想是以开源项目中的源代码和程序员行为日志为研究对象,包括项目筛选、代码修改、缺陷修复等,通过软件度量来刻画开源软件中的成员流动、代码变更动向、代码潜在风险,以机器学习算法为基础建立学习模型。这些学习模型旨在为程序员提供自动化决策工具,提高程序员的开发效率、提高开源项目的演化进度、控制开源软件的开发成本。本文研究的三类预测问题包括:1)开源软件参与推荐,预测哪些开源项目是程序员能够成功加入的,帮助程序员降低项目检索负担,避免因项目参与失败而浪费大量时间和精力在项目学习、代码提交等工作上;2)软件变更预测,预测项目中哪些代码文件会在下个版本发生变更,帮助程序员控制项目开发进度;3)软件缺陷预测,预测项目中哪些代码文件存在缺陷,帮助程序员识别缺陷代码。以上三类预测问题解决的是开源软件中紧密相关的三个关键研究问题。具体来说,在软件项目创建初期,软件参与推荐模型帮助程序员检索项目,加速项目成员组织过程;在项目开发阶段,软件变更预测模型帮助程序员合理分配开发资源,指导新项目成员开展工作;在项目维护阶段,软件缺陷预测模型指导程序员将测试资源集中用于缺陷文件,以此保障软件产品质量。论文的主要研究工作和创新点如下:(1)针对开源软件参与推荐问题,本文根据GitHub开源社区特点设计了9种软件项目特征,从不同角度表达程序员成功加入项目的行为模式。以这些特征为模型输入,提出了一个基于成列比较(list-wise)排序学习的开源软件参与推荐模型(Neural Network for List-wise Ranking,NNLRank),通过其中的神经网络模型预测程序员对候选项目的喜爱程度,利用一个成列比较排序目标函数和随机梯度下降法优化模型参数。文中详述了模型优化的推导过程和执行步骤。本研究从GitHub映像数据库Ghtorrent上采样2044个成功加入项目决策信息及相关数据,以它们为研究对象验证了模型NNLRank的有效性和稳定性。实验结果表明,相较于三个现有排序模型SVMRank(Support Vector Machine for Ranking)、BPNet(Back Propagation Network)、SVM(Support Vector Machine)和现有项目预测模型LP(Link Prediction),NNLRank模型显著提升了预测准确率。(2)针对软件变更预测问题,本文以源代码和变更日志为研究对象,提出了一个基于源项目选择的跨项目软件变更预测模型(Selective Cross-project Prediction,SCP)。该模型旨在解决现有模型的不稳定性问题,这是因为源项目(训练数据)和目标项目(测试数据)之间数据分布差异很大,从源项目学到的知识不能很好地用于预测目标项目中代码文件的变更性。在研究中,本文提出的数据选择策略直接度量两个项目之间数据分布特征距离,并使用了数据的标签信息,即文件变更性。其中目标项目中未知标签信息是通过一个轻量级无监督方法估计的。该模型利用Qualitas Corpus库中十四个开源软件变更数据进行了实证研究,并与现有最好变更预测模型CLAMI+(Clustering,Labeling,Metric selection,Instance selection plus)和三个相关模型RCP(Random Cross-project Prediction)、TCA+(Transfer Component Analysis plus)、TDS(Training Data Selection)进行了对比。实验结果表明SCP在预测准确度和成本效用上相较于对比模型都有很大提升。(3)针对软件缺陷预测问题,本文以源代码缺陷数据为研究对象,提出了一个基于迁移学习的两阶段跨项目缺陷预测模型(Two-Phase Transfer Learning,TPTL)。该模型旨在构建一个源项目估计器,为迁移学习模型TCA+选择两个源项目,且分别能提高模型预测的准确率和成本效用,并结合两个TCA+模型结果使得TPTL在预测准确率和成本效用上都有较好的结果,进而解决TCA+在跨项目缺陷预测中的不稳定性问题。该模型利用PROMISE库中四十二个开源项目缺陷数据集进行了实证研究。实验结果表明TPTL相较于现有最好缺陷预测模型LT(Log Transformation),一种优秀的迁移学习模型Dycom,以及三个相关模型TCA+Rnd(随机使用一个源项目训练模型)、TCA+All(使用所有源项目数据训练模型)、以及TDS,模型TPTL能够显著提升缺陷预测的准确率和成本效用。本论文的工作针对开源软件中三个关键自动化决策问题,即项目检索、项目规划、缺陷检测,在现有学习模型的基础上进行改进,并提出了新的解决方案,提高了预测精度,为开源软件中三个预测问题提供更加准确的决策建议自动化工具,帮助程序员减少在决策中所浪费的时间和精力,进一步提高软件项目的开发进度、降低开发成本、提高软件质量。