文章来源:https://netl.istic.ac.cn/site/objdata/0F0AA8B220F54B10B53ABFBFD73317E1/0620200600232788
[学位论文] 甘谊昂 国防科学技术大学
1、开源软件项目的特点是自组织性和动态性;来自世界各地的开发者对开源项目的贡献出自他们自己的意愿而不是实际奖励,让项目拥有者理解项目中成员的角色是个重要的问题
2、大型项目判断标准:成百上千名开发者
3、MSR
软件仓库挖掘(Mining Software Repository,MSR):是针对软件资源挖掘的领域,所涉及的资源包括:源代码、配置文件、静态资源、脚本、版本管理日志记录等。这些资源会被版本控制系统记录,常用的版本控制系统包括 Git 和 SVN。
当前 MSR 主要有几个方向:
(1)借助版本管理控制系统的历史操作日志记录,从中提取出有价值的信息,利用数据分析技术在基础上发现一些规律、构造度量方案,如软件质量、开发者贡献的度量。
(2)实证研究开源社区的相关现象和规律,通过假设检验方法验证相关结论是否有统计和现实意义。
(3)基于机器学习、数据挖掘的技术对软件仓库中的某些信息进行预测,如预测缺陷问题的优先级、缺陷的紧急度、缺陷修复最优指派人、代码审阅人等。
4、新加入的开发人员成为长期贡献者的概率与他的意愿和环境更多的相关,而不是一开始的能力,通常来说,未来的长期贡献者在加入的第一个月内会表现得更加活跃,会更多的参与交流。
5、在实际开发过程中,代码提交次数可以很好的表达一个开发者的活跃情况,越活跃的开发者在代码增加、删除和修复 bug、更改文件等活动上能获得更多的机会,因此贡献也会相对较大;代码改变较多但是涉及文件数量很少的贡献者一般为核心开发者,在维护某些文件上贡献极大,同时项目管理者要特别注意这类人,预防此类开发者离开项目所造成的某些文件短时间内缺少人维护的状态。
6、 适用于大型项目的规律:3 个可用于度量开发者贡献的变量,它们分别是开发者增加代码的行数、修复缺陷的数量、参与评论的次数。
7、在衡量一个开发者的贡献时候应该着重考虑它们修复缺陷的能力以及交流沟通的能力,代码行数这个指标比较复杂,涉及到项目中新功能的增加、已有功能的完善、缺陷的修复等,也是应该被重点考虑的,在同一项目中,所用编程语言和框架是固定的,因此代码的增加可以用来衡量开发者的水平,进而体现在贡献上。
8、贡献度
(1)在大型开源软件项目中,因为贡献者的数量比较多, 在整体看贡献的时候,个人的贡献容易被平均,通过上节和本节的研究可以看出高贡献者推动了项目的发展,但是大量外围开发者的整体累积贡献也是推动项目发展的因素。一些核心开发者可能会负责一些具体的任务,导致开发者在某些观测变量上持续而长时间的进行贡献,其贡献有明显的倾向性,而外围贡献开发者的参与开源软件的贡献具有随机性,通过 Pull Request 向代码仓库做贡献,一般会伴随缺陷的修复。
(2)在度量一个开发者的贡献时候,可以重点关注下面的指标:提交代码次数、增加代码行数、删除代码行数、修复缺陷的数量、发布问题数量和评论次数这6 项指标。
9、90%以上的开发者属于外围贡献者,其贡献没有太多可预测的,一般基于某些事件,带有比较多的随机性,他们进入项目的时间和离开项目的时间也很难预测,可能存在某个版本,也可能间隔的出现。
10、注意
(1)在活跃开发者中,存在不同形式的贡献规律,贡献偏向也有不同的类型。一部分开发者在源代码重构上具有很高贡献,会接触大量的项目文件,有些贡献者倾向于贡献少数核心文件,对维护这些文件起着非常大的作用,而部分开发者会倾向于社交,在评论上会有大量记录,和一般用户接触比较多。这也是每个开发者身份不同,导致的贡献偏好不同。
(2)所有开发者不是孤立存在的。在开发过程中必然需要和其他开发者或者用户产生交流,分析代码提交量前 10 的开发者,都有不同程度的交流过程,相反,低贡献者中很少有在社区表现活跃的情况。
(3)在整个开发过程少数精英主导,即是说整个软件演化节奏由持续贡献的几个核心开发者的活动所推动的,当项目精英离开团队时候,如果没有其他人接手,项目将处于停滞演化状态。
(4)绝大多数外缘开源软件开发人员的参与具有随机性。可能基于某种事件,极少数人可以发展成为长期贡献者,长期贡献的特性在于从开始进入就基本不出现惰性时期,我们可以重点注意那些在 2 个或 2 个版本以上有贡献的开发者,指导项目拥有者合理配置开发人员。通过对开发者们的贡献演化分析,我们可以对项目中的开发者进行分类,按照角色划分,可以分为项目拥有者、核心贡献者、外围贡献者、基础用户。项目拥有者通常表现在有通过代码关闭某一问题的权限,同时在发布问题上要高出其他开发者很多。核心贡献者通常来说是贡献提交数量排前列的,他们的贡献时间上比较稳定,会产生持续贡献。外围贡献者可以理解为对项目感兴趣的研究者或者重度用户,他们在实际中遇到问题并解决然后反馈给开源项目和社区,但是这个贡献具有很大的随机性,也会间断式的出现。基础用户对项目的贡献主要体现在发现bug,其在代码上的贡献基本没有,但是会推动项目的发展。从整个项目周期中出现的所有开发者的全貌来看,核心开发者不足整个项目 1%,绝大部分的开发者是外围贡献者,在评价单个外围开发者的贡献量时候比较困难,但是他们整体的贡献无疑是值得肯定的。