Codeabdeckung von Natural-Anwendungen (Code Coverage)

Dieses Dokument enthält allgemeine Informationen über die Codeabdeckung (Code Coverage) von Natural-Anwendungen.


Einführung in die Codeabdeckung

Normalerweise misst die Codeabdeckung den Grad, in dem der Quellcode eines Programms ausgeführt wird. Sie wird häufig für systematische Softwaretests verwendet. Je höher der Prozentsatz der Codeabdeckung ist, desto geringer ist die Wahrscheinlichkeit, dass der Code unentdeckte Softwarefehler in nicht ausgeführtem Code enthält.

Die Natural-Codeabdeckung (Code Coverage) wird zur Überwachung der ausgeführten Statements einer Natural-Anwendung verwendet. Sie sammelt die Abdeckungsdaten, während die Anwendung ausgeführt wird, und stellt Tools bereit, um die gesammelten Daten anschließend zu analysieren.

Die Code Coverage-Ansicht von NaturalONE (der Eclipse-basierten Entwicklungsumgebung der Software AG) und die Program Coverage-Tabelle der Profiler Utility zeigen - ausgedrückt in Prozent - wie viele der Statements der Natural-Objekte ausgeführt wurden. Das Natural Coverage Plugin für Jenkins visualisiert das Ergebnis eines Natural-Coverage-Zyklus direkt auf den Ergebnisseiten des Jenkins-Jobs.

Im NaturalONE-Editor und in der Tabelle Statement Coverage der Profiler Utility können Sie sehen, welche einzelnen Statement-Zeilen eines Natural-Objekts ausgeführt wurden. Hier können Sie auch sehen, welche Statement-Zeilen nicht oder nur teilweise abgedeckt wurden.

Wenn sich ein Statement im Quellcode über mehrere Zeilen erstreckt, wird in den Abdeckungsreports nur die Zeile erwähnt, in der das Statement beginnt.

Sie können die Abdeckungsdaten mit der Ausgabe der Profiler Utility im Text- oder Tabellenformat (CSV) exportieren. Die CSV-Tabelle kann mit einer Tabellenkalkulationssoftware wie Microsoft Excel ausgewertet werden.

GP- und Quellcode-Abdeckung

Wenn ein Natural-Quellcode INCLUDE-Statements enthält, wird der entsprechende Copycode in das generierte Objekt (das GP = Generated Program, das vom Compiler generierte, ausführbare (katalogisierte) Objekt) aufgenommen. Hinsichtlich der Abdeckung können beim Natural Profiler zwei Statement-Zahlen überwacht werden:

  1. Die Anzahl der Statements im GP, das alle Copycodes rekursiv einschließt (ein Copycode kann weitere Copycodes einschließen).

  2. Die Anzahl der Statements im Quellcode (Source), die die Copycodes nicht enthalten.

Die GP-Abdeckung (GP Coverage) spiegelt den Prozentsatz der abgedeckten Statements in der GP wider mit Berücksichtigung der Copycode Statements, während die Quellcode-Abdeckung (Source Coverage) den Prozentsatz der abgedeckten Statements im Quellcode widerspiegelt, ohne die Copycodes zu berücksichtigen.

Grundlegende Konzepte

Während eine Natural-Anwendung ausgeführt wird, können Abdeckungsdaten gesammelt und in eine NCVF-Ressourcendatei geschrieben werden.

