Crowdsourcing platforms, such as Stack Overflow, have changed and impacted the software development practice. In these platforms, developers share and reuse their software development and programming experience. Therefore, a plethora of research work focused on crowdsourcing in software engineering and showed that, among other things, crowdsourced development tends to increase developers' productivity and reduce time-to-market. However, in crowdsourcing, the empirical studies of software quality are lacking, and simple questions, such as what developers use the crowdsourcing knowledge for, are unanswered. Therefore, our research focused on studying the impact of reusing crowdsourcing knowledge on software projects. To do so, we conduct several large-scale empirical studies on some of the well-known crowdsourcing platforms, including Stack Overflow and npm. Our results showed that reusing knowledge from these crowdsourcing platforms has the potential to assist software development practice, specifically in the form of reusing crowdsourced code. However, using such knowledge affects the quality of the software in several aspects, such as making the software projects suffer from dependency overhead and increasing the maintenance effort. Based on these findings, we use the gained knowledge to make sound data-driven decisions where we examine software quality assurance methods to mitigate the risk of relying on crowd sourcing knowledge in software development. We examine the use of continuous integration (CI). Our analysis showed how CI can be improved to increase developers' productivity and save their resources.
翻译:诸如Stack Overflow等众包平台已经改变并影响了软件开发实践。在这些平台上,开发者分享并复用其软件开发与编程经验。因此,大量研究工作聚焦于软件工程中的众包现象,并表明众包开发有助于提升开发者生产力并缩短产品上市时间。然而,当前针对众包模式下软件质量的实证研究尚显不足,一些基础问题——例如开发者如何利用众包知识——仍未得到解答。为此,本研究致力于探究复用众包知识对软件项目的影响。我们通过在Stack Overflow和npm等知名众包平台上开展多项大规模实证研究来实现这一目标。研究结果表明,复用这些众包平台的知识(特别是以代码复用的形式)具有辅助软件开发实践的潜力。但此类知识的运用也会在多方面影响软件质量,例如导致软件项目承受依赖项开销、增加维护成本等。基于这些发现,我们运用所获知识制定合理的数据驱动决策,通过检验软件质量保障方法来降低软件开发中对众包知识的依赖风险。我们重点考察了持续集成(CI)技术的应用,分析揭示了如何改进CI以提升开发者生产力并节约其资源。