When should internal interfaces be promoted to public? (FSE 2016)

andrehoraa 18 views 37 slides Jul 25, 2024
Slide 1
Slide 1 of 37
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37

About This Presentation

Commonly, software systems have public (and stable) interfaces, and internal (and possibly unstable) interfaces. Despite being discouraged, client developers often use internal interfaces, which may cause their systems to fail when they evolve. To overcome this problem, API producers may promote int...


Slide Content

When Should Internal Interfaces Be
Promoted to Public?
André Hora, Marco Tulio Valente,
Romain Robbes, Nicolas Anquetil
FSE 2016

Outline
1.Context
2.Problem
3.Study Design
4.Results
5.Final Remarks
2

Software Evolution
Software systems are under constant
evolution
New features, bug-fixes, refactoring
Up to 90% of development costs
3

Library Evolution
4

API Evolution Good Practices
1. API developers should deprecate API elements with
clear replacement messages to facilitate migration
2. API clients should only use public and stable APIs to
avoid backward-incompatibility
5

API Evolution Good Practices
1. API developers should deprecate API elements with
clear replacement messages to facilitate migration
2. API clients should only use public and stable APIs to
avoid backward-incompatibility

[Robbes et al., 2012, Brito et al. 2016]
6

API Evolution Good Practices
1. API developers should deprecate API elements with
clear replacement messages to facilitate migration
2. API clients should only use public and stable APIs to
avoid backward-incompatibility
7

Public Interfaces
Stable, Supported, Documented
Clients can use
eg: java.util.List
8

Public Interfaces
Stable, Supported, Documented
Clients can use
eg: java.util.List
Internal Interfaces
Unstable, Unsupported, Undocumented
Clients should not use
eg: org.eclipse.jdt.internal.ui.JavaPlugin
9

Examples of Internal Interfaces
org.eclipse.jdt.internal.ui.IJavaHelpContextIds
org.junit.internal.AssumptionViolatedException
org.junit.internal.runners.InitializationError
org.hibernate.internal.util.ReflectHelper
org.hibernate.internal.CoreMessageLogger
sun.misc.Unsafe
10

Examples of Internal Interfaces
org.eclipse.jdt.internal.ui.IJavaHelpContextIds
org.junit.internal.AssumptionViolatedException
org.junit.internal.runners.InitializationError
org.hibernate.internal.util.ReflectHelper
org.hibernate.internal.CoreMessageLogger
sun.misc.Unsafe *.internal.*
sun.*
11

“Packages containing implementation details have
internal in the name. They are unsupported and
subject to change. Client code must never
reference internal elements.”
“sun.* packages are not part of the supported,
public interface. Writing java programs that
rely on sun.* is risky: those classes are not
portable, and are not supported.”
Java Documentation
Eclipse Documentation
12

Outline
1.Context
2.Problem
3.Study Design
4.Results
5.Final Remarks
13

44% of 512 Eclipse clients use
internal interfaces
[Businge et al., 2013]
Clients often use internal interfaces!
14

23% out of 9,702 Eclipse clients
use internal interfaces (45K files)
[Boa Infrastructure]
Ultra-large scale level
Clients often use internal interfaces!
44% of 512 Eclipse clients use
internal interfaces
[Businge et al., 2013]
15

Internal interfaces may
become Public
Eclipse client asks:
“CharOperation is technically
internal but it seems generally
useful enough to use elsewhere. I
would like to see it made public.”
Eclipse developer answers:
“We could indeed surface it into
a public package”
16

Internal interfaces may
become Public
Eclipse client asks:
“CharOperation is technically
internal but it seems generally
useful enough to use elsewhere. I
would like to see it made public.”
Eclipse client asks:
“CharOperation is technically
internal but it seems generally
useful enough to use elsewhere. I
would like to see it made public.”
Eclipse client asks:
“CharOperation is technically
internal but it seems generally
useful enough to use elsewhere. I
would like to see it made public.”
Eclipse developer answers:
“We could indeed surface it into
a public package”
Eclipse developer answers:
“We could indeed surface it into
a public package”
Eclipse developer answers:
“We could indeed surface it into
a public package”
17

Stable
Documented
Clients can use
Unstable
Undocumented
Clientes should not use
Internal Interfaces Public Interfaces
Internal interfaces may
become Public
org.eclipse.internal.foo.Bar
2,155 145 (7%)
org.eclipse.foo.Bar
18

Internal interfaces may
become Public
19

Internal interfaces may
become Public
Which interfaces initially
projected as internal should be
promoted to public?
20

Outline
1.Context
2.Problem
3.Study Design
4.Results
5.Final Remarks
21

Research Questions
•RQ1. Is there a relationship between internal
interface usage and promotion?
•RQ2. Can we predict that an internal interface
will be promoted to a public one?
•RQ3. Can we detect that an internal interface
is a candidate to be promoted to a public one?
22

Experiment Design
Public x Internal
interfaces
Case
studies
23

Experiment Design
Promoted x non-promoted
internal interfaces
24

Experiment Design
Usage
metrics
Domestic
metrics
25

Outline
1.Context
2.Problem
3.Study Design
4.Results
5.Final Remarks
26

RQ1
Is there a relationship between internal
interface usage and promotion?
27

RQ1. Is there a relationship between internal
interface usage and promotion?
1. Separation of interfaces in
promoted and non-promoted
}
}
Non-promoted
internal interfaces
Promoted internal interfaces
2. Comparison of promoted
and non-promoted internal
interfaces (Mann-Whitney U
test & Cliff’s Delta)
28

RQ1. Is there a relationship between internal
interface usage and promotion?
29

RQ1. Is there a relationship between internal
interface usage and promotion?
30

RQ1. Is there a relationship between internal
interface usage and promotion?
Promoted and non-promoted internal
interfaces present distinct distribution
regarding their usage metrics
31

RQ2
Can we predict that an internal interface
will be promoted to a public one?
32

RQ2. Can we predict that an internal
interface will be promoted to a public one?
Precision 50%–80%, recall
26%– 82%, AUC 74%–85%
Random-forest classifier
to predict promotion
33

Random-forest classifier
to predict promotion RQ2. Can we predict that an internal
interface will be promoted to a public one? Precision 50%–80%, recall
26%– 82%, AUC 74%–85%
Internal interface promotions can be
predicted with high confidence
34

Outline
1.Context
2.Problem
3.Study Design
4.Results
5.Final Remarks
35

Final Remarks
Internal interfaces are
common practice: 21%
(6,085 out of 28,503)
Clients often use internal
interfaces: 23.5% (2,277 out
of 9,702 Eclipse clients)
Internal interface promotions
happen in real-world systems:
7% (195 out of 2,722)
Promoted and non-promoted
internal interfaces present
distinct usage patterns
Internal interface promotions can be
predicted with high confidence
36

When Should Internal Interfaces Be
Promoted to Public?
André Hora, Marco Tulio Valente,
Romain Robbes, Nicolas Anquetil
FSE 2016
Tags