Presentation is loading. Please wait.

Presentation is loading. Please wait.

Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Intraprocedural Dataflow Analysis for Software Product Lines Claus Brabrand IT University.

Similar presentations


Presentation on theme: "Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Intraprocedural Dataflow Analysis for Software Product Lines Claus Brabrand IT University."— Presentation transcript:

1 Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Intraprocedural Dataflow Analysis for Software Product Lines Claus Brabrand IT University of Copenhagen Universidade Federal de Pernambuco [ brabrand@itu.dk ] Márcio Ribeiro Universidade Federal de Alagoas Universidade Federal de Pernambuco [ mmr3@cin.ufpe.br ] Társis Tolêdo Universidade Federal de Pernambuco [ twt@cin.ufpe.br ] Johnni Winther Aarhus University [ jw@cs.au.dk ] Paulo Borba Universidade Federal de Pernambuco [ phmb@cin.ufpe.br ]

2 [ 2 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction (Software Product Lines) Dataflow Analyses for Software Product Lines: A0 (brute force): (feature in-sensitive) [product-based] A1 (consecutive): (feature sensitive) [family-based] A2 (simultaneous): (feature sensitive) [family-based] A3 (shared simul.): (feature sensitive) [family-based] Results: A0 vs A1 vs A2 vs A3 (total time, incl. compilation) A1 vs A2 vs A3 (analysis time, excl. compilation) How to combine the analyses: A* Conclusion(s)

3 [ 3 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Software Product Line SPLs based on Conditional Compilation: #ifdef (  )... #endif Logo logo;... logo.use(); #ifdef (VIDEO) logo = new Logo(); #endif Example (SPL fragment) Similarly for; e.g.: ■ uninitialized vars ■ unused variables ■... *** null-pointer exception! in configurations: {Ø, {COLOR}}  : f  F |  | 

4 [ 4 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL result 0100101 1110110 1010011 1110111 0100101 1110110 1010011 1110111 Analysis of SPLs The Compilation Process:...and for Software Product Lines: 0100101 1110110 1010011 1110111 result compile run ERROR! generate 0100101 1110110 1010011 1110111 result run ERROR! ANALYZE! Feature-sensitive data-flow analysis ! run compile ANALYZE! ERROR! 2F2F

5 [ 5 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Dataflow Analysis Dataflow Analysis: 1) Control-flow graph 2) Lattice (finite height) 3) Transfer functions (monotone) L Example: "sign-of-x analysis"

6 [ 6 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Analyzing a Program 1) Program 2) Build CFG 3) Make Equations 4) Solve equations: fixed-point computation (iteration) 5) SOLUTION (least fixed point): Annotated with program points

