9. Konstruktive Qualitätssicherung

Werbung
9. Konstruktive Qualitätssicherung
•
•
•
•
Idee
Coding Guidelines
Werkzeugeinstellungen
weitere Maßnahmen
Software-Qualität
Stephan Kleuker
394
Ansatz
• die analytische Qualitätssicherung greift erst, wenn ein
Produkt erstellt wurde
• interessant ist der Versuch, Qualität bereits bei der
Erstellung zu beachten
• typische konstruktive Qualitätsmaßnahmen sind
– Vorgabe der SW-Entwicklungsumgebung mit
projekteigenem Werkzeughandbuch, was wann wie zu
nutzen und zu lassen ist
– Stilvorgaben für Dokumente und Programme
(sogenannte Coding-Guidelines)
• Die Frage ist, wie diese Maßnahmen überprüft werden
Software-Qualität
Stephan Kleuker
395
Coding Guidelines
• Detailliertes Beispiel: Taligent-Regeln für C++
(http://root.cern.ch/TaligentDocs/TaligentOnline/Document
Root/1.0/Docs/index.html)
• Sun hat auch Regeln für Java herausgegeben (nicht ganz so
stark akzeptiert)
• z. B. Eclipse-Erweiterung Checkstyle
• Generell gibt es Regeln
– zur Kommentierung,
– zu Namen von Variablen und Objekten (z.B. PräfixRegeln),
– zum Aufbau eines Programms (am schwierigsten zu
formulieren, da die Programmarchitektur betroffen ist
und es nicht für alle Aspekte „die OO-Regeln“ gibt)
Software-Qualität
Stephan Kleuker
396
Beispiel-Coding-Regel
• Ausschnitt aus „Java Code Conventions“, Sun, 1997
• Inhalt soll sich nicht nur auf Formatierung beziehen
Software-Qualität
Stephan Kleuker
397
Einheitliche Werkzeugeinstellungen
• Vor Projekt einheitliche Formatierung festlegen
• Styleguide für verwendete Werkzeuge
Software-Qualität
Stephan Kleuker
398
Fehlerfindung bei der Syntaxanalyse
In Eclipse kann „Schärfe“ der
Syntaxprüfung eingestellt
werden. Grundsätzlich sollte
die schärfste Version
eingestellt werden (solange es
keinen wesentlichen
Mehraufwand beim Beheben
potenzieller Fehler gibt)
Software-Qualität
Stephan Kleuker
399
Anti-Pattern verbieten
• Pattern dienen zur sinnvollen Strukturierung komplexer, aber
gleichartiger Systeme
• Anti-Pattern sind wiederkehrende schlechte Lösungen, die man
an Strukturen erkennen kann, z. B.
– Spaghetti-Code, viele if, while und repeat-Schleifen gemischt,
intensive Nutzung der Möglichkeiten mit break, früher: goto
– Cut-and-Paste-Programmierung: „was oben funktionierte,
funktioniert hier auch“
– allmächtige Klassen, kennen jedes Objekt, sitzen als Spinne im
Klassendiagramm, immer „gute“ Quelle für Erweiterungen
– Rucksack-Programmierung: bei vergessenem Sonderfall in
allen betroffenen Methoden
if (Sonderfall){ Reaktion } else { altes Programm}
• Literatur (z. B.): W. J. Brown, R. C. Malveau, H. W. McCormick III,
T. J. Mowbray, AntiPatterns, Wiley, 1998
Software-Qualität
Stephan Kleuker
400
weitere Maßnahmen
hierzu gehören einige Maßnahmen des proaktiven
Risikomanagements
• Berücksichtigung von Standards
• richtiges Personal mit Erfahrungen und potenziellen
Fähigkeiten finden (evtl. Coaching organisieren)
• frühzeitig Ausbildungen durchführen (niedriger Truckfaktor)
• frühzeitig passende Werkzeuge finden (Nutzungsregeln)
• Vorgehensmodell mit Reaktionsmöglichkeiten bei
Problemen (generell: gelebtes flexibles Prozessmodell)
• Unabhängigkeit der Qualitätssicherung
• Erfahrungen im Anwendungsgebiet
Software-Qualität
Stephan Kleuker
401
10. Performance und Speicherauslastung
•
•
•
•
•
Java-Parameter mit Performance-Einfluss
Versteckte Speicherlecks
Direkte Zeitmessung in Java
Konzept von Performance-Messwerkzeugen
Netbeans-Profiler
Software-Qualität
Stephan Kleuker
402
Typische Probleme
• Programme zur Zeit- und Speichermessung beeinflussen
Laufzeit und verbrauchten Speicher
• Gerade bei Laufzeitbetrachtungen können durch
langsamere Abläufe neue Effekte entstehen
• Testszenario muss in realistischer Zeit messbar sein
• generell sollten auf Testrechner wenig oder einfach bzgl.
Speicher- und Rechenzeitverbrauch zu kalkulierende
Programme laufen
• oftmals ist mehrmalige Messwiederholung sinnvoll
• bei Nutzung von Zufallswerten muss man Werte entweder
speichern oder Versuche häufig wiederholen
• Java VM kann recht flexibel bzgl. Speicher gestartet werden;
entspricht ggfls. Optimierungsaufgabe für Applikation
• man kann Strategie für Java VM Garbage Collector ändern
Software-Qualität
Stephan Kleuker
403
Parameter von java mit Performance-Einfluss
Direkte Parameter für die Java VM:
-Xbatch
Disables background compilation so that
compilation of all methods proceeds as a foreground task
until completed.
-Xdebug
Start with the debugger enabled.
-Xnoclassgc Disable class garbage collection.
-Xincgc
Enable the incremental garbage collector.
-Xmsn
Specify the initial size, in bytes, of the memory
allocation pool. (-Xms6144k -Xms6m)
-Xmxn
Specify the maximum size, in bytes, of the
memory allocation pool. (-Xmx81920k -Xmx80m)
-Xssn
Set thread stack size.
http://download.oracle.com/javase/8/docs/technotes/tools/w
indows/java.html
Software-Qualität
Stephan Kleuker
404
Parameter von javac mit Performance-Einfluss
Direkte Parameter für den Java-Compiler:
-g Generate all debugging information, including local variables.
-verbose
This includes information about each class
loaded and each source file compiled.
-verbose:class
Display info about each class loaded.
-verbose:gc
Report on each garbage collection event.
-target version
Generate class files that target a specified
version of the VM. (1.1 1.2 1.3 1.4 1.5 (also 5) 1.6 (also 6) …)
-Xlint
Enable all recommended warnings. (Passt
hier nicht hin, ist aber wichtig für QS )
http://download.oracle.com/javase/8/docs/technotes/tools/win
dows/javac.html
Software-Qualität
Stephan Kleuker
405
Verstecktes Speicherleck (1/3)
package boese;
import
import
import
import
import
java.io.File;
java.io.FileWriter;
java.io.IOException;
java.util.ArrayList;
java.util.List;
public class MachAuf {
public List<FileWriter> fwl = new ArrayList<FileWriter>();
public void steuern() throws IOException {
int anzahl = 0;
while (anzahl != 42) {
System.out.print("Anzahl: ");
anzahl = Eingabe.leseInt();
System.out.print("Datei: ");
oeffnen(Eingabe.leseString(), anzahl);
}
Stephan Kleuker
} Software-Qualität
406
Verstecktes Speicherleck (2/3)
public void oeffnen (String name, int anzahl)
throws IOException {
for (int i = 0; i < anzahl; i++){
FileWriter fw = new FileWriter(
new File(".\\bah\\"+name + i + ".dof"));
fw.write(42);
fwl.add(fw);
}
}
public static void main(String[] arg) throws IOException {
new MachAuf().steuern();
}
}
// Verzeichnis .\bah muss vorher existieren
Software-Qualität
Stephan Kleuker
407
Verstecktes Speicherleck (3/3)
Programmstart
Software-Qualität
Stephan Kleuker
408
Java hat eigenen Profiler
• Option der JavaVM -Xprof (Ausgabe wird auch von
Werkzeugen genutzt)
Software-Qualität
Stephan Kleuker
409
Zeitmessung selbst gestrickt (1/9)
• Szenario: Abteilung mit mehreren Mitarbeitern
• Frage nach passenden Typ für mitarbeiter
Software-Qualität
Stephan Kleuker
410
Zeitmessung selbst gestrickt (2/9) - Ausschnitte
public class Mitarbeiter implements Comparable<Mitarbeiter> {
private int id;
private String vorname;
private String nachname;
private double[] aktivitaeten = new double[100];
public Mitarbeiter(int id, String vorname, String nachname) {
this.id = id;
this.vorname = vorname;
this.nachname = nachname;
for (int i = 0; i < Mitarbeiter.GROESSE; i++) {
this.aktivitaeten[i] = Math.random();
}
}
@Override
public int compareTo(Mitarbeiter other) {
return this.id - other.getId();
}
Stephan Kleuker
// ...Software-Qualität
}
411
Zeitmessung selbst gestrickt (3/9) – Abteilung 1/2
public class Abteilung {
private Set<Mitarbeiter> mitarbeiter;
public Abteilung(Set<Mitarbeiter> mitarbeiter) {
this.mitarbeiter = mitarbeiter;
}
public void einfuegen(Mitarbeiter m) {
this.mitarbeiter.add(m);
}
public Mitarbeiter suchen(int minr) { // vollstaendig
Mitarbeiter mi = null;
// durchiterieren
for (Mitarbeiter m : this.mitarbeiter) {
if (m.getId() == minr) {
mi = m;
}
}
return mi;
Software-Qualität
Stephan Kleuker
}
412
Zeitmessung selbst gestrickt (4/9) – Abteilung 2/2
public boolean enthaelt(Mitarbeiter m) {
return this.mitarbeiter.contains(m);
}
public boolean loeschen(Mitarbeiter m) {
return this.mitarbeiter.remove(m);
}
}
Software-Qualität
Stephan Kleuker
413
Zeitmessung selbst gestrickt (5/9) - Testszenario
public class PerformanceAnalyse {
public static int ANZAHL = 10000;
private List<Mitarbeiter> mitarbeiter = new ArrayList<>();
private List<Integer> einfuegen = new ArrayList<>();
private List<Integer> loeschen = new ArrayList<>();
private List<Integer> suchen = new ArrayList<>();
private List<Set<Mitarbeiter>> testobjekte = new ArrayList<>();
public PerformanceAnalyse() {
this.testobjekte.add(new HashSet<>());
this.testobjekte.add(new LinkedHashSet<>());
this.testobjekte.add(new TreeSet<>());
this.testobjekte.add(new CopyOnWriteArraySet<>());
this.testobjekte.add(new ConcurrentSkipListSet<>());
for (int i = 0; i < ANZAHL; i++) {
this.mitarbeiter.add(new Mitarbeiter(i, i+ "vor", i + "nach"));
}
ArrayList<Integer> nummern = new ArrayList<>(); // 5000 Nummern
for (int i = 0; i < ANZAHL / 2; i++) {
nummern.add(i * 2);
Stephan Kleuker
} Software-Qualität
414
Zeitmessung selbst gestrickt (6/9) - Testszenario
while (!nummern.isEmpty()) {
Integer wahl = nummern.get((int) (Math.random() * nummern.size()));
this.einfuegen.add(wahl);
// 5000 einzufuegende Mitarbeiter
nummern.remove(wahl);
}
for (int i = 0; i < ANZAHL; i++) { // 10000 Nummern
nummern.add(i);
}
while (!nummern.isEmpty()) {
Integer wahl = nummern.get((int) (Math.random() * nummern.size()));
this.loeschen.add(wahl); // 10000 Mitarbeiter in zufälliger Folge
nummern.remove(wahl);
}
for (int i = 0; i < ANZAHL * 10; i++) { // 100000 zu löschende MA
this.loeschen.add(0, (int) (Math.random() * ANZAHL));
}
}
for (int i = 0; i < ANZAHL * 10; i++) { // 100000 MA suchen
this.suchen.add((int) (Math.random() * ANZAHL));
}
analyse();
Software-Qualität
Stephan Kleuker
415
Zeitmessung selbst gestrickt (7/9) - Testszenario
private void loeschen(Abteilung abteilung) {
for (int i : this.loeschen) {
abteilung.loeschen(this.mitarbeiter.get(i));
}
}
private void suchen(Abteilung abteilung) {
for (int i : this.suchen) {
abteilung.enthaelt(this.mitarbeiter.get(i));
}
}
private void iterieren(Abteilung abteilung) {
for (int i : this.suchen) {
abteilung.suchen(i);
}
}
private void einfuegen(Abteilung abteilung) {
for (int anz = 0; anz < ANZAHL / 100; anz++) {
for (int i : this.einfuegen) {
abteilung.einfuegen(this.mitarbeiter.get(i));
}
} Software-Qualität
Stephan Kleuker
}
416
Zeitmessung selbst gestrickt (8/9) - Testszenario
public void analyse() {
long zeit;
for (int i = 0; i < this.testobjekte.size(); i++) {
Set<Mitarbeiter> testobjekt = this.testobjekte.get(i);
System.out.println("Analyse von: " + testobjekt.getClass());
Abteilung abteilung = new Abteilung(testobjekt);
zeit = System.currentTimeMillis();
this.einfuegen(abteilung);
System.out.println(" einfuegen:\t"
+ (System.currentTimeMillis() - zeit) + " ms");
zeit = System.currentTimeMillis();
this.iterieren(abteilung);
System.out.println(" iterieren:\t"
+ (System.currentTimeMillis() - zeit) + " ms");
zeit = System.currentTimeMillis();
this.suchen(abteilung);
System.out.println(" suchen:\t"
+ (System.currentTimeMillis() - zeit) + " ms");
zeit = System.currentTimeMillis();
this.loeschen(abteilung);
System.out.println(" loeschen:\t"
+ (System.currentTimeMillis() - zeit) + " ms");
} Software-Qualität
Stephan Kleuker
}
417
Zeitmessung selbst gestrickt (9/9) - Ergebnisse
Klasse
HashSet
LinkedHashSet
TreeSet
CopyOnWriteArraySet
ConcurrentSkipListSet
einfuegen iterieren
suchen
loeschen
344
338
322
9725
9713
5089
62
57
57
72
71
69
326
77
75
5122
9272
9421
67
14
15
73
10
9
6302
6322
137
4272
4224
5716
1883
1903
26
241
249
13
133
5852
25
14
in Millisekunden
Software-Qualität
Stephan Kleuker
418
Konzept von Performance-Messwerkzeugen
• ähnlich zum letzten Beispiel wird Java-Code erweitert
• java -agentlib:hprof (hprof als Beispiel)
• Erweiterungen melden Informationen an Messerwerkzeug,
welches protokolliert
• Meldungen sollen erlauben, das Verhalten des Messwerkzeugs
heraus zu rechnen, genauer:
– Java hat Java Virtual Machine Tool Interface (JVMTI)
– ermöglicht als Aufrufargument einen Java Agent
– Java Agent ist spezielle Klasse
• aufgerufen bevor irgendwas passiert (vor main)
• Java Agent kann Filter installieren; bekommt mit, wenn
Klassen geladen werden und kann diese verändern
• http://docs.oracle.com/javase/8/docs/technotes/guides/jvmti/
• (Ansatz vergleichbar mit Aspect-opriented Programming)
Software-Qualität
Stephan Kleuker
419
Beispiel: Netbeans Profiler (1/5)
Software-Qualität
Stephan Kleuker
420
Beispiel: Netbeans Profiler (2/5)
siehe z. B.
https://www.youtube.com/watch?v=
DI4EFkzqCCg
Software-Qualität
Stephan Kleuker
421
Beispiel: Netbeans Profiler (3/5) - Methods
typischerweise analysiert man Zeiten selbst geschriebener
Methoden; man erkennt auch, wo Zeitverbrauch gegebener Klassen
Software-Qualität
Stephan Kleuker
422
Beispiel: Netbeans Profiler (4/5) - Speicherverbauch
wichtig: auch Anzahl erzeugter Objekte analysierbar
Software-Qualität
Stephan Kleuker
423
Beispiel: Netbeans Profiler (5/5) -Telemetry
auch besonders für Web-Applikationen interessant (beobachtbar)
Software-Qualität
Stephan Kleuker
424
Zusammenfassung
• Definition des Testszenarios ist hier sehr komplexe Aufgabe
• Testergebnisse können von vielen kleinen Parametern
(Objektgrößen, Systemeinstellungen) abhängen
• Kleine Änderungen können große Effekte haben
• Performance- und Speicherverbrauchsmessung oft nicht
ganz exakt durchführbar
• Zentrale Frage: welche Methode wird wie oft aufgerufen
und verbraucht wieviel Zeit
• Zentrale Frage: Welche Objekte verbrauchen wieviel
Speicherplatz
• Werkzeugunterstützung ist vorhanden
Software-Qualität
Stephan Kleuker
425
11. Testautomatisierung
•
•
•
•
•
•
Automatisierungsidee
Beispiele für Werkzeuge
Build-Server
Idee von Build-Werkzeugen
Einführung in Ant
Tests aus Ant starten
Software-Qualität
Stephan Kleuker
426
Was meint hier Automatisierung
• klassische Testansätze
– Entwicklung einer Testspezifikation (Vorbedingung,
Ausführung, erwartete Ergebnisse)
– manuelle Testausführung
– manuelle Erfassung und Auswertung der Testergebnisse
• erste Automatisierungsstufe
– Werkzeuge wie JUnit, Marathon erlauben die
automatische Testausführung und Protokollierung
(teilweise Auswertung)
– Werkzeuge müssen einzeln gestartet werden
• zweite Automatisierungsstufe
– mehrere Werkzeuge laufen nacheinander / zusammen
– Ergebnisse werden zentral protokolliert
Software-Qualität
Stephan Kleuker
427
Warum Automatisierung? Gefahr
Lines of
Code pro
Monat
schneller
Einstieg
in die
Programmierung
kontinuierliches
Wachstum,
Erweiterung
des Marktsegments
Produktivität ohne
systematische Prozesse
verschiedene Kunden
erwarten Produktvarianten
SW-Architektur für
Varianten nicht geeignet
verlangsamte
Entwicklung
durch immer
aufwändigere
Fehlerbehebung
Versuch des Refactorings
(unter starkem Zeitdruck)
SWM, 15.11.2012
Software-Qualität
Stephan Kleuker
Fehler mit verteilten
Quellen können
nicht beseitigt
werden (z. B.
mangelnde
SW-Architektur)
Entwicklungseinstellung
(oder Re-Implementierung)
Zeit
428
Warum Automatisierung? Optimierter Prozess
Lines of
Code pro
Monat
Zeit
angestrebte Produktivität bei
kontinuierlicher Optimierung
kontinuierliche Analyse, ob
Prozess mittelfristig erfolgreich
Entwicklungsbeginn, mit
einfachem
Prozess und
Werkzeugen
Verbesserungen in Prozessen,
Werkzeugen und Ausbildung
ursprüngliche
Produktivität
Zeit
Software-Qualität
Stephan Kleuker
429
Fallstudie: Ziele der QS - Optimierung
• Konzeption und Implementierung der Automatisierung:
– Unit-Tests
– GUI-Tests
– Messung der Codeüberdeckung
– Statische Codeanalyse
– Softwaremetrik
• Integrierbarkeit in das bisherige Verfahren
Software-Qualität
Stephan Kleuker
430
Fallstudie: Werkzeugauswahl nach Analyse (1/2)
JUnit
QF-Test (kommerziell)
JaCoCo
Sonar
Software-Qualität
Stephan Kleuker
431
Fallstudie: Werkzeugauswahl nach Analyse (2/2)
Jenkins
Sikuli (Capture & Replay)
Weitere Werkzeuge:
• Ant
• Hyper-V
• Jython
• PostgreSQL
• Tomcat
Software-Qualität
Stephan Kleuker
432
Fallstudie: Überblick: Prozess und Konzept
• JUnit
• JaCoCo
Build
Schnelle
Tests
Analysen
Restliche
Tests
• Sonar
Software-Qualität
• QF-Test
• JaCoCo
• Sikuli
Stephan Kleuker
433
Fallstudie: Gesamtablauf
Benachrichtigung
Werkzeug:
- Jenkins
Auslöser:
- Benutzer
- SVN
- Event
Warten auf Buildauftrag
Produkte:
- Codeanalyse Ergebnisse
- Auswertung Überdeckungsmessungen
- Auswertung Testergebnisse
Werkzeug:
- Jenkins
Speicherort:
PostgreSQL DB
Build
Werkzeuge:
- Ant
- SVN
Sonar Untersuchung
Werkzeuge:
- Ant
- Sonar
[Build fehlgeschlagen]
[keine weiteren Tests]
[Build erfolgreich]
Produkte:
- GUI Test Ergebnisse
- JaCoCo Messdaten
[Unit-Tests gescheitert]
Produkt:
admileo
[Klassen]
Werkzeuge:
- Ant
- JUnit
- JaCoCo
Unit Tests
Software-Qualität
GUI-Tests
Produkte:
- JUnit Ergebnisse
- JaCoCo Messdaten
[Unit-Tests OK]
Stephan Kleuker
[weitere Tests]
Systeme:
virtuelle Rechner
Werkzeuge:
- Ant
- JaCoCo
- Jenkins
- QF-Test
434
12. Organisation des QS-Prozesses in IT-Projekten
•
•
•
•
•
Teststufen
Regressionstest
manuelle Prüfmethoden
Testverfahren nach ANSI/IEEE-829
Organisation der QS
siehe auch:
• H. M. Sneed, M. Winter, Testen objektorientierter Software,
Hanser, München Wien
• A. Spillner, T. Roßner, T. Linz, Praxiswissen Softwaretest, ab
2. Auflage, dpunkt Verlag, Heidelberg
Software-Qualität
Stephan Kleuker
435
Teststufen (grober Ablauf)
Klassentest
entwicklungsintern
Integrationstest
Systemtest
entwicklungsextern (mit Kunden)
Software-Qualität
Abnahmetest
Stephan Kleuker
436
Klassentest (Modultest)
• Varianten:
– Unit-Test: einzelne Methoden und/oder Klassen
– Modultest: logisch-zusammengehörige Klassen,
z.B. ein Package in Java
• Testziel: Prüfung gegen Feinspezifikation
– Architektur, Design, Programmierkonstrukte
• Testmethode: White-Box-Test
• Alle Module müssen getestet werden
– eventuell mit unterschiedlicher Intensität
Software-Qualität
Stephan Kleuker
437
Integrationstest
• Module werden zu einem System integriert und getestet
• Testziele:
– Werden Schnittstellen richtig benutzt?
– Werden Klassen bzw. ihre Methoden richtig aufgerufen?
• Konzentration auf (Export-) Schnittstellen
– Interne Schnittstellen können nicht mehr direkt
beeinflusst werden
– Geringere Testtiefe als beim Modultest
– Grey-Box-Test (oder auch Black-Box)
• Techniken ähnlich wie bei Modultest
– Pfadanalyse über die komplette Interaktion der Module
oft nicht mehr sinnvoll
• Mit minimaler Systemkonfiguration beginnen,
Integrationsstrategie spielt eine Rolle
Software-Qualität
Stephan Kleuker
438
Systemtest
• Orientierung an den spezifizierten Systemaufgaben (z.B. Use
Cases)
• Interaktion mit den (simulierten) Nachbarsystemen
• (endgültige) Validierung der nicht-funktionalen
Anforderungen, z. B. Skalierbarkeit, Verfügbarkeit,
Robustheit, ...
• möglichst interne Vorwegnahme des Abnahmetests
Software-Qualität
Stephan Kleuker
439
Testansätze zusammengefasst
White-Box-Test
Anweisungen
Entscheidungen
Pfade
Gray-Box-Test
Black-Box-Test
Paket/
Komponente
Eingaben
Schnittstellen
System
Ausgaben
Methoden-/Klassentest
Integrationstest
Software-Qualität
Stephan Kleuker
Systemtest
440
Testfälle und die UML
Entwicklung in der UML
Testen
Use Case Diagramme
Systemtestfälle
Aktivitätsdiagramme
Komponentendiagramme
Integrationstestfälle
Sequenzdiagramme
Klassentestfälle
Klassendiagramme
Zustandsdiagramme
Software-Qualität
Stephan Kleuker
441
Regressionstest
• Änderungen an bereits freigegebenen Modulen sind
notwendig
• Gibt es Auswirkungen auf die alten Testergebnisse?
• Wenn ja, welche?
• Wiederholbarkeit der Tests
• Wiederherstellung der Testdaten
• Der Testprozess muss automatisierbar sein
• Testfälle müssen gruppiert werden können, damit man sie
wegen der untersuchten Funktionalität (oder auch
Testdauer) gezielt einsetzen kann
Software-Qualität
Stephan Kleuker
442
Prinzip des Regressionstests
Software
Version n
Testfallspezifikation
Version n
Test
Testarchivierung
der Iteration n
Referenztestfälle
Testfallergebnisse
Software
Version n+1
Regressionstest
Testfalldatenbank
Vergleich der
Testergebnisse
Software-Qualität
Stephan Kleuker
443
Regressionstests im Entwicklungszyklus
Testfallentwicklung
erste Entwicklung
Version 1
Test
Testfallentwicklung
Weiterentwicklung
Test
Testfallentwicklung
Weiterentwicklung
Test
Software-Qualität
Stephan Kleuker
Regressionstestfälle
Version 2
Regressionstestfälle
Version n
444
Wartung und Testen
• Der Test ist geteilt in Änderungstest (White-Box) und
Regressionstest (Black-Box)
• Änderungstest vom Entwickler, er schreibt die Testfälle fort.
• Regressionstest von unabhängiger Testgruppe mit den alten
plus neuen Testfällen durchgeführt
• Testgruppe ist für Pflege und Fortschreibung der
Systemtestfälle verantwortlich
Software-Qualität
Stephan Kleuker
445
Lasttest
• Geforderte Performance
– Durchsatz bzw. Transaktionsrate
– Antwortzeiten
• Skalierbarkeit
– Anzahl Endbenutzer
– Datenvolumen
– Geografische Verteilung
• Zugriffskonflikte konkurrierender Benutzer
• Entspricht dem Zeitraum nach der Inbetriebnahme
• Simulation von
– Anzahl Endbenutzer,
– Transaktionsrate , ...
– Über einen signifikanten Zeitraum (mehrere Stunden)
Software-Qualität
Stephan Kleuker
446
Manuelle Prüfmethoden berücksichtigen
• Produkte und Teilprodukte werden manuell analysiert,
geprüft und begutachtet
• Ziel ist es, Fehler, Defekte, Inkonsistenzen und
Unvollständigkeiten zu finden
• Die Überprüfung erfolgt in einer Gruppensitzung durch ein
kleines Team mit definierten Rollen
• Jedes Mitglied des Prüfteams muss in der Prüfmethode
geschult sein
• notwendigen Aufwand und benötigte Zeit einplanen
• Vorgesetzte und Zuhörer sollen an den Prüfungen nicht
teilnehmen
• Inspektionen, Reviews und Walkthroughs (in abnehmender
Formalität), in der Literatur ist „Reviews“ teilweise der
Oberbergriff
Software-Qualität
Stephan Kleuker
447
Vor- und Nachteile manueller Prüfmethoden
+ Oft die einzige Möglichkeit, Semantik zu überprüfen
+ Notwendige Ergänzung werkzeuggestützter Überprüfungen
+ Die Verantwortung für die Qualität der geprüften Produkte
wird vom ganzen Team getragen
+ Durch Gruppensitzung, wird die Wissensbasis der
Teilnehmer verbreitert
+ Autoren bemühen sich um verständliche Ausdrucksweise,
da mehrere Personen das Produkt begutachten
+ Unterschiedliche Produkte desselben Autors werden von
Prüfung zu Prüfung besser, d.h. enthalten weniger Fehler
- In der Regel aufwändig (bis zu 20 Prozent der
Erstellungskosten des zu prüfenden Produkts)
- Autoren geraten u.U. in psychologisch schwierige Situation
(»sitzen auf der Anklagebank«, »müssen sich verteidigen«).
Software-Qualität
Stephan Kleuker
448
Iterativ inkrementelle Werkzeugauswahl
Werkzeugmöglichkeiten evaluieren
aktuelle
Werkzeuge
aktueller
Prozess
Sinn der W-möglichkeiten verstehen
Frage ob W-möglichkeiten hohen
Mehrwert liefern
Frage ob Werkzeug in Wlandschaft integrierbar
Werkzeugkandidaten
aktualisierte
Werkzeuge
aktualisierter
Prozess
Frage ob Prozessanpassung
notwendig und sinnvoll
Stephan Kleuker
449
Testverfahren nach ANSI/IEEE-829
Testplan
Testkonzept
Testfallspezifikation
TestprozedurSpezifikation
Testobjekte
Übergabebericht
Testausführung
Testprotokoll
Testvorfallsbericht
Testabschlussbericht
Software-Qualität
Stephan Kleuker
450
Dokumentation der Qualitätssicherung (Tests)
Software-Qualität
Stephan Kleuker
451
Testplanungsphase
•
•
•
•
•
·
·
·
·
·
·
·
·
·
Festlegung der Testziele
Planung der Testaktivitäten
Gewünschte Testergebnisse
Zuweisung der Testressourcen
Übersicht über alle Kapitel eines Testplans:
Testplan ID
Einführung
Zu testende Komponenten
Zu testende Funktionen
Nicht zu testende Funktionen
Vorgehensweise
Pass / Fail Kriterien
Produkte
Testtätigkeiten
Software-Qualität
·
·
·
·
·
·
Stephan Kleuker
Testumgebung
Zuständigkeiten
Personal
Zeitplan
Risiken und
Risikomanagement
Genehmigungen
452
Testendekriterien
• Teil der Planung sind Angaben, wann eine Testaktivität
abgeschlossen werden kann
• Beispiele:
– Zweigüberdeckung >= 0.85
– Methodenüberdeckung >= 0.95
– Schnittstellenüberdeckung >= 0.99
– Anwendungsfallüberdeckung = 1
– Oberflächenüberdeckung >= 0.95
– Ausnahmeüberdeckung >= 0.80
• Angaben müssen später für einzelne Testfälle herunter
gebrochen werden
• Angaben können unerwünschte „Seiteneffekte“ auf
Entwickler haben
• anderer Indikator: Anzahl der gefundenen Fehler pro
Zeiteinheit
Software-Qualität
Stephan Kleuker
453
Testentwurfsphase
• Konzipierung der Testansätze für die verschiedenen
Testarten
• Welche Tests/Testwerkzeuge sollen für welche Testart
genutzt werden?
• Wie sollen die Tests aufgebaut sein, welche inhaltliche
Vorgehensweise wird festgelegt?
• Wie soll die Integration getestet werden?
• Welche Umgebungsinformationen (angebundene
Komponenten, zu berücksichtigende Datenformate) müssen
wie in die Tests einfließen?
• Das Ergebnis ist ein Testkonzept
Software-Qualität
Stephan Kleuker
454
Testfallspezifikation
• Überlegungen, wie Komponente getestet werden soll
• Prüfung der Spezifikation durch Endanwender möglich
– alle relevanten Bereiche durch Tests abgedeckt
– Tests fachlich korrekt
• Testspezifikationen Entwicklern vorlegen, deren
Anmerkungen einarbeiten
Eine Testspezifikation sollte die folgenden Abschnitte
enthalten:
– Testspezifikation ID
– Zu testende Funktionen
– Testverfahren
– Testskripte und Testfälle
– Pass / Fail Kriterien
Software-Qualität
Stephan Kleuker
455
Testvorschrift
• Testvorschrift enthält alle für die Durchführung des Tests
benötigten Angaben (u.a. die ausgewählten Testfälle, die zu
Testsequenzen gruppiert werden)
1.
Einleitung
1.1 Zweck des Tests
1.2 Testumfang
1.3 Referenzierte Unterlagen
2.
Testumgebung
2.1 Überblick
2.2 Test Software/Hardware
2.3 Testdaten, Testdatenbank
2.4 Personalbedarf
3.
Abnahmekriterien
3.1 Kriterien für Erfolg und
Abbruch
3.2 Kriterien für eine
Unterbrechung
3.3 Voraussetzung für
Wiederaufnahme
4.
Testabschnitt 1
4.1 Einleitung
Software-Qualität
4.1.1 Zweck, Referenz zur
Spezifikation
4.1.2 Getestete Software-Einheiten
4.1.3 Vorbereitungsarbeiten für
Testabschnitt
4.1.4 Aufräumarbeiten nach
Testabschnitt
4.2 Testsequenz 1-1
4.2.1 Testfall 1-1-1: Eingabe,
Anweisung, Soll-- und Istausgabe,
Befund
4.2.2 Testfall 1-1-2: Eingabe,
Anweisung, Soll-- und Istausgabe,
Befund
...
4.3 Testsequenz 1-2
4.n Ergebnis des Abschnitts 1
5.
Testabschnitt 2
Stephan Kleuker
456
...
Testaufbau
• Zur Beschreibung eines Tests gehört die eindeutige
Identifizierung der Testumgebung (des Testbeds)
• Dazu muss die vollständige Konfiguration der Testumgebung
festgehalten werden, damit Tests später nachvollziehbar sind
• zum Testbed, gehört der/die Rechner mit Konfiguration
(Betriebssystem, weitere Software), Version der eingesetzten
Testsoftware, Spezifikation der Umgebung (z.B.
Datenbanken)
• typisch ist der Einsatz von Testrechnern, in größeren
Projekten von Testlaboren
• aus den Rahmenbedingungen folgt, dass der Einsatz eines
Testrechners für mehrere Projekte schwierig ist
Software-Qualität
Stephan Kleuker
457
Testdurchführung
• alle in Testvorschrift spezifizierten Testfälle werden
ausgeführt
• alle Ergebnisse in dem Testprotokoll aufgezeichnet
• Durchführung der Tests sollte, falls keine allzu gravierenden
Fehler auftreten, nicht unterbrochen werden
• Festgestellte Fehler sollten nur notiert, aber nicht behoben
werden
• Das Ergebnis der Testausführung steht im Testprotokoll
– Bezeichnung Prüfling und Version
– verwendetes Testbed
– welche definierten Testfälle wurden ausgeführt
– Ergebnis der Prüfung
• Das Testprotokoll kann Testvorschrift kombiniert sein.
Software-Qualität
Stephan Kleuker
458
Testauswertung
• Testprotokoll enthält Ergebnisse der Testausführung
• Ergebnisse werden mit den in der Spezifikation definierten
erwarteten Ergebnisse verglichen
• Das Ergebnis der Testauswertung ist Testdokumentation:
– administrative Angaben
– Verweise auf alle den Test betreffenden Dokumente
– Testzusammenfassung; präzise Identifizierung des
Prüflings, des Testbeds, benutzte Testvorschrift, alle
Anlagen und Teilnehmer; die Bewertung des Testteams
muss von allen Teilnehmern unterschrieben sein.
– festgestellte Abweichungen; diese dienen später zur
Planung und Kontrolle der Fehlerbehandlung
– Testprotokoll; Angaben, ob Ist-- und Soll--Resultate sich
entsprechen; kann zusammen mit der Testvorschrift
realisiert sein, muss aber das Testergebnis enthalten,
– die Schlussbewertung
Software-Qualität
Stephan Kleuker
459
Erstellung von Testdokumenten
• Der beschriebene Ansatz ist relativ formal und fordert die
Erstellung vieler Dokumente
• Dieser Ansatz ist für größere Projekte (ab 6 Leute), länger
laufende Projekte (mehr als ein Jahr) und Projekte deren
Ergebnis langfristig gepflegt werden soll, unerlässlich
• Die Testdokumentation, die beschriebenen Tests und die
Testergebnisse sollten möglichst eng in der benutzten
Software-Entwicklungsumgebung verwoben sein (so können
z.B. Referenzen automatisch aufdatiert werden)
• Testergebnisse sind automatisch zu verwalten,
durchgeführte Tests und ihre Ergebnisse sollten möglichst
automatisch in Datenbanken verwaltet werden
Software-Qualität
Stephan Kleuker
460
Organisation und Rollen (1/3)
Abteilungsleiter
Qualitätsbeauftragter
informiert
beauftragt
Software-Qualität
Projektleiter
Teilteamleiter/
Entwickler
Chefdesigner
(Querschnittsrollen)
Anmerkung: Q-Sicht, Qualitätssicherung
nicht dem Projektleiter unterstellt
Stephan Kleuker
461
Organisation und Rollen (2/3)
• Abteilungsleiter
– hat Gesamtverantwortung für das Projekt
– stellt Ressourcen zur Verfügung (Mitarbeiter, Budget, ...)
– kontrolliert Budget
– hält Kontakt zu den Entscheidungsträgern beim Kunden
• Projektleiter
– hat Ergebnisverantwortung für Projekt einschl. Qualität
– leitet die Teilteams und damit die Projektmitarbeiter
– verantwortlich für inhaltlichen Kontakt zum Kunden
– berichtet an den Abteilungsleiter
Software-Qualität
Stephan Kleuker
462
Organisation und Rollen (3/3)
• Qualitätsbeauftragter
• wird vom Abteilungsleiter ernannt
• hat die Verantwortung für die QS und Durchführung von
QS-Maßnahmen
• berichtet an den Abteilungsleiter und den Projektleiter über
den Stand der QS
• QS-Maßnahmen sind sehr wichtige Aufgaben im Projekt
• haben konkrete Ergebnisse
• sind Grundlage für die Beurteilung des Projektfortschritts
• Drückt den “roten Knopf“, um eine Auslieferung zu stoppen
• Frage: Was spricht für, was gegeben eigene Q-Abteilung?
Software-Qualität
Stephan Kleuker
463
Herunterladen