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

Transcript
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