如何通过开发者度量来优化开源社区体验

社区是一群因为共同利益而聚集在一起的人和组织。创建一个成功的社区从根本上是创建一个生态系统,人们可以在其中从事有意义的工作,快速成长,并且有动力地持续成长,进而帮助维持社区的长盛不衰。

社区的核心力量是社区成员,而开发者又是社区成员中最关键的角色。 高效的开发者是社区成功的关键因素之一。

为了建立面向开发者的度量,我们首先简要阐述构建开发者画像的几个基本原则。

依据社区的愿景使命及阶段性目标,确定主要成员画像类型。例如用户画像,布道者画像,活动组织者画像,Issue 支持者画像,开发者画像等,并且有些画像角色可能是重叠的。因为制作画像的过程需要大量工作,应该关注画像类型的质量而不是数量。

建立成员画像。构建画像的关键要素包括:能力,经验,动机,关心的事情,期待的奖励以及关注的领域。

一、构建开发者画像

开发者画像是用户画像技术在社区开发场景中的一种实践。开发者画像通常由社区开发者的多项特征和与其他开发者的关联关系构成:

01  开发者技能画像

开发者特征通常是一系列的标签。例如 图1 所示,我们可以通过词云标签来代表一位开发者在社区环境中所展现出来的技能特征。

 1: 开发者技能云

02  开发者贡献度画像

另外我们还可以构建开发者贡献度特征。贡献度是指开发者在特定社区中对该社区作出的贡献,主要考察开发者在社区中的活跃程度,同时也是对其熟练度的刻画。这些贡献指的是开发者的各项活动,如在Gitee开源社区中参与项目或提交代码、在Stack Overflow问答社区中回答问题等。如 图2 所示,我们可以构建开发者参与社区的贡献度特征,图中的标签代表开发者参与的所有项目,原点直径的大小代表参与项目的贡献量。

 2: 一名开发者参与贡献的所有项目标签集合

03  开发者关系图谱

与其他开发者的关联关系可以用开发者关系图谱来表示,通过将开发者之间的交互可视化,来量化社区协作强度。利用开发者关系图谱,我们可以识别开发者参与社区的趋势,特别是核心开发者的识别,另外还可以判断开发者是否有从社区流失的倾向等。如 图3 所示,开发者关系图谱通常可以分为社交关系、直接协作关系和间接协作关系等[1]

 3: 开发者关系图谱分类

在每种关系下又包含了详细的协作关系,将关系类型和关系强度作为协作关系的属性。

在开发者的开发活动中,社交关系是指开发者之间的在特定社区中的人际关系。虽然与开发活动并不直接相关,但研究发现开发者加入存在好友的项目其贡献率将会有大幅提升[2]。例如,社交关系又可以分为follow关系和in organization关系等,分别表示开发者之间的互相关注和开发者隶属于同一个组织等。

直接协作指开发者之间的直接交互关系,即两个开发者面对同一任务需要紧密的沟通合作。例如开发者D1与开发者D2之间存在answer to和call API的关系,则分别表示D1回答了D2提出的问题、D1实现某些功能时调用了D2提供的接口,number表示这些协作的频度。此外,开发者共同修改代码文件、对同一代码的开发和测试也属于这种紧密型的协作关系,其他类似的协作关系还有很多。

间接协作指开发者之间的间接交互关系,相对于直接协作来说,它是一种较弱的协作关系,但对于整体的开发任务也起到了一定的作用。例如开发者D1与开发者D2都回答了某个问题,或者都向某个开源项目提交了自己的代码,则他们之间分别构成了co-answer和co-commit的关系。

二、社区开发者体验改进

基于社区健康度度量体系,我们协同上海交大曹健教授团队一起在openEuler/MindSpore实施了社区体验改进。

在openEuler社区中,如 图4 所示,我们通过构建开发者在不同SIG组中的技能标签,识别出大多数开发者都参与过CVE漏洞的修复工作。对于社区而言,制定更简单的漏洞修复流程、引入自动化漏洞感知和修复工具可以大幅提升开发体验。


 4: OpenEuler开发者标签

另外我们在MindSpore社区构建了开发者issue交互关系图谱,我们协助社区管理者识别了不活跃开发者,并通过问卷、线下沟通等方式重新激活了部分存在流失倾向的开发者(如 图5 所示)。通过构建开发者兴趣图谱,在MindSpore社区试点激活社区SIG组,提升了社区整体活跃度。

5: MindSpore 协作者关系图谱

参考链接

[1]  张建,孟祥鑫,孙海龙,王旭,刘旭东. 数据驱动的软件开发者智能协作技术. 大数据, 202101: 76-93, 2021.

[2]  杨程 , 范强,王涛, 尹刚 , 王怀民. 基于多维特征的开源项目个性化推荐方法. 软件学报, 2017, 28(6):1357-1372,2017

{{o.name}}
{{m.name}}

猜你喜欢

转载自my.oschina.net/u/5782644/blog/5554258