7 [ 7 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction Dataflow Analyses for Software Product Lines: A0 (brute force): (feature in-sensitive) [product-based] A1 (consecutive): (feature sensitive) [family-based] A2 (simultaneous): (feature sensitive) [family-based] A3 (shared simul.): (feature sensitive) [family-based] Results: A0 vs A1 vs A2 vs A3 (total time, incl. compilation) A1 vs A2 vs A3 (analysis time, excl. compilation) How to combine the analyses: A* Conclusion(s)

8 [ 8 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL A0 A0 (brute force): void m() { int x=0; ifdef(A) x++; ifdef(B) x--; } c = {A}:c = {B}:c = {A,B}: int x = 0; x++; x--;int x = 0; x++; x--;int x = 0; x++; x--; 0 _ | + 0 _ | - 0 _ | 0/+ + ψ FM = A ∨ B L feature in-sensitive! N = O(2 F ) compilations!

9 [ 9 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL int x = 0; x++; x--; A: B: int x = 0; x++; x--; A: B: int x = 0; x++; x--; A: B: A1 A1 (consecutive): void m() { int x=0; ifdef(A) x++; ifdef(B) x--; } c = {A}: 0 _ | + ✗ ✓ ✓ ψ FM = A ∨ B L c = {B}:c = {A,B}: 0 _ | - 0 _ | 0/+ + ✗ ✓✓ ✓ ✓ ✓ + 0 feature sensitive!

10 [ 10 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL x++; + ({A} =, {B} =, {A,B} = ) A2 A2 (simultaneous): void m() { int x=0; ifdef(A) x++; ifdef(B) x--; } ∀ c ∈ {{A},{B},{A,B}}: int x = 0;x--; 0 _ | 0 _ | - 0 _ | 0/+ + A: B: ✓ ({A} =, {B} =, {A,B} = ) ✓✓ ✓✓ ✓✓ ✗ ✗ ψ FM = A ∨ B L 0 + feature sensitive!

11 [ 11 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL x--; + x++; 0 ( [[ψ ∧ ¬A ]] =, [[ψ ∧ A ]] =, [[ψ ∧ ¬A ]] =, [[ψ ∧ A ]] = ) ( [[ψ ]] =, [[ψ ]] = ) A3 A3 (shared): void m() { int x=0; ifdef(A) x++; ifdef(B) x--; } ψ FM = A ∨ B: int x = 0; A: B: _ | ( [[ψ]] = ) 0 (A ∨ B) ∧ ¬A ∧ ¬B ≡ false can use BDD representation ! (compact+efficient) - 0/+ i.e., invalid given wrt. the feature model, ψ ! ψ FM = A ∨ B L 0 ∧ ¬A ∧A∧A + ∧ ¬B ∧B∧B ∧B∧B (although our evaluation: bit vector representation) feature sensitive!

12 [ 12 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Summary A0 A1 A2 A3 void m() { int x=0; ifdef(A) x++; ifdef(B) x--; } Analyzing program: ψ FM = A ∨ B

13 [ 13 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction Dataflow Analyses for Software Product Lines: A0 (brute force): (feature in-sensitive) [product-based] A1 (consecutive): (feature sensitive) [family-based] A2 (simultaneous): (feature sensitive) [family-based] A3 (shared simul.): (feature sensitive) [family-based] Results: A0 vs A1 vs A2 vs A3 (total time, incl. compilation) A1 vs A2 vs A3 (analysis time, excl. compilation) How to combine the analyses: A* Conclusion(s)

14 [ 14 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Intraprocedural Evaluation Five (qualitatively different) SPL benchmarks: intraprocedural impl based on SOOT and CIDE

15 [ 15 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Total Time (incl. compile) Tasks: In practice: 4x (Reaching Definitions) 7x 3x 1x ( no re-compile !) Feature sensitive (A1, A2, and A3) all faster than A0

16 [ 16 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Analysis Time (excl. compile) Tasks: In practice: ( caching !) (Reaching Definitions) A2 faster than A1 A3 faster than A2 ( sharing !)

17 [ 17 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Beyond the Sum of all Methods For a method with x # valid configurations, which of analyses A1 vs A2 vs A3 is fastest? Statistically significant differences between A1, A2, and A3 for all N, except between A2 and A3 for N=4 (underlined above).

18 [ 18 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Combo Analysis Strategy: A * Intraprocedurally combined analysis strategy, A*: A* consistently fastest ( combo !)

19 [ 19 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction Dataflow Analyses for Software Product Lines: A0 (brute force): (feature in-sensitive) [product-based] A1 (consecutive): (feature sensitive) [family-based] A2 (simultaneous): (feature sensitive) [family-based] A3 (shared simul.): (feature sensitive) [family-based] Results: A0 vs A1 vs A2 vs A3 (total time, incl. compilation) A1 vs A2 vs A3 (analysis time, excl. compilation) How to combine the analyses: A* Conclusion(s)

20 [ 20 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Overview A0 (brute force) A1 (consecutive) A2 (simultaneous) A3 (shared) A* (combo) IFDS ➞ IDE (lift) FASTER (intra-procedural) "SPL LIFT : Transparent and Efficient Reuse of IFDS-based Static Program Analyses for Software Product Lines" ( Bodden, Ribeiro, Tolêdo, Brabrand, Borba, Mezini ) PLDI 2013: IFDS (graph repr) A3+BDD (esp. inter- procedural) no re-compile! caching! sharing! combo! graph encoding! repr! Friday

21 [ 21 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Conclusion(s) It is possible to analyze SPLs using DFAs We can automatically "lift" any dataflow analysis and make it feature sensitive: A1, A2, A3 are all faster than A0 (no re- compile!) A2 is faster than A1 (caching!) A3 is faster than A2 (sharing!) A* is fastest (combo!) A3 saves lots of memory vs A2 (sharing!) A1 (consecutive) ➞ A2 (simultaneous) ➞ A3 (shared) ➞ A* (combined)

22 Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL *) Thanks

23 [ 23 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL A0 vs IFDS and A2 vs SPL LIFT IFDS:A0: λS. (S – {x}) ∪ {y} {x} {y} SPL LIFT (IFDS ➞ IDE):A2: λS. (S – {x}) ∪ {y} ( {A} = {x}, {B} = {x}, {A,B} = {x,y} ) A:A: 0 x y 0 x y 0 x y 0 x y A ¬A #ifdef (A) ( {A} = {y}, {B} = {x}, {A,B} = {y} ) true [ (A ∧ B) ∧ ¬A] ∨ [ true ∧ A] = A true A∧BA∧B true ∧ ¬A = ¬A true LIFT:

24 Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Software Product Lines Dataflow Analysis INTRO:

25 [ 25 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Abstract Software product lines (SPLs) developed using annotative approaches such as conditional compilation come with an inherent risk of constructing erroneous products. For this reason, it is essential to be able to analyze such SPLs. However, as dataflow analysis techniques are not able to deal with SPLs, developers must generate and analyze all valid products individually, which is expensive for non-trivial SPLs. In this paper, we demonstrate how to take any standard intraprocedural dataflow analysis and automatically turn it into a feature-sensitive dataflow analysis in five different ways where the last is a combination of the other four. All analyses are capable of analyzing all valid products of an SPL without having to generate all of them explicitly. We have implemented all analyses using SOOT’s intraprocedural dataflow analysis framework and experimentally evaluated four of them according to their performance and memory characteristics on five qualitatively different SPLs. On our benchmarks, the combined analysis strategy is up to almost eight times faster than the brute-force approach.

26 [ 26 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction Software Product Lines Dataflow Analysis (recap) Dataflow Analyses for Software Product Lines: feature in-sensitive (A0) vs feature sensitive (A1, A2, A3) Results: A0 vs A1 vs A2 vs A3 (in theory and practice) Related Work Conclusion

27 [ 27 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction Traditional Software Development: One program = One product Product Line: A ”family” of products (of N ”similar” products): customize SPL: (Family of Programs)

28 [ 28 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Software Product Line SPL: Feature Model: (e.g.: ψ FM ≡ VIDEO  COLOR ) Family of Programs: COLOR VIDEO COLOR  VIDEO VIDEO Ø { Video } { Color, Video } Configurations: Ø, {Color}, {Video}, {Color,Video} VALID { Color } customize 2F2F Set of Features: F = { COLOR, VIDEO } 2F2F

29 [ 29 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Software Product Line SPL: Family of s: COLOR VIDEO COLOR  VIDEO VIDEO Program Conditional compilation: #ifdef (  )... #endif Alternatively, via Aspects (as in AOSD) Logo logo;... logo.use(); #ifdef (VIDEO) logo = new Logo(); #endif Example (SPL fragment) Similarly for; e.g.: ■ uninitialized vars ■ unused variables ■... *** null-pointer exception! in configurations: {Ø, {COLOR}}  : f  F |  | 

30 [ 30 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Errors Logo logo; logo.use(); #ifdef (VIDEO) logo = new Logo(); #endif *** null-pointer exception! in configurations: {Ø, {COLOR}} Logo logo; print(logo); #ifdef (VIDEO) logo = new Logo(); #endif *** uninitialized variable! in configurations: {Ø, {COLOR}} Logo logo;... #ifdef (VIDEO) logo = new Logo(); #endif *** unused variable! in configurations: {Ø, {COLOR}}

31 [ 31 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL result 0100101 1110110 1010011 1110111 0100101 1110110 1010011 1110111 Analysis of SPLs The Compilation Process:...and for Software Product Lines: 0100101 1110110 1010011 1110111 result compile run ERROR! customize 0100101 1110110 1010011 1110111 result run ERROR! ANALYZE! Feature-sensitive data-flow analysis ! run compile ANALYZE! ERROR! 2F2F

32 [ 32 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction Software Product Lines Dataflow Analysis (recap) Dataflow Analyses for Software Product Lines: feature in-sensitive (A0) vs feature sensitive (A1, A2, A3) Results: A0 vs A1 vs A2 vs A3 (in theory and practice) Related Work Conclusion

33 [ 33 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Dataflow Analysis Dataflow Analysis: 1) Control-flow graph 2) Lattice (finite height) 3) Transfer functions (monotone) L Example: "sign-of-x analysis"

34 [ 34 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Analyzing a Program 1) Program 2) Build CFG 3) Make Equations 4) Solve equations: fixed-point computation (iteration) 5) SOLUTION (least fixed point): Annotated with program points

35 Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Related Work:

36 [ 36 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Introduction Software Product Lines Dataflow Analysis (recap) Dataflow Analyses for Software Product Lines: feature in-sensitive (A0) vs feature sensitive (A1, A2, A3) Results: A0 vs A1 vs A2 vs A3 (in theory and practice) Related Work Conclusion

37 [ 37 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Related Work (DFA) Path-sensitive DFA: Idea of “conditionally executed statements” Compute different analysis info along different paths (~ A1, A2, A3) to improve precision or to optimize “hot paths” Predicated DFA: Guard lattice values by propositional logic predicates (~ A3), yielding “optimistic dataflow values” that are kept distinct during analysis (~ A2 and A3) “Constant Propagation with Conditional Branches” ( Wegman and Zadeck ) TOPLAS 1991 “Predicated Array Data-Flow Analysis for Run-time Parallelization” ( Moon, Hall, and Murphy ) ICS 1998 Our work: Automatically lift any DFA to SPLs (with ψ FM ) ⇒ feature-sensitive analysis for analyzing entire program family

38 [ 38 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Related Work (Lifting for SPLs) Model Checking: Type Checking: Parsing: Testing: Model Checking Lots of Systems: Efficient Verification of Temporal Properties in Software Product Lines” ( Classen, Heymans, Schobbens, Legay, and Raskin ) ICSE 2010 Model checks all SPLs at the same time (3.5x faster) than one by one! (similar goal, diff techniques) Type checking ↔ DFA (similar goal, diff techniques) Our: auto lift any DFA (uninit vars, null pointers,...) “Type Safety for Feature-Oriented Product Lines” ( Apel, Kastner, Grösslinger, and Lengauer ) ASE 2010 “Type-Checking Software Product Lines - A Formal Approach” ( Kastner and Apel ) ASE 2008 “Variability-Aware Parsing in the Presence of Lexical Macros & C.C.” ( Kastner, Giarrusso, Rendel, Erdweg, Ostermann, and Berger ) OOPSLA 2011 “Reducing Combinatorics in Testing Product Lines” ( Hwan, Kim, Batory, and Khurshid ) AOSD 2011 Select relevant feature combinations for a given test case Uses (hardwired) DFA (w/o FM) to compute reachability (similar techniques, diff goal): Split and merging parsing (~A3) and also uses instrumentation

39 [ 39 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Emerging Interfaces

40 [ 40 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Emerging Interfaces "A Tool for Improving Maintainability of Preprocessor-based Product Lines" ( Márcio Ribeiro, Társis Tolêdo, Paulo Borba, Claus Brabrand ) *** Best Tool Award *** CBSoft 2011:

41 Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL BONUS SLIDES

42 [ 42 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Specification: A0, A1, A2, A3 A0 A1 A2 A3

43 [ 43 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Analysis Time (excl. compile) In theory: In practice: T IME ( A 3 ) : Depends on degree of sharing in SPL ! ( caching !) (Reaching Definitions) A2 faster than A1 A3 faster than A2 ( sharing !)

44 [ 44 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Memory Usage In theory: In practice: (Reaching Definitions) S PACE ( A 3 ) : Depends on degree of sharing in SPL !

45 [ 45 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Analysis Time (excl. compile) In practice: (Reaching Definitions) Nx1 ≠ 1xN ?! Caching! A2 faster than A1

46 [ 46 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Caching (A1 vs A2) Cache misses (A1 vs A2): Cache enabled: This is the "normal condition" (for reference) Cache disabled*: As hypothesized, this indeed affects A1 more than A2 i.e., A2 has better cache properties than A1 *) we flush the L2 cache, by traversing an 8MB “bogus array” to invalidate cache!

47 [ 47 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL IFDEF normalization Refactor "undisciplined" (lexical) ifdefs into "disciplined" (syntactic) ifdefs: Normalize "ifdef"s (by transformation):

48 [ 48 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Lexical #ifdef  Syntactic ifdef Simple transformation: We do not handle non-syntactic '#ifdef's: Fair assumption (also in CIDE) Nested ifdef's also give rise to a conj. of formulas

49 [ 49 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL BDD (Binary Decision Diagram) Compact and efficient representation for boolean functions (aka., set of set of names) FAST: negation, conjunction, disjunction, equality !  =  F(A,B,C) =F(A,B,C) = A  (B  C)   A C minimized BDD B    A BB CCCC BDD

50 [ 50 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Formula ~ Set of Configurations Definitions (given F, set of feature names): f  F feature name c  2 F configuration ( set of feature names ) c  F X  2 2 set of config's ( set of set of feature names ) X  2 F Example ifdef s: F [[ B  A ]] [[ A  (B  C) ]] F = {A,B} F = {A,B,C} = { {A}, {B}, {A,B} } = { {A,B}, {A,C}, {A,B,C} }

51 [ 51 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Feature Model (Example) Feature Model: Feature set: Formula: Set of configurations:  FM  Car  Engine  (1.0  1.4)  Air  1.4 { { Car, Engine, 1.0 }, { Car, Engine, 1.4 }, { Car, Engine, 1.4, Air } } F = {Car, Engine, 1.0, 1.4, Air} Note: | [[  FM ]] | = 3 < 32 = |2 F | [[ ]] = Engine 1.0 Air 1.4

52 [ 52 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Conditional Compilation The ' ifdef ' construction: Syntactic variant of lexical #ifdef Propositional Logic: where f  F (finite set of feature names) Example: STM : 'ifdef' '('  ')' STM  : f  F |  |  status.print("you die"); ifdef (DeluxeVersion && ColorDisplay) { player.redraw(Color.red); Audio.play("crash.wav"); } lives = lives - 1; A ifdef (A) {... }

53 [ 53 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL CASE 1: "COPY" A4: Lazy Splitting (using BDDs) CASE 2: "APPLY"CASE 3: "SPLIT"  : S [  = l,... ] l ' = f S ( l )      : S [  = l,... ] [  = l ',... ] l ' = f S ( l )  : S [  = l,... ] [  = l,  = l',...] l ' = f S ( l )   = Ø  =  Ø    

54 [ 54 ] Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL A1, A2, A3, and A4 A1 A2 A3 A4


Download ppt "Dataflow Analysis for Software Product Lines Feb, 2013 DAGSTUHL Intraprocedural Dataflow Analysis for Software Product Lines Claus Brabrand IT University."

Similar presentations


Ads by Google