A Survey of the Use of Crowdsourcing in Software Engineering

  • 作者
  • 摘要
  • 1 介绍
  • 2 背景
    • 2.1 众包
    • 2.2 众包软件工程
      • 2.2.1 众包软件工程的优势和发展趋势
    • 2.3 研究课题
  • 3 软件工程中的众包实践
    • 3.1 商业平台
    • 3.2 案例研究
  • 4 众包软件工程应用
    • 4.1 软件需求分析的众包
    • 4.2 软件设计的众包
    • 4.3 软件编程的众包
    • 4.4 软件测试和验证的众包
      • 4.4.1 软件测试的众包
    • 4.5 软件开发和维护的众包
      • 4.5.1 众包软件演进
      • 4.5.3 软件本地化的众包
    • 4.6 其他软件工程活动的众包
  • 5 议题和开放问题
    • 5.1 理论与模型基础
    • 5.2 任务分解
    • 5.3 计划和调度
    • 5.4 激励和报酬
    • 5.5 质量保证
    • 5.6 未探索的问题
  • 6 机遇
    • 6.1 谁是群体?
    • 6.2 推测性众包软件工程
    • 6.3 混合众包软件工程
    • 6.4 多众包软件工程
    • 6.5 迭代众包软件工程
  • 7 总结
  • 致谢
  • 参考文献

作者

Ke Mao, Licia Capra, Mark Harman and Yue Jia
University College London
{k.mao, l.capra, m.harman, y.jia}@cs.ucl.ac.uk

摘要

众包可以用来支持软件工程活动和对这些活动的研究。本文对利用众包支持软件工程活动(众包软件工程)的情况进行了全面的调查,以期涵盖有关这一主题的所有文献。我们描述了面向众包的软件工程领域、任务和应用程序,以及实现众包软件工程解决方案所涉及的平台和利益相关者。我们还揭示了众包软件工程的趋势、问题和机遇。

1 介绍

众包是一种新兴的基于人机结合的分布式问题解决模型。“众包”一词由Howe和Robinson于2006年共同创造[2]。根据本文中被广泛接受的定义,众包是一个组织使用公开召集(open call)将其工作外包给未定义的网络化劳动力参与的行为。

众包软件工程更普遍地来源于众包。它利用公开召集形式来招募全球在线软件工程师,处理各种类型的软件工程任务,如需求提取、设计、编码和测试。据称,这种新兴的开发模式通过增加并行性[3]–[5]来缩短上市时间,并通过灵活的开发能力降低成本和缺陷率[3]。众包软件工程由许多成功的众包平台实现,如TopCoder、AppStori、uTest、Mob4Hire 和TestFlight。

众包模式已应用于各种基于创意和设计的活动[6]–[10]。众包软件工程也迅速在工业界和学术界获得越来越多的关注。我们的调查显示,最近在众包软件工程方面的工作有了显著的增长,然而许多作者写道,在软件工程方面/在众包方面的工作很少[5],[11]–[15]。这些作者可以很容易地理解这种误解,因为该领域正在迅速发展,涉及到软件工程的许多不同方面,从而形成了一种传播到许多不同软件工程应用领域和领域的文献。这促使我们需要一个全面的调查,比如我们在这里介绍的调查。

我们的调查目的有两个方面:第一,对众包软件工程领域的当前研究进展进行全面调查。第二,总结众包软件工程面临的挑战,并揭示现有工作在多大程度上解决了这些挑战。

对所有与众包软件工程相关的出版物进行全面调查的目的,需要仔细而彻底的纸面选择过程。我们采用的过程借鉴了系统性文献综述的惯例[16],[17]。具体来说,我们遵循以下三个步骤:

首先,我们定义了被调查论文的包含标准:在我们的调查中是否包含一篇论文的主要标准是,此文描述了可以为软件工程过程中涉及的任何活动服务的众包研究。此外,调查中的论文必须以英文呈现,如会议论文、期刊论文、论文、技术报告或书籍。

我们对2015年4月之前发表的相关论文进行了三种类型的搜索:

  • 使用七个主要搜索引擎进行在线图书馆搜索:ACM Digital Library, IEEE Xplore Digital Library, Springer Link Online Library, Wiley Online Library, Elsevier ScienceDirect, ProQuest Research Library 和 Google Scholar。附录A中列出了我们使用的搜索查询列表。我们在论文的标题、摘要和索引术语中搜索了这些查询。
  • 2006年1月至2015年3月软件工程主要会议记录和期刊逐期检索。此过程是手动执行的,以查找上一步骤无法检索到的相关论文。表1列出了搜索到的具体会议记录和期刊。
  • 参考文献搜索,通过从包含的论文中的引文来识别漏掉的论文(滚雪球)。

表1. 人工搜索的精选会议记录和期刊缩写

Abbr. Source
ICSE International Conference on Software Engineering
ESEC/FSE European Software Engineering Conference and the ACM SIGSOFT Symposium on the Foundations of Software
OOPSLA Conference on Object-Oriented Programming Systems, Languages, and Applications
ASE International Conference on Automated Software Engineering
ISSTA International Symposium on Software Testing and Analysis
ICST International Conference on Software Testing, Verification and Validation
RE International Requirements Engineering Conference
CSCW Conference on Computer-Supported Cooperative Work and Social Computing
ISSC International Symposium on Software Crowdsourcing
CSI-SE International Workshop on Crowdsourcing in Software Engineering
TSE Transactions on Software Engineering
TOSEM Transactions on Software Engineering Methodology
IEEE SW IEEE Software
IET IET Software
IST Information and Software Technology
JSS Journal of Systems and Software
SQJ Software Quality Journal
SPE Software: Practice and Experience

最后,我们进行了筛选过程,通过删除任何不属于众包软件工程范围的文件来过滤收集的文件。我们仔细而彻底地阅读论文,再次应用包含标准并手动筛选出无关的论文。筛选过程结束后,留下203篇论文,并被选入本次调查。出版物的增长趋势如图1所示。这些论文的出版类型分布和硕士/博士论文的具体列表分别见图2和表2。可以看出,关于众包软件工程的出版物数量显著增加,因此我们在本次调查中深入研究了大量的文献。


图1. 2015年4月之前发布的众包软件工程研究的累积增长


图2. 调查论文的出版类型

表2. 众包软件工程硕士和博士论文列表

Year Author Degree University Title
2010 Lim [18] PhD University of New South Wales Social Networks and Collaborative Filtering for Large-Scale Requirements Elicitation
2011 Manzoor [19] Master KTH - Royal Institute of Technology A Crowdsourcing Framework for Software Localization
2011 Kallenbach [20] Master RWTH Aachen University HelpMeOut - Crowdsourcing Suggestions to ProgrammingProblems for Dynamic, Interpreted Languages
2011 Leone [21] PhD ETH Zurich - Swiss Federal Institute of Technology Information Components as a Basis for Crowdsourced Information System Development
2012 Nag [22] Master Massachusetts Institute of Technology Collabourative Competition for Crowdsourcing Spaceflight Software and STEM Education Using SPHERES Zero Robotics
2012 Saengkhattiya et al. [23] Master Lund University Quality in Crowdsourcing - How Software Quality is Ensured in Software Crowdsourcing
2012 Gritti [24] Master Universitat Polit´ecnica de Catalunya Crowd Outsourcing for Software Localization
2012 Ponzanelli [25] Master University of Lugano Exploiting Crowd Knowledge in the IDE
2012 Phair [26] PhD Colorado Technical University Open Crowdsourcing: Leveraging Community Software Developers for IT Projects
2012 Bruch [27] PhD Technische Universit¨at Darmstadt IDE 2.0: Leveraging the Wisdom of the Software Engineering Crowds
2012 Goldman [28] PhD Massachusetts Institute of Technology Software Development with Real-time Collabourative Editing
2013 Mijnhardt [29] Master Utrecht University Crowdsourcing for Enterprise Software Localization
2013 Teinum [30] Master University of Agder User Testing Tool: Towards a Tool for Crowdsource- Enabled Accessibility Evaluation of Websites
2013 Starov [31] Master East Carolina University Cloud Platform for Research Crowdsourcing in Mobile Testing
2013 Chilana [32] PhD University of Washington Supporting Users After Software Deployment through Selection-Based Crowdsourced Contextual Help
2013 Wightman [33] PhD Queen’s University Search Interfaces for Integrating Crowdsourced Code Snippets within Development Environments
2013 Xue [34] PhD University of Illinois at Urbana-Champaign Using Redundancy to Improve Security and Testing
2013 Lin [35] PhD Carnegie Mellon University Understanding and Capturing Peoples Mobile App Privacy Preferences
2014 Schiller [12] PhD University of Washington Reducing the Usability Barrier to Specification and Verification
2015 Snijders [36] Master Utrecht University Crowd-Centric Requirements Engineering: A Method based on Crowdsourcing and Gamification

我们已经建立了一个存储库,其中包含我们收集的论文的元数据。元数据包括论文的作者、标题、出版年份和类型以及会议进程/期刊信息。正是基于这个知识库,我们对已审阅的论文进行了分析。此存储库在线公开。

我们还利用众包模式对本次调查本身进行了“众包检查”。我们通过电子邮件对作者公开召集,检查我们对他们工作的描述是否有任何错误或遗漏的信息。对于每一篇引用的论文,我们至少将本调查的副本分发给一位作者。我们共联系了303位作者,收到了83份回复。然后我们根据作者的评论进一步修订了这项调查。

本文的其余部分组织如下。第2节介绍了众包软件工程的背景信息。第3节介绍了众包软件工程的实用平台及其典型流程和相关案例研究。第4节提供了一个基于软件开发生命周期中应用领域的更细粒度的众包软件工程视图。第5节和第6节描述了当前问题、开放性问题和机遇。最后,第7节总结。

2 背景

我们首先回顾众包的定义(一般来说),然后再进一步完善我们对众包软件工程的关注。

2.1 众包

“众包”一词最早发表在2006年6月的《连线》杂志文章《众包的兴起》上,作者是Jeff Howe[2]。在本文的一篇博客文章[1]中,这个术语被明确定义为:

“众包是指一家公司或机构将原本应由工人执行的某项工作,以公开召集(open call)的形式将其外包给一个未知的(通常是庞大的)网络化群体。”

根据这一定义,未知的、庞大的网络化劳动力和公开召集形式是众包的两个先决条件。Howe认为,众包工作可以通过合作或由个人完成[2]。

这一想法与早期的《群体的智慧》一书相呼应[37],也在开源软件(OSS)开发的原则中找到了一些共鸣[38]。事实上,尽管“众包”一词最近引起了人们的极大关注,但在许多早期的尝试中,人们都可以找到潜在的概念,即通过公开召集手头的特定任务,招募大量有适当技能但未知的工人。例如,我们可以将众包的起源追溯到1714年的经度竞争,当时英国政府宣布了一个公开召集(有奖金),要求开发一种精确测量船只经度的方法[39]。

谈到在线众包,早期的基于互联网的众包活动可以在2001年找到,当时“InnoCentive”[40]由Eli Lilly提供资金,吸引来自公司外部的群体劳动力来协助药物开发。同年,TopCoder[41]平台由Jack Hughes推出,作为一个使用众包进行软件开发的市场。为了方便在线分布式软件开发活动,提出了TopCoder开发方法和系统[42]。在撰写本文时,TopCoder是世界上最大的众包软件工程平台。到2015年3月,它的软件工程师社区已经有75万人,并且已经为它促进的众包软件工程任务提供了超过67000000美元的货币奖励。

众包还有许多其他的定义,它们有细微的差别和,我们在这里回顾一下。在Brabham 2008年的文章[43]中,众包被视为分布式生产和解决问题的在线模式。关于众包的维基百科页面[44]引用了2011年《韦氏词典》(Merriam Webster dictionary)中的定义[45]。它强调的是庞大的工人群体和一个在线社区,但没有提及“未知的劳动力”和“公开召集”形式[46]。Estell’es Arolas等人[47]从2006-2011年发表的32篇文章中收集了40个定义,并提出了一个综合定义。此定义与我们介绍的定义兼容,并指定了工人和请求者之间的互利关系。基于这些以前的定义,我们可以识别四个共同特征,涉及众包:开放的生产权利,劳动力的灵活性,参与者意志的自由和利益相关者之间的互惠互利。

所谓众包的好处包括容易接触到各种各样的工人、各种各样的解决方案、较低的劳动率和缩短上市时间。众包任务的粒度可以像图片标记一样细粒度,也可以像软件开发一样粗粒度[48],[49]。已经编制了160多个众包项目的清单[50](使用众包来编制清单)。

众包已广泛应用于各个学科,如蛋白质结构预测[6]、[51]、药物发现[7]、[52]、运输规划[8]、[53]、天气预报[9]、[54]、信息检索[10]、[55]和软件工程[5]、[11]、[56]–[59],我们现在转向这些学科。

2.2 众包软件工程

我们使用“众包软件工程”一词来表示众包技术在支持软件开发方面的应用(广义上)。一些作者在以前的研究中称之为“众包(Crowdsourced)软件开发”、“众包(Crowdsourcing)软件开发”和“软件众包”[5]、[60]—[66],但我们更喜欢使用“众包软件工程”一词,因为它强调了所包含的任何软件工程活动,因此包含了不一定生产软件本身,例如需求获取、测试用例优化和项目规划。

然而,尽管我们的定义包含了所有软件工程活动,但我们希望将众包软件工程与碰巧由众包支持的软件工程研究活动区分开来(见图3)。任何涉及人类对象的研究都有可能得到众包技术的支持,也就是说,可以使用众包技术来识别和招募适合实验的人类对象。在众包(用于研究)的这一应用中,重要的是确定用于实验的人类对象,而不是研究特定的研究主题。

图3. 众包和软件工程

如果研究主题恰好是软件工程,那么这项工作对软件工程师来说将是有趣的,但是所产生的原理和问题将与涉及人类对象的其他研究中所产生的原理和问题更加相似(和相关)。我们称这种众包应用为“软件工程研究的众包”,以区别于众包软件工程。本文对众包软件工程进行了全面的综述。虽然我们也调查了这一主题的完整性,但我们并没有宣称将众包作为软件工程研究的一个全面内容。此外,如图3所示,软件工程技术也可用于支持通用众包[67],此类研究不在本次调查的范围内。

尽管众包在各种软件工程任务中得到了广泛的应用,但对众包软件工程的概念却鲜有明确的定义。根据我们的分析(如表3所示),68%的调查论文使用(或回应)众包的概念,而没有引用任何定义。在引用定义的34%中,使用最广泛的定义是我们之前描述过的Howe的定义(18%)。在我们审查的203份出版物中,只有两份明确地定义了众包的含义,将其具体应用于软件工程活动[5],[68]。

表3. 引用的众包定义

Def. None Howe Wiki Own Other
Count 138 (68%) 37 (18%) 4 (2%) 7 (3%) 22 (11%)

Stol和Fitzgerald的定义[5]将Howe的众包定义细化到软件开发领域,要求未知的劳动力具备必要的专业知识。Dagstuhl研讨会报告的定义[68]被正式化为关于软件众包的维基百科页面[69]。它还规定了软件开发的任务,根据这些任务,劳动力可以包括任何人,但没有提到大量潜在劳动力的特点。

由于Howe的定义是我们调查的论文中最广泛接受的众包定义,我们选择将众包软件工程定义为Howe定义的一个实例,如下所示:

众包软件工程(Crowdsourced Software Engineering)是由一个未知的、潜在的大型在线工作组以公开召集形式执行任何外部软件工程任务的行为。

众包软件工程通常涉及三种类型的参与者(或利益相关者):雇主(又称请求者(Requesters)),他们有需要完成的软件开发工作;工人(Workers),他们参与开发软件。还有平台(Platforms),这提供了一个在线市场,在这个市场中,请求者和工人可以见面。图4简要描述了这三种类型的参与者和众包软件工程的一般过程。

图4. 众包软件工程的参与者

2.2.1 众包软件工程的优势和发展趋势

与传统的软件开发方法相比,众包软件工程有许多潜在的机会。众包可以帮助软件开发组织整合有弹性的外部人力资源,降低内部雇佣成本,并利用分布式生产模式加快开发过程。

例如,与传统的软件开发相比,TopCoder的众包软件开发实践被认为能够在更短的时间内以更低的成本交付客户要求的、缺陷率更低的软件资产[3]。TopCoder声称[70]与内部开发或外包相比,他们的众包开发能够降低30%-80%的成本。此外,在TopCoder American Online案例研究[3]中,据报道,与传统的软件开发实践相比,缺陷率要低5到8倍。

在《自然生物技术》(Nature Biotechnology)[71]上发表的另一项研究中,哈佛医学院采用众包软件工程来改进DNA序列间隔比对搜索算法。与美国国立卫生研究院(National Institutes of Health)的MegaBLAST相比,经过两周的开发期,最佳群体解决方案能够获得更高的精确度和3个数量级的性能提升。

众包软件工程越来越受欢迎,主要围绕其对三个不同利益相关者的吸引力:

  1. 请求者:众包软件工程正被公司和组织广泛接受,从军事领域、学术机构到大型IT公司。DARPA为软件正式验证创建了众包正式验证(CSFV)程序[72],并启动了Verigames网站以促进实践[73]。NASA和哈佛商学院建立了NASA锦标赛实验室,为NASA系统提供众包软件解决方案[74]。微软在Office2010[75]、Windows8.1[76]和Windows10[77]中的部分众包软件开发活动。
  2. 工人:根据Masssolution[78]的一份行业报告,2011年从事软件众包的工人数量增加了151%。
  3. 平台:为软件开发领域构建的众包平台越来越多,如AppStori[79]和Mob4Hire[80]。这些商业平台将在第3节中进行更详细的描述。

近年来,随着相关出版物的不断增加,众包软件工程的发展前景也日益明朗,如图1所示。众包软件工程也被证明为学生论文提供了一个有吸引力的话题。具体来说,203种出版物中有20种是硕士/博士论文。这些论文的详细清单见表2。

2.3 研究课题

为了对论文进行分类,我们首先对收集到的203篇论文进行了仔细的分析,根据它们的研究类型,揭示了四个顶级类别:实践研究、理论与模型研究、在软件工程中的应用和软件工程研究的评价。我们参考了ACM计算分类系统[81]、IEEE软件工程标准分类法[82]和2014 IEEE关键字分类法[83],为这四个顶级类别中的每一个类别制定子类别。具体来说,对于软件工程的应用程序,我们根据应用程序处理的软件开发生命周期的不同阶段创建了子类别。研究课题的详细分类方案如图5所示。


图5. 软件工程(SE)众包研究分类方案

