Anzeige der Testabdeckung im Editor

Dieser Artikel informiert, wie die Informationen zur Testabdeckung im entsprechenden Editor angezeigt werden. Lesen Sie unter "Test ausführen" nach, wie Sie diese Informationen zur Testabdeckung erstellen.

Testabdeckung im Editor anzeigen

So zeigen Sie die Testabdeckung an:

  1. Öffnen Sie die getestete POE wie üblich im Standard-Editor (z.B. ein ST-Objekt im ST-Editor).
  2. Im Editor öffnen Sie das Kontextmenü und wählen den Befehl Testabdeckung ein-/ausblenden aus. Alternative: Drücken Sie Alt+Strg+C.
    Ergebnis: Die Informationen zur Testabdeckung werden im Editor angezeigt:
    1. Anzeige im ST-Editor
    2. Anzeige im FBS-Editor

Anzeige im ST-Editor

Die Hintergrundfarbe der Zeile im ST-Editor informiert über die Testabdeckung des Codes in der Zeile:

Bedeutung der Hintergrundfarbe:

  • Grün = vollständig abgedeckt
  • Gelb = teilweise abgedeckt
  • Rot = nicht abgedeckt

Siehe "Beispiele für Testabdeckung im ST-Editor".

Es ist möglich, dass die Informationen zur Testabdeckung für bestimmte Szenarien im ST-Editor nicht korrekt erzeugt werden. Siehe "Einschränkungen zur Anzeige der Testabdeckung im ST-Editor".

Sie können diese Farben in den Benutzervorgaben ändern: Menü FensterBenutzervorgaben, Gruppe AllgemeinEditorenTexteditorenAnmerkungen.

(info) Um Details zur Testabdeckung zu erhalten, zeigen Sie am besten auf eine Zeile oder das Symbol im Rand links vom Code.

Beispiele für Testabdeckung im ST-Editor

Ausgangsszenario: Eine POE mit der Eingangsvariable inputForTest ist deklariert. Für diese POE ist ein Testfall vorhanden, in dem eine Testsequenz mit dem Eingangswert 0 für inputForTest spezifiziert ist.

Bei der Testausführung mit Testabdeckung ergeben sich die folgenden Beispiele:


ST-AnweisungAnzeigeErklärung
IF-Anweisung

Die vollständige Testabdeckung für eine IF-Anweisung ergibt sich aus 2 Zweigen:

  1. Die erste Anweisungen nach THEN wurde mindestens einmal ausgeführt.
  2. Die erste Anweisung nach ELSE wurde mindestens einmal ausgeführt.

Zeile mit gelber Hintergrundfarbe – Ursache für die nicht vollständige Testabdeckung: Der ELSE-Zweig wurde nicht ausgeführt.
Lösung für die vollständige Abdeckung: Spezifizieren Sie im Testfall eine zusätzliche Testsequenz mit einem Wert, der nicht dem Wert für die Bedingung entspricht (z.B. 1).

Zeile mit grüner HintergrundfarbeUrsache für die vollständige Testabdeckung: Die →Zuweisung wurde ausgeführt.

CASE-Anweisung

Die vollständige Testabdeckung für eine CASE-Anweisung ergibt sich aus 2 Zweigen.

  1. Alle Marken (nach OF) wurden erreicht, wobei die erste Anweisung innerhalb einer Marke mindestens einmal ausgeführt wurde.
  2. Die erste Anweisung nach ELSE wurde mindestens einmal ausgeführt.

Zeile mit gelber HintergrundfarbeUrsachen für die teilweise Testabdeckung: Der ELSE-Zweig wurde nicht ausgeführt. Außerdem wurden nicht alle Marken erreicht (aufgrund der Zeile mit roter Hintergrundfarbe).
Lösung für die vollständige Abdeckung: Spezifizieren Sie im Testfall eine zusätzliche Testsequenz mit einem Wert, der nicht den Werten für die Marken entspricht (z.B. 1). Spezifizieren Sie außerdem eine zusätzliche Testsequenz mit dem Wert 55.

Zeile mit grüner HintergrundfarbeUrsache für die vollständige Testabdeckung: Die Anweisungen unterhalb der Marke 0,3,15..22 wurden vollständig ausgeführt, da der Eingangswert 0 in der Testsequenz spezifiziert ist. Anweisungen innerhalb einer Marke gelten aus vollständig abgedeckt, sobald diese mindestens einmal ausgeführt wurden – auch falls weitere Werte in der Marke definiert sind (hier: 3,15..22).

Zeile mit roter HintergrundfarbeUrsache für fehlende Testabdeckung: Die Anweisungen unterhalb der Marke 55 wurden nicht ausgeführt, da nur der Eingangswert 0 in einer Testsequenz spezifiziert ist.

