SlideShare a Scribd company logo
An Empirical Study of
Unspecified Dependencies
in Make-Based Build Systems
Cor-Paul Bezemer, Shane McIntosh, Bram Adams,
Daniel M. German, Ahmed E. Hassan
Empirical Software Engineering – Journal First
2
What is a build system?
Source code
Deliverable
3
Build systems describe how sources are
translated into deliverables
.tex
.c .o
.dvi
.a
.pdf
.deb
4
A build file specifies how to generate
targets from their dependencies
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
5
Build rules
specify how targets must be built
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
6
Targets
are the deliverables of a build system
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
7
Dependencies
are source code, libraries or targets
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
8
Processes
‘glue’ targets and dependencies together
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
9
Builds can take a lot of time
glib
openldap
Linux
Qt
0 50 100 150 200 250 300
Build time (minutes)
10
There exist ways to speed up a build
● Incremental build
– Rebuild only the component(s) that changed, and the
component(s) that depend on it
– Most build technologies (e.g., make) already do this
● ‘Hacking’ the build by removing dependencies
– Decreases potential to parallellize the build
– Difficult to debug issues that may occur
11
What happens if we fail
to specify a dependency?
12
An example of an
unspecified dependency
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
If the code for ‘generator’ changes, app.c
(and all the targets that depend on it)
will not be rebuilt!
13
Unspecified dependencies are easy to
fix, but hard to discover
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
generator
14
How prevalent are
unspecified dependencies
in real projects?
15
Our prototype tool compares the conceptual
with the concrete build graph
● Conceptual graph:
– What we believe is being built (i.e., the build file)
● Concrete graph:
– What is actually being built (i.e., the build execution
trace)
● Processes may internally access files that are not
explicitly defined as dependencies!
– Hence we need to compare both graphs
16
Deriving the conceptual graph
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
17
Deriving the conceptual graph
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
18
Deriving the concrete graph
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
19
Deriving the concrete graph
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
20
How can we compare the
conceptual and concrete graph?
21
We abstract both graphs into graphs
that follow a unified schema
22
The abstracted conceptual graph
23
The abstracted concrete graph
24
The abstracted concrete graph
25
The differences between the abstracted
graphs reveal unspecified dependencies
26
The differences between the abstracted
graphs reveal unspecified dependencies
27
We can make the build file complete by
manually adding the unspecified dependency
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c:
./generator -o app.c
28
We can make the build file complete by
manually adding the unspecified dependency
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c: generator
./generator -o app.c
all: app.o
app.o: app.c
gcc -c app.c -o app.o
app.c: generator
./generator -o app.c
29
We studied unspecified dependencies in
the build systems of 4 real projects
GLIB
OPEN
LDAP
30
We studied unspecified dependencies in
the build systems of 4 real projects
GLIB
1.7k 944k
OPEN
LDAP
(unspecified dependencies)
284k290
31
We manually identified 6 root causes
for the unspecified dependencies
● We used filters to group unspecified dependencies
that had the same root cause
– For example, a project policy
32
We manually identified 6 root causes
for the unspecified dependencies
● We used filters to group unspecified dependencies
that had the same root cause
– For example, a project policy
● We ‘debugged’ the unspecified dependencies
– We manually traced the code around the spot where
the dependency should have been specified
– We searched the documentation of the project, or we
consulted developers
33
The “Binary Compatibility
Guarantee” root cause
● Qt has many unspecified dependencies on shared
library (.so) files
34
The “Binary Compatibility
Guarantee” root cause
● Qt has many unspecified dependencies on shared
library (.so) files
● Qt guarantees binary compatibility between minor
releases
– Changes to the .so file are OK as long as the interface
does not change
– Hence, it is sufficient to depend on the interface
35
The “Binary Compatibility
Guarantee” root cause
● Qt has many unspecified dependencies on shared
library (.so) files
● Qt guarantees binary compatibility between minor
releases
– Changes to the .so file are OK as long as the interface
does not change
– Hence, it is sufficient to depend on the interface
For the other root causes, check our paper!
36
What did developers think
of our findings?
● We submitted patches for 36 unspecified
dependencies to the Glib project
– The developers agreed, but preferred to not touch the
build system
37
What did developers think
of our findings?
● We submitted patches for 36 unspecified
dependencies to the Glib project
– The developers agreed, but preferred to not touch the
build system
● Developers often remove dependencies to speed
up the build
– And then rely on project processes (Qt, Linux) to deal
with those unspecified dependencies
38
39
40
41
42bezemer@cs.queensu.ca, http://sailhome.cs.queensu.ca/~corpaul
43
44
We combined several tools to reveal unspecified
dependencies in make-based build systems
MAKAO
Conceptual graphs are
extracted using
[Adams et al., ICSM 2007]
45
We combined several tools to reveal unspecified
dependencies in make-based build systems
MAKAO
Conceptual graphs are
extracted using
[Adams et al., ICSM 2007]
STRACE
Concrete graphs are
extracted from
execution logs
46
We combined several tools to reveal unspecified
dependencies in make-based build systems
MAKAO
Conceptual graphs are
extracted using
[Adams et al., ICSM 2007]
STRACE
Concrete graphs are
extracted from
execution logs
Graphs are represented
and analyzed using
47
An example of
a correctly specified dependency
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
48
An example of
a correctly specified dependency
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
49
An example of
a correctly specified dependency
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
50
An example of
a correctly specified dependency
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
all: app.o
app.o: app.c app.h
gcc -c app.c -o app.o
app.c:
./generator -o app.c
51
One of the root causes: The Helper File
52
One of the root causes: The Helper File
53
One of the root causes: The Helper File
Is this type of unspecified dependency a problem?
54
One of the root causes: The Helper File
Is this type of unspecified dependency a problem?
Not for now...
55
One of the root causes: The Helper File
Is this type of unspecified dependency a problem?
Not for now...
For the other root causes, check our paper!

