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.

In diesem Artikel:

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 ST- oder FBS-Editor öffnen Sie das Kontextmenü und wählen den Befehl Testabdeckung ein-/ausblenden aus. Alternative: Drücken Sie Alt+Strg+C.
    Im KOP-Editor drücken Sie auf das Element in der Palette.
    Ergebnis: Die Informationen zur Testabdeckung werden im Editor angezeigt:

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

Sie können die Farben in den Benutzervorgaben ändern: Menü Fenster, Benutzervorgaben, Gruppe Allgemein, Editoren, Texteditoren, Anmerkungen.

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

Beachten Sie außerdem Folgendes:

  • Für eine Zuweisung eines Array-Elements und eine Zuweisung auf ein Array-Element wird eine vollständige Testabdeckung nur angezeigt, falls auch ein Test für den Zugriff auf ein ungültiges Array-Index ausgeführt worden ist.
    Beachten Sie den folgenden Unterschied bei der Anzeige der Testabdeckung:
     

    • Für die Zuweisung auf das Array-Element array1[index] wird die gelbe Hintergrundfarbe für eine teilweise Testabdeckung angezeigt. Grund: Hier wurde auch ein Test für den Zugriff auf ein ungültiges Array-Index ausgeführt.

    • Für die Zuweisung auf das Array-Element array2[index] wird die grüne Hintergrundfarbe für eine vollständige Testabdeckung angezeigt. Grund: Hier wurde auch ein Test für den Zugriff auf ein ungültiges Array-Index ausgeführt.

  • Falls eine Anweisung wie im Folgenden auf mehrere Zeilen aufgeteilt ist, wird die Testabdeckung nur für die erste Zeile der Anweisung angezeigt:


  • Zusätzliche Beispiele: 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".

Beispiele für Testabdeckung im ST-Editor

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

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

ST-Anweisung

Darstellung

Erläuterung

IF statement

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

  1. Die erste Anweisung 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. 11).

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

CASE statement

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 Hintergrundfarbe – Ursache für die nicht vollständige 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 Hintergrundfarbe – Ursache 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 Hintergrundfarbe – Ursache 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 statement

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

Nicht korrekte Details für Testabdeckung

Wenn Sie auf eine Zeile oder das Symbol im Rand links vom Code zeigen, erhalten Sie Details zur Testabdeckung. Falls Zweige im Code erhalten sind (siehe "Beispiele für Testabdeckung im ST-Editor" für Details zu den Zweigen), erhalten Sie dabei auch Informationen zur Testabdeckung dieser Zweige, z.B. die Nummerierung der Zweige. Bei unbedingten Zweigen (auch als "Unconditional Branches" bekannt) ist es möglich, dass die Nummerierung der Zweige Lücken aufweisen kann.

Beispiel: Die Meldung Partially Covered: branch 0 was taken 10 times, branch 1 was never executed, branch 4 was taken 10 times, branch 5 was never executed ist eine zutreffende Information zur Testabdeckung, obwohl die genannten Zweige eine Lücke in der Nummerierung aufweisen, nämlich: Branch 0, Branch 1 und Branch 4, Branch 5.

Nicht zutreffende Testabdeckung

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. Der Zweig 1, 2, 33..44 der CASE-Anweisung wurde nicht vollständig abgedeckt. Der Testfall müsste eine zusätzliche Testsequenz mit einem Wert ≠ 2 enthalten, damit die CASE- und die IF-Anweisung wirklich vollständig abgedeckt sind.

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  (* This line is displayed as fully covered in case of a test sequence with input value '2'. This display is incorrect. *)
        y := 666;
      END_IF;
  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 vorgegebenen 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  (* This line is displayed as fully covered in case of a test sequence with input value '1'. This display is incorrect. *)
        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. Eine teilweise Abdeckung ist nur bei Aufrufen von SEL-Bausteinen oder von MUX-Bausteinen (siehe unter Select-Funktionen) und bei Aufrufen mit verbundenem EingangEN möglich.

Ein Symbol informiert über die Testabdeckung des Aufrufs.

  •  = vollständig abgedeckt

  •  = teilweise abgedeckt

(Info) Ein rotes Symbol für "nicht abgedeckt" wird im FBS-Editor nicht angewendet.

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

Beispiele für Testabdeckung im FBS-Editor

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

Anzeige im KOP-Editor

Für die Testabdeckung im KOP-Editor sind die Kontakte und die →Aufrufe von Bausteinen (analog zur Anzeige im FBS-Editor) relevant.

Auch hier informiert Sie ein Symbol über die Testabdeckung im KOP-Editor:

  •  = vollständig abgedeckt

  •  = teilweise abgedeckt

  •  = nicht abgedeckt