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 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 images/download/thumbnails/484246111/ShowTestCoverage-version-1-modificationdate-1641218429399-api-v2.png in der Palette.
    Ergebnis: Die Informationen zur Testabdeckung werden im Editor angezeigt:

    1. Anzeige im ST-Editor

    2. Anzeige im FBS-Editor

    3. Anzeige im KOP-Editor

Anzeige im ST-Editor

Die Hintergrundfarbe der Zeile im ST-Editor informiert über die Testabdeckung des Codes in der Zeile:
images/download/attachments/414779271/TF_CodeCoverageExampleST-version-1-modificationdate-1534426594179-api-v2.png

Bedeutung der Hintergrundfarbe:

  • Grün = vollständig abgedeckt

  • Gelb = teilweise abgedeckt

  • Rot = nicht abgedeckt

Falls eine Anweisung wie im Folgenden auf mehrere Zeilen aufgeteilt ist, wird die Testabdeckung nur für die erste Zeile der Anweisung angezeigt:
images/download/attachments/453673668/CodeCoverageExampleST2-version-1-modificationdate-1605109445539-api-v2.png

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".

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

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg 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-Anweisung

Anzeige

Erklärung

IF-Anweisung

images/download/attachments/414779276/TF_CodeCoverageExampleIF-version-1-modificationdate-1534426615585-api-v2.PNG

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. 1).

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

CASE-Anweisung

images/download/attachments/414779281/TF_CodeCoverageExampleCASE-version-1-modificationdate-1534426636030-api-v2.PNG

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 – Ursachen 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 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-Anweisung

images/download/attachments/414779286/TF_CodeCoverageExampleWHILE-version-1-modificationdate-1534426655904-api-v2.PNG

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. 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 (* Bei einer Testsequenz mit Eingangswert '2' wird diese Zeile als vollständig abgedeckt angezeigt. Diese Anzeige ist nicht zutreffend. *)
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 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.

images/download/attachments/414779291/TF_CodeCoverageExampleFBD-version-1-modificationdate-1534426683147-api-v2.png

Ein Symbol informiert über die Testabdeckung des Aufrufs.

  • images/download/thumbnails/414779296/TF_CoverageFull-version-1-modificationdate-1534426723981-api-v2.png = vollständig abgedeckt

  • images/download/thumbnails/414779301/TF_CoveragePartial-version-1-modificationdate-1534426742942-api-v2.png = teilweise abgedeckt

images/s/b2ic8e/9012/1ca6q62/_/images/icons/emoticons/information.svg 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.

images/download/attachments/414779306/TF_CodeCoverageExampleFBD1-version-1-modificationdate-1534426763028-api-v2.png

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:

  • images/download/thumbnails/414779296/TF_CoverageFull-version-1-modificationdate-1534426723981-api-v2.png = vollständig abgedeckt

  • images/download/thumbnails/414779301/TF_CoveragePartial-version-1-modificationdate-1534426742942-api-v2.png = teilweise abgedeckt

  • images/download/thumbnails/484246119/TF_CoverageNo-version-2-modificationdate-1641220137589-api-v2.png = nicht abgedeckt