我们对收集到的论文进行人工分类,并将它们分为每一类。三位作者对分类结果进行了交叉检验,分类准确率达到91.2%。研究主题的文献分布如图6所示。最突出的类别是软件工程应用(62%),其次是理论研究(20%)和实践研究(15%)。一些研究(在我们的论文集中占3%)使用众包来评估软件工程研究。此类出版物的元信息中不能使用众包相关关键字。我们为相关研究进行了额外的人工检索。尽管如此,可能还有更多的论文属于这一类,但在我们的调查中仍然没有发现;这一类并不是我们调查的重点。


图6. 课题分布

3 软件工程中的众包实践

在本节中,我们将描述最流行的众包平台以及典型的软件工程众包开发过程。由于我们在论文中收集的大多数案例研究都是基于这些商业平台中的一个(或多个),因此在本节的第二部分,我们将介绍有关众包软件工程实践的相关案例研究。

3.1 商业平台

现有的支持软件工程的商业众包平台如表4所示。其建立年份的时间线在图7中示出。这些平台采用各种类型的开放呼叫格式,例如最广泛使用的在线竞争(online competition)、按需匹配(on-demand matching)(其中工人是从注册者中选择的)和在线竞价(online bidding)(其中开发人员在开始工作之前竞价完成任务)。这些平台还专注于软件工程中广泛的任务领域。TopCoder和GetACoder等平台支持多种类型的软件开发任务。其他的则更具体。例如,uTest和BugCrowd分别用于软件测试和安全性分析。还有一些通用的众包市场,如Amazon Mechanical Turk、oDesk和Freelancer,这些市场不是专门为软件工程设计的,但是可以用来支持各种软件开发任务。

表4. 众包软件工程商业平台列表

Platform URL Task Domain Open Call Form
TopCoder www.topcoder.com Software Development Online Competition
GetACoder www.getacoder.com Software Development Online Bidding
AppStori www.appstori.com Mobile App Development Crowd Funding, Online Recruiting
Bountify www.bountify.co Small Coding Tasks Online Competition
uTest www.utest.com Software Testing On-demand Matching, Online Competition
Passbrains www.passbrains.com Software Testing On-demand Matching
99Tests www.99tests.com Software Testing On-demand Matching
TestBirds www.testbirds.com Software Testing On-demand Matching
Testbats www.testbats.com Software Testing On-demand Matching
Pay4Bugs www.pay4bugs.com Software Testing On-demand Matching
CrowdTesters www.crowdtesters.com.au Software Testing On-demand Matching
TestFlight www.testflightapp.com Mobile App Testing On-demand Matching
Mob4hire www.mob4hire.com Mobile App Testing Online Bidding
Testin www.itestin.com Mobile App Testing On-demand Matching
Ce.WooYun ce.wooyun.org Software Security Testing On-demand Matching
Bugcrowd www.bugcrowd.com Software Security Testing Online Competition


图7. 时间线描绘了主要的众包软件工程平台的建立

不同的平台也可以使用不同的流程模型。在本小节的其余部分中,我们将介绍众包软件工程的典型商业平台及其流程:

  1. TopCoder:作为众包软件工程的先驱,TopCoder有其独特的过程和开发模式。它被称为TopCoder竞争法(TopCoder Competition Methodology)[84]。该平台可以支持独立的图形设计、开发、数据科学挑战,以及复杂软件的开发(通过分解成多个子任务)。从顶层来看,系统过程可能类似于瀑布模型。然而,每一个开发阶段都是通过一系列的在线竞争来实现的,在这些竞争中,众开发者相互竞争。只接受合格的中标方案。合格的输出被用作后续开发阶段的输入。在这种情况下,“合格”意味着通过最低验收分数,通过评审过程评定。
    系统开发过程从需求阶段开始,确定项目目标、任务计划和预算估算。这是通过项目经理(可能来自群体或平台)和请求者(为群体提供的解决方案付费)之间的沟通来实现的。这个阶段包括几种类型的竞赛,如概念化、线框、故事板、UI原型和规范。此阶段的结果是一组需求规范。这些需求被用作后续架构阶段的输入,在该阶段中,应用程序被分解为多个组件。
    每个组件进一步产生设计和开发任务。设计挑战产生了一组文档,如UML图和组件规范。随后的开发挑战实现了相应的设计。开发的组件集成在一个组装阶段,并通过系统级测试进行认证。在随后的部署阶段,集成的解决方案被部署到请求者的质量保证环境中。最后,在通过一段时间的用户接受测试之后,将解决方案交付给请求者。对于进一步的维护,可以创建新的开发挑战来升级当前的解决方案,同时可以生成与bug相关的挑战来识别和/或修复bug。

  2. AppStori:AppStori是一个最新的众包移动应用开发平台。它的开发过程不同于TopCoder方法。它使用众筹模式为开发提供资金,并吸引应用程序开发人员和消费者密切合作。开发者群可以发布他们的项目,从群中筹集资金,或者招募其他开发者来实现应用程序。消费者可以为新的应用开发提出建议,贡献资金,充当beta测试者,并提供对现有项目的反馈。整个开发过程,从概念到发布,都是通过开发者和消费者群体之间的协作来实现的。

  3. uTest:uTest是众包软件测试的几种平台之一。它目前声称支持世界上最大的软件测试开放社区[85]。这些测试人员群体提供了广泛的虚拟按需测试服务,如功能测试、可用性测试、本地化测试和负载测试。众包测试流程是指客户可以指定其测试需求的阶段。该平台提供了测试设备、操作系统、地理位置和预算的灵活选择。从社区中选择合适的测试人员:每个项目都有一个对测试人员开放的调用,并且群体可以申请完成他们想要的测试任务。然而,只有合适的测试人员(根据他们以前的表现、技能、语言、测试设备、位置等进行评估)才可能被选中。被选中的测试人员实时报告他们的测试工作,并提交测试报告供批准。客户通常有责任审查提交的文件,并决定哪些工人有资格获得其工作的报酬。测试员群体通过平台支付,基于每个项目的基础。

其他更通用的众包平台也广泛应用于软件工程研究:

Amazon Mechanical Turk是一个流行的微任务众包市场。通过在平台上雇佣大量的工人来开发人工计算,小团队可以避免开发复杂软件系统的挑战[86]。该平台已用于支持软件工程中的程序综合[57]、图形用户界面(GUI)测试[87]、oracle问题缓解[88]和程序验证[11]。

StackOverflow[89]是一个问答网站,为软件开发人员提供众包编程知识。尽管这种群体知识对软件项目的开发没有直接贡献,但它对开源软件开发[90]、[91]以及传统的软件开发过程都有影响。它被用于改进集成软件开发环境[25]、[92]–[96]和软件API文档[97]、[98]。

Bountify是一个类似StackOverflow的平台。但是,它有更多的“自包含”的微编程任务。每人将得到一定数额的款项,从1美元到100美元不等。程序综合的研究[57]利用这个平台为它们的遗传规划算法获得初始种子。

一些研究提供了现有的商业平台软件工程的进一步信息。软件众包平台简介[99]简要总结了协同软件开发的几种平台,并将众包软件开发与专有软件开发、外包软件开发和开源软件开发进行了比较。Fried等人[100]总结了软件行业的三种众包平台:支持以廉价方式使用人类知识的平台,如Amazon Mechanical Turk[101];支持基于竞赛的软件开发的平台,如TopCoder;以及支持以独特的“竞争协作”功能。Wu等人[61]提出了从成本、质量、解决方案多样性和群体竞争等多个目标评估软件众包过程的评估框架。采用博弈论中的“最小-最大”(防御-进攻)机制来评价竞争关系。基于提出的评价框架,对TopCoder和AppStori软件众包过程进行了对比分析。

3.2 案例研究

近年来,大量的众包软件工程案例研究被报道。大多数基于上述一个或多个商业平台。其中,TopCoder平台拥有文献[3]、[5]、[22]、[62]、[65]、[103]–[105]中报道的最多案例研究。

Stol等人[5] 以一家拥有使用TopCoder众包软件开发经验的客户公司为例进行了深入的案例研究。通过与客户公司的访谈,确定了与TopCoder开发过程相关的一系列问题。例如,该平台通常遵循瀑布模型,这给采用敏捷开发模型的客户公司带来了协调问题。此外,在TopCoder开发过程中,质量问题被推到了后期阶段,这并不是最佳实践。研究方案[14]包含可用于复制研究的本案例研究的设计细节。基于本案例研究的经验教训,作者进一步阐述了自己对众包软件开发的建议[106]。

Tajedin和Nevo[65]也以访谈的形式进行了深入的案例研究,但从TopCoder的管理团队而不是客户的角度进行了研究。案例研究揭示了众包平台中存在的两种增值行为,即宏观、市场层面和微观层面、交易层面的行为。

Wu等人[62]强调了从他们收集的软件众包数据中汲取的经验教训。研究了TopCoder和AppStori采用的两种众包软件开发过程。本文认为,“最小-最大”竞争行为有助于众包软件开发的质量和创造性。

Nag等人[104]报告了他们与TopCoder合作,为SPHERES Zero机器人项目开发众包源航天软件[107],该项目得到了美国宇航局、DARPA和极光飞行科学的支持。该程序还被用作众包导航软件的平台,用于卫星控制[108]。获奖者的解决方案在国际空间站的SPHERES卫星上得到了验证。Nag的硕士论文[22]对这个案例有更详细的描述。

Lakhani等人[3] 描述了TopCoder从2001年到2009年的发展,包括平台和社区的演变,从客户的角度来看的好处和关注点,以及TopCoder开发过程的管理角色和挑战。

Archak[103]对开发人员在TopCoder上的战略行为进行了实证分析。在竞赛报名阶段,人们发现了“便宜话”现象,即为了缓和竞争,评分高的开发商往往提前报名参加竞赛,从而试图阻止对手寻求参与市场。Archak认为,廉价对话现象和TopCoder使用的信誉机制有助于提高同时在线比赛的效率。此外,还进行回归分析,研究影响比赛产出质量的因素。付款和需求因素的数量被确定为最终提交质量的重要预测因素。Li等人[105]还对TopCoder进行了案例研究,以确定重要的质量因素。

关于基于TopCoder以外的平台的案例研究:Zogaj等人[15] ,[110]在一个名为testCloud的德国初创群体测试平台上进行了一个案例研究。案例研究强调了三种挑战:管理群体、管理过程和管理技术。Bergvall Kareborn和Howcroft[111]回顾了苹果众包移动应用的商业模式。通过报道三个国家苹果移动应用开发者的实地调查,他们展示了苹果如何从众包中获益。

一些案例研究侧重于众包软件开发中特定地区的实践。例如,一个案例研究[66],[112]介绍了巴西IT行业众包多年研究的初步结果。这项研究报告了一些访谈,强调了人们对软件众包的认识普遍较低以及对众包软件质量的担忧。Phair的博士论文[26]报道了一个定性案例研究,该案例研究使用众包软件开发为一个非盈利组织实现一个web应用程序。确定了诸如可衡量的成本节约和提高在多个项目上工作的能力等好处。其他一些案例研究报告了软件众包在特定领域的实践,如众包蛋白质组学软件开发[113]和众包电子政务软件开发[114],[115]。

4 众包软件工程应用

软件工程的众包应用程序根据与之相关的软件开发生命周期活动呈现为多个子部分。主要包括以下几个阶段:软件需求、软件设计、软件编码、软件测试与验证、软件演化与维护。众包软件工程的研究概况见表5。这些研究中的商业和实验性众包平台遵循图8中的分类方案。

表5. 众包在软件工程中的应用研究综述

SE Phase SE Task Why Bespoke Tool Stakeholder Ref.
Requester Platform Worker
Requirements Requirements Acquisition Cost, User needs, Domain knowledge, Automation, Quality StakeSource, StakeSource2.0, StakeNet, StakeRare, iRequire Requirements engineers, Designers, Software teams, Researchers Email, StakeSource, StakeSource2.0, StakeNet, StakeRare, CrowdREquire, UDesignIt, Bespoke, AOI, AMT All stakeholders, Users, Undefined crowd [56], [116]– [131]
Requirements Categorisation User needs None Requirements engineers, Designers Unspecified Users [123], [124]
Design User Interface Design User needs, Quality, Diversity None Designers, Nontechnical end users Bespoke, AMT, CrowdDesign, Email Users [132]–[135]
Architecture Design Quality, Diversity None Researchers Email Designers [134]
Design Revision Quality, Diversity None Researchers Email Designers [134]
Coding IDE Ehancement Debugging, API aid BlueFix, Calcite, Example Overflow, Seahawk, Prompter, SnipMatch Developers HelpMeOut, Stack Overflow, oDesk Developers [20], [25], [27], [33], [92]–[96], [136]–[143]
Program Optimisation Human solutions None Developers, Researchers Bountify, AMT Developers, Undefined crowd [57]
Crowd Programming Support Automation, Human solutions Jabberwocky, AutoMan, TurKit, CrowdLang, CIDRE, Collabode Developers, Teachers Bespoke, AMT, Code Hunt, CrowdCode Users, Developers [28], [144]– [153]
Testing Usability Testing Cost, Time CrowdStudy Testers CrowdStudy, Bespoke, AMT, CrowdFlower Users [30], [154]– [159]
Performance Testing Real-world measure None Client companies Lync Users [160]
GUI Testing Cost, Scalebility None Testers AMT Undefined crowd [87], [161]
QoE Testing Cost, Diversity Quadrant of Euphoria Researchers Quadrant of Euphoria, Bespoke, AMT, Microworkers Undefined crowd [162]–[165]
Test Generation Human inputs PAT Testers, Researchers Twitter Undefined crowd [166], [167]
Oracle Problem Mitigation Human solutions, Automation None Testers, Researchers AMT Qualified / Unqualified crowd [88]
Crowd Testing Support Human inputs CrowdBlaze Testers, Researchers Bespoke, AMT, Mobileworks, Email Undefined crowd [34], [168], [169]
General Evaluation User needs, Diversity None Researchers Bespoke, AMT Users [170]–[172]
Verification Non-expert Verification Cost, Speed Verification Games, VeriWeb Developers, Researchers Bespoke, AMT, vWorker Undefined crowd [11], [12], [173], [174]
Evolution Software Adaptation User needs, Cost, Diversity, Speed MoWA, CrowdAdapt Developers, Designers, Users, Researcher Bespoke, Facebook, Online community Users [120], [175]–[185]
Maintenance Software Documentation Domain knowledge COFAQ Developers, Researchers Q&A, Stack Overflow, SciPy Community Developers, Researchers [97], [98], [140], [186], [187]
Software Localisation Domain knowledge, Cost, Speed None Developers, Researchers AMT Undefined crowd [19], [24], [29], [188]
Other Security and Privacy Augmentation Diversity, Domain knowledge, User needs Crowdroid, ModdingInterface Developers, Researchers Android User Community Users [35], [189], [190]
End User Support Domain knowledge LemonAid Developers, Researchers AMT Users [32], [191], [192]
Software Ideation User needs, Open innovation, Recruitment SAPiens, IdeaMax Client Companies Repurposed, Bespoke Users [193]–[196]


图8. 众包软件工程平台方案(斜体文本表示试验/非商业平台)

图9示出了引入各种想法和概念的时间表。例如,从2009年开始,众包被用来帮助软件的发展和本地化。最近,众包模式被用于程序综合。其他能够反映众包软件工程发展的重要事件和理论/实践研究也在时间表中说明。


图9. 众包软件工程开发时间表(“*”表示平台的建立。“~”表示第一次实践/理论研究,“-”表示第一次应用工作)

对于具有经验评估的众包软件工程研究,我们总结了表6中进行的实验,以揭示详细的实验设置和结果。总结之后,我们计算了众包软件工程实验中使用的群体规模、成本和平台的分布,分别如图10和图11所示。

表6. 应用论文中的众包实验综述

Phase SE Task Platform Crowd Size Application Effort Reward Result Ref.
Requirements Requirements Elicitation StakeNet Stakeholders 68 RALIC - - StakeNet can identify stakeholders and their roles with high recall, and can prioritise them accurately. [117]
Requirements Elicitation StakeRare Stakeholders 87 RALIC - - StakeRare can predict and prioritise stakeholder needs accurately. [121]
Requirements Extraction AMT Unskilled 76 - 448 classifications $0.15 per task The approach can reduce 60% cost and increase 16% coverage in manual extraction. [56]
38 - 135 classifications $0.15 per task
- - - $0.08-$0.10 per task
Design Architecture Design Email Students 20 An educational traffic flow simulation program avg. 12.9 h $100 each person + 4*$1000 prizes All participants borrowed others’ design ideas and most improved the design quality. [134]
User Experience Design 20 avg. 21.3 h
Coding IDE Enhancement StackOverflow SO community - 35 development tasks: 12 Swing, 12 Boost, 11 LINQ - - For 77.14% of the assessed tasks at least one useful Q&A pair can be recommended. [96]
IDE Enhancement Code Annotation oDesk Developers - Codex annotated 500 code snippets - Among the annotated snippets, 86% correspond to a useful programming task; 96% can be embedded into a standalone function, and 91% do not have another more common form. [143]
Program Synthesis Bountify Developers 5 Regular expressions wrote 14 regular expression $10 Consistent prgoram boosts in accuracy can be achieved with modest monetary cost [57]
AMT Unskilled 5 classified strings as valid or invalid $0.05-$0.25 per task
Testing System evaluation AMT Unskilled 65 Semantic search systems 579 HITs $0.20 per HIT, $347.16 in total Crowdsourcedevaluation tasks can be repeated over time and still maintain reliable results. [170]
69 421 HITs -
Usability Testing AMT Unskilled 11 A graduate school’s website 11 HITs $0.15 per HIT, $2.92 in total Reduced cost and time. However quality was worse compared to the testing in a lab. setting. [155]
AMT + CrowdFlower 44 44 HITs $0.20 per HIT, $347.16 in total
Usability Testing AMT Unskilled 28 A subpage of a university website avg. 4-5m to answer all 8 questions - The crowdsourced usability testing shared similar results with a laboratory setting. [157]
Usability Testing CrowdStudy + AMT Unskilled 93 A news article page 28 custom layouts, 143 ratings and 32 answers - The usefulness and the ability to be configured for different scenarios were demonstrated. [158]
84 Wikipedia website 33 different type tasks -
Performance Testing Lync End users 48000 Lync Usage behaviours 0 The approach had been successfully deployed and had improved development decisions at Microsoft. [160]
GUI Testing AMT Unskilled 100 Tribler 100 assignments, 28h58m $25 in total The approach was able to evaluate an experimental user interface feature within a few days at low costs. [161]
100 100 assignments, 28h38m $25 in total
GUI Testing AMT Unskilled 398 Tribler, KDE login, KDE mount, Xfce 700 assignments $0.10-$0.15 per HIT The approach is feasible and reliable, although there was a quality issue in continuous testing. [87]
QoE Testing Quadrant of Euphoria + AMT Unskilled - MP3 bit rate, VoIP quality, Video codec, Loss concealment 2130 runs of experiments $21.3 in total With consistency assurance crowdsourcing can yield results as well as laboratory experiments. [162]
QoE Testing Microworkers Unskilled 10737 Videos 10737 ratings $0.2625 per rating The proposed methods represented a step in making crowd-testing sufficiently mature for wide adoption. [163]
1593 1593 ratings $0.0834 per rating
Test Generation Twitter Unskilled 120 PAT avg. 1m per puzzle 0 84 of the top 100 constraint solving puzzles and 24 of the top 100 object mutation puzzles were successfully solved. [166]
Oracle Problem Mitigation AMT Unqualified - java.util.Stack 200 assignments $0.15-$0.20 per assignment CrowdOracles is a promising solution to mitigate the oracle problem, however geting useful results from an untrained crowd is difficult. [88]
AMT Qualified - java.util.Stack, Trove4J, ISO8583 500 assignments
Crowd Testing Support Mobileworks + Email End users 75 Video Hot Mix, Craigslist, Cnet, Amazon, Weather, Twitter, Evernote, Yelp - - Statically Aided Interactive Dynamic Analysis consistently obtained greater coverage than other techniques. [34]
Verification Non-expert Verification vWorker Developers 14 StackAr avg. 3 h $6-$22 per hour VeriWeb can save time and money with contracted workers. [11]
AMT Unskilled <10 - >$0.25 per HIT Current ad-hoc labours are not well-suited for verification.