More Related Content

What's hot

Mining Co-Change Information to Understand when Build Changes are Necessary
Mining Co-Change Information to Understand when Build Changes are NecessaryMining Co-Change Information to Understand when Build Changes are Necessary
Mining Co-Change Information to Understand when Build Changes are NecessaryShane McIntosh
 
Identifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build ProcessesIdentifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build ProcessesShane McIntosh
 
OpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plans
OpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plansOpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plans
OpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plansMichael Vorburger
 
An Introduction to Eclipse Che - Next-Gen Eclipse Java IDE
An Introduction to Eclipse Che - Next-Gen Eclipse Java IDEAn Introduction to Eclipse Che - Next-Gen Eclipse Java IDE
An Introduction to Eclipse Che - Next-Gen Eclipse Java IDEKubeAcademy
 
Formacion en movilidad: Conceptos de desarrollo en iOS (I)
Formacion en movilidad: Conceptos de desarrollo en iOS (I) Formacion en movilidad: Conceptos de desarrollo en iOS (I)
Formacion en movilidad: Conceptos de desarrollo en iOS (I) Mobivery
 
What We Learned Building an R-Python Hybrid Predictive Analytics Pipeline
What We Learned Building an R-Python Hybrid Predictive Analytics PipelineWhat We Learned Building an R-Python Hybrid Predictive Analytics Pipeline
What We Learned Building an R-Python Hybrid Predictive Analytics PipelineWork-Bench
 
Droidcon Online 2020 quick summary
Droidcon Online 2020 quick summaryDroidcon Online 2020 quick summary
Droidcon Online 2020 quick summaryBartosz Kosarzycki
 
Prepare to defend thyself with Blue/Green
Prepare to defend thyself with Blue/GreenPrepare to defend thyself with Blue/Green
Prepare to defend thyself with Blue/GreenSonatype
 
給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)
給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)
給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)William Yeh
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentPapp Laszlo
 
Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016
Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016
Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016Florent BENOIT
 
給 RD 的 Kubernetes 初體驗
給 RD 的 Kubernetes 初體驗給 RD 的 Kubernetes 初體驗
給 RD 的 Kubernetes 初體驗William Yeh
 
