SlideShare ist ein Scribd-Unternehmen logo
1 von 87
Downloaden Sie, um offline zu lesen
Collecting and Leveraging a
Benchmark of Build System Clones
to Aid in Quality Assessments
Shane
McIntosh
@shane_mcintosh
shanemcintosh@acm.org
Collecting and Leveraging a
Benchmark of Build System Clones
to Aid in Quality Assessments
Shane
McIntosh
@shane_mcintosh
shanemcintosh@acm.org
Martin
Poehlmann
Elmar
Juergens
Collecting and Leveraging a
Benchmark of Build System Clones
to Aid in Quality Assessments
Shane
McIntosh
@shane_mcintosh
shanemcintosh@acm.org
Martin
Poehlmann
Elmar
Juergens
Audris
Mockus
Collecting and Leveraging a
Benchmark of Build System Clones
to Aid in Quality Assessments
Shane
McIntosh
@shane_mcintosh
shanemcintosh@acm.org
Bram
Adams
Ahmed E.
Hassan
Martin
Poehlmann
Elmar
Juergens
Audris
Mockus
Collecting and Leveraging a
Benchmark of Build System Clones
to Aid in Quality Assessments
Shane
McIntosh
@shane_mcintosh
shanemcintosh@acm.org
Bram
Adams
Ahmed E.
Hassan
Martin
Poehlmann
Elmar
Juergens
Audris
Mockus
Brigitte
Haupt
Christian
Wagner
What is a build system?
Source
code
What is a build system?
Source
code
Deliverable
.tex
.c
.cc
.o
.o
.dvi
.a
.exe
.pdf
.deb
Build systems describe how sources are
translated into deliverables
3
4
Step 1 -
Configuration
Step 2 -
Construction
Step 3 -
Certification
Step 4 -
Packaging
Step 5 -
Deployment
5
Step 1 - Configuration
6
Step 2 - Construction
7
Step 3 - Certification
8
Step 4 - Packaging
9
Step 5 - Deployment
Continuous Integration:!
Enabled by the
build system
10
Continuous Integration:!
Enabled by the
build system
10
Commit
Commit
9719cf0
Continuous Integration:!
Enabled by the
build system
10
Commit
Build
Commit
9719cf0
Continuous Integration:!
Enabled by the
build system
10
Commit
Build
Test
Commit
9719cf0
Continuous Integration:!
Enabled by the
build system
10
Commit
Build
Test
Report
Commit
9719cf0
broke the
build!
Commit
9719cf0
Continuous Integration:!
Enabled by the
build system
10
Commit
Build
Test
Report
Commit
9719cf0
broke the
build!
Commit
9719cf0
“...nothing can be
said to be certain,
except death and
taxes”	

 - Benjamin Franklin
The Build “Tax”
An Empirical Study of Build
Maintenance Effort!
S. McIntosh, B. Adams, T. H. D.
Nguyen, Y. Kamei, A. E. Hassan
[ICSE 2011]
Up to 27% of source
changes require build
changes, too!
11
“...nothing can be
said to be certain,
except death and
taxes”	

 - Benjamin Franklin