图10. 实验中的群体规模(a)和任务成本(b)


图11. 实验中使用的平台

4.1 软件需求分析的众包

需求分析是一个被广泛接受的影响软件项目成功的关键步骤[197]。一系列的研究[56],[116]-[131]已经调查了众包已支持这一过程。

传统的利益相关者分析工具需要专家的手动操作来提取利益相关者的信息。Lim等人[116]提出StakeSource以确定参与利益相关者分析过程的众包利益相关者。这一工具旨在减少依靠专家与利益相关者接触的成本。这是对他们先前提议的StakeNet[117]的补充,后者通过社交网络推荐利益相关者。作者进一步改进了该工具,提出了StakeSource2.0[119]。新版本集成了识别涉众和确定其需求优先级的支持。StakeSource2.0用于自动化StakeRare方法的涉众识别和优先级确定步骤[121],这是一种基于社会网络分析和协作过滤技术的大规模需求获取方法。Lim和Ncube[127]随后展示了该工具在系统体系项目中的应用。这个工具在网上是公开的。

Hosseini等人[126]专注于利用众包来获取需求。他们通过回顾现有文献总结了众包需求工程中的群体和众包的主要特征。报告了对两个焦点组进行的调查的初步结果,以揭示这些特征与引出的需求质量之间的关系。Wang等人[129]也使用众包来获取需求,但重点是克服招募具有特定领域知识的利益相关者的问题。他们提出了一个基于时空可用性的参与者招募框架。理论分析和仿真实验证明了该框架的可行性。

利益相关者群体不仅是需求的来源,而且可以帮助确定需求优先级和发布计划。Nascimento等人[123]研究了基于Kano模型的众包在需求分类中的应用。该模型使用问卷帮助将需求分为五类。给定用户的每个需求的值都在其方法中确定。提出了一个寻找参与这一进程的利益相关者的框架。Nayebi和Ruhe[130]提出了分析性开放创新(AOI)方法来帮助开发人员做出发布决策。众包模式使AOI方法能够系统地从客户和其他利益相关者那里收集信息。一个说明性的案例研究被提出作为概念的证明来证明AOI方法的关键思想。

非专业群体已被用于处理需求文档。从大型自然语言文本源中手工提取需求是一项艰巨的任务。然而,经常需要这些数据作为评估的基本事实。这限制了评估的通用性,仅限于自动需求提取方法。Breaux和Schaub[56]进行了三项实验,涉及雇佣未经培训的群体工人从隐私政策文件中手动提取要求。实验结果表明,在任务分解工作流的帮助下,人工需求提取的覆盖率提高了16%,成本降低了60%。

为了支持众包需求工程活动,Adepetu等人[122]提出了一个名为CrowdREquire的概念化众包平台。该平台采用了一种竞赛模型,让群体相互竞争,向客户定义的任务提交需求规格说明解决方案。讨论了该平台的商业模式、市场战略和质量保证、知识产权等潜在挑战。

4.2 软件设计的众包

在现有的商业众包市场中,有许多支持软件界面设计的平台,如99designs、DesignCrowd和crowdSPING。然而,很少有研究报道使用众包进行软件设计的性能。

为了在线框图阶段为软件设计师提供启发性的例子,Huang等人[198]利用群体在移动应用程序线框和互联网上的设计示例之间进行映射。Lasecki等人[135]提出了一个名为Apparation的众包系统,以帮助设计师在草图和功能描述的基础上实时原型交互系统。实验结果表明,该装置对用户意图的判断准确率可达到90%以上,且仅需几秒钟就可做出响应。

更少的众包平台支持软件架构设计。TopCoder是一种应用广泛的平台。然而,像TopCoder这样的工业众包平台在从多个设计师的解决方案中进化设计方面有局限性[134]。LaToza等人[134]让设计师产生最初的设计,并根据其他人的解决方案发展他们的解决方案。他们的研究证明了重组在众包软件设计中的有用性。根据研究结果,提出了一些改进软件设计竞赛的建议。

Nebeling等人[133]还提议发展基于群体贡献的数据和功能的软件设计。然而,这些设计是web工程领域中的特定网站组件。通过两个初步实验验证了该方法的有效性。对群体激励、质量保证、安全和知识产权等问题也进行了简要讨论。

4.3 软件编程的众包

使用众包进行软件编码主要集中在三个子领域:集成开发环境(IDE)增强、众包编程环境和程序优化:

  1. IDE增强:自2010年以来,利用群体知识支持集成开发环境中的编码活动已经得到了广泛的研究。已经提出了一些工具和方法来帮助开发人员进行编码和调试[20]、[25]、[27]、[33]、[92]–[96]、[136]–[143],我们将分别介绍这些工具和方法:

    HelpMeOut[136]是一个社会推荐系统,可以帮助调试众包建议。该系统有一个数据库,用于存储群组开发人员构建的代码错误修复。为了收集修复,系统会自动跟踪代码随时间的变化,并记录使错误代码无错误的操作。评估是通过两个三小时的研讨会与新手开发人员一起进行的。结果表明,所提出的方法能够为47%的错误提供有用的修正建议。然而,HelpMeOut只支持静态的、编译的编程语言,比如Java。为了进一步支持动态的、解释性的web编程语言,提出了另一种工具Crowd::Debug[199]。

    开发者群体可以为软件系统提供补丁建议的想法在最近的遗传改进[200]-[203]工作中找到了强烈的共鸣,特别是在自动错误修复(AKA修补程序或自动程序修复)方面的工作[ 204 ]。遗传改良通过提出改进功能和非功能特性的修改来寻求自动改进软件系统。遗传改良将程序代码视为遗传物质,在自动搜索改良中加以操作。最近的研究结果表明,该技术的潜力提高了实际工作程序的速度[200] -[203],[205],能量[206] -[208]和动态存储器[209]的消耗和功能,通过修复错误[210]和添加新的特征[211]。自动修复的工作还收获了人类开发的补丁,以改进自动修复过程[212]。因此,有理由得出这样的结论:自动化维修和社会推荐系统(如HelpMeOut)的混合版本可能非常成功,我们将在第6.3节中重新讨论这个话题。

    BlueFix[139]是一个在线工具,为新手程序员提供有关编译器错误消息解释和理解的问题。对11名新手学生程序员进行了评估。结果表明,该工具能够帮助学生更快地修复编译时错误,与HelpMeOut相比,BlueFix的建议精度提高了19.52%。

    Calcite[137]是一个Eclipse插件,专门关注构造函数API的理解和正确使用。该插件使用一个数据库,通过从web收集代码,该数据库包含常见的对象构造示例。据报道,一项用户研究表明,这个插件可以帮助开发人员将完成率提高40%。

    Example Overflow[92],[140]是一个代码搜索系统,它利用来自问答(Q&a)网站的群体知识来建议高质量的可嵌入代码。这些代码片段是通过其公共API从Stack Overflow中收集的。搜索功能基于Apache Lucene。对编码任务子集的初步评价表明,系统建议的结果比在实验中研究的其他现有工具更好。

    Seahawk[25],[93]–[95]是一个Eclipse插件,其目标与Example Overflow有一些共鸣。它试图利用问答网站(如StackOverflow)中的群体知识来提供文档和编程支持。与Example Overflow相比,Seahawk将Q&A服务集成到IDE中,并提供了更友好的用户界面功能。例如,它在基于代码实体自动构造查询和提供交互式搜索结果方面表现得更好。它还解决了问答网站的局限性,即它们不支持在团队工作环境中利用其数据[93]。通过使开发人员能够通过独立于语言的注释将导入的代码片段链接到他们的文档,Seahawk可以帮助开发人员与他们的团队成员共享文档[95]。对Java培训课程中的35个练习进行了评估实验[94]。结果总体上是有希望的。尽管该工具可能并不总是建议使用有用的文档,但它有时会帮助开发人员获得令人惊讶的洞察力。

    Souza等人[96]还旨在利用StackOverflow的群体知识,但重点是提出潜在解决方案的排名方法。排名策略基于两个因素,包括问答对的质量和关于开发人员查询的文本相似性。在三个编程主题上进行了实验。结果表明,至少有一个建议的问题-答案对有助于77.14%的评价活动。

    WordMatchSnipMatch[33]是两个帮助开发人员集成众包代码片段的搜索工具。WordMatch提供了一个最终用户编程环境,允许用户(没有编程经验)直接生成搜索查询的答案。SnipMatch是一个基于WordMatch的Eclipse插件,它根据当前的代码上下文和开发人员的搜索查询检索定制的、排序的源代码片段。微软Visual Studio的一个类似插件是Bing代码搜索插件[213],它可以从互联网上检索代码片段。

    Amann等人[214]使用群体知识进行方法调用建议的调查。群体知识是从多个开发人员对api的上下文敏感使用的隐式反馈中收集的。基于这种反馈知识,采用协同过滤技术推荐方法调用。

    Bruch[27]提出了IDE 2.0的概念(基于web2.0的概念)。Bruch展示了群组知识如何帮助改进多种功能,如API文档、代码完成、错误检测和代码搜索。对每一个被提议的工具进行了评估,揭示了Web 2.0的概念可以用来改进开发人员的IDE。

    Fast等人[143]进行了一项与IDE2.0理念相呼应的研究。然而,它侧重于对紧急编程行为进行编码。通过构建一个基于知识的Codex,它包含了超过300万行流行的Ruby代码,构建了新的数据驱动接口。例如,Codex用于检测可能包含bug的异常代码,注释系统标识的流行编程习惯用法,并生成捕获新兴编程实践的实用程序库。根据Fast等人的说法[143],当前版本的拟议工具的局限性可能包括采用GitHub,这是唯一的培训数据源,它可能引入低质量的开源代码。

    使用群体知识从web上寻找常见的示例,与从基于web的系统中自动获取真实测试用例的工作共享相似之处[215],[216]。与遗传改良和社会推荐相结合的可能性一样,这种相似性也指出了交叉版本从群体和网络的组合中获取这些信息用于测试的可能性。

  2. 群体编程环境:一些其他研究集中在提供支持群体编码工作的系统上,而不是通过互联网采用群体知识来帮助传统的编码活动[28]、[144]–[148]、[152]、[153]、[217]。

    Goldman[145]提出了用于协调协作群体编码工作的特定角色接口。通过构建Collabode,一个实时的基于web的IDE,作者的目标是实现新兴的高度协作的编程模型,比如群体编程。鲍尔等人[148]演示了基于云的集成开发和运行时环境(CIDRE)的设计及其实现TouchDevelop[218]。CIDRE由三个组件组成:群体开发社区、在线IDE和应用程序商店。这些组件将IDE设计人员、应用程序开发人员和用户联系在一起,并在开发过程中促进他们之间的相互反馈。

    Xie等人[153]提议使用微软研究院的代码搜索[219]作为群体编程平台。该平台提供各种难度等级的决斗游戏编码,吸引在线开发者的参与。通过仔细设计决斗编码,该平台可以利用群体中的最佳解决方案,为软件建设服务。此外,通过记录群体开发人员的决斗解决过程,使用不断演变的代码版本的多次尝试可以用于教育目的。

    在众包中,人和机器都可以看作是可编程的单元。已经有人将群体集成为程序代码本身的一部分[146]、[147]、[149]—[151]、[220]。我们还讨论了这些支持和集成研究:

    Jabberwocky[149]是一个用于群体计算的编程框架。它由三个部分组成:Dog,ManReduce和Domouse。Bernstein 等人[220]提出了规划“全球大脑”的观点。该研究为更好地利用新兴的人机网络指出了一些新的研究方向。AutoMan[150]的目的是帮助程序员专注于他们的编程逻辑,同时利用人工计算来解决计算机难以完成的任务。它使用群体来完成计算任务,并使它们可以作为标准编程语言中的普通函数进行调用。它是第一个在预算、进度和质量管理方面完全自动化的群体编程系统。虽然采用人类智能作为计算能力的想法可以追溯到电子计算之前的时代,在这个时代,名词“计算机”通常指的是进行计算的人;AutoMan框架,由基于现代电子计算的网络和基础设施支持,动态管理未知的“群体”作为一种通过API的计算设备是新颖的。

  3. 程序优化:最近,众包被用来支持编译优化[221]和程序综合[57]。
    Auler等人[221]展示了一个用于JavaScript代码优化的众包自适应编译器。基于从web客户端收集的应用程序性能数据,在云端构建了一个编译器标志推荐系统。该系统用于指导编译器对某一平台进行优化。在八个平台上,通过JavaScript代码发射对三个优化实现进行了实验。其中一个最佳的优化性能显示执行速度平均提高了5倍。

    Cochran等人[57]提出了一种称为Program Boosting的方法,该方法利用群体知识和遗传编程技术来帮助解决诸如为url编写健壮的正则表达式等困难的编程任务。Program Boosting依赖于两种不同类型的群组来“Boosting”程序:一种是用于生成初始候选程序的“专家”群体,另一种是用于评估正在演化的候选程序生成的输出(例如,url的有效性)的“用户”群体。从专家那里得到的解被用作第一个种群,随后(通过遗传规划)进化出改进的解。来自用户群的评估有助于进化过程。对四个正则表达式编写任务(表示url、电子邮件、电话号码和日期)进行了实验性评估。实验结果表明,该方法能使初始人类解决方案的准确度平均提高16.25%。

4.4 软件测试和验证的众包

软件测试与验证在软件工程研究界受到了广泛的关注。因此,毫不奇怪的是,我们发现相关的众包研究数量在其他类别的研究中占主导地位。

4.4.1 软件测试的众包

软件测试的众包通常被称为“众包测试”或“群体测试”。与传统的软件测试相比,众包软件测试具有招聘的优势,不仅有专业的测试人员,还有最终用户支持的测试任务。

与传统的beta测试不同,众包测试以黑盒和白盒两种方式支持不同测试级别的各种测试活动。它已经应用于可用性测试[30]、[154]–[159]、性能测试[160]、GUI测试[87]、[161]、测试用例生成[166]、[167]和Oracle问题[88]。我们在下面分别讨论:

  1. 可用性测试:传统的可用性测试是劳动密集型的,并且可能是昂贵和耗时的[155]。通过开发大量潜在用户群和向最终用户提供低劳动率的长期激励措施,招募在线临时群体劳动力可能是解决这些问题的一种方法。众包可用性测试已经证明了其检测可用性问题的能力,正如“专家”所做的测试一样[154]。然而,Liu等人[155]表明,在实验室环境下,众包可用性测试的质量比面对面可用性测试的质量差。Nebeling等人[158]进一步讨论了这个问题,并根据其结果提出利大于弊。然而,这些现有的研究同意节约成本,快速交货,以及容易获得的众源可用性测试的好处。

    Schneider和Cheung[154]首先展示了使用按需群体用户进行可用性测试的可行性。他们还提出了在测试过程中帮助观察测试人员的方法。Liu等人[155]对众包和传统实验室可用性测试进行了比较研究。他们的实验结果突出了质量问题和检测“作弊行为”的挑战。Nebeling等人[156],[158]提出了一个框架,其中包含一个名为CrowdStudy的工具包实现,用于众包网站可用性测试。为了识别众包可用性测试结果中的异常值,Gomide等人[159]提出了一种使用确定性自动机进行自动犹豫检测的方法。这个想法是从老鼠的动作和皮肤传感器中捕捉用户的生物反馈,以揭示他们的犹豫行为。这对于过滤不确定的可用性测试结果很有用。

  2. 性能测试:由于不同的用户行为和执行环境,在真实环境中的软件性能很难测试。Musson等人[160]提出了一种方法,利用群体来衡量软件产品的实际性能。这项工作是以微软的Lync[222]通信工具为例进行的。研究表明,该方法对于识别性能问题和帮助开发团队进行决策非常有用。在这种情况下,Lync软件本身被重新用作众包平台,并且存在一个隐式开放调用(即,权限授予请求),用于从众包用户提供性能数据。其他类似的众包性能测试案例包括Chrome和Firefox的内置遥测(性能测试框架)[223]–[225]。

  3. GUI测试:自动生成GUI测试用例很困难,而手动GUI测试对于许多应用程序来说太慢了[226]。连续测试图形用户界面是一项具有挑战性的任务。众包被认为是一种有前途的持续GUI测试方法[87]。

    Vliegendhart等人[161]首次提出多媒体应用的GUI测试。群体测试人员是从Amazon Mechanical Turk招募的。他们被要求通过远程虚拟机对用户界面进行A/B测试。他们的实验结果表明,用不到3天的时间和50美元就完成了两个功能强大的GUI测试任务,每个任务有100个任务。基于这一群体性能,得出结论,用户连接速度不是他们研究的一个问题。然而,本研究并未报告检测结果的质量。

    Dolstra等人[87]还展示了通过向从Amazon Mechanical Turk招募的测试人员提供远程虚拟机来众包GUI测试的可能性。实验结果表明了该方法的可行性和可靠性。

  4. 测试用例生成:测试用例对于确保软件质量至关重要。尽管已经提出了许多自动测试用例生成方法,但是它们的测试覆盖率并不理想[227],这是由于一些对程序来说很困难但对人类来说可能不那么困难的非平凡任务[166]。Chen和Kim[166]研究了对象突变和约束求解问题,在现有的测试生成工具jCUTE[228]、Randoop[229]和Pex [23]的基础上。提出了一个基于拼图的自动测试环境,将目标变异和约束求解问题分解并转化为可人类求解的游戏。两个开源项目的实验结果显示,与两种最新测试用例生成方法相比,覆盖率分别提高了7.0%和5.8%。

    Pham等人[231]对社交编码网站GitHub的测试文化进行了研究,发现有能力的开发人员有时会以快速简便的方式解决他人存储库中的问题,这就是所谓的“按提交驱动”现象。这种现象有可能被用于在社交编码站点中生成测试用例[167]。然而,这仍然是一个概念性的想法,有待于在今后的工作中实现。

  5. Oracle问题:通常需要Oracle来确定给定输入[232],[233]所需的程序输出。这样的预言可能需要依赖人工输入[234],这使得软件测试很难完全自动化。Pastore等人[88]调查众包以缓解甲骨文问题。他们将自动生成的测试断言众包给亚马逊Mechanical Turk上的一组合格工人(具有编程技能)和一组不合格工人。工人们被要求判断断言的正确性,并进一步修正错误的断言。实验结果表明,众包可以成为缓解甲骨文问题的一种可行方法,尽管这种方法需要熟练的工人提供精心设计和记录的任务。

