17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT...

40
17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER CARNEGIE MELLON UNIVERSITY INSTITUTE FOR SOFTWARE RESEARCH 1

Transcript of 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT...

Page 1: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING

CHRISTIAN KAESTNER

CARNEGIE MELLON UNIVERSITY

INSTITUTE FOR SOFTWARE RESEARCH

1

Page 2: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

READING ASSIGNMENT NOV 16

Textbook Chapter 9

Nhlabatsi, Armstrong, Robin Laney, and Bashar Nuseibeh. "Feature interaction: the security threat from within software systems." Progress in Informatics 5 (2008): 75-89.

Page 3: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

LEARNING GOALS

Understand the challenge of feature interactions

Understand the challenges from requirements level down to implementations

Implementation vs specification and emergent behavior

Apply mitigation strategies

Page 4: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

Printer Firmware

Checking Products

2000 Features 100 Printers 30 New Printers per Year

Page 5: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

Linux Kernel

Checking Products

10000 Features ? Products

Page 6: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

Linux Kernel

Checking Product Line

Implementation with 10000 Features

#ifdef, Frameworks, FOP, AOP, …

Page 7: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

DEAD IFDEF CODE DETECTION: UNDERTAKER

Page 8: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

true

PRESENCE CONDITIONS

line 1

#ifdef A

line 2

#ifndef B

line 3

#endif

line 4

#elif defined(X)

line 5

#else

line 6

#endif

A

A ∧ ¬ B

A

¬ A ∧ X

¬ A ∧ ¬ X

Page 9: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

true

DEAD CODE

line 1

#ifdef A

line 2

#ifndef A

line 3

#endif

line 4

#elif defined(X)

line 5

#else

line 6

#endif

A

A ∧ ¬ A

A

¬ A ∧ X

¬ A ∧ ¬ X

Cannot be selected

Analysis:

SAT(PC(Block i))

Include feature model in

reasoning!

Page 10: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

true

DEAD CODE

line 1

#ifdef A

line 2

#ifdef B

line 3

#endif

line 4

#elif defined(X)

line 5

#else

line 6

#endif

A

A ∧ B

A

¬A ∧ X

not A ^ not X

Analysis:

SAT(FM ∧ PC(Block i))

(A v B) ∧ ¬(A ∧ B)

Analyze feature model and

implementation

Cannot be selected

Page 11: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

OTHER QUESTIONS

Which files are never compiled?

Which feature modules cannot be included?

Which plugins/packages always have conflicts?

Which features never influence the source code?

Which code fragments seem optional but are not?

Page 12: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

FAMILY-BASED ANALYSIS

Page 13: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

TYPE CHECKING

Type errors: referenced variable does not exist, …

#include <stdio.h>

char *msg = "Hello World";

int main() {

printf(msg);

}

Reference

Page 14: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

#include <stdio.h>

#ifdef WORLD

char *msg = "Hello World";

#endif

#ifdef BYE

char *msg = "Bye bye!";

#endif

int main() {

printf(msg);

}

VARIABILITY-AWARE TYPE CHECKING

Page 15: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

#include <stdio.h>

#ifdef WORLD

char *msg = "Hello World";

#endif

#ifdef BYE

char *msg = "Bye bye!";

#endif

int main() {

printf(msg);

}

VARIABILITY-AWARE TYPE CHECKING

Conflict?

Reference?

Page 16: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

#include <stdio.h>

#ifdef WORLD

char *msg = "Hello World";

#endif

#ifdef BYE

char *msg = "Bye bye!";

#endif

int main() {

printf(msg);

}

VARIABILITY-AWARE TYPE CHECKING

Conflict?

Reference?

true

true

WORLD

BYE

Presence conditions:

Page 17: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

#include <stdio.h>

#ifdef WORLD

char *msg = "Hello World";

#endif

#ifdef BYE

char *msg = "Bye bye!";

#endif

int main() {

printf(msg);

}

VARIABILITY-AWARE TYPE CHECKING

Conflict?

Reference?

true

true

WORLD

BYE

¬ (WORLD ˄ BYE)

true -> (WORLD v BYE)

true -> true

Page 18: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

#include <stdio.h>

#ifdef WORLD

char *msg = "Hello World";

#endif

#ifdef BYE

char *msg = "Bye bye!";

#endif

int main() {

printf(msg);

}

REACHABILITY: PC(SOURCE) -> PC(TARGET) CONFLICTS: ¬(PC(DEF1) ˄ PC(DEF2))

Conflict?

Reference?

true

true

WORLD

BYE

¬ (WORLD ˄ BYE)

true -> (WORLD v BYE)

true -> true

Page 19: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

#include <stdio.h>

#ifdef WORLD

char *msg = "Hello World";

#endif

#ifdef BYE

char *msg = "Bye bye!";

#endif

int main() {

printf(msg);

}

INCLUDING THE FEATURE MODEL

Conflict?

Reference?

true

true

WORLD

BYE

FM -> ¬ (WORLD ˄ BYE)

FM -> (true -> (WORLD v BYE))

FM -> (true -> true)

P

WORL

D BYE

Page 20: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

20

WORLD BYE

BYE WORLD

AST with Variability Information

Extended Reference lookup mechanism

Page 21: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

