89
Mining Co-Change Information to Understand when Build Changes are Necessary @shane_mcintosh Shane McIntosh Bram Adams Meiyappan Nagappan Ahmed E. Hassan

Mining Co-Change Information to Understand when Build Changes are Necessary

Embed Size (px)

DESCRIPTION

As a software project ages, its source code is modified to add new features, restructure existing ones, and fix defects. These source code changes often induce changes in the build system, i.e., the system that specifies how source code is translated into deliverables. However, since developers are often not familiar with the complex and occasionally archaic technologies used to specify build systems, they may not be able to identify when their source code changes require accompanying build system changes. This can cause build breakages that slow development progress and impact other developers, testers, or even users. In this paper, we mine the source and test code changes that required accompanying build changes in order to better understand this co-change relationship. We build random forest classifiers using language-agnostic and language-specific code change characteristics to explain when code-accompanying build changes are necessary based on historical trends. Case studies of the Mozilla C++ system, the Lucene and Eclipse open source Java systems, and the IBM Jazz proprietary Java system indicate that our classifiers can accurately explain when build co-changes are necessary with an AUC of 0.60-0.88. Unsurprisingly, our highly accurate C++ classifiers (AUC of 0.88) derive much of their explanatory power from indicators of structural change (e.g., was a new source file added?). On the other hand, our Java classifiers are less accurate (AUC of 0.60-0.78) because roughly 75% of Java build co-changes do not coincide with changes to the structure of a system, but rather are instigated by concerns related to release engineering, quality assurance, and general build maintenance.

Citation preview

Page 1: Mining Co-Change Information to Understand when Build Changes are Necessary

Mining Co-Change Information to Understand when Build Changes are Necessary

@shane_mcintosh

Shane McIntosh

Bram Adams

Meiyappan Nagappan

Ahmed E. Hassan

Page 2: Mining Co-Change Information to Understand when Build Changes are Necessary

What is a build system?

Source code

2

Page 3: Mining Co-Change Information to Understand when Build Changes are Necessary

What is a build system?

Source code

Deliverable

2

Page 4: Mining Co-Change Information to Understand when Build Changes are Necessary

.tex

.c

.cc

.o

.o

.dvi

.a

.exe

.pdf

.deb

Build systems describe how sources are!translated into deliverables

3

Page 5: Mining Co-Change Information to Understand when Build Changes are Necessary

Continuous Integration:!Enabled by the

build system

4

.c .mk

Page 6: Mining Co-Change Information to Understand when Build Changes are Necessary

Continuous Integration:!Enabled by the

build system

Commit

4

Commit 9719cf0

.c .mk

Page 7: Mining Co-Change Information to Understand when Build Changes are Necessary

Continuous Integration:!Enabled by the

build system

Commit

4

BuildCommit 9719cf0

.c .mk

Page 8: Mining Co-Change Information to Understand when Build Changes are Necessary

Continuous Integration:!Enabled by the

build system

Commit

4

Build

Test

Commit 9719cf0

.c .mk

Page 9: Mining Co-Change Information to Understand when Build Changes are Necessary

Continuous Integration:!Enabled by the

build system

Commit

4

Build

Test

ReportCommit 9719cf0 was successfully integrated

Commit 9719cf0

.c .mk

Page 10: Mining Co-Change Information to Understand when Build Changes are Necessary

Continuous Integration:!Enabled by the

build system

Commit

4

Build

Test

ReportCommit 9719cf0 was successfully integrated

Commit 9719cf0

.c .mk

Page 11: Mining Co-Change Information to Understand when Build Changes are Necessary

“...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!

5

Page 12: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!is a frequent cause build breaks

6

.c .mk

Page 13: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!is a frequent cause build breaks

Commit

6

Commit aedd38

.c

.mk

Page 14: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!is a frequent cause build breaks

Commit

6

Commit aedd38

.c

.mk

Page 15: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!is a frequent cause build breaks

Commit

6

BuildCommit aedd38

