www.wikidata.de-de.nina.az
Ein Modultest auch von englisch unit test als Unittest oder als Komponententest bezeichnet ist ein Softwaretest mit dem einzelne abgrenzbare Teile von Computerprogrammen z B ausgewahlte Codeabschnitte Module Unterprogramme Units oder Klassen uberpruft werden Testziel dieser haufig durch den Softwareentwickler selbst durchgefuhrten Softwaretests ist deren technische Lauffahigkeit und die Korrektheit ihrer fachlichen Teil Ergebnisse nachzuweisen Der Ausdruck Modultest wird auch als eine fruhe Teststufe verstanden 1 in der die inneren detailliertesten Komponenten der Software getestet werden Siehe dazu auch die Grafik Stufen des V Modells im Vorgehensmodell nach Barry Boehm Gemass Software Validation amp Verification Plan sind Modultests nur fur Module mit geringer Kritikalitat die bei Fehlern den Benutzern nur geringe Unannehmlichkeiten bereiten nicht notwendig Inhaltsverzeichnis 1 Einordnung im Testprozess 2 Verfahren zur Testfalldefinition 3 Verfahren zum Erstellen von Modultests 4 Eigenschaften von Modultests 4 1 Isolierung von Testobjekten 4 2 Test des Vertrages und nicht der Algorithmen 5 Automatisierte Modultests 6 Vorteile 7 Nachteile 8 Grenzen von Modultests 9 Siehe auch 10 Literatur 11 Weblinks 12 EinzelnachweiseEinordnung im Testprozess Bearbeiten Hauptartikel Softwaretest Da Algorithmen auf Unitebene meist nur eine begrenzte Komplexitat aufweisen und uber klar definierte Schnittstellen aktiviert werden konnen sie mit relativ wenigen Testfallen weitgehend vollstandig getestet werden Dies gilt als Voraussetzung fur die anschliessende Teststufe Integrationstest um dort die Testfalle auf das integrierte Zusammenwirken grosserer Funktionsteile oder der gesamten Anwendung ausrichten zu konnen die modulspezifischen Detailkonstellationen lassen sich damit dort auf Stichproben beschranken was die Anzahl der erforderlichen Testfalle drastisch reduziert Zum Vergleich Ein Gerat wird erst dann als Ganzes getestet wenn die Funktionsfahigkeit seiner Einzelteile als gesichert gilt Verfahren zur Testfalldefinition BearbeitenModultests zahlen zu den White Box Tests Das heisst dass bei der Definition der Testfalle der zu testende Quellcode bekannt ist Die Spezifikation der Software wird lediglich fur die Bestimmung der Soll Ergebnisse benutzt Prinzipiell mussen alle Quellcode Teile mindestens einmal ausgefuhrt werden Anweisungsuberdeckung Zweiguberdeckung oder Pfaduberdeckung konnen dabei helfen festzustellen welche Testfalle hierzu in der Theorie mindestens erforderlich sind siehe dazu Kontrollflussorientierte Testverfahren In der Praxis versucht man in aller Regel das gesetzte Uberdeckungsziel mit moglichst wenigen Testfallen zu erreichen da alle Modultests auch laufend gepflegt werden mussen Verfahren zum Erstellen von Modultests BearbeitenUblicherweise orientieren sich alle Modultests an einem einheitlichen Grundaufbau Dabei wird zunachst 1 ein Ausgangszustand initialisiert hierauf 2 die zu testende Operation ausgefuhrt und zuletzt 3 das Ist Ergebnis mit einem aus der Spezifikation abgeleiteten Sollwert verglichen Fur diese Vergleiche stellen die Test Frameworks assert Methoden deutsch etwa feststellen versichern zur Verfugung Eigenschaften von Modultests BearbeitenIsolierung von Testobjekten Bearbeiten Modultests testen ein Modul isoliert d h weitgehend ohne Interaktion mit anderen Modulen Deshalb mussen oder konnen bei Modultests andere Module beziehungsweise externe Komponenten wie etwa eine Datenbank Dateien Backendsysteme oder Unterprogramme durch Hilfsobjekte simuliert werden soweit das zu testende Modul Prufling oder Testobjekt dies erfordert Dazu einsetzbare Hilfsobjekte lassen sich im Wesentlichen danach unterscheiden 1 ob sie ein aufzurufendes Modul ersetzen Prufling ist das aufrufende Modul das Ersatzobjekt wird Stub genannt ob sie den Aufruf die Umgebung eines zu testenden Moduls Unterprogramms ersetzen Prufling ist die Unterroutine die den Aufruf simulierende Routine wird Driver genannt Wie vollstandig die Hilfsroutine das Verhalten des Originals abbildet etwa bei Plausibilitatsprufungen oder bei der Ruckgabe von Antwortcodes ist durch entsprechendes Testfalldesign zu berucksichtigen Besonders in objektorientierten Programmiersprachen lassen sich diesbezuglich weitere detailliertere Kategorien von Hilfsobjekten unterscheiden siehe Mock Objekt Derartige Hilfsobjekte werden z B als Stellvertreter implementiert und mittels Inversion of Control bereitgestellt Ein Modul kann so meist einfacher getestet werden als wenn alle Module bereits integriert sind da in diesem Fall die Abhangigkeit der Einzelmodule mit in Betracht gezogen und im Testhandling berucksichtigt werden musste Auch sind derart isolierte Modultests schon moglich wenn andere eigentlich benotigte Komponenten fur den Test noch nicht verfugbar sind Vollstandige Tests mit allen Komponenten in ihrer Originalversion sind Gegenstand der spater stattfindenden Integrations und Systemtests wobei ggf im Modultest nicht erkannte Fehler z B wegen identischer Falschannahmen fur das Testobjekt und die Hilfsroutine entdeckt werden sollten Test des Vertrages und nicht der Algorithmen Bearbeiten Modultests testen gemass dem Design by contract Prinzip moglichst nicht die Interna einer Methode sondern nur ihre externen Auswirkungen Ruckgabewerte Ausgaben Zustandsanderungen Zusicherungen Werden die internen Details der Methode gepruft dies wird als White Box Testing bezeichnet konnte der Test fehlschlagen obwohl sich die externen Auswirkungen nicht geandert haben Daher wird in der Regel das sogenannte Black Box Testing empfohlen bei dem man sich auf das Prufen der externen Auswirkungen beschrankt Automatisierte Modultests BearbeitenMit der Verbreitung von agilen Softwareentwicklungsmethoden und insbesondere testgetriebener Entwicklung ist es ublich geworden Modultests moglichst automatisiert auszufuhren Dazu werden ublicherweise mit Hilfe von Test Frameworks wie beispielsweise JUnit Testprogramme geschrieben Uber die Test Frameworks werden die einzelnen Testklassen aufgerufen und deren Komponententests ausgefuhrt Die meisten Test Frameworks geben eine grafische Zusammenfassung der Testergebnisse aus Automatisierte Modultests haben den Vorteil dass sie einfach und kostengunstig ausgefuhrt und dass neue Programmfehler schnell gefunden werden konnen Vorteile BearbeitenMittels automatisierter Unittests konnen im Schnitt 30 der Fehler erkannt werden 2 Bei der Verwendung von testgetriebener Entwicklung konnen im Schnitt 45 und im besten Fall 85 der Fehler vermieden werden 3 Fehler werden durch Modultests bereits wahrend der Entwicklung erkannt Die durch Unittests vermiedenen Fehlerkosten sind daher gemass der Rule of Ten 4 um ein vielfaches hoher als bei spateren Teststufen was Unittests zur effizientesten Teststufe machen Im Falle eines Fehlers kann dieser sehr viel genauer eingegrenzt und damit schneller gefunden und behoben werden Die Tests erfullen den Zweck einer lebenden Dokumentation In Kombination mit einer sinnvollen Benennung der Objekte Clean Code konnen zusatzliche Dokumentationsmassnahmen entfallen Da einzelne Module nur wenige mogliche Codeausfuhrungspfade besitzen mussen viel weniger mogliche kombinatorische Ausfuhrungspfade berucksichtigt werden als bei anderen Testarten Ubergeordnete Tests konnen sich stichprobenartig auf die wichtigsten Ausfuhrungspfade konzentrieren und damit deutlich reduziert werden Da nur einzelne Module getestet werden konnen Modultests oft um mehrere Grossenordnungen schneller und damit ofter bzw kontinuierlich ausgefuhrt werden als andere Testarten Wenn Fehler mit einem Test abgesichert werden wird verhindert dass dieser Fehler erneut auftritt Durch die Fehlerreduktion ergeben sich Geschwindigkeitsvorteile in der Entwicklung in mittleren bis grossen Softwareprojekten Da Abhangigkeiten zwingend vermieden werden mussen um einen Modultest zu ermoglichen bleibt der Code verhaltnismassig schnell anderbar Hierdurch kann schneller auf wechselnde Anforderungen reagiert werden Da automatisch ausgefuhrte Tests um mehrere Grossenordnungen schneller sind als manuelle Tests reduziert sich der Zeitaufwand fur das Testen deutlich Hierdurch konnen Entwicklungsstufen schneller durchlaufen und die Release Zyklen verkurzt werden Nachteile BearbeitenBei Implementierung neuer Funktionalitat muss nicht nur die Funktion implementiert sondern es mussen auch die dazugehorenden Tests vorbereitet definiert werden Es ergibt sich somit ein oft mehrfacher Implementierungsaufwand Bei Anderungen mussen nicht nur die geanderten Funktionalitaten sondern auch die dazugehorenden Tests angepasst werden Insbesondere bei der Entwicklung von Prototypen bei der sich die Codebasis schnell verandert ist das Testen daher oft hinderlich Da die Funktionalitat von den Tests verwendet wird ist in IDEs schwerer ersichtlich ob eine Funktionalitat nicht mehr anderweitig verwendet wird und daher entfernt werden kann Weisen die Tests untereinander Abhangigkeiten auf z B durch gemeinsame Testdaten so konnen einzelne Anderungen an der Codebasis eine Vielzahl von Tests beeinflussen was den Anderungsaufwand mit der Grosse der Codebasis exponentiell erhoht Grenzen von Modultests Bearbeiten nbsp Dieser Artikel oder nachfolgende Abschnitt ist nicht hinreichend mit Belegen beispielsweise Einzelnachweisen ausgestattet Angaben ohne ausreichenden Beleg konnten demnachst entfernt werden Bitte hilf Wikipedia indem du die Angaben recherchierst und gute Belege einfugst Modultests konnen wie jeder Test die Fehlerfreiheit des getesteten Moduls nicht garantieren oder nachweisen sondern lediglich unterstutzen Die Grenzen von Modultests liegen notwendigerweise darin dass nur solche Fehler gefunden werden konnen zu deren Entdeckung die verwendeten Tests geeignet sind Eine Softwarekomponente die grun testet ist also nicht unbedingt fehlerfrei Das Merkmal von Code grun zu testen und durchaus auch der Wunsch nach diesem Ergebnis konnte dazu fuhren dass tatsachlich unbewusst nur so viel getestet wird bis alle Tests grun sind Module die keine fehlschlagenden Modultests haben als fehlerfrei zu behandeln ist ein Fehlschluss in der Praxis testgetriebener Entwicklung Um eine ausreichende Testabdeckung zu erzielen lohnt es sich u U vor dem Erstellen der Testfalle Refactoring Massnahmen anzuwenden Dies erst nach abgeschlossenen Modultests fur den alten Code zu tun wurde wie jede Anderung im Code neue Fehlerrisiken bergen und deshalb wiederholtes Testen erforderlich machen Wenn der Autor von Modultests mit dem Autor der Module identisch ist konnen Denkfehler in der Implementierung auch im Test erscheinen und nicht aufgedeckt werden Wenn es sich um dieselbe Person handelt wird dies auch nicht dadurch ausgeschlossen dass die Tests zuerst entwickelt werden da sowohl die beabsichtigte Funktionsweise des Codes als auch seine zukunftige Gestalt bereits im Denken des Testautors und spateren Codeautors prasent sein konnen Dies kann im Extreme Programming durch Test Ping Pong abgefangen werden bei der sich Entwickler bei der Implementierung der Funktionalitat und der Tests abwechseln Bei der Entwicklung von Modultests konnen Testfalle entstehen die der Zielsetzung und dem Charakter von Modultests nicht oder nur zum Teil entsprechen Wie bei der Programmierung existieren daher auch fur die Entwicklung von Modultests Anti Pattern die moglichst vermieden werden sollten 5 Siehe auch BearbeitenListe von Modultest Software Testgetriebene Entwicklung Verhaltensgetriebene SoftwareentwicklungLiteratur BearbeitenPaul Hamill Unit Test Frameworks A Language Independent Overview O Reilly Media Beijing u a 2004 ISBN 0 596 00689 6 englisch Gerard Meszaros xUnit Test Patterns Refactoring Test Code Addison Wesley Upper Saddle River NJ u a 2007 ISBN 978 0 13 149505 0 englisch Andreas Spillner Tilo Linz Basiswissen Softwaretest Aus und Weiterbildung zum Certified Tester Foundation Level nach ISTQB Standard 4 uberarbeitete und aktualisierte Auflage dpunkt Verlag Heidelberg 2010 ISBN 978 3 89864 642 0 Weblinks BearbeitenLinkkatalog zum Thema Unit Testing bei curlie org ehemals DMOZ englisch Einfuhrung in die Prinzipien von Unit Tests Entwicklung von Modul Tests mit Beispielen Autor Markus Lenger in Informatik Aktuell Magazin Artikel zum Thema Komponententests unter Java englisch Einzelnachweise Bearbeiten a b Martin Pol Tim Koomen Andreas Spillner Management und Optimierung des Testprozesses Ein praktischer Leitfaden fur erfolgreiches Testen von Software mit TPI und TMap 2 Auflage dpunkt Heidelberg 2002 ISBN 3 89864 156 2 Steve McConnell Code Complete 2 Auflage Microsoft Press Redmond 2004 ISBN 978 0 7356 1967 8 S 470 englisch Unit test Lowest Rate 15 Modal Rate 30 Highest Rate 50 Capers Jones Software Engineering Best Practices McGraw Hill New York City 2010 ISBN 978 0 07 162162 5 9 Software Quality S 330 602 englisch 660 S the defect removal efficiency of TDD is higher than many forms of testing and can top 85 percent Fehlerkosten 10er Regel Zehnerregel Rule of ten In sixsigmablackbelt de Roland Schnurr abgerufen am 5 April 2022 Modultest Anti Pattern Abgerufen von https de wikipedia org w index php title Modultest amp oldid 237237235