graphics/profiler_quick_start_new.png

  • Auf dem Großrechner wird die Datensammlung durch die Profiler Utility im Batch-Modus durchgeführt. Daher ist die Codeabdeckung von Großrechneranwendungen nur verfügbar, wenn die Profiler Utility im Batch-Modus gestartet werden kann. Dies gilt für Großrechner-Batch-Anwendungen, aber auch für interaktive Großrechner-Anwendungen, die über Natural Studio oder RPC remote ausgeführt werden, sofern die entsprechenden Einstellungen vorgenommen wurden.

  • Unter Windows und UNIX wird die Datensammlung von Natural durchgeführt, wenn der Parameter COVERAGE angegeben ist. Dadurch ist Code Coverage immer möglich.

  • Anders als beim Profiling gibt es unter NaturalONE keine direkte Codeabdeckung, bei der die Coverage ausgelöst und sofort von NaturalONE verarbeitet wird.

  • Wenn NaturalONE gegen ein Natural auf Windows oder Unix läuft, kann die Sammlung von Code-Coverage-Daten in eine NCVF-Ressourcendatei durch Setzen des Natural-Parameters COVERAGE ausgelöst werden.

  • NaturalONE verarbeitet die Abdeckungsdaten einer NCVF-Ressourcendatei und zeigt die Ergebnisse in der Natural Code Coverage-Ansicht und im Natural Source Editor an.

  • Die Profiler Utility im Batch-Modus verarbeitet die Abdeckungsdaten einer NCVF-Ressourcendatei und liefert Ergebnisse zur Statement- und Programmabdeckung. Die Daten können auch im CSV-Format (kommagetrennte Werte) in eine Datei geschrieben werden, die mit einer Tabellenkalkulationssoftware (z.B. Microsoft Excel) weiter analysiert werden kann.

Plattformspezifische Codeabdeckung

Generell können Sie die Natural Code Coverage auf UNIX-, Windows- und Großrechner-Plattformen durchführen. Wie Sie dabei vorgehen, hängt von der jeweiligen Plattform und der Art der Anwendungsverarbeitung ab:

Großrechner

  • Die Messung der Codeabdeckung bei interaktiven Großrechner-Anwendungen, die remote von Natural Studio oder RPC ausgeführt werden, wird mit der Profiler Utility im Batch-Modus durchgeführt.

  • Die Messung der Codeabdeckung bei Großrechner-Batch-Anwendungen wird mit der Profiler Utility im Batch-Modus durchgeführt.

Anmerkung:
Die Messung der Codeabdeckung ist bei interaktiven Großrechneranwendungen, die lokal auf einem Großrechner oder remote von NaturalONE ausgeführt werden, nicht verfügbar.

UNIX und Windows

  • Die Codeabdeckung von interaktiven UNIX- und Windows-Anwendungen wird mit der NaturalONE-Code Coverage oder der Natural-Code Coverage für UNIX bzw. Windows gemessen.

  • Die Messung der Codeabdeckung bei UNIX- und Windows-Batch-Anwendungen erfolgt mit der Natural Code Coverage für UNIX bzw. Windows.

Tools zur Messung der Codeabdeckung

Der folgende Abschnitt enthält eine Zusammenfassung der Merkmale der Natural Profiling Tools.

Funktionsumfang von NaturalONE Code Coverage

  • Liest und analysiert Natural Code Coverage-Ressourcendateien, die Abdeckungsdaten enthalten, die von der Großrechner-Profiler Utility im Batch-Modus oder von der Natural Code Coverage für UNIX oder Windows gesammelt wurden.

  • Die Codeabdeckung bei interaktiven Natural-Anwendungen auf UNIX oder Windows kann gemessen werden, indem die Natural-Codeabdeckung für UNIX oder Windows aktiviert und die entsprechende Natural Code Coverage-Ressourcendatei gelesen wird.

  • Die Natural Code Coverage-Ansicht zeigt, wie viel Prozent der Statements der Natural-Objekte ausgeführt wurden.

  • Von der Natural Code Coverage-Ansicht aus können die beteiligten Natural-Objekte bearbeitet werden. Der NaturalONE-Editor zeigt alle abgedeckten Zeilen mit grünem Hintergrund an.

Anmerkung:
Die interaktive Codeabdeckung von Natural-Anwendungen auf Großrechner-Plattformen wird derzeit nicht unterstützt.

Funktionsumfang der Natural Code Coverage für UNIX und Windows

  • Codeabdeckung von interaktiven oder Natural-Batch-Anwendungen auf UNIX- oder Windows-Plattformen.

  • Bietet Funktionen für die Behandlung großer Datenmengen:

    • automatisches Ereignisfilter,

    • automatische Datenkonsolidierung.

  • Speichert die Code Coverage-Daten als Natural Code Coverage-Ressourcendatei.

