论文部分内容阅读
开发者协作活动在软件开发中至关重要。但由于协作活动较为复杂并难以捕获,这方面研究一直很缺乏。Cataldo等人提出一套框架,用来衡量软件开发中协作需求被协作活动满足的程度,称作社交技术一致性(STC)。他们基于商业项目数据进行实验,发现STC和软件质量显著相关。但目前针对开源项目STC的研究极少。由于开源项目和商业项目的开发过程差别很大,开源项目和商业项目保留的数据也不同,因此计算开源项目中文件的STC需要对原有方法进行调整,包括如何构建开发者之间、文件之间的关系,以及如何计算带权重STC;而得到的结果是否仍然和软件质量有关也需要进一步验证;同时需要对各种计算方法得到的STC在缺陷预测中的效果进行比较。为了解决以上问题,本文对以下内容展开研究:针对OSS中文件级别STC的计算,给出基本方法;把基本方法扩展为带权重版本,研究OSS中文件级别带权重STC的度量方法;切换到持续缺陷预测的数据环境,研究OSS中构建级别STC的度量方法。本文研究了开源项目中文件级别STC的基本度量方法,及其和软件缺陷的关系。和原有方法相比,本文不再针对每个开发任务而是针对每个文件计算STC。方法收集数据构建网络关系,然后根据这些关系计算协作需求和协作活动,得出STC。本文还提出STC的变体——缺失开发者连接(MDL),用来衡量协作缺失数量。实验使用2个开源项目9个开发版本的数据,采用相关分析方法,比较3种文件网络(语法依赖、逻辑依赖、前面二者合并)、3种开发者网络(提交重叠、共同评论、前面二者合并)、和2种STC(STC和MDL)组合得到的18种度量和缺陷数量的关系。结果表明开源项目中STC仍和软件缺陷显著相关,而且其变体MDL和软件缺陷更相关:另外,逻辑依赖文件网络和提交重叠开发者网络组合得到的STC或MDL和缺陷数量最为相关。在基本方法的基础上,本文进一步研究了如何在开源项目中计算文件级别带权重STC,及其对软件缺陷的影响。计算过程沿用上一部分提出的方法,只基于上一部分得到的最佳组合计算。重点在于比较不同带权重方法。带权重方法首先要给各种关系设置权重。基于权重可用5种方式计算文件协作需求:不带权重、以文件依赖数目作为权重、考虑三条边权重、考虑涉及文件、考虑三条边权重且考虑涉及文件;另外采用3种方式计算协作活动满足协作需求的程度:完全满足或不满足、根据协作频率确定满足比例、将协作需求和协作活动规范化后比较。最终组合得到15种STC。实验建立回归和预测模型,比较15种度量对软件缺陷数量的解释和预测能力。结果显示,越复杂的方式更倾向于和软件缺陷有关,并且可以提高缺陷预测模型的效果。其中考虑三条边权重且考虑涉及文件的协作需求,和根据协作频率确定协作活动满足协作需求的比例这二者组合,得到的STC效果最好。除了文件级别STC,本文还研究了构建级别STC在预测持续集成构建结果中的作用。这部分不再基于一个版本的数据计算文件级别STC,而是在项目开发过程中有提交触发持续集成时,实时计算这次持续集成构建级别的STC。计算构建级别STC基于持续集成被触发的时刻之前一段时间内的提交数据,针对这段时间内的每个提交文件计算协作需求,然后合并所有提交文件的协作需求,再根据协作活动计算这些协作需求的满足程度,得到构建级别STC。通过在10个GitHub项目上进行实验,以构建结果作为因变量建立逻辑回归模型。结果发现STC对构建结果有着显著影响,并可以提高构建结果预测的效果;实验还表明MDL对构建结果的解释能力和预测能力都比STC更好。,综上,本文详细研究在开源软件中计算STC的各种方法,并通过具体实验验证STC对软件质量的影响,同时比较不同方法得到的STC和软件缺陷的相关程度,从而找出其中最适合的STC度量方法。本文方法有望在实践中检测软件开发团队的协作问题,从而帮助改善软件质量。