The Build “Tax”
An Empirical Study of Build
Maintenance Effort!
S. McIntosh, B. Adams, T. H. D.
Nguyen, Y. Kamei, A. E. Hassan
[ICSE 2011]
Up to 27% of source
changes require build
changes, too!
How do practitioners cope
with build maintenance?
11
Cloning!
Useful build
logic
12
Useful build
logic
Cloning!
Useful build
logic
12
Copy
&
paste Useful build
logic
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
30 custom business
applications
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
30 custom business
applications
One monolithicbuild system
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
30 custom business
applications
One monolithicbuild system
1.1 million lines
of build logic
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
30 custom business
applications
One monolithicbuild system
1.1 million lines
of build logic
Clone coverageof 94%-99%
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
30 custom business
applications
One monolithicbuild system
1.1 million lines
of build logic
Clone coverageof 94%-99%
Inflation due to cloning of
10x-23x
13
Excessive cloning makes build
maintenance painful
!
!
!
!
!
30 custom business
applications
One monolithicbuild system
1.1 million lines
of build logic
Clone coverageof 94%-99%
Inflation due to cloning of
10x-23x
Build changes manuallyduplicated 30 times
13
14
14
How much
cloning is
typical?
14
How much
cloning is
typical?
Measured
14
How much
cloning is
typical?
Measured Typical
14
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
Measured Typical
14
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical
14
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical
15
15
15
Large collection of open source
15
15
Large collection of open source
3,872 projects
15
15
Large collection of open source
3,872 projects
1,275 Java projects
Ant Maven
15
15
Large collection of open source
3,872 projects
2,597 C/C++ projects
Autotools CMake
1,275 Java projects
Ant Maven
15
16
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical
Apache Github GNU Sourceforge
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
0.00
0.25
0.50
0.75
1.00
Ant Maven Ant Maven Ant Ant Maven
CloneCoverage
Minimum
Length
5
10
15
20
17
Lots of small clones in Java build systems
Apache Github GNU Sourceforge
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
0.00
0.25
0.50
0.75
1.00
Ant Maven Ant Maven Ant Ant Maven
CloneCoverage
Minimum
Length
5
10
15
20
17
Build logic clonestend to be small
Lots of small clones in Java build systems
Apache Github GNU Sourceforge
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
0.00
0.25
0.50
0.75
1.00
Ant Maven Ant Maven Ant Ant Maven
CloneCoverage
Minimum
Length
5
10
15
20
17
Half of Maven systems have clone
coverage of at least 47%-50%
Build logic clonestend to be small
Lots of small clones in Java build systems
Apache Github GNU Sourceforge
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
0.00
0.25
0.50
0.75
1.00
Ant Maven Ant Maven Ant Ant Maven
CloneCoverage
Minimum
Length
5
10
15
20
17
Half of Maven systems have clone
coverage of at least 47%-50%
Build logic clonestend to be small
1/4 of Ant systems have
clone coverage of >50%
Lots of small clones in Java build systems
18
Apache Github GNU Sourceforge
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
0.0
0.2
0.4
0.6
Autotools CMake Autotools CMake Autotools CMake Autotools CMake
CloneCoverage
Minimum
Length
5
10
15
20
Less cloning in C/C++ build systems
18
Apache Github GNU Sourceforge
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
0.0
0.2
0.4
0.6
Autotools CMake Autotools CMake Autotools CMake Autotools CMake
CloneCoverage
Minimum
Length
5
10
15
20
Less cloning in C/C++ build systems
18
Apache Github GNU Sourceforge
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
0.0
0.2
0.4
0.6
Autotools CMake Autotools CMake Autotools CMake Autotools CMake
CloneCoverage
Minimum
Length
5
10
15
20
Less cloning in C/C++ build systems
Clone coverage rarely exceeds
30% in C/C++ build systems
18
Apache Github GNU Sourceforge
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
0.0
0.2
0.4
0.6
Autotools CMake Autotools CMake Autotools CMake Autotools CMake
CloneCoverage
Minimum
Length
5
10
15
20
Less cloning in C/C++ build systems
Clone coverage rarely exceeds
30% in C/C++ build systems
Yet there are still someC/C++ build systemswith plenty of clones!27%-66% 21%-48%
19
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical
19
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical>50% clone
coverage
is common
<30% clone
coverage
is common
20
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical>50% clone
coverage
is common
<30% clone
coverage
is common
21
Manual analysis of a statistically
representative sample of clones
21
Manual analysis of a statistically
representative sample of clones
Autotools CMakeAnt Maven Total
21
Manual analysis of a statistically
representative sample of clones
Autotools CMakeAnt Maven Total
56,521 71,543 23,723 3,746All clones 155,533
21
Manual analysis of a statistically
representative sample of clones
Autotools CMakeAnt Maven Total
56,521 71,543 23,723 3,746All clones 155,533
Sample!
(95%±5%)
382 382 378 349 1,491
21
Manual analysis of a statistically
representative sample of clones
Autotools CMakeAnt Maven Total
56,521 71,543 23,723 3,746All clones 155,533
Sample!
(95%±5%)
382 382 378 349 1,491
Config.
Const.
Cert.
Pkg.
Depl.
32% 79% 22% 40%
64% 17% 56% 66%
12% 4% 13% 11%
25% 21% 21% 2%
11% 1% 9% 7%
21
Manual analysis of a statistically
representative sample of clones
Autotools CMakeAnt Maven Total
56,521 71,543 23,723 3,746All clones 155,533
Sample!
(95%±5%)
382 382 378 349 1,491
Config.
Const.
Cert.
Pkg.
Depl.
32% 79% 22% 40%
64% 17% 56% 66%
12% 4% 13% 11%
25% 21% 21% 2%
11% 1% 9% 7%
Cloning shifts from
construction to
configuration
21
Manual analysis of a statistically
representative sample of clones
Autotools CMakeAnt Maven Total
56,521 71,543 23,723 3,746All clones 155,533
Sample!
(95%±5%)
382 382 378 349 1,491
Config.
Const.
Cert.
Pkg.
Depl.
32% 79% 22% 40%
64% 17% 56% 66%
12% 4% 13% 11%
25% 21% 21% 2%
11% 1% 9% 7%
Cloning shifts from
construction to
configuration
Construction is the
most heavily cloned
C/C++ build phase
21
Manual analysis of a statistically
representative sample of clones
Autotools CMakeAnt Maven Total
56,521 71,543 23,723 3,746All clones 155,533
Sample!
(95%±5%)
382 382 378 349 1,491
Config.
Const.
Cert.
Pkg.
Depl.
32% 79% 22% 40%
64% 17% 56% 66%
12% 4% 13% 11%
25% 21% 21% 2%
11% 1% 9% 7%
Cloning shifts from
construction to
configuration
Construction is the
most heavily cloned
C/C++ build phase
Rarely
cloned due
to CPack
21
22
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical>50% clone
coverage
is common
<30% clone
coverage
is common
22
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical Cloning shifts
from const. to
config.
Mostly
construction
clones
>50% clone
coverage
is common
<30% clone
coverage
is common
23
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical Cloning shifts
from const. to
config.
Mostly
construction
clones
>50% clone
coverage
is common
<30% clone
coverage
is common
24
Teams often migrate from one technology to another
Autotools CMakeAnt Maven
24
Teams often migrate from one technology to another
Autotools CMakeAnt Maven
Could technology migration
help to reduce cloning?
Migration is not a silver bullet
●
●
●
●
●
●
0.39
0.47
0.52
0.70
0.75
0.82
0.00 0.00
0.04
0.22
0.30
0.47
0.15
0.25
0.36
0.68
0.77
0.84
0.00 0.00 0.00
0.18
0.26
0.39
0.00
0.25
0.50
0.75
1.00
0.00 0.25 0.50 0.75 1.00
Proportion of Systems
CloneCoverage
Abnormality
Very high
High
Moderately high
Normal
Moderately low
Low
Very low
Technology
● Ant
Autotools
CMake
Maven
25
Migration is not a silver bullet
●
●
●
●
●
●
0.39
0.47
0.52
0.70
0.75
0.82
0.00 0.00
0.04
0.22
0.30
0.47
0.15
0.25
0.36
0.68
0.77
0.84
0.00 0.00 0.00
0.18
0.26
0.39
0.00
0.25
0.50
0.75
1.00
0.00 0.25 0.50 0.75 1.00
Proportion of Systems
CloneCoverage
Abnormality
Very high
High
Moderately high
Normal
Moderately low
Low
Very low
Technology
● Ant
Autotools
CMake
Maven
25
More cloning in
Maven than Ant
Migration is not a silver bullet
●
●
●
●
●
●
0.39
0.47
0.52
0.70
0.75
0.82
0.00 0.00
0.04
0.22
0.30
0.47
0.15
0.25
0.36
0.68
0.77
0.84
0.00 0.00 0.00
0.18
0.26
0.39
0.00
0.25
0.50
0.75
1.00
0.00 0.25 0.50 0.75 1.00
Proportion of Systems
CloneCoverage
Abnormality
Very high
High
Moderately high
Normal
Moderately low
Low
Very low
Technology
● Ant
Autotools
CMake
Maven
25
More cloning in
Maven than Ant
High thresholds!
are very similar
Migration is not a silver bullet
●
●
●
●
●
●
0.39
0.47
0.52
0.70
0.75
0.82
0.00 0.00
0.04
0.22
0.30
0.47
0.15
0.25
0.36
0.68
0.77
0.84
0.00 0.00 0.00
0.18
0.26
0.39
0.00
0.25
0.50
0.75
1.00
0.00 0.25 0.50 0.75 1.00
Proportion of Systems
CloneCoverage
Abnormality
Very high
High
Moderately high
Normal
Moderately low
Low
Very low
Technology
● Ant
Autotools
CMake
Maven
25
More cloning in
Maven than Ant
High thresholds!
are very similar
Q: How are they avoidingbuild cloning?
26
Using abstraction mechanisms not!
provided by the build technologies
<!-- Define references to files containing common targets -->
<!DOCTYPE project [
<!ENTITY modules -common SYSTEM "../ modules -common.ent">
]>
...
<project name="bea" default="all">
<!-- Include the file containing common targets. -->
&modules -common;
</project >
Listing 1: Using XML entity expansion to
common build code in the Keel system.
26
Using abstraction mechanisms not!
provided by the build technologies
<!-- Define references to files containing common targets -->
<!DOCTYPE project [
<!ENTITY modules -common SYSTEM "../ modules -common.ent">
]>
...
<project name="bea" default="all">
<!-- Include the file containing common targets. -->
&modules -common;
</project >
Listing 1: Using XML entity expansion to
common build code in the Keel system.
Store an external block ofXML in a macro
26
Using abstraction mechanisms not!
provided by the build technologies
<!-- Define references to files containing common targets -->
<!DOCTYPE project [
<!ENTITY modules -common SYSTEM "../ modules -common.ent">
]>
...
<project name="bea" default="all">
<!-- Include the file containing common targets. -->
&modules -common;
</project >
Listing 1: Using XML entity expansion to
common build code in the Keel system.
Store an external block ofXML in a macro
Expand the macro
27
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical Cloning shifts
from const. to
config.
Mostly
construction
clones
>50% clone
coverage
is common
<30% clone
coverage
is common
27
How much
cloning is
typical?
What type of
logic is being
cloned?
Configuration
details
Packaging
specifications
What can be
done to mitigate
cloning?
Measured Typical Cloning shifts
from const. to
config.
Mostly
construction
clones
Ant Maven
may reduce
cloning
Use of
“creative”
abstraction
>50% clone
coverage
is common
<30% clone
coverage
is common
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments
Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (11)

