Continuous Integration (CI) is a development practice where developers frequently integrate code into a common codebase. After the code is integrated, the CI server runs a test suite and other tools to produce a set of reports (e.g., output of linters and tests). If the result of a CI test run is unexpected, developers have the option to manually restart the build, re-running the same test suite on the same code; this can reveal build flakiness, if the restarted build outcome differs from the original build. In this study, we analyze restarted builds, flaky builds, and their impact on the development workflow. We observe that developers restart at least 1.72% of builds, amounting to 56,522 restarted builds in our Travis CI dataset. We observe that more mature and more complex projects are more likely to include restarted builds. The restarted builds are mostly builds that are initially failing due to a test, network problem, or a Travis CI limitations such as execution timeout. Finally, we observe that restarted builds have a major impact on development workflow. Indeed, in 54.42% of the restarted builds, the developers analyze and restart a build within an hour of the initial failure. This suggests that developers wait for CI results, interrupting their workflow to address the issue. Restarted builds also slow down the merging of pull requests by a factor of three, bringing median merging time from 16h to 48h.
翻译:持续整合 (CI) 是开发者经常将代码整合到共同代码库的一种开发做法。 在代码整合后, CI服务器运行一个测试套件和其他工具, 以生成一套报告( 例如 linters 的输出和测试 ) 。 如果 CI 测试运行的结果出乎意料, 开发者可以选择手动重新启动构建, 在同一代码上重新运行同一个测试套件; 如果重新启动的构建结果与最初的构建结果不同, 这可以显示构建不易。 在本研究中, 我们分析重开的构建、 滑动的构建及其对发展工作流程的影响。 我们观察到, CI 服务器至少重新启动了1.72%的建筑, 总共56, 522 重建了一套报告( 例如 linters 的输出和测试 ) 。 如果 CI 测试运行结果出意外, 开发者可以选择手工重开, 在同一代码上重置相同的测试套件中, 重新创建的测试套件可以显示构建不全过程。 最后, 我们发现, 重新创建的建筑对开发流程产生了重大影响。 事实上, 重建后的建设过程的54. 44.2 %, 重新创建者分析并重新启动了56, 522 重建了 重建了 重建了 重建了 重建了, 重建了 重建了, 重建了 进入了 进入了 CIR, 的运行了, 进入了 进入了 运行了 的正常 的正常 的运行 的 的, 。