Page 37 - 《软件学报》2021年第12期
P. 37
蒋竞 等:开源社区评审过程度量体系及其实证研究 3701
和指标值得本文借鉴.
3 评审过程度量体系
代码评审是保证开源软件质量的重要环节.本文研究评审过程度量体系,对开源项目的评审过程进行评估.
[3]
参考以往论文 ,本文提出两个方面的指标:首先是评审活动指标,用来评估评审活动的情况,包括评审时间、评
审次数、评审信息长度、代码改动行数;然后是人员分布指标,反映改动者、评论者和决策者的分布情况.
项目里不同的文件代码规模悬殊,根据文件来计算度量指标差异会很大.根据文献[3]使用模块来确定统计
对象,对同属于一个子文件夹下的文件计算指标.对于一个模块 M,FSet M 是模块 M 里的文件集合,PSet M 是改动
过模块 M 的贡献请求集合,DSet M 是改动、评论或者决策过模块 M 的用户集合,其中,CSet M 是改动模块 M 的改
动者集合,RSet M 是评论模块 M 的评论者集合,ISet M 是评审模块 M 的决策者集合.对于一个贡献请求 P i (P i ∈
PSet M ),定义其评论条数为 I(P i ),评审时间为 T(P i ).对于一个文件 F i (F i ∈FSet M ),a(F i ),d(F i ),m(F i )分别为文件 F i 里
增加、删除、修改的代码行数.对于一个用户 D i (D i ∈DSet M ),CH(D i ,M)为用户 D i 对模块 M 做出的改动的行数,
RE(D i ,M)是用户 D i 在模块 M 里的评论总数,PR(D i ,M)为 D i 在模块 M 里决策了的贡献请求数目.
3.1 评审活动
定义 1(评审次数). 评审次数是一个模块所经历的所有评审次数.对于一条被整合进入源代码库的贡献请
求,它的代码改动必然涉及到某些模块.每有一条贡献请求改动了模块 M,就称模块 M 经历了一次评审.PSet M 是
改动过模块 M 的贡献请求集合,card(PSet M )是 PSet M 集合里的贡献请求数目,就是模块 M 的评审次数.评审次数
N 为
N=card(PSet M ) (1)
定义 2(评审信息长度). 评审信息是评审过程中的评论条数.在评审一个贡献请求的时候,人们可以对其提
出自己的批注和意见.评审信息反映改动的代码是否经过了大量讨论.对于一个模块的评审信息长度,定义为这
个模块中每条贡献请求的评论条数之和.M 是选定的一个模块.则评审信息长度 L 为
L = ∑ IP i (2)
()
∈
i PPSet M
定义 3(代码改动行数). 代码修改最重要的特征之一,就是代码改动的行数,包括代码的增添、删减和修改
行数.这些属性是一个代码改动核心的特征,通过代码的增添、删减和改动行数,可以清楚地知道软件在一段时
间内究竟有多少改动.一个模块的代码改动行数 CH(M),就是这个模块中所有文件的增添、删除和修改的代码
行数:
CH (M = ) a ()F + ∑ i d ()F + i m ()F i (3)
∈
i FFSet M
定义 4(评审时间). 一个贡献请求从创建开始,一直到评审结束持续的时间.评审时间以模块为单位,计算一
个模块里贡献请求的评审时间之和.M 是选定的一个模块.则评审时间 T 定义为
T = ∑ T ()P i (4)
i PPSet M
∈
3.2 人员分布
定义 5(改动者数量). 假如一个文件里面,提交代码修改的人数越多,那么提交的代码风格可能差异越大.找
出模块的贡献请求集合中所有的改动者集合,计算集合里的改动者数目.改动者数量 C 为
C=card(CSet M ) (5)
定义 6(评论者数量). 在评审过程中,评论者对评审结果有直接影响.评论者可以对代码修改提出自己的意
见,比如指出代码修改里面的不足,而这些评论可以作为后面决策工作的参考.找出模块的贡献请求集合中所有
的评论者集合,计算集合里的评论者数目.评论者数量 R 为
R=card(RSet M ) (6)