【读书笔记】如何量化程序员对项目的贡献

Update History

Version Content Author Date
0.0.2 完成Section1和2 Sevens 2019-01-10
0.0.3 完成Section 3部分 Sevens 2019-01-14

Before

此文档为阅读下面论文的读书笔记:
Towards Quantifying the Development Value of Code Contributions

1 Introduction 精简翻译

传统的代码贡献量化方法通常以简单的指标为特征,例如代码量统计(NOC)和代码行数统计(LOC),例如GitHub使用NOC来进行开发者项目的排行。
在这篇文章中,主要概述了如何量化代码贡献在开发工作中的价值。作者定义:开发价值 为贡献的代码在开发工作中的量化和贡献的代码为其他开发人员节省的开发工作。
作者将开发价值分为结构性和非结构性两个部分。结构性价值反映了代码结构对开发活动中的影响:一个被许多函数调用的函数降低了那些调用它的函数的代码量,因此具有更高的价值。根据这个结论,作者设计了 DevRank,基于PageRank,通过函数调用图谱来派生出开发价值。
另外,并非所有的开发价值都体现在代码结构中。三个有经验的开发着根据提交代码的影响进行分类再来判断代码的价值。作者通过自然语言处理(NLP)和机器学习(ML)来探索了自动化描述提交代码产生的影响力的可能性。最后,作者训练出一个learning-to-rank (L2R)的模型用来找出开发代码产生出的结构性和非结构性价值的最佳综合价值。

1 Introduction 译者总结

总体来说步骤就是

  1. 分为结构化和非结构化来评估
  2. 结构化代码统计出在其他代码中的影响力价值分
  3. 通过NLP和ML来对非结构化代码进行分类评分
  4. 结合2和3得出的价值分数通过L2R来得到最佳综合价值

2 开发价值

作者假定代码贡献包含两个部分:

  1. 结构化价值:反映了代码在程序结构中的作用
  2. 非结构化价值:以代码结构本身无关的方式对项目的影响
    最后提供结合两种价值的方法

3 结构化代码的价值: DevRank

在大部分语言来说,一个函数体(程序体,方法)是为程序结构的一个基本单元。开发的价值不单基于创建这个函数的工作量,也基于其他函数调用这个函数时候节省的工作量。结构化代码的价值会被作者开发的基于图论的算法DevRank所记录下来(PageRank算法的扩展算法)
PageRank是Google搜索的基础算法。算法在基于网页的有向图上运行。这个算法会假定访问行为并且迭代计算访问者访问每个页面的可能性。计算概率的中心依赖与访问者的行为。原始的PageRank算法基于访问者的两个随机行为:(1)访问一个页面的时候,会有α概率随机访问页面上的其中一个连接,(2)会有1-α的概率访问者会传送到随机的页面并继续浏览。阻尼(damping)因子α是预先选择的固定概率。基于该行为,得到的概率为通过页面的连接结构而被访问的概率,直观地说,反映的就是这个页面唉网络上的受欢迎程度或者重要性。
为了要计算每一个函数的结构化价值,作者根据代码构建了一个静态被调用函数图。虽然程序执行的时候永远不会像PageRank那样随机跳到不相关的函数中去,但是作者发现PageRank是一个非常方便用来表征代码的模型。我们假定随机传送为代码开发活动的导航,而不是执行行为。
在DevRank中,访客会被定义为一个开发嗅探者(development sniffer),主要任务是用来探测开发的工作量。作者假定开发的工作量是由该函数在整个开发历史中的LOC(代码行数统计)来确定的。作者相信这样的假设比仅计算最新版本的LOC来得更加准确。基于这个假设,

[To Be Continue]