Build System Maintenance



       Shane McIntosh
What is the build system?

.c


.c


            2
What is the build system?
      .c   .c




                .o       .o


                              .exe




                     2
Build code is complex...




           3
Build Maintenance is a
Nuisance for Developers




           4
Build Maintenance is a
Nuisance for Developers




           4
Build Maintenance is a
   Nuisance for Developers


    Make




Autotools     4
Build Maintenance is a
   Nuisance for Developers


    Make
            Migration to
            newer build
            technology
Autotools        4
Build Bugs Even Affect
    the End User!




           5
Build Bugs Even Affect
      the End User!


Address Bar




              5
Build Bugs Even Affect
      the End User!


Address Bar        Search Bar




              5
Build Bugs Even Affect
      the End User!


Address Bar        Search Bar




              5
Build Bugs Even Affect
      the End User!


Address Bar        Search Bar




              5
Build Systems Require 12%
      of a Developer’s
     Time (on average)




        Kumfert, G., and Epperly, T.
         Software in the DOE: The
       Hidden Overhead of the “Build”
6
Build Systems Require 12%
              of a Developer’s
             Time (on average)


 Build maintenance
slows development!
                Kumfert, G., and Epperly, T.
                 Software in the DOE: The
               Hidden Overhead of the “Build”
        6
Four Dimensional Study of
    Build Maintenance
 Size   Evolution       Coupling     People

                        .c   ? .mk




                    7
8
PLplot



8
Size        Evolution        Coupling         People

                              .c   ? .mk



 9% of      Build churn        Tightly      Dispersed or
all files   >> src churn       coupled       concentrated



                                   PLplot



                          9
Size        Evolution         Coupling         People

                               .c   ? .mk



 9% of      Build churn         Tightly      Dispersed or
all files   >> src churn        coupled       concentrated



                                    PLplot



                          10
Identifying build maintainers
     Source
     Build
.c     .c     .c   .c   .ac   .c   .c
Identifying build maintainers
     Source
     Build
.c     .c       .c       .c   .ac   .c   .c




Change        Change    Change      Change
list #1       list #2   list #3     list #4
Identifying build maintainers
     Source
     Build
.c     .c       .c       .c   .ac   .c   .c




Change        Change    Change      Change
                                              25% build
list #1       list #2   list #3     list #4
Identifying build maintainers
     Source
     Build
.c     .c       .c       .c   .ac   .c   .c




Change        Change    Change      Change
                                              25% build
list #1       list #2   list #3     list #4
Identifying build maintainers
     Source
     Build
.c     .c       .c        .c   .ac   .c   .c




Change        Change     Change      Change
                                               25% build
list #1       list #2    list #3     list #4




              0% build
Identifying build maintainers
     Source
     Build
.c     .c       .c        .c   .ac   .c   .c




Change        Change     Change      Change
                                               25% build
list #1       list #2    list #3     list #4




              0% build
Identifying build maintainers
     Source
     Build
.c     .c       .c        .c   .ac   .c   .c




Change        Change     Change      Change
                                                 25% build
list #1       list #2    list #3     list #4




              0% build               50% build
Identifying build maintainers
     Source
     Build
.c     .c       .c        .c   .ac   .c   .c




Change        Change     Change      Change
list #1       list #2    list #3     list #4


                                               ≥
              0% build               50% build
Identifying build maintainers
     Source
     Build
.c     .c       .c        .c   .ac   .c   .c




Change        Change     Change      Change
list #1       list #2    list #3     list #4


                                               ≥
              0% build               50% build
If you maintain source code,
do you maintain build code?
   % of developers


       79%




                     22%   25%




                     12
If you maintain source code,
do you maintain build code?
   % of developers


       79%




                     22%   25%




                     12
Dispersed
   Ownership:
Build maintenance is
distributed amongst
most team members




                       13
Dispersed
    Ownership:
 Build maintenance is
 distributed amongst
 most team members



    Concentrated
     Ownership:
     A small team is
  responsible for most
of the build maintenance

                           13