为了支持众包在软件测试中的应用,特别是在移动应用测试中的应用,已经提出了几个框架[34]、[168]、[169]:

CrowdBlaze[34]是一个集自动测试和人工交互测试于一体的群组移动应用测试系统。这项研究旨在利用冗余资源来帮助改进软件系统。CrowdBlaze最初通过静态分析和自动测试来探索应用程序,然后招募群体用户为复杂的案例提供输入,从而使自动测试能够进一步探索应用程序。通过在自动测试和众包测试之间切换,它旨在提高测试覆盖率。与单独采用自动测试相比,该系统的用户界面覆盖率提高了66.6%。

iTest[168]是一个具有比现有工业移动应用测试服务平台(如UTestand Mob4Leee)更自动化的移动应用框架:通过贪婪算法选择群体测试者,并自动生成框架中生成的测试结果和日志。

Caiipa[169]是一种用于可伸缩移动应用程序测试的云服务。该服务框架采用独特的上下文模糊化方法来扩展移动应用程序运行的上下文空间。它同时使用众包人工输入和众包测量,如各种网络条件、多个运营商网络和不同地理位置。实验结果表明,Caiipa有能力发现更多的错误相比,现有的工具,没有或部分移动上下文。

Xie[235]总结了三类协同测试与分析:人-工具、工具-工具和人-人协同。群体支持的软件测试与分析属于人-人合作类型。

此外,众包还应用于一般软件评估[170]–[172]和更具体的体验质量评估[162]–[165]。

目前的软件验证技术通常需要熟练的工人,从而增加了成本问题。众包可以减少软件验证的技能障碍和成本[11]、[12]、[173]、[174]、[180]。

DARPA在2011年发布了一个基于游戏的大规模软件验证的征集,命名为众包形式验证(CSFV)程序[72]。在这个项目下进行了一系列的研究和实践[73]、[173]、[236]、[237]。Ditel等人[173]提议利用游戏化吸引一般群体作为验证劳动力。“验证游戏”方法将验证任务转换为一个可视游戏,可以由不具备软件工程知识的人来解决。

Li等人[174]提出了一个名为CrowdMine的系统,用于招募非专家人员协助验证过程。该系统将模拟或执行跟踪表示为图像,并要求群体查找与任何预定义模板都不匹配的模式。

Schiller和Ernst[11]开发了一个名为VeriWeb的基于web的IDE,以减少编写验证规范的障碍。IDE的设计目的是将已验证的规范编写任务分解为可管理的子问题。实验结果表明了时间和成本效益。然而,劳动力需要是合同工,而不是由众包市场(如Amazon Mechanical Turk)提供的临时工。这项研究的更详细版本可以在Schiller的博士论文[12]中找到。

4.5 软件开发和维护的众包

软件进化和维护是最早受益于众包应用的领域之一。一系列的研究已经调查了众包软件演进和维护的潜力[19]、[24]、[29]、[97]、[98]、[175]、[178]、[179]、[183]—[188]。

4.5.1 众包软件演进

正式或自动化的验证方法可能无法扩展到大型软件系统[175]。为了提高软件的可扩展性,Bacon等人提出了一种基于市场的软件演化机制[175]。该机制的目标不是保证软件的绝对“正确性”,而是经济地修复用户最关心的bug。提出的机制允许用户为bug修复(或新特性)出价,并奖励bug报告者、测试人员和响应开发人员。它设计用于众包设置和封闭源系统。

软件适配是为了满足用户的动态需求。然而,在软件设计阶段很难捕获上下文,在运行时监视上下文更改是一项具有挑战性的任务。Ali等人[120]提出了利用最终用户智慧的社会感知,并将其用作软件运行时自适应的监视器。这项技术可以帮助软件设计者(及其系统)通过用户的反馈来捕获适应驱动因素并定义新的需求和上下文属性。社会感知的后续工作是社会适应[179],其中进一步讨论了实现社会感知的几种技术(如目标模型)。同时,在一个社会适应信使系统上对所提出的框架进行了评估。He等[183]提出了一个“建议模型”,以鼓励群体用户更密切地参与商业软件运行时的适应。本文介绍了一个原型和几种适应策略。Challiol等人[181]提出了一种基于客户端适应的众包方法来适应移动web应用。

Nebeling和Norrie[176],[177]提出了一种架构和可视化支持工具,用于促进众包web界面的适应性。讨论了众包模式在设计和技术上的挑战,特别是在质量控制方面。一个名为CrowdAdapt[182]的工具得到了进一步的实现和评估。实验结果表明,该工具的能力,利用拥挤的用户生成灵活的Web界面。

为了解决企业应用程序中的“膨胀”问题,Akiki等人[180]专注于利用众包进行用户界面调整。他们提出的方法是基于模型驱动的用户界面构建,通过在线编辑工具使用户能够适应界面。一项初步的在线用户研究指出,在可用性、效率和有效性方面,有希望的发现。

用户可能会被软件系统提供的众多选择所淹没。为了向用户提供定制的配置对话框,Hamidi等人[185]建议从群组数据集中提取配置首选项。使用马尔可夫决策过程形成优化配置对话框。在构建定制的对话框时,可以根据先前对话框中获得的知识自动推断配置决策。该方法的评估是在收集了45名学生用户的Facebook数据集上进行的。实验结果表明,该方法可以帮助用户减少配置步骤27.7%,配置预测精度达到75%。

软件文档在程序理解中起着至关重要的作用。先前的研究已经指出,不准确或不充分的文档是软件开发和维护中缺陷的主要原因[238]-[240]。一些研究人员已经研究了众包模式来增强软件文档[97]、[98]、[140]、[186]、[187]。

Jiau和Yang[97]基于StackOverflow进行了实证研究,揭示了众包API文档的严重不均匀分布。针对这一问题,提出了一种基于对象继承的重用方法。对三个javaapi进行了实证评估:GWT、SWT和Swing。结果证实了文献复用方法的可行性,提高了文献质量和覆盖率。

Parnin 等人[98]进行了类似的实证研究,但重点是调查StackOverflow支持的API文档的覆盖率和动态性。研究了Java编程语言GWT和Android三种api。结果表明,群体能够通过API使用实例和建议生成丰富的内容。例如,对于Android,87%的类被35000个开发者提供的问题和答案覆盖。然而,由于研究基于一个单一的问答平台,因此在推广调查结果时可能存在一些问题。Chen和Zhang[186]还研究了API文档的群体知识。记录文档阅读和搜索行为,以提取问答对。为了自动生成扩展的API文档,维护了常见问题。此外,第4.3节中描述的Seahawk[94]还可以从Q&A服务中检索其他软件文档,以帮助开发人员理解程序。

Pawlik等人[187]对NumPy(一个用于科学计算的Python库)的众包软件文档进行了案例研究。案例研究强调了在应用众包软件文档时需要考虑的几个方面,如技术基础设施、文体指导和激励机制。

4.5.3 软件本地化的众包

软件本地化还与“软件国际化”或“全球化”相关[19],例如为部署它们的每个国家定制系统的自然语言输出。本地化可能是采用和成功国际产品的一个重要因素[241]。利用众包进行软件本地化的研究[19]、[24]、[29]、[188]旨在降低传统的基于开发者的本地化过程的成本和上市时间。

Exton等人[188]首先提出了利用众包进行软件本地化的想法。Manzoor[19]开发了一个众包软件本地化的原型。提出了一种基于行动验证单元的质量控制方法和以质量为导向的奖励体系。初步评价结果表明,群体可提供质量可接受的结果。Gritti[24]还参与了一个类似的项目,并为众包翻译和软件本地化建立了一个原型系统。

4.6 其他软件工程活动的众包

众包还应用于软件安全和隐私分析[35]、[189]、[190]、软件最终用户支持[32]、[191]、[192]和软件构思[193]–[196]。

越来越多的移动应用程序使得恶意软件分析成为一个紧迫的问题。Burguera等人[190]建议一个提交和分析应用程序的环境。具体来说,他们提出了一个名为Crowdroid的新的众包框架,用于检测Android平台中的恶意软件。应用程序行为跟踪是从群体中的真实用户收集的,随后用于区分恶意或良性应用程序。实验结果表明,在3个自写应用程序中,识别恶意软件执行的检测率为100%。在另一个真实的应用程序实验中,两个真实的恶意软件样本的检测准确率分别为85%和100%。Arellano[189]基于最终用户不仅是web增强脚本的受益者,而且可以对其做出贡献的观点,提出了众包web增强。

用户经常难以查看移动应用程序请求的权限。Lin[35]从700多个手机用户中收集了授予移动应用程序的权限。使用聚类算法分析收集到的隐私偏好,并使用确定为重要的隐私配置文件提供默认权限设置以减轻用户负担。基于三个虚假应用程序和从Amazon Mechanical Turk招募的群体进行的评估表明,由此产生的偏好模型能够减轻用户在选择隐私设置时的负担。

关于众包最终用户支持,Chilana等人[32],[191],[192]提出了LemonAid,一种为web应用程序提供上下文帮助的工具,通过群体知识得到增强。该工具根据用户在屏幕上的界面选择检索用户以前提出的问题和答案。在Amazon Mechanical Turk上进行的评估表明,LemonAid能够在90%的选择行为中检索到至少一个用户支持答案,并且相关答案可能在前两个结果中。跨多个站点的现场部署结果表明,超过70%的最终用户可能会从LemonAid中找到有用的答案,并可能重用支持系统。

软件工程研究也可以受益于众包。它可以用来进行人体研究[59]、[136]、[215]、[242]、[243],我们在表7中总结了一些使用群组评估进行软件工程研究的研究。请注意,我们并不声称已经全面调查了软件工程研究中的此类众包人力资源研究,因为这不是本研究的重点,但它可能是未来工作的一个方向。该模型还可用于组织广泛可访问的软件工程竞赛[244],例如软件工程(PROMISE)中的预测模型、软件存储库挖掘(MSR)和基于搜索的软件工程[245](SBSE)挑战。

表7. 软件工程研究的群体评价

Ref. SE Task Size Crowd Platform Effort Application Cost
[242] Fault localisation 65 Developers AMT 1830 judgements 45 Java files collected from 5 textbooks -
[59] Evaluate the impact of code smells 50 End users programmers AMT 160 HIT responses Yahoo!Pipes $0.2 per task
[136] IDE enhancement 13 Students Workshop 39 person-hours HelpMeOut -
[243] Patch maintainability 157 Developers Campus, AMT 2100 judgements (filtered) 32 defects and 40 patches for 6 real word applications $4 per task for AMT participants
[215] Evaluate the readability of string test inputs - Developers CrowdFlower 8 questions per task, 250 responses Java methods from 17 open source projects -
[247] Evaluate the impact of code smells 61 End users programmers AMT 366 task responses Yahoo!Pipes $0.25 per task
[248] Survey on code search habits 99 Developers Campus, AMT 10 questions per survey - -
[143] Code annotation - Developers oDesk 500 code snippets’ evaluation Codex -

一些作者预计,众包将被应用于解决软件工程研究中的更多挑战[126]、[166]、[246]。

5 议题和开放问题

尽管众包软件工程有着广泛的应用,但新兴的模型本身也面临着一系列的问题,这些问题给未来的工作带来了开放的问题。这些问题和开放性问题已经被先前的研究所确定。但只有少数研究讨论了解决方案。

根据对TopCoder的深入工业案例研究[5],重点关注的问题包括任务分解、计划和调度、协调和沟通、知识产权、动机和质量挑战,被强调为有趣和重要的挑战。

有几项研究涉及提出潜在的研究课题。Stol和Fitzgerald[13]提出了一个研究框架,其灵感来自TopCoder案例研究[5]中确定的问题。它从三个关键利益相关者的角度出发,即请求者、平台和工人。针对从三个利益相关者的角度确定的问题提出了研究问题。LaToza等人[4] 简述了群体分工、任务分配、质量保证和群体参与动机等一系列研究问题。后续研究议程见最近的论文[249]。

在本节的剩余部分中,我们将更详细地讨论众包软件工程问题以及相关工作:

5.1 理论与模型基础

使用未知的外部劳动力将众包软件工程与传统软件工程区分开来。现有的软件开发理论和模型可能不再适用于这种新兴的模型[250]-[252]。

为了更好地促进众包软件工程的发展,人们提出了一系列的理论和模型。最早出版的众包软件工程理论模型是Kazman和Chen[250],[251]提出的Metropolis模型,他们认为经典的软件开发模型,如瀑布模型、螺旋模型和最近的敏捷模型,不适合众包软件工程。

Metropolis模型区分了三种类型的角色,即平台(称为内核)、构建在内核上的应用程序(称为外围)和最终用户(称为大众)。介绍了该模型管理众包开发的七个原则。

Saxton等人[253]随后分析了103个众包网站,并对9种众包模式进行了分类。其中,中介模型和协同软件开发模型支持众包软件工程。

Tsai 等人[254]总结了不同众包软件工程过程中的共性,提出了一种基于云的软件众包架构。该体系结构为请求者指定了一个管理web界面,为在线工人指定了一系列开发工具,由平台提供的工人排名和推荐工具,为多个利益相关者指定了协作工具,为软件资产指定了一个存储库和一个基于云的支付系统。

一些研究还考虑了博弈论群体公式来理解群体开发者之间的竞争[62]、[255]、[256]。Wu等人确定了众包软件开发竞赛的“最小-最大”(防御攻击)性质,并认为该性质有助于所生产软件的质量和创造力[62]。Hu和Wu[255]提出了一个博弈论模型来分析TopCoder开发者之间的竞争行为。本文的结论是在理论分析的基础上得出的,如纳什均衡计算,没有进行实证评价,因此模型的适用性还有待于以后的工作分析。

5.2 任务分解

众包的复杂任务会导致繁重的工作负载,需要专门的资源。由于高技能壁垒,它限制了潜在工人的数量。为了提高并行性和扩展合格的劳动力库,必须将软件工程任务分解成小块。然而,软件工程任务通常与特定的上下文相关,对于这些上下文,分解可能是非常重要的。一些研究集中在这个分解问题上。LaToza 等人[217]开发了一种将编程工作分解为微任务的方法。该方法将单个较高级别的任务迭代分解为多个较低级别的任务,并通过跟踪链接到工件的更改来协调工作。实现了一个名为CrowdCode[152]的平台来支持他们提出的方法。对12名开发人员进行了评估,结果表明,与传统的开发方法相比,该方法存在一个“开销问题”,这可能导致生产率较低。

LaToza 等人[257]还提议将软件开发工作作为分解的一部分去文本化。讨论了三种开发工作,包括编程、调试和设计。

正如在软件测试和验证的众包应用程序(第4节)中所讨论的,先前的两个研究也提供了分解方法:Chen和Kim[166]将测试生成器的复杂约束求解和对象变异问题分解为小问题,这些问题可以由众包工人解决。Schiller和Ernst[11]提出了一个在线的验证IDE VeriWeb,它可以将可验证的规范任务分解为可管理的子问题。

5.3 计划和调度

群体劳动力的高度特异性需要仔细规划和调度。

Tran-Thanh等人[258]提出了一个专家众包的有界多臂老虎机模型(Bounded Multi-Armed Bandit Model)。具体而言,提出的“第一算法”分为两个阶段:首先,通过使用总预算的一部分来探索工人的质量估计;第二,它利用工人的质量估计来最大化总体效用和剩余预算。该算法的评估是基于从oDesk收集的经验数据。实验结果表明,该算法的性能比现有的众包算法高出300%。

Tung和Tseng[246]致力于有效利用群体资源来支持协同测试,并将该问题视为(NP完全)作业分配问题。他们提出了四种启发式策略的贪婪方法。为了对该模型进行评估,实现了一个协同测试系统(COTS)。实验结果表明,该系统能够在大约90%的最优解中产生平均目标解。当应用于实时群组测试环境时,该系统能够节省53%的测试工作量。

在一些公开召集形式(如在线竞争)中,任务被分配给未知的开发人员,而不是分配给特定的参与者群体。在这种情况下,开发人员不能直接调度,但可以使用推荐技术进行优化,以指导他们完成最合适的任务。Mao等人[259]采用基于内容的技术,为众包软件开发任务推荐开发人员。该方法从历史任务注册和赢家记录中学习,以自动匹配任务和开发人员。在TopCoder数据集上的实验结果表明,推荐性能在准确性(50%-71%)和多样性(40%-52%)上都有很好的表现。

为众包软件工程任务估计适当数量的众包开发人员和交付时间是一个重要而具有挑战性的问题。迄今为止,这方面的研究工作非常有限。Mantyla和Itkonen[260]研究了群体大小和分配的时间如何影响软件测试的性能。他们对130名学生进行了调查,结果表明,在时间压力下,多个群体工人比没有时间压力的个体工人有71%的效率(以检测到的bug数量衡量)。作者建议根据检测无效和重复错误报告的机制和工具的有效性,调整人工测试任务的群体数量。

为了保证参与众包软件工程任务的水平,Wang等人[129]提出了一个框架,以支持众包系统招募具有需求获取领域知识的参与者。该框架是在观察到具有相似领域知识的群体倾向于在特定时空区域聚集的基础上建立的。通过理论研究和仿真实验验证了该框架的可行性。

5.4 激励和报酬

动机被视为软件项目成功的关键因素[261]-[263]。对于众包软件项目,没有适当动机的开发者可能无法做出一致的贡献,而不适当的报酬可能导致低资本效率或任务匮乏。Varshney[264]证明,玩家的动机对于推动参与和确保可靠的交付平台至关重要。基于对IBM内部众包软件开发系统Liquid的研究,确定了几个内在、外在和社会激励因素。开发商参与被发现遵循幂律分布。采用基于动量的生成模型和热力学解释来描述所观察到的参与现象。

