research @ gsd lab, university of waterloo yingfei xiong, 2011
Post on 18-Jan-2016
222 Views
Preview:
TRANSCRIPT
Research @ GSD Lab, University of Waterloo
Yingfei Xiong, 2011
About me
• 2004~2006, Ph.D. Student@SEI, PKU– SA Group
• 2006~2009, Ph.D. Student@U Tokyo– Advisors: Zhenjiang Hu, Masato Takeichi
• 2009~, PostDoc@U Waterloo– Advisor: Krzysztof Czarnecki
Generative Software Development Laboratory
• Leaded by Krzysztof Czarnecki– Generative programming– Cardinarity-based feature model– Staged configuration– 12 papers cited 100+ times– Ph.D Thesis cited 2000+ times
• “Probably one of the best groups in MDE”– Jean Bezivin, University of Nantes
Generative Software Development Laboratory
• 1 faculty• 1 research associate• 2 postdocs• 7+1 Ph.D. Students• 2 MASc. Students• 2 Visitors• 2010 publications
– ICSE, ASE, SPLC, ICSM, ICMT, SLE, RE industry track, MDI, VaMoS...
– With only 1 rejection
Funding
Industry + Government match
Application-oriented, data-centric research
Application-oriented
• Real industry applications > publications in top venues
• Usefulness verified on real data > intelligent solution
• Most needed problem > interesting / promising problem
Data Centric
Data-Centric
Collect data
Analyze data
Discover problem
Discover solution
Evaluate
Apply to industry / write paper
Idea-centric
Idea
Develop into a solution
Refine problem
Collect data
Evaluate
Write paper
Problem-centric
Problem
Analyze Problem
Propose solution
Collect data
Evaluate
Write paper
Rafael's Bug Report Assignment
Thiago's API Migration
RehanUse Case Discovery
Steven / Thorsten / RafaelReal World Feature Model
Publication
• No publication in 2008• No publication in 2009• 2010
– [VaMoS] Variability Model of the Linux Kernel– [SPLC] Evolution of the Linux Kernel Variabilit
y Model– [ASE] Variability Modeling in the Real: A Pers
pective from the Operating Systems Domain– [ICSE] Reverse Engineering Feature Models
Moises, YingfeiProcess Model Refinement
Discussion
• Advantages:– Solving real world problem– No false assumption– Direct application to industry
• Disadvantages:– Fewer papers
• collecting data requires a lot of work• problem may not be easily solvable• work may not be easily appreciated
– Potentially short-sighted
Fix Generation for Feature Model Configuration
• CDL: a configuration language for embeded operation system
• eCos: graphical configurator for CDL
• Both developed by RedHat
• FODA feature model with attribute
CDL Examplecdl_option DEBUG {
display "Enable Debug"}
cdl_option LOG {display "Enable Log"
}
cdl_option LOG_LEVEL {display "Log Level"active_if LOGflavor datadefault_value 5
}
cdl_option TRACE {
display "Enable Trace"
requires DEBUG & LOG
}
cdl_option TRACE_LEVEL {
display "Trace Level"
active_if TRACE
flavor data
default_value 3
requires TRACE_LEVEL < LOG_LEVEL
}
Demo
Problem: No complete fix list
• "if CYGPKG_MYPKG_OP1 is active, make sure that the list of tests for that package is a substring of CYGDAT_MYPKG_ACTIVE_TESTS. This works 50% of the time. Problem is the other 50% of the time, rather than fiddling with the substrings, it enables / disables my subpackage!"
Is it possible to give complete solution list?
Will it be too long to use?
Will it be too long to generate?
Boolean Features
• Features: A,B,C,D,E,F
• Constraints– A -> B \/ C– B -> D \/ E– E -> F \/ G
• Configuration:– A=true– B,C,D,E,F=false
• Fixes– A->false– B->true, D->true– B->true , E-> true, F->
true– B->true, E->true, G->tr
ue– C->true
Factors affecting the number of fix
• How many features are inter-related
• How many disjunction are used in constraints
• Observation: Both factors are of low values in real CDL models
Non-Boolean Features
• Features: A, B
• Constraints: A > B
• Configuration: A=10, B=11
Abstract Fixes
• Features: A, B
• Constraints: A > B
• Configuration: A=10, B=11
• Fixes:– Change A { A>11 }– Change B { B<10 }
Minimal Fixes
• Changing as few variables as possible– Change A { A>11 }– is better than– Change A, B {A>B}
• Constraints as loose as possible– Change A {A>11}– is better than– Change A {A>12}
Factors affecting abstract fixes
• How many variables are inter-constrained
• How complex the constraints are
• Observation: Both factors are low
Fix Generation for Boolean Features:
1. Statically analyze the violated constraint
2. Statically analyze interactions
3. Remove unnecessary fixes based on dynamic fixes
An Example
• Variables: A, B, C, D
• Constraints:– A->(B/\C)– B->(!C\/D)
• Configuration: A=true, B=false, C=true, D=false
• A->(B/\C) is violated
Step 1. Analyze the Violated Constraint
fix[A->(B/\C)]
=fix[!A] fix[B/\C]⋃={<A=false>} (fix[B] × ⋃
fix[C])
={<A=false>} {<B=tru⋃e, C=true>}
={<A=false>, <B=true, C=true>}
• Constraints:– A->(B/\C)– B->(!C\/D)
• Configuration: – A=true, B=false, C=tru
e, D=false
Step 2: Analyze Interactions
{<B=true, C=true>} changes B and C
fix[true->(!true\/D)]=fix[false] fix[false\/D]⋃={} fix[false] fix[D]⋃ ⋃={<D=true>}
FixSet={<A=false>} ({<B=true,C⋃
=true>}×{<D=true>}={<A=false>, <B=true, C=tru
e, D=true>}
• Constraints:– A->(B/\C)– B->(!C\/D)
• Configuration: – A=true, B=false, C=tru
e, D=false
Step 3: Remove unnecessary fix
{<A=false>, <B=true, C=true, D=true>}
becomes
{<A>, <B, D>}
• Constraints:– A->(B/\C)– B->(!C\/D)
• Configuration: – A=true, B=false, C=tru
e, D=false
Non-Boolean Features
• Represent non-boolean constraints as boolean variables
• Statically analyze boolean constraints
• Convert the fix back to abstract ones
An Example
• Features:– M, N:Boolean– A, B:Int
• Constraints:– N -> A>10– A<B -> M
• Configuration:– A=8, B=2, M=false, N=true
Step1: Represent as boolean variables
• Features:– M, N:Boolean– A, B:Int
• Constraints:– N -> A>10– A<B -> M
• Configuration:– A=8, B=2, M=false, N=
true
• Boolean Variables:– X: A>10– Y: A<B
• Converted Constraints:– N -> X– Y -> M
• Converted Configuration:– X=false– Y=true– M=false, N=true
Step 2.1: Analyze Single Constraint
• Features:– M, N:Boolean– A, B:Int
• Configuration:– A=8, B=2, M=false, N=true
• Boolean Variables:– X: A>10– Y: A<B
• Converted Constraints:– N -> X– Y -> M
• fix[N->X]={<N=false>, <X=true>}
Step 2.2: Analyze Interaction
• Features:– M, N:Boolean– A, B:Int
• Configuration:– A=8, B=2, M=false, N=true
• Boolean Variables:– X: A>10– Y: A<B
• Converted Constraints:– N -> X– Y -> M
• <X=true> relates to Y• fix[Y->M]={<Y=false>,
<M=true>}
• FixSet={<N=false>} ({X=tr⋃ue}×{<Y=false>, <M=true>}={<N=false>, <X=true, Y=fasle>, <X=true, M=true>}
Step 3.1 Produce Variable Set
• Features:– M, N:Boolean– A, B:Int
• Configuration:– A=8, B=2, M=false, N=true
• Boolean Variables:– X: A>10– Y: A<B
• Converted Constraints:– N -> X– Y -> M
• <X=true, Y=false>• All variables in X and
Y– {A, B}
• All non-empty subsets– {A}– {B}– {A,B}
Step 3.2 Build a partial order
• Features:– M, N:Boolean– A, B:Int
• Configuration:– A=8, B=2, M=false, N=true
• Boolean Variables:– X: A>10– Y: A<B
• Converted Constraints:– N -> X– Y -> M
{A} {B}
{A,B}
• <X=true, Y=false>
Step 3.3 Test Satisfiability using SMT solvers
• Features:– M, N:Boolean– A, B:Int
• Configuration:– A=8, B=2, M=false, N=true
• Boolean Variables:– X: A>10– Y: A<B
• Converted Constraints:– N -> X– Y -> M
• <X=true, Y=false>• Change A {A>10, A<
2}– unsatisfiable
• Change B {8>10, 8<B}– unsatisfiable
• Change A, B {A>10, A<B}– satisfiable
Evaluation
• Verification of all observation– Is the number of fixes always small?– Is the generation from non-boolean constraint
s always fast?
Summary
• Application-oriented, data-centric research method
• "Data-centric" is probably important to software engineering research
top related