Software Product Line Refactoring Guide
Software Product Line Refactoring Guide
refactoring
Paulo Borba
Informatics Center
Federal University of Pernambuco
phmb@[Link]
.aj
Static Clouds
.jpg
reusable related
assets products
total
cost
0 2 4 6 8
products
Thursday, July 23, 2009
We can reduce upfront
investments and risks...
Main 1 Main 2
independently
developed products
Main 1
Common
Product 1 Common
Main 1 Main 2
Main 2
On demand
Common
Common !
Clouds
Startup On demand
Startup On demand
Main 1 Main 2
Main 1 Main 2
different devices,
more than 500
builds…
• tedious
• risky
• compromises promised benefits on
other dimensions of cost and risk
Clouds
Main 1
Common
Common !
Product 1 Common Clouds
On demand
conflicting
assets
Thursday, July 23, 2009
and does not deal with
specific PL artifacts
Clouds
Rain of fire
Common !
Clouds
Clouds Image loading
Startup On demand
On demand Startup
Main 1 Main 2
• notion
• templates (catalogue)
• feature models
• configuration knowledge
Mobile Media
Startup On demand
On demand Startup
Main 1 Main 2
↦
class Main {
Main 1 ...new StartUp(...);...
}
class Main {
Main 2 ↦ ...new OnDemand(...);...
}
..
.
{Main 1, Startup,
[Link], ...}
phmb@[Link]
On demand Startup
p
⊑
q
when q is at least as good as p in the
sense that it will satisfy every input-
output specification satisfied by p
Resulting PL refactoring
notion as precise as this
refinement notion...
Thursday, July 23, 2009
Class declaration
refinement
c
⊑
d
a, m
when
a c ⋅ m ⊑ a d ⋅ m
On demand Startup
[[F ]]
is the set of all
valid product configurations of F
A {A, B,...}
[[ ]] = {A, C,...}
B C …
a ∈ [[K ]]c
λc. if F ∈ c then
F [Link]
[[ ]] = {[Link]}
... ...
…
behavior-preserving
source-FM-CK
transformations that
improve some quality factors
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Audio Send Photo Sorting 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link]
Mobile Media [Link], ... Mobile Media [Link], ...
Photo [Link], ... Photo [Link], ... !
Music [Link], ... ! Audio ! [Link], ...
Photo " Music [Link], ... ! Photo " Audio [Link], ...
Photo ! Music [Link], ... ! Photo ! Audio [Link], ...
! ! ! !
[Link] ![Link]
PL renaming refactoring
Thursday, July 23, 2009
Beyond program
behavior
1 6
! 5
2 4
!
3 3
! 2
4
! 1
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
Behavior Quality
preservation factors
whenever
∀ c ∈ [[F ]] ⋅ ∃ cʼ ∈ [[Fʼ ]] ⋅
A ⟨[[K ]]c⟩ ⊑ Aʼ ⟨[[Kʼ ]]cʼ⟩
whenever
PL ⊑ PLʼ
PLʼ is better than PL
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Audio Send Photo Sorting 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link]
Mobile Media [Link], ... Mobile Media [Link], ...
Photo [Link], ... Photo [Link], ... !
Music [Link], ... ! Audio ! [Link], ...
Photo " Music [Link], ... ! Photo " Audio [Link], ...
Photo ! Music [Link], ... ! Photo ! Audio [Link], ...
! ! ! !
[Link] ![Link]
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Audio Send Photo Sorting 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link]
Mobile Media [Link], ... Mobile Media [Link], ...
Photo [Link], ... Photo [Link], ... !
Music [Link], ... ! Audio ! [Link], ...
Photo " Music [Link], ... ! Photo " Audio [Link], ...
Photo ! Music [Link], ... ! Photo ! Audio [Link], ...
! ! ! !
[Link] ![Link]
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Audio Send Photo Sorting 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link]
Mobile Media [Link], ... Mobile Media [Link], ...
Photo [Link], ... Photo [Link], ...
! !
Music [Link], ... ! Audio ! [Link], ...
Photo " Music [Link], ... ! Photo " Audio [Link], ...
Photo ! Music [Link], ... ! Photo ! Audio [Link], ...
! ! ! !
[Link] ![Link]
Audio
[Link] [Link]
Mobile Media [Link], ... [Link] Mobile Media [Link], ...
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo ! Music Photo ! Music !
[Link], ... [Link], ...
!
128x149 [Link] ! !
! !
[Link] [Link]
{Music, 128x149} ?
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
whenever
∀ c ∈ [[F ]] ⋅ ∃ cʼ ∈ [[Fʼ ]] ⋅
A ⟨[[K ]]c⟩ ⊑ Aʼ ⟨[[Kʼ ]]cʼ⟩
[[K]] = [[K′ ]]
implies
∀ c ∈ [[F ]] ⋅ ∃ cʼ ∈ [[Fʼ ]] ⋅
[[K ]]c = [[Kʼ ]]cʼ
implies
Clouds
Main 1
Common
Product 1 Common
? Common !
Clouds
On demand
program PL
refactoring refactoring
! 6
2
5
!
3 4
! 3
2
3 !
1
!
4
PL
PL2
PL1 PL2 ⊑ PL
whenever
PL1 ⊑ PL ∧ PL 2 ⊑ PL
PL1 PL2 ⋘ PL
whenever
PL1 PL2 ⊑ PL
PL is better than PL 1 and PL2
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
phmb@[Link]
whenever
∀ c ∈ [[F ]] ⋅ ∃ cʼ ∈ [[Fʼ ]] ⋅
A ⟨[[K ]]c⟩ ⊑ Aʼ ⟨[[Kʼ ]]cʼ⟩
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Music Send Photo Sorting Copy 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link] !
Mobile Media [Link], ... Mobile Media [Link], ... [Link]
Photo [Link], ... Photo [Link], ...
Music [Link], ... Music [Link], ...
Photo " Music [Link], ... Photo " Music [Link], ...
Photo ! Music [Link], ... Photo ! Music [Link], ...
! ! ! Copy [Link], ...
! Copy ! Photo [Link], ...
[Link] ! ! [Link]
¬O ¬e'
A ! A'
A F
F "
K e n
K!
O ⋮ ⋮
¬O ¬e
!
Photo Music Send Photo Sorting 128x149 240x320 Photo Audio Send Photo Sorting 128x149 240x320
Send Photo Photo Send Photo Photo
[Link] [Link]
Mobile Media [Link], ... Mobile Media [Link], ...
Photo [Link], ... Photo [Link], ... !
Music [Link], ... ! Audio ! [Link], ...
Photo " Music [Link], ... ! Photo " Audio [Link], ...
Photo ! Music [Link], ... ! Photo ! Audio [Link], ...
! ! ! !
[Link] ![Link]
A A
F F'
e n ! e[F'/F] n
⋮ ⋮ ⋮ ⋮
c c [F'/F]
n!a m' ! a
n' ! a' n' ! a'
F ⋮ ! F ⋮
e m e m[m'/n]
⋮ ⋮ ⋮ ⋮
n!a n ! a[A'/A]
⋮ ⋮
F ! F
K K
Clouds
a ! b b'
b and a' do not depend on b'
n!a n ! a[A'/A]
⋮ ⋮
F ! F
K K
n!a ! n ! a[A'/A]
⋮ ⋮
domain(A) = domain(Aʼ )
∀ a ∈ domain(A)⋅A(a) ⊑ Aʼ (a)
Thursday, July 23, 2009
Bad smell in feature
models
Mobile Media
[[F ]] = [[Fʼ ]]
P
P
= Q R
Q R
Q ¬R ! R ¬Q
P
P
=
Q R
Q R
P (Q ! R)
P
P
=
Q
Q
Q P
P P
P P P
P
= = =
Q R Q R
Q R Q R Q
Q
Q ¬R ! R ¬Q P (Q ! R) Q P
P⊑Q
pl(P) ⊑ pl(Q)
F = Fʼ ∧ A = Aʼ ∧ K = Kʼ
Carlos Sérgio
Tiago Pontual Soares
Massoni Fernando
Castor
Thursday, July 23, 2009
Software product line
refactoring
Paulo Borba
Informatics Center
Federal University of Pernambuco
phmb@[Link]