Mao等人[252]提出了16个成本动因,用于培训经验定价模型,以满足众开发商的货币报酬。具体来说,任务的开发类型(升级或新开发)、组件规范的数量、设计的序列图的数量和任务的估计大小被认为是影响薪酬的重要因素。基于识别出的成本动因,采用流行的机器学习算法训练了9个预测定价模型。对490个TopCoder项目的评价表明,该方法具有较高的预测质量。

Leimeister等人[194]调查了信息技术理念竞赛参与者的动机。在本研究中,主办方的赏识、奖品和专家知识等激励因素被强调。Olson和Rosacker[265]讨论了参与众包和开源软件(OSS)开发的动机。利他主义的因素被认为是激励参与开源软件和众包软件开发的重要因素。Ramakrishnan和Srinivasaraghavan[266]提出了在众包编程任务环境中学生的内在和外在动机因素。进行了一个对照实验,以证明利用一个培养的大学群体进行软件开发的可行性。

5.5 质量保证

群体劳动力是瞬变的,工人的专业知识和背景各不相同。使用这样一个未知的劳动力必然会给众包(crowdsourcing)和众包软件工程(Crowdsourced Software Engineering)带来质量问题。

Li等人[105]基于TopCoder的实证研究,从平台和项目的角度确定了众包软件开发的23个质量因素。确定了提高众包软件质量的四个重要方面,包括平台的繁荣程度、任务的规模、参与者的技能水平和任务的设计质量。

Saengkhattiya等人[23]通过对四家公司的访谈,调查众包公司如何应对质量保证挑战:微工人、点击杂务、微任务和TopCoder。确定了十种不同的质量管理方法,如排名/评级、举报垃圾邮件、举报不公平待遇、任务预批准和技能筛选。

Tajedin和Nevo[63]构建了一个众包软件开发的“成功模型”,该模型包含3个高层决定因素,即项目特征、群体组成和利益相关者关系。该模型是在分析信息系统成功、开放源码软件开发和通用软件开发相关研究的基础上提出的。

许多关于质量保证的工作仍有待于全面评估,因此对众包软件工程质量保证的严格评估是未来工作的一个紧迫课题。

5.6 未探索的问题

众包软件工程中未被探索的问题包括协调和通信、知识产权和数据安全问题。这些问题也存在于一般众包中,并有相关的研究[253],[270],[271]。然而,根据我们对论文的分析,我们能够找到这项研究,他们没有被探索在特定的众包软件工程背景下。

关于协调和沟通问题,需要协调资源和发展进程。例如,地理分布和临时群体工人需要对他们所需的任务达成一致的理解。如果没有协调,可能会有很大的问题,例如,当众包开发人员和请求者使用不同的开发方法时。

知识产权和数据安全是另一个重要问题。由于众包使用开放的呼叫格式,公众可以访问任务信息。任务请求者可能会发现很难描述任务,因为他们只能提供有限的信息(出于安全原因),而众包任务需要尽可能清晰。转移任务可交付成果时可能会出现知识产权问题。例如,可能的群体开发包括旨在非商业用途的预先存在或第三方的代码,但客户公司实际上要求该任务的商业目的。

6 机遇

本节概述了作者认为随着众包软件工程的成熟、扩大和深化对软件工程方法、概念和实践的渗透,众包软件工程可以发展的五种方式。

6.1 谁是群体?

除了很少的研究[180]、[196]、[264]、[272]之外,几乎所有以前关于众包软件工程的工作都假设群体将是请求者组织外部的,通过一个公开召集形式招募。实际上,这种外部的、开放的召集形式是当前众包定义的一部分。然而,请求者也可以从自己组织的工人中识别特定的群体,从而扩展群体的定义。

众包技术提供了支持“微任务”分配的平台。到目前为止,微任务一直是分解的一个必要部分,以分配给大量外部群体。这些微任务分配和协作平台可以重新调整用途,以支持各种形式的群体,如组织内的软件工程,其中群体部分或全部由工人(或其他利益相关者)组成。

例如,一个组织可以使用众包平台向比传统可能更广泛的内部利益相关者群体开放新采购系统的验收测试。组织已经通过邀请内部利益相关者试用新产品并提供评论,非正式地(并且没有基础设施支持)开展此类“群体式”验收测试活动。众包平台可以提供一个技术和基础设施来系统化、支持和扩展现有的非正式活动。

众包技术也可用于支持内部培训和最佳做法的传播。它可以用来获取工作区(目前工人用来克服软件系统的限制),或者从组织中获取新的需求。通过这种方式,众包基础设施可以重新调整用途,以帮助组织在软件系统采购和部署中实现更大程度的工人参与。

更根本的是,也许所有涉及多个用户的软件系统将来都应该被视为基于群体的软件系统。这不仅是一个哲学观点,而且可能对增强适应性产生实际影响;通过覆盖众包技术,系统可以收获并响应it用户。随着技术的发展,我们可能(希望)见证了众包与适应性软件工程的融合[273]-[275]。

6.2 推测性众包软件工程

目前,众包软件工程被设想为一种替代现有软件工程活动的方法,使用群体实现的替代版本。我们预计,众包软件工程将越来越多地为目前不可能的软件工程活动开辟新的可能性。

具体而言,通过众包软件工程获得的低成本、灵活性和快速响应可以为推测性软件工程创造可能性,其中软件开发过程可以变得更为实验性。众包技术可以提供一种机制,通过这种机制,组织可以实现更快速的原型制作,而众包被用来模拟一个假定的软件系统的功能。

6.3 混合众包软件工程

本文所调查的众包软件工程解决方案通常关注于众包活动对现有(非众包)活动的替代。在这方面,解决方案要么是众包的,要么不是众包的,这两种活动之间有一个明显的“二元划分”。我们设想,随着众包软件工程在研究和实践者社区中获得更大的渗透,这种二元划分将变得模糊。

传统活动和众包活动之间的这种模糊区分将导致混合众包软件工程的进一步发展。像CrowdBlaze(第4.4节)这样的工具已经提供了一种众包和自动化软件测试之间的混合形式,而像HelpMeOut这样的bug修复推荐工具可以通过遗传改进(如第4.3节所述)得到增强。

混合众包软件工程将需要新的过程和方法,这些过程和方法将众包知识反馈到软件开发过程中(随着过程的进行),并将软件开发信息反馈给大众。应用商店作为软件部署和审查平台的使用增长[276]-[279],已经提供了一种混合的众包软件工程。应用程序商店实现的审查机制已经类似于用户(群体)和应用程序开发人员之间的沟通渠道。我们设想进一步部署、扩展和开发这种众包软件部署、审查和反馈基础设施。

6.4 多众包软件工程

当前的众包工作通常只涉及一个群体,这是一个定义明确的单一任务。我们认为这个模型可以推广到多个众包软件工程中,在这个工程中,多个不同的(但交流的)群体在不同的(但相关的)问题上工作。在多众包软件工程中,群体之间相互通信,使得每个群体的行为依赖于其他群体的行为。不同群体之间的交互区分了多软件工程与现有的(单一)众包软件工程。

例如,测试和调试问题可以表述为多个众包问题,其中一个群负责生成测试用例以查找错误,而另一个群负责查找修补程序以修复错误。这将导致基于群体的协同进化变异测试[280]和协同进化修补[281]的实现。

许多其他软件工程问题为多众包软件工程提供了自然的公式。例如,需求获取和快速原型可以同时进行,一个群体收集需求,而另一个群体为这些需求开发原型。架构演进和软件测试也可以使用两个群体同时进行,一个是针对性能测试用例生成,另一个是针对架构改进以避免性能瓶颈。在先前关于使用众包进行程序综合的研究中[57],一个专业群体被用于生成正则表达式候选者,另一个非专业群体被用于评估从这些表达式生成的实例,以进一步发展更好的程序。

多众包软件工程不限于两个群体。我们可以设想一个涉及需求获取、快速原型和软件测试用例生成的三个群体的软件工程问题,每个群体都有自己的专用群体。三个群体中的每一个都将依赖于另一个群体的活动,并使用另一个群体所承担任务的输出。原型群体实现了需求激发群组中出现的一些需求。测试用例生成群体生成测试,其中一些将发现原型中的问题。反过来,这些问题可能会向需求激发群体建议新的特性。

6.5 迭代众包软件工程

大多数现有的众包软件工程方法包括一个单一的批量模式,应用众包来解决一个明确的单一任务。遇到瀑布式的模型是相当惊人的,它作为一种支持众包开发工作的实用方法论,产生了如此强劲的复苏(见第3.1节)。这种现象可能是暂时的;随着它的成熟,众包软件工程将可能变得自适应和迭代,以更好地建模其支持的底层软件工程过程(例如,最近的一项研究表明,迭代重组有助于改进众包软件设计[134])。事实上,我们提出的多众包软件工程是一个自然的迭代过程,在这个过程中,每个群体响应并影响其他群体执行的任务的结果。

7 总结

本研究调查了众包在软件工程活动中的应用以及对这些活动的研究。它揭示了近年来出版数量的增长趋势,并从理论、实践和应用等方面简要介绍了该领域的研究进展。本文还强调了众包软件工程中的潜在问题,以及在现有研究中进行的相关分析和解决方案。本次调查指出了研究或探索不足的问题/机遇,为今后的研究提供了方向。

表8. 在线图书馆搜索的关键字

Category Terms
General software crowdsourcing
crowd software engineering
crowdsourcing software engineering
crowdsourced software engineering
crowd software development
crowdsourcing software development
crowdsourced software development
crowd development
crowdsourcing development
crowdsourced development
Domain crowd requirements
crowdsourcing requirements
crowdsourced requirements
crowd design
crowdsourcing design
crowdsourced design
crowd coding
crowdsourcing coding
crowdsourced coding
crowd testing
crowdsourcing testing
crowdsourced testing
crowd verification
crowdsourcing verification
crowdsourced verification
crowd software evolution
crowdsourcing software evolution
crowdsourced software evolution
crowd software maintenance
crowdsourcing software maintenance
crowdsourced software maintenance

致谢

The authors would like to thank many authors who contributed their valuable feedback in the ‘crowdsourced checking’ process of this survey.

Ke Mao is funded by the UCL Graduate Research Scholarship (GRS), and the UCL Overseas Research Scholarship (ORS). This work is also supported by the Dynamic Adaptive Automated Software Engineering (DAASE) programme grant (EP/J017515), which fully supports Yue Jia, partly supports Mark Harman.

参考文献