Red Hat OpenShift App Dev meetup - Operator SDK
Red Hat OpenShift App Dev meetup - Operator SDK Red Hat OpenShift App Dev meetup - Operator SDK
Red Hat OpenShift App Dev meetup - Operator SDK Dmitry Kartsev
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon ViennaAutomate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon ViennaPantheon
 
Managing large scale projects in R with R Suite
Managing large scale projects in R with R SuiteManaging large scale projects in R with R Suite
Managing large scale projects in R with R SuiteWLOG Solutions
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life DevOps.com
 

What's hot (20)

Mining Co-Change Information to Understand when Build Changes are Necessary
Mining Co-Change Information to Understand when Build Changes are NecessaryMining Co-Change Information to Understand when Build Changes are Necessary
Mining Co-Change Information to Understand when Build Changes are Necessary
 
Identifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build ProcessesIdentifying Hotspots in Software Build Processes
Identifying Hotspots in Software Build Processes
 
OpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plans
OpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plansOpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plans
OpenDaylight Developers Experience 1.5: Eclipse Setup, HOT reload, future plans
 
An Introduction to Eclipse Che - Next-Gen Eclipse Java IDE
An Introduction to Eclipse Che - Next-Gen Eclipse Java IDEAn Introduction to Eclipse Che - Next-Gen Eclipse Java IDE
An Introduction to Eclipse Che - Next-Gen Eclipse Java IDE
 
Formacion en movilidad: Conceptos de desarrollo en iOS (I)
Formacion en movilidad: Conceptos de desarrollo en iOS (I) Formacion en movilidad: Conceptos de desarrollo en iOS (I)
Formacion en movilidad: Conceptos de desarrollo en iOS (I)
 
What We Learned Building an R-Python Hybrid Predictive Analytics Pipeline
What We Learned Building an R-Python Hybrid Predictive Analytics PipelineWhat We Learned Building an R-Python Hybrid Predictive Analytics Pipeline
What We Learned Building an R-Python Hybrid Predictive Analytics Pipeline
 
Droidcon Online 2020 quick summary
Droidcon Online 2020 quick summaryDroidcon Online 2020 quick summary
Droidcon Online 2020 quick summary
 
Prepare to defend thyself with Blue/Green
Prepare to defend thyself with Blue/GreenPrepare to defend thyself with Blue/Green
Prepare to defend thyself with Blue/Green
 
給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)
給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)
給 RD 的 Kubernetes 初體驗 (gcpug 2019-06 version)
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016
Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016
Eclipse Che: The Next-Gen Eclipse IDE - Bordeaux jug 2016
 
給 RD 的 Kubernetes 初體驗
給 RD 的 Kubernetes 初體驗給 RD 的 Kubernetes 初體驗
給 RD 的 Kubernetes 初體驗
 
Red Hat OpenShift App Dev meetup - Operator SDK
Red Hat OpenShift App Dev meetup - Operator SDK Red Hat OpenShift App Dev meetup - Operator SDK
Red Hat OpenShift App Dev meetup - Operator SDK
 
Introduction to Git
Introduction to GitIntroduction to Git
Introduction to Git
 
Automate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon ViennaAutomate Your Automation | DrupalCon Vienna
Automate Your Automation | DrupalCon Vienna
 
Managing large scale projects in R with R Suite
Managing large scale projects in R with R SuiteManaging large scale projects in R with R Suite
Managing large scale projects in R with R Suite
 
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...
JavaCro'14 - Continuous delivery of Java EE applications with Jenkins and Doc...
 
Reverse Engineering Android Application
Reverse Engineering Android ApplicationReverse Engineering Android Application
Reverse Engineering Android Application
 
JenkinsPy workshop
JenkinsPy workshop JenkinsPy workshop
JenkinsPy workshop
 
Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life Achieving Full Stack DevOps at Colonial Life
Achieving Full Stack DevOps at Colonial Life
 

Similar to An Empirical Study of Unspecified Dependencies in Make-Based Build Systems

Knowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular CompilationKnowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular CompilationMd.Zahidur Rahman
 
