引用
Zhang W Q, Nie L M, Jiang H, et al. Developer social networks in software engineering: construction, analysis, and applications[J]. Science China Information Sciences, 2014, 57(12): 1-23.
摘要

随着互联网的日益普及,越来越多的开发人员合作进行软件开发。在协作过程中,可以将许多与软件开发相关的信息(包括开发人员的通信和协调信息)记录在软件存储库中。这些信息可以用来构建开发者社交网络(DSN),用以促进软件工程中的任务。本文综述了近年来开发者社交网络的研究进展,分析了它的三个基本步骤,即构造、分析和应用。我们总结了这三个步骤中最先进的方法,并探讨了它们之间的关系。在此基础上讨论了目前研究的主要问题,并指出了今后研究的方向。
研究背景
随着 Internet 的普及,越来越多分布在世界各地的开发人员参与到一个软件项目中来。这样的项目通常有动态变化的软件需求、快速发展的敏捷软件过程、松散组织的团队和开发人员自由协作。在这样的背景下,开发者的活动可以记录在某些软件存储库中,如电子邮件系统、配置管理工具、软件缺陷跟踪系统等,从而方便开发者之间的协调和沟通。
需要注意的是,在传统的软件开发中,开发人员的数量可能被认为是一个消极的因素,比如说让开发人员加入团队可能会进一步减慢进度。相比之下,现代软件开发中有许多新特性。首先,随着软件规模和复杂性的提高,软件团队中的开发人员数量也在增加。其次,开发人员的协作方式主要是基于互联网的,而不是面对面的交流。第三,开发人员有更多的机会参与到不同软件开发阶段的任务中。因此,开发人员和开发人员之间的关系在现代软件开发中扮演着重要的角色。如何利用开发人员的信息来改进软件工程任务已成为一个新的挑战。
研究问题和研究目的
在过去的十年中,人们使用开发者社交网络(DSN)的方法进行了一系列的研究来促进软件工程的任务。本文综述了近年来与 DSN 相关的最新进展,并将其研究分为构建、分析和应用三个步骤。本文的主要目的是检验这些步骤的表现以及它们背后隐藏的关系。
DSN 的构建方法、分析方法和应用场景如图 1 所示。可以基于不同的数据源和开发人员关系通过不同的方法来构建 DSN。DSN 可以通过各种社交网络分析方法进行分析,这些方法可以捕获和理解 DSN 的特征和特性。DSN 的这些特征和特性将最终应用于某些软件工程任务,以使其高效有效。
研究方法
1.论文选择
首先,我们需要收集与主题相关的论文,即开发者社交网络。方法如下,收集流程从 Google Scholar 开始,我们使用关键字“开发者网络”搜索研究论文,并检查前 50 个搜索结果。然后将无关的论文过滤掉,我们通常只阅读标题和摘要,但如果有必要,我们也会简要地看一下引言部分。
为了过滤出论文,我们使用了三个标准。首先,如果论文没有讨论有关软件工程的主题,则将其排除在外。例如,许多已发现的论文都是关于一般社交网络的,它们不在我们的讨论范围之内。其次,如果论文中没有构建网络,则将其排除在外。例如,一些论文讨论了软件开发中的通信,但没有构建任何开发者网络。第三,如果论文中的网络节点不是开发人员(例如源文件),则论文被排除在外。经过一轮选择,剩下的论文不超过 20 篇。
从这些论文中,我们得到了它们的参考文献和引用它们的论文。然后对相关论文再次进行上述三个筛选步骤,持续这个迭代过程直到筛选不出更多的新论文。最后我们收集到相关文献 86 篇。
图 1 DSN 的构建,分析与应用
2. DSN构建方法
2.1 基于项目参与的 DSN
基于项目参与的 DSN(PP-DSN)由以下规则的构造而成:如果两个开发人员都参与了同一项目,则 DSN 中他们之间存在链接。
PP-DSN 基于具有许多项目的平台(例如 SourceForge.Net)中的数据。SourceForge.Net 是一个基于 Web 的项目支持网站,提供项目管理工具、错误跟踪、邮件列表服务、讨论论坛和版本控制软件。按照上述规则,同一项目中的每一对都将连接,并且整个网络包含 SourceForge.Net 中的所有开发人员(曾经参与过至少一个项目)。对于 SourceForge.Net 来说,这是一种合理的 DSN 构建方法。在 SourceForge.Net 中,大多数项目都是小型项目,仅涉及少数参与者。在同一个项目中工作的两个开发人员应该有共同的兴趣和技能,因此可以利用开发人员的合作关系来构建 DSN。
PP-DSN 构造方法的主要限制是在某些情况下过于粗糙。它不能用于对特定项目进行调查。PP-DSN 中的开发人员甚至不在一个项目中,而是在管理平台的网站中包含所有的用户。它考虑了 DSN 建设中项目参与的粗粒度关系,项目中的一些详细关系以及在这种类型的 DSN 构造中的时间关系都被忽略了。如果一个项目已经进行了多年,该方法仍将当前的开发人员与 10 年前退出该项目的人联系起来。显然,在这种情况下,他们可能与软件开发没有任何联系。
2.2 基于版本控制系统的 DSN
基于版本控制系统的 DSN(VCS-DSN)由以下规则的构造而成:如果两个开发人员都提交了相同的文件或模块,则 DSN 中他们之间存在链接。
通常情况下可以使用软件变更日志来构造 DSN。这种类型的 DSN 构造方法着重于一个项目中的活动。最直接的方法是收集版本控制系统(VCS)中记录的历史记录,即代码提交活动。源代码可能是软件开发的最重要结果,源代码可以由版本控制系统(例如 CVS,SVN,Git)管理。当开发人员完成编程或修复某些错误时,他们将提交当前文件,并且 VCS 将根据修改后的版本更新源代码存储库。变更日志记录了开发人员提交的文件,这意味着开发人员通过他们修改过的文件连接在一起。
VCS-DSN 的第一个特征是它们是无向的。开发人员的这些无方向的链接来自它们的共同特征,例如从事相同的项目、修改相同的软件实体等。我们还可以引入更多信息(例如开发人员的时间关系)来构建定向 DSN。
VCS-DSN 可以公平地捕获开发人员之间的协调关系。VCS-DSN 的假设是,如果两个开发人员修改共同的源代码,则它们是相似的。修改源代码可能是开发人员最重要的动作。VCS 可以提供结构信息,但是开发人员的这种修改链接不是直接的“社交”关系。这种关系是在源代码中建立的,而不是即时通信。
2.3 基于电子邮件存档的 DSN
在软件开发生命周期中,通信对于开发人员至关重要。通信可以通过多种方式进行,例如面对面、电话和会议。这些方式非常有效,但是对于地理上分布的软件团队而言,这些方法并不令人满意。开源软件的普及也加速了软件开发的全球化。如今,通过 Internet 进行通信已变得如此流行,可以记录所有通信历史并使其可访问。电子邮件是软件团队使用的一种流行的通信方法,因为它简单明了并且服务器易于部署。因此,基于电子邮件存档的 DSN(EA-DSN)诞生了。EA-DSN 的构造规则是:如果两个开发人员通过电子邮件进行通信,则 DSN 中它们之间存在链接。
有人向该列表发送电子邮件,然后该列表中的任何人都可以看到它。如果另一个人回复了此电子邮件,则会显示一个社交链接。在以下情况下,使用通信关系来构建 EA-DSN 是很自然的。
(1)如果开发者 A 响应另一个开发者 B,则可以构建链接 B→A。在这种情况下,指向 B→A 的链接即表示 A 接收并理解 B 的消息。在公共邮件列表中,如果 B 发送电子邮件,则 A 回复 B,则链接 B→A 被构建。这种 DSN 用来描述信息传输的情况。
(2)发送到公共邮件列表的电子邮件可能会获得多个开发人员的答复。根据案例 1,这些电子邮件中的每一个也可以用于构建从发件人到回复者的链接。在这种情况下,所有参与同一主题的开发人员都可以被认为具有共同的兴趣,因此他们中的每一对都可以链接到 DSN 中[31]。这种 DSN 是无向图。
(3)有些工作没有明确提到公共邮件列表[27]。他们可能会以一般方式使用内部电子邮件。因此,在这些论文中,当 A 向 B 发送电子邮件时,可以在 DSN 中构造从开发人员 A 到 B 的链接。
2.4 基于错误跟踪系统的 DSN
错误跟踪系统(即缺陷/问题/问题跟踪系统)是用于在软件生命周期内管理错误报告的存储库。在错误跟踪系统中,通信是通过注释来完成的,因此可以通过注释之间的关系来构建 DSN。构建基于错误跟踪系统的 DSN(BTS-DSN)的第一条规则是:如果两个开发人员都对同一个错误报告进行评论,则 DSN 中它们之间存在链接。在错误跟踪系统中,可以创建、分配、修改、注释和关闭错误报告。错误报告通常由许多预定义的字段构成,例如标题、组件、严重性、版本等,以促进错误修复。另外,一些所谓的错误报告实际上是对新功能或增强功能的要求。从这个意义上讲,错误跟踪系统成为修改请求系统,开发人员不仅可以管理错误报告,还可以管理其他修改请求。由于开发人员的沟通和协调都以结构化方式记录在错误跟踪系统或修改请求系统中,因此可以通过各种方式从错误存储库中挖掘和构建 DSN。
这种关系基于开发人员的共同兴趣和技能。在这里,评论可以被一般的参与所代替,因为错误报告不仅可以被评论,还可以被修改和分配等。它成为带有错误报告评论的另一种 DSN 构建途径。该方法通过将评论中的回复关系作为 BTS-DSN 的第二条规则来挖掘定向链接:如果开发人员 A 回复开发人员 B 对错误报告的评论,则 DSN 中存在从 A 到 B 的链接。这种关系比以前的关系要紧密得多。链接的两名开发人员评论了一个常见的错误报告,并直接彼此通信。这种 DSN 使用错误报告的注释信息构造为有向图。
以上两种方式均基于所有数据构造一个 DSN。BTS-DSN 可以基于第三种方式基于某些特定文件的注释来构建:对于每个文件,如果错误报告与此文件相关,则将与此错误报告的注释关联的关系添加到该文件的 DSN 中。该规则为每个文件构建一个 BTS-DSN,以便计算基于文件的特定度量。它使用版本控制系统和错误跟踪系统之间的关系。但是这是很难实现的,因为很多系统都是分离的。
2.5 其他 DSN
除上述类别外,某些 DSN 构造方法是特定的,在某些存储库中不常用。可以使用开发人员给予另一个推荐级别的推荐等级来构造 DSN。分析了代码的主叫方与被叫方之间的依存关系,以建立技术网络,并将其转换为表示其技术依存关系的 DSN。也可以使用开发人员博客中的交叉链接来构建 DSN。在每个开发人员都有个人博客主页的特殊情况下,也可以使用此方法。这些开发人员经常撰写技术文章,并且可以阅读和引用其他开发人员博客中的文章,挑选出此类交叉链接以构建 DSN。
除了上述单一类型的 DSN 外,还存在一些混合 DSN,它们不是纯 DSN。混合网络中的这些节点不仅包括开发人员,还包括其他一些实体。在这些混合 DSN 中,开发人员仍然彼此相关,尽管不是直接相关。混合网络中最普遍的一种是社会技术网络。
3 SNA指标
社交网络的世界很小,并且可以自由扩展。目前已经提出了许多 SNA 度量来捕获整个网络和单个节点的属性。我们回顾了 SNA 度量的三种类型:中心性,全局度量和其他度量。
中心性旨在测量节点在网络中的中心位置。
(1) 度中心性(Degree Centrality)定义为节点的邻居数。如果开发者有很多邻居,那么他/她显然很受欢迎。
(2) 接近中心性(Closeness Centrality)定义为从当前节点到所有其他节点所需的步骤数。它测量一个节点与其他节点的距离,如果距离较低,则节点的位置在网络的中心。
(3) 中间中心性(Betweenness Centrality)定义为其他节点对之间通过该节点的最短路径数。通过一个节点的路径越短,该节点就越重要。
(4) Bonacich 中心性(Bonacich Power)被定义为度中心性的一种变体。如果节点连接到与许多其他节点具有连接的节点,则该节点被视为中心节点。
(5) 可达性(Reachability)定义为紧密中心度的一种变化。它测量网络的连通性。它表示可以使用特定数量的步骤来到达网络中其他节点从该节点开始的部分。
(6) 重心中心性(Barycenter Centrality)是根据通过该节点的所有最短路径的长度之和来计算的。中心节点越多,总最短路径就越小。
(7) 特征向量中心性(Eigenvector Centrality) 被定义为具有反馈特征(如 PageRank)的复杂中心性度量。连接到高度中心节点的节点递归地增加它们自己的中心性。
全局指标旨在调查整个网络。最简单的全局度量可能是网络的大小,即节点或边的数量。直径定义为网络中每对节点之间所有可能的最短路径中的最大值。直径越大,表示信息传播到整个网络所花费的时间越长。密度定义为网络中的边占所有可能边总数的比例。较高的密度表示网络中的节点彼此之间具有更紧密的连接。
还有其他一些指标。聚类系数被计算为当前节点的任何两个相邻连接的概率。特征路径长度定义为节点之间最短路径中的平均边数,更小的价值意味着信息更容易传播。K-核心度的定义是这样的:如果一个节点在去除所有其他度数为 k-1 的节点后具有度数 k,则该节点属于给定的 shell k。2 路径数定义为通过节点的 2 路径数,这是衡量当地社会地位的标准。
4 特性
社交网络也是小世界和无规模的网络,它们有三个共同的属性。
(1)相对于网络的大小,任何两个节点之间的平均路径长度都较短。例如,六度分离是社交网络中的一种流行理论,即任何人都可以在六个步骤之内到达另一个。
(2)网络中明显存在社区结构。换句话说,聚类系数和模块化度量都足够高。
(3)网络中的度分布应遵循幂律分布。
小世界特性意味着节点在网络中紧密相连。一个典型的例子是六度分离,这意味着所有开发人员最多在 6 个跃点内连接到其他所有开发人员。研究人员可以使用平均路径长度来研究此现象。平均路径长度是每两个节点之间的测地线路径(即最短路径)的平均值。在研究中,每个平均路径长度不超过 6。
5 弥合 DSN 与 SE 之间的鸿沟
结合 SNA 方法和软件开发功能非常重要。在本小节中,我们总结了弥合 DSN 与软件开发之间差距的研究工作。许多研究人员通过一些假设研究了 DSN 与软件开发活动之间的关系。
(1)同一个社区的开发人员更有可能直接合作[31]。
(2)在同一社区中,开发人员提交的文件之间的平均目录距离小于从不同社区中抽取的类似规模的开发人员组。
(3)开发人员发送的消息数量与该开发人员的程度有密切关系,并且该开发人员进行的源更改数量。
(4)度数和中介度等 SNA 指标表明开发人员实际进行了更改。
(5)在完整的电子邮件社交网络中,与非开发人员相比,开发人员更可能扮演 gatekeeper 或 representative 的角色。
(6)同一模块内的开发人员之间经常进行密切沟通。
(7)开发人员贡献的模块越多,彼此之间的交流就越多。
(8)网络的中心性和协调性之间存在着显着的关系(开发了一个文本挖掘应用程序,以使用从电子邮件数据集中提取的信息来衡量每个开发人员的协调活动。)。
DSN 中的 SNA 指标和其他观察结果与软件开发中的协调有关。除了提交更改之类的活动外,在 DSN 上分析的结果还与项目中的其他功能相关。例如,中心性与项目的规模有关;DSN 的属性与 DSN 中包含的开发人员类型有关。
应用程序
DSN 已广泛用于与软件开发相关的某些应用程序中。从功能的角度来看,这些应用程序可以大致分为两类,即基于预测模型的应用程序和基于建议模型的应用程序(请参见图 2)。
图 2 两组应用程序
1 基于预测模型的应用
在接下来的部分中,我们首先描述了基于预测模型的应用程序,基于预测模型的应用程序通常包含 5 个步骤。
(1)数据收集:为了构建 DSN,需要收集软件开发过程中的相关信息,包括开发人员之间的通信,开发人员对组件的贡献以及组件之间的依赖关系(例如模块、文件、软件包、函数、二进制文件、片段等)。
(2)DSN 构建:在 DSN 中,节点代表开发人员或组件,边则代表节点的连接,例如通信,贡献和依赖性等。就所使用的信息而言,DSN 可以称为贡献网络、通信网络、协作网络和依赖网络等。
(3)DSN 分析:用于测量 DSN 的度量标准可以分为两种类型,即复杂性度量标准和网络度量标准。
(4)回归模型或分类器:为了进行预测,首先需要在训练数据上构建回归模型或分类器,然后再使用回归模型或分类器。根据不同的要求,可以选择不同的回归模型或分类器,包括负二项式回归、泊松回归、逻辑回归、贝叶斯分类器和朴素贝叶斯等。
(5)评估结果:大多数研究广泛使用精度和召回指标来评价分类和预测的结果。此外,还使用其他指标,例如 AUC(ROC 曲线下的面积)、准确性和 F-score。
2 基于推荐模型的应用
与基于预测模型的应用程序不同,在基于推荐模型的应用程序中,可以计算和排列开发人员推荐的相似性。共有三种类型的相似性:开发人员之间的相似性,项目之间的相似性以及开发人员和项目之间的相似性。这些相似性信息可以支持开发人员推荐和错误分类,或者仅用于构造 DSN(将相似性视为边的权重)。由于一般推荐系统技术通常与一般社交网络分析相结合,因此在 DSN 领域已进行了类似的研究。计算相似度的常用方法包括协作过滤、SQL Server 的全文本搜索算法和重新启动随机游走(RWR)等。
3 缺陷预测
缺陷预测是一个过程,其中使用历史数据来确定之后最有可能发生故障的组件。组件缺陷的预测可以支持管理人员调整其行为并降低测试成本。
3.1 基于从流失信息和依赖关系中提取的 DSN 进行缺陷预测
在 DSN 中,客户流失信息可以反映开发人员对组件的贡献,例如注释、提交、更新等。组件之间的依赖关系包括类继承或耦合、函数依赖等。用于构造 DSN 的数据来自修订控制存储库、错误跟踪系统、邮件列表等。
3.2 基于从定量分析中提取的 DSN 进行缺陷预测
研究人员采用两种定量分析来构建 DSN,即组织结构的定量分析和所有权的定量分析。
4 缺陷分类
错误分类旨在为新的错误报告分配合适的开发人员。为了避免昂贵的人工维护成本,近年来,一些研究人员促进了 DSN 的错误分类。
(1)基于开发经验的建议: 具有 k 最近邻搜索和专家评级(DREX)的开发人员推荐,以向开发人员推荐新的错误。专业知识由 PageRank 和 DSN 中的度数来衡量。推荐的开发人员可以分享对解决所报告的错误的兴趣或潜在知识。
(2)基于把图的错误分类: 错误抛弃是一种错误报告,在第一次分配错误报告后重新分配。把图被证明可以有效地提高错误分类的准确性。
(3)根据 DSN 中开发人员的重要性进行错误分类: 除了把图之外,还对开发人员在 DSN 中的重要性进行了定量分析,以提高错误分类的准确性。开发人员在 DSN 中的重要性与开发人员的贡献及其作品的有效性有关。在此区域中,贡献涉及代码提交,对错误报告的注释等。
5 错误修复
基于 DSN 的错误修复的研究,包括 DSN 的属性与错误修复过程的有效性之间的关系分析,以及跨系统的错误修复。
研究意义
DSN 已显示出其在改善软件工程任务中的作用。使用 DSN 必须满足一些条件。首先,应收集一些信息以构造 DSN。在文献中,已经使用了很多信息,包括电子邮件存档、源代码、代码更改日志、错误报告日志等。其次,所有收集的信息都应与正在解决的任务相关。例如,在错误分类任务中,开发人员对错误报告的评论表明了开发人员的共同兴趣和技能。因此,可以使用此类注释来构造 DSN,以向开发人员推荐新的错误报告。
DSN 可以在软件工程中工作的主要原因有两个。首先,在 DSN 中捕获了一些传统软件工程中未使用的特殊信息。这些新信息包括客户流失信息、依赖关系、组织结构和所有权的定量分析、把图。借助基于新信息的 DSN,人们可以发现和挖掘一些潜在的关系,从而揭示软件开发的本质。因此,DSN 可以用于实现某些特定任务的更好结果。其次,其他社交网络的新进展为 DSN 带来了更多新技术和概念,并最终促进了软件工程中的任务。
DSN 的研究领域涉及很多学科,包括线性和逻辑回归模型、分类、协同过滤、向量空间模型等。未来研究人员可以在DSN 的新构造方法、DSN 的新分析方法与 DSN 的新应用上进行进一步研究。
致谢
本文由南京大学软件学院 2021 级硕士曹智豪翻译转述。
国家重点基础研究发展计划(973)项目(No. 2014CB340702);国家自然科学基金项目(No. 61170067, No. 61373013, No. 61370144);南京大学研究生院科研基金项目(No. 2013CL13)。