BenchFlow: A Platform for End-to-end Automation of Performance Testing and An...
BenchFlow: A Platform for End-to-end Automation of Performance Testing and An...BenchFlow: A Platform for End-to-end Automation of Performance Testing and An...
BenchFlow: A Platform for End-to-end Automation of Performance Testing and An...
 
Nobody Knows What It’s Like To Be the Bad Man: The Development Process for th...
Nobody Knows What It’s Like To Be the Bad Man: The Development Process for th...Nobody Knows What It’s Like To Be the Bad Man: The Development Process for th...
Nobody Knows What It’s Like To Be the Bad Man: The Development Process for th...
 
Reproducibility with Checkpoint & RRO
Reproducibility with Checkpoint & RROReproducibility with Checkpoint & RRO
Reproducibility with Checkpoint & RRO
 
Towards Holistic Continuous Software Performance Assessment
Towards Holistic Continuous Software Performance AssessmentTowards Holistic Continuous Software Performance Assessment
Towards Holistic Continuous Software Performance Assessment
 
Becoming a Plumber: Building Deployment Pipelines - RevConf
Becoming a Plumber: Building Deployment Pipelines - RevConfBecoming a Plumber: Building Deployment Pipelines - RevConf
Becoming a Plumber: Building Deployment Pipelines - RevConf
 