Funktionsumfang der Profiler Utility

Batch-Modus (Großrechner)

  • Codeabdeckung von Natural-Batch-Anwendungen auf Großrechner-Plattformen.

  • Codeabdeckung von interaktiven Großrechner-Anwendungen, die remote von Natural Studio oder gegen einen Natural RPC-Server ausgeführt werden.

  • Bietet Funktionen für die Behandlung großer Datenmengen:

    • Programm-, Zähl- und Zeitfilter,

    • automatisches Ereignisfilter,

    • automatische Datenkonsolidierung.

  • Speichert Code-Coverage-Daten als Natural-Code-Coverage-Ressourcendatei.

  • Liest und analysiert Natural-Code-Coverage-Ressourcendateien.

  • Listet die Program Coverage-Tabelle für alle aufgerufenen Natural-Objekte mit

    • Prozentsatz der abgedeckten Statements,

    • Anzahl der abgedeckten Statements,

    • Anzahl der nicht abgedeckten ("missed") Statements und

    • Gesamtzahl der Statements des Objekts.

  • Die Statement-Abdeckung (Statement Coverage) listet den Quellcode jedes Natural-Objekts, auf das zugegriffenen wurde, und zeigt für jede Zeile den Prozentsatz der abgedeckten Statements an.

  • Exportiert Natural-Code-Coverage-Daten im CSV-Format (kommagetrennte Werte), die mit einer Tabellenkalkulationssoftware (z. B. Microsoft Excel) weiter analysiert werden können.

  • Sammelt und zeigt Profiler- und Codeabdeckungseigenschaften und -statistiken an.

Anmerkung:
Auf dem Großrechner gibt es keine Eins-zu-Eins-Beziehung zwischen einem Natural-Quellcode-Statement und dem entsprechenden Objektcode im katalogisierten Objekt. Die Natural-Codeabdeckung auf dem Großrechner überwacht den Objektcode und nicht den Natural-Quellcode. Daher können mehrere Natural-Statements in einem Coverage-Eintrag zusammengeführt werden und umgekehrt kann ein Natural-Statement mehrere Coverage-Einträge abdecken.

Batch-Modus (UNIX und Windows)

  • Liest und analysiert Natural-Code-Coverage-Ressourcendateien.

  • Listet die Program Coverage-Tabelle für alle Natural-Objekte, auf die zugegriffenen wurde, mit folgenden Angaben:

    • Prozentsatz der abgedeckten Statements,

    • Anzahl der abgedeckten Statements,

    • Anzahl der nicht abgedeckten ("missed") Statements und

    • Gesamtzahl der Statements des Objekts.

  • Die Statement-Abdeckung (Statement Coverage) listet den Quellcode jedes Natural-Objekts, auf das zugegriffenen wurde, und zeigt für jede Zeile den Prozentsatz der abgedeckten Statements an.

  • Exportiert Natural-Code-Coverage-Daten im CSV-Format (kommagetrennte Werte), die mit einer Tabellenkalkulationssoftware (z. B. Microsoft Excel) weiter analysiert werden können.

Anmerkung:
Unter Windows und UNIX werden nicht abgedeckte ("missed") Statements nicht erfasst. Daher kann die Statement Coverage nur Zeilen markieren, die abgedeckte Statements enthalten, und die Abdeckung dieser Zeilen beträgt immer 100%.

Merkmale des Natural Code Coverage Spreadsheet

  • Vorlage zum Einfärben der Natural-Codeabdeckungsdaten, die von der Natural Profiler Utility im CSV-Format (kommagetrennte Werte) exportiert werden.

  • Programm- und Copycode-Abdeckung mit Quellcode- und GP-Zählern für

    • Prozentsatz der abgedeckten Statements,

    • Anzahl der abgedeckten Statements,

    • Anzahl der "missed" (nicht abgedeckten) Statements und

    • Gesamtzahl der Statements des Objekts.

  • Statement-Abdeckung des Objekt-Quellcodes, wobei die Zeilen wie folgt eingefärbt werden

    • grün – wenn alle Statements der Zeile abgedeckt sind,

    • gelb – wenn die Statements der Zeile teilweise abgedeckt sind,

    • rot – wenn alle Statements der Zeile fehlen,

    • grau – wenn die Zeile leer ist oder nur Kommentare enthält.

  • Profiler- und Code-Abdeckungseigenschaften und Statistiken (für Großrechnerdaten).

