Code Coverage: Unterschied zwischen den Versionen

Aus FI-Wiki
Zeile 87: Zeile 87:
* Zweigüberdeckung prüft nur, ob jeder Zweig der Bedingung (z.B. if- oder else-Zweig) mindestens einmal durchlaufen wurde. Die Testfälle für Zweigüberdeckung beispielFunktion(-1, 1), beispielFunktion(1, -1)) erreichen dies.
* Zweigüberdeckung prüft nur, ob jeder Zweig der Bedingung (z.B. if- oder else-Zweig) mindestens einmal durchlaufen wurde. Die Testfälle für Zweigüberdeckung beispielFunktion(-1, 1), beispielFunktion(1, -1)) erreichen dies.


* Pfadüberdeckung geht einen Schritt weiter und stellt sicher, dass jede Kombination der Bedingungen getestet wird. Hier ist ein zusätzlicher Testfall (beispielFunktion(-1, -1)) notwendig, um den Pfad x <= 0 und y <= 0 zu testen. Dieser Pfad wird bei der reinen Zweigüberdeckung nicht getestet.
* Pfadüberdeckung geht einen Schritt weiter und stellt sicher, dass jede Kombination der Bedingungen getestet wird. Hier sind zwei zusätzliche Testfälle (beispielFunktion(-1, -1), beispielFunktion(1, 1)) notwendig, um den Pfad x <= 0 und y <= 0 , sowie x >= 0 und y >= 0 zu testen. Diese Pfade wird bei der reinen Zweigüberdeckung nicht getestet.


=== Fazit ===
=== Fazit ===

Version vom 28. Oktober 2025, 07:25 Uhr

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

Mit diesen vier Testfällen decken wir alle möglichen Pfade durch den Code ab.

Unterschied zwischen Zweig- und Pfadüberdeckung

  • Zweigüberdeckung prüft nur, ob jeder Zweig der Bedingung (z.B. if- oder else-Zweig) mindestens einmal durchlaufen wurde. Die Testfälle für Zweigüberdeckung beispielFunktion(-1, 1), beispielFunktion(1, -1)) erreichen dies.
  • Pfadüberdeckung geht einen Schritt weiter und stellt sicher, dass jede Kombination der Bedingungen getestet wird. Hier sind zwei zusätzliche Testfälle (beispielFunktion(-1, -1), beispielFunktion(1, 1)) notwendig, um den Pfad x <= 0 und y <= 0 , sowie x >= 0 und y >= 0 zu testen. Diese Pfade wird bei der reinen Zweigüberdeckung nicht getestet.

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.