[1] J. Howe, “Crowdsourcing: A definition,” http://crowdsourcing:typepad:com/cs/2006/06/crowdsourcing a:html, June 2006.
[2] ——, “The rise of crowdsourcing,” Wired magazine, vol. 14, no. 6, pp. 1–4, 2006.
[3] K. R. Lakhani, D. A. Garvin, and E. Lonstein, “TopCoder(A): Developing software through crowdsourcing,” Harvard Business School Case, 610-032, January 2010.
[4] T. D. LaToza, W. Ben Towne, A. van der Hoek, and J. D. Herbsleb, “Crowd development,” in Proceedings of the 6th International Workshop on Cooperative and Human Aspects of Software Engineering, May 2013, pp. 85–88.
[5] K.-J. Stol and B. Fitzgerald, “Two’s company, three’s a crowd: A case study of crowdsourcing software development,” in Proceedings of the 36th International Conference on Software Engineering, 2014, pp. 187–198.
[6] S. Cooper, F. Khatib, A. Treuille, J. Barbero, J. Lee, M. Beenen, A. Leaver-Fay, D. Baker, Z. Popovi´c, et al., “Predicting protein structures with a multiplayer online game,” Nature, vol. 466, no. 7307, pp. 756–760, 2010.
[7] T. C. Norman, C. Bountra, A. M. Edwards, K. R. Yamamoto, and S. H. Friend, “Leveraging crowdsourcing to facilitate the discovery of new medicines,” Science Translational Medicine, vol. 3, no. 88mr1, 2011.
[8] D. C. Brabham, T. W. Sanchez, and K. Bartholomew, “Crowdsourcing public participation in transit planning: preliminary results from the next stop design case,” Transportation Research Board, 2009.
[9] A. T. Chatfield and U. Brajawidagda, “Crowdsourcing hazardous weather reports from citizens via twittersphere under the short warning lead times of EF5 intensity tornado conditions,” in Proceedings of the 47th Hawaii International Conference on System Sciences. IEEE, 2014, pp. 2231–2241.
[10] O. Alonso, D. E. Rose, and B. Stewart, “Crowdsourcing for relevance evaluation,” in ACM SigIR Forum, vol. 42, no. 2. ACM, 2008, pp. 9–15.
[11] T. W. Schiller and M. D. Ernst, “Reducing the barriers to writing verified specifications,” in Proceedings of the 27th ACM International Conference on Object-Oriented Programming Systems, Languages, and Applications, 2012, pp. 95–112.
[12] T. W. Schiller, “Reducing the usability barrier to specification and verification,” Ph.D. dissertation, University of Washington, 2014.
[13] K.-J. Stol and B. Fitzgerald, “Researching crowdsourcing software development: Perspectives and concerns,” in Proceedings of the 1st International Workshop on CrowdSourcing in Software Engineering, 2014, pp. 7–10.
[14] K.-j. Stol and B. Fitzgerald, “Research protocol for a case study of crowdsourcing software development,” Available from: http://staff.lero.ie/stol/publications, University of Limerick, 2014.
[15] S. Zogaj, U. Bretschneider, and J. M. Leimeister, “Managing crowdsourced software testing: A case study based insight on the challenges of a crowdsourcing intermediary,” Journal of Business Economics, vol. 84, no. 3, pp. 375–405, 2014.
[16] B. Kitchenham and S. Charters, “Guidelines for performing systematic literature reviews in software engineering,” School of Computer Science and Mathematics, Keele University, Technical Report EBSE-2007-01, 2007.
[17] B. Kitchenham, O. P. Brereton, D. Budgen, M. Turner, J. Bailey, and S. Linkman, “Systematic literature reviews in software engineering - a systematic literature review,” Information and Software Technology, vol. 51, no. 1, pp. 7 – 15, 2009.
[18] S. L. Lim, “Social networks and collaborative filtering for large-scale requirements elicitation,” Ph.D. dissertation, University of New South Wales, 2010.
[19] J. Manzoor, “A crowdsourcing framework for software localization,” Master’s thesis, KTH Royal Institute of Technology, 2011.
[20] M. Kallenbach, “HelpMeOut-Crowdsourcing suggestions to programming problems for dynamic, interpreted languages,” Master’s thesis, RWTH Aachen University, 2011.
[21] S. Leone, “Information components as a basis for crowdsourced information system development,” Ph.D. dissertation, Swiss Federal Institute of Technology in Zurich, 2011.
[22] S. Nag, “Collaborative competition for crowdsourcing spaceflight software and STEM education using SPHERES Zero Robotics,” Master’s thesis, Massachusetts Institute of Technology, 2012.
[23] M. Saengkhattiya, M. Sevandersson, and U. Vallejo, “Quality in crowdsourcing - How software quality is ensured in software crowdsourcing,” Master’s thesis, Lund University, 2012.
[24] A. Gritti, “Crowd outsourcing for software localization,” Master’s thesis, Universitat Polit´ecnica de Catalunya, 2012.
[25] L. Ponzanelli, “Exploiting crowd knowledge in the IDE,” Master’s thesis, University of Lugano, 2012.
[26] D. Phair, “Open crowdsourcing: Leveraging community software developers for IT projects,” PhD. in Computer Sci., Colorado Technical University, 2012.
[27] M. Bruch, “IDE 2.0: Leveraging the wisdom of the software engineering crowds,” Ph.D. dissertation, Technische Universit¨at Darmstadt, 2012.
[28] M. Goldman, “Software development with real-time collaborative editing,” Ph.D. dissertation, Massachusetts Institute of Technology, 2012.
[29] A. Mijnhardt, “Crowdsourcing for enterprise software localization,” Master thesis, Utrecht University, 2013.
[30] A. Teinum, “User testing tool towards a tool for crowdsource-enabled accessibility evaluation of websites,” Master’s thesis, University of Agder, 2013.
[31] O. Starov, “Cloud platform for research crowdsourcing in mobile testing,” Master’s thesis, East Carolina University, 2013.
[32] P. K. Chilana, “Supporting users after software deployment through selection-based crowdsourced contextual help,” Ph.D. dissertation, University of Washington, 2013.
[33] D. Wightman, “Search interfaces for integrating crowdsourced code snippets within development environments,” Ph.D. dissertation, Queen’s University, 2013.
[34] H. Xue, “Using redundancy to improve security and testing,” Ph.D. dissertation, University of Illinois at Urbana-Champaign, 2013.
[35] J. Lin, “Understanding and capturing people’s mobile app privacy preferences,” Ph.D. dissertation, Carnegie Mellon University, 2013.
[36] R. Snijders, “Crowd-centric requirements engineering: A method based on crowdsourcing and gamification,” Master’s thesis, Utrecht University, 2015.
[37] S. James, “The wisdom of the crowds,” New York: Randome House, 2004.
[38] B. Kogut and A. Metiu, “Open-source software development and distributed innovation,” Oxford Review of Economic Policy, vol. 17, no. 2, pp. 248–264, 2001.
[39] D. Sobel, Longitude: The true story of a lone genius who solved the greatest scientific problem of his time. Macmillan, 2005.
[40] “Innocentive,” http://www:innocentive:com, Accessed: 2015-03-01.
[41] “Topcoder,” http://www:topcoder:com, Accessed: 2015-03-01.
[42] J. M. Hughes, “Systems and methods for software development,” August 2010, US Patent 7778866 B2.
[43] D. C. Brabham, “Crowdsourcing as a model for problem solving an introduction and cases,” Convergence: the international journal of research into new media technologies, vol. 14, no. 1, pp. 75–90, 2008.
[44] “Wikipedia for crowdsourcing,” http://en:wikipedia:org/wiki/Crowdsourcing, Accessed: 2015-03-01.
[45] “New dictionary words for 2011,” http://http://www:merriam-webster:com/info/newwords11:htm, Accessed: 2015-03-01.
[46] “Crowdsourcing definition,” http://www:merriam-webster:com/dictionary/crowdsourcing, Accessed: 2015-03-01.
[47] E. Estell´es-Arolas and F. Gonz´alez-Ladr´on-De-Guevara, “Towards an integrated crowdsourcing definition,” Journal of Information Science, vol. 38, no. 2, pp. 189–200, Apr. 2012.
[48] A. Kittur, B. Smus, S. Khamkar, and R. E. Kraut, “CrowdForge: Crowdsourcing complex work,” in Proceedings of the 24th Annual ACM Symposium on User Interface Software and Technology, 2011, pp. 43–52.
[49] L. Xiao and H.-Y. Paik, “Supporting complex work in crowdsourcing platforms: A view from service-oriented computing,” in Proceedings of the 23rd Australian Software Engineering Conference, Apr. 2014, pp. 11–14.
[50] “List of crowdsourcing projects,” http://en:wikipedia:org/wiki/List of crowdsourcing projects, Accessed: 2015-03-01.
[51] F. Khatib, F. DiMaio, S. Cooper, M. Kazmierczyk, M. Gilski, S. Krzywda, H. Zabranska, I. Pichova, J. Thompson, Z. Popovi´c, et al., “Crystal structure of a monomeric retroviral protease solved by protein folding game players,” Nature Structural and Molecular Biology, vol. 18, no. 10, pp. 1175–1177, 2011.
[52] R. Johnson, “Natural products: Crowdsourcing drug discovery,” Nature chemistry, vol. 6, no. 2, pp. 87–87, 2014.
[53] A. Misra, A. Gooze, K. Watkins, M. Asad, and C. A. Le Dantec, “Crowdsourcing and its application to transportation data collection and management,” Transportation Research Record: Journal of the Transportation Research Board, vol. 2414, no. 1, pp. 1–8, 2014.
[54] C. Muller, L. Chapman, S. Johnston, C. Kidd, S. Illingworth, G. Foody, A. Overeem, and R. Leigh, “Crowdsourcing for climate and atmospheric sciences: current status and future potential,” International Journal of Climatology, 2015.
[55] M. Lease and E. Yilmaz, “Crowdsourcing for information retrieval,” in ACM SIGIR Forum, vol. 45, no. 2. ACM, 2012, pp. 66–75.
[56] T. D. Breaux and F. Schaub, “Scaling requirements extraction to the crowd: Experiments with privacy policies,” in Proceedings of the 22nd IEEE International Requirements Engineering Conference, Aug. 2014, pp. 163–172.
[57] R. A. Cochran, L. D’Antoni, B. Livshits, D. Molnar, and M. Veanes, “Program boosting: Program synthesis via crowd-sourcing,” in Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, 2015, pp. 677–688.
[58] M.-A. Storey, C. Treude, A. van Deursen, and L.-T. Cheng, “The impact of social media on software engineering practices and tools,” in Proceedings of the FSE/SDP Workshop on Future of Software Engineering Research, ser. FoSER ’10, 2010, pp. 359–364.
[59] K. T. Stolee and S. Elbaum, “Exploring the use of crowdsourcing to support empirical studies in software engineering,” in Proceedings of the 4th ACM-IEEE International Symposium on Empirical Software Engineering and Measurement, 2010, pp. 1–4.
[60] Y. Usui and S. Morisaki, “An Approach for Crowdsourcing Software Development,” Proceedings of the Joint Conference of the 21st International Workshop on Software Measurement and the 6th International Conference on Software Process and Product Measurement, pp. 32–33, 2011.
[61] W. Wu, W.-T. Tsai, and W. Li, “An evaluation framework for software crowdsourcing,” Frontiers of Computer Science, vol. 7, no. 5, pp. 694–709, Aug. 2013.
[62] W. Wu, W. T. Tsai, and W. Li, “Creative software crowdsourcing: from components and algorithm development to project concept formations,” International Journal of Creative Computing, vol. 1, no. 1, pp. 57–91, 2013.
[63] H. Tajedin and D. Nevo, “Determinants of success in crowdsourcing software development,” in Proceedings of the 2013 annual conference on Computers and people research, 2013, pp. 173–178.
[64] X. L. Xu and Y. Wang, “Crowdsourcing Software Development Process Study on Ultra-Large-Scale System,” Advanced Materials Research, vol. 989-994, pp. 4441–4446, July 2014.
[65] H. Tajedin and D. Nevo, “Value-adding intermediaries in software crowdsourcing,” in Proccedings of the 47th Hawaii International Conference on System Sciences, Jan. 2014, pp. 1396–1405.
[66] R. Prikladnicki, L. Machado, E. Carmel, and C. R. B. de Souza, “Brazil software crowdsourcing: A first step in a multi-year study,” in Proceedings of the 1st International Workshop on CrowdSourcing in Software Engineering, June 2014, pp. 1–4.
[67] M. Aparicio, C. J. Costa, and A. S. Braga, “Proposing a system to support crowdsourcing,” in Proceedings of the 2012 Workshop on Open Source and Design of Communication, 2012, pp. 13–17.
[68] M. N. Huhns, W. Li, and W.-T. Tsai, “Cloud-based software crowdsourcing (Dagstuhl seminar 13362),” Dagstuhl Reports, vol. 3, no. 9, pp. 34–58, 2013.
[69] “Wikipedia for software crowdsourcing,” http://en:wikipedia:org/wiki/Crowdsourcing software development, Accessed: 2015- 03-01.
[70] “TopCoder - A platform for innovation overview,” http://www:nasa:gov/pdf/651447main TopCoder Mike D1 830am:pdf, Accessed: 2015-03-01.
[71] K. R. Lakhani, K. J. Boudreau, P.-R. Loh, L. Backstrom, C. Baldwin, E. Lonstein, M. Lydon, A. MacCormack, R. A. Arnaout, and E. C. Guinan, “Prize-based contests can provide solutions to computational biology problems,” Nature Biotechnology, vol. 31, no. 2, pp. 108–111, 2013.
[72] “The crowd sourced formal verification (CSFV) program,” http://www:darpa:mil/Our Work/I2O/Programs/Crowd Sourced Formal Verification (CSFV):aspx, Accessed: 2015-03-01.
[73] “Verigames,” http://www:verigames:com, Accessed: 2015-03-01.
[74] “Challenge platform: NTL,” http://www:nasa:gov/sites/default/files/files/ntl-overview-sheet:pdf, Accessed: 2015-03-01.
[75] Wired, “How Microsoft crowdsourced the making of Office 2010,” http://www:wired:com/2010/06/microsoft-office-2010, Accessed: 2015-03-01.
[76] A. Greenberg, “Microsoft finally offers to pay hackers for security bugs with 100,000 bounty,” http://www:forbes:com/sites/ andygreenberg/2013/06/19/microsoft-finally-offers-to-pay-hackers-for-security-bugs-with-100000-bounty, Accessed: 2015-03-01.
[77] TheTechieGuy, “How microsoft is cleverly crowdsourcing windows 10 development from its customers,” http://thetechieguy:com/ how-microsoft-is-cleverly-crowdsourcing-windows-10-development-from-its-customers, Accessed: 2015-03-01.
[78] Massolution, “Crowdsourcing industry report,” http://www:crowdsourcing:org/editorial/enterprise-crowdsourcing-trendsinfographic/ 18725, Accessed: 2015-03-01.
[79] “AppStori,” http://www:appstori:com, Accessed: 2015-03-01.
[80] “Mob4Hire,” http://www:mob4hire:com, Accessed: 2015-03-01.
[81] “The 2012 ACM computing classification system,” http://www:acm:org/about/class/class/2012, Accessed: 2015-03-01.
[82] “IEEE standard taxonomy for software engineering standards,” http://ieeexplore:ieee:org/servlet/opac?punumber=2601, Accessed: 2015-03-01.
[83] “2014 IEEE Taxonomy,” https://www:ieee:org/documents/taxonomy v101:pdf, Accessed: 2015-03-01.
[84] “TopCoder competition methodology,” http://www:topcoder:com/wp-content/uploads/sampleprojects/1/index:html, Accessed: 2015-03-07.
[85] “uTest - Getting started,” http://www:utest:com/getting-started, Accessed: 2015-03-23.
[86] A. Begel, R. DeLine, and T. Zimmermann, “Social media for software engineering,” in Proceedings of the FSE/SDP Workshop on Future of Software Engineering Research, 2010, pp. 33–38.
[87] E. Dolstra, R. Vliegendhart, and J. Pouwelse, “Crowdsourcing GUI tests,” in Proceedings of the 6th IEEE International Conference on Software Testing, Verification and Validation, Mar. 2013, pp. 332–341.
[88] F. Pastore, L. Mariani, and G. Fraser, “CrowdOracles: Can the crowd solve the oracle problem?” in Proceedings of the 6th IEEE International Conference on Software Testing, Verification and Validation, Mar. 2013, pp. 342–351.
[89] “Stack Overflow,” http://stackoverflow:com/, Accessed: 2015-03-01.
[90] B. Vasilescu, V. Filkov, and A. Serebrenik, “StackOverflow and GitHub: Associations between software development and crowdsourced knowledge,” in Proceedings of the 2013 International Conference on Social Computing, Sept. 2013, pp. 188–195.
[91] B. Vasilescu, A. Serebrenik, P. Devanbu, and V. Filkov, “How social Q&A sites are changing knowledge sharing in open source software communities,” Proceedings of the 17th ACM Conference on Computer Supported Cooperative Work and Social Computing, pp. 342–354, 2014.
[92] A. Zagalsky, O. Barzilay, and A. Yehudai, “Example Overflow: Using social media for code recommendation,” in Proceedings of the 3rd International Workshop on Recommendation Systems for Software Engineering, June 2012, pp. 38–42.
[93] A. Bacchelli, L. Ponzanelli, and M. Lanza, “Harnessing Stack Overflow for the IDE,” in Proceedings of the 3rd International Workshop on Recommendation Systems for Software Engineering, June 2012, pp. 26–30.
[94] L. Ponzanelli, A. Bacchelli, and M. Lanza, “Leveraging crowd knowledge for software comprehension and development,” in Proceedings of the 17th European Conference on Software Maintenance and Reengineering, Mar. 2013, pp. 57–66.
[95] ——, “Seahawk: Stack Overflow in the IDE,” in Proceedings of the 35th International Conference on Software Engineering, May 2013, pp. 1295–1298.
[96] L. B. L. de Souza, E. C. Campos, and M. D. A. Maia, “Ranking crowd knowledge to assist software development,” in Proceedings of the 22nd International Conference on Program Comprehension, 2014, pp. 72–82.
[97] H. C. Jiau and F.-P. Yang, “Facing up to the inequality of crowdsourced API documentation,” ACM SIGSOFT Software Engineering Notes, vol. 37, no. 1, pp. 1–9, Jan. 2012.
[98] C. Parnin, C. Treude, L. Grammel, and M. Storey, “Crowd documentation: Exploring the coverage and the dynamics of API discussions on Stack Overflow,” Georgia Institute of Technology, Tech. Rep., 2012.
[99] X. Peng, M. Ali Babar, and C. Ebert, “Collaborative Software Development Platforms for Crowdsourcing,” IEEE Software, vol. 31, no. 2, pp. 30–36, 2014.
[100] D. Fried, “Crowdsourcing in the software development industry,” Nexus of Entrepreneurship and Technology Initiative, 2010.
[101] “Amazon Mechanical Turk,” https://www:mturk:com, Accessed: 2015-03-01.
[102] “MathWorks,” http://www:mathworks:com, Accessed: 2015-03-07.
[103] N. Archak, “Money, glory and cheap talk: Analyzing strategic behavior of contestants in simultaneous crowdsourcing contests on TopCoder.com,” in Proceedings of the 19th international conference on World wide web, 2010, pp. 21–30.
[104] S. Nag, I. Heffan, A. Saenz-Otero, and M. Lydon, “SPHERES Zero Robotics software development: Lessons on crowdsourcing and collaborative competition,” in Proceedings of the 2012 IEEE Aerospace Conference, Mar. 2012, pp. 1–17.
[105] K. Li, J. Xiao, Y. Wang, and Q. Wang, “Analysis of the key factors for software quality in crowdsourcing development: An empirical study on TopCoder.com,” in Proceedings of the IEEE 37th Annual Computer Software and Applications Conference Analysis, 2013, pp. 812–817.
[106] B. Fitzgerald and K.-J. Stol, “The dos and don’ts of crowdsourcing software development,” in SOFSEM 2015: Theory and Practice of Computer Science, ser. Lecture Notes in Computer Science, 2015, vol. 8939, pp. 58–64.
[107] “Zero robotics,” http://zerorobotics.mit.edu, Accessed: 2015-05-06.
[108] S. Nag, J. G. Katz, and A. Saenz-Otero, “Collaborative gaming and competition for cs-stem education using SPHERES zero robotics,” Acta Astronautica, vol. 83, no. 0, pp. 145 – 174, 2013.
[109] J. Farrell and M. Rabin, “Cheap talk,” The Journal of Economic Perspectives, vol. 10, no. 3, pp. 103–118, 1996.
[110] S. Zogaj and U. Bretschneider, “Crowdtesting with testcloud - managing the challenges of an intermediary in a crowdsourcing business model,” in Proceedings of the 21st European Conference on Information Systems, 2013.
[111] B. Bergvall-K°a reborn and D. Howcroft, “The Apple business model: Crowdsourcing mobile applications,” Accounting Forum, vol. 37, no. 4, pp. 280–289, Dec. 2013.
[112] L. Machado, G. Pereira, R. Prikladnicki, E. Carmel, and C. R. B. de Souza, “Crowdsourcing in the Brazilian it industry: What we know and what we don’t know,” in Proceedings of the 1st International Workshop on Crowd-based Software Development Methods and Technologies, 2014, pp. 7–12.
[113] S. F. Martin, H. Falkenberg, T. F. Dyrlund, G. A. Khoudoli, C. J. Mageean, and R. Linding, “PROTEINCHALLENGE: crowd sourcing in proteomics analysis and software development.” Journal of Proteomics, vol. 88, pp. 41–6, Aug. 2013.
[114] N. Shah, A. Dhanesha, and D. Seetharam, “Crowdsourcing for e-Governance: Case study,” in Proceedings of the 3rd International Conference on Theory and Practice of Electronic Governance, 2009, pp. 253–258.
[115] J. Warner, “Next steps in e-government crowdsourcing,” in Proceedings of the 12th Annual International Digital Government Research Conference on Digital Government Innovation in Challenging Times, 2011, pp. 177–181.
[116] S. L. Lim, D. Quercia, and A. Finkelstein, “StakeSource: Harnessing the power of crowdsourcing and social networks in stakeholder analysis,” in Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering, vol. 2, 2010, pp. 239–242.
[117] S. Lim, D. Quercia, and A. Finkelstein, “StakeNet: Using social networks to analyse the stakeholders of large-scale software projects,” Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering, vol. 2010, 2010.
[118] N. Seyff, F. Graf, and N. Maiden, “Using mobile re tools to give end-users their own voice,” in Proceedings of the 18th IEEE International Conference on Requirements Engineering, 2010, pp. 37–46.
[119] S. L. Lim, D. Damian, and A. Finkelstein, “StakeSource2.0: Using social networks of stakeholders to identify and prioritise requirements,” in Proceeding of the 33rd international conference on Software engineering, 2011, pp. 1022–1024.
[120] R. Ali, C. Solis, M. Salehie, I. Omoronyia, B. Nuseibeh, and W. Maalej, “Social sensing: When users become monitors,” in Proceedings of the 19th ACM SIGSOFT Symposium and the 13th European Conference on Foundations of Software Engineering, ser. ESEC/FSE ’11, 2011, pp. 476–479.
[121] S. L. Lim and A. Finkelstein, “StakeRare: Using social networks and collaborative filtering for large-scale requirements elicitation,” IEEE Transactions on Software Engineering, vol. 38, no. 3, pp. 707–735, 2012.
[122] A. Adepetu, K. Ahmed, and Y. A. Abd, “CrowdREquire: A requirements engineering crowdsourcing platform,” AAAI, Tech. Rep. Goodin 2005, 2012.
[123] P. Nascimento, R. Aguas, D. Schneider, and J. de Souza, “An approach to requirements categorization using Kano’s model and crowds,” in Proceedings of the 16th IEEE International Conference on Computer Supported Cooperative Work in Design, May 2012, pp. 387–392.
[124] N. Muganda, D. Asmelash, and S. Mlay, “Groupthink decision making deficiency in the requirements engineering process: Towards a crowdsourcing model,” SSRN Electronic Journal, 2012.
[125] P. Greenwood, A. Rashid, and J. Walkerdine, “UDesignIt: Towards social media for community-driven design,” Proceedings of the 34th International Conference on Software Engineering, pp. 1321–1324, June 2012.
[126] M. Hosseini, K. Phalp, J. Taylor, and R. Ali, “Towards crowdsourcing for requirements engineering,” in Proceedings of the 20th International working conference on Requirements engineering: foundation for software quality (Empirical Track), 2013.
[127] S. L. Lim and C. Ncube, “Social networks and crowdsourcing for stakeholder analysis in system of systems projects,” in Proceeding of the 8th International Conference on System of Systems Engineering, June 2013, pp. 13–18.
[128] R. Snijders and F. Dalpiaz, “Crowd-centric requirements engineering,” in Proceedings of the 2nd International Workshop on Crowdsourcing and Gamification in the Cloud, 2014.
[129] H. Wang, Y. Wang, and J. Wang, “A participant recruitment framework for crowdsourcing based software requirement acquisition,” in Proceedings of the 9th IEEE International Conference on Global Software Engineering, Aug. 2014, pp. 65–73.
[130] M. Nayebi and G. Ruhe, “An open innovation approach in support of product release decisions,” in Proceedings of the 7th International Workshop on Cooperative and Human Aspects of Software Engineering, 2014, pp. 64–71.
[131] M. Hosseini, A. Shahri, K. Phalp, J. Taylor, R. Ali, and F. Dalpiaz, “Configuring crowdsourcing for requirements elicitation,” in Proceedings of the 9th International Conference on Research Challenges in Information Science, 2015.
[132] M. S. Bernstein, “Crowd-powered interfaces,” in Proceedings of the 23nd annual ACM symposium on User interface software and technology, 2010, pp. 347–350.
[133] M. Nebeling, S. Leone, and M. Norrie, “Crowdsourced web engineering and design,” in Proceedings of the 12th International Conference on Web Engineering, 2012, pp. 1–15.
[134] T. D. LaToza, M. Chen, L. Jiang, M. Zhao, and A. V. D. Hoek, “Borrowing from the crowd : A study of recombination in software design competitions,” in Proceedings of the 37nd ACM/IEEE International Conference on Software Engineering, 2015.
[135] W. S. Lasecki, J. Kim, N. Rafter, O. Sen, J. P. Bigham, and M. S. Bernstein, “Apparition: Crowdsourced user interfaces that come to life as you sketch them,” in Proceedings of the 33rd Annual ACM Conference on Human Factors in Computing Systems, 2015, pp. 1925–1934.
[136] B. Hartmann, D. Macdougall, J. Brandt, and S. R. Klemmer, “What would other programmers do? Suggesting solutions to error messages,” in Proceedings of the 28th ACM Conference on Human Factors in Computing Systems, 2010, pp. 1019–1028.
[137] M. Mooty, A. Faulring, J. Stylos, and B. a. Myers, “Calcite: Completing code completion for constructors using crowds,” in Proceedings of the 2010 IEEE Symposium on Visual Languages and Human-Centric Computing, Sept. 2010, pp. 15–22.
[138] M. Bruch, E. Bodden, M. Monperrus, and M. Mezini, “IDE 2.0: Collective intelligence in software development,” in Proceedings of the FSE/SDP Workshop on Future of Software Engineering Research, ser. FoSER ’10, 2010, pp. 53–58.
[139] C. Watson, F. W. B. Li, and J. L. Godwin, “BlueFix: Using crowd-sourced feedback to support programming students in error diagnosis and repair,” in Proceedings of the 11th International Conference on Web-Based Learning, 2012, pp. 228–239.
[140] O. Barzilay, C. Treude, and A. Zagalsky, “Facilitating crowd sourced software engineering via stack overflow,” in Finding Source Code on the Web for Remix and Reuse. Springer New York, 2013, pp. 289–308.
[141] L. Ponzanelli, G. Bavota, M. Di Penta, R. Oliveto, and M. Lanza, “Mining stackoverflow to turn the ide into a self-confident programming prompter,” in Proceedings of the 11th Working Conference on Mining Software Repositories, 2014, pp. 102–111.
[142] ——, “Prompter: A self-confident recommender system,” in Proceedings of the 30th IEEE International Conference on Software Maintenance and Evolution, Sept 2014, pp. 577–580.
[143] E. Fast, D. Steffee, L. Wang, J. R. Brandt, and M. S. Bernstein, “Emergent, crowd-scale programming practice in the IDE,” in Proceedings of the 32nd annual ACM conference on Human factors in Computing Systems, 2014, pp. 2491–2500.
[144] M. Goldman, G. Little, and R. C. Miller, “Real-time collaborative coding in a web IDE,” in Proceedings of the 24th annual ACM symposium on User interface software and technology, 2011, pp. 155–164.
[145] M. Goldman, “Role-based interfaces for collaborative software development,” in Proceedings of the 24th Annual ACM Symposium Adjunct on User Interface Software and Technology, 2011, pp. 23–26.
[146] P. Minder and A. Bernstein, “CrowdLang - First steps towards programmable human computers for general computation,” in Proceedings of the 3rd Human Computation Workshop, JAN 2011, pp. 103–108.
[147] ——, “CrowdLang: A programming language for the systematic exploration of human computation systems,” in Proceedings of the 4th International Conference on Social Informatics. Lausanne: Springer, DEC 2012.
[148] T. Ball, S. Burckhardt, J. de Halleux, M. Moskal, and N. Tillmann, “Beyond open source: The touchdevelop cloud-based integrated development and runtime environment, Tech. Rep. MSR-TR-2014-63, May 2014.
[149] S. Ahmad, A. Battle, Z. Malkani, and S. Kamvar, “The jabberwocky programming environment for structured social computing,” in Proceedings of the 24th annual ACM symposium on User interface software and technology, 2011, pp. 53–64.
[150] D. W. Barowy, C. Curtsinger, E. D. Berger, and A. McGregor, “AutoMan: A platform for integrating human-based and digital computation,” in Proceedings of the ACM International Conference on Object Oriented Programming Systems Languages and Applications, 2012, pp. 639–654.
[151] G. Little, L. B. Chilton, M. Goldman, and R. C. Miller, “TurKit: Human computation algorithms on Mechanical Turk,” in Proceedings of the 23nd Annual ACM Symposium on User Interface Software and Technology, 2010, pp. 57–66.
[152] T. D. LaToza, E. Chiquillo, W. Ben Towne, C. Adriano, and A. van der Hoek, “CrowdCode - A platform for crowd development,” in CrowdConf 2013, 2013.
[153] T. Xie, J. Bishop, R. N. Horspool, N. Tillmann, and J. de Halleux, “Crowdsourcing code and process via Code Hunt,” in Proceedings of the 2nd International Workshop on CrowdSourcing in Software Engineering, May 2015.
[154] C. Schneider and T. Cheung, “The power of the crowd: Performing usability testing using an on-demand workforce,” in Proceedings of the 20th International Conference on Information Systems Development Cutting edge research on Information Systems, 2011.
[155] D. Liu, R. G. Bias, M. Lease, and R. Kuipers, “Crowdsourcing for usability testing,” in Proceedings of the American Society for Information Science and Technology, vol. 49, no. 1, Jan. 2012, pp. 1–10.
[156] M. Nebeling, M. Speicher, M. Grossniklaus, and M. C. Norrie, “Crowdsourced web site evaluation with crowdstudy,” in Proceedings of the 12th International Conference on Web Engineering, 2012, pp. 494–497.
[157] F. Meier, A. Bazo, M. Burghardt, and C. Wolff, “Evaluating a web-based tool for crowdsourced navigation stress tests,” in Proceedings of the 2nd International Conference on Design, User Experience, and Usability: Web, Mobile, and Product Design, 2013, pp. 248–256.
[158] M. Nebeling, M. Speicher, and M. C. Norrie, “CrowdStudy: General toolkit for crowdsourced evaluation of web interfaces,” in Proceedings of the 5th ACM SIGCHI Symposium on Engineering Interactive Computing Systems, 2013.
[159] V. H. M. Gomide, P. A. Valle, J. O. Ferreira, J. R. G. Barbosa, A. F. da Rocha, and T. M. G. d. A. Barbosa, “Affective crowdsourcing applied to usability testing,” International Journal of Computer Science and Information Technologies, vol. 5, no. 1, pp. 575–579, 2014.
[160] R. Musson, J. Richards, D. Fisher, C. Bird, B. Bussone, and S. Ganguly, “Leveraging the Crowd: How 48,000 Users Helped Improve Lync Performance,” IEEE Software, vol. 30, no. 4, pp. 38–45, July 2013.
[161] R. Vliegendhart, E. Dolstra, and J. Pouwelse, “Crowdsourced user interface testing for multimedia applications,” in Proceedings of the ACM multimedia 2012 workshop on Crowdsourcing for multimedia, 2012, pp. 21–22.
[162] K.-t. Chen, C.-j. Chang, A. Sinica, C.-c. Wu, Y.-c. Chang, and C.-l. Lei, “Quadrant of Euphoria: A crowdsourcing platform for QoE assessment,” IEEE Network, no. April, pp. 28–35, 2010.
[163] B. Gardlo, S. Egger, M. Seufert, and R. Schatz, “Crowdsourcing 2.0: Enhancing execution speed and reliability of web-based QoE testing,” in Proceedings of the 2014 IEEE International Conference on Communications, June 2014, pp. 1070–1075.
[164] T. Hossfeld, C. Keimel, M. Hirth, B. Gardlo, J. Habigt, and K. Diepold, “Best practices for QoE crowdtesting : QoE assessment with crowdsourcing,” IEEE Transactions on Multimedia, vol. 16, no. 2, pp. 541–558, 2014.
[165] T. Hossfeld, C. Keimel, and C. Timmerer, “Crowdsourcing quality-of-experience assessments,” Computer, pp. 98–102, 2014.
[166] N. Chen and S. Kim, “Puzzle-based automatic testing: Bringing humans into the loop by solving puzzles,” in Proceedings of the 27th IEEE/ACM International Conference on Automated Software Engineering, 2012, pp. 140–149.
[167] R. Pham, L. Singer, and K. Schneider, “Building test suites in social coding sites by leveraging drive-by commits,” in Proceedings of the 35th International Conference on Software Engineering, May 2013, pp. 1209–1212.
[168] M. Yan, H. Sun, and X. Liu, “iTest: Testing software with mobile crowdsourcing,” in Proceedings of the 1st International Workshop on Crowd-based Software Development Methods and Technologies, 2014, pp. 19–24.
[169] C.-J. M. Liang, N. D. Lane, N. Brouwers, L. Zhang, B. F. Karlsson, H. Liu, Y. Liu, J. Tang, X. Shan, R. Chandra, and F. Zhao, “Caiipa : Automated large-scale mobile app testing through contextual fuzzing,” in Proceedings of the 20th annual international conference on Mobile computing and networking, 2014.
[170] R. Blanco, H. Halpin, D. M. Herzig, P. Mika, J. Pound, H. S. Thompson, and T. Tran Duc, “Repeatable and reliable search system evaluation using crowdsourcing,” in Proceedings of the 34th International ACM SIGIR Conference on Research and Development in Information Retrieval, 2011, pp. 923–932.
[171] N. Sherief, N. Jiang, M. Hosseini, K. Phalp, and R. Ali, “Crowdsourcing software evaluation,” in Proceedings of the 18th International Conference on Evaluation and Assessment in Software Engineering, 2014, pp. 1–4.
[172] N. Sherief, “Software evaluation via users’ feedback at runtime,” in Proceedings of the 18th International Conference on Evaluation and Assessment in Software Engineering, 2014, pp. 1–4.
[173] W. Dietl, S. Dietzel, M. D. Ernst, N. Mote, B. Walker, S. Cooper, T. Pavlik, and Z. Popovi´c, “Verification games: Making verification fun,” in Proceedings of the 14th Workshop on Formal Techniques for Java-like Programs, 2012, pp. 42–49.
[174] W. Li, S. Seshia, and S. Jha, “CrowdMine: Towards crowdsourced human-assisted verification,” in Proceedings of the 49th Annual Design Automation Conference, 2012, pp. 2–3.
[175] D. F. Bacon, Y. Chen, D. Parkes, and M. Rao, “A market-based approach to software evolution,” in Proceeding of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applications, 2009, pp. 973–980.
[176] M. Nebeling and M. C. Norrie, “Context-aware and adaptive web interfaces : A crowdsourcing approach,” in Proceedings of the 11th International Conference on Web Engineering, 2011, pp. 167–170.
[177] ——, “Tools and architectural support for crowdsourced adaptation of web interfaces,” in Proceedings of the 11th International Conference on Web Engineering, 2011, pp. 243–257.
[178] W. Maalej and D. Pagano, “On the socialness of software,” in Proceedings of the 9th International Conference on Dependable, Autonomic and Secure Computing, Dec 2011, pp. 864–871.
[179] R. Ali, C. Solis, I. Omoronyia, M. Salehie, and B. Nuseibeh, “Social adaptation: When software gives users a voice,” in Proceedings of the 7th International Conference Evaluation of Novel Approaches to Software Engineering, June 2012.
[180] P. Akiki, A. Bandara, and Y. Yu, “Crowdsourcing user interface adaptations for minimizing the bloat in enterprise applications,” in Proceedings of the 5th ACM SIGCHI symposium on Engineering interactive computing systems, 2013, pp. 121–126.
[181] C. Challiol, S. Firmenich, G. A. Bosetti, S. E. Gordillo, and G. Rossi, “Crowdsourcing mobile web applications,” in Proceedings of the ICWE 2013 Workshops, 2013, pp. 223–237.
[182] M. Nebeling, M. Speicher, and M. C. Norrie, “CrowdAdapt: Enabling crowdsourced web page adaptation for individual viewing conditions and preferences,” in Proceedings of the 5th ACM SIGCHI Symposium on Engineering Interactive Computing Systems, 2013, pp. 23–32.
[183] H. He, Z. Ma, H. Chen, and W. Shao, “How the crowd impacts commercial applications: A user-oriented approach,” in Proceedings of the 1st International Workshop on Crowd-based Software Development Methods and Technologies, 2014, pp. 1–6.
[184] M. Almaliki, C. Ncube, and R. Ali, “The design of adaptive acquisition of users feedback: An empirical study,” in Proceedings of the 9th International Conference on Research Challenges in Information Science, 2014.
[185] S. Hamidi, P. Andritsos, and S. Liaskos, “Constructing adaptive configuration dialogs using crowd data,” in Proceedings of the 29th ACM/IEEE International Conference on Automated Software Engineering, 2014, pp. 485–490.
[186] C. Chen and K. Zhang, “Who asked what: Integrating crowdsourced FAQs into API documentation,” in Proceedings of the 36th International Conference on Software Engineering (ICSE Companion), 2014, pp. 456–459.
[187] A. Pawlik, J. Segal, M. Petre, and H. Sharp, “Crowdsourcing scientific software documentation: a case study of the NumPy documentation project,” Computing in Science and Engineering, 2014.
[188] C. Exton, A. Wasala, J. Buckley, and R. Sch¨aler, “Micro crowdsourcing: A new model for software localisation,” Localisation Focus, vol. 8, no. 1, 2009.
[189] C. Arellano, O. D´ıaz, and J. Iturrioz, “Crowdsourced web augmentation : A security model,” in Proceedings of the 11 International Conference on Web Information Systems Engineering, 2010, pp. 294–307.
[190] I. Burguera, U. Zurutuza, and S. Nadjm-Tehrani, “Crowdroid: Behavior-based malware detection system for Android,” in Proceedings of the 1st ACM workshop on Security and privacy in smartphones and mobile devices, 2011, pp. 15–26.
[191] P. K. Chilana, A. J. Ko, and J. O. Wobbrock, “LemonAid: Selection-based crowdsourced contextual help for web applications,” in Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, ser. CHI ’12, 2012, pp. 1549–1558.
[192] P. K. Chilana, A. J. Ko, J. O. Wobbrock, and T. Grossman, “A multi-site field study of crowdsourced contextual help : Usage and perspectives of end users and software teams,” in Proceedings of the 31st Annual CHI Conference on Human Factors in Computing Systems, 2013.
[193] W. Ebner, M. Leimeister, U. Bretschneider, and H. Krcmar, “Leveraging the wisdom of crowds: Designing an IT-supported ideas competition for an ERP software company,” in Proceedings of the 41st Annual Hawaii International Conference on System Sciences, Jan. 2008, pp. 417–417.
[194] H. Krcmar, U. Bretschneider, M. Huber, and J. M. Leimeister, “Leveraging crowdsourcing: Activation-supporting components for IT-based ideas competition,” Journal of Management Information Systems, vol. 26, no. 1, pp. 197–224, 2009.
[195] R. Jayakanthan and D. Sundararajan, “Enterprise crowdsourcing solution for software development in an outsourcing organization,” in Proceedings of the 11th International Conference on Web Engineering, 2011, pp. 177–180.
[196] ——, “Enterprise crowdsourcing solutions for software development and ideation,” in Proceedings of the 2nd international workshop on Ubiquitous crowdsouring, 2011, pp. 25–28.
[197] G. Standish, “The chaos report,” http://www:standishgroup:com/sample research files/chaos report 1994:pdf, Accessed: 2015- 01-27.
[198] Y.-C. Huang, C.-I. Wang, and J. Hsu, “Leveraging the crowd for creating wireframe-based exploration of mobile design pattern gallery,” in Proceedings of the companion publication of the 2013 international conference on Intelligent user interfaces companion, 2013, pp. 17–20.
[199] D. Mujumdar, M. Kallenbach, B. Liu, and B. Hartmann, “Crowdsourcing suggestions to programming problems for dynamic web development languages,” in Proceedings of the 2011 annual conference extended abstracts on Human factors in computing systems, 2011, pp. 1525–1530.
[200] W. B. Langdon and M. Harman, “Optimising existing software with genetic programming,” IEEE Transactions on Evolutionary Computation, vol. 19, no. 1, pp. 118–135, Feb 2015.
[201] J. Petke, M. Harman, W. B. Langdon, and W. Weimer, “Using genetic improvement & code transplants to specialise a C++ program to a problem class,” in Proceedings of the 17th European Conference on Genetic Programming, April 2014, pp. 132–143.
[202] M. Orlov and M. Sipper, “Flight of the FINCH through the java wilderness,” IEEE Transactions Evolutionary Computation, vol. 15, no. 2, pp. 166–182, 2011.
[203] D. R. White, A. Arcuri, and J. A. Clark, “Evolutionary improvement of programs,” IEEE Transactions on Evolutionary Computation, vol. 15, no. 4, pp. 515–538, 2011.
[204] C. Le Goues, T. Nguyen, S. Forrest, and W. Weimer, “GenProg: A generic method for automatic software repair,” IEEE Transactions on Software Engineering, vol. 38, no. 1, pp. 54–72, 2012.
[205] W. B. Langdon, B. Lam, J. Petke, and M. Harman, “Improving cuda dna analysis software with genetic programming,” in Proceedings of the 2015 Genetic and evolutionary computation conference, July 2015.
[206] B. Bruce, J. Petke, and M. Harman, “Reducing energy consumption using genetic improvement,” in Proceedings of the 2015 Genetic and evolutionary computation conference, July 2015.
[207] I. Manotas, L. Pollock, and J. Clause, “SEEDS: A software engineer’s energy-optimization decision support framework,” in Proceedings of the 36th International Conference on Software Engineering, 2014, pp. 503–514.
[208] D. Li, A. H. Tran, and W. G. J. Halfond, “Making web applications more energy efficient for OLED smartphones,” in Proceedings of the 36th International Conference on Software Engineering, 2014, pp. 527–538.
[209] F. Wu, M. Harman, Y. Jia, J. Krinke, and W. Weimer, “Deep parameter optimisation,” in Proceedings of the Genetic and evolutionary computation conference, July 2015.
[210] C. Le Goues, S. Forrest, and W. Weimer, “Current challenges in automatic software repair,” Software Quality Journal, vol. 21, no. 3, pp. 421–443, 2013.
[211] M. Harman, W. B. Langdon, and Y. Jia, “Babel pidgin: SBSE can grow and graft entirely new functionality into a real world system,” in Proceedings of the 6th Symposium on Search Based Software Engineering, August 2014, pp. 247–252.
[212] H. D. T. Nguyen, D. Qi, A. Roychoudhury, and S. Chandra, “SemFix: program repair via semantic analysis,” in Proceedings of the 35th International Conference on Software Engineering, B. H. C. Cheng and K. Pohl, Eds., May 18-26 2013, pp. 772–781.
[213] “Bing code search,” http://codesnippet.research.microsoft.com, Accessed: 2015-05-06.
[214] S. Amann, S. Proksch, and M. Mezini, “Method-call recommendations from implicit developer feedback,” in Proceedings of the 1st International Workshop on CrowdSourcing in Software Engineering, June 2014, pp. 5–6.
[215] S. Afshan, P. McMinn, and M. Stevenson, “Evolving readable string test inputs using a natural language model to reduce human oracle cost,” Proceedings of the 6th IEEE International Conference on Software Testing, Verification and Validation, vol. 0, pp. 352–361, 2013.
[216] M. Bozkurt and M. Harman, “Automatically generating realistic test input from web services,” in Proceedings of the 6th IEEE International Symposium on Service Oriented System Engineering, December.
[217] T. D. LaToza, W. B. Towne, C. M. Adriano, and A. van der Hoek, “Microtask programming: Building software with a crowd,” in Proceedings of the 27th annual ACM symposium on User interface software and technology, 2014, pp. 43–54.
[218] N. Tillmann, M. Moskal, J. de Halleux, and M. Fahndrich, “TouchDevelop: Programming cloud-connected mobile devices via touchscreen,” in Proceedings of the 10th SIGPLAN Symposium on New Ideas, New Paradigms, and Reflections on Programming and Software, 2011, pp. 49–60.
[219] J. Bishop, R. N. Horspool, T. Xie, N. Tillmann, and J. de Halleux, “Code Hunt: Experience with coding contests at scale,” Proceedings of the 37th International Conference on Software Engineering - JSEET, June 2015.
[220] A. Bernstein, M. Klein, and T. W. Malone, “Programming the global brain,” Communications of the ACM, vol. 55, no. 5, pp. 41–43, May 2012.
[221] R. Auler, E. Borin, and P. D. Halleux, “Addressing JavaScript JIT engines performance quirks : A crowdsourced adaptive compiler,” in Proceedings of the 23rd International Conference on Compiler Construction, 2014, pp. 218–237.
[222] “Microsoft Lync,” http://office:microsoft:com/lync, Accessed: 2015-01-11.
[223] “Chrome Telemetry,” http://www:chromium:org/developers/telemetry, Accessed: 2015-04-30.
[224] “Firefox Telemetry,” https://telemetry:mozilla:org, Accessed: 2015-04-30.
[225] D. Akhawe and A. P. Felt, “Alice in warningland: A large-scale field study of browser security warning effectiveness,” in Proceedings of the 22Nd USENIX Conference on Security, 2013, pp. 257–272.
[226] A. Memon, I. Banerjee, and A. Nagarajan, “GUI ripping: Reverse engineering of graphical user interfaces for testing,” in Proceedings of the 10th Working Conference on Reverse Engineering, Nov 2003, pp. 260–269.
[227] K. Lakhotia, P. McMinn, and M. Harman, “Automated test data generation for coverage: Haven’t we solved this problem yet?” in Proceedings of the 4th Testing Academia and Industry Conference — Practice And Research Techniques, 4th–6th September 2009, pp. 95–104.
[228] K. Sen and G. Agha, “CUTE and jCUTE: Concolic unit testing and explicit path model-checking tools,” in Computer Aided Verification, ser. Lecture Notes in Computer Science, T. Ball and R. Jones, Eds., 2006, vol. 4144, pp. 419–423.
[229] C. Pacheco, S. K. Lahiri, M. D. Ernst, and T. Ball, “Feedback-Directed Random Test Generation,” Proceedings of the 29th International Conference on Software Engineering, pp. 75–84, May 2007.
[230] N. Tillmann and J. de Halleux, “Pex-White Box Test Generation for .NET,” in Proceedings of the 2nd International Conference on Tests and Proofs, ser. Lecture Notes in Computer Science, B. Beckert and R. Hhnle, Eds., 2008, vol. 4966, pp. 134–153.
[231] R. Pham, L. Singer, O. Liskin, F. Figueira Filho, and K. Schneider, “Creating a shared understanding of testing culture on a social coding site,” in Proceedings of the 2013 International Conference on Software Engineering, 2013, pp. 112–121.
[232] E. J. Weyuker, “On testing non-testable programs,” The Computer Journal, vol. 25, no. 4, pp. 465–470, Nov. 1982.
[233] E. T. Barr, M. Harman, P. McMinn, M. Shahbaz, and S. Yoo, “The oracle problem in software testing: A survey,” IEEE Transactions on Software Engineering, 2015, to appear.
[234] D. Peters and D. Parnas, “Using test oracles generated from program documentation,” IEEE Transactions on Software Engineering, vol. 24, no. 3, pp. 161–173, Mar 1998.
[235] T. Xie, “Cooperative testing and analysis: Human-tool, tool-tool, and human-human cooperations to get work done,” in Proceedings of the 12th IEEE International Working Conference on Source Code Analysis and Manipulation (Keynote), 2012.
[236] M. D. Ernst and Z. Popovi´c, “Crowd-sourced program verification,” University OF Washington, Tech. Rep., 2012.
[237] R. Watro, K. Moffitt, T. Hussain, D. Wyschogrod, J. Ostwald, D. Kong, C. Bowers, E. Church, J. Guttman, and Q. Wang, “Ghost Map: Proving software correctness using games,” in The 8th International Conference on Emerging Security Information, Systems and Technologies, 2014.
[238] C. Cook and M. Visconti, “Documentation is important,” CrossTalk, vol. 7, no. 11, pp. 26–30, 1994.
[239] M. Visconti and C. Cook, “An overview of industrial software documentation practice,” in Proceedings. 22nd International Conference of the Chilean Computer Science Society, 2002, pp. 179–186.
[240] M. Kajko-Mattsson, “A survey of documentation practice within corrective maintenance,” Empirical Software Engineering, vol. 10, no. 1, pp. 31–55, 2005.
[241] B. Esselink, A practical guide to localization. John Benjamins Publishing, 2000, vol. 4.
[242] Z. P. Fry and W. Weimer, “A human study of fault localization accuracy,” in Proceedings of the 26th IEEE International Conference on Software Maintenance, 2010.
[243] Z. P. Fry, B. Landau, and W. Weimer, “A human study of patch maintainability,” in Proceedings of the 2012 International Symposium on Software Testing and Analysis, 2012, pp. 177–187.
[244] J. Cleland-Huang, Y. Shin, E. Keenan, A. Czauderna, G. Leach, E. Moritz, M. Gethers, D. Poshyvanyk, J. H. Hayes, and W. Li, “Toward actionable, broadly accessible contests in software engineering,” in Proceedings of the 34th International Conference on Software Engineering, June 2012, pp. 1329–1332.
[245] M. Harman and B. F. Jones, “Search-based software engineering,” Information and Software Technology, vol. 43, no. 14, pp. 833–839, 2001.
[246] Y.-H. Tung and S.-S. Tseng, “A novel approach to collaborative testing in a crowdsourcing environment,” Journal of Systems and Software, vol. 86, no. 8, pp. 2143–2153, Aug. 2013.
[247] K. Stolee and S. Elbaum, “Identification, impact, and refactoring of smells in pipe-like web mashups,” IEEE Transactions on Software Engineering, vol. 39, no. 12, pp. 1654–1679, Dec 2013.
[248] K. T. Stolee, S. Elbaum, and D. Dobos, “Solving the search for source code,” ACM Trans. Softw. Eng. Methodol., vol. 23, no. 3, pp. 26:1–26:45, June 2014.
[249] T. D. LaToza and A. van der Hoek, “A vision of crowd development,” in Proceedings of the 37th International Conference on Software Engineering, NIER Track, 2015, to appear.
[250] R. Kazman and H.-M. Chen, “The metropolis model a new logic for development of crowdsourced systems,” Communications of the ACM, vol. 52, no. 7, pp. 76–84, 2009.
[251] ——, “The metropolis model and its implications for the engineering of software ecosystems,” in Proceedings of the 2010 FSE/SDP workshop on Future of software engineering research, 2010, pp. 187–190.
[252] K. Mao, Y. Yang, M. Li, and M. Harman, “Pricing Crowdsourcing Based Software Development Tasks,” in Proceedings of the 2013 International Conference on Software Engineering (NIER Track), 2013, pp. 1205–1208.
[253] G. D. Saxton, O. Oh, and R. Kishore, “Rules of Crowdsourcing: Models, Issues, and Systems of Control,” Information Systems Management, vol. 30, no. 1, pp. 2–20, Jan. 2013.
[254] W.-T. Tsai, W. Wu, and M. N. Huhns, “Cloud-based software crowdsourcing,” IEEE Internet Computing, vol. 18, no. 3, pp. 78–83, May 2014.
[255] Z. Hu and W. Wu, “A game theoretic model of software crowdsourcing,” in Proceedings of the 8th IEEE International Symposium on Service Oriented System Engineering, Apr. 2014, pp. 446–453.
[256] X. L. Xu and Y. Wang, “On the Process Modeling of Software Crowdsourcing Based on Competitive Relation,” Advanced Materials Research, vol. 989-994, pp. 4708–4712, July 2014.
[257] T. D. LaToza, W. B. Towne, and A. V. D. Hoek, “Harnessing the crowd : Decontextualizing software work,” in Proceedings of the 1st International Workshop on Context in Software Development Workshop, 2014, pp. 2–3.
[258] L. Tran-Thanh, S. Stein, A. Rogers, and N. R. Jennings, “Efficient crowdsourcing of unknown experts using bounded multi-armed bandits,” Artificial Intelligence, vol. 214, pp. 89–111, Sept. 2014.
[259] K. Mao, Y. Yang, Q. Wang, Y. Jia, and M. Harman, “Developer recommendation for crowdsourced software development tasks,” in Proceedings of the 9th IEEE International Symposium on Service-Oriented System Engineering, 2015, pp. 347–356.
[260] M. V. M¨antyl¨a and J. Itkonen, “More testers - the effect of crowd size and time restriction in software testing,” Information and Software Technology, vol. 55, no. 6, pp. 986–1003, June 2013.
[261] H. Sharp, N. Baddoo, S. Beecham, T. Hall, and H. Robinson, “Models of motivation in software engineering,” Information and Software Technology, vol. 51, no. 1, pp. 219–233, 2009.
[262] S. Beecham, N. Baddoo, T. Hall, H. Robinson, and H. Sharp, “Motivation in software engineering: A systematic literature review,” Information and Software Technology, vol. 50, no. 9, pp. 860–878, 2008.
[263] B. W. Boehm et al., Software engineering economics. Prentice-hall Englewood Cliffs (NJ), 1981, vol. 197.
[264] L. R. Varshney, “Participation in crowd systems,” in Proceedings of the 50th Annual Allerton Conference on Communication, Control, and Computing, Oct. 2012, pp. 996–1001.
[265] D. L. Olson and K. Rosacker, “Crowdsourcing and open source software participation,” Service Business, vol. 7, no. 4, pp. 499–511, Nov. 2012.
[266] S. Ramakrishnan and V. Srinivasaraghavan, “Delivering software projects using captive university crowd,” in Proceedings of the 7th International Workshop on Cooperative and Human Aspects of Software Engineering, 2014, pp. 115–118.
[267] P. G. Ipeirotis, F. Provost, and J. Wang, “Quality management on amazon mechanical turk,” in Proceedings of the 2010 ACM SIGKDD Workshop on Human Computation, 2010, pp. 64–67.
[268] M.-C. Yuen, I. King, and K.-S. Leung, “A survey of crowdsourcing systems,” in Proceedings of the 2011 IEEE Third International Conference on Privacy, Security, Risk and Trust and 2011 IEEE Third Inernational Conference on Social Computing, Oct 2011, pp. 766–773.
[269] M. Allahbakhsh, B. Benatallah, A. Ignjatovic, H. Motahari-Nezhad, E. Bertino, and S. Dustdar, “Quality control in crowdsourcing systems: Issues and directions,” IEEE Internet Computing, vol. 17, no. 2, pp. 76–81, March 2013.
[270] S. M. Wolfson and M. Lease, “Look before you leap: legal pitfalls of crowdsourcing,” Proceedings of the American Society for Information Science and Technology, vol. 48, no. 1, pp. 1–10, 2011.
[271] L. P. Cox, “Truth in crowdsourcing,” IEEE Journal on Security and Privacy, vol. 9, no. 5, pp. 74–76, 2011.
[272] M. Vukovic, J. Laredo, and S. Rajagopal, “Challenges and experiences in deploying enterprise,” in Proceedings of the 10th International Conference on Web Engineering, 2010.
[273] B. H. C. Cheng, R. de Lemos, H. Giese, P. Inverardi, and J. Magee, Eds., Software Engineering for Self-Adaptive Systems (Dagstuhl Seminar), ser. Dagstuhl Seminar Proceedings, vol. 08031, 2008.
[274] M. Harman, Y. Jia, W. B. Langdon, J. Petke, I. H. Moghadam, S. Yoo, and F. Wu, “Genetic improvement for adaptive software engineering (keynote),” in Proceedings of the 9th International Symposium on Software Engineering for Adaptive and Self-Managing Systems, 2014, pp. 1–4.
[275] P. Oreizy, M. M. Gorlick, R. N. Taylor, D. Heimbigner, G. Johnson, N. Medvidovic, A. Quilici, D. S. Rosenblum, and A. L. Wolf, “An architecture-based approach to self-adaptive software,” IEEE Intelligent Systems, vol. 14, pp. 54–62, May 1999.
[276] M. Harman, Y. Jia, and Y. Zhang, “App store mining and analysis: MSR for App Stores,” in Proceedings of the 9th Working Conference on Mining Software Repositories, June 2012, pp. 108–111.
[277] D. Pagano and W. Maalej, “User feedback in the appstore: An empirical study,” in Proceedings of the 21st IEEE International Conference on Requirements Engineering, July 2013, pp. 125–134.
[278] E. Guzman and W. Maalej, “How do users like this feature? A fine grained sentiment analysis of app reviews,” in Proceedings of the 22nd International Conference on Requirements Engineering, Aug 2014, pp. 153–162.
[279] N. Chen, J. Lin, S. C. Hoi, X. Xiao, and B. Zhang, “AR-Miner: Mining informative reviews for developers from mobile app marketplace,” in Proceedings of the 36th International Conference on Software Engineering, 2014, pp. 767–778.
[280] K. Adamopoulos, M. Harman, and R. M. Hierons, “Mutation testing using genetic algorithms: A co-evolution approach,” in Proceedings of the 2004 Genetic and Evolutionary Computation Conference, June 2004, pp. 1338–1349.
[281] A. Arcuri, D. R. White, J. A. Clark, and X. Yao, “Multi-objective improvement of software using co-evolution and smart seeding,” in Proceedings of the 7th International Conference on Simulated Evolution and Learning, vol. 5361, December 2008, pp. 61–70.

