www.wikidata.de-de.nina.az
Die kontrollflussorientierten Testverfahren auch Uberdeckungstests genannt gehoren zu der Gruppe der strukturorientierten Testmethoden Zusammenhang verschiedener kontrollflussgraphorientierter Testverfahren Die kontrollflussorientierten Testverfahren orientieren sich am Kontrollflussgraphen des Programms Es handelt sich bei diesen Tests um White Box Testverfahren das heisst die Struktur des Programms muss bekannt sein Die einzelnen Testverfahren werden mit Cx bezeichnet wobei das C fur Coverage steht was so viel heisst wie die Abdeckung oder die Gesamtheit der ausgewerteten Informationen Inhaltsverzeichnis 1 Nomenklaturen 2 Die unterschiedlichen Testarten 2 1 Zeilenuberdeckungstests 2 1 1 Vorteile 2 1 2 Nachteile 2 2 C0 Anweisungsuberdeckungstest Statement Coverage 2 2 1 Metrik Messung 2 2 2 Vorteil 2 2 3 Nachteil 2 2 4 Beispiel mit Quellcode 2 2 5 Beispiel mit Kontrollflussgraphen 2 3 C1 Zweiguberdeckungstest Branch Coverage 2 3 1 Allgemein 2 3 2 Metrik 2 3 3 Vorteile 2 3 4 Nachteile 2 3 5 Beispiele 2 4 C2 Pfaduberdeckungstest Path Coverage 2 4 1 Ubersicht 2 4 2 C2a vollstandiger Pfaduberdeckungstest 2 4 3 C2b Boundary Interior Pfaduberdeckungstest 2 4 3 1 Boundary Test 2 4 3 2 Interior Test 2 4 4 C2c Strukturierter Pfaduberdeckungstest 2 4 5 Beispiel 2 5 C3 Bedingungsuberdeckungstest Condition Coverage 2 5 1 C3a Einfachbedingungsuberdeckungstest 2 5 2 C3b Mehrfachbedingungsuberdeckungstest 2 5 3 C3c minimaler Mehrfachbedingungsuberdeckungstest 2 5 4 Vorteil 2 5 5 Nachteil 2 5 6 Bewertung 3 Zusammenfassung 4 Bewertung 5 Siehe auch 6 Literatur 7 WeblinksNomenklaturen BearbeitenEs gibt mehrere zueinander sehr ahnlich aussehende aber in der Bedeutung unterschiedliche Bezeichnungsarten Beginnt die Bezeichnung mit kleinen c siehe Harry M Sneed Mario Winter Testen objektorientierter Software Hanser Verlag ISBN 3 446 21820 3 Beginnt die Bezeichnung mit einem grossen C und steht die nun folgende Ziffer auf der Grundlinie wie das C z B C4 Ernest Wallmuller Software Qualitatssicherung in der Praxis Hanser Verlag Beginnt die Bezeichnung mit einem grossen C und ist die folgende Ziffer ein Subskript zum Beispiel C1 liegt also unterhalb der Grundlinie siehe Standard DO 178B Die IEC 61508 Teil 7 und die davon abgeleiteten Anhange der EN 50128 verwenden keine Abkurzungen fur diese Metriken Die unterschiedlichen Testarten BearbeitenZeilenuberdeckungstests Bearbeiten Noch vor der Hierarchie der Cx Testverfahren steht die von vielen Werkzeugen in der Softwareentwicklung bereitgestellte Zeilenuberdeckungskennzahl Sie ist etwas unscharfer als C0 orientiert sich auch nicht direkt am Kontrollflussgraph kann aber oft direkt aus den Informationen gewonnen werden die Debugger ohnehin liefern Bei der Zeilenuberdeckung werden nicht die Anweisungen betrachtet sondern nur die ausfuhrbaren Quellcodezeilen Beliebig viele Testfalle fur if false print abgedeckt wurden zu einer Zeilenuberdeckung von 100 fuhren wahrend es fur das syntaktisch und semantisch identische aber anders formatierte Programm if false print abgedeckt nur zu einer Zeilenuberdeckung von 50 fuhrt In der Regel sind die Unterschiede in der praktischen Anwendung allerdings nicht relevant da durch andere Massnahmen in der Softwareentwicklung wie Kodierungsrichtlinien engl style guides eine weitgehende Homogenisierung der Quellcodeformatierung vorliegt Vorteile Bearbeiten siehe C0 einfachere technische Implementierung uber die von Debuggern gelieferten ZeilennummernNachteile Bearbeiten keine Standardmetrik wie C0 liefert bei syntaktisch identischen Programmen je nach Formatierung unterschiedliche WerteC0 Anweisungsuberdeckungstest Statement Coverage Bearbeiten nbsp Zur Anweisungsuberdeckung genugt es alle Anweisungen rot im Kontrollflussgraphen einmal zu testen Anweisungsuberdeckungstests auch C0 Test genannt testen jede Anweisung mindestens ein Mal Wurde jede Anweisung in einem Programm mindestens einmal ausgefuhrt spricht man von vollstandiger Anweisungsuberdeckung Wurde vollstandige Anweisungsuberdeckung erreicht dann steht fest dass kein toter Code Anweisungen die niemals durchlaufen werden im Programm existiert Anweisungsuberdeckungstests werden selten als Haupttestwerkzeug in einem Vollstandigkeitstest eingesetzt denn dafur sind sie in der Regel zu schwach Metrik Messung Bearbeiten Der Anweisungsuberdeckungsgrad bestimmt sich wie folgt C 0 Anzahl der durchlaufenen Anweisungen Gesamtanzahl der Anweisungen 100 displaystyle C text 0 frac text Anzahl der durchlaufenen Anweisungen text Gesamtanzahl der Anweisungen cdot 100 quad nbsp Vorteil Bearbeiten Die Anweisungsuberdeckung bietet folgende Vorteile sie deckt nicht erreichbare Anweisungen im Quellcode auf Anweisungsuberdeckung ist im Vergleich zu anderen Uberdeckungsmassen schnell zu erreichenNachteil Bearbeiten Die Anweisungsuberdeckung sollte jedoch nicht als alleiniges Testkriterium verwendet werden denn Anweisungsuberdeckung wertet jede Anweisung im Quellcode gleichgewichtig bei Steuerstrukturen Schleifen Bedingungen werden die Datenabhangigkeiten nicht beachtet und leere Zweige werden nicht entdecktBeispiel mit Quellcode Bearbeiten Gegeben sei folgender Quellcode z wird das Doppelte des grosseren Werts von x oder y zugewiesen int z x if y gt x z y z 2 In diesem Fall genugt ein einziger Testfall um eine vollstandige Anweisungsuberdeckung zu erreichen zum Beispiel x 0 y 2 Falls y nicht grosser als x ist wird z y nicht ausgefuhrt und die vollstandige Anweisungsuberdeckung wird nicht erreicht Um alle Verzweigungen if und else einmal zu testen sollte die Zweiguberdeckung als Testkriterium verwendet werden Beispiel mit Kontrollflussgraphen Bearbeiten Gegeben sei folgender Kontrollflussgraph nbsp Fur diesen Kontrollflussgraphen kann die Anweisungsuberdeckung mit einem Testfall erreicht werden Start 1 2 3 4 5 Stopp C1 Zweiguberdeckungstest Branch Coverage Bearbeiten nbsp ZweiguberdeckungstestAllgemein Bearbeiten Der Zweiguberdeckungstest C1 Test auch Kantenuberdeckung Entscheidungsuberdeckungstest Branch oder Edge Coverage genannt umfasst den Anweisungsuberdeckungstest vollstandig Fur den C1 Test mussen strengere Kriterien erfullt werden als beim Anweisungsuberdeckungstest Im Bereich des kontrollflussorientierten Testens wird der Zweiguberdeckungstest als Minimalkriterium angewendet Mit Hilfe des Zweiguberdeckungstests lassen sich nicht ausfuhrbare Programmzweige aufspuren Anhand dessen kann man dann Softwareteile die oft durchlaufen werden gezielt optimieren Analog zum Anweisungsuberdeckungstest wird um die Codeabdeckung messbar zu machen der Code in unten stehender Abbildung durch eine boolesche Hilfsvariable test instrumentiert Im Gegensatz zum Anweisungsuberdeckungstest durchlauft der Zweiguberdeckungstest alle Zweige Der Zweiguberdeckungstest wird auch Entscheidungsuberdeckungstest genannt da die Hilfsvariable mindestens einmal mit dem Wert true und false durchlaufen werden muss In diesem Fall muss die While Schleife mindestens zweimal durchlaufen werden Mit dem Durchlaufen der Zweige wird auch sichergestellt dass jeder Knoten Anweisung mindestens einmal ausgefuhrt wird Somit wird auch das Kriterium fur den Anweisungsuberdeckungstest erfullt Daher subsumiert der Zweiguberdeckungstest den Anweisungsuberdeckungstest Schwierig ist es fur den Zweiguberdeckungstest Testfalle zu generieren wo Betriebssystemzustande oder Dateikonstellationen getestet werden mussen Weiterhin ist diese Technik des Testens zum Testen von Schleifen und zusammengesetzter Entscheidungen nicht geeignet da weder Kombinationen von Zweigen noch kompliziert aufgebaute Entscheidungen in Betracht gezogen werden konnen Hierfur mussen Erweiterungen herangezogen werden Die Zyklomatische Komplexitat gibt an wie viele Testfalle hochstens notig sind um eine Zweiguberdeckung zu erreichen Weitaus problematischer erweist sich das Zweiguberdeckungsmass In dem Fall dass alle Knoten gleich bewertet sind verzichtet man auf die Betrachtung der Abhangigkeiten untereinander Dadurch entsteht kein linearer Zusammenhang zwischen der erreichten Uberdeckungsrate und dem Verhaltnis zwischen der Anzahl der dazu benotigten Testfalle und der eigentlichen Anzahl der Testfalle die fur die 100 prozentige Zweiguberdeckung notwendig sind Um den Zweiguberdeckungstest zu verbessern wird ein Zweig der abhangig von einem anderen Zweig ist nicht weiter berucksichtigt Die Zweige die nicht abhangig sind werden als primitiv bezeichnet Metrik Bearbeiten Daher ergibt sich fur das Uberdeckungsmass C primitiv Anzahl der ausgefuehrten primitiven Zweige Anzahl aller primitiven Zweige x 100 displaystyle C text primitiv frac text Anzahl der ausgefuehrten primitiven Zweige text Anzahl aller primitiven Zweige x100 nbsp Vorteile Bearbeiten Deckt nicht erreichbare Zweige auf Fehlerentdeckungsrate bei ca 33 Ein Funftel davon sind Berechnungsfehler der Rest sind Steuerflussfehler Nachteile Bearbeiten Abhangigkeiten zwischen Bedingungen werden nicht berucksichtigt Schleifen werden nur unzureichend getestet siehe Pfaduberdeckungstest komplexe Verzweigungsbedingungen werden nur schwach getestetBeispiele Bearbeiten Gegeben sei folgender Quellcode z wird das Doppelte des grosseren Werts von x oder y zugewiesen int z x if y gt x z y z 2 Im Gegensatz zum Anweisungsuberdeckungstest ist nun mehr als ein Testfall notwendig um eine 100 ige Zweiguberdeckung zu erreichen da sowohl der Fall fur den durchlaufenen If Zweig als auch der Fall fur den nicht durchlaufenen If Zweig uberpruft werden muss Testfall 1 x 0 y 2 Testfall 2 x 2 y 0Wie auch im Anweisungsuberdeckungstest sind verschiedene Testfalle moglich die das geforderte Kriterium erfullen Nach Ausfuhrung stellt sich heraus dass das Ergebnis bei beiden Testfallen der Spezifikation entspricht und der Test somit bestanden ist Ein weiteres Beispiel Gegeben sei folgender Kontrollflussgraph nbsp Eine Zweiguberdeckung ist Start 1 2 3 4 5 Stopp Start 1 3 5 Stopp C2 Pfaduberdeckungstest Path Coverage Bearbeiten Beim Pfaduberdeckungstest auch C2 Test bzw englisch path coverage werden im Kontrollflussgraphen die moglichen Pfade vom Startknoten bis zum Endknoten betrachtet Ubersicht Bearbeiten C2a vollstandiger Pfaduberdeckungstest C2b Boundary Interior Pfaduberdeckungstest C2c Strukturierter PfaduberdeckungstestC2a vollstandiger Pfaduberdeckungstest Bearbeiten Es werden alle moglichen Pfade getestet Problem Bei Programmen mit Schleifen kann es extrem viele Pfade geben C2b Boundary Interior Pfaduberdeckungstest Bearbeiten Im Prinzip wie der C2a Test nur dass nun die Schleifendurchlaufe auf hochstens zwei reduziert werden Fur jede Schleife gibt es zwei Gruppen von Pfaden Boundary Test Bearbeiten Jede Schleife wird keinmal und genau einmal betreten und alle Pfade in dem Schleifenkorper werden einmal abgearbeitet Interior Test Bearbeiten Das Schleifeninnere gilt als getestet wenn alle Pfade die bei zweimaligem Durchlaufen moglich sind abgearbeitet wurden C2c Strukturierter Pfaduberdeckungstest Bearbeiten Im Prinzip wie der C2b Test nur dass nun die Anzahl der Schleifendurchlaufe auf eine vorgegebene naturliche Zahl n reduziert wird Vorteil Hohe FehlererkennungsrateNachteil nicht ansprechbare Pfade auf Grund von BedingungenBeispiel Bearbeiten Gegeben sei folgender Kontrollflussgraph nbsp Eine Pfaduberdeckung ist Start 1 2 3 4 5 Stopp Start 1 3 5 Stopp Start 1 3 4 5 Stopp Start 1 2 3 5 Stopp C3 Bedingungsuberdeckungstest Condition Coverage Bearbeiten nbsp BedingungsuberdeckungstestDas Problem der bisherigen Uberdeckungstests C1 Test C2 Test ist dass zusammengesetzte hierarchische Bedingungen nicht ausreichend getestet werden C3a Einfachbedingungsuberdeckungstest C3b Mehrfachbedingungsuberdeckungstest C3c minimaler Mehrfachbedingungsuberdeckungstest BewertungC3a Einfachbedingungsuberdeckungstest Bearbeiten Jede atomare Bedingung einer Entscheidung muss einmal mit true und einmal mit false getestet werden Beispiel boolean a b if a b Eine minimale Testfallmenge die die Einfachbedingungsuberdeckung erfullt ist a false b false a true b true C3b Mehrfachbedingungsuberdeckungstest Bearbeiten Dieser Test betrachtet alle atomaren Bedingungen einer Bedingung Wenn n atomare Bedingungen in der Bedingung stehen dann werden 2 n displaystyle 2 n nbsp Kombinationen gebildet Das heisst fur das obige Beispiel dass 4 Testfalle gebildet werden C3c minimaler Mehrfachbedingungsuberdeckungstest Bearbeiten Diese Version erstellt mehr Testfalle als C3a und weniger als C3b indem jede Bedingung atomar und zusammengestellt zu true und zu false evaluiert wird Die logische Struktur wird hierbei berucksichtigt und der C1 Test Zweiguberdeckungstest ist vollstandig in diesem Test enthalten Ein weiterer Punkt ist dass der C3c Test berechenbar ist Im obigen Beispiel wird somit der Testfall a false b true oder a false b false gewahlt da andernfalls die logische Struktur bereits bei der ersten Teilbedingung abbricht Vorteil Bearbeiten Hohe FehlererkennungsrateNachteil Bearbeiten nicht ansprechbare Pfade auf Grund von BedingungenBewertung Bearbeiten Unvollstandige Auswertung einer Bedingung durch eine Programmiersprache mit sog short circuit evaluation wie zum Beispiel C C Java C Beispiel if a amp amp b else Lies b aus Wenn a false ist dann ist die Belegung der Variable b egal Zum Beispiel a false und b null dann passiert ein Fehler im else ZweigZusammenfassung BearbeitenKurzname erfullte Bedingung DurchfuhrbarkeitAnweisungsuberdeckungstest C0 jede Anweisung wird mindestens einmal ausgefuhrt relativ einfachZweiguberdeckungstest C1 jede Kante im Kontrollflussgraph KFG wird mindestens einmal durchlaufen realistische Mindestanforderung vertretbarer AufwandPfaduberdeckungstest C2Vollstandig C2a Alle moglichen Pfade werden durchlaufen unmoglich bei SchleifenBoundary Interior C2b wie C2a Schleifen werden jedoch nach speziellen Regeln durchlaufen aufwendigStrukturiert C2c wie C2b Schleifen werden jedoch genau n mal durchlaufen aufwendigBedingungsuberdeckungstest C3Einfachbedingung C3a jede atomare Bedingung wird einmal mit true und false getestetMehrfachbedingung C3b jede true false Kombination der atomaren Bedingungen wird getestet sehr hoher AufwandMinimale Mehrfachbedingung C3c jede atomare Bedingung und die Gesamtbedingung wird mit true und false getestet hoher AufwandBewertung BearbeitenDie Qualitat eines Tests hangt entscheidend vom gewahlten Test ab Wurde nur nach C0 mit Uberdeckungsgrad 100 getestet so ist dies trotzdem kein verlasslicher Indikator fur eine fehlerfreie Software Wurde hingegen mit C2 auf 100 getestet wurde dies ein gutes Kriterium fur eine fehlerfreie bzw arme Software darstellen Leider wird dieser Test wegen der kombinatorischen Explosion in der Praxis nur fur sicherheitskritische Software zum Beispiel Luftfahrt durchgefuhrt Die zweite wichtige Grosse ist der Uberdeckungsgrad Dieser ist aber nur bei Verwendung des gleichen Tests untereinander vergleichbar Bei einem hohen Uberdeckungsgrad werden mehr Fehler gefunden als bei einem niedrigen Siehe auch BearbeitenKontrollflussgraph Softwaremetrik TestabdeckungLiteratur BearbeitenHelmut Balzert Lehrbuch der Software Technik Spektrum Verlag 2008 ISBN 978 3 8274 1161 7 Andreas Spillner Tilo Linz Basiswissen Softwaretest dpunkt Verlag 2005 ISBN 3 89864 358 1 Harry M Sneed Mario Winter Testen objektorientierter Software Hanser Verlag 2002 ISBN 3 446 21820 3 Ernest Wallmuller Software Qualitatssicherung in der Praxis Hanser Verlag 2001 ISBN 3 446 21367 8 Weblinks Bearbeitenchristian grafe de Seminararbeit uber die Thematik Grundlagen dieser Seite PDF Datei 511 kB christian grafe de PowerPoint Vortrag uber die Verfahren und theoretische Grundlagen informatik hu berlin de Prof Dr Holger Schlingloff Fraunhofer Ges FIRST Uberdeckungen PDF Datei 337 kB bullseye com Steve Cornett Code Coverage Analysis rtca org DO 248B Final Annual Report For Clarification Of DO 178B Software Considerations In Airborne Systems And Equipment Certification verifysoft com PDF 920 kB Professor Dr D Fischer Code Coverage auf Embedded Systemen Abgerufen von https de wikipedia org w index php title Kontrollflussorientierte Testverfahren amp oldid 234780809 Pfaduberdeckungstest