.c

.mk

Page 16: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!is a frequent cause build breaks

Commit

6

Build

Test

Commit aedd38

.c

.mk

Page 17: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!is a frequent cause build breaks

Commit

6

Build

Test

Commit aedd38

.c

.mk

Page 18: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!is a frequent cause build breaks

Commit

6

Build

Test

Report

Commit aedd38

.c

.mk

Commit aedd38 broke the build!

Page 19: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!can even impact end users

7

Page 20: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!can even impact end users

7

Not working due to linking of

incorrect SQLite library version

Page 21: Mining Co-Change Information to Understand when Build Changes are Necessary

Neglected build maintenance!can even impact end users

7

Not working due to linking of

incorrect SQLite library version

When are build!changes necessary?

Page 22: Mining Co-Change Information to Understand when Build Changes are Necessary

8

Overview of the studied systems

C++ Java

Page 23: Mining Co-Change Information to Understand when Build Changes are Necessary

8

Overview of the studied systems

C++ Java

Page 24: Mining Co-Change Information to Understand when Build Changes are Necessary

8

Overview of the studied systems

13 years of

historical data

C++ Java

Page 25: Mining Co-Change Information to Understand when Build Changes are Necessary

8

Overview of the studied systems

13 years of

historical data

Single build system for Firefox, Thunderbird, etc.

C++ Java

Page 26: Mining Co-Change Information to Understand when Build Changes are Necessary

8

Overview of the studied systems

13 years of

historical data

Single build system for Firefox, Thunderbird, etc.

C++ Java

Total of 16 years of historical data

Page 27: Mining Co-Change Information to Understand when Build Changes are Necessary

8

Overview of the studied systems

13 years of

historical data

Single build system for Firefox, Thunderbird, etc.

C++ Java

Proprietary and open

source systems

Total of 16 years of historical data

Page 28: Mining Co-Change Information to Understand when Build Changes are Necessary

9

Semi-automatic identification of file types using naming conventions

.mk.c.c.ac.dat.h

Page 29: Mining Co-Change Information to Understand when Build Changes are Necessary

9

Semi-automatic identification of file types using naming conventions

.mk.cTest

.cBuildSource

.ac.dat.hBuildTestSource

Page 30: Mining Co-Change Information to Understand when Build Changes are Necessary

Grouping related changes according to the work items that they address

10

Page 31: Mining Co-Change Information to Understand when Build Changes are Necessary

Grouping related changes according to the work items that they address

.c .c .cChanges .mk

10

Page 32: Mining Co-Change Information to Understand when Build Changes are Necessary

Missed code!in #2121

Add feature!#2121

Fix for!bug #1234

Grouping related changes according to the work items that they address

.c .c .c

Transactions

Changes .mk

10

Page 33: Mining Co-Change Information to Understand when Build Changes are Necessary

2121

Missed code!in #2121

Add feature!#2121

1234

Fix for!bug #1234

Grouping related changes according to the work items that they address

.c .c .c

Transactions

Work items

Changes .mk

10

Page 34: Mining Co-Change Information to Understand when Build Changes are Necessary

11

Page 35: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

11

Page 36: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

11

(RQ1)!Co-change frequency

.c .mk?

Page 37: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

11

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

Page 38: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

11

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

(RQ3)!Most powerful

co-change indicators

Page 39: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

12

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

(RQ3)!Most powerful

co-change indicators

Page 40: Mining Co-Change Information to Understand when Build Changes are Necessary

13

The proportion of build changes that are accompanied by source code changes

.c .mk?

Page 41: Mining Co-Change Information to Understand when Build Changes are Necessary

13

The proportion of build changes that are accompanied by source code changes

.c .mk?

.c .c.mk .mk .c.mk

Page 42: Mining Co-Change Information to Understand when Build Changes are Necessary

13

The proportion of build changes that are accompanied by source code changes

.c .mk?

.c .cWork!items

.mk

1

.mk .c.mk

32