软件工程中众包应用的综述相关推荐

  1. 基于在软件工程中对贝叶斯网络的循证决策

    基于在软件工程中对贝叶斯网络的循证决策 摘要:在软件工程中的推荐系统应该设计成集成依据并成为从业人员的经验.贝叶斯网络为以证据为基础的决策提供了自然统计框架,通过结合现有证据的综合概要与相关的不确定性 ...

  2. 深度学习在计算机视觉中的应用长篇综述

    深度学习在计算机视觉中的应用长篇综述 前言 2012年ImageNet比赛,使深度学习在计算机视觉领域在全世界名声大震,由此人工智能的全球大爆发.第一个研究CNN的专家使Yann LeCun,现就职于 ...

  3. 《强化学习周刊》第26期:UCL UC Berkeley发表深度强化学习中的泛化研究综述、JHU推出基于强化学习的人工决策模型...

    No.26 智源社区 强化学习组 强 化 学  习 研究 观点 资源 活动 关于周刊 强化学习作为人工智能领域研究热点之一,其研究进展与成果也引发了众多关注.为帮助研究与工程人员了解该领域的相关进展和 ...

  4. DeepMind发布最新《神经网络中持续学习》综述论文!

    来源:AI科技评论 本文约3200字,建议阅读6分钟 本文重点介绍一些神经网络中最有前途和最有影响力的方向. 在过去的几十年中,人工智能研究取得了巨大进展,但是它主要依赖于固定的数据集和固定的环境. ...

  5. 浅析软件工程中的UML建模技术

    一.基本信息 标题:浅析软件工程中的UML建模技术 时间:2018 出版源:电子世界 领域分类:软件工程:UML建模技术:需求分析 二.研究背景 问题定义:软件工程中UML建模技术的研究 难点:明确软 ...

  6. 机器学习在本体中的应用研究文献综述

    机器学习在本体标注中的应用研究文献综述<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office& ...

  7. c 语言 if 多变量相等_计算机界 TOP 3 难题:“相等”是软件工程中许多重大问题的根源...

    有一个笑话说,计算机科学界有两大难题:一是缓存失效问题,二是命名问题.但我认为还有第三个更难的问题:相等问题.你没看错,等号"="看似简单,但等号的使用和误用,是软件工程中许多重大 ...

  8. 计算机界 TOP 3 难题:“相等”是软件工程中许多重大问题的根源!

    有一个笑话说,计算机科学界有两大难题:一是缓存失效问题,二是命名问题.但我认为还有第三个更难的问题:相等问题.你没看错,等号"="看似简单,但等号的使用和误用,是软件工程中许多重大 ...

  9. 【软件工程】软件工程中应用的几种图辨析:系统流程图、数据流图、数据字典、实体联系图、状态转换图、层次方框图、Warnier图、IPO图、层次图、HIPO图、结构图、程序流程图、盒图、PAD图、判定表、

    软件工程中应用的几种图辨析:系统流程图.数据流图.数据字典.实体联系图.状态转换图.层次方框图.Warnier图.IPO图.层次图.HIPO图.结构图.程序流程图.盒图.PAD图.判定表.判定树.Ja ...

