杨欣荣获日本年度卓越研究奖
“公平”是协作的基础,在在任何领域都是如此。2018年9月由大阪大学特任研究员、数之联研发总监杨欣参与研究的<"Was My Contribution Fairly Reviewed?"A Framework to Study the Perception of Fairness in Modern Code Reviews>(“我的贡献得到了公正的评价吗?”——关于代码评审中公平性的研究)被评选为当年度日本情报处理学会、软件工程研究会的卓越研究奖。
该研究受加拿大自然科学与工程研究委员会,日本学术振兴会科研费基金和西班牙政府基金支持。成果论文被软件工程的国际顶级会议ICSE 2018 (2018 ACM/IEEE 40th International Conference on Software Engineering)收录。 在瑞典哥德堡的会议发表之后,已经引起包括Linux Kernel项目的核心开发者在内的兴趣。
杨欣,奈良先端科学技术大学院大学(NAIST)硕士、博士,大阪大学博士后研究员,加拿大维多利亚大学访问研究员,曾工作于惠普等多家全球大型IT企业,有丰富的金融、工业与政府项目经验。担任自动化学报审稿、以及多项国际会议与期刊的组织者和审稿人。目前主要从事利用大数据与人工智能技术在工业与交通上的研发工作,带领团队进行算法的理论研究与应用落地,为工业、交通、能源提供智能化解决方案。主要研究方向为人工智能、大数据、软件工程、物联网等。
杨欣
当然在了解这篇论文之前,需要先科普一下,什么是开源?一句话来说,开源指的是那些源代码或源设计可以被大众使用、修改发行的软件或设计体。大众最熟悉的开源软件就是安卓,它也是现在影响力最大的开源软件之一,如果没有安卓的开源开放,相信今天没有那么多手机厂商和移动互联网的兴起。以及像Linux 、OpenStack、Hadoop 、Spark等开源项目都属于底层技术,支撑着软件操作平台、大数据、云计算等技术的发展。对于开发者来说,开源与不开源很大的一个区别在于,你只与公司内部的封闭团队进行合作,还是愿意贡献时间与精力和全世界最优秀的开发者们共同协作。
(完整论文可以通过点击文章下方“阅读原文”下载)
在大规模的软件项目开发中,代码评审(code review)是保证软件产品质量的重要方法之一。
软件评审是指一个开发者对另一个开发者提交的代码进行审查,找出明显的缺陷,以及可读性差、维护性差的代码,避免造成测试阶段的BUG频发、产品后期维护隐患等严重问题。
在传统的软件开发企业中,代码评审也称为code inspection,往往需要集中开发团队人员,约定时间地点进行会议,将重要的代码一行行的进行评审。
但由于开源软件开发的兴起,开发者遍布于世界各地,生活在不同的时区,进行大量集中会议式的代码评审是不现实的。因此,新型的代码评审(我们也称之为modern code review)出现并取代了传统的方式,这种方式不需要开发者集中式的会议,只需要在线上通过各种工具来阅读代码,遵照设定的流程给出意见就可以进行。
现如今,不仅是开源软件,许多的软件开发企业内部的软件开发也用线上评审工具代替了频繁的会议。
实际上,代码评审的本质是高度依赖于人而并非工具的。项目目标、开发规则、代码标准等都是由人定的,具体的评审工作也可以视为是人之间的互动。
那么,和很多人为参与的活动类似,代码评审难免会带有主观性:从无数的开发实践案例中我们发现,开源软件的开发者往往拥有不同的经验、文化背景、个人经历、甚至对某种技术的痴迷,那么当开发者进行代码评审的时候,主观偏向性是可能存在的。
当开发者的代码被拒绝的时候,很自然的一个反应是:这个决定是否合理,是否公平。如果评审者拿不出合理的解释,开发者会感受到不公平,这样的情绪不仅会影响他们对项目的参与热情,严重时甚至会导致开发者的流失,对于维持一个大型开源软件项目的健康稳定发展是极为不利的。
于是,我们提出了一个问题:
代码评审具有公平性吗?
在这项研究中,最首要的问题莫过于如何定义“代码评审中的公平性”。
我们调查了计算机科学、哲学、心理学、法学、社会学、管理科学与经济学,最终采用了“公平原理”(Fairness Theory),从四个不同的公平性维度(分配公平性、过程公平性、交互公平性、和信息公平性)对如何研究软件开发中的公平性建立了一套研究代码评审的公平原理框架。
为了展示这个研究框架的可用性,以及公平在软件开发过程中的重要性,我们选取了全球最大的云计算平台开源项目——OpenStack来进行实证案例研究:我们挖掘了OpenStack项目的数年间参与的数百家合作企业,和数以千计的开发者的代码,开发流程数据,项目管理数据,并进行了分析。
为了验证可行性,我们又采用了线上调查方式获取了数百位OpenStack的开发者对于代码评审公平性的反馈。
开发者如何看待这个公平性问题?我们结合代码评审的“公平原理框架”,来集中解读OpenStack的开发者的一些有趣的调查反馈:
1. 每个人对于公平的解读都不相同
例如:Equity(公正)与 Equality(公平)
Equity指的是,重要的事情理应倾斜更多的资源,俗话说能者多劳,多劳多得。
Equality指的是,不存在什么特殊待遇,人人平等。
在绝大部分的社会组织结构中,两种原则往往是共同存在的而并非矛盾的,作为个体(例如开发者)会因为所处组织结构中的地位、态度、待遇等,认知度也会发生差异。
Contributing members in good standing that regularly and unselfishly carry their share of the workload can and should expect to receive higher priority for reviews.
有的开发者认为Equity是公平的:“对于那些努力无私付出的重要贡献者,理应得到更高的评审优先级。”
A submitter is presented with the illusion that all submissions are equal, when in reality the community prioritizes [pull requests] from known submitters.
也有的开发者认为Equality才是公平的:“代码贡献者以为所有的代码都会被一视同仁,但实际上熟人的代码是会被优先对待的。”
2. 项目里的新人该不该被优待?
出乎意料之外的是,新加入项目的开发者往往受到的是负面待遇更多,而不是特殊的优待。对于一个需要持续新鲜血液的项目来说,我们的建议是,对项目新人可以适当多给与帮助和指导,这是一种有正面效果的“偏向性”。
I have only tried to make one contribution. I was so discouraged by the response from the reviewer I have not tried again.
一位新人说:“我只在OpenStack里贡献过一次代码,但是收到了评审者的回复之后深受打击,所以退出了。”
When short on time [I] tend to prefer patch styles I’m familiar with (and agree with) over patch styles unfamiliar. This leads to me preferring people I’m already familiar and that I know write good patches over newcomers.
一位评审者也承认自己有偏向性:“当时间不多的时候,我倾向于选择我熟悉的那些代码和那些人,他们确实比新人写的代码好。”
3. 为什么项目准则(Codes of Conduct)也影响公平性?
为了保护开发者的个人利益、尊严、人身安全等,很多软件项目都会声明Codes of Conduct,尤其多见于开源软件项目。在实际中,很多非核心的开发者会因为核心开发者的“不尊重”与“怠慢”而感受到不公平。
Contributions are ignored unless I beg for attention. I might have time to contribute a minor improvement. I never have time to beg for attention. If you don’t want my help, I got the message loud and clear.
一位开发者说:“如果我不去求评审者,他们就永远忽视我提交的代码。我可以为项目贡献我的微薄之力,但我没时间去对评审者摇尾乞怜。如果他们不需要我的代码,就干脆一点。”
To a point where I have actually heard Cores [maintainers] indicate that people need to be “hazed”, or prove themselves or suffer really hard reviews to “earn their stripes”. I cannot imagine how many developers we have chased away because of this fraternity culture.
还有一位开发者抱怨到:“我实际上听到了核心团队的某些人讲,对待这些开发者就是要霸凌,给他们严苛的评审来证明自己牛逼。我简直不敢想象有多少开发者因为这种“兄弟会”文化而离开项目。(兄弟会是盛行于美国高中和大学的社团文化,通常要加入就必须通过体罚式的考核)”
结果证明,在如同OpenStack这样的庞大的开源软件项目中,绝大部分参与者感受到了公平,但是也存在相当一部分的参与者感受到了不公平待遇。
其中比较典型的现象是,评审者在短时间内面临巨大的工作量的时候(例如,新版本发布前后,会出现大量提交的代码补丁),存在对优先选择某些代码进行评审的情况。但是,在项目规章中极少会规定评审者如何优先选择评审对象,是造成开发者感知到不公平待遇的潜在原因(例如,评审者往往会优先选择来自于自己公司的开发者)。
我们的研究成果总结起来有四个方面的贡献:
从软件开发过程中代码评审的环节出发,建立了能够对软件开发的公平性进行研究的框架。
对全球最大的云计算平台项目进行了代码评审的公平性的个案研究。
从个案研究结果中,我们发现代码评审的公平性是一个事实存在的问题。
我们提供了一套解决代码评审中的不公平性的指导方案。
未来会有越来越多的开发人员去使用开源代码。“开源”作为高科技行业的一个福利,我们更应该关注其生态的健康发展。
有兴趣的同学可以关注一组6集的小短片《“没有 Linux 的世界”》里边描述了没有了 Linux (或者说没有开源软件)的世界发生的事情。
视频来源于网络
感谢您的支持鼓励,我会继续努力的!
点击下方按钮,即可进行打赏支持本文章
发表评论