.Net Hijacking to Defend PowerShell BSidesSF2017
.Net Hijacking to Defend PowerShell BSidesSF2017 .Net Hijacking to Defend PowerShell BSidesSF2017
.Net Hijacking to Defend PowerShell BSidesSF2017
 
The Impact of Task Granularity on Co-evolution Analyses
The Impact of Task Granularity on Co-evolution AnalysesThe Impact of Task Granularity on Co-evolution Analyses
The Impact of Task Granularity on Co-evolution Analyses
 
Spring Testing, Fight for the Context
Spring Testing, Fight for the ContextSpring Testing, Fight for the Context
Spring Testing, Fight for the Context
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York Times
 
What Can Reverse Engineering Do For You?
What Can Reverse Engineering Do For You?What Can Reverse Engineering Do For You?
What Can Reverse Engineering Do For You?
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York Times
 

Andere mochten auch

Identifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build ProcessesIdentifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build Processes
Shane McIntosh
 
Unicode - What you need to know
Unicode - What you need to knowUnicode - What you need to know
Unicode - What you need to know
Keheliya Gallaba
 

Andere mochten auch (13)

Identifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build ProcessesIdentifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build Processes
 
Orchestrating Change: An Artistic Representation of Software Evolution
Orchestrating Change: An Artistic Representation of Software EvolutionOrchestrating Change: An Artistic Representation of Software Evolution
Orchestrating Change: An Artistic Representation of Software Evolution
 
Unicode - What you need to know
Unicode - What you need to knowUnicode - What you need to know
Unicode - What you need to know
 
UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
UM ESTUDO EMPÍRICO DO USO DA COMUNICAÇÃO PARA CARACTERIZAR A OCORRÊNCIA DE DE...
 
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
SOCIAL METRICS INCLUDED IN PREDICTION MODELS ON SOFTWARE ENGINEERING: A MAPPI...
 
Buildtechs
BuildtechsBuildtechs
Buildtechs
 
Module System in Standard ML
Module System in Standard MLModule System in Standard ML
Module System in Standard ML
 
Icse2011 build maintenance
Icse2011 build maintenanceIcse2011 build maintenance
Icse2011 build maintenance
 
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
USING STRUCTURAL HOLES METRICS FROM COMMUNICATION NETWORKS TO PREDICT CHANGE ...
 
ICSE2011_SRC
ICSE2011_SRC ICSE2011_SRC
ICSE2011_SRC
 
Qt Apresentação
Qt ApresentaçãoQt Apresentação
Qt Apresentação
 
Sonar Metrics
Sonar MetricsSonar Metrics
Sonar Metrics
 
O que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidasO que é BIG DATA e como pode influenciar nossas vidas
O que é BIG DATA e como pode influenciar nossas vidas
 