Trying to Sell PVS-Studio to Google, or New Bugs in Chromium
Trying to Sell PVS-Studio to Google, or New Bugs in ChromiumTrying to Sell PVS-Studio to Google, or New Bugs in Chromium
Trying to Sell PVS-Studio to Google, or New Bugs in ChromiumAndrey Karpov
 
Continuous Integration for Oracle Database Development
Continuous Integration for Oracle Database DevelopmentContinuous Integration for Oracle Database Development
Continuous Integration for Oracle Database DevelopmentVladimir Bakhov
 
Hm system programming class 1
Hm system programming class 1Hm system programming class 1
Hm system programming class 1Hitesh Mohapatra
 
Software Archaeology
Software ArchaeologySoftware Archaeology
Software ArchaeologyChris Bailey
 
BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...
BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...
BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...Aditya K Sood
 
Software Bill of Materials - Accelerating Your Secure Embedded Development.pdf
Software Bill of Materials - Accelerating Your Secure Embedded Development.pdfSoftware Bill of Materials - Accelerating Your Secure Embedded Development.pdf
Software Bill of Materials - Accelerating Your Secure Embedded Development.pdfICS
 
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with Concourse
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with ConcourseContinuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with Concourse
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with ConcourseVMware Tanzu
 
Raising ux bar with offline first design
Raising ux bar with offline first designRaising ux bar with offline first design
Raising ux bar with offline first designKyrylo Reznykov
 
Software architacture recovery
Software architacture recoverySoftware architacture recovery
Software architacture recoveryImdad Ul Haq
 
PVS-Studio for Linux (CoreHard presentation)
PVS-Studio for Linux (CoreHard presentation)PVS-Studio for Linux (CoreHard presentation)
PVS-Studio for Linux (CoreHard presentation)Andrey Karpov
 
Introduction to angular | Concepts and Environment setup
Introduction to angular | Concepts and Environment setupIntroduction to angular | Concepts and Environment setup
Introduction to angular | Concepts and Environment setupAnsley Rodrigues
 
414: Build an agile CI/CD Pipeline for application integration
414: Build an agile CI/CD Pipeline for application integration414: Build an agile CI/CD Pipeline for application integration
414: Build an agile CI/CD Pipeline for application integrationTrevor Dolby
 
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkitThe DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkitMarco Ferrigno
 
The DevOps Paradigm
The DevOps ParadigmThe DevOps Paradigm
The DevOps ParadigmNaLUG
 
CS8251_QB_answers.pdf
CS8251_QB_answers.pdfCS8251_QB_answers.pdf
CS8251_QB_answers.pdfvino108206
 
Android Penetration testing - Day 2
 Android Penetration testing - Day 2 Android Penetration testing - Day 2
Android Penetration testing - Day 2Mohammed Adam
 

Similar to An Empirical Study of Unspecified Dependencies in Make-Based Build Systems (20)

Knowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular CompilationKnowledge Sharing Session on JavaScript Source Maps & Angular Compilation
Knowledge Sharing Session on JavaScript Source Maps & Angular Compilation
 
Trying to Sell PVS-Studio to Google, or New Bugs in Chromium
Trying to Sell PVS-Studio to Google, or New Bugs in ChromiumTrying to Sell PVS-Studio to Google, or New Bugs in Chromium
Trying to Sell PVS-Studio to Google, or New Bugs in Chromium
 
Continuous Integration for Oracle Database Development
Continuous Integration for Oracle Database DevelopmentContinuous Integration for Oracle Database Development
Continuous Integration for Oracle Database Development
 
Hm system programming class 1
Hm system programming class 1Hm system programming class 1
Hm system programming class 1
 
Software Archaeology
Software ArchaeologySoftware Archaeology
Software Archaeology
 
BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...
BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...
BlackHat 2014 Briefings - Exploiting Fundamental Weaknesses in Botnet C&C Pan...
 
Software Bill of Materials - Accelerating Your Secure Embedded Development.pdf
Software Bill of Materials - Accelerating Your Secure Embedded Development.pdfSoftware Bill of Materials - Accelerating Your Secure Embedded Development.pdf
Software Bill of Materials - Accelerating Your Secure Embedded Development.pdf
 
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with Concourse
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with ConcourseContinuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with Concourse
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with Concourse
 
