Ansicht
Dokumentation

ABENCODE_INSPECTOR_GUIDL - CODE INSPECTOR GUIDL

ABENCODE_INSPECTOR_GUIDL - CODE INSPECTOR GUIDL

PERFORM Short Reference   BAL_S_LOG - Application Log: Log header data  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Code Inspector

Der Code Inspector ist ein Werkzeug zur statischen Überprüfung von Repository-Objekten bezüglich Performance, Sicherheit, Syntax und der Einhaltung von Namenskonventionen. Der volle Funktionsumfang des Code Inspectors kann über die Transaktion SCI verwendet werden, um komplexe statische Prüfungen sowie regelmäßige Massentests für große Mengen von Entwicklungsobjekten auszuführen.

Der Code Inspector kann auch aus der ABAP Workbench heraus aufgerufen werden, um eine Standardmenge an Prüfungen für ihr aktuelles Objekt durchzuführen, wie zum Beispiel über den Menüpfad Programm → Prüfen→ Code Inspector des ABAP Editors. Die hierbei verwendete Standardprüfvariante enthält die meisten Prüfungen der erweiterten Programmprüfung sowie einige weitere Sicherheits- und Performanceprüfungen. Weiterhin kann der Code Inspector in die Freigabe von Transporten eingebunden werden.

Wie bei der erweiterten Programmprüfung sind auch die Ergebnisse des Code Inspectors in die drei Kategorien Fehler, Warnungen und einfache Meldungen unterteilt und können mit speziellen Pseudokommentaren ausgeblendet werden.

Standardprüfvariante des Code Inspectors verwenden

Führen Sie die Standardprüfvariante des Code Inspectors vor der Freigabe eines Programms aus, und beseitigen Sie sämtliche Fehlermeldungen.

Wird die erweiterte Programmprüfung verwendet, meldet die Standardprüfvariante des Code Inspectors nur noch Meldungen von Prüfungen, die über die erweiterte Programmprüfung hinausgehen. Dies sind im Wesentlichen Meldungen über eventuelle Performance- oder Sicherheitsrisiken in Programmen. Beispiele sind Meldungen über ungünstige WHERE-Bedingungen beim SELECT, die Wertübergabe statt der Referenzübergabe von Parametern oder unsichere Programmaufrufe.

Diese Probleme sind, verglichen mit den Meldungen der erweiterten Programmprüfung, nicht immer so einfach an der Ursache zu korrigieren, beispielsweise weil es keine andere Möglichkeit für eine Selektion gibt oder die Übersichtlichkeit oder Robustheit eines Konstruktes als wichtiger als ein eventueller kleiner Performanceverlust angesehen wird.

In solchen Fällen können die Meldungen mit den passenden Pseudokommentaren unterdrückt werden. Ein solcher Pseudokommentar drückt für den Leser des Programms klar aus, dass der Programmautor die entsprechenden Überprüfungen durchgeführt hat und er die Meldung bewusst und aus guten Gründen unterdrückt. Letzteres kann, wo notwendig, durch zusätzliche normale Kommentare erhärtet werden.

Ein Standard-Code-Inspector-Lauf für untenstehendes Beispielklasse gibt Warnungen aus, weil eine interne Tabelle per Wertübergabe zurückgegeben und in der SELECT-Anweisung ein Inner Join für Datenbanktabellen mit eingeschalteter Tabellenpufferung verwendet wird.

Der untenstehende Quelltext zeigt die korrigierte Fassung obiger Klasse, für die der Code Inspector keine Meldungen mehr ausgibt.

Die Wertübergabe der internen Tabelle wurde durch eine Referenzübergabe ersetzt. Bei der Übergabe des elementaren Parameters langu wurde die Wertübergabe aus Gründen der Robustheit belassen. In der verwendeten Standardprüfung hatte sie auch keine Warnung erzeugt. Wenn der Code Inspector in einem solchen Fall eine Warnung anzeigt, kann sie mit dem Pseudokommentar "#EC CI_VALPAR ausgeblendet werden.

