Qualitätssicherung von Software

Ähnliche Dokumente
Qualitätssicherung von Software (SWQS)

Software-Test: Strukturtest

5 Produktqualität Komponenten: Testende Verfahren 2 [stark gekürzt]

Qualitätssicherung von Software

Ein Werkzeug zur Überdeckungsmessung für kontrollflussbezogene Testverfahren

Software Engineering in der Praxis

Software Engineering in der Praxis

White-Box-Test. Black-Box-Test. Testen. Testen. Vorlesung Methoden des Software Engineering. Martin Wirsing. Einheit D.2,

Software-Test: Funktionstest

Methoden des Software Engineering

Whitebox-Tests: Allgemeines

Softwaretechnik II. Sommersemester Grundlagen des Softwaretestens II. Stefan Berlik

Test-Suite Beurteilung

Wiederholung. Testen. Tests nach Methode zum Ableiten der Testfälle White Box Test Black Box Test

Klausur Softwaretechnik I

8. Metriken. Idee von Maßsystemen Halstead live Variables Variablenspanne McCabe-Zahl LCOM*

Technische Universität Berlin SS

Software Engineering

Lernziele zum Kapitel 8

Einführung in die Informatik I

Strukturorientierter Softwaretest Erstellung eines Tools zur Überdeckungsmessung

5.3 Korrektheit und Verifikation

Qualitätssicherung von Software (SWQS)

Software Entwicklung 2. Softwaretest

2 Teil 2: Nassi-Schneiderman

Techniken im Software-Test

6 Systematisches Testen von Programmen

ASIL-relevante SW-Module identifiziert! Was nun?

Qualitätssicherung von Software

5.3 Korrektheit und Verifikation

Peter Liggesmeyer. Software-Qualität. Testen, Analysieren und Verifizieren von Software

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Vorlesung (WS 2014/15) Prof. Dr. Jan Jürjens

Kurs 1613 Einführung in die imperative Programmierung Musterlösung zur Nachklausur am

Elementare Konzepte von

Kontrollflußorientierte Testverfahren. Gliederung

5. Algorithmen. K. Bothe, Institut für Informatik, HU Berlin, GdP, WS 2015/16

Code Coverage mit gcov

Tag 3 Repetitorium Informatik (Java)

FACHHOCHSCHULE AUGSBURG Hochschule für Technik, Wirtschaft und Gestaltung

Ereignis-basierter Test grafischer Benutzeroberflächen ein Erfahrungsbericht

Software Engineering. Produktqualität - Dynamische Testverfahren

0/37. Software-Test. Andreas Zeller. Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken

(Aufgaben zu Wertzuweisungen siehe Vorlesungsbeilage S. 49)

6. Grundlagen der Programmierung

Statische Codeanalyse

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 10

Java Anweisungen und Ablaufsteuerung

Testen mit Use Cases. Chris Rupp Dr. Stefan Queins

Programmierkurs Java

4. Überdeckungstests

6. Tutorium zu Softwaretechnik I

Programmieren lernen mit Groovy Kollektionen: Listen und Abbildungen

Kapitel 5: Abstrakte Algorithmen und Sprachkonzepte. Elementare Schritte

Grundlagen der Theoretischen Informatik: Übung 10

Informatik I: Einführung in die Programmierung

Java Ablaufsteuerung (Beispiele)