Page 43: Mining Co-Change Information to Understand when Build Changes are Necessary

13

The proportion of build changes that are accompanied by source code changes

.c .mk?

.c .cWork!items

.mk

1

.mk .c.mk

32

2 build co-changes

3 total build changes

Page 44: Mining Co-Change Information to Understand when Build Changes are Necessary

14

Build changes are often accompanied by changes to the source code

Mozilla Eclipse Lucene Jazz

Build ⇒ Source 86% 82% 44% 72%

Build ⇒ Test 29% 36% 41% 36%

Build ⇒ Src/Test 88% 82% 53% 77%

.c .mk?

Page 45: Mining Co-Change Information to Understand when Build Changes are Necessary

15

Build changes are occasionally accompanied by changes to test code

Mozilla Eclipse Lucene Jazz

Build ⇒ Source 86% 82% 44% 72%

Build ⇒ Test 29% 36% 41% 36%

Build ⇒ Src/Test 88% 82% 53% 77%

.c .mk?

Page 46: Mining Co-Change Information to Understand when Build Changes are Necessary

16

53%-88% of build changes are accompanied by changes to source or test code

Mozilla Eclipse Lucene Jazz

Build ⇒ Source 86% 82% 44% 72%

Build ⇒ Test 29% 36% 41% 36%

Build ⇒ Src/Test 88% 82% 53% 77%

.c .mk?

Page 47: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

17

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

(RQ3)!Most powerful

co-change indicators

Most build changes are

accompanied by source/test code changes

Page 48: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

18

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

(RQ3)!Most powerful

co-change indicators

Most build changes are

accompanied by source/test code changes

Page 49: Mining Co-Change Information to Understand when Build Changes are Necessary

19

Metrics that may indicate whether a code change will require an accompanying build co-change

Page 50: Mining Co-Change Information to Understand when Build Changes are Necessary

19

Metrics that may indicate whether a code change will require an accompanying build co-change

Language-agnostic

Page 51: Mining Co-Change Information to Understand when Build Changes are Necessary

19

Metrics that may indicate whether a code change will require an accompanying build co-change

Language-agnostic

+++ File added

Page 52: Mining Co-Change Information to Understand when Build Changes are Necessary

19

Metrics that may indicate whether a code change will require an accompanying build co-change

Language-agnostic

+++ File added

.mkHistorical tendencies .c

Page 53: Mining Co-Change Information to Understand when Build Changes are Necessary

19

Metrics that may indicate whether a code change will require an accompanying build co-change

Language-agnostic

Language-aware

+++ File added

.mkHistorical tendencies .c

Page 54: Mining Co-Change Information to Understand when Build Changes are Necessary

19

Metrics that may indicate whether a code change will require an accompanying build co-change

Language-agnostic

Language-aware

+++ File added

.mkHistorical tendencies .c

Changed dependencies

import

Page 55: Mining Co-Change Information to Understand when Build Changes are Necessary

19

Metrics that may indicate whether a code change will require an accompanying build co-change

Language-agnostic

Language-aware

+++ File added

.mkHistorical tendencies .c

Changed dependencies

import

Changed!conditional compilation

#ifdef

Page 56: Mining Co-Change Information to Understand when Build Changes are Necessary

1 2

.mk

20

We train classifiers to identify code changes that require build changes

Work!items

.c.c .c

Random forest classification model

Build change necessary

No build change necessary

Page 57: Mining Co-Change Information to Understand when Build Changes are Necessary

1 2

.mk

20

We train classifiers to identify code changes that require build changes

Work!items

.c

.c .cRandom forest classification model

Build change necessary

No build change necessary

Page 58: Mining Co-Change Information to Understand when Build Changes are Necessary

1 2

.mk

21

We train classifiers to identify code changes that require build changes

Work!items

.c

Random forest classification model

Build change!necessary

No build change necessary

Page 59: Mining Co-Change Information to Understand when Build Changes are Necessary

1 2

.mk

22

