ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
Continuous integration in a social-coding world
Bogdan Vasilescu, Stef van Schuylenburg, Jules Wulms, Alexander Serebrenik, Mark G. J. van den Brand
Continuous integration in a social-coding world Bogdan Vasilescu, - - PowerPoint PPT Presentation
Continuous integration in a social-coding world Bogdan Vasilescu, Stef van Schuylenburg, Jules Wulms, Alexander Serebrenik, Mark G. J. van den Brand @b_vasilescu @aserebrenik #icsme14 ICSME 2014, Victoria, BC, Canada Integration [used
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
Bogdan Vasilescu, Stef van Schuylenburg, Jules Wulms, Alexander Serebrenik, Mark G. J. van den Brand
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
Development stops Integration starts
“[used to be] a long and unpredictable process” (Martin Fowler, 2000)
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
integration with every commit
speeds up collaborative software development by reducing integration problems
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
integration with every commit Initiate CI process
Build
T est Report
Tests
speeds up collaborative software development by reducing integration problems
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 “There are 7.1M people collaborating right now across 15.9M repositories
things together. Their story is our story.”
https://github.com/about/press
How are GitHub developers using CI?
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
How are GitHub developers using CI?
(1) Most projects are configured to use CI, but less than half actually do.
20 40 60 80 Java Python Ruby
Programming.language count
configured and using configured but not using not configured
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Spocktocat Jean-Luc Picat IronCat
Repository
<created>
Contributing to IronCat’s repository
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Collaborators
<push> (commit)
Spocktocat
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
I want to add a new feature / fix an issue but I don’ t have commit rights
Spocktocat
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Repository
<forked>
Spocktocat
<created>
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Repository
<created> <forked>
I can implement the change in my own fork. But how to signal IronCat?
<push> (commit)
Spocktocat
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Repository
<created> <forked>
Can you please pull my change into your repository>
<push> (commit) <pull request>
Spocktocat
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Repository
<created> <forked>
Nice work! I’ll merge your change
<push> (commit) <pull request>
Spocktocat
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created> <member of>
Repository
<created> <forked>
Nice work! I’ll merge your change
<push> (commit) <merge commit> <pull request>
Spocktocat
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Direct contributions (Collaborators)
Indirect contributions (Pull requests)
Spocktocat
<pull request> <push> <push> <push>
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
understanding of testing culture on a social coding site,” in ICSE 2013
scalability challenges when integrating (many) outside contributions automated tests
transparency and collaboration in an open software repository,” in CSCW 2012
unprecedented low barrier to entry for potential contributors
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
How are GitHub developers using CI?
Distribution of p−values from the Chi^2 tests
0.01 0.05 0.1 0.5 1 0.2 0.5 1.0 2.0 5.0 10.0 20.0
Odds Ratios
(1) Most projects are configured to use CI, but less than half actually do. (2) Pull requests are much more likely to result in successful builds than direct commits
20 40 60 80 Java Python Ruby
Programming.language count
configured and using configured but not using not configured
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
223 large and active repositories
* not forks * ≥ 1 year * both commits and pull requests * Java, Python, or Ruby * ≥ 10 changes last month * ≥ 10 contributors
GitHub data on demand,” in MSR 2014
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Direct contributions (Collaborators)
Indirect contributions (Pull requests)
Spocktocat
<pull request> <push> <push> <push>
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat
Jean-Luc Picat IronCat
Repository
<created>
Spocktocat
<pull request> <push> <push> <push>
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
?
.travis.yml
No Stop
Y es
rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
?
.travis.yml
No Stop
Y es
20 40 60 80 Java Python Ruby
Programming.language count
rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 configured and using (113 / 223) configured but not using (93 / 223) not configured (17 / 223)
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
?
.travis.yml
No Stop
Y es Does type matter for passed/failed?
rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337
Distribution of p−values from the Chi^2 tests
0.01 0.05 0.1 0.5 1
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
?
.travis.yml
No Stop
Y es
rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337 rails/rails #passed builds #failed builds commits 5767 3715 pull reqs 2450 1337
0.2 0.5 1.0 2.0 5.0 10.0 20.0
Odds Ratios
Which type succeeds more
Odds ratios
ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14
How are GitHub developers using CI?
Distribution of p−values from the Chi^2 tests
0.01 0.05 0.1 0.5 1 0.2 0.5 1.0 2.0 5.0 10.0 20.0
Odds Ratios
(1) Most projects are configured to use CI, but less than half actually do. (2) Pull requests are much more likely to result in successful builds than direct commits
20 40 60 80 Java Python Ruby
Programming.language count