Anmerkung:
Eine Microsoft Excel-Tabellenvorlage für die Natural-Codeabdeckung ist als Ressource in der Natural-Profiler-Bibliothek SYSPRFLR auf UNIX und Windows verfügbar.

Natural Code Coverage-Auswertungen

Dieser Abschnitt beschreibt die Programmabdeckungsauswertungen, die von den Natural Code Coverage Tools bereitgestellt werden:

Programmabdeckung (Program Coverage)

Die Program Coverage gibt Ihnen einen Überblick über die ausgeführten Programme und den Umfang des Codes, der von der Anwendung abgedeckt wurde.

Programmabdeckungsreport

Der Programmabdeckungsreport der Profiler Utility zeigt die Abdeckung (in Prozent der Gesamtzahl der Statements) jedes ausgeführten Natural-Objekts an. Er zeigt für jedes Objekt an, wie viele Statements abgedeckt wurden bzw. nicht abgedeckt wurden ("missed") und wie viele Statements insgesamt enthalten sind. Außerdem fasst er die Werte für alle Objekte in einer Library und die Gesamtwerte für alle Librairies zusammen.

Wird die Ausgabe im Textformat geschrieben, wird nur die GP-Abdeckung angegeben. Werden die Daten im CSV-Format (kommagetrennte Werte) exportiert, wird auch die Quellcodeabdeckung angegeben. Zusätzlich werden die Zähler für alle inkludierten Copycodes gedruckt.

Im Folgenden finden Sie ein Beispiel für das Textformat:

Program Coverage                                           
----------------                                           
Library  Object   Ty Coverage%  Covered    Missed    Total 
COVDEMO  TESTCOVN N      84.0%       37         7       44 
COVDEMO  TESTCOVP P      69.2%        9         4       13 
COVDEMO  -------- --     80.7%       46        11       57 
Totals   -------- --     80.7%       46        11       57

Im obigen Beispiel für die Programmabdeckung wurden 69,2 % von 13 Statements im Programm TESTCOVP abgedeckt, was 9 abgedeckten und 4 nicht abgedeckten ("missed") Statements entspricht. 80,7 % der Statements der Objekte, auf die in der Library COVDEMO zugegriffen wurde, wurden abgedeckt, was auch dem Gesamtwert für den gesamten Anwendungslauf entspricht.

Code Coverage-Ansicht

Die Code Coverage-Ansicht von NaturalONE zeigt die Abdeckung (in Prozent der Gesamtzahl der Statements) jedes ausgeführten Natural-Objekts an. Sie zeigt für jedes Objekt an, wie viele Statements abgedeckt wurden oder nicht abgedeckt wurden ("missed") und wie viele Statements insgesamt enthalten sind. Wenn Copycodes enthalten sind, kann der Objektknoten geöffnet werden, um die Abdeckung des Copycodes anzuzeigen. Generell spiegeln die Zähler die GP-Abdeckung wider (Copycodes enthalten). Die Quellcodeabdeckung (Copycodes nicht enthalten) wird in der Zeile angezeigt, in der der Objektname in spitzen Klammern << >> eingeschlossen ist.

Von jeder Zeile aus können Sie direkt zu dem entsprechenden Quellcode navigieren, um die Statement-Abdeckung zu sehen.

Beispiel:

graphics/profiler_code_coverage_view_one.png

Im obigen Beispiel hat das Programm TESTCOVP eine GP-Abdeckung von 69,2 Prozent, wobei im Programm selbst alle 8 Statements abgedeckt sind (100% Quellcodeabdeckung) und im enthaltenen Copycode TESTCOVC nur 1 von 5 Statements abgedeckt wurde.

