Analytische Qualitätssicherung Flashcards
Testen
jede Handlung mit dem Ziel, Fehler im Programm aufzufinden
Debuggen
Untersuchung des Programmcodes nach der Fehlerursache für ein beim Testen aufgetretenes Fehlersymptom mit anschließender Beseitigung der Fehlerursache
Konstruktive Qualitätssicherung (Erklärung)
Maßnahmen zur Fehlervermeidung
Konstruktive Qualitätssicherung (Beispiele)
- Programmierstil-Richtlinien
- unterstützender Funktionen in Entwicklungsumgebung (Auto-Formatierung etc.)
- bewährte Entwicklungsmethodik
Fehler
Überbegriff für Fehlerursache und Fehlersymptom
Fehlersymptom
Fehlverhalten des ausgeführten Programms
Fehlerursache
Fehlersymptom auslösender (weil falscher) Teil im Programmcode
Prüfling
zu testender Programmteil (Funktion, Prozedur) bzw. zu testendes Programm
Testtreiber
Ausschließlich zum Test von Programmteilen geschriebenes Programm, in das der Prüfling eingebettet ist / wird
Korrektheit
Wird durch den Beweis der absoluten Abwesenheit von Fehlern nachgewiesen
Fehlerfreiheit
Wird durch Beseitigung aller auftretenden Fehler erreicht
Verifikation
Verfahren, um Korrektheit sicherzustellen
sehr aufwendig und damit nur bei sicherheitskritischen Anwendungen üblich
Falsifikation
Verfahren, um Fehlerfreiheit zu erreichen
I.d.R. Testverfahren
zulässige Eingabe
Laut Problemspezifikation zulässige Eingabewerte
Testdatum
Tupel aus zulässiger Eingabe und dazu erwarteten Ausgabewerten
Testfall
Menge von Testdaten, für die ein gleiches Verhalten des Prüflings erwartet wird
Testlauf
Ausführung des Prüflings mit zulässiger Eingabe mit dem Ziel des Testens
Anderes Wort für “Prädikat”?
Bedingung
G = (N, E)
G=? N=? E=?
Was bedeutet die Formel übersetzt?
G = gerichteter Graph
N = Nodes = Knoten
E = Edges = Kanten
Ein gerichteter Graph ist ein Paar aus einer Menge von Knoten und einer Menge von Kanten.
Kante (n1, n2)
n1=? n2=?
n1=Vorgänger von n2
n2=Nachfolger von n1
Wann ist ein Graph zusammenhängend?
Wenn alle Knoten irgendwie miteinander verbunden sind bzw. wenn kein Knoten unverbunden ist.
Was ist ein Zyklus?
Ein Pfad zurück auf einen vorher schoneinmal besuchten Knoten (mit oder ohne Zwischenstationen). => Schleifen
Kompakter Kontrollflussgraph
Kontrollflussgraph, bei dem leere Anweisungen, begin, end, etc. einem angrenzenden Knoten zugeordnet und Blöcke zu einem Knoten zusammengefasst wurden
Block
Aufeinanderfolgende Programmzeilen / Anweisungen, die nur zusammenhängend in der entsprechenden Reihenfolge durchlaufen werden können
Pfad
Weg durch den Kontrollflussgraphen über durch Kanten verbundene Knoten, beginnend bei n(start), endend bei n(final)
Teilpfad
Pfad, der nicht bei n(start) anfängt und/oder nicht bei n(final) endet, also nicht den gesamten Prüfling durchläuft
assoziierter Testfall
Testfall, der sich aus einem bestimmten Pfad ergibt
Klassen von White-Box-Testverfahren
- kontrollflussorientierte
- datenflussorientierte
Überdeckungskriterien
- Anweisungsüberdeckung
- Zweigüberdeckung
- Pfadüberdeckung
- Boundary-interior-Pfadtest
- Bedingungsüberdeckung
- einfach, minimal mehrfach, mehrfach
Klassen von Black-Box-Verfahren
- funktionsorientiert
- fehlerorientiert
- Zufallstests
Anderer Name für White-Box-Testverfahren
strukturorientiert
statische Testverfahren
- Review
- statische Programm-Analysatoren
Nach welchen Kriterien lassen sich Tests klassifizieren?
- Prüftechnik
- Stufe der Softwareentwicklung
Wie werden Tests nach der Stufe der Softwareentwicklung unterteilt?
- Modultest (Programmschnipsel)
- Integrationstest (Zusammenführen von Programmschnipseln)
- Systemtest (Komplette Anwendung in Versuchsumgebung)
- Abnahmetest (Komplette Anwendung in Zielumgebung)
Wie werden Verfahren der analytischen Qualitätssicherung nach Prüftechnik unterteilt?
- verifizierende Verfahren
- analysierende Verfahren
- statische Verfahren
- dynamische Verfahren
analysierende Verfahren (Beispiele)
- zyklomatische Zahl
- Halstead-Metriken
Was machen analytische Verfahren?
- Quantifizierung von Dokumenten (strukturelle Komplexität, Programmlänge, Kommentierungsgrad,etc.);
- bilden Grundlage für Fehlervorhersage aufgrund von vergleichender Bewertung (Erfahrungswerte) von Dokumenten.
Welcher Anteil an Fehlern wird in etwa durch C0- bzw. C1-Tests gefunden?
Nur 20% bzw. 25%.
C0-Test
Anweisungsüberdeckungstest
C(Anweisung) = (Anzahl der Besuchten Knoten) / (Anzahl aller Knoten)
C1-Test
Zweigüberdeckungstest
C(Zweig) = (Anzahl der Besuchten Zweige/Kanten) / (Gesamtanzahl der Zweige/Kanten)
Wie ist das Verhältnis von der Anzahl der Testfälle zum Anweisungs-/Zweigüberdeckungsgrad?
abnehmender Grenznutzen:
Mit jedem neuen Pfad sinkt der Anteil an neu besuchten Knoten/Kanten MASSIV.
Unterschiede zwischen statischen und dynamischen Verfahren?
dynamischen Verfahren - Programm wird mit konkreten Testdaten ausgeführt - finden Fehlersymptome statische Verfahren - analysieren Programm ohne Ausführung - decken die Fehlerursache mit auf
Kontrollfluss
- Abfolge der einzelnen Befehle
- gesteuert durch Anweisungsfolgen, Selektion und Iteration
Kontrollflussgraph
- graphische Aufbereitung des Programmtextes
- zusammenhängender gerichteter Graph
- Startknoten n(start) stellt Programmeintritt (Beginn des Anweisungsteils) dar
- der Endknoten n(final) stellt Programmaustritt dar
- alle weiteren Knoten stellen Programmzeilen dar
- Kanten zeigen statischen Kontrollfluss an
C2-Test
einfacher Bedingungsüberdeckungstest
Probleme beim einfachen Bedingungsüberdeckungstest?
umfasst nicht zwangsläufig die Zweigüberdeckung
-> sollte daher nicht alleine benutzt werden
Bedingungs-/Entscheidungsüberdeckungstest
Kombination aus einfachem Bedingungsüberdeckungstest (C2) und Zweigüberdeckungstest (C1)
atomares Prädikat
kleinster auswertbarer Teil einer zusammengesetzten Entscheidungsanweisung
C3-Test
Mehrfach-Bedingungsüberdeckungstest
Probleme beim Mehrfach-Bedingungsüberdeckungstest?
Für komplexe Entscheidungen nicht mehr praktikabel auswertbar.
einfache Bedingungsüberdeckung
- Jedes atomare Prädikat muss jeweils 1mal zu true und false ausgewertet werden.
- (für vollständige Überdeckung zu testen: (Anzahl der Atome) * 2)
- C2-Test
Mehrfach-Bedingungsüberdeckung
- Jede mögliche Kombination von Wahrheitswerten für atomare Prädikate muss ausgewertet werden.
- (für vollständige Überdeckung zu testen: 2^(Anzahl der Atome))
Kompromiss zwischen einfacher und Mehrfach-Bedingungsüberdeckung
- minimale Mehrfach-Bedingungsüberdeckung
- Jede Entscheidung ist insgesamt sowie für jede Teilbedingung (atomar sowie zusammengesetzt) min. 1mal true und einmal false auszuwerten.
- (C(MinMehrfach)=((Anzahl(true)+Anzahl(false)) / 2*(Anzahl der Prädikate))
C4-Test
Pfadüberdeckungstest
Probleme beim Pfadüberdeckungstest?
Viel zu komplex, kann für die meisten Programme nicht ansatzweise erreicht werden.
Boundary-interior-Pfadtest
Zur praktikablen Prüfung von Schleifen. Pro Schleifen werden folgende drei Testfälle berücksichtigt:
- Kein Schleifendurchlauf: Alle Pfade, die die Schleife nicht durchlaufen (bei repeat: immer leere Menge!)
- Boundary: Alle Pfade, bei der die Schleife genau 1mal durchlaufen wird
- Interior: Alle Pfade bei der die Schlefe mehrfach (eine bestimmte Anzahl, oft 2-3mal) durchlaufen wird.
Wie wird beim Boundary-interior-Pfadtest mit geschachtelten Schleifen verfahren?
Zunächst wird die inner(st)e Schleife getestet, anschließend die umschließende, wobei die bereits getestete Schleife als Black-Box interpretiert wird, u.s.w.
Auf welcher Grundlage werden die Testfälle bei White-Box-Testverfahren gebildet?
satischer Kontrollfluss des Prüflings
Auf welcher Grundlage werden die Testfälle nei Black-Box-Testverfahren gebildet?
Problemspezifikation
funktionsorientierte Testverfahren
überprüfen Funktionatität gemäß der Problemspezifikation
funktionale Äquivalenzklassenbildung
Menge aller zulässigen Eingaben wird in
- Eingabeäquivalenzklassen (gleiches erwartetes funktionales Verhalten) oder
- Ausgabeäquvalenzklassen (gleichartige Resultate) zerlegt
- erste Zerlegung wird i.d.R. weiter verfeinert
- Testfälle werden durch bilden der fehlenden Eingaben/Ausgaben zu den gefundenen Äquivalenzklassen gebildet
fehlerorientierter Test
Auswahl von Testdaten aufgrund von (durch Erfahrung gewonnene) Erwartung eines Fehlers für bestimmte Werte
fehlerorientierter Test (Beispiele)
- zero values-Kriterium
- nil-Zeiger
- Grenzwertanalyse
zero values-Kriterium
jede arithmetisch verwendete Variable 1mal mit 0 besetzen, um Laufzeitfehler bei Division durch 0 auszutesten
Grenzwertanalyse
Grenzwerte der Testfälle sowie benachbarte Werte austesten (um z.B. Fehler in Auswahl von Schleifengrenzen etc. auszuschließen)
Zufallstest
- zufällige Eingaben aus der Menge der erlaubten Eingaben werden ausgewertet
- Nachteil: keine vollständigen Testfälle
- Vorteil: leicht automatisierbar
- Anwendungsbeispiel: Sortieralgorithmen, Algorithmen, wo die Entscheidung über die Richtigkeit eines Ergebnisses schnell(er als die Bildung eines kompletten Testfalls) möglich ist
Regressionstest
Nach Änderung eines Programmteils muss nicht nur dieser, sondern auch alle von ihm betroffenen/auf ihn zugreifenden anderen Programmteile erneut getestet werden. Ergebnisse werden zusätzlich mit vorherigen Testläufen verglichen.
Welches sind die zwei bekanntesten Arten von Reviews?
- Inspektion
- (strukturierter) Walk-Through
Moderator einer Inspektionssitzung
- erfahrener Softwareentwickler
- nicht Programmautor
Aufgaben: - besorgt und verteilt Unterlagen
- Zeitplanung & Leitung der Sitzung
- Protokollierung der gefundenen Fehler
- Kontrolle der Fehlerbehebung.
Wieviele und welche Personen umfasst ein Inspektionsteam üblicherweise?
4 - 8
- Moderator
- Autor
- Programmdesigner (bei Codedokument)
- Testspezialist
- Auftraggeber oder kompetenter Anwender (bei Test der Produktspezifikation)
Wie wird eine Inspektionssitzung vorbereitet?
- Moderator besorgt und verteilt vorher wichtige Unterlagen (zu prüfendes Dokument, Spezifikation, etc.); - Teilnehmer setzen sich vorher damit auseinander.
Wie verläuft eine Inspektionssitzung?
- Autor erläutert sein Dokument zeilenweise
- Fehler werden aufgelistet (Hilfsmittel: Checkliste möglicher Fehler), erst im Anschluss korrigiert.
- Dauer: nicht länger als 120 Minuten (ca. 300 Anweisungen Quelltext)
Worin unterscheidet sich der strukturierte Walk-Through von der Inspektionssitzung?
- weniger Systematisch
- es werden Testfälle vorbereitet, analog durchgespielt und der Autor zu Entscheidungen der Programmlogik befragt
statische Analysatoren
- automatische Werkzeuge zur rechnergestützten Analyse von schematisch aufgebauten Dokumenten
- ergänzen Arbeit des Compilers (v.a. bei schwach getypten Programmiersprachen)
Welche Arten von Informationen können statische Programmanalysatoren erzeugen?
- lexikalische (Programmlänge, verwendete Programmkonstrukte)
- syntaktische (Kontrollfluss-, Aufruf-, Importgraphiken)
- semantische (Kontrollfluss-, Datenflussanalyse; Lebendigkeitsanalyse)
Vorteile von kontrollflussorientierten Testverfahren
- Schematische Konstruktion der Testfälle -> Testvorbereitung teilweise automatisierbar (Kontrollflussgraph, Pfadermittlung, etc.)
- Klare Testendekriterien (Überdeckungsgrad)
- Durch intensive Beschäftigung mit dem Prüfling zur Findung der Testfälle können schon vor dem eigentlichen Test Fehler gefunden werden
Wie hoch ist die Fehlererkennungsrate bei kontrollflussorientierten Tests?
Selbst bei hoher Überdeckungsrate wird selten eine Fehlererkennung von weit über 50% erreicht.
Welche Fehlertypen werden in erster Linie durch kontrollflussorientierte Verfahren gefunden?
- grobe Abbruchfehler
- unerreichbare Zweige
- Irrpfade
- endlose Schleifen
- unvollständige / inkonsistente Bedingungen
Welche Fehler werden durch kontrollflussorientierte Tests nicht zuverlässig aufgedeckt?
- Tippfehler
- Schnittstellenprobleme
- logische Fehler
- datenabhängige Fehler (z.B. Benutzung falscher / nicht definierter Variablen)
- u.U. Nichtberücksichtigung von in der Spezifikation implizierten, im Programm aber nicht berücksichtigten Sonderfällen
Vorteile von Black-Box-Testverfahren im Bezug auf die Tesfallkonstruktion
- Testfallkonstruktion vor Fertigstellung des Prüflings möglich; Testfälle auf mehrere Prüflinge mit gleicher Spezifikation anwendbar
- keine Überprüfung und Änderung der Testfälle für Regressionstests nötig
Vorteile von Black-Box-Testverfahren im Bezug auf die Fehleraufdeckung
- prüfen jeden von der Spezifikation vorgesehenen Fall ab, können daher auch Fehler durch fehlende Codeteile aufdecken
- bekannte Fehlerquellen können durch fehlerorientierte Verfahren berücksichtigt werden
Nachteile von Black-Box-Testverfahren
- fehlende Überdeckungsmaße: theoretisch können Codeteile ungeprüft bleiben
- Testfallkonstruktion wenig schematisch: u.U. willkürliche Resultate
- keine Testendekriterien
Welche Reihenfolge ist bei der Anwendung mehrerer Testverfahren sinnvoll?
Black-Box (funktionsorientiert) -> strukturorientiert