Der Inner Join der SELECT-Anweisung umgeht die Tabellenpufferung, was bei einem häufigen Aufruf der Methode zu Performanceproblemen führen würde. Wenn wir für das gezeigte Beispiel aber annehmen, dass die Methode Teil einer größeren Anwendung ist, in der selbst für eine Pufferung der ausgewählten Daten über Shared Objects gesorgt wird, ist die Verwendung des Inner Joins anderen weniger performanten Konstrukten, wie zum Beispiel einer geschachtelten SELECT-Schleife, vorzuziehen. Deshalb wird die Warnung des Code Inspectors über den Pseudokommentar "#EC CI_BUFFJOIN ausgeblendet und die Gründe hierfür über einen normalen Kommentar erläutert.
h~typ = d~typ AND
h~langu = d~langu AND
h~dokversion = d~version
WHERE d~id = 'SD' AND
d~object LIKE 'AB%' AND
d~typ = 'E' AND
d~langu = @langu
INTO CORRESPONDING FIELDS OF TABLE @documents.
ENDMETHOD.
ENDCLASS.

Der untenstehende Quelltext zeigt die korrigierte Fassung obiger Klasse, für die der Code Inspector keine Meldungen mehr ausgibt.

Die Wertübergabe der internen Tabelle wurde durch eine Referenzübergabe ersetzt. Bei der Übergabe des elementaren Parameters langu wurde die Wertübergabe aus Gründen der Robustheit belassen. In der verwendeten Standardprüfung hatte sie auch keine Warnung erzeugt. Wenn der Code Inspector in einem solchen Fall eine Warnung anzeigt, kann sie mit dem Pseudokommentar "#EC CI_VALPAR ausgeblendet werden.

Der Inner Join der SELECT-Anweisung umgeht die Tabellenpufferung, was bei einem häufigen Aufruf der Methode zu Performanceproblemen führen würde. Wenn wir für das gezeigte Beispiel aber annehmen, dass die Methode Teil einer größeren Anwendung ist, in der selbst für eine Pufferung der ausgewählten Daten über Shared Objects gesorgt wird, ist die Verwendung des Inner Joins anderen weniger performanten Konstrukten, wie zum Beispiel einer geschachtelten SELECT-Schleife, vorzuziehen. Deshalb wird die Warnung des Code Inspectors über den Pseudokommentar "#EC CI_BUFFJOIN ausgeblendet und die Gründe hierfür über einen normalen Kommentar erläutert.

CLASS class DEFINITION FINAL.
  PUBLIC SECTION.
    TYPES: BEGIN OF docu_wa,
             object   TYPE dokil-object,
             dokldate TYPE dokhl-dokldate,
             dokltime TYPE dokhl-dokltime,
           END OF docu_wa,
           docu_tab TYPE SORTED TABLE OF docu_wa
                    WITH NON-UNIQUE KEY object.
    METHODS get_docu
            IMPORTING VALUE(langu)         TYPE sy-langu "#EC CI_VALPAR
            EXPORTING REFERENCE(documents) TYPE docu_tab.
ENDCLASS.

CLASS class IMPLEMENTATION.
  METHOD get_docu.
    SELECT d~object, h~dokldate, h~dokltime  "#EC CI_BUFFJOIN
           FROM dokil AS d
           INNER JOIN dokhl AS h             "Buffering is done
             ON h~id         = d~id     AND  "by application
                h~object     = d~object AND  "with Shared Objects
                h~typ        = d~typ    AND
                h~langu      = d~langu  AND
                h~dokversion = d~version
           WHERE d~id     = 'SD'     AND
                 d~object LIKE 'AB%' AND
                 d~typ    = 'E'      AND
                 d~langu  = @langu
           INTO CORRESPONDING FIELDS OF TABLE @documents.
  ENDMETHOD.
ENDCLASS.






BAL Application Log Documentation   Fill RESBD Structure from EBP Component Structure  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 10202 Date: 20240523 Time: 182901     sap01-206 ( 153 ms )