Continuous integration in a social-coding world Bogdan Vasilescu, - - PowerPoint PPT Presentation

continuous integration in a social coding world
SMART_READER_LITE
LIVE PREVIEW

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


slide-1
SLIDE 1

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

slide-2
SLIDE 2

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

Development stops Integration starts

Integration

“[used to be] a long and unpredictable process” (Martin Fowler, 2000)

slide-3
SLIDE 3

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

integration with every commit

Continuous Integration

speeds up collaborative software development by reducing integration problems

slide-4
SLIDE 4

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

Continuous Integration

slide-5
SLIDE 5

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 “There are 7.1M people collaborating right now across 15.9M repositories

  • n GitHub. Developers from all around the world are building amazing

things together. Their story is our story.”

https://github.com/about/press

How are GitHub developers using CI?

slide-6
SLIDE 6

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

slide-7
SLIDE 7

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat

Spocktocat Jean-Luc Picat IronCat

Repository

<created>

GitHub workflow

Contributing to IronCat’s repository

slide-8
SLIDE 8

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat

Jean-Luc Picat IronCat

Repository

<created>

Collaborators

<push> (commit)

Spocktocat

GitHub workflow

slide-9
SLIDE 9

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

GitHub workflow

slide-10
SLIDE 10

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat

Jean-Luc Picat IronCat

Repository

<created>

Repository

<forked>

Spocktocat

<created>

GitHub workflow

slide-11
SLIDE 11

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

GitHub workflow

slide-12
SLIDE 12

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

GitHub workflow

slide-13
SLIDE 13

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

GitHub workflow

slide-14
SLIDE 14

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

GitHub workflow

slide-15
SLIDE 15

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat

Jean-Luc Picat IronCat

Repository

<created>

Direct contributions (Collaborators)

Indirect contributions (Pull requests)

GitHub workflow

Spocktocat

<pull request> <push> <push> <push>

slide-16
SLIDE 16

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

  • R. Pham, L. Singer, O. Liskin, K. Schneider et al., “Creating a shared

understanding of testing culture on a social coding site,” in ICSE 2013

scalability challenges when integrating (many) outside contributions automated tests

  • L. A. Dabbish, H. C. Stuart, J. Tsay, and J. D. Herbsleb, “Social coding in GitHub:

transparency and collaboration in an open software repository,” in CSCW 2012

unprecedented low barrier to entry for potential contributors

slide-17
SLIDE 17

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

slide-18
SLIDE 18

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

GHTorrent sample

  • G. Gousios, “The GHTorent dataset and tool suite,” in MSR 2013
  • G. Gousios, B. Vasilescu, A. Serebrenik, A. Zaidman, “Lean GHTorrent:

GitHub data on demand,” in MSR 2014

slide-19
SLIDE 19

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>

GitHub + Travis-CI

slide-20
SLIDE 20

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14 Octocat

Jean-Luc Picat IronCat

Repository

<created>

Spocktocat

<pull request> <push> <push> <push>

GitHub + Travis-CI

slide-21
SLIDE 21

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

Methods and Data

slide-22
SLIDE 22

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

?

.travis.yml

No Stop

Methods and Data

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

slide-23
SLIDE 23

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

?

.travis.yml

No Stop

Methods and Data

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)

slide-24
SLIDE 24

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

?

.travis.yml

No Stop

Methods and Data

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

²+ Stouffer

Distribution of p−values from the Chi^2 tests

0.01 0.05 0.1 0.5 1

slide-25
SLIDE 25

ICSME 2014, Victoria, BC, Canada @b_vasilescu @aserebrenik #icsme14

?

.travis.yml

No Stop

Methods and Data

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

  • ften?

Odds ratios

slide-26
SLIDE 26

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