论文部分内容阅读
缺陷修复是软件维护过程中重要的活动。有研究表明,软件开发过程中80%的工作量和花费用在了软件维护阶段的缺陷修复上。随着开源软件的迅速兴起,越来越多的公司和自由开发者加入到开源社区,参与开源软件的开发与维护工作。这一方面给开源软件的发展提供了海量的人力资源,而另一方面,由于开源软件的分布式开放模式和松散的管理,开源社区中的人员流动性大,导致难以有效管理承担开源软件维护任务的人员。在开源软件维护工作中,缺陷修复类任务的比重十分突出。缺陷能否得到及时、有效的修复对软件的质量和产品更新的速度有着重要影响。预测缺陷修复时间为科学地管理软件缺陷修复过程提供了基础。而随着软件的日趋开放和快速演化,使得软件资产库中的历史数据和文档规模越来越大,同时,开源软件新的开发模式也使得涉众间的关系更加复杂,这给开源软件的维护,特别是缺陷修复时间的预测带来了新的问题和挑战。例如,如何全面系统地了解开源软件维护工作相关研究的现状,特别是缺陷修复时间预测研究、如何在不可控的开源环境下度量人员对缺陷修复时间的影响、如何准确地预测开原软件缺陷修复时间等。 为了解决上述问题,本论文首先对于开源软件项目维护工作量估算方面的研究进行了全面系统地文献综述。通过系统地搜索和筛选,识别出了29篇相关的原始研究,对设定的研究问题进行了系统的综述,总结了现有研究中采用的度量元、预测方法及其效果,并指出了现有研究存在的问题,为后续研究提出了方向。 很多研究都发现在开源社区中,传统的基于工作量估算工作时间的方法不能达到效果,这是由于开源社区的人员自治行为导致工作量与工作时间解耦,即很多人接受任务后,并非全时投入任务。这个挑战使得开源软件的缺陷修复时间估算变得非常困难。本论文梳理了开源软件缺陷修复的过程,形成一个包含三个阶段的规范过程。在此基础上,详细分析了目前较为公用的一些因子对各阶段时间的影响以及变化。本论文基于两个大型开源软件项目的数据进行了案例分析。分析结果表明,一些因子在各个阶段存在变化,并与各阶段时间的统计相关性存在差异。这些分析结果启示应该分阶段进行缺陷修复时间的分析和预测。此外,分析结果还表明,缺陷修复阶段是开源软件缺陷修复整个过程中最重要的阶段。 开源社区参与者自治行为导致了开源软件开发方式的巨大变革。参与者的行为、意愿等因素愈发凸显对开源软件缺陷修复类任务的重要作用。本论文进一步基于开源软件缺陷修复的历史数据,从缺陷修复人的修复经验、在社区中的活跃度及其代码提交三个维度提出了用于刻画缺陷修复人能力的度量元,并基于开源操作系统Linux的缺陷数据进行案例分析,验证了所定义的绝大部分缺陷修复人能力的度量元与缺陷修复阶段时间显著相关,这为构建开源软件缺陷修复时间的预测模型提供了新的参考因素。 最后,本论文研究并提出了基于缺陷修复人能力的开源软件缺陷修复时间预测方法,并以开源操作系统Linux的缺陷数据为案例研究,分别采用四种机器学习算法建立预测模型。案例研究结果表明,本论文所得模型的预测性能比仅基于缺陷报告因子的缺陷修复时间预测模型性能最高综合提升40%,同时也优于绝大多数现有研究的结果。为进一步分析缺陷修复人能力影响缺陷修复时间的原因,本论文对采用决策树方法得到的预测结果进行规则集的挖掘,并基于所得规则集分析了Linux项目中缺陷修复花费时间较长(大于1个月)的原因。基于该方法总结的规则特征可以为开源软件项目管理者深入了解社区参与者能力与缺陷修复任务的关系提供重要信息,同时为优化开源软件的缺陷分配过程提供决策支持。