We train classifiers to identify code changes that require build changes

Work!items

.c.c .c

Random forest classification model

Build change necessary

No build change necessary

Page 60: Mining Co-Change Information to Understand when Build Changes are Necessary

1 2

.mk

22

We train classifiers to identify code changes that require build changes

Work!items

.c

.c .c

Random forest classification model

Build change necessary

No build change necessary

Page 61: Mining Co-Change Information to Understand when Build Changes are Necessary

1 2

.mk

23

We train classifiers to identify code changes that require build changes

Work!items

.c .c

Random forest classification model

Build change necessary

No build change!necessary

Page 62: Mining Co-Change Information to Understand when Build Changes are Necessary

24

Language-aware metrics add significant explanatory power

Mozilla Eclipse Lucene Jazz

AUC (language-agnostic metrics) 0.84 0.66 0.71 0.57

AUC (language-agnostic and

aware metrics)0.88 0.69 0.78 0.60

Page 63: Mining Co-Change Information to Understand when Build Changes are Necessary

25

Mozilla classifiers are highly accurate

Mozilla Eclipse Lucene Jazz

AUC (language-agnostic metrics) 0.84 0.66 0.71 0.57

AUC (language-agnostic and

aware metrics)0.88 0.69 0.78 0.60

Page 64: Mining Co-Change Information to Understand when Build Changes are Necessary

26

Java classifiers are less accurate than Mozilla one

Mozilla Eclipse Lucene Jazz

AUC (language-agnostic metrics) 0.84 0.66 0.71 0.57

AUC (language-agnostic and

aware metrics)0.88 0.69 0.78 0.60

Page 65: Mining Co-Change Information to Understand when Build Changes are Necessary

27

Java build changes are rarely!driven by code changes

Category Task Amount Correctly classifiedSystem structure Refactorings 19 (25%) 8

General build maintenance

Build tool configuration 15 (20%) 0

Build defects 6 (8%) 0

Release engineering

Add platform support 12 (16%) 2

Packaging fixes 12 (16%) 3

Library versioning 8 (11%) 0

Test maintenance Test infrastructure 3 (4%) 0

Page 66: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

28

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

(RQ3)!Most powerful

co-change indicators

Most build changes are

accompanied by source/test code changes

AUCC++ 0.88, AUCJava 0.60-0.88

Java build changes are rarely motivated by code changes

Page 67: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

29

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

(RQ3)!Most powerful

co-change indicators

Most build changes are

accompanied by source/test code changes

AUCC++ 0.88, AUCJava 0.60-0.88

Java build changes are rarely motivated by code changes

Page 68: Mining Co-Change Information to Understand when Build Changes are Necessary

30

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2456777

11165

413

Random forest classification model

ClassificationWork!Item

123

Page 69: Mining Co-Change Information to Understand when Build Changes are Necessary

30

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2456777

11165

413

Random forest classification model

ClassificationWork!Item

123

NoYesYes

Page 70: Mining Co-Change Information to Understand when Build Changes are Necessary

30

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2456777

11165

413

Random forest classification model

ClassificationWork!Item

123

NoYesYes

Misclassification rate of 1 ÷ 3 = 0.33

Page 71: Mining Co-Change Information to Understand when Build Changes are Necessary

30

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2456777

11165

413

Random forest classification model

ClassificationWork!Item

123

NoYesYes

Randomly

permute values

Page 72: Mining Co-Change Information to Understand when Build Changes are Necessary

31

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2

456

77711165

413

Random forest classification model

ClassificationWork!Item

123

Page 73: Mining Co-Change Information to Understand when Build Changes are Necessary

31

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2

456

77711165

413

Random forest classification model

ClassificationWork!Item

123

YesYesYes

Page 74: Mining Co-Change Information to Understand when Build Changes are Necessary

31

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2

456

77711165

413

Random forest classification model

ClassificationWork!Item

123

YesYesYes

Misclassification rate of 2 ÷ 3 = 0.67