Zeilen- und Statement-Abdeckung

Die Statement Coverage zeigt, welche Zeilen des Programms ausgeführt wurden. Bei Großrechnerdaten zeigt die Profiler Utility außerdem an, welche Zeilen mit Statements nicht oder nur teilweise ausgeführt wurden.

Statement Coverage-Report

Der Statement Coverage-Report der Profiler Utility zeigt für jede Quellcodezeile die Abdeckung der Statements in der Zeile an.

Wenn die Daten im CSV-Format (kommagetrennte Werte) exportiert werden, werden auch die Anzahl der abgedeckten oder nicht abgedeckten ("missed") Statements und die Gesamtzahl der Statements in der Zeile ausgedruckt. Die Microsoft Excel-Tabellenvorlage, die mit Natural unter UNIX und Windows geliefert wird, kann verwendet werden, um die Zeilen entsprechend der Abdeckung einzufärben.

Wenn eine Quelle ein INCLUDE-Statement enthält, wird der entsprechende Copycode-Quellcode direkt nach dem INCLUDE-Statement in den Report aufgenommen.

Im Folgenden finden Sie ein Beispiel für einen Export im CSV-Format, der mit Hilfe einer Microsoft Excel-Tabelle eingefärbt wurde:

graphics/profiler_statement_coverage_spread.png

Die drei roten Zeilen des Unterprogramms TESTCOVN sind nicht ausgeführt worden. Der Testlauf deckt also nicht die neue Testfunktion 9 ab. Er deckt außerdem weder die (alte) Funktion 0 noch den Fall ab, dass das Subrogramm mit einer nicht unterstützten Funktion aufgerufen wird.

Die Daten stammen vom Großrechner. Daher beziehen sich die Zählungen auf Objektcode-Statements und nicht auf Natural-Statements. Einem Natural-VALUE-Statement können bis zu 3 Objektcode-Statements entsprechen. Die gelben Zeilen beziehen sich auf VALUE-Statements, bei denen ein Teil des Objektcodes abgedeckt wurde und ein anderer nicht.

NaturalONE Source Editor (Quellcode-Editor)

Wenn der Source Editor aus der Code Coverage-Ansicht in NaturalONE geöffnet wird, wird der Quellcode entsprechend der Codeabdeckung eingefärbt. Jede Zeile, in der ein oder mehrere Statements abgedeckt sind, ist grün hinterlegt.

Beispiel:

graphics/profiler_code_coverage_source_editor_one.png

Der Source Editor zeigt alle Zeilen, in denen mindestens ein Statement ausgeführt worden ist, grün hinterlegt an. Also sind alle Zeilen des DECIDE-Statement, mit Ausnahme der Zeilen 19, 37 und 39, ausgeführt worden.

Profiler-Eigenschaften und Statistikdaten

Die Anzeige Profiler Properties and Statistics steht sowohl bei der Natural Profiler Utility als auch bei der Profiler Rich GUI-Schnittstelle zur Verfügung. Sie liefert eine Auflistung der Profiler-Eigenschaften, z.B. die Profiler-Revisionsnummer. Darüber hinaus zeigt sie Statistikdaten der überwachten Anwendung, z.B. die CPU-Gesamtzeit und die verstrichene (elapsed) Zeit. Zu einem Codeabdeckungslauf zeigt sie die Statistikdaten der Abdeckung.

Beispiel:

***************************************************************************
* 13:30:48          ***** NATURAL PROFILER UTILITY *****         2017-09-04
* User SAG                     - Statistics -                       COVREAD
*                                                                          
* General Info                                                             
* Machine class ...................... MAINFRAME                           
* Environment ........................ Batch                               
...
* Coverage                                 
* Coverage ........................... ON  
* Missed statements recorded ......... ON  
* Coverage records ................... 60  
* Program information records ........ 3   
* Coverage records/block ............. 60  
* Bytes/coverage record .............. 10.3
* Programs covered ................... 2   
* Statement coverage (percent) ....... 80.7
* Statements covered ................. 46  
* Statements missed .................. 11  
* Statements total ................... 57