Share to: share facebook share twitter share wa share telegram print page

 

Testabdeckung

Als Testabdeckung bezeichnet man das Verhältnis an tatsächlich getroffenen Aussagen eines Tests gegenüber den theoretisch möglich treffbaren Aussagen bzw. der Menge der gewünschten treffbaren Aussagen. Die Testabdeckung spielt als Metrik zur Qualitätssicherung und zur Steigerung der Qualität insbesondere im Maschinenbau und der Softwaretechnik eine große Rolle.

In der Praxis wird die Testabdeckung durch verschiedene Kriterien beeinflusst. Die Testabdeckung lässt sich durch eine Erhöhung der Zahl an Messungen, Stichproben und Testfällen verbessern. Begrenzt wird die Testabdeckung in der Praxis jedoch durch die Kosten, die mit jedem Test verbunden sind.

Testabdeckung im Maschinenbau

Je nach Art, Aufwand und Nutzen der Tests werden einige Tests stichprobenartig, andere Tests vollständig durchgeführt. Ein einfach und automatisch durchzuführender Test wird mit jedem Produkt durchgeführt, da seine Kosten die Produktionskosten nur geringfügig erhöhen. Ein Crashtest mit einem Fahrzeug wird jedoch natürlich nur mit Stichproben durchgeführt, da das getestete Produkt anschließend unbrauchbar wird.

Für 1000 produzierte Fahrzeuge könnte dies z. B. bedeuten, dass besonders aufwendige Tests und Crashtests nur mit einem einzigen Fahrzeug durchgeführt werden, während weniger aufwendige Tests mit einer größeren Zahl oder gar allen Fahrzeugen durchgeführt werden.

Notwendige, aber aufwendige Tests werden in ihrer Häufigkeit und damit der Testabdeckung variiert. Liefert ein Test überwiegend oder ausschließlich positive Ergebnisse, wird seine Zahl verringert. Liefert ein Test negative Ergebnisse, wird er häufiger eingesetzt, bis die Veränderungen an der Produktion zu einer deutlichen Steigerung positiver Ergebnisse und damit wieder einer höheren Produktqualität geführt hat.

Die Kosten-Nutzen-Rechnung solcher Tests wird mit Hilfe der Stochastik durchgeführt. Wird z. B. nur mit 5 von 1000 Fahrzeugen ein Test durchgeführt, ob die elektrischen Fensterheber einwandfrei funktionieren, lässt sich mit Hilfe der Stochastik die statistische Relevanz und die Wahrscheinlichkeit einer Fehleinschätzung aufgrund des Testergebnisses berechnen.

Testabdeckung in der Softwaretechnik

Für die Testabdeckung in der Softwaretechnik (engl. Test Coverage bzw. Code Coverage) spielt die Stochastik praktisch keine Rolle, da es sich bei Computerprogrammen nicht um seriengefertigte Einzelprodukte handelt, bei denen Tests mit Stichproben durchgeführt werden. Stattdessen werden Tests anhand der Spezifikation (Eigenschaften der Schnittstelle) oder der inneren Struktur einer zu testenden Software-Einheit definiert.

In der Softwaretechnik wird die Testabdeckung für unterschiedliche Bereiche der Software ermittelt. Zu diesen gehört die Abdeckung des Codes, der Daten oder der Fachlichkeit. Um eine möglichst hohe Testabdeckung zu erreichen, müssen je nach abzudeckendem Bereich unterschiedliche Testfälle geschrieben werden. Nicht für alle kontrollflussorientierten Testverfahren ist beim Softwaretest die Angabe eines Maßes für die Testabdeckung möglich, da die Bestimmung der Anzahl der möglichen Testfälle für reale Probleme oft nicht möglich ist.

Eine vollständige Testabdeckung der Fachlichkeit stellt eine Ausnahme dar, weil die Anzahl möglicher Testfälle sehr schnell ungeheuer groß wird (durch kombinatorische Explosion). Ein vollständiger Funktionstest für eine einfache Funktion, die zwei 16-Bit-Werte als Argument erhält, würde schon , also ca. 4 Milliarden Testfälle bedeuten, um die Spezifikation vollständig zu testen. Stattdessen beschränkt man sich auf eine Auswahl sinnvoll erscheinender Tests für Grenzfälle (Grenzwertanalyse). Beispiel: Eine Wurzelfunktion für rationale Zahlen könnte z. B. mit sämtlichen Elementen der Menge getestet werden. Als sinnvolle Auswahl von Testfällen für eine angemessene Testabdeckung gelten in der Regel verschiedenartige gültige Argumente, für Komponenten mit Robustheitsanforderung zusätzlich Grenzelemente (gerade noch gültige Argumente und gerade ungültige Argumente). Es hat sich zudem als erfolgreich erwiesen, im Fehlerfall das den Fehler auslösende Argument in die Menge der Testelemente aufzunehmen.