Dispersed
    Ownership:
 Build maintenance is
 distributed amongst
 most team members

   Which build ownership
     style performs best?
   Concentrated
    Ownership:
     A small team is
  responsible for most
of the build maintenance

                           13
Tool Support Needed
    for Build Maintenance!
 Build maintenance required    Build churn >>
for 27% of source code tasks    source churn




                                                14
Size        Evolution         Coupling         People

                               .c   ? .mk



 9% of      Build churn         Tightly      Dispersed or
all files   >> src churn        coupled       concentrated



                                    PLplot



                          15
Size        Evolution         Coupling         People

                               .c   ? .mk



 9% of      Build churn         Tightly      Dispersed or
all files   >> src churn        coupled       concentrated

                 Questions?

                                    PLplot



                          15

ICSE2011_SRC

  • 1.
  • 2.
    What is thebuild system? .c .c 2
  • 3.
    What is thebuild system? .c .c .o .o .exe 2
  • 4.
    Build code iscomplex... 3
  • 5.
    Build Maintenance isa Nuisance for Developers 4
  • 6.
    Build Maintenance isa Nuisance for Developers 4
  • 7.
    Build Maintenance isa Nuisance for Developers Make Autotools 4
  • 8.
    Build Maintenance isa Nuisance for Developers Make Migration to newer build technology Autotools 4
  • 9.
    Build Bugs EvenAffect the End User! 5
  • 10.
    Build Bugs EvenAffect the End User! Address Bar 5
  • 11.
    Build Bugs EvenAffect the End User! Address Bar Search Bar 5
  • 12.
    Build Bugs EvenAffect the End User! Address Bar Search Bar 5
  • 13.
    Build Bugs EvenAffect the End User! Address Bar Search Bar 5
  • 14.
    Build Systems Require12% of a Developer’s Time (on average) Kumfert, G., and Epperly, T. Software in the DOE: The Hidden Overhead of the “Build” 6
  • 15.
    Build Systems Require12% of a Developer’s Time (on average) Build maintenance slows development! Kumfert, G., and Epperly, T. Software in the DOE: The Hidden Overhead of the “Build” 6
  • 16.
    Four Dimensional Studyof Build Maintenance Size Evolution Coupling People .c ? .mk 7
  • 17.
  • 18.
  • 19.
    Size Evolution Coupling People .c ? .mk 9% of Build churn Tightly Dispersed or all files >> src churn coupled concentrated PLplot 9
  • 20.
    Size Evolution Coupling People .c ? .mk 9% of Build churn Tightly Dispersed or all files >> src churn coupled concentrated PLplot 10
  • 21.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c
  • 22.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change list #1 list #2 list #3 list #4
  • 23.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change 25% build list #1 list #2 list #3 list #4
  • 24.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change 25% build list #1 list #2 list #3 list #4
  • 25.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change 25% build list #1 list #2 list #3 list #4 0% build
  • 26.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change 25% build list #1 list #2 list #3 list #4 0% build
  • 27.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change 25% build list #1 list #2 list #3 list #4 0% build 50% build
  • 28.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change list #1 list #2 list #3 list #4 ≥ 0% build 50% build
  • 29.
    Identifying build maintainers Source Build .c .c .c .c .ac .c .c Change Change Change Change list #1 list #2 list #3 list #4 ≥ 0% build 50% build
  • 30.
    If you maintainsource code, do you maintain build code? % of developers 79% 22% 25% 12
  • 31.
    If you maintainsource code, do you maintain build code? % of developers 79% 22% 25% 12
  • 32.
    Dispersed Ownership: Build maintenance is distributed amongst most team members 13
  • 33.
    Dispersed Ownership: Build maintenance is distributed amongst most team members Concentrated Ownership: A small team is responsible for most of the build maintenance 13
  • 34.
    Dispersed Ownership: Build maintenance is distributed amongst most team members Which build ownership style performs best? Concentrated Ownership: A small team is responsible for most of the build maintenance 13
  • 35.
    Tool Support Needed for Build Maintenance! Build maintenance required Build churn >> for 27% of source code tasks source churn 14
  • 36.
    Size Evolution Coupling People .c ? .mk 9% of Build churn Tightly Dispersed or all files >> src churn coupled concentrated PLplot 15
  • 37.
    Size Evolution Coupling People .c ? .mk 9% of Build churn Tightly Dispersed or all files >> src churn coupled concentrated Questions? PLplot 15

