{"id":8190,"date":"2025-11-29T15:43:01","date_gmt":"2025-11-29T14:43:01","guid":{"rendered":"https:\/\/web-dev-weissblau.de\/microconsult\/?p=8190"},"modified":"2026-02-10T18:46:22","modified_gmt":"2026-02-10T17:46:22","slug":"advanced-code-coverage","status":"publish","type":"post","link":"https:\/\/www.microconsult.de\/en\/code-coverage-fuer-fortgeschrittene\/","title":{"rendered":"Advanced Code Coverage"},"content":{"rendered":"<h2>Erhellendes und Erschreckendes zur Code\u00fcberdeckungsmessung<\/h2>\n<p style=\"text-align: left;\" align=\"center\">Autor: Frank B\u00fcchner, Hitex GmbH<\/p>\n<h3>Beitrag &#8211; Embedded Software Engineering Kongress 2015<\/h3>\n<p><strong>Im Folgenden steht nicht die Definition der Code\u00fcberdeckungsma\u00dfe im Vordergrund. Es geht vielmehr um (vielleicht) \u00fcberraschende Einsichten, das Ausr\u00e4umen von (vielleicht) naiven Ansichten, den Hinweis auf unterschiedliche Interpretationsm\u00f6glichkeiten und die Vermeidung von m\u00f6glichen Missverst\u00e4ndnissen.<\/strong><\/p>\n<h2>Welche Code\u00fcberdeckungsma\u00dfen werden in Standards genannt?<\/h2>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"319\"><\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">IEC 61508<\/p>\n<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">ISO 26262<\/p>\n<\/td>\n<td valign=\"top\" width=\"68\">\n<p align=\"center\">DO-178<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">Entry Point Coverage<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">X<\/p>\n<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">\n<\/td>\n<td valign=\"top\" width=\"68\">\n<p align=\"center\">\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">Statement Coverage<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">X<\/p>\n<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">X<\/p>\n<\/td>\n<td valign=\"top\" width=\"68\">\n<p align=\"center\">X<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">Branch Coverage<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">X<\/p>\n<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">X<\/p>\n<\/td>\n<td valign=\"top\" width=\"68\">\n<p align=\"center\">\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">Decision Coverage<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">\n<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">\n<\/td>\n<td valign=\"top\" width=\"68\">\n<p align=\"center\">X<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td valign=\"top\" width=\"319\">Modified Condition\/Decision Coverage (MC\/DC)<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">X<\/p>\n<\/td>\n<td valign=\"top\" width=\"85\">\n<p align=\"center\">X<\/p>\n<\/td>\n<td valign=\"top\" width=\"68\">\n<p align=\"center\">X<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><em>Tabelle 1: Code\u00fcberdeckungsma\u00dfen aus Standards<\/em><\/p>\n<h2>Wie sind die Ma\u00dfe definiert und wie verhalten sie sich zueinander?<\/h2>\n<p>Man kann die Ma\u00dfe nach der Testtiefe sortieren, die \u00fcblicherweise erforderlich ist, um eine \u00dcberdeckung von 100% f\u00fcr ein Ma\u00df zu erhalten. Dies korreliert mit der Kritikalit\u00e4t in Bezug auf Safety, bei der in den oben erw\u00e4hnten Standards die Messung dieser Ma\u00dfe gefordert wird. Diese Sortierung ist in der obigen Tabelle (Tabelle 1) angegeben, wobei Entry Point Coverage (oben) das Ma\u00df mit der geringsten Testtiefe und MC\/DC (unten) das Ma\u00df mit der gr\u00f6\u00dften Testtiefe ist. Oder anders ausgedr\u00fcckt: In sicherheitskritischen Systemen, die eine hohe Risikoreduzierung erfordern, soll MC\/DC gemessen werden; in sicherheitskritischen Systemen, die nur eine geringe Risikoreduzierung erfordern, reicht die Messung von Entry Point Coverage bzw. Statement Coverage.<\/p>\n<p>Ein \u00dcberdeckungsma\u00df gibt prinzipiell an (\u00fcblicherweise in Prozent), welcher Teil des jeweiligen Messkriteriums durch die Tests der Software erreicht \/ durchlaufen \/ ausgef\u00fchrt wurde. Die einzelnen Ma\u00dfe haben folgende Bedeutung:<\/p>\n<p><strong>Entry Point Coverage (Eingangspunkte):<\/strong><br \/>\nDas Messkriterium sind die Eingangspunkte in die Software. Bei der Programmiersprache C sind dies die Funktionen. (Ein Label in C kann man nur aus der Funktion heraus erreichen, in der sich das Label befindet. In unserem Sinne sind Label also keine Eingangspunkte in die Software.) Besteht also die zu testende Software aus 100 Funktionen, und hat man bei den bisherigen Tests 75 dieser Funktionen zumindest einmal aufgerufen, so betr\u00e4gt die Entry Point Coverage 75%. Entry Point Coverage liefert eine sehr schwache Aussage. Das h\u00e4ngt damit zusammen, dass Funktionen sehr unterschiedliche Gr\u00f6\u00dfen haben k\u00f6nnen und es zudem nicht darauf ankommt, welcher Anteil der Funktion bei dem vielleicht einzigen Aufruf ausgef\u00fchrt wurde.<\/p>\n<p><strong>Statement Coverage (Anweisungs\u00fcberdeckung):\u00a0<\/strong><br \/>\nDas Messkriterium sind die Anweisungen in der Software. Die Statement Coverage gibt also den Anteil der durch die Tests ausgef\u00fchrten Anweisung im Verh\u00e4ltnis zur Gesamtzahl der Anweisungen an. Der Nutzen der Statement Coverage zeigt sich, wenn durch Werte &lt; 100% Anweisungen entdeckt werden, die w\u00e4hrend der Tests nie ausgef\u00fchrt wurden. Abh\u00e4ngig von der Programmiersprache kann es schwierig sein, festzulegen, was genau als eine Anweisung gez\u00e4hlt wird.<\/p>\n<p><strong>Branch Coverage (Zweig\u00fcberdeckung):\u00a0<\/strong><br \/>\nDas Messkriterium sind die Zweige in der Software. Die Branch Coverage gibt also den Anteil der durch die Tests ausgef\u00fchrten Zweig im Verh\u00e4ltnis zur Gesamtzahl der Zweige an. Eine if-Anweisung besitzt beispielsweise zwei Zweige, den then-Zweig und den else-Zweig. F\u00fcr manche erstaunlich, existiert der else-Zweig auch dann, wenn er nicht explizit programmiert wurde. (Die ISO 26262 f\u00fchlt sich bem\u00fc\u00dfigt, ausdr\u00fccklich darauf hinzuweisen.) Zweige gibt es nat\u00fcrlich auch bei anderen Anweisungen, beispielsweise besitzt die do-while-Schleife einen Zweig &#8222;zur\u00fcck&#8220; (der bei while(0) nie durchlaufen wird). In switch-Anweisungen f\u00fchrt ein Zweig zu jedem case-Label, wobei sich die Frag stellt, ob das auch gelten soll, wenn mehrere Label direkt hintereinander stehen und somit gemeinsam den Beginn eines Anweisungsblocks bezeichnen. (Der Autor ist der Ansicht, dass die Antwort &#8222;ja&#8220; ist, und gibt dar\u00fcber gerne weitere Auskunft.) Branch Coverage ergibt offensichtlich eine bessere Testaussage als Statement Coverage, denn Branch Coverage deckt beispielsweise nichtausgef\u00fchrte nichtexistierende else-Zweige auf, was Statement Coverage nicht vermag.<\/p>\n<p><strong>Decision Coverage (Entscheidungs\u00fcberdeckung):\u00a0<\/strong><br \/>\nDas Messkriterium sind hier die Entscheidungen in der Software. Viele setzen Decision Coverage mit Branch Coverage gleich. F\u00fcr sie hat beispielsweise die if-Anweisung eine Entscheidung, und der then-Zweig der if-Anweisung wird ausgef\u00fchrt, wenn die Entscheidung wahr ist und der else-Teil der if-Anweisung wird ausgef\u00fchrt, wenn die Entscheidung falsch ist. Also folgern sie (f\u00e4lschlicherweise), dass aus 100% Branch Coverage auch 100% Decision Coverage folgt. Wenn man allerdings die Definition zur Decision Coverage in [DO-178C] und dazu in Beziehung stehenden Papieren [CAST-10] genauer untersucht, stellt sich heraus, dass auch der Aufbau einer Entscheidung betrachtet wird. Entscheidungen bestehen demnach aus Bedingungen (conditions), die durch Boolsche Operatoren verkn\u00fcpft sind. Die Decision Coverage geh\u00f6rt also eher zu den Bedingungs\u00fcberdeckungsma\u00dfen. (In Bezug auf Branch Coverage sind Entscheidungen monolithisch.) Um 100% Decision Coverage zu erreichen, m\u00fcssen alle Bedingungen in einer Entscheidung, die im Programm enthalten sind, mindestens einmal wahr und einmal falsch ergeben haben. Unter diesen Voraussetzungen kann man Beispiele konstruieren, bei denen 100% Branch Coverage, aber nicht 100% Decision Coverage erreicht wird. An dieser Stelle soll das nicht weiter ausgef\u00fchrt werden. (Der Autor stellt auf Anfrage gerne ein Beispiel mit Erl\u00e4uterungen zur Verf\u00fcgung.)<\/p>\n<p><strong>Modified Condition \/ Decision Coverage (MC\/DC), (Modifizierte Bedingungs- \/ Entscheidungs\u00fcberdeckung):<\/strong><br \/>\nDies ist ein Ma\u00df aus der Klasse der Bedingungs\u00fcberdeckungsma\u00dfe. Eine Entscheidung besteht aus Bedingungen, die durch logische Operatoren verkn\u00fcpft sind. Durch MC\/DC wird gepr\u00fcft, ob diese Bedingungen in ausreichendem Ma\u00df zu der Gesamtentscheidung beitragen. Das ist der Fall, wenn f\u00fcr eine bestimmte Bedingung ein Paar von Testf\u00e4llen \/ Eingangskombinationen (von Wahrheitswerten f\u00fcr die Bedingungen) existiert, f\u00fcr die drei Dinge zutreffen: (1) Die beiden Eingangskombinationen m\u00fcssen sich im Wahrheitswert f\u00fcr die Bedingung, um die es geht, unterscheiden. (2) Die beiden Eingangskombinationen m\u00fcssen f\u00fcr alle anderen Bedingungen in dieser Entscheidung denselben Wahrheitswert aufweisen. (3) Die beiden Eingangskombinationen m\u00fcssen zu unterschiedlichen Wahrheitswerten f\u00fcr die Gesamtentscheidung f\u00fchren. Wenn man f\u00fcr alle Bedingung aus der Entscheidung ein solches Paar von Eingangskombinationen gefunden hat und damit getestet hat, hat man 100% MC\/DC erreicht. Wenn eine Entscheidung n Bedingungen besitzt, kann man mit n+1 Eingangskombinationen die ben\u00f6tigten Paare zusammenstellen.<\/p>\n<h2>Bedeutet ein Name immer dasselbe \u00dcberdeckungsma\u00df bzw. gibt es immer nur einen Namen f\u00fcr ein \u00dcberdeckungsma\u00df?<\/h2>\n<p>Leider nein. F\u00fcr die \u00dcberdeckungsma\u00dfe sind auch Abk\u00fcrzungen im Gebrauch, beispielsweise C0, C1, C2, und deren Bedeutung ist nicht immer einheitlich. So wird beispielsweise im Buch &#8222;Software Testing Techniques&#8220; von Boris Beizer [BEIZER] mit der Abk\u00fcrzung C1 die Statement Coverage bezeichnet, w\u00e4hrend im Buch &#8222;Basiswissen Softwaretest&#8220; [SPILLNER] die Statement Coverage mit C0 abgek\u00fcrzt wird. In diesem Buch ist dann C1 die Abk\u00fcrzung f\u00fcr Branch Coverage, was bei Beizer mit C2 abgek\u00fcrzt wird. Aber auch wenn man &#8222;richtige&#8220; Namen verwendet, gibt es \u00dcberraschungen: So wird beispielsweise die Bezeichnung &#8222;Mehrfachbedingungs\u00fcberdeckung&#8220; im oben erw\u00e4hnten Buch &#8222;Basiswissen Softwaretest&#8220; mit dem englischen Begriff &#8222;branch condition combination testing&#8220; bezeichnet, im Buch &#8222;Software-Qualit\u00e4t&#8220; [LIGGESMEYER] jedoch mit der w\u00f6rtlichen \u00dcbersetzung &#8222;Multiple Condition Coverage&#8220;. Man braucht also nicht gleich die Flinte ins Korn zu werfen, wenn man Multiple Condition Coverge messen soll, das zur Verf\u00fcgung stehende Werkzeug aber nur branch condition combination testing messen kann. Man sollte sich also immer \u00fcber die Begrifflichkeiten mit dem Gegen\u00fcber auseinandersetzen.<\/p>\n<h2>In welchem Prozessschritt sollte Code\u00fcberdeckung gemessen werden und warum?<\/h2>\n<p>Wenn man als Ziel hat, 100% eines Ma\u00dfes zu erreichen, kann es sein, das man dies nur im Unit- bzw. Modul-Test erreichen kann, aber nicht im Integrationstest und nicht im Systemtest. Das liegt daran, dass man das Testobjekt im Unit-Test mit beliebigen Testeingangsdaten testen kann, was im Systemtest unter Umst\u00e4nden nicht m\u00f6glich ist.<\/p>\n<p>Im obigen Bild (siehe Bild 1,\u00a0<a title=\"Code Coverage f\u00fcr Forgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) ist eine Situation dargestellt, bei der im Systemtest nicht 100% Code\u00fcberdeckung erreicht werden kann. Die Funktion f1() ruft die Funktion f2() mit einem Pointer als Parameter auf, aber nur nachdem sichergestellt ist, dass dieser Pointer kein NULL-Pointer ist. Die Funktion f2() pr\u00fcft jedoch vor der Verwendung des \u00fcbergebenen Pointers, ob der Pointer ein NULL-Pointer ist und gibt in diesem Fall eine Fehlerkennung zur\u00fcck (defensive Programmierung). Wenn man unterstellt, dass f2() nicht noch von anderen Funktionen aufgerufen wird, wird man im Systemtest nicht erreichen k\u00f6nnen, dass ein NULL-Pointer an f2() \u00fcbergeben wird und somit der then-Zweig der if-Anweisung bzw. die return-Anweisung ausgef\u00fchrt wird. Im Unit-Test kann man beliebige Werte an das Testobjekt \u00fcbergeben, also auch einen NULL-Pointer an f2(). Dadurch kann man 100% \u00dcberdeckung f\u00fcr f2() erreichen und zudem den return-Wert auf Korrektheit pr\u00fcfen.<\/p>\n<h2>Was wird bei der Code\u00fcberdeckungsmessung nicht ber\u00fccksichtigt?<\/h2>\n<p>Die Funktion im obigen Bild (siehe Bild 2,\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) f\u00fchrt im Wesentlichen Berechnungen durch. Ausgehend vom Namen kann man vermuten, dass die Funktion den Sinus-Wert zu ihrer Eingabe berechnet. Tats\u00e4chlich: Ruft man diese Funktion mit dem Wert 0 f\u00fcr den Eingabewert x_deg auf (vermutlich eine Gradzahl), liefert die Funktion das Ergebnis 0. Das w\u00e4re der korrekte Wert. Die Code\u00fcberdeckungsmessung f\u00fcr diesen einen Testfall (Eingabe 0 ergibt R\u00fcckgabewert 0) liefert 100% f\u00fcr alle Ma\u00dfe, die bisher erw\u00e4hnt wurden. Sind wir also fertig mit Testen? Wir haben schlie\u00dflich einen bestandenen Testfall und 100% Coverage! Ich hoffe, die Antwort ist nein. Es sollte klar sein, dass es noch etlicher zus\u00e4tzlicher Testf\u00e4lle bedarf, um unsere Vermutung zu st\u00e4rken, dass die Funktion den Sinus-Wert ihrer Eingabe berechnet. Und dies liegt daran, dass Code\u00fcberdeckungsmessung Berechnungen nicht ber\u00fccksichtigt. Als Konsequenz aus dem obigen Beispiel muss man einsehen, dass man kein gro\u00dfes Vertrauen in die Qualit\u00e4t der Software setzen kann, nur weil man 100% \u00dcberdeckung erreicht hat.<\/p>\n<h2>Welches Problem kann man durch Code\u00fcberdeckungsmessung nicht finden?<\/h2>\n<p>Ganz einfach: Auslassungen im Code werden durch \u00dcberdeckungsmessungen nicht aufgedeckt. Wurde beispielsweise der Test, ob der \u00fcbergebene Parameter ein NULL-Pointer ist, in der Funktion f2() in Bild 1 (siehe\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) vergessen zu implementieren, kann dies durch \u00dcberdeckungsmessung nicht aufgedeckt werden. Auch in der Funktion sinus() aus Bild 2 (siehe\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) fehlt eine wichtige Code-Zeile, durch welche die Genauigkeit der Berechnung erh\u00f6ht wird. Auch diese Auslassung wird durch die \u00dcberdeckungsmessung nicht aufgedeckt. Dies sollte eigentlich selbstverst\u00e4ndlich sein, trotzdem ist es nicht immer bewusst.<\/p>\n<h2>Wieso sollte man nicht die Testf\u00e4lle zur Erreichung von 100% \u00dcberdeckung aus dem Code herleiten?<\/h2>\n<p>Der Hauptgrund ist wie oben erw\u00e4hnt, dass dadurch Auslassungen im Code nicht gefunden werden k\u00f6nnen. Deshalb sollten Testf\u00e4lle immer auf Basis der Anforderungen erstellt werden. Ein zus\u00e4tzlicher Grund ist, dass man bei dieser Vorgehensweise den Code eigentlich als korrekt voraussetzt. Nat\u00fcrlich kann man die Ergebnisse der aus dem Code abgeleiteten Testf\u00e4lle gegen die Anforderungen pr\u00fcfen (und dabei Fehler und vielleicht sogar Anforderungen finden, f\u00fcr die es keine Tests gibt), aber es ist m.E. trotzdem der falsche Ansatz.<\/p>\n<h2>Welche Berechnungsm\u00f6glichkeiten f\u00fcr MC\/DC gibt es?<\/h2>\n<p>Im linken Teil von Bild 3 (siehe\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) sind die vier Testf\u00e4lle dargestellt, die man ausf\u00fchren muss, um 100% MC\/DC f\u00fcr die Entscheidung (A &amp;&amp; (B || C) zu erhalten. [Aufgrund der unvollst\u00e4ndigen Evaluierung in C sind trotz der drei Bedingungen nicht acht Testf\u00e4lle m\u00f6glich, sondern nur vier. Und weil bei drei Bedingungen vier Testf\u00e4lle zur Erreichung von 100% MC\/DC notwendig sind, m\u00fcssen alle vier Testf\u00e4lle ausgef\u00fchrt werden.] Erstaunlicherweise erh\u00e4lt man unterschiedliche MC\/DC-Werte solange noch nicht alle vier Testf\u00e4lle ausgef\u00fchrt sind, abh\u00e4ngig von der Berechnungsmethode, die angewendet wird. Die eine Methode (test case counting) geht von der Anzahl der notwendigen Testf\u00e4lle aus, in unserem Beispiel vier. Und wenn einer dieser vier Testf\u00e4lle (egal welcher) ausgef\u00fchrt worden ist, ergeben sich 25% MC\/DC. Zwei Testf\u00e4lle ergeben 50%, drei Testf\u00e4lle 75% und vier Testf\u00e4lle schlie\u00dflich 100% MC\/DC. Die andere Methode (test pair counting) geht von der Anzahl der notwendigen Paare von Testf\u00e4llen aus, in unserem Beispiel sind dies drei, weil es drei Bedingungen gibt. Und wenn ein Testfall, beispielsweise Testfall Nr. 1, ausgef\u00fchrt wurde, ist noch kein Paar ausgef\u00fchrt, denn dazu geh\u00f6ren zwei Testfalle. Deshalb ermittelt diese Methode f\u00fcr Testfall Nr. 1 alleine 0% MC\/DC. Wird dann ein weiterer Testfall, beispielsweise Testfall Nr. 2, ausgef\u00fchrt, bleibt der MC\/DC-Wert bei 0%, denn Testfall Nr. 1 und Testfall Nr. 2 haben beide das gleiche Gesamtergebnis und k\u00f6nnen deshalb f\u00fcr keine der Bedingungen ein Paar ergeben. Mit Testfall Nr. 3 ergeben sich dann zwei Paare (das f\u00fcr Bedingung A und das f\u00fcr Bedingung C), und damit sind auf einen Schlag 66% MC\/DC erreicht. Diese Werteverl\u00e4ufe sind auf der rechten Seite von Bild 3 (siehe\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) dargestellt. Bemerkenswert ist, dass beispielsweise um die Vorgabe 70% MC\/DC zu erf\u00fcllen, nach der einen Methode 3 Testf\u00e4lle ausreichen, nach der anderen jedoch 4 Testf\u00e4lle notwendig sind (siehe auch Bild 4,\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>)<\/p>\n<h2>Darf man \u00dcberdeckungswerte von Codevarianten erg\u00e4nzen?<\/h2>\n<p>Im obigen Bild (Bild 5, siehe\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) ist links eine Funktion dargestellt, die unterschiedliches Verhalten zeigt, je nachdem, ob eine Pr\u00e4prozessorkonstante definiert ist und wenn ja, welche. Im rechten Teil von Bild 5 (siehe\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>) sind f\u00fcnf Testf\u00e4lle f\u00fcr diese Funktion angegeben: Bei Testfall 1 ist keine Pr\u00e4prozessorkonstante definiert, die Eingabe ist 3, damit wird der then-Zweig der if-Anweisung durchlaufen und der Return-Wert, die Ausgabe, ist 3. Bei Testfall 4 ist die Pr\u00e4prozessorkonstante VARIANT_1 definiert, der Input ist 0, damit wird der else-Zweig durchlaufen und die Ausgabe ist 12 (=12\/(0+1)). Man erkennt, dass der else-Zweig der if-Anweisung nicht durchlaufen wird, wenn die Pr\u00e4prozessorkonstante VARIANT_2 definiert ist. Somit ist die Branch Coverage f\u00fcr diese Variante nicht 100%. Da der else-Zweig f\u00fcr alle Varianten identisch ist, k\u00f6nnte man auf die Idee kommen, dass der else-Zeig der if-Anweisung ja bereits in den anderen Varianten durchlaufen wurde. Somit k\u00f6nnte man die zu geringe Coverage in einer Variante durch die Coverage der anderen Varianten auf 100% &#8222;erg\u00e4nzen&#8220;. Dass dies keine gute Idee ist, zeigt sich, wenn man den noch fehlenden Testfall f\u00fcr Variante 2 durchspielt: Die Eingabe 3 bei definierter Pr\u00e4prozessorkonstante VARIANT_2 f\u00fchrt zu einer Division durch null. Die kumulierte Coverage der drei Varianten darf also nicht 100% betragen (siehe Bild 6,\u00a0<a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\">PDF<\/a>).<\/p>\n<h2>Misst Coverage die G\u00fcte der Testf\u00e4lle?<\/h2>\n<p>Weil die \u00dcberdeckungsmessung Berechnungen nicht ausreichend ber\u00fccksichtig, weil \u00dcberdeckungsmessungen Auslassungen nicht finden kann und weil auch schlechte Testf\u00e4lle oft zu 100% Coverage f\u00fchren, kann man Coverage nicht zur Messung der G\u00fcte der Testf\u00e4lle heranziehen. Eine Methode zur Beurteilung der G\u00fcte w\u00e4re beispielsweise der Mutationstest (oder Error Seeding, wie dieses Verfahren in ISO 61508 genannt wird).<\/p>\n<h2>Literatur- und Quellenverzeichnis<\/h2>\n<p>[TESSY] https:\/\/www.hitex.de\/tessy: More about the unit testing tool TESSY.<\/p>\n<p>[BEIZER] Beizer, Boris: Software Testing Techniques, 2nd edition, New York, 1990.<\/p>\n<p>[LIGGESMEYER] Liggesmeyer, Peter: Software-Qualit\u00e4t: Testen, Analysieren und Verifizieren von Software. Heidelberg, Berlin, 2002. Spektrum Akademischer Verlag.<\/p>\n<p>[SPILLNER] Spillner, A., Linz, T.: Basiswissen Softwaretest, Heidelberg, 2003. dpunkt-Verlag.<\/p>\n<p>[61508] IEC 61508, Functional Safety of electrical\/electronic\/programmable electronic safety-related systems, 2010.<\/p>\n<p>[26262] ISO 26262, Road Vehicles \u2013 Functional Safety, 2011.<\/p>\n<p>[DO-178C] Software Considerations In Airborne Systems And Equipment Certification, RTCA, 2011.<\/p>\n<p>[CAST-10] Certification Authorities Software Team, Position Paper 10, 2002<\/p>\n<p><a title=\"Code Coverage f\u00fcr Fortgeschrittene (PDF)\" href=\"https:\/\/www.microconsult.de\/wp-content\/uploads\/2025\/11\/fachinfo_ese_testqual_code_coverage_fuer_fortgeschrittene_hitex_buechner.pdf\" target=\"_blank\" rel=\"noopener\"><strong>Beitrag als PDF downloaden<\/strong><\/a><\/p>\n<hr \/>\n<h2>Test, Qualit\u00e4t &amp; Debug &#8211; unsere Trainings &amp; Coachings<\/h2>\n<p><strong>Wollen Sie sich auf den aktuellen Stand der Technik bringen?<\/strong><\/p>\n<p>Dann informieren Sie sich\u00a0<a title=\"Test &amp; Debug Training und Coaching\" href=\"https:\/\/www.microconsult.de\/alle-trainings-termine-komplettuebersicht\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>zu Schulungen\/ Seminaren\/ Trainings\/ Workshops und individuellen Coachings von MircoConsult zum Thema Test, Qualit\u00e4t &amp; Debug.<\/p>\n<p><strong>Training &amp; Coaching zu den weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Training &amp; Beratung - alle Themen\" href=\"https:\/\/www.microconsult.de\/training-beratung\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n<hr \/>\n<h2>Test, Qualit\u00e4t &amp; Debug &#8211; Fachwissen<\/h2>\n<p>Wertvolles Fachwissen zum Thema\u00a0Test, Qualit\u00e4t &amp; Debug steht\u00a0<a title=\"Test und Debug\" href=\"https:\/\/www.microconsult.de\/test-und-debug\/\" target=\"_blank\" rel=\"noopener\"><strong>hier<\/strong>\u00a0<\/a>f\u00fcr Sie zum kostenfreien Download bereit.<\/p>\n<p><a title=\"Test und Debug\" href=\"https:\/\/www.microconsult.de\/test-und-debug\/\" target=\"_blank\" rel=\"noopener\"><strong>Zu den Fachinformationen<\/strong><\/a><\/p>\n<p><strong>Fachwissen zu weiteren Themen unseren Portfolios finden Sie\u00a0<a title=\"Fachinformationen\" href=\"https:\/\/www.microconsult.de\/fachwissen\/\" target=\"_blank\" rel=\"noopener\">hier<\/a>.<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erhellendes und Erschreckendes zur Code\u00fcberdeckungsmessung Autor: Frank B\u00fcchner, Hitex GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2015 Im Folgenden steht nicht die Definition der Code\u00fcberdeckungsma\u00dfe im Vordergrund. Es geht vielmehr um (vielleicht) \u00fcberraschende Einsichten, das Ausr\u00e4umen von (vielleicht) naiven Ansichten, den Hinweis auf unterschiedliche Interpretationsm\u00f6glichkeiten und die Vermeidung von m\u00f6glichen Missverst\u00e4ndnissen. Welche Code\u00fcberdeckungsma\u00dfen werden in [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","inline_featured_image":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-8190","post","type-post","status-publish","format-standard","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Code Coverage f\u00fcr Fortgeschrittene - MicroConsult Academy GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.microconsult.de\/en\/advanced-code-coverage\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Code Coverage f\u00fcr Fortgeschrittene - MicroConsult Academy GmbH\" \/>\n<meta property=\"og:description\" content=\"Erhellendes und Erschreckendes zur Code\u00fcberdeckungsmessung Autor: Frank B\u00fcchner, Hitex GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2015 Im Folgenden steht nicht die Definition der Code\u00fcberdeckungsma\u00dfe im Vordergrund. Es geht vielmehr um (vielleicht) \u00fcberraschende Einsichten, das Ausr\u00e4umen von (vielleicht) naiven Ansichten, den Hinweis auf unterschiedliche Interpretationsm\u00f6glichkeiten und die Vermeidung von m\u00f6glichen Missverst\u00e4ndnissen. Welche Code\u00fcberdeckungsma\u00dfen werden in [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microconsult.de\/en\/advanced-code-coverage\/\" \/>\n<meta property=\"og:site_name\" content=\"MicroConsult Academy GmbH\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-29T14:43:01+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-10T17:46:22+00:00\" \/>\n<meta name=\"author\" content=\"weissblau media\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"weissblau media\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/\"},\"author\":{\"name\":\"weissblau media\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"headline\":\"Code Coverage f\u00fcr Fortgeschrittene\",\"datePublished\":\"2025-11-29T14:43:01+00:00\",\"dateModified\":\"2026-02-10T17:46:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/\"},\"wordCount\":2553,\"commentCount\":0,\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/\",\"name\":\"Code Coverage f\u00fcr Fortgeschrittene - MicroConsult Academy GmbH\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\"},\"datePublished\":\"2025-11-29T14:43:01+00:00\",\"dateModified\":\"2026-02-10T17:46:22+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/code-coverage-fuer-fortgeschrittene\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.microconsult.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Code Coverage f\u00fcr Fortgeschrittene\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#website\",\"url\":\"https:\\\/\\\/www.microconsult.de\\\/\",\"name\":\"MicroConsult Academy GmbH\",\"description\":\"Professionelle Schulungen, Beratung und Projektunterst\u00fctzung\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.microconsult.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.microconsult.de\\\/#\\\/schema\\\/person\\\/b6d4c4ae959b068fbe8d9416ed019a0a\",\"name\":\"weissblau media\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g\",\"caption\":\"weissblau media\"},\"sameAs\":[\"https:\\\/\\\/www.microconsult.de\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Advanced Code Coverage - MicroConsult Academy GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.microconsult.de\/en\/advanced-code-coverage\/","og_locale":"en_GB","og_type":"article","og_title":"Code Coverage f\u00fcr Fortgeschrittene - MicroConsult Academy GmbH","og_description":"Erhellendes und Erschreckendes zur Code\u00fcberdeckungsmessung Autor: Frank B\u00fcchner, Hitex GmbH Beitrag &#8211; Embedded Software Engineering Kongress 2015 Im Folgenden steht nicht die Definition der Code\u00fcberdeckungsma\u00dfe im Vordergrund. Es geht vielmehr um (vielleicht) \u00fcberraschende Einsichten, das Ausr\u00e4umen von (vielleicht) naiven Ansichten, den Hinweis auf unterschiedliche Interpretationsm\u00f6glichkeiten und die Vermeidung von m\u00f6glichen Missverst\u00e4ndnissen. Welche Code\u00fcberdeckungsma\u00dfen werden in [&hellip;]","og_url":"https:\/\/www.microconsult.de\/en\/advanced-code-coverage\/","og_site_name":"MicroConsult Academy GmbH","article_published_time":"2025-11-29T14:43:01+00:00","article_modified_time":"2026-02-10T17:46:22+00:00","author":"weissblau media","twitter_card":"summary_large_image","twitter_misc":{"Written by":"weissblau media","Estimated reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/#article","isPartOf":{"@id":"https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/"},"author":{"name":"weissblau media","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"headline":"Code Coverage f\u00fcr Fortgeschrittene","datePublished":"2025-11-29T14:43:01+00:00","dateModified":"2026-02-10T17:46:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/"},"wordCount":2553,"commentCount":0,"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/","url":"https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/","name":"Advanced Code Coverage - MicroConsult Academy GmbH","isPartOf":{"@id":"https:\/\/www.microconsult.de\/#website"},"datePublished":"2025-11-29T14:43:01+00:00","dateModified":"2026-02-10T17:46:22+00:00","author":{"@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a"},"breadcrumb":{"@id":"https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.microconsult.de\/code-coverage-fuer-fortgeschrittene\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microconsult.de\/"},{"@type":"ListItem","position":2,"name":"Code Coverage f\u00fcr Fortgeschrittene"}]},{"@type":"WebSite","@id":"https:\/\/www.microconsult.de\/#website","url":"https:\/\/www.microconsult.de\/","name":"MicroConsult Academy GmbH","description":"Professional training, consulting and project support","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.microconsult.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/www.microconsult.de\/#\/schema\/person\/b6d4c4ae959b068fbe8d9416ed019a0a","name":"weissblau media","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bbb409da4970da9446f6c49465d453cb8a0dae301e4d4f465b5c4e62408daa2e?s=96&d=mm&r=g","caption":"weissblau media"},"sameAs":["https:\/\/www.microconsult.de"]}]}},"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/8190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/comments?post=8190"}],"version-history":[{"count":7,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/8190\/revisions"}],"predecessor-version":[{"id":11585,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/posts\/8190\/revisions\/11585"}],"wp:attachment":[{"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/media?parent=8190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/categories?post=8190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.microconsult.de\/en\/wp-json\/wp\/v2\/tags?post=8190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}