软件工程中的众包——模型,动机和挑战(软件开发众包)

软件工程中的众包——模型,动机和挑战(软件开发众包)

Latoza T D , Hoek, André van der. Crowdsourcing in Software Engineering: Models, Motivations, and Challenges.[J]. IEEE Software, 2015, 33(1):74-80.

摘要

众包正在改变软件的开发方式。本文调查了软件开发中众包的前景,讨论了众包参与到软件工程中的主要动机和工作模式并强调了未来这种模式将遇到的几个关键挑战。

模型

去审视软件开发过程中的众包模型,我们可以回归到Jeff Howe给众包下的原始定义:

众包指的是一个公司或机构把过去由员工执行的工作任务,以自由自愿的形式外包给非特定的(而且通常是大型的)大众网络的做法。

从中可以看出众包与其他外包工作区分开来的三个因素:

• 这项工作是通过大众网络进行征集的,基本上任何人都可以回应。

• 愿意参加工作的志愿者对需要​​完成工作的组织不了解。

• 参与工作的人群数量可能很大。

通过在公开招募的确切性质是什么以及它的发布方式,如何将整体任务分解为较小的任务,志愿者之间如何协作,以及其他此类仍未明确的因素上的变化,衍生出在软件开发中常用的各种众包模型。

1)对等协作生产

最古老和最知名的软件众包模型之一–开源。开源开发是对等协作生产的一个例子,在这种模式中,项目的控制权是分散的,即使项目有贡献也没有金钱报酬。项目的目标和范围由贡献者决定,而不是付费客户。

贡献者通常有机会获得新技术和经验,增强他们的声誉,并为好的项目做出贡献。要做到这一点,他们必须首先加快学习项目的用例,架构,设计和社会规范,这一过程可能需要数天或数周的时间。

也存在其他形式的对等协作生产。例如,在StackOverflow中,开发人员通过回答问题来分享专业知识。(你可能会认为这不是对等协作生产,因为提问者设立了目标。然而,提问者本身就是人群的中的一员,而不是另一个不同的群体。)

2)竞赛

第二个众包模式–竞赛。它类似于传统的外包,客户要求工作并支付完成费用。但是,他们将工人视为参赛者而不是合作者。首先,客户提出一个项目,之后由一个被雇佣且经验丰富的工人来将项目分解为一系列可能涵盖需求,架构,UI设计,实施和测试的竞赛。每个比赛再划分为可在几天内完成的任务。参赛者各自提供解决方案,再由经验丰富的工人选出优胜者,优胜者的方案被采用之后将得到报酬。

这一模式使客户可以获得多种解决方案,在不大幅提高成本的情况下带来更高质量的结果。该模式中的参赛者提交的多种输入最有价值。

3)微任务

该模型将工作分解为一组独立的微任务,每个微任务可以在几分钟内完成,并且它们共同构成了更复杂任务的解决方案。为了确保质量,可能会要求多个工作人员完成相同的微任务,并通过投票和其他机制选择最佳解决方案。

该模型的主要优势在于其极高的可扩展性。由于任务规模小且独立,因此可以将工作分配给合适大小的人群,从而可以快速完成大型任务。

众包维度

对等协作生产,竞争和微任务这三种模式的维度有重要差异。我们确定了模型变化的八个基本的正交维度(见表(1)),构建可以更普遍使用的众包模型的分类方法。

软件工程中的众包——模型,动机和挑战(软件开发众包)

表1 众包的维度

这些维度可以描述众包软件工程的一系列模型。表(2将)这些维度应用于对等协作生产,竞赛和微任务的具体示例系统。

软件工程中的众包——模型,动机和挑战(软件开发众包)

表2 将众包的维度应用于三个众包模型的具体实例

动机

1)缩短发布时间

提高开发速度是选择使用众包方式的常见原因。其中的关键在于并行性,许多工人共同努力一起为项目付出贡献,构成了一个有力的整体,然而个人或小团队就难以投入尽可能多的精力来检索漏洞或漏洞带来的不良影响。该动机适用于具有两个特征的模型。首先,必须将需求简单地分解为短期任务。其次,每项任务必须大部分都是自成一体的具有最小协调度的需求,让工人可以迅速做出贡献。

2)生成替代解决方案

生成替代解决方案将工作组织到自包含任务中,使多个工作人员能够独立完成相同的任务。由于工人具有不同的观点,背景和经验,因此会产生不同的解决方案。通过选择最佳替代方案或要求对多个方案进行去糟取精结合起来工作的方式,众包可以产生更高质量的解决方案。但并非每项任务都可以生成替代方案,例如在开源模式中,每个开发人员选择处理不同的开发任务。

3)雇佣专家

将大型开发任务分解为较小的任务可以使专业自由职业者的参与更加灵活。众包可能会减少对通才的内部开发人员的依赖或者必要时招募专家进入团队(通常需要大量的准备时间)。

4)多人参与

众包的定义特征是有多人参与。众包工作不是将工作分配给特定的某个团队或将其外包给分包商,而是通过大众网络的方式,让贡献者确定如何,何时以及贡献什么,即使众包模式的程度不同,但控制权仍然会提供给人群。

5)在工作的过程中学习

开发人员为开源可做出贡献的一个关键因素是需要学习新技术。他们可能想要学习一个新框架(例如,AngularJS)或通过阅读快速了解新项目的风格和一些代码并提供错误修复。不同的众包模式让开发人员以不同的学习模式学习新的知识。

挑战

1)如何发挥出众包真正的潜力

主要挑战是如何发挥出其真正的潜力。要进一步实现众包的诸多好处,就需要进一步分解任务,更大程度地参与众包平台。从本质上讲,这会涉及到我们是否可以增加人群规模,缩减任务,降低专业知识和协调需求。

2)如何分解任务

更重要的是,从众包运用最成功的许多任务中发现,这些任务都有明确的目标,并且只需要很少的上下文。众包的一个关键原则是,每个参与者都必须准确地了解要执行的任务。理解可以在多大程度上为更多的相互依赖的软件工作分解任务,以及弄清楚它所产生的潜在开销,这是一个关键的挑战。

3)暂未确定规范

即使找到分解方法,规范也会成为问题。可以要求众包吗?如果没有,是否可以在没有繁重开销的情况下进行详细说明?如何为各种开发任务创建众包的工作流程,并如何检查设计新工作的流程等等挑战。

4)带来软件行业的转变

越来越多的开发工作转移到流动的劳动力市场,这种转变可能会质疑长期以来对软件开发的基本信念,这种根本上的颠覆所带来的后果也是无法确定的。

致谢

此文由南京大学软件学院2019级硕士吉品翻译转述。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年5月13日 上午8:10
下一篇 2023年5月13日 上午8:20

相关推荐