Editor's Notes

  • #2 \n
  • #3 Infrastructure that translates source code into deliverables\n
  • #4 Infrastructure that translates source code into deliverables\n
  • #5 Infrastructure that translates source code into deliverables\n
  • #6 Infrastructure that translates source code into deliverables\n
  • #7 Infrastructure that translates source code into deliverables\n
  • #8 Infrastructure that translates source code into deliverables\n
  • #9 Infrastructure that translates source code into deliverables\n
  • #10 Infrastructure that translates source code into deliverables\n
  • #11 Infrastructure that translates source code into deliverables\n
  • #12 Infrastructure that translates source code into deliverables\n
  • #13 Infrastructure that translates source code into deliverables\n
  • #14 Infrastructure that translates source code into deliverables\n
  • #15 Infrastructure that translates source code into deliverables\n
  • #16 \n
  • #17 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #18 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #19 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #20 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #21 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #22 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #23 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #24 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #25 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #26 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #27 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #28 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #29 devs: constantly have to rebuilt artifacts to test changes... bld sys incrementally updates builds\n\n\n
  • #30 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #31 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #32 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #33 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #34 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #35 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #36 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #37 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #38 Firefox 3.0 was built and delivered incorrectly\nusers in a networked environment address/search bar broken\ndue to an incorrect version of the SQLite library being linked in build process\nFix was delivered 4 months late in a service pack (3.0.1)\n
  • #39 Based on survey results...\n
  • #40 \n
  • #41 \n
  • #42 \n
  • #43 \n
  • #44 \n
  • #45 \n
  • #46 \n
  • #47 \n
  • #48 \n
  • #49 \n
  • #50 \n
  • #51 Build maintenance is a nuisance for developers!\nneed tools to help them to cope!\n
  • #52 \n
  • #53 - devs may not commit all changes in one revision\n
  • #54 - devs may not commit all changes in one revision\n
  • #55 - devs may not commit all changes in one revision\n
  • #56 - devs may not commit all changes in one revision\n
  • #57 - devs may not commit all changes in one revision\n
  • #58 - devs may not commit all changes in one revision\n
  • #59 - devs may not commit all changes in one revision\n
  • #60 - devs may not commit all changes in one revision\n
  • #61 - devs may not commit all changes in one revision\n
  • #62 - devs may not commit all changes in one revision\n
  • #63 - devs may not commit all changes in one revision\n
  • #64 - devs may not commit all changes in one revision\n
  • #65 - devs may not commit all changes in one revision\n
  • #66 - devs may not commit all changes in one revision\n
  • #67 - devs may not commit all changes in one revision\n
  • #68 - devs may not commit all changes in one revision\n
  • #69 - devs may not commit all changes in one revision\n
  • #70 - devs may not commit all changes in one revision\n
  • #71 - devs may not commit all changes in one revision\n
  • #72 - devs may not commit all changes in one revision\n
  • #73 - devs may not commit all changes in one revision\n
  • #74 - devs may not commit all changes in one revision\n
  • #75 - devs may not commit all changes in one revision\n
  • #76 - devs may not commit all changes in one revision\n
  • #77 - devs may not commit all changes in one revision\n
  • #78 - devs may not commit all changes in one revision\n
  • #79 - devs may not commit all changes in one revision\n
  • #80 - Jazz src devs are often responsible for build dev\n- Git and Linux are less so\n
  • #81 - Jazz distributes build work...\n
  • #82 - Jazz distributes build work...\n
  • #83 - Jazz distributes build work...\n
  • #84 - Jazz distributes build work...\n
  • #85 - Jazz distributes build work...\n
  • #86 \n
  • #87 Build maintenance is a nuisance for developers!\nneed tools to help them to cope!\n