Ähnlich wie Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments

Icse2011 build maintenance
Icse2011 build maintenanceIcse2011 build maintenance
Icse2011 build maintenance
SAIL_QU
 
Icsm2009 adams ph_d
Icsm2009 adams ph_dIcsm2009 adams ph_d
Icsm2009 adams ph_d
SAIL_QU
 

Ähnlich wie Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments (20)

Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven SystemsGo Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
Go Reactive: Building Responsive, Resilient, Elastic & Message-Driven Systems
 
Fallacy of Fast
Fallacy of FastFallacy of Fast
Fallacy of Fast
 
Icse2011 build maintenance
Icse2011 build maintenanceIcse2011 build maintenance
Icse2011 build maintenance
 
Empirical Evaluations in Software Engineering Research: A Personal Perspective
Empirical Evaluations in Software Engineering Research: A Personal PerspectiveEmpirical Evaluations in Software Engineering Research: A Personal Perspective
Empirical Evaluations in Software Engineering Research: A Personal Perspective
 
ML.pdf
ML.pdfML.pdf
ML.pdf
 
Intro to Microservices
Intro to MicroservicesIntro to Microservices
Intro to Microservices
 
Efficient Query Processing Using Machine Learning
Efficient Query Processing Using Machine LearningEfficient Query Processing Using Machine Learning
Efficient Query Processing Using Machine Learning
 
Icse2018 autonomic
Icse2018 autonomicIcse2018 autonomic
Icse2018 autonomic
 
The Paved PaaS to Microservices at Netflix (IAS2017 Nanjing)
The Paved PaaS to Microservices at Netflix (IAS2017 Nanjing)The Paved PaaS to Microservices at Netflix (IAS2017 Nanjing)
The Paved PaaS to Microservices at Netflix (IAS2017 Nanjing)
 
Concurrency Control for Parallel Machine Learning
Concurrency Control for Parallel Machine LearningConcurrency Control for Parallel Machine Learning
Concurrency Control for Parallel Machine Learning
 
Best Practices - Software Engineering
Best Practices - Software EngineeringBest Practices - Software Engineering
Best Practices - Software Engineering
 
(DVO205) Monitoring Evolution: Flying Blind to Flying by Instrument
(DVO205) Monitoring Evolution: Flying Blind to Flying by Instrument(DVO205) Monitoring Evolution: Flying Blind to Flying by Instrument
(DVO205) Monitoring Evolution: Flying Blind to Flying by Instrument
 
Bypassing Secure Boot using Fault Injection
Bypassing Secure Boot using Fault InjectionBypassing Secure Boot using Fault Injection
Bypassing Secure Boot using Fault Injection
 
Chaos Engineering on Cloud Foundry
Chaos Engineering on Cloud FoundryChaos Engineering on Cloud Foundry
Chaos Engineering on Cloud Foundry
 
The importance of model fairness and interpretability in AI systems
The importance of model fairness and interpretability in AI systemsThe importance of model fairness and interpretability in AI systems
The importance of model fairness and interpretability in AI systems
 
Icsm2009 adams ph_d
Icsm2009 adams ph_dIcsm2009 adams ph_d
Icsm2009 adams ph_d
 
Green Custard Friday Talk 19: Chaos Engineering
Green Custard Friday Talk 19: Chaos EngineeringGreen Custard Friday Talk 19: Chaos Engineering
Green Custard Friday Talk 19: Chaos Engineering
 
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
Walls, Pillars and Beams: A 3D Decomposition of Quality Anomalies (vissoft2016)
 
Learning Near-Optimal Intrusion Response for Large-Scale IT Infrastructures v...
Learning Near-Optimal Intrusion Response for Large-Scale IT Infrastructures v...Learning Near-Optimal Intrusion Response for Large-Scale IT Infrastructures v...
Learning Near-Optimal Intrusion Response for Large-Scale IT Infrastructures v...
 
2010-03-31 - VU Amsterdam - Experiences testing safety critical systems
2010-03-31 - VU Amsterdam - Experiences testing safety critical systems2010-03-31 - VU Amsterdam - Experiences testing safety critical systems
2010-03-31 - VU Amsterdam - Experiences testing safety critical systems
 

Kürzlich hochgeladen

CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
anilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
anilsa9823
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
Health
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 