TYPE SYSTEM IN CIDE http://fosd.net/cide

Page 22: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

TYPE SYSTEM IN CIDE

public class Test {

private static String msg_hi = "Hello world!”;

private static String msg_bye = "Bye bye!";

public static void main(String[] args) {

System.out.println(msg_hi);

System.out.println(msg_bye);

}

}

Similar implementations available for FOP, AOP

http://www.fosd.de/fuji

Page 23: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER
Page 24: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

Glue-code module

Page 25: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

VARIABILITY ENCODING

Page 26: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

Variability-Aware

Analysis

Product Configuration

Conventional

Analysis

Complete Analysis

Page 27: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

AST with Variability Information

int a = 1;

int b = 0;

#ifdef A

int c = a;

#else

char c = a;

#endif

if (c) {

c += a;

#ifdef B

c /= b;

#endif

}

...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

def getType(e: V[Expr]): V[Type]

c: int a =

1;

int b =

0;

VA

int c = a;

char c =

a;

if (c)

c += a;

VB ε

c /= b;

VA

int

char

Page 28: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

6

8

9

14

11

B

char c = a;

c // if (c)

c += a;

c /= b;

...

CFG with Variability Information

¬B

4 int c = a;

A ¬A

2

1

int b = 0;

int a = 1;

def succ(s: Stmt): List[V[Stmt]]

int a = 1;

int b = 0;

#ifdef A

int c = a;

#else

char c = a;

#endif

if (c) {

c += a;

#ifdef B

c /= b;

#endif

}

...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

B

A ¬A

VA

4

6

Page 29: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

6

8

9

14

11

B

char c = a;

c // if (c)

c += a;

c /= b;

...

CFG with Variability Information

¬B

4 int c = a;

A ¬A

2

1

int b = 0;

int a = 1;

def live(s: Stmt): List[V[Var]]

int a = 1;

int b = 0;

#ifdef A

int c = a;

#else

char c = a;

#endif

if (c) {

c += a;

#ifdef B

c /= b;

#endif

}

...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

B

A ¬A

VB

a

b

ε

Page 30: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

ARG with Variability Information

def forw(s: Stmt, p: State): List[V[State]]

int a = 1;

int b = 0;

#ifdef A

int c = a;

#else

char c = a;

#endif

if (c) {

c += a;

#ifdef B

c /= b;

#endif

}

...

1

2

3

4

5

6

7

8

9

10

11

12

13

14

a=1

b=0

a=1

b=0

c=1

a=1

b=0

c=1

a=1

b=0

c=1

a=1

b=0

c=1

a=1

b=0

c=1

¬A

¬B B

A

Division by zero

in Line 11

¬B(¬AA)

Page 31: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

MODULAR ANALYSIS (FEATURE-BASED)

Page 32: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

interface Base;

export class Stack {

void push(int v);

}

interface Undo;

import class Stack {

void push(int v);

void top();

}

export class Stack {

void undo();

}

Page 33: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER
Page 34: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

DISCUSSION

Page 35: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

PRINCIPLES

Preserve sharing

Late splitting, early joining

Consider variability during analysis

Page 36: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

ANALYSES

Product-based

Family-based

Feature-based

Combinations thereof

Thüm, T., Apel, S., Kästner, C., Schaefer, I., & Saake, G. (2014). A

classification and survey of analysis strategies for software product

lines. ACM Computing Surveys (CSUR), 47(1), 6.

Page 37: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

LOAD-TIME VARIABILITY

Page 38: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

LOAD-TIME OPTIONS

Read from configuration file/command-line options/…

Assumptions:

• Constant at program start, does not change after

• Used differently from other variables (assigned, used in if statements; not part of computations)

(Tool: LoTrack based on taint analysis)

Page 39: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

class ProxyService {

static boolean NATIVE_PROXY_SUPPORTED

= Build.VERSION.SDK_INT >= 12;

public void onSharedPreferenceChanged() {

boolean a = false;

if (!NATIVE_PROXY_SUPPORTED) {

if (Context.getSystemService("bluetooth")) {

a = true;

}}

if (a) {

}

39

Data-flow interactions? S

DK

>=

12

SD

K>

=12

BLU

ET.

BLU

ET.

Page 40: 17-708 Software Product Lines: Concepts and ...ckaestne/17708/18_analysis.pdf17-708 SOFTWARE PRODUCT LINES: CONCEPTS AND IMPLEMENTATION QUALITY ASSURANCE: SAMPLING CHRISTIAN KAESTNER

FURTHER READING

Krzysztof Czarnecki, Krzysztof Pietroszek: Verifying feature-based model templates against well-formedness OCL constraints. GPCE 2006: 211-220 – origin of whole-product line analysis

Christian Kästner, Sven Apel, Thomas Thüm, and Gunter Saake. 2012. Type checking annotation-based product lines. ACM Trans. Softw. Eng. Methodol. 21, 3, Article 14 (July 2012), 39 pages.

-- application to conditional compilation in Java code

TypeChef papers – application to ifdefs in C code, scaling to Linux

Thüm, T., Apel, S., Kästner, C., Schaefer, I., & Saake, G. (2014). A classification and survey of analysis strategies for software product lines. ACM Computing Surveys (CSUR), 47(1), 6.