最新文章

  1. Django web框架学习笔记
  2. mysql char 和varchar哪种效率高_MySQL数据库中的字段类型varchar和char的主要区别是什么?那种字段的查找效率要高,为什么?...
  3. [转]]将 ASP.NET MVC3 Razor 项目部署到虚拟主机中
  4. Lesson 15.2 学习率调度在PyTorch中的实现方法
  5. STM32G071RB CubeMX ADC TIM DMA
  6. 【spring cloud】注解@SpringCloudApplication和@SpringBootApplication的区别
  7. mysql 数据库 应用_MySQL数据库的应用
  8. leetcode1302. 层数最深叶子节点的和(深度优先搜索)
  9. ARM的位置无关程序设计
  10. 【JVM系列】一步步解析java执行内幕,java初级面试笔试题
  11. 一部分 数据 迁移_11项最佳实践,每次数据中心迁移都必不可少
  12. springAOP学习笔记
  13. 自动驾驶3-3 自动驾驶的安全框架 Safety Frameworks for Self-Driving
  14. 邵武一中2021高考成绩查询,福建高中成绩排名2021,福建中考分数线排行榜
  15. 在word里面加水印的方法和技巧教程!
  16. 初识组件--全局注册\局部注册
  17. QT 访问sqlite数据库
  18. think python 第9章 case study:word play
  19. Flink事件时间和水印详解
  20. C++之菱形继承与虚继承(含虚函数)

热门文章

  1. 1.深入.NET框架
  2. 云展网教程 | 云展网电子杂志页面排版最佳尺寸,最佳字体,字号
  3. 如何彻底删除hao123主页?
  4. 字符串专题-LeetCode:剑指 Offer 58 - II. 左旋转字符串、LeetCode 459.重复的子字符串、 代码思路和注意点
  5. 拼多多蓝海词数据分析工具哪个好?多多情报通怎么样?
  6. Mac 调节鼠标移速
  7. 迷你酷狗播放器 v1.017
  8. 在线24点计算器工具
  9. [agc004e]Salvage Robots dp
  10. springboot多数据源配置导致mybatis的下划线转驼峰命名不起作用