Raising ux bar with offline first design
Raising ux bar with offline first designRaising ux bar with offline first design
Raising ux bar with offline first design
 
Software architacture recovery
Software architacture recoverySoftware architacture recovery
Software architacture recovery
 
PVS-Studio for Linux (CoreHard presentation)
PVS-Studio for Linux (CoreHard presentation)PVS-Studio for Linux (CoreHard presentation)
PVS-Studio for Linux (CoreHard presentation)
 
Build Time Hacking
Build Time HackingBuild Time Hacking
Build Time Hacking
 
Introduction to angular | Concepts and Environment setup
Introduction to angular | Concepts and Environment setupIntroduction to angular | Concepts and Environment setup
Introduction to angular | Concepts and Environment setup
 
414: Build an agile CI/CD Pipeline for application integration
414: Build an agile CI/CD Pipeline for application integration414: Build an agile CI/CD Pipeline for application integration
414: Build an agile CI/CD Pipeline for application integration
 
Oops index
Oops indexOops index
Oops index
 
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkitThe DevOps paradigm - the evolution of IT professionals and opensource toolkit
The DevOps paradigm - the evolution of IT professionals and opensource toolkit
 
The DevOps Paradigm
The DevOps ParadigmThe DevOps Paradigm
The DevOps Paradigm
 
CS8251_QB_answers.pdf
CS8251_QB_answers.pdfCS8251_QB_answers.pdf
CS8251_QB_answers.pdf
 
Effective DevSecOps
Effective DevSecOpsEffective DevSecOps
Effective DevSecOps
 
Android Penetration testing - Day 2
 Android Penetration testing - Day 2 Android Penetration testing - Day 2
Android Penetration testing - Day 2
 

More from corpaulbezemer

An empirical study of game reviews on the Steam platform
An empirical study of game reviews on the Steam platformAn empirical study of game reviews on the Steam platform
An empirical study of game reviews on the Steam platformcorpaulbezemer
 
Studying a decade of Linux system calls
Studying a decade of Linux system callsStudying a decade of Linux system calls
Studying a decade of Linux system callscorpaulbezemer
 
An exploratory study of the state of practice of performance testing in Java-...
An exploratory study of the state of practice of performance testing in Java-...An exploratory study of the state of practice of performance testing in Java-...
An exploratory study of the state of practice of performance testing in Java-...corpaulbezemer
 
Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...corpaulbezemer
 
Optimizing the Performance-Related Configurations of Object-Relational Mappin...
Optimizing the Performance-Related Configurations of Object-Relational Mappin...Optimizing the Performance-Related Configurations of Object-Relational Mappin...
Optimizing the Performance-Related Configurations of Object-Relational Mappin...corpaulbezemer
 
Performance Regression Analysis: Accomplishments and Challenges
Performance Regression Analysis: Accomplishments and ChallengesPerformance Regression Analysis: Accomplishments and Challenges
Performance Regression Analysis: Accomplishments and Challengescorpaulbezemer
 
SANER 2015 ERA track: Differential Flame Graphs
SANER 2015 ERA track: Differential Flame GraphsSANER 2015 ERA track: Differential Flame Graphs
SANER 2015 ERA track: Differential Flame Graphscorpaulbezemer
 

More from corpaulbezemer (7)

An empirical study of game reviews on the Steam platform
An empirical study of game reviews on the Steam platformAn empirical study of game reviews on the Steam platform
An empirical study of game reviews on the Steam platform
 
Studying a decade of Linux system calls
Studying a decade of Linux system callsStudying a decade of Linux system calls
Studying a decade of Linux system calls
 
An exploratory study of the state of practice of performance testing in Java-...
An exploratory study of the state of practice of performance testing in Java-...An exploratory study of the state of practice of performance testing in Java-...
An exploratory study of the state of practice of performance testing in Java-...
 
Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...
 
Optimizing the Performance-Related Configurations of Object-Relational Mappin...
Optimizing the Performance-Related Configurations of Object-Relational Mappin...Optimizing the Performance-Related Configurations of Object-Relational Mappin...
Optimizing the Performance-Related Configurations of Object-Relational Mappin...
 
Performance Regression Analysis: Accomplishments and Challenges
Performance Regression Analysis: Accomplishments and ChallengesPerformance Regression Analysis: Accomplishments and Challenges
Performance Regression Analysis: Accomplishments and Challenges
 
SANER 2015 ERA track: Differential Flame Graphs
SANER 2015 ERA track: Differential Flame GraphsSANER 2015 ERA track: Differential Flame Graphs
SANER 2015 ERA track: Differential Flame Graphs
 

Recently uploaded

Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationWave PLM
 
AI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAlluxio, Inc.
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfkalichargn70th171
 
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfmbmh111980
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Anthony Dahanne
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTier1 app
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandIES VE
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAlluxio, Inc.
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowPeter Caitens
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion Clinic
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?XfilesPro
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...Alluxio, Inc.
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEJelle | Nordend
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisNeo4j
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke
 

Recently uploaded (20)

Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM Integration
 
AI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning FrameworkAI/ML Infra Meetup | Perspective on Deep Learning Framework
AI/ML Infra Meetup | Perspective on Deep Learning Framework
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Using IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New ZealandUsing IESVE for Room Loads Analysis - Australia & New Zealand
Using IESVE for Room Loads Analysis - Australia & New Zealand
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Prosigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology SolutionsProsigns: Transforming Business with Tailored Technology Solutions
Prosigns: Transforming Business with Tailored Technology Solutions
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
 
Corporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMSCorporate Management | Session 3 of 3 | Tendenci AMS
Corporate Management | Session 3 of 3 | Tendenci AMS
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysis
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Vitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume MontevideoVitthal Shirke Microservices Resume Montevideo
Vitthal Shirke Microservices Resume Montevideo
 

An Empirical Study of Unspecified Dependencies in Make-Based Build Systems

  • 1. An Empirical Study of Unspecified Dependencies in Make-Based Build Systems Cor-Paul Bezemer, Shane McIntosh, Bram Adams, Daniel M. German, Ahmed E. Hassan Empirical Software Engineering – Journal First
  • 2. 2 What is a build system? Source code Deliverable
  • 3. 3 Build systems describe how sources are translated into deliverables .tex .c .o .dvi .a .pdf .deb
  • 4. 4 A build file specifies how to generate targets from their dependencies all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 5. 5 Build rules specify how targets must be built all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 6. 6 Targets are the deliverables of a build system all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 7. 7 Dependencies are source code, libraries or targets all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 8. 8 Processes ‘glue’ targets and dependencies together all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 9. 9 Builds can take a lot of time glib openldap Linux Qt 0 50 100 150 200 250 300 Build time (minutes)
  • 10. 10 There exist ways to speed up a build ● Incremental build – Rebuild only the component(s) that changed, and the component(s) that depend on it – Most build technologies (e.g., make) already do this ● ‘Hacking’ the build by removing dependencies – Decreases potential to parallellize the build – Difficult to debug issues that may occur
  • 11. 11 What happens if we fail to specify a dependency?
  • 12. 12 An example of an unspecified dependency all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c If the code for ‘generator’ changes, app.c (and all the targets that depend on it) will not be rebuilt!
  • 13. 13 Unspecified dependencies are easy to fix, but hard to discover all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c generator
  • 14. 14 How prevalent are unspecified dependencies in real projects?
  • 15. 15 Our prototype tool compares the conceptual with the concrete build graph ● Conceptual graph: – What we believe is being built (i.e., the build file) ● Concrete graph: – What is actually being built (i.e., the build execution trace) ● Processes may internally access files that are not explicitly defined as dependencies! – Hence we need to compare both graphs
  • 16. 16 Deriving the conceptual graph all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 17. 17 Deriving the conceptual graph all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 18. 18 Deriving the concrete graph all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 19. 19 Deriving the concrete graph all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 20. 20 How can we compare the conceptual and concrete graph?
  • 21. 21 We abstract both graphs into graphs that follow a unified schema
  • 25. 25 The differences between the abstracted graphs reveal unspecified dependencies
  • 26. 26 The differences between the abstracted graphs reveal unspecified dependencies
  • 27. 27 We can make the build file complete by manually adding the unspecified dependency all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 28. 28 We can make the build file complete by manually adding the unspecified dependency all: app.o app.o: app.c gcc -c app.c -o app.o app.c: generator ./generator -o app.c all: app.o app.o: app.c gcc -c app.c -o app.o app.c: generator ./generator -o app.c
  • 29. 29 We studied unspecified dependencies in the build systems of 4 real projects GLIB OPEN LDAP
  • 30. 30 We studied unspecified dependencies in the build systems of 4 real projects GLIB 1.7k 944k OPEN LDAP (unspecified dependencies) 284k290
  • 31. 31 We manually identified 6 root causes for the unspecified dependencies ● We used filters to group unspecified dependencies that had the same root cause – For example, a project policy
  • 32. 32 We manually identified 6 root causes for the unspecified dependencies ● We used filters to group unspecified dependencies that had the same root cause – For example, a project policy ● We ‘debugged’ the unspecified dependencies – We manually traced the code around the spot where the dependency should have been specified – We searched the documentation of the project, or we consulted developers
  • 33. 33 The “Binary Compatibility Guarantee” root cause ● Qt has many unspecified dependencies on shared library (.so) files
  • 34. 34 The “Binary Compatibility Guarantee” root cause ● Qt has many unspecified dependencies on shared library (.so) files ● Qt guarantees binary compatibility between minor releases – Changes to the .so file are OK as long as the interface does not change – Hence, it is sufficient to depend on the interface
  • 35. 35 The “Binary Compatibility Guarantee” root cause ● Qt has many unspecified dependencies on shared library (.so) files ● Qt guarantees binary compatibility between minor releases – Changes to the .so file are OK as long as the interface does not change – Hence, it is sufficient to depend on the interface For the other root causes, check our paper!
  • 36. 36 What did developers think of our findings? ● We submitted patches for 36 unspecified dependencies to the Glib project – The developers agreed, but preferred to not touch the build system
  • 37. 37 What did developers think of our findings? ● We submitted patches for 36 unspecified dependencies to the Glib project – The developers agreed, but preferred to not touch the build system ● Developers often remove dependencies to speed up the build – And then rely on project processes (Qt, Linux) to deal with those unspecified dependencies
  • 38. 38
  • 39. 39
  • 40. 40
  • 41. 41
  • 43. 43
  • 44. 44 We combined several tools to reveal unspecified dependencies in make-based build systems MAKAO Conceptual graphs are extracted using [Adams et al., ICSM 2007]
  • 45. 45 We combined several tools to reveal unspecified dependencies in make-based build systems MAKAO Conceptual graphs are extracted using [Adams et al., ICSM 2007] STRACE Concrete graphs are extracted from execution logs
  • 46. 46 We combined several tools to reveal unspecified dependencies in make-based build systems MAKAO Conceptual graphs are extracted using [Adams et al., ICSM 2007] STRACE Concrete graphs are extracted from execution logs Graphs are represented and analyzed using
  • 47. 47 An example of a correctly specified dependency all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 48. 48 An example of a correctly specified dependency all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 49. 49 An example of a correctly specified dependency all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 50. 50 An example of a correctly specified dependency all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c all: app.o app.o: app.c app.h gcc -c app.c -o app.o app.c: ./generator -o app.c
  • 51. 51 One of the root causes: The Helper File
  • 52. 52 One of the root causes: The Helper File
  • 53. 53 One of the root causes: The Helper File Is this type of unspecified dependency a problem?
  • 54. 54 One of the root causes: The Helper File Is this type of unspecified dependency a problem? Not for now...
  • 55. 55 One of the root causes: The Helper File Is this type of unspecified dependency a problem? Not for now... For the other root causes, check our paper!