Eine weitgehend vollständige Testabdeckung des Codes hingegen ist häufig das Ziel für Modultests bzw. Komponententests: Durch hochgradige Testabdeckung für 'kleine' Funktionseinheiten ergibt sich die Anzahl der insgesamt erforderlichen Testfälle lediglich aus der Addition dieser Testfälle und nicht aus der Kombinatorik der größeren Funktionalität. Doch auch hier kann dieses Ziel wegen verbleibender Restrisiken (unerwartete 'Fernwirkung' von Fehlern) und auch aus Kosten-Nutzen-Gründen in den meisten Fällen nicht zu 100 % erreicht werden.

Da eine hohe Codeabdeckung auch mit Tests erreicht werden kann, die nichts überprüfen, hat die Codeabdeckung für die Qualität der Tests eine nur eingeschränkte Aussagekraft. Um die Qualität von Tests sicherzustellen, wird daher üblicherweise mit Mutationstests gearbeitet. Dazu werden in den zu testenden Code automatisch Fehler bzw. Mutationen eingebaut und dann die Tests ausgeführt. Schlagen daraufhin Tests fehl, die davor funktioniert haben, so wurde die Mutation erkannt. Die Qualität der Tests kann aus dem Anteil der erkannten Mutationen abgeleitet werden. Die damit errechnete Testabdeckung bestimmt also die Abdeckung des Codes, der bei einer Mutation zu einem Fehlschlagen eines der Tests geführt hatte.

Normen

Die Codeabdeckung wird auch von diversen internationalen Normen für Empfehlungen bzw. Mindestanforderungen herangezogen:

  • IEEE 1008 „Software Unit Testing“: 100 % Statement-Abdeckung als Anforderung für Fertigstellung der Modultests, 100 % Verzweigungs-Abdeckung für Module mit kritischem Code oder ungenügende Spezifikation.
  • ISO 26262 „Road vehicles – Functional safety“: Je nach Kritikalität wird entsprechende Testabdeckung für Modultests und Integrationstests empfohlen bzw. stark empfohlen.
  • IEC 61508 „Functional Safety of Electrical/Electronic/Programmable Electronic Safety-Related Systems“: Empfiehlt bzw. empfiehlt stark eine 100 % Abdeckung von Eingängen, Statements, Verzweigungen, Bedingungen je nach Sicherheitsanforderungsstufe, beispielsweise wird bei der kleinsten Stufe eine 100 % Testabdeckung der Eingänge stark empfohlen, die der Statements, Verzweigungen und Bedingungen empfohlen.
  • DO-178B „Software Considerations in Airborne Systems and Equipment Certification“: Verlangt eine 100 % Testabdeckung von Statements, Entscheidungen, veränderten Entscheidungen je nach Auswirkung eines Systemfehlers. Beispielsweise wird ab Verletzungsgefahr von Passagieren eine 100 % Testabdeckung der Statements verlangt.

Tools zur Messung der Codeabdeckung

Programmiersprache Tools
Ada gcov
C BTC EmbeddedTester, Cantata++, froglogic Squish Coco, gcov, TESSY, Testwell ctc++
C++ Bullseye Coverage, Cantata++, froglogic Squish Coco, gcov, LDRA Testbed, OpenCppCoverage, TESSY, Testwell ctc++
C# froglogic Squish Coco, Testwell ctc++
Cobol CC ANALYZER, CodeCover
Delphi Delphi Code Coverage
Groovy Clover
IEC 61131-3 Applikationscode
(z. B. im Maschinen- und Anlagenbau)
CODESYS Profiler
Java Clover, Cobertura, CodeCover, EMMA, JaCoCo, Testwell ctc++
Simulink BTC EmbeddedTester
JavaScript coveraje, JSCoverage, script-cover
.Net-Framework JetBrains dotCover, NCover, PartCover
Perl Devel::Cover
PHP XDebug
Python coverage.py
Ruby rcov
Shell shcov
Simulink-Modelle Simulink Verification and Validation
Verilog Code Coverage
VHDL Code Coverage
Visual Basic VBWatch

Tools für Mutationstests

  • PIT – Java

Siehe auch

Kembali kehalaman sebelumnya


Index: pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve 
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9