Kürzlich hochgeladen (20)

Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AISyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
SyndBuddy AI 2k Review 2024: Revolutionizing Content Syndication with AI
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online  ☂️
CALL ON ➥8923113531 🔝Call Girls Kakori Lucknow best sexual service Online ☂️
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
The Real-World Challenges of Medical Device Cybersecurity- Mitigating Vulnera...
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 

Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments

  • 1. Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments Shane McIntosh @shane_mcintosh shanemcintosh@acm.org
  • 2. Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments Shane McIntosh @shane_mcintosh shanemcintosh@acm.org Martin Poehlmann Elmar Juergens
  • 3. Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments Shane McIntosh @shane_mcintosh shanemcintosh@acm.org Martin Poehlmann Elmar Juergens Audris Mockus
  • 4. Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments Shane McIntosh @shane_mcintosh shanemcintosh@acm.org Bram Adams Ahmed E. Hassan Martin Poehlmann Elmar Juergens Audris Mockus
  • 5. Collecting and Leveraging a Benchmark of Build System Clones to Aid in Quality Assessments Shane McIntosh @shane_mcintosh shanemcintosh@acm.org Bram Adams Ahmed E. Hassan Martin Poehlmann Elmar Juergens Audris Mockus Brigitte Haupt Christian Wagner
  • 6. What is a build system? Source code
  • 7. What is a build system? Source code Deliverable
  • 8. .tex .c .cc .o .o .dvi .a .exe .pdf .deb Build systems describe how sources are translated into deliverables 3
  • 9. 4 Step 1 - Configuration Step 2 - Construction Step 3 - Certification Step 4 - Packaging Step 5 - Deployment
  • 10. 5 Step 1 - Configuration
  • 11. 6 Step 2 - Construction
  • 12. 7 Step 3 - Certification
  • 13. 8 Step 4 - Packaging
  • 14. 9 Step 5 - Deployment
  • 15. Continuous Integration:! Enabled by the build system 10
  • 16. Continuous Integration:! Enabled by the build system 10 Commit Commit 9719cf0
  • 17. Continuous Integration:! Enabled by the build system 10 Commit Build Commit 9719cf0
  • 18. Continuous Integration:! Enabled by the build system 10 Commit Build Test Commit 9719cf0
  • 19. Continuous Integration:! Enabled by the build system 10 Commit Build Test Report Commit 9719cf0 broke the build! Commit 9719cf0
  • 20. Continuous Integration:! Enabled by the build system 10 Commit Build Test Report Commit 9719cf0 broke the build! Commit 9719cf0
  • 21. “...nothing can be said to be certain, except death and taxes” - Benjamin Franklin The Build “Tax” An Empirical Study of Build Maintenance Effort! S. McIntosh, B. Adams, T. H. D. Nguyen, Y. Kamei, A. E. Hassan [ICSE 2011] Up to 27% of source changes require build changes, too! 11
  • 22. “...nothing can be said to be certain, except death and taxes” - Benjamin Franklin The Build “Tax” An Empirical Study of Build Maintenance Effort! S. McIntosh, B. Adams, T. H. D. Nguyen, Y. Kamei, A. E. Hassan [ICSE 2011] Up to 27% of source changes require build changes, too! How do practitioners cope with build maintenance? 11
  • 25. 13
  • 26. Excessive cloning makes build maintenance painful ! ! ! ! ! 13
  • 27. Excessive cloning makes build maintenance painful ! ! ! ! ! 13
  • 28. Excessive cloning makes build maintenance painful ! ! ! ! ! 30 custom business applications 13
  • 29. Excessive cloning makes build maintenance painful ! ! ! ! ! 30 custom business applications One monolithicbuild system 13
  • 30. Excessive cloning makes build maintenance painful ! ! ! ! ! 30 custom business applications One monolithicbuild system 1.1 million lines of build logic 13
  • 31. Excessive cloning makes build maintenance painful ! ! ! ! ! 30 custom business applications One monolithicbuild system 1.1 million lines of build logic Clone coverageof 94%-99% 13
  • 32. Excessive cloning makes build maintenance painful ! ! ! ! ! 30 custom business applications One monolithicbuild system 1.1 million lines of build logic Clone coverageof 94%-99% Inflation due to cloning of 10x-23x 13
  • 33. Excessive cloning makes build maintenance painful ! ! ! ! ! 30 custom business applications One monolithicbuild system 1.1 million lines of build logic Clone coverageof 94%-99% Inflation due to cloning of 10x-23x Build changes manuallyduplicated 30 times 13
  • 34. 14
  • 38. 14 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications Measured Typical
  • 39. 14 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical
  • 40. 14 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical
  • 41. 15 15
  • 42. 15 Large collection of open source 15
  • 43. 15 Large collection of open source 3,872 projects 15
  • 44. 15 Large collection of open source 3,872 projects 1,275 Java projects Ant Maven 15
  • 45. 15 Large collection of open source 3,872 projects 2,597 C/C++ projects Autotools CMake 1,275 Java projects Ant Maven 15
  • 46. 16 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical
  • 47. Apache Github GNU Sourceforge ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● 0.00 0.25 0.50 0.75 1.00 Ant Maven Ant Maven Ant Ant Maven CloneCoverage Minimum Length 5 10 15 20 17 Lots of small clones in Java build systems
  • 48. Apache Github GNU Sourceforge ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● 0.00 0.25 0.50 0.75 1.00 Ant Maven Ant Maven Ant Ant Maven CloneCoverage Minimum Length 5 10 15 20 17 Build logic clonestend to be small Lots of small clones in Java build systems
  • 49. Apache Github GNU Sourceforge ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● 0.00 0.25 0.50 0.75 1.00 Ant Maven Ant Maven Ant Ant Maven CloneCoverage Minimum Length 5 10 15 20 17 Half of Maven systems have clone coverage of at least 47%-50% Build logic clonestend to be small Lots of small clones in Java build systems
  • 50. Apache Github GNU Sourceforge ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● 0.00 0.25 0.50 0.75 1.00 Ant Maven Ant Maven Ant Ant Maven CloneCoverage Minimum Length 5 10 15 20 17 Half of Maven systems have clone coverage of at least 47%-50% Build logic clonestend to be small 1/4 of Ant systems have clone coverage of >50% Lots of small clones in Java build systems
  • 51. 18 Apache Github GNU Sourceforge ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● 0.0 0.2 0.4 0.6 Autotools CMake Autotools CMake Autotools CMake Autotools CMake CloneCoverage Minimum Length 5 10 15 20 Less cloning in C/C++ build systems
  • 52. 18 Apache Github GNU Sourceforge ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● 0.0 0.2 0.4 0.6 Autotools CMake Autotools CMake Autotools CMake Autotools CMake CloneCoverage Minimum Length 5 10 15 20 Less cloning in C/C++ build systems
  • 53. 18 Apache Github GNU Sourceforge ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● 0.0 0.2 0.4 0.6 Autotools CMake Autotools CMake Autotools CMake Autotools CMake CloneCoverage Minimum Length 5 10 15 20 Less cloning in C/C++ build systems Clone coverage rarely exceeds 30% in C/C++ build systems
  • 54. 18 Apache Github GNU Sourceforge ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● 0.0 0.2 0.4 0.6 Autotools CMake Autotools CMake Autotools CMake Autotools CMake CloneCoverage Minimum Length 5 10 15 20 Less cloning in C/C++ build systems Clone coverage rarely exceeds 30% in C/C++ build systems Yet there are still someC/C++ build systemswith plenty of clones!27%-66% 21%-48%
  • 55. 19 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical
  • 56. 19 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical>50% clone coverage is common <30% clone coverage is common
  • 57. 20 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical>50% clone coverage is common <30% clone coverage is common
  • 58. 21
  • 59. Manual analysis of a statistically representative sample of clones 21
  • 60. Manual analysis of a statistically representative sample of clones Autotools CMakeAnt Maven Total 21
  • 61. Manual analysis of a statistically representative sample of clones Autotools CMakeAnt Maven Total 56,521 71,543 23,723 3,746All clones 155,533 21
  • 62. Manual analysis of a statistically representative sample of clones Autotools CMakeAnt Maven Total 56,521 71,543 23,723 3,746All clones 155,533 Sample! (95%±5%) 382 382 378 349 1,491 21
  • 63. Manual analysis of a statistically representative sample of clones Autotools CMakeAnt Maven Total 56,521 71,543 23,723 3,746All clones 155,533 Sample! (95%±5%) 382 382 378 349 1,491 Config. Const. Cert. Pkg. Depl. 32% 79% 22% 40% 64% 17% 56% 66% 12% 4% 13% 11% 25% 21% 21% 2% 11% 1% 9% 7% 21
  • 64. Manual analysis of a statistically representative sample of clones Autotools CMakeAnt Maven Total 56,521 71,543 23,723 3,746All clones 155,533 Sample! (95%±5%) 382 382 378 349 1,491 Config. Const. Cert. Pkg. Depl. 32% 79% 22% 40% 64% 17% 56% 66% 12% 4% 13% 11% 25% 21% 21% 2% 11% 1% 9% 7% Cloning shifts from construction to configuration 21
  • 65. Manual analysis of a statistically representative sample of clones Autotools CMakeAnt Maven Total 56,521 71,543 23,723 3,746All clones 155,533 Sample! (95%±5%) 382 382 378 349 1,491 Config. Const. Cert. Pkg. Depl. 32% 79% 22% 40% 64% 17% 56% 66% 12% 4% 13% 11% 25% 21% 21% 2% 11% 1% 9% 7% Cloning shifts from construction to configuration Construction is the most heavily cloned C/C++ build phase 21
  • 66. Manual analysis of a statistically representative sample of clones Autotools CMakeAnt Maven Total 56,521 71,543 23,723 3,746All clones 155,533 Sample! (95%±5%) 382 382 378 349 1,491 Config. Const. Cert. Pkg. Depl. 32% 79% 22% 40% 64% 17% 56% 66% 12% 4% 13% 11% 25% 21% 21% 2% 11% 1% 9% 7% Cloning shifts from construction to configuration Construction is the most heavily cloned C/C++ build phase Rarely cloned due to CPack 21
  • 67. 22 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical>50% clone coverage is common <30% clone coverage is common
  • 68. 22 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical Cloning shifts from const. to config. Mostly construction clones >50% clone coverage is common <30% clone coverage is common
  • 69. 23 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical Cloning shifts from const. to config. Mostly construction clones >50% clone coverage is common <30% clone coverage is common
  • 70. 24 Teams often migrate from one technology to another Autotools CMakeAnt Maven
  • 71. 24 Teams often migrate from one technology to another Autotools CMakeAnt Maven Could technology migration help to reduce cloning?
  • 72. Migration is not a silver bullet ● ● ● ● ● ● 0.39 0.47 0.52 0.70 0.75 0.82 0.00 0.00 0.04 0.22 0.30 0.47 0.15 0.25 0.36 0.68 0.77 0.84 0.00 0.00 0.00 0.18 0.26 0.39 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 Proportion of Systems CloneCoverage Abnormality Very high High Moderately high Normal Moderately low Low Very low Technology ● Ant Autotools CMake Maven 25
  • 73. Migration is not a silver bullet ● ● ● ● ● ● 0.39 0.47 0.52 0.70 0.75 0.82 0.00 0.00 0.04 0.22 0.30 0.47 0.15 0.25 0.36 0.68 0.77 0.84 0.00 0.00 0.00 0.18 0.26 0.39 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 Proportion of Systems CloneCoverage Abnormality Very high High Moderately high Normal Moderately low Low Very low Technology ● Ant Autotools CMake Maven 25 More cloning in Maven than Ant
  • 74. Migration is not a silver bullet ● ● ● ● ● ● 0.39 0.47 0.52 0.70 0.75 0.82 0.00 0.00 0.04 0.22 0.30 0.47 0.15 0.25 0.36 0.68 0.77 0.84 0.00 0.00 0.00 0.18 0.26 0.39 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 Proportion of Systems CloneCoverage Abnormality Very high High Moderately high Normal Moderately low Low Very low Technology ● Ant Autotools CMake Maven 25 More cloning in Maven than Ant High thresholds! are very similar
  • 75. Migration is not a silver bullet ● ● ● ● ● ● 0.39 0.47 0.52 0.70 0.75 0.82 0.00 0.00 0.04 0.22 0.30 0.47 0.15 0.25 0.36 0.68 0.77 0.84 0.00 0.00 0.00 0.18 0.26 0.39 0.00 0.25 0.50 0.75 1.00 0.00 0.25 0.50 0.75 1.00 Proportion of Systems CloneCoverage Abnormality Very high High Moderately high Normal Moderately low Low Very low Technology ● Ant Autotools CMake Maven 25 More cloning in Maven than Ant High thresholds! are very similar Q: How are they avoidingbuild cloning?
  • 76. 26 Using abstraction mechanisms not! provided by the build technologies <!-- Define references to files containing common targets --> <!DOCTYPE project [ <!ENTITY modules -common SYSTEM "../ modules -common.ent"> ]> ... <project name="bea" default="all"> <!-- Include the file containing common targets. --> &modules -common; </project > Listing 1: Using XML entity expansion to common build code in the Keel system.
  • 77. 26 Using abstraction mechanisms not! provided by the build technologies <!-- Define references to files containing common targets --> <!DOCTYPE project [ <!ENTITY modules -common SYSTEM "../ modules -common.ent"> ]> ... <project name="bea" default="all"> <!-- Include the file containing common targets. --> &modules -common; </project > Listing 1: Using XML entity expansion to common build code in the Keel system. Store an external block ofXML in a macro
  • 78. 26 Using abstraction mechanisms not! provided by the build technologies <!-- Define references to files containing common targets --> <!DOCTYPE project [ <!ENTITY modules -common SYSTEM "../ modules -common.ent"> ]> ... <project name="bea" default="all"> <!-- Include the file containing common targets. --> &modules -common; </project > Listing 1: Using XML entity expansion to common build code in the Keel system. Store an external block ofXML in a macro Expand the macro
  • 79. 27 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical Cloning shifts from const. to config. Mostly construction clones >50% clone coverage is common <30% clone coverage is common
  • 80. 27 How much cloning is typical? What type of logic is being cloned? Configuration details Packaging specifications What can be done to mitigate cloning? Measured Typical Cloning shifts from const. to config. Mostly construction clones Ant Maven may reduce cloning Use of “creative” abstraction >50% clone coverage is common <30% clone coverage is common