if ( Logischer Operator ) { } else { Anweisungen false

Einführung in die Programmierung für NF. Rückgabewerte, EBNF, Fallunterscheidung, Schleifen

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. else

Algorithmen & Programmierung. Steuerstrukturen im Detail Selektion und Iteration

Software-Test: Funktionstest

DR. MICHAEL EICHBERG. Einführung in Software Eingineering

C++ OpenCppCoverage. Detlef Wilkening

Klausur: Informatik, am 11. Juli 2013 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Funktionales Testen. Software-Praktikum Andreas Zeller Universität des Saarlandes

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

4 Grundlagen von SQS-TEST/Professional New Line

Einstieg in die Informatik mit Java

Beispiel 1 zur Verifikation eines bedingten Anweisung. Hoare-Regel für die bedingte Anweisung. Beispiel 2 zur Verifikation eines bedingten Anweisung

C- Kurs 04 Anweisungen

UE Algorithmen und Datenstrukturen 1 UE Praktische Informatik 1. Übung 5. Asymptotische Laufzeitkomplexität Definition Regeln Beispiele

Klausur: Informatik, am 11. Juli 2013 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Transkript:

Qualitätssicherung von Software Prof. Dr. Holger Schlingloff Humboldt-Universität zu Berlin und Fraunhofer FIRST

2.3 strukturelle Tests 24.11.2004 Folie 2 Hinweis auf Umfrage wir, das Institut für Informatik der Humboldt- Universität, möchten mehr über Ihre Sorgen und Nöte im Studium herausfinden. Daher möchten wir Sie bitten, sich an der Umfrage zu beteiligen http://www.informatik.hu-berlin.de/fragebogen Studiendauer, Abbrecherquote: zu hoch? Wer sich nicht wehrt, lebt verkehrt! Abgabeendtermin ist der 3.12.2004

2.3 strukturelle Tests 24.11.2004 Folie 3 Kapitel 2. Testverfahren 2.1 Testen im SW-Lebenszyklus 2.2 funktionsorientierter Test! Modul- oder Komponententest! Integrations- und Systemtests 2.3 strukturelle Tests, Überdeckungsmaße 2.4 Test spezieller Systemklassen! Test objektorientierter Software! Test graphischer Oberflächen! Test eingebetteter Realzeitsysteme 2.5 automatische Testfallgenerierung 2.6 Testmanagement und administration

2.3 strukturelle Tests 24.11.2004 Folie 4 2.3 strukturelle (white box) Tests kontrollflussorientiert " Grundlage: Programmtext, Kontrollflussgraph oder ausführbares Modell " Testfall = Pfad durch den Graphen datenflussorientiert " Grundlage: Programmtext, Zugriffe auf Variablen bzw. Parameter " Paare von schreibendem und lesendem Zugriff! strukturelle Tests finden keine Auslassungsfehler!

2.3 strukturelle Tests 24.11.2004 Folie 5 Kontrollflussgraph void ZaehleZchn (int& VokalAnzahl, int& Gesamtzahl){ char Zchn; cin>>zchn; while ((Zchn>=`A ) && (Zchn<=`Z ) && (Gesamtzahl<INT_MAX)){ Gesamtzahl+=1; if ((Zchn==`A ) (Zchn==`E ) (Zchn==`I ) (Zchn==`O ) (Zchn==`U )){ VokalAnzahl +=1; cin>>zchn Beispiel: Liggesmeyer (f) / Balzert start n1 n2 n3 n4 n5 n6 ende

2.3 strukturelle Tests 24.11.2004 Folie 6 Kontrollflussorientierte Tests Überdeckungsmaße " Anweisungsüberdeckung " Zweigüberdeckung " Bedingungsüberdeckung - einfache Bedingungsüberdeckung - mehrfache Bedingungsüberdeckung - minimale Bedingungsüberdeckung " Pfadüberdeckung

Anweisungsüberdeckung auch C 0 -Test genannt (statement coverage) jede Anweisung muss durch mindestens einen Testfall erfasst werden Beispiel: (A,1) ergibt Pfad (start,n1,n2,n3,n4,n5,n6, n2,ende) Kante (n4,n6) wird nicht durchlaufen H. Schlingloff, Software-Qualitätssicherung void ZaehleZchn (int& VokalAnzahl, int& Gesamtzahl){ char Zchn; cin>>zchn; while ((Zchn>=`A ) && (Zchn<=`Z ) && (Gesamtzahl<INT_MAX)){ Gesamtzahl+=1; if ((Zchn==`A ) (Zchn==`E ) (Zchn==`I ) (Zchn==`O ) (Zchn==`U )){ VokalAnzahl +=1; cin>>zchn start 2.3 strukturelle Tests 24.11.2004 Folie 7 n1 n2 n3 n4 n5 n6 ende

2.3 strukturelle Tests 24.11.2004 Folie 8 Bewertung Anweisungsüberdeckung Oft ist vollständige Anweisungsüberdeckung das minimale Kriterium bei der Konstruktion einer Testsuite Überdeckungsgrad einer Testsuite: Prozentsatz der mindestens einmal ausgeführten Anweisungen (erstrebenswert: 100%) Minimum z.b. in DO-178B (ab Stufe C) oft als Überdeckungsmaß verwendet schwaches Kriterium (18% aufgedeckte Fehler) Beispiel: (x>5) statt (x>=5) wird nicht entdeckt

2.3 strukturelle Tests 24.11.2004 Folie 9 Zweigüberdeckung auch C 1 -Test genannt (branch coverage) jede Kante muss durch mindestens einen Testfall erfasst werden Beispiel: (A,B,1) ergibt Pfad (start,n1,n2,n3,n4,n5,n6,n2, n3,n4,n6,n2,ende) Überdeckungsgrad: Prozentsatz der durchlaufenen Kanten start n1 n2 n3 n4 n5 n6 ende

2.3 strukturelle Tests 24.11.2004 Folie 10 Bewertung Zweigüberdeckung subsumiert Anweisungsüberdeckung Schleifen werden ungenügend getestet (z.b. nur ein Mal durchlaufen) Problem der Gewichtung von Zweigen (Konvergenz der Überdeckungsrate mit Testfallanzahl, Fehleinschätzung) gut geeignet um logische Fehler zu finden, schlecht geeignet für Datenfehler Toolunterstützung durch Codeinstrumentierung

Übungsbeispiel int Fakultaet (int N){ if (N<0){ fak=-1 else if (N==0 N==1){ fak=1 else { fak=n; K=N-1; while(k<>0){ fak=fak*k; k=k-1 Fakultaet=fak; H. Schlingloff, Software-Qualitätssicherung (a) (b) fak=-1 j fak=1 (e) (f) Fakultaet=fak Stop (g) (c) Start N<0 N==0 N==1 fak=fak*k k=k-1 fak=n k=n-1 k<>0 2.3 strukturelle Tests 24.11.2004 Folie 11 j n (o) (m) (n) (d) n (h) (k) (l) (p) (j)

Bedingungsüberdeckung condition coverage test; Überprüfung der Entscheidungen im Programm Varianten: " einfache Bedingungsüberdeckung (C 2 ): Jede atomare Bedingung einmal wahr als auch einmal falsch " mehrfache Bedingungsüberdeckung (C 3 oder C 2 (M)): Kombinationen atomarer Bedingungen " minimale Mehrfachbedingungsüberdeckung: Jede Entscheidung im Flussdiagramm wahr oder falsch H. Schlingloff, Software-Qualitätssicherung void ZaehleZchn (int& VokalAnzahl, int& Gesamtzahl){ char Zchn; cin>>zchn; while ((Zchn>=`A ) && (Zchn<=`Z ) && (Gesamtzahl<INT_MAX)){ Gesamtzahl+=1; if ((Zchn==`A ) (Zchn==`E ) (Zchn==`I ) (Zchn==`O ) (Zchn==`U )){ VokalAnzahl +=1; cin>>zchn 2.3 strukturelle Tests 24.11.2004 Folie 12

2.3 strukturelle Tests 24.11.2004 Folie 13 einfache Bedingungsüberdeckung jede atomare Bedingung mindestens in einem Testfall wahr und in einem Testfall falsch Problem: Ausführung teilweise compilerabhängig! (unvollständige Bedingungsauswertung) Problem, Programmfluss zur Bedingung zu steuern (Abhängigkeit der Variablenwerte) Problem, Gesamtentscheidung zu beeinflussen manchmal kombiniert mit Zweigüberdeckung zur Bedingungs/Entscheidungsüberdeckung (condition/decision coverage)

2.3 strukturelle Tests 24.11.2004 Folie 14 Mehrfachbedingungsüberdeckung alle Variationen der atomaren Bedingungen garantiert Variation der Gesamtentscheidung exponentiell viele Möglichkeiten Problem: Abhängigkeit von Variablen! (z.b. (Zchn==`A ) (Zchn==`E )) kann nicht beides wahr sein) Problem: kein vernünftiges Überdeckungsmaß

2.3 strukturelle Tests 24.11.2004 Folie 15 minimale Mehrfachbedingungsüberdeckung Evaluation gemäß Formelstruktur (jede Teilformel einmal wahr und einmal falsch) zusammengesetzte Entscheidungen werden zusammenhängend beurteilt Problem: ((A&&B) C) wird durch (www) und (fff) vollständig überdeckt, aber nicht wirklich getestet Modifikation: zusätzlicher Nachweis, dass jede atomare Teilentscheidung relevant ist (z.b. durch positiven und negativen Testfall) z.b. für flugkritische Software erforderlich

2.3 strukturelle Tests 24.11.2004 Folie 16 Pfadüberdeckung Jeder Pfad durch den Kontrollflussgraphen Im Allgemeinen unendlich viele! (Überdeckungsmaß?) selbst falls endlich: sehr viele strukturierter Pfadtest: Äquivalenzklassen von Pfaden (ähnlich Grenzwertanalyse) " Schleife keinmal, einmal, mehr als zweimal ausgeführt (boundary oder interior condition) zusätzlich intuitiv ermittelte Testfälle Werkzeugunterstützung?

2.3 strukturelle Tests 24.11.2004 Folie 17 modifizierter boundary-interior Test (nach Liggesmeyer) alle Pfade die Schleifen nicht betreten Schleifen einmal ausführen, Unterschiede im Rumpf (aber nicht in eingeschachtelten Schleifen) werden berücksichtigt Schleifen zweimal ausführen, wie oben jede Schleife separat beurteilen alle Zweige berücksichtigen

2.3 strukturelle Tests 24.11.2004 Folie 18 Coverage Tools

2.3 strukturelle Tests 24.11.2004 Folie 19 Pause!

2.3 strukturelle Tests 24.11.2004 Folie 20 Datenflussorientierter Test Variablen und Parameter " Lebenszyklus: erzeugen (schreiben lesen*)* vernichten " computational use versus predicate use " Zuordnung von Datenflussattributen zu den Knotens des Kontrollflussgraphen Berechnung der Variablenzugriffe " für jeden Definitionsknoten n für Variable x die Mengen dcu(x,n) und dpu(x,n) aller Knoten, in der x (berechnend oder prädikativ) verwendet wird

2.3 strukturelle Tests 24.11.2004 Folie 21 attributierter Kontrollflussgraph void ZaehleZchn (int& VokalAnzahl, int& Gesamtzahl){ char Zchn; cin>>zchn; while ((Zchn>=`A ) && (Zchn<=`Z ) && (Gesamtzahl<INT_MAX)){ Gesamtzahl+=1; if ((Zchn==`A ) (Zchn==`E ) (Zchn==`I ) (Zchn==`O ) (Zchn==`U )){ VokalAnzahl +=1; cin>>zchn start n1 n2 n3 n4 n5 n6 ende def(vokalanzahl) def(gesamtzahl) def(zchn) p-use(zchn), p-use(gesamtzahl) c-use(gesamtzahl) def(gesamtzahl) p-use(zchn) c-use(vokalazahl) def(vokalanzahl) def(zchn) c-use(vokalazahl) c-use(gesamtzahl)

2.3 strukturelle Tests 24.11.2004 Folie 22 Defs/Uses-Kriterien zur Testabdeckung Testfallerzeugung " berechne Pfade zwischen Definition und Verwendung " ungenutzte Definitionen markieren Fehler Kriterien " all defs: Jeder Pfad von einer Definition zu mindestens einer Verwendung enthalten " all p-uses: Jeder Pfad von einer Definition zu irgendeiner prädikativen Verwendung - subsumiert Zweigüberdeckung " all c-uses: analog, zu computational use " all c-uses/some p-uses: jede berechnende oder mindestens eine prädikative Verwendung " all uses: jede Verwendung " du-paths: Einschränkung auf wiederholungsfreie Pfade

2.3 strukturelle Tests 24.11.2004 Folie 23 Datenkontexte Ein Datenkontext für einen Knoten ist eine Menge von Knoten, die für jede der im Knoten verwendeten Variablen eine Definition enthalten Datenkontext-Überdeckung: Alle Datenkontexte müssen vorkommen, d.h. jede Möglichkeit, den Variablen Werte zuzuweisen ggf. zusätzlich Berücksichtigung der Definitionsreihenfolge y = y = z = x = y+z

2.3 strukturelle Tests 24.11.2004 Folie 24 Diskussion Datenflussüberdeckung Mächtiger als Kontrollflussverfahren Besonders für objektorientierte Programme all c-uses besser als all p-uses besser als alldefs Werkzeugunterstützung essenziell wenig Werkzeuge verfügbar

2.3 strukturelle Tests 24.11.2004 Folie 25 Bewertung strukturelle Tests Auslassungsfehler (auch: fehlende Ausnahmebehandlung usw.) prinzipiell nicht erfasst Konstruktion von Testfällen kann beliebig schwierig sein dead code (der nie ausgeführt werden kann) wird normalerweise entdeckt Toolunterstützung Möglichkeit der Code-Optimierung durch Testergebnisse (häufig durchlaufene Programmteile verbessern); aber: Regressionstest erforderlich! Literaturempfehlung: How to Misuse Code Coverage; Brian Marick; http://www.testing.com/writings/coverage.pdf

2.3 strukturelle Tests 24.11.2004 Folie 26 Hausaufgabe Erstellen Sie Testsuiten, die die datenflussorientierten Abdeckungskriterien erfüllen! Wie unterscheiden sich die Testsuiten von den kontrollflussorientierten Testabdeckungen?