Code Coverage

Aus FI-Wiki
Version vom 28. Oktober 2025, 07:17 Uhr von Moettke (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Code Coverage in Java == === Beispielcode === <syntaxhighlight lang="java"> public class Beispiel { public static void beispielFunktion(int x, int y) { if (x > 0) { System.out.println("x ist positiv"); } if (y > 0) { System.out.println("y ist positiv"); } } } </syntaxhighlight> Dieser Code hat zwei unabhängige if-Bedingungen: eine für x und eine für y. === 1. Anweisungsüber…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Code Coverage in Java

Beispielcode

public class Beispiel {
    public static void beispielFunktion(int x, int y) {
        if (x > 0) {
            System.out.println("x ist positiv");
        }        
        if (y > 0) {
            System.out.println("y ist positiv");
        }
    }
}

Dieser Code hat zwei unabhängige if-Bedingungen: eine für x und eine für y.

1. Anweisungsüberdeckung (Statement Coverage)

Anweisungsüberdeckung bedeutet, dass jede Anweisung im Code mindestens einmal ausgeführt wird. In diesem Beispiel sind die Anweisungen:

  1. if (x > 0)
  1. System.out.println("x ist positiv");
  1. if (y > 0)
  1. System.out.println("y ist positiv");

Das Ziel der Anweisungsüberdeckung ist es, sicherzustellen, dass jede dieser Anweisungen mindestens einmal aufgerufen wird.

Testfall für 100% Anweisungsüberdeckung:

Beispiel.beispielFunktion(1, 1);  // x > 0, y > 0

Erklärung:

  • Bei beispielFunktion(1, 1) wird die Bedingung x > 0 erfüllt, also wird System.out.println("x ist positiv") ausgeführt.
  • Ebenso wird die Bedingung y > 0 erfüllt, also wird System.out.println("y ist positiv") ausgeführt.

2. Zweigüberdeckung (Branch Coverage)

Zweigüberdeckung bedeutet, dass jeder Zweig einer Bedingung mindestens einmal getestet wird (true und false).

  • if (x > 0): true / false
  • if (y > 0): true / false

Testfälle für 100% Zweigüberdeckung:

Beispiel.beispielFunktion(-1, 1);  // x <= 0, y > 0
Beispiel.beispielFunktion(1, -1);  // x > 0, y <= 0

Damit sind alle Zweige (true/false) beider Bedingungen abgedeckt.

3. Pfadüberdeckung (Path Coverage)

Pfadüberdeckung bedeutet, dass alle möglichen Kombinationen von Pfaden durch den Code getestet werden.

Mögliche Pfade:

  1. x > 0 und y > 0
  1. x > 0 und y <= 0
  1. x <= 0 und y > 0
  1. x <= 0 und y <= 0

Testfälle für 100% Pfadüberdeckung:

Beispiel.beispielFunktion(1, 1);    // Pfad 1
Beispiel.beispielFunktion(1, -1);   // Pfad 2
Beispiel.beispielFunktion(-1, 1);   // Pfad 3
Beispiel.beispielFunktion(-1, -1);  // Pfad 4

Unterschied zwischen Zweig- und Pfadüberdeckung

  • Zweigüberdeckung: Jeder Zweig einer Bedingung (true/false) wird mindestens einmal durchlaufen.
  • Pfadüberdeckung: Alle Kombinationen von Bedingungen werden getestet.

Pfad 4 (x <= 0, y <= 0) wird nur bei Pfadüberdeckung getestet, aber nicht bei reiner Zweigüberdeckung.

Fazit

  • Zweigüberdeckung: 2 Testfälle genügen
  • Pfadüberdeckung: 4 Testfälle notwendig

Pfadüberdeckung ist strenger, da sie jede mögliche Ausführungskombination abdeckt.