Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel...

28
1 Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg Workshop Mehr Qualität und schnellere Marktreife durch effiziente Softwaretests Technologiepark Offenburg 24. April 2008 Wie senkt man die Fehleranfälligkeit?

Transcript of Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel...

Page 1: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

1

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

Workshop

Mehr Qualität und schnellere Marktreife durch effiziente

Softwaretests

Technologiepark Offenburg24. April 2008

Wie senkt man die Fehleranfälligkeit?

Page 2: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

2

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

Inhalt

1. Motivation

2. Software-Metriken2.1 Code-Metriken2.2 Anwendung von Code-Metriken

3. Code-Metriken im Detail3.1 Lines of Code3.2 Halstead3.3 McCabe3.4 Maintainability Index

4. Beispiel Linux Kernel 2.6.16.60

Page 3: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

3

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

1. Motivation

KlassischeProdukte

QualitätssicherungBewertung

Kennzahlen

Software

va_list args;char module_name[MODULE_NAME_LEN];unsigned int max_modprobes;int ret;char *argv[] = { modprobe_path, "-q", "--",

module_name, NULL };static char *envp[] = { "HOME=/",

"TERM=linux","PATH=/sbin:/usr/sbin:/bin:/usr/

bin",NULL };

static atomic_t kmod_concurrent = ATOMIC_INIT(0);#define MAX_KMOD_CONCURRENT 50

static int kmod_loop_msg;va_start(args, fmt);

QualitätssicherungBewertung

Software-Metriken

Vergleich

Page 4: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

4

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

1. Motivation

Komplexe Softwaresysteme

• Höhere Fehleranfälligkeit

• Eingeschränkte Testbarkeit

• Geringere Wartbarkeit Kosten

Produktqualität

1993 Windows NT 3.1 4-5

1994 Windows NT 3.5 7-8

1996 Windows NT 4.0 11-12

2000 Windows 2000 > 29

2001 Windows XP 40

2005 Windows Vista Beta 2 50

Beispiel (aus www.wikipedia.de) Millionen LOC

Komplexität der Software

t

Page 5: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

5

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

2. Software-Metriken

Klassifikation

Software-Metriken

Produkt-Metriken(Produktqualität)• Metriken zu Anforderungen• Design-Metriken• Code-Metriken• Test-Metriken (C0, C1, …)…

Prozess-Metriken(Prozessqualität)• Softwareentwicklungsprozesse• Projektmetriken• Reifegradmodelle (CMMI, …)…

Inhalt dieses Vortrages: Code-Metriken

Siehe auch: [FP07], [LZ06], [Lig02]

Page 6: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

6

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

2.1 Code-Metriken

Übersicht wichtiger Code-Metriken

Lines of Code LOC

McCabe v(G) Halstead V, N, n, …

MaintainabilityIndex MI

Diese Code-Metriken sind auch auf objektorientierte Sprachen anwendbar

Page 7: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

7

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

2.1 Code-Metriken

Verwendung und empirische Studien

Jede Code-Metrik bewertet jeweils einen Teilaspekt der Software

Code-Metriken dienen als Basis, um Aussagen bezüglich Fehleranfälligkeit, Testbarkeit und Wartbarkeit zu machen.

Code-Metriken liefern Hinweisequantitativ und reproduzierbar

Studie aus [Wa89]: Korrelation von 0.8 zwischen McCabe Code-Metrik und Fehlerdichte (HP, Waltham Division)Weitere Studien zur McCabe Code-Metrik sind in [WC96] zu finden.

Neuere Studien: [FO00] und [CS00]

Eine Vergleichbarkeit der Studien ist nur eingeschränkt möglich

Page 8: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

8

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

2.1 Code-Metriken

Generierung

• Sourcen werden nur geparst• Keine Testumgebung notwendig• Tests werden nicht ausgeführt

Bsp. Linux-Kernel

16383 Funktionen (C)Dauer 4 Sekunden

ParserParser*.c*.cpp*.h

Page 9: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

9

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

2.2 Anwendung von Code-Metriken

Szenarien

CodeCode

SW-Entwicklung

SW-Entwicklung

SW-Entwicklung

SW-Entwicklung

Ausführbares ProgrammAusführbares Programm

BuildBuild

Inhouse OutsourcingOffshoring

RefactoringWartungNeuimplementierungvon Funktionen

„Eingangs-Kontrolle“Code-Metrikenmüssen innerhalbvorgegebenerGrenzen liegen

StatischeTestverfahrenKritische Funktionenkönnen einer Inspektion (Review)unterzogenwerden.

DynamischeTestverfahrenIntensiveres Testenkritischer Funktionen(Testprinzip: Test besondererWerte)

DokumentationAudits usw.

Page 10: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

10

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3. Code-Metriken im Detail

3.1 Lines of Code LOC

3.3 McCabe v(G) 3.2 Halstead V, N, n, …

3.4 MaintainabilityIndex MI

Page 11: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

11

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.1 Lines of Code

Prinzip

Die Anzahl der Programmzeilen (Lines of Code LOC) pro Funktion oder Modul liefert einen Hinweis auf deren Komplexität

LOC Code-Metriken

LOCphy: Gesamtanzahl der Zeilen (physical lines)LOCpro: Anzahl der Programmzeilen (program lines)LOCcom: Anzahl der Zeilen mit Kommentar (commented lines)LOCbl: Anzahl der Leerzeilen (blank lines)

Empfehlungen aus [CL07]:• LOCphy pro Funktion <40• LOCphy pro Datei <400• LOCcom/LOCphy sollte zwischen 0,3 und 0,75 liegen

Page 12: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

12

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.2 Halstead

Prinzip

Halstead-Metriken [Hal77] berücksichtigen verschiedene Eigenschaften der Software. Nach [Lig02] wurden diese Code-Metriken mit Erfolg empirisch validiert.

N1: Gesamtanzahl der verwendeten Operatoren

n1: Anzahl der unterschiedlichen Operatoren

N2: Gesamtanzahl der verwendeten Operanden

n2: Anzahl der unterschiedlichen Operanden

void test (int a, int b){ if (a%b == 1) printf("case2"); else printf("case3");}

Operatoren% 1() 3, 1; 2== 1else 1if 1{ } 1 N1 = 11

n1 = 8

Operanden„case2“ 1„case3“ 11 1a 2b 2int 2printf 2test 1void 1

N2 = 13n2 = 9

Page 13: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

13

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.2 Halstead

Halstead Code-Metriken

Empfehlungen aus [CL07]:• V einer Funktion sollte im Bereich zwischen 20 und 1000 liegen• V einer Datei sollte im Bereich zwischen 100 und 8000 liegen

DVE

Größe des Vokabulars:

Länge der Implementierung:

Programmgröße:

Schwierigkeitsgrad:

Programmniveau

Aufwand:

Implementierungszeit:

Anzahl ausgelieferter Fehler:

21 NNN 21 nnn

nNV 2log

)/()2/( 221 nNnD 1DL

18/ET

3000/3/2EB

Page 14: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

14

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.3 McCabe

Prinzip

Die Komplexität nach McCabe v(G) [McC76] beruht auf dem Kontrollflussgrafen G.

nS

nE

n1

n2

n3

n4

n5

n6

Knoten (nodes)

Kanten (edges)

pneGv 2)(

e: Anzahl der Kantenn: Anzahl der Knotenp: Anzahl der Komponenten

Wird v(G) einer Funktion bestimmt, so ist p = 1 zu setzen.

Wird v(G) eines Programms / Moduls bestimmt, so ist p gleich der Anzahl der Funktionen.

KontrollflussgrafG einer Funktion

Page 15: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

15

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.3 McCabe

Beispiele

Vier Basis-Kontrollstrukturen

ia = ib + 1;*pi = ia;

if (a == 10) b = 5;else b = 10;

while (a < 10){ a = a + 2;}

do{ a = a + 2;} while (a < 10);

Sequenz Abfrage Schleife 1Abweisende Schleife

Schleife 2Nichtabweisende Schleife

v(G) = v(G) = v(G) = v(G) =

Page 16: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

16

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.3 McCabe

Beispiele

nS

nE

n1

n2

n3

n4

n5

n6

Bestimmung von v(G):

1. Gleichung

2. Regionenmethode Graf ist kreuzungsfrei. v(G) entspricht der Anzahl

eingeschlossener Regionen + 1

pneGv 2)(

v(G) =

v(G) =

Page 17: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

17

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.3 McCabe

Beispiele

if (a == 10 && c < 10) { b = 5; }

if (a == 10) { if (c < 10) { b = 5; } }

Zeichnen Sie die beiden Kontrollflussgrafen und bestimmen Sie jeweils v(G)!

Erkenntnis bezüglich zusammengesetzter Kontrollstrukturen:

Page 18: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

18

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.4 McCabe

Interpretation von v(G)

Empfehlungenv(G) einer Funktion sollte begrenzt sein• v(G) <= 15 [CL07]• v(G) <= 10 [McC76]

Ursache für hohes v(G) obwohl die betrachtete Funktion übersichtlich ist:

• Mehrere catch-Blöcke beim Exception-Handling (jedes catch erhöht v(G) um 1)• switch–Kontrollstruktur mit vielen case-Blöcken

Was tut man, wenn v(G) die vorgegebenen Grenzen übersteigt?

Funktion ist in mehrere kleinerer Funktionen aufzuteilen!Diese sind danach wartbarer, testbarer und fehlerunanfälliger.

Page 19: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

19

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

3.4 Maintainability Index

Prinzip

Der Maintainability Index MI setzt sich aus anderen Code-Metriken zusammen.

)4.2sin(50LOCphy

LOCcomMIcw

)ln(2.16)(23.0)ln(2.5171 LOCphyGvVMIwoc

MIcwMIwocMI

Anwendbar auf Funktionen, Module und Programme!

Empfehlungen aus [CL07]: • MI >= 85: Gute Wartbarkeit• MI im Bereich zwischen 65 und 85: Mäßige Wartbarkeit

Page 20: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

20

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel Linux

Grundlage der Untersuchungen

Linux Kernel 2.6.16.60Unterverzeichnis /kernel

16383 Funktionen (C)Werkzeug CMT++

Dargestellte Code-Metriken als Verteilung• LOCpro (Program Lines of Code)• McCabe v(G)• Halstead-Metrik V• Maintainability-Index MI

Abhängigkeiten• LOCpro = f (v(G))• LOCpro = f (V)• V = f(v(G))

Page 21: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

21

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel LinuxLinux Kernel 2.6.16.60 - Verteilung LOCpro

0

500

1000

1500

2000

2500

3000

3500

4000

4500

5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100>10

0

LOCpro

ufig

keit

Empfehlung [CL07]

Page 22: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

22

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel LinuxLinux Kernel 2.6.16.60 - Verteilung v(G)

0

1000

2000

3000

4000

5000

6000

7000

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 >20

v(G)

ufi

gk

eit

Empfehlung [CL07]

Page 23: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

23

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel LinuxLinux Kernel 2.6.16.60 - Verteilung V

0

500

1000

1500

2000

2500

3000

3500

40001

00

30

0

50

0

70

0

90

0

11

00

13

00

15

00

17

00

19

00

>2

00

0

V

ufig

keit

Empfehlung [CL07]

Page 24: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

24

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel LinuxLinux Kernel 2.6.16.60 - Verteilung MI

0

500

1000

1500

2000

2500

3000

3500

10 20 30 40 50 60 70 80 90 100

110

120

130

140

150

160

170

180

190

200>20

0

MI

ufig

keit

Empfehlung [CL07]

Page 25: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

25

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel LinuxLinux Kernel 2.6.16.60

0

100

200

300

400

500

600

0 20 40 60 80 100 120

v(G)

LO

Cp

ro

Page 26: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

26

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel LinuxLinux Kernel 2.6.16.60

0

100

200

300

400

500

600

0 5000 10000 15000 20000 25000 30000

V

LO

Cp

ro

Page 27: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

27

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

4. Beispiel LinuxLinux Kernel 2.6.16.60

0

5000

10000

15000

20000

25000

30000

0 20 40 60 80 100 120

v(G)

V

Page 28: Wie senkt man die Fehleranfälligkeit? Workshop Softwaretests - 24. April 2008 Prof. Dr.-Ing. Daniel Fischer Hochschule Offenburg 1 Workshop Mehr Qualität.

28

Wie senkt man die Fehleranfälligkeit?Workshop Softwaretests - 24. April 2008

Prof. Dr.-Ing. Daniel FischerHochschule Offenburg

Zusammenfassung

• Quantitative und reproduzierbare Metriken (Kennzahlen) sind notwendig

• Anwendungsszenarien und empirische Studien

• Code-Metriken im Detail

- Lines of Code

- Halstead

- McCabe

- Maintainability Index

• Code-Metriken angewendet auf Linux Kernel 2.6.16.60

- Die meisten Funktionen erfüllen die Vorgaben

- Korrelation zwischen LOCpro und v(G) erkennbar