Geleitwort | 18 |
Vorwort | 22 |
Danksagung | 24 |
Die Autoren | 26 |
Teil I: Einstieg und Grundlagen | 30 |
1 Einleitung | 32 |
1.1 Worum geht es? | 32 |
1.2 Integrationstest in der heutigen Praxis | 34 |
1.3 Eine kleine Geschichte | 36 |
1.4 Integrationstest und Software-Qualität | 38 |
1.5 Für wen ist dieses Buch geschrieben? | 38 |
2 Einführendes Fallbeispiel | 42 |
2.1 Das alte Auftragsbearbeitungssystem | 44 |
2.2 Das neue Auftragsbearbeitungssystem | 46 |
2.3 Integrationstest der Auftragsbearbeitung | 50 |
2.3.1 Klassenintegrationstest | 50 |
2.3.2 Komponentenintegrationstest | 51 |
2.3.3 Systemintegrationstest | 58 |
2.4 Resümee | 60 |
3 Grundlegendes zum Softwaretest | 62 |
3.1 Was ist Testen? | 62 |
3.2 Black-Box-Verfahren | 65 |
3.2.1 Äquivalenzklassentest | 65 |
3.2.2 Grenzwertanalyse | 65 |
3.3 White-Box-Verfahren | 66 |
3.3.1 Kontrollflussbasierter Test | 66 |
3.3.2 Datenflussbasierter Test | 66 |
3.3.3 Bedingungstest | 67 |
3.4 Wie gut ist der Test? | 67 |
3.4.1 Messung der Testüberdeckung | 68 |
3.4.2 Mutationstests | 69 |
3.5 Teststufen | 69 |
3.5.1 Modul- bzw. Komponententest | 70 |
3.5.2 Integrationstest | 70 |
3.5.3 Systemtest | 70 |
3.5.4 Abnahmetest | 71 |
3.6 Testausführung und Testumgebung | 71 |
3.7 Testprozess | 72 |
4 Grundlagen des Integrationstests | 74 |
4.1 Was ist Integration? | 74 |
4.2 Bausteine der Integration | 75 |
4.3 Abhängigkeiten | 78 |
4.3.1 Elementare Bausteine | 78 |
4.3.2 Zusammengesetzte Bausteine | 79 |
4.3.3 Semantische und syntaktische Abhängigkeiten | 79 |
4.4 Ziele, Fokus und pragmatische Definition des Integrationstests | 80 |
4.5 Stufen der Integration | 82 |
4.6 Vorgehen im Integrationstest | 83 |
5 Modellierung im Integrationstest | 86 |
5.1 Strukturmodellierung | 86 |
5.1.1 Objekte | 87 |
5.1.2 Klassen | 88 |
5.1.3 Pakete und Komponenten | 92 |
5.1.4 Physikalische Struktur und Deployment | 94 |
5.2 Verhaltensmodellierung | 94 |
5.2.1 Anwendungsfälle | 95 |
5.2.2 Aktivitäten | 96 |
5.2.3 Interaktionen | 97 |
5.2.4 Zustände und reaktives Verhalten | 99 |
5.3 Graphentheorie | 102 |
5.3.1 Grundlegende Begriffe | 103 |
5.3.2 Abhängigkeitsgraphen | 104 |
5.3.3 Pfade und Graph-Matrizen | 104 |
5.3.4 Gerichtete azyklische Graphen | 106 |
5.3.5 Kontrollfluss- und Datenflussgraphen | 107 |
6 Software-Abhängigkeiten | 110 |
6.1 Syntaktische Abhängigkeiten | 110 |
6.1.1 Sichtbarkeiten und Schnittstellen | 111 |
6.1.2 Bausteine als Typen | 111 |
6.2 Interaktionsabhängigkeiten | 112 |
6.2.1 Zugriffe auf Variablen | 112 |
6.2.2 Operationsaufrufe | 112 |
6.2.3 Nutzung von Operationsparametern | 113 |
6.2.4 Verträge zwischen Bausteinen | 114 |
6.2.5 Entfernte Prozeduraufrufe | 116 |
6.2.6 Nachrichtenbasierte Kommunikation | 118 |
6.2.7 Ereignisbasierte Kommunikation | 118 |
6.3 Vererbungsabhängigkeiten | 119 |
6.3.1 Generalisierung, Substituierbarkeit und Polymorphismus | 119 |
6.3.2 Generalisierung und Schnittstellen | 119 |
6.3.3 Horizontale und vertikale Abhängigkeiten | 120 |
6.4 Indirekte Abhängigkeiten | 120 |
6.4.1 Datenorientierte Abhängigkeiten | 121 |
6.4.2 Dienstorientierte Abhängigkeiten | 122 |
6.4.3 Natürlichsprachliche Kommunikation und REST-Abhängigkeiten | 123 |
7 Integrationsfehlerarten | 126 |
7.1 Fehler und Abhängigkeiten | 127 |
7.1.1 Interaktionsfehler | 127 |
7.1.2 Vererbungsfehler | 130 |
7.1.3 Fehler bei indirekten Abhängigkeiten | 131 |
7.2 Übersicht der Integrationsfehler | 132 |
7.3 Fehler in der Integration innerhalb einer Anwendung | 133 |
7.3.1 Member-Integrationsfehler | 133 |
7.3.2 Modulintegrationsfehler | 133 |
7.3.3 Klassenintegrationsfehler | 135 |
7.3.4 Komponenten- und Teilsystemintegrationsfehler | 136 |
7.4 Fehler in der Integration mehrerer Anwendungen | 138 |
7.4.1 Anwendungsintegration | 138 |
7.4.2 Fehler in der Unternehmensintegration | 140 |
7.5 Fehlerursachen | 141 |
7.51 Unterschiedliche Schnittstellenbeschreibungen | 142 |
7.5.2 Unterschiedliche Schnittstellenversionen | 142 |
7.5.3 Unterschiedliche Wertebereiche | 143 |
7.5.4 Unterschiedliche Dateninterpretation | 143 |
7.5.5 Fehlende Synchronisierung | 143 |
7.5.6 Zeitliche Abhängigkeiten | 143 |
7.6 Datenbankfehler | 144 |
7.7 Integrationsfehlerverteilung | 145 |
8 Fallstudien zum Integrationstest | 148 |
8.1 Wertpapierabwicklungssystem | 148 |
8.1.1 Aufteilung des Systems in Teilsysteme | 149 |
8.1.2 Integration der Teilsysteme | 150 |
8.1.3 Test der Batch-Prozesse | 151 |
8.1.4 End-to-End-Test | 151 |
8.1.5 Gesamtsystemtest | 151 |
8.1.6 Zusammenfassung | 152 |
8.2 Gebühreneinzugssystem | 152 |
8.2.1 Risikobasierter Testansatz | 154 |
8.2.2 Problem des Korrektheitsnachweis | 154 |
8.2.3 Selektiver Regressionstest | 155 |
8.2.4 Integrationstest versus Teilsystemtest | 156 |
8.2.5 Rückschlüsse | 156 |
8.3 Verteilte Web-Anwendungen | 157 |
8.3.1 Test der Teilsysteminteraktionen | 157 |
8.3.2 Zweistufentest – Schnittstellen und Interaktionen | 158 |
8.3.3 Erkenntnisse aus dem Integrationstest | 159 |
8.4 Gekapselte Web Services | 159 |
8.4.1 Test der Client-Prozesse | 160 |
8.4.2 Test der Web Services | 160 |
8.4.3 Test der Client-Prozesse mit den Web Services | 161 |
8.4.4 Abgrenzung zwischen Integrations- und Systemtest | 161 |
8.5 Integrationstest von Software-Messwerkzeugen | 162 |
8.6 Zusammenfassung der Fallstudien | 164 |
Teil II: Strategie, Prozess und Techniken | 166 |
9 Integrationsstufen | 168 |
9.1 Member-Integrationstest | 169 |
9.1.1 Zielsetzung | 169 |
9.1.2 Testbasis und Testobjekte | 169 |
9.1.3 Durchführung | 169 |
9.1.4 Überdeckungsmaße und Endekriterien | 170 |
9.1.5 Ergebnis | 171 |
9.1.6 Hinweise und Empfehlungen | 171 |
9.2 Klassen- bzw. Modulintegrationstest | 172 |
9.2.1 Zielsetzung | 172 |
9.2.2 Testbasis und Testobjekte | 172 |
9.2.3 Durchführung | 173 |
9.2.4 Überdeckungsmaße und Endekriterien | 174 |
9.2.5 Ergebnis | 174 |
9.2.6 Hinweise und Empfehlungen | 174 |
9.3 Komponenten- bzw. Teilsystemintegrationstest | 175 |
9.3.1 Zielsetzung | 175 |
9.3.2 Testbasis und Testobjekte | 176 |
9.3.3 Durchführung | 176 |
9.3.4 Überdeckungsmaße und Endekriterien | 177 |
9.3.5 Ergebnis | 177 |
9.3.6 Hinweise und Empfehlungen | 177 |
9.4 Systemintegrationstest | 178 |
9.4.1 Zielsetzung | 178 |
9.4.2 Testbasis und Testobjekte | 179 |
9.4.3 Durchführung | 180 |
9.4.4 Überdeckungsmaße und Endekriterien | 181 |
9.4.5 Ergebnis | 181 |
9.4.6 Hinweise und Empfehlungen | 181 |
9.5 Erweitertes V-Modell für Anwendungslandschaften: Das V-Modell++ | 182 |
9.5.1 Anmerkungen zum Systemintegrationstest | 183 |
9.5.2 Multisystemtest | 184 |
9.5.3 Multisystemabnahmetest | 184 |
10 Integrationsstrategien | 186 |
10.1 Integration der Bausteine einer Anwendung | 186 |
10.1.1 Grundlagen | 187 |
10.1.2 Schrittweise Integration mit Stubs und Treibern | 187 |
10.1.3 Abhängigkeitszyklen | 190 |
10.2 Strukturabhängige Strategien | 190 |
10.2.1 Strategien für hierarchische Bausteinstrukturen | 190 |
10.2.2 Top-Down-Strategie | 192 |
10.2.3 Bottom-Up-Strategie | 192 |
10.2.4 Sandwich-Strategie | 192 |
10.3 Strukturunabhängige Strategien | 193 |
10.3.1 Ad-hoc-Strategie | 193 |
10.3.2 Strategie der kritischen Bausteine | 194 |
10.3.3 Strategie der kritischen Abhängigkeiten | 194 |
10.3.4 Anwendungsfallbasierte Strategie | 195 |
10.3.5 Thread-basierte Integration | 196 |
10.4 Individuelle Strategien | 197 |
10.4.1 Strategie der Clusterbildung | 198 |
10.4.2 Heuristische Ansätze | 199 |
10.4.3 Graphenbasierte Ansätze mit Zyklenauflösung | 200 |
10.5 Objektorientierte Strategien | 201 |
10.5.1 Vererbungsbezogene Ansätze | 202 |
10.5.2 Vererbungs- und interaktionsbezogene Ansätze | 203 |
10.6 Einflussfaktoren für die Integrationsstrategie | 203 |
10.6.1 Faktoren des Projektumfelds | 204 |
10.6.2 Faktoren des Testumfeldes | 205 |
10.6.3 Faktoren der Architektur und des Entwurfs | 206 |
10.6.4 Allgemeine Faktoren | 207 |
10.6.5 Auswahl der Strategie | 208 |
10.7 Integration mehrerer Anwendungen | 208 |
10.7.1 Interaktionsbasierte Systemintegration | 209 |
10.7.2 Frontend-Integration | 210 |
10.7.3 Backend-Integration | 212 |
10.7.4 Dienstbasierte Integration | 214 |
11 Integrationstestprozess | 216 |
11.1 Der fundamentale Testprozess | 216 |
11.1.1 Rollen | 217 |
11.1.2 Testplanung und Steuerung | 218 |
11.1.3 Testanalyse und Testentwurf | 218 |
11.1.4 Testrealisierung und Testdurchführung | 219 |
11.1.5 Bewertung von Ausgangskriterien und Bericht | 220 |
11.1.6 Abschluss der Testaktivitäten | 221 |
11.2 Rollen im Integrationstestprozess | 221 |
11.2.1 Integrationstestmanager | 222 |
11.2.2 Integrationstestdesigner | 223 |
11.2.3 Integrationstester | 223 |
11.3 Aktivitäten im Integrationstestprozess | 224 |
11.3.1 Testplanung und Steuerung | 224 |
11.3.2 Testanalyse und Testentwurf | 225 |
11.3.3 Testrealisierung und Testdurchführung | 227 |
11.3.4 Auswertung, Bericht und Abschluss | 228 |
11.4 Integrationsteststufenspezifische Besonderheiten | 229 |
11.4.1 Member-Integrationstest | 229 |
11.4.2 Klassen- bzw. Modulintegrationstest | 230 |
11.4.3 Komponentenintegrationstest | 230 |
11.5 Einbindung in den Entwicklungsprozess | 231 |
11.5.1 Wasserfallmodell | 231 |
11.5.2 V-Modell | 231 |
11.5.3 Inkrementelle/Iterative Entwicklung | 233 |
11.5.4 Agile Vorgehensweisen | 234 |
11.6 Besonderheiten im Systemintegrationstest | 237 |
11.6.1 Planung und Steuerung | 237 |
11.6.2 Analyse und Entwurf | 239 |
11.6.3 Realisierung und Durchführung | 241 |
11.6.4 Durchführung und Protokollierung | 242 |
11.6.5 Bewertung und Bericht | 243 |
11.6.6 Abschluss | 244 |
11.6.7 Systemabhängigkeiten und Einführung von Release-Management | 245 |
12 Statische Analysen | 246 |
12.1 Schnittstellenarten | 246 |
12.1.1 Unstrukturierte Datenübergabe | 247 |
12.1.2 Gemeinsame globale Datenbereiche | 247 |
12.1.3 Operationsaufrufe und Parameter | 248 |
12.1.4 Dateien | 248 |
12.1.5 Datenbanken | 248 |
12.1.6 Nachrichten in verteilten Systemen | 249 |
12.1.7 Schnittstellendefinitionssprachen | 250 |
12.1.8 Extended Markup Language (XML) | 251 |
12.1.9 Web Service Definition Language (WSDL) | 252 |
12.1.10 Structured Query Language (SQL) | 253 |
12.2 Ansätze zur statischen Analyse der Schnittstellen | 254 |
12.2.1 Reviews der Schnittstellen | 255 |
12.2.2 Inspektionen der Schnittstellen | 256 |
12.2.3 Automatisierte Schnittstellenprüfung | 256 |
12.2.4 Automatisierter Abgleich der Schnittstellen | 257 |
12.3 Voraussetzungen für eine statische Schnittstellenanalyse | 258 |
12.3.1 Prüfbarkeit der Schnittstellendefinitionen | 258 |
12.3.2 Lesbarkeit der Schnittstellendefinitionen | 259 |
12.3.3 Verifizierbarkeit der Schnittstellen | 259 |
12.4 Werkzeuge für die statische Analyse von Schnittstellen | 261 |
12.4.1 Schnittstellenprüfer | 261 |
12.4.2 Schnittstellenvermesser | 261 |
12.4.3 Schnittstellengenerator | 263 |
12.4.4 Schnittstellenvalidator | 264 |
12.5 Erfahrung mit der statischen Analyse von Schnittstellen | 264 |
12.5.1 IDL-Analyse | 265 |
12.5.2 XML-Analyse | 266 |
12.5.3 WSDL-Analyse | 267 |
13 Funktions- und wertebezogene Testentwurfsverfahren | 270 |
13.1 Anwendungsfallbasiertes Testen | 270 |
13.1.1 Testziele | 271 |
13.1.2 Voraussetzungen | 271 |
13.1.3 Vorgehen | 271 |
13.1.4 Aufdeckbare Fehler | 273 |
13.1.5 Integrationsteststufen | 274 |
13.1.6 Bekannte Einschränkungen und Probleme | 274 |
13.2 End-to-End-Testen | 274 |
13.2.1 Testziele | 275 |
13.2.2 Voraussetzungen | 275 |
13.2.3 Vorgehen | 275 |
13.2.4 Aufdeckbare Fehler | 276 |
13.2.5 Integrationsteststufen | 276 |
13.2.6 Bekannte Einschränkungen und Probleme | 276 |
13.3 Parameterbasiertes Testen | 277 |
13.3.1 Testziele | 277 |
13.3.2 Voraussetzungen | 277 |
13.3.3 Vorgehen | 277 |
13.3.4 Aufdeckbare Fehler | 280 |
13.3.5 Integrationsteststufen | 281 |
13.3.6 Bekannte Einschränkungen und Probleme | 281 |
13.4 Zustandsbasiertes Testen | 281 |
13.4.1 Testziele | 281 |
13.4.2 Voraussetzungen | 283 |
13.4.3 Vorgehen | 283 |
13.4.4 Aufdeckbare Fehler und Überdeckungskriterien | 289 |
13.4.5 Anwendbare Teststufen | 290 |
13.4.6 Einschränkungen und Probleme | 290 |
13.5 Assoziationsbasiertes Testen | 291 |
13.5.1 Testziele | 291 |
13.5.2 Voraussetzungen | 292 |
13.5.3 Vorgehen | 292 |
13.5.4 Aufdeckbare Fehler und Überdeckungskriterien | 295 |
13.5.5 Anwendbare Teststufen | 296 |
13.5.6 Einschränkungen und Probleme | 296 |
13.6 Generalisierungsbasiertes und paarweises Testen | 296 |
13.6.1 Testziele | 297 |
13.6.2 Voraussetzungen | 297 |
13.6.3 Vorgehen | 297 |
13.6.4 Aufdeckbare Fehler und Überdeckungskriterien | 303 |
13.6.5 Anwendbare Teststufen | 303 |
13.6.6 Einschränkungen und Probleme | 303 |
14 Ablaufbezogene Testentwurfsverfahren | 306 |
14.1 Überblick | 306 |
14.2 Kontrollflussbasiertes Testen | 308 |
14.2.1 Testziele | 308 |
14.2.2 Voraussetzungen | 309 |
14.2.3 Vorgehen | 309 |
14.2.4 Aufdeckbare Fehler und Überdeckungskriterien | 315 |
14.2.5 Anwendbare Teststufen | 317 |
14.2.6 Einschränkungen und Probleme | 318 |
14.3 Datenflussbasiertes Testen | 319 |
14.3.1 Testziele | 319 |
14.3.2 Voraussetzungen | 319 |
14.3.3 Vorgehen | 320 |
14.3.4 Aufdeckbare Fehler und Überdeckungskriterien | 325 |
14.3.5 Anwendbare Teststufen | 326 |
14.3.6 Einschränkungen und Probleme | 327 |
14.4 Interaktionsbasiertes Testen | 328 |
14.4.1 Testziele | 328 |
14.4.2 Voraussetzungen | 328 |
14.4.3 Vorgehen | 328 |
14.4.4 Aufdeckbare Fehler und Überdeckungskriterien | 332 |
14.4.5 Anwendbare Teststufen | 333 |
15 Fehlerbezogene, erfahrungsbasierte und weitere Testentwurfsverfahren | 334 |
15.1 Fehlerbezogenes Testen | 334 |
15.1.1 Testziele | 334 |
15.1.2 Voraussetzungen | 334 |
15.1.3 Vorgehen | 335 |
15.1.4 Aufdeckbare Fehler | 336 |
15.1.5 Integrationsteststufen | 336 |
15.1.6 Einschränkungen und Probleme | 336 |
15.2 Exploratives Testen | 336 |
15.2.1 Testziele | 336 |
15.2.2 Voraussetzungen | 336 |
15.2.3 Vorgehen | 337 |
14.2.4 Aufdeckbare Fehler | 338 |
14.2.5 Integrationsteststufen | 338 |
14.2.6 Einschränkungen und Probleme | 338 |
14.3 Weitere Testentwurfsverfahren | 338 |
16 Nicht-funktionale Integrationstests | 340 |
16.1 Test gegen die Qualitätsmerkmale | 340 |
16.2 Innere und äußere Qualitätsmerkmale | 341 |
16.3 Sicherheitstest | 342 |
16.3.1 Funktionaler Sicherheitstest | 342 |
16.3.2 Technischer Sicherheitstest | 343 |
16.3.3 Vorgehensweise | 344 |
16.4 Zeit- und Verbrauchsverhalten | 345 |
16.4.1 Last- und Performanztest | 345 |
16.4.2 Vorgehensweise | 346 |
16.4.3 Lasterzeugung und Toolauswahl | 348 |
16.4.4 Ziele des Last- und Performanztests | 348 |
16.5 Integrationstest verteilter Systeme | 350 |
16.5.1 Validierungspunkte in verteilten Systemen | 350 |
16.5.2 Nebenläufigkeits- und Synchronisierungstests | 351 |
Teil III: Realisierung und Praxis | 354 |
17 Integrationstestumgebung | 356 |
17.1 Definition der Testumgebung | 356 |
17.2 Zweck der Testumgebung | 357 |
17.3 Bedeutung der Testumgebung für den Integrationstest | 358 |
17.4 Managementprozesse für die Testumgebung | 359 |
17.5 Planung und Management der Testumgebung | 361 |
17.6 Aufwandschätzung für die Testumgebung | 361 |
17.7 Big Picture = Systemstadtplan | 362 |
17.8 Testinfrastrukturplan | 363 |
17.9 Beschaffung von Hardware | 364 |
17.10 Systeminstallations- und -konfigurationsplan | 365 |
17.11 Simulatoren und Emulatoren | 365 |
17.12 Stubs und Mock-Objekte | 366 |
17.13 Testtreiber und Monitore | 367 |
17.13.1 Beobachtungs- und Steuerungspunkte | 368 |
17.14 Testwerkzeuge | 369 |
17.15 Testdaten | 370 |
17.16 Verantwortlichkeiten | 371 |
17.17 Release-Management | 372 |
17.18 Testumgebung für Maintenance und Support | 373 |
17.19 Abbau der Testumgebung | 373 |
17.20 Dokumentation | 374 |
18 Integrationstestautomation und dynamische Analysen | 376 |
18.1 Überblick | 376 |
18.2 Automatisierung der Schnittstellenanalyse | 378 |
18.2.1 Zweck eines Schnittstellenanalysators | 378 |
18.2.2 Funktionalität eines Schnittstellenanalysators | 379 |
18.2.3 Voraussetzungen für einen Schnittstellenanalysator | 379 |
18.2.4 Ergebnisse eines Schnittstellenanalysators | 380 |
18.3 Automatisierte Ermittlung von Integrationstestfällen | 380 |
18.3.1 Zweck eines Testfallgenerators | 381 |
18.3.2 Funktionalität eines Testfallgenerators | 381 |
18.3.3 Voraussetzungen für die Testfallerstellung | 382 |
18.3.4 Ergebnisse eines Testfallgenerators | 382 |
18.4 Automatisierte Generierung von Schnittstellendaten | 382 |
18.4.1 Zweck eines Schnittstellengenerators | 384 |
18.4.2 Funktionalität eines Schnittstellengenerators | 384 |
18.4.3 Voraussetzungen für die Schnittstellengenerierung | 384 |
18.4.4 Ergebnisse eines Schnittstellengenerators | 385 |
18.5 Testtreiber für die Steuerung des Integrationstests | 385 |
18.5.1 Zweck eines Testtreibers | 386 |
18.5.2 Funktionalität eines Testtreibers | 386 |
18.5.3 Voraussetzungen für die Integrationstestausführung | 387 |
18.5.4 Ergebnisse der Integrationstestausführung | 387 |
18.6 Dynamische Analyse der Schnittstellennutzung | 387 |
18.6.1 Zweck eines Schnittstellenvalidators | 389 |
18.6.2 Funktionalität eines Schnittstellenvalidators | 389 |
18.6.3 Voraussetzungen für die Schnittstellenvalidation | 390 |
18.6.4 Ergebnisse der Schnittstellenvalidation | 390 |
18.7 Dynamische Analyse der Integrationstestabläufe | 391 |
18.7.1 Zweck eines Ablaufverfolgungswerkzeugs | 392 |
18.7.2 Funktionalität eines Ablaufverfolgungswerkzeugs | 393 |
18.7.3 Voraussetzungen für die Testablaufverfolgung | 393 |
18.7.4 Ergebnisse der Testablaufverfolgung | 394 |
18.8 Werkzeuge für das Integrationstestmanagement | 394 |
18.8.1 Zweck eines Teststeuerungspults | 396 |
18.8.2 Funktionalität des Teststeuerungspults | 397 |
18.8.3 Voraussetzungen für das Teststeuerungspult | 398 |
18.8.4 Ergebnisse eines Teststeuerungspults | 399 |
19 Ausblick | 400 |
20 Anhang | 402 |
20.1 Glossar | 402 |
20.2 Literatur | 403 |
Index | 416 |