WHILE-Anweisung

Die vollständige Testabdeckung für eine WHILE-Anweisung ergibt sich aus 2 Zweigen:

  1. Die erste Anweisung nach DO wurde mindestens einmal ausgeführt.
  2. Die Anweisungen nach DO wurden nicht mehr ausgeführt, da die Bedingung (nach WHILE) nicht mehr erfüllt war.

Zeile mit gelber Hintergrundfarbe (mit WHILE) – Ursachen für die teilweise Testabdeckung: Zweig 1 wurde ausgeführt, aber Zweig 2 aufgrund der EXIT-Anweisung nicht.
Lösung für die vollständige Abdeckung: Spezifizieren Sie im Testfall eine zusätzliche Testsequenz mit einem Wert, der nicht 0 entspricht (z.B. 1).


Einschränkungen zur Anzeige der Testabdeckung im ST-Editor

Für die folgenden Szenarien wird eine nicht zutreffende Testabdeckung erzeugt. In Folge wird in diesen Fällen eine Testabdeckung angezeigt, die nicht der tatsächlichen Testausführung entspricht.

Szenario 1: Der spezifizierte Eingangswert wird für die CASE-Marke und in der Bedingung in der enthaltenen IF-Anweisung verwendet.

Falls ein Test für den folgenden Funktionsbaustein FB1 ausgeführt wird und darin eine Testsequenz mit dem Eingangswert 2 für Var1 spezifiziert ist, wird eine vollständige Testabdeckung für die Zeile IF Var1 = 2 THEN angezeigt.
Diese Anzeige der vollständigen Testabdeckung ist nicht zutreffend. Da der ELSE-Zweig nicht ausgeführt wurde, ist diese IF-Anweisung nur teilweise abgedeckt. Der Testfall müsste eine zusätzliche Testsequenz mit einem Wert ≠ 2 enthalten, damit die IF-Anweisung wirklich vollständig abgedeckt ist.

FUNCTION_BLOCK FB1
  VAR_INPUT
    Var1 : INT;
  END_VAR
  VAR
    x, y : INT;
  END_VAR

  CASE Var1 OF
    1, 2, 33..44 :
      x := 3;
      IF Var1 = 2 THEN (* Bei einer Testsequenz mit Eingangswert '2' wird diese Zeile als vollständig abgedeckt angezeigt. Diese Anzeige ist nicht zutreffend. *)
        y := 666;
      END_IF;
    ELSE
      x := 4;
  END_CASE;
END_FUNCTION_BLOCK

Szenario 2: Der spezifizierte Eingangswert wird für die CASE-Marke verwendet, eine IF-Anweisung ist in der CASE-Anweisung enthalten.

Falls ein Test für den folgenden Funktionsbaustein FB2 ausgeführt wird und darin eine Testsequenz mit dem Eingangswert 1 für Var2 spezifiziert ist, wird eine vollständige Testabdeckung für die Zeile IF z = 3 THEN angezeigt.
Diese Anzeige der vollständigen Testabdeckung ist nicht zutreffend. Da der ELSE-Zweig nicht ausgeführt wurde, ist diese IF-Anweisung nur teilweise abgedeckt. Auch wenn der Testfall eine zusätzliche Testsequenz mit einem anderen Wert enthält, ist die IF-Anweisung aufgrund der vorgebenen ST-Logik trotzdem nie vollständig abgedeckt.

FUNCTION_BLOCK FB2
  VAR_INPUT
    Var2 : INT;
  END_VAR
  VAR_OUTPUT
    Result : INT;
  END_VAR
  VAR
    x : INT;
    z : INT := 3;
  END_VAR

  CASE Var2 OF
    1, 2 :
      x := 4;
      IF z = 3 THEN  (* Bei einer Testsequenz mit Eingangswert '1' wird diese Zeile als vollständig abgedeckt angezeigt. Diese Anzeige ist nicht zutreffend. *)
        x := 6;
      END_IF;
    ELSE
      x := 15;
  END_CASE;
END_FUNCTION_BLOCK

Anzeige im FBS-Editor

Für die Testabdeckung im FBS-Editor sind nur die →Aufrufe von Bausteinen relevant, wobei eine teilweise Abdeckung nur bei Aufrufen von SEL-Bausteinen oder von MUX-Bausteinen (siehe unter Select-Funktionen) und bei Aufrufen mit verbundenem Eingang EN möglich ist.

Ein Symbol informiert über die Testabdeckung des Aufrufs.

  •  = vollständig abgedeckt
  •  = teilweise abgedeckt

Siehe "Beispiele für Testabdeckung im FBS-Editor".

Beispiele für Testabdeckung im FBS-Editor

Der Aufruf des NOT-Bausteins ist vollständig abgedeckt.