Aus der Feder von Lars Hvam, dem Erfinder von abapGit, gibt es seit einiger Zeit ein weiteres geniales Tool. Es heißt abapLint. Mit diesem Tool ist es möglich, statische Syntaxprüfungen von ABAP-Quelltexten durchzuführen – und zwar ohne SAP-System! Aber der Reihe nach…

Was ist ein Linter?

Die SAP-Programmier-Welt ist ein eigenes Multiversum, in dem so einiges anders gemacht wird als in anderen Programmiersprachen und Entwicklungsumgebungen. Da ich mich seit Beendigung meiner Ausbildung als Fachberater Softwaretechniken fast ausschließlich mit SAP beschäftigt habe, sind mir viele Begriffe aus der „normalen“ Entwicklungswelt gar kein Begriff. Als ich im Zusammenhang mit abapLint das erste Mal den Begriff „Linter“ hörte, musste ich nachschlagen, was das wohl sein könnte.

Für alle diejenigen, die dem Begriff Linter ebenso ratlos gegenüberstehen, ein kurzer Ausflug in die Vergangenheit: Linter wurden erfunden, um die Schwächen der damaligen Compiler auszugleichen. Die Compiler verlangten einerseits fehlerfreies Coding, erkannten andererseits jedoch wichtige Abhängigkeiten nicht. Zudem war es dem Compiler egal, wie der Quelltext aussah. Ursprünglich für C wurde das Programm lint entwickelt, das erweiterte Programmprüfungen vornahm. Der Begriff wurde dann auch für andere Programmiersprachen verwendet.

Ein Linter führt statische Analysen durch und erkennt formale Fehler. Also genau das, was auch die ABAP-Syntaxprüfung tut. Die Prüfungen des ABAP-Compilers reichen aus, um zu gewährleisten, dass ein Programm frei von Syntaxfehlern ist. Allerdings benötigt man dafür immer ein SAP-System.

Da viele wichtige Dinge jedoch von der Syntaxprüfung nicht erkannt werden, stellt SAP weitere Tools zur Verfügung, wie zum Beispiel:

  • Die erweiterte Programmprüfung SLIN
  • Den Code-Inspector
  • Paketprüfungen

Typische Fehler, die dem Syntaxcheck egal sind, jedoch zu Problemen bei der Programmausführung führen, sind beispielsweise:

  • Falscher Parametername beim Aufruf von Funktionsbausteinen
  • Verwendete Meldungsnummer ist nicht vorhanden oder hat eine abweichende Parameteranzahl

Was leistet abapLint?

Wenn SAP bereits jede Menge Hilfen zur Verfügung stellt, um Programme und Klassen umfassend zu prüfen, wozu benötige ich dann abapLint?

abapLint ist ein Open-Source-Projekt. Das bedeutet, dass sich jeder beteiligen und weitere Prüfungen beitragen kann. Während die SAP-Tools sich in erster Linie auf funktionale Prüfungen beschränken, bietet abapLint eine Vielzahl von Regeln, die sich auf die Lesbarkeit und Standardisierung von Quelltext konzentrieren. Verschiedene Prüfungen weisen darauf hin, wenn standardisierte Code-Formatierungen nicht eingehalten wurden.

Die Regeln orientieren sich eng am Clean-ABAP-Styleguide der SAP. Genau das sind die Prüfungen, die man in den SAP-Tools vergeblich sucht.

Beispiele für Prüfungen, die abapLint bezüglich Clean-Code durchführt:

  • Hinweis, wenn das EXPORTING-Schlüsselwort beim Aufruf einer Methode entfallen kann (EXPORTING can be omitted)
  • Sicherstellen, dass sich zwischen dem letzten Befehl und dem abschließenden Punkt keine Leerzeichen befinden (Space before dot)
  • NEW-Konstrukt gegenüber CREATE OBJECT bevorzugen (Use NEW)

Andere hilfreiche Regeln:

Die verfügbaren Regeln (aktuell sind es 163) sind dokumentiert und können online auf dem abapLint-Spielplatz ausprobiert werden.

Verwendung auf github

abapLint integriert sich in die Oberfläche von github. Ein kleines unscheinbares „X“ zeigt an, wenn Prüfungen fehlgeschlagen sind:

abapLint BP WB Github

Sie können auf das X klicken und erhalten daraufhin eine Liste mit Details zu den fehlgeschlagenen Prüfungen:

abapLint BP WB Fehler

Über die Datei abaplint.json, welche im Hauptverzeichnis des Repositories liegen muss, kann eingestellt werden, welche Prüfungen ausgeführt werden sollen.

Abgrenzung zu ABAP-Cleaner

Das Open-Source-Projekt ABAP-Cleaner schlägt teilweise in die gleiche Kerbe wie abapLint. Es findet Konstrukte, die hinsichtlich des Clean-Code-Leitfadens nicht gewünscht sind und behebt diese auch gleich. Der ABAP-Cleaner ist ein reines Eclipse-Plugin und verfolgt damit einen anderen Ansatz als abapLint.

Abgrenzung zu SAP-Code-Pal

Das Open-Source-Projekt SAP-Code-Pal hat ebenfalls zum Ziel, die Code-Qualität zu verbessern. Das Projekt ist in Github verfügbar und importiert zusätzliche Prüfregeln in den Code-Inspector, die dort aktiviert werden können.

abaplint.app

Unter der Internetadresse https://abaplint.app/stats sind alle öffentlich verfügbaren ABAP-Repositories von github.com aufgelistet. Die App zeigt, welche zusätzlichen Möglichkeiten abapLint bietet. Zu jedem Repository werden die Issues aufgelistet, die apapLint gefunden hat.

Der Zugriff mit der abapLint-App ist auf öffentliche Repositories kostenfrei. Wenn Sie die App für private Repositories nutzen möchten, ist eine Gebühr von derzeit $19 pro Benutzer und Monat notwendig, die über den Github-Account bezahlt werden muss.

Zu den Repositories gibt es interessante Kennzahlen wie:

  • Methodenlänge
  • Methodenkomplexität

Die Methodenlänge zeigt übersichtlich, wie viele Methoden es mit wie vielen Anweisungen gibt. Unter der Grafik werden die Methoden aufgelistet, absteigend nach der Anzahl der Zeilen. Das folgende Beispiel stammt aus dem Projekt ABAP2UI5:

abapLint BP WB Method Length

Es bietet sich bei Refaktorierungen an, bei den Methoden mit vielen Anweisungen zu beginnen, da hier die Wahrscheinlichkeit sehr hoch ist, dass einzelne Anweisungsblöcke ausgelagert werden können.

Sehr interessant finde ich die Kompatibilitäts-Sicht. Hier wird dargestellt, mit welchen SAP-Releases der Quelltext kompatibel ist.

Hier ein Beispiel vom :

abapLint BP WB Method Statement Compatibility

Unter dem Diagramm werden die jeweils zum Release inkompatiblen Anweisungen aufgeführt.

Ebenfalls hilfreich finde ich die Übersicht Void Types, in der die verwendeten Datentypen aufgelistet werden. Zusätzlich werden hier Informationen darüber aufgezeigt, ob die Datentypen für Cloud freigegeben oder als veraltet gekennzeichnet sind. Wenn es einen offiziellen Nachfolger gibt, wird dieser ebenfalls aufgelistet. Hier ein Beispiel vom Coding unseres ABAP-Kochbuchs:

abapLint BP WB Void Types

Ebenfalls sehr aufschlussreich und ein guter Indikator, wie sich ein Projekt entwickelt, sind die Kennzahlen durchschnittliche Komplexität und durchschnittliche Methodenlänge. Der folgende Screenshot aus dem ABAP2XLSX-Projekt zeigt sehr schön, dass sich die durchschnittliche Methodenlänge im Laufe der Zeit verringert hat:

abapLint BP WB Average Method Length

Ein Indikator dafür, dass sich die Code-Qualität verbessert hat.

Relativ neu hinzugekommen ist der Intra Class Call Graph, der ein Sequenzdiagramm innerhalb einer Methode aufzeigt. Hier erneut ein Beispiel aus dem ABAP2XLSX-Projekt:

abapLint BP WB Intra Class Call Graph

War das etwa schon alles?

Mitnichten. Eigentlich fängt es hier erst an. Mit der abapLint-Initiative hat Lars ein eigenes Universum mit vielen Möglichkeiten geschaffen. So geht es weiter:

Der abapLint-Transpiler ermöglicht es, ABAP auf einem Raspberry Pi laufen zu lassen, oder dass ABAP als Sprache bei Exercism verfügbar ist.

Wer sich für die weiteren Entwicklungen interessiert, sollte Lars auf LinkedIn folgen. Er postet hier in unregelmäßigen Abständen interessantes rund um ABAP-Programmierung.