Page 75: Mining Co-Change Information to Understand when Build Changes are Necessary

31

Measuring variable importance in random forest classifiers

Random Forests!L. Breiman

[Machine Learning 2001]

500

Var1 Var2

150

Build!change?

NoNoYes

Var3

2

456

77711165

413

Random forest classification model

ClassificationWork!Item

123

YesYesYes

Misclassification rate of 2 ÷ 3 = 0.67

Var1 randomness increases misclassification rate by 0.33

Page 76: Mining Co-Change Information to Understand when Build Changes are Necessary

Mozilla Eclipse−core Lucene Jazz

●●

●● ●●

●●●●

0.00

0.05

0.10

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Conditional co

mpilation

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Varia

ble

Impo

rtanc

e Sc

ore

32

Variable importance in the!Mozilla classifier

Page 77: Mining Co-Change Information to Understand when Build Changes are Necessary

Mozilla Eclipse−core Lucene Jazz

●●

●● ●●

●●●●

0.00

0.05

0.10

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Conditional co

mpilation

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Varia

ble

Impo

rtanc

e Sc

ore

32

Variable importance in the!Mozilla classifier

Structure-altering changes are

most important in C++ classifiers

Page 78: Mining Co-Change Information to Understand when Build Changes are Necessary

Mozilla Eclipse−core Lucene Jazz

●●

●● ●●

●●●●

0.00

0.05

0.10

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Conditional co

mpilation

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Varia

ble

Impo

rtanc

e Sc

ore

32

Variable importance in the!Mozilla classifier

Structure-altering changes are

most important in C++ classifiers

Historical co-change tendencies are also important

Page 79: Mining Co-Change Information to Understand when Build Changes are Necessary

33

Variable importance in Java classifiers

Mozilla Eclipse−core Lucene Jazz

●●

●● ●●

●●●●

0.00

0.05

0.10

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Conditional co

mpilation

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Varia

ble

Impo

rtanc

e Sc

ore

Page 80: Mining Co-Change Information to Understand when Build Changes are Necessary

33

Variable importance in Java classifiers

Mozilla Eclipse−core Lucene Jazz

●●

●● ●●

●●●●

0.00

0.05

0.10

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Conditional co

mpilation

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Varia

ble

Impo

rtanc

e Sc

ore Structure-altering is less

important than in Mozilla

Page 81: Mining Co-Change Information to Understand when Build Changes are Necessary

33

Variable importance in Java classifiers

Mozilla Eclipse−core Lucene Jazz

●●

●● ●●

●●●●

0.00

0.05

0.10

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Conditional co

mpilation

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Prior build co−ch

anges

Number of files

Source added

Test added

Source deleted

Test deleted

Source modifie

d

Test modifie

d

Source renamed

Test renamed

Non−core dependencie

s

Varia

ble

Impo

rtanc

e Sc

ore Structure-altering is less

important than in Mozilla

Java classifiers rely more on historical co-change

tendencies

Page 82: Mining Co-Change Information to Understand when Build Changes are Necessary

!

Case study structure

34

(RQ2)!Co-change prediction accuracy

(RQ1)!Co-change frequency

.c .mk?

(RQ3)!Most powerful

co-change indicators

Most build changes are

accompanied by source/test code changes

AUCC++ 0.88, AUCJava 0.60-0.88

Java build changes are rarely motivated by code changes

C++: Structure-altering changes

Java: Historical co-change tendencies

Page 83: Mining Co-Change Information to Understand when Build Changes are Necessary
Page 84: Mining Co-Change Information to Understand when Build Changes are Necessary
Page 85: Mining Co-Change Information to Understand when Build Changes are Necessary
Page 86: Mining Co-Change Information to Understand when Build Changes are Necessary
Page 87: Mining Co-Change Information to Understand when Build Changes are Necessary
Page 88: Mining Co-Change Information to Understand when Build Changes are Necessary
Page 89: Mining Co-Change Information to Understand when Build Changes are Necessary