wie senkt man die fehleranfälligkeit? workshop softwaretests - 24. april 2008 prof. dr.-ing. daniel...
Post on 05-Apr-2015
107 Views
Preview:
TRANSCRIPT
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?
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
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
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
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]
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
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
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
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.
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
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
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
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
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
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) =
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) =
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:
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.
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
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))
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
Hä
ufig
keit
Empfehlung [CL07]
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)
Hä
ufi
gk
eit
Empfehlung [CL07]
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
Hä
ufig
keit
Empfehlung [CL07]
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
Hä
ufig
keit
Empfehlung [CL07]
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
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
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
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
top related