Dsag Besteht Practice
Dsag Besteht Practice
Dsag Besteht Practice
Stand:
20. September 2016
Autoren:
Dr. Christian Drumm, Leiter Anwendungsentwicklung & Beratung, Dr. Christian Lechner, Principal IT Consultant, msg systems ag
FACTUR Billing Solutions GmbH
Steffen Pietsch, Head of Backoffice, Haufe-Lexware GmbH & Co.KG
Martin Fischer, Portfolio Unit Manager SAP Database & Technology, BridgingIT GmbH
Daniel Rothmund, IT Business Analyst SAP, Geberit Verwaltungs GmbH
Judith Forner, Senior Consultant Finance & Controlling,
Mundipharma Deutschland GmbH & Co. KG Holger Schäfer, Business Unit Manager, UNIORG Solutions GmbH
Edo von Glan, SAP-Entwickler, Drägerwerk AG & Co. KGaA Denny Schreber, Senior Solution Architect, cbs Corporate Business Solutions
Unternehmensberatung GmbH
Florian Henninger, Senior Consultant SAP Development, FIS GmbH
Andreas Wiegenstein, Managing Director und Chief Technology Officer (CTO), Virtual
Martin Hoffmann, Head of Software Engineering, Miele & Cie. KG Forge GmbH
Valentin Huber, Senior IT Consultant, msg systems ag Bärbel Winkler, Systemanalystin SAP-Basis/Programmierung,
Alfred Kärcher GmbH & Co. KG
Jens Knappik, SAP System Architect, thyssenkrupp Materials Services GmbH
Weitere Informationen zu den Autoren finden Sie in Kapitel „11 Die Autoren“.
Darüber hinaus gilt besonderer Dank den SAP-Mitarbeitern, die uns durch Reviews,
Diskussionen und konstruktive Vorschläge bei der Erstellung der 2. Auflage des
Leitfadens aktiv unterstützt haben. Insbesondere danken wir Jürgen Adolf, Carine
Tchoutouo Djomo, Olga Dolinskaja, Thomas Fiedler, André Fischer, Dr. Thomas
Gauweiler, Oliver Graeff, Michael Gutfleisch, Martin Huvar, Karl Kessler, Michael
Schneider, Harald Stevens, Christoph Stöck, Dr. Wolfgang Weiss, Wolfgang Wöhrle und
Margot Wollny.
ANHANG A: NAMENSKONVENTIONEN 83
A.1 NAMENSKONVENTIONEN REPOSITORY-OBJEKTE 84
A.1.1 Pakethierarchie 85
A.1.2 Dictionary Objekte 85
A.1.3 Container für Quelltextobjekte 86
A.2 NAMENSKONVENTIONEN ABAP-QUELLTEXT 88
A.2.1 Klassische Benutzerdialoge (Selektionsbilder / Dynpros) 88
A.2.2 Sichtbarkeit 88
A.2.3 Signaturen 88
A.3 WEITERFÜHRENDE INFORMATIONEN ZU NAMENSKONVENTIONEN 89
A.4 SONSTIGES / LESSONS LEARNED 89
A.4.1 Kundennamensräume 89
A.4.2 Vermeidung überflüssiger Bezeichnerinformationen 89
A.5 FORMULARE 90
A.6 SCHUTZ VON NAMENSKONVENTIONEN IN DER ABAP-WORKBENCH 90
IMPRESSUM 92
kontinuierlichen Anpassung und Erweiterung durch sich ändernde Kundenbedürfnisse. Wir freuen uns auf Ihr Feedback!
Das hohe Maß an Flexibilität und Erweiterbarkeit von SAP-Software bringt Vor- und
Nachteile mit sich: Die Software kann optimal an kundenspezifische Anforderungen
angepasst und damit die Wertschöpfung durch den Einsatz deutlich gesteigert werden. 1.2 POSITIONIERUNG
Zeitgleich birgt die Erweiterbarkeit das Risiko kundenspezifischer Entwicklungen, die
komplex, aufwendig wartbar und fehleranfällig sind. Von der SAP und einer ganzen Reihe von Fachverlagen existieren bereits sehr gute
Publikationen zu Anwendungsentwicklung und Erweiterung der SAP-Plattform. Im
2012 erschien die erste Version des DSAG-Best-Practice-Leitfadens mit dem Ziel, Verlauf dieses Leitfadens weisen wir auf aus unserer Sicht lesenswerte Literatur hin.
Praxistipps und Denkanstöße für die wartbare und effiziente Gestaltung kundenspezi-
fischer Entwicklungen zu liefern. In den Folgejahren wurde er in die englische Sprache Der Mehrwert dieses Dokuments liegt in der Zusammenfassung bewährter Vorgehens-
übersetzt. Aus dem Leserkreis der ersten Version haben wir zahlreiche Rückmeldun- weisen, Praxistipps und erprobter Regelwerke aus den Anwenderunternehmen. Diese
gen erhalten. Zudem hat sich in der SAP-Entwicklung in den letzten Jahren viel Guideline soll Ihnen als Anwender, Entwickler, Entwicklungs-, Projekt- oder IT-Leiter
verändert und es wurden etliche Neuerungen eingeführt. Deshalb stellen wir Ihnen Anregungen und Hilfestellung geben, um „das Rad nicht immer wieder neu erfinden zu
hiermit die zweite, vollständig überarbeitete und aktualisierte Auflage des DSAG-Best- müssen“ und auf die Erfahrungen anderer aufbauen zu können. Dabei erheben die in
Practice-Leitfadens zur Verfügung. dieser Guideline vorgestellten Empfehlungen nicht den Anspruch auf Vollständigkeit
oder absolute Gültigkeit, sondern stellen eine Auswahl von Praxistipps dar.
Als Autorenteam haben wir uns darum bemüht, im Spannungsfeld zwischen Über-
1.1 MOTIVATION & IHR MITWIRKEN blickswissen und Detailtiefe den richtigen Mix zu finden. Daher verweisen wir an
entsprechenden Stellen auf weiterführende Quellen, um bereits ausführlich diskutier-
Die Arbeit der Deutschsprachigen SAP-Anwendergruppe e.V. (DSAG) fußt auf drei te Themen nicht redundant wiederzugeben.
Säulen – Wissensvorsprung, Einflussnahme und Netzwerk. Das vorliegende Dokument
wurde von Mitgliedern des DSAG-Arbeitskreises SAP NetWeaver Development initiiert
und adressiert die erste Säule, Wissensvorsprung für Anwender und Partner.
1.3 ÄNDERUNGEN IN DER 2. AUFLAGE
Als Autorenteam ist es unser Anliegen, das in den Unternehmen verteilt und implizit
vorliegende Wissen zum Thema Entwicklung in einem kompakten Dokument anderen Die zweite Auflage dieses Dokuments orientiert sich an der Struktur der ersten
DSAG-Mitgliedern zur Verfügung zu stellen. Unser Wunsch ist, dass dieses Dokument Auflage aus dem Jahr 2012. Inhaltlich wurde jedes Kapitel grundlegend geprüft und
„lebt“ und mit Ihrem Erfahrungsschatz einer kontinuierlichen Verbesserung unterliegt. überarbeitet. Hierbei wurden einige Empfehlungen der ersten Auflage aufgrund von
Rückmeldungen der DSAG-Mitglieder angepasst und andere umfassend durch das
Wir haben hierzu eine Community-Webseite eingerichtet, über die Sie weitere Informa- Autorenteam erweitert. Darüber hinaus sind die Kapitel „Entwicklungsumgebung“ und
tionen zum Leitfaden erhalten, mit dem Autorenteam und anderen DSAG-Mitgliedern „User Interface“ neu hinzugekommen.
in Kontakt treten und Ihre Rückmeldung mit anderen teilen können:
Auch wenn Sie bereits mit der ersten Auflage dieses Leitfadens vertraut sein sollten,
empfehlen wir Ihnen die Lektüre und Anwendung der Empfehlung dieser vollständig
überarbeiteten, zweiten Auflage.
Dieses Kapitel beschreibt erprobte und empfohlene Programmierrichtlinien für Eine Erweiterung der ABAP-Programmierrichtlinien macht vor allem dann Sinn, wenn
2 PROGRAMMIERRICHTLINIEN
Anwendungen, die mit Hilfe der Programmiersprache ABAP erstellt werden. Es wird Sie Themenbereiche aufnehmen wollen, die die Standard-Regeln momentan nicht
beschrieben, wie mit Standard-SAP-Mitteln und Disziplin lesbarer und verständlicher abdecken. Hierzu gehören Designprinzipien zur Objektkomposition (SOLID4 /GRASP5)
ABAP-Quellcode entwickelt werden kann. Dies erleichtert die Wartung des Quellcodes und architektonische Konzepte wie z.B. das SAP-Paketkonzept oder die Verwendung
und ermöglicht, dass verschiedene interne und externe Personen effizient an der von Frameworks. Denkbar ist auch eine zusätzliche Auflistung der Regeln, die für Ihr
(Weiter-) Entwicklung und Wartung eines Programms zusammenarbeiten. Unternehmen als zentral erachtet werden. Weitere Details, wie Sie die ABAP-Schlüssel
wortdokumentation erweitern können, entnehmen Sie bitte dem Anhang (Kapitel B.1).
Verwendung der offiziellen ABAP-Programmierrichtlinien
Seit NetWeaver 7.31 SP5 sind die offiziellen ABAP-Programmierrichtlinien der SAP
fester Bestandteil der ABAP-Schlüsselwortdokumentation. Sie sind dem Entwickler
über die lokale Systeminstallation (Transaktion ABAPDOCU / F1-Hilfe im ABAP-Editor
/ ADT) oder über das SAP Help Portal1 zugänglich. Neben dem hochwertigen und BEST PRACTICE
umfangreichen Inhalt hat das Dokument gegenüber anderen Entwicklungsrichtlinien • Stellen Sie Ihre Entwicklungsrichtlinien in der Ent-
den Vorteil, dass es direkt in die Entwicklungsumgebung integriert werden kann und wicklungsumgebung zur Verfügung, damit schnell auf
nicht in der Schreibtischschublade verstaubt. Sie finden eine Anleitung für die SAP-Ea-
sie zugegriffen werden kann.
sy-Access-Menü-Integration im SAP-Hinweis 13870862 bzw. für die SE80-Integration
im verlinkten SAP-Community-Network (SCN)-Blog3. • tatten Sie die Entwicklungsrichtlinien mit vielen
S
transparenten und nachvollziehbaren Beispielen aus,
Die ABAP-Programmierrichtlinien der SAP zeichnen sich aus durch die ggf. als Code Snippets wiederverwendet werden
können.
• sehr fundierte und praxisnahe Empfehlungen,
• rientieren Sie sich an den offiziellen ABAP-Pro-
O
• detaillierte Informationen zu jeder Regel mit Beispielen, grammierrichtlinien der SAP. Das sehr umfangreiche
Dokument bietet für ein sehr breites Feld von Aktivi-
• ihre Verfügbarkeit in Deutsch und Englisch,
täten detaillierte Handlungsempfehlungen an.
• die kontinuierliche Weiterentwicklung durch SAP,
• individuelle Erweiterungsoptionen.
1 Vgl. SAP Help Portal „ABAP Schlüsselwortdokumentation – NW7.50“
2 Vgl. SAP-Hinweis „1387086 – HTML Viewer Control auf Einstiegsbild von SAP Easy Access“ 4 Vgl. https://de.wikipedia.org/wiki/Prinzipien_objektorientierten_Designs#SOLID-Prinzipien
3 Vgl. SCN-Artikel „Enhancing the ABAP Workbench with a website containing dev guidelines!“ 5 Vgl. https://de.wikipedia.org/wiki/GRASP
Kurzversion zusammen. Durch seinen Umfang und Benennung von Softwareobjekten (z.B. Klassen, Funktionsbausteinen) bzw. zur
Benennung von Objekten im Quellcode (z.B. Variablen).
den hohen Detaillierungsgrad ist die vollständige
Sichtung der offiziellen ABAP-Programmierrichtlinien Wir empfehlen ausdrücklich, eine Namenskonvention als Richtlinie für Entwicklungen
relativ aufwendig und beinhaltet zum Teil Themenbe- im SAP-System vorzugeben. Das Ziel der Verwendung einer einheitlichen Namenskon-
reiche, die nicht für jede alltägliche Entwicklungsakti- vention ist die deutliche Steigerung der Wartbarkeit kundenspezifischer Anpassungen
vität relevant sind. Falls das Dokument in Ihrer und Erweiterungen. In der Konsequenz führt dies zu geringeren Wartungsaufwänden
Organisationseinheit eingesetzt werden soll, empfeh- bzw. -kosten und einer schnelleren Problemlösung im Fehlerfall.
len wir, ein Team mit der Zusammenfassung des
Die explizit formulierte Namenskonvention sollte Bestandteil der internen Ausbildung
Dokuments zu beauftragen und den Umgang mit dem
sein, um neue Mitarbeiter mit den Grundregeln und Unternehmensspezifika vertraut
Dokument anhand von Schulungsmaßnahmen in die zu machen. Zudem hat es sich bewährt, diese Namenskonvention zum Vertragsgegen-
Organisation auszurollen. Gerade in größeren Organi- stand für externe Entwickler und Partnerunternehmen zu machen. Automatisierte
sationseinheiten macht es Sinn, das Team mit Inter- Überprüfungen stellen die Einhaltung sicher (vgl. Kapitel 2.9 und Anhang A).
essenvertretern aus dem Bereich Qualitätssicherung
und Entwicklung zu besetzen und die einzelnen
Punkte ggf. an die individuellen Bedürfnisse der
Organisation anzupassen.
• ird das Dokument Bestandteil von externen Werk-
W BEST PRACTICE
verträgen sollte der Abnahmeprozess durch die Eine exemplarische Namenskonvention finden Sie im
externen Entwickler in die Aktivierung des Entwick- Anhang A.
lerschlüssels eingebunden und im Dialog für die
Abnahme auf das Dokument verwiesen werden.
WEITERE QUELLEN:
Die Trennung von Kundenobjekten und SAP-Objekten kann über die Präfixe Y oder Z BEST PRACTICE
2 PROGRAMMIERRICHTLINIEN
sowie über einen eigenen Namensraum erfolgen. Die Syntax lautet wie folgt: Wir empfehlen die Verwendung eines kunden-
eigenen Namensraums.
Z…
Y…
/<kundeneigener Namensraum>/…
Der kundeneigene Namensraum kann bei SAP von SAP-Bestandskunden kostenfrei WEITERE QUELLEN
registriert werden und ist nach Bestätigung weltweit eindeutig und für das jeweilige
Unternehmen zur Verwendung registriert. Dieses Vorgehen unterstützt bei der 1. http://help.sap.com (Namensraum einrichten)
konfliktfreien Vergabe von Namen für Softwareobjekte.
2. Hinweis 105132 – Reservierung von Namensräumen
Der Vorteil des kundeneigenen Namensraums liegt in der garantierten Überschnei-
dungsfreiheit beim Import fremder Objekte in das eigene SAP-System (z.B. beim 3. Hinweis 84282 – Entwicklungs-Namensräume für Kunden und Partner
Einsatz von Fremdanwendungen, die per Transportauftrag eingespielt werden) und bei
Zusammenführungen von SAP-Systemen im Rahmen einer Post-Merger-Integration. 4. SAP Support Portal: http://support.sap.com/namespaces
Durch die Reservierung des Namensraums ist sichergestellt, dass auf keinem frem-
den, d.h. nicht für diesen Namensraum registrierten, System ein Softwareobjekt mit
dem gleichen Präfix erstellt werden kann.
2.3 LESBARKEIT UND MODULARISIERUNG
Der Nachteil bei der Verwendung des kundeneigenen Namensraums liegt darin, dass
durch die durchgängige Verwendung des Präfixes bereits mehrere Zeichen bei der Es ist nicht einfach, einen gut lesbaren und einfach zu verstehenden Quellcode zu
Benennung von Objekten „verbraucht“ werden. Besonders bei Objekten, die nur erzeugen und es erfordert Disziplin und Professionalität. Der Aufwand lohnt sich aber
wenige Zeichen zur Benennung bieten, kann die Vergabe eines sprechenden Namens langfristig, vor allem bei langlebigen Applikationen mit kontinuierlichen Wartungs-
schwierig werden. Darüber hinaus gibt es Objekttypen, wie z.B. Berechtigungsobjekte, und Erweiterungsaktivitäten. Doch was macht gut lesbaren, einfach zu verstehenden
die die Verwendung von Namensräumen nicht unterstützen. Gleiches gilt für Tools und Quellcode aus? Wirft man einen Blick über den ABAP-Tellerrand7, geht es immer um
Frameworks der SAP. Obwohl es sinnvoll und empfehlenswert ist, diese einzusetzen, die Einfachheit des Quellcodes. Um dies zu erreichen, schlagen wir folgende Vorge-
kann es bei der Verwendung zu Problemen kommen, weil die Verwendung eines hensweisen vor:
Namensraums in der Partner- oder Kundenentwicklung nicht durchgängig oder gar
nicht vorgesehen ist. Wir empfehlen daher, dies vor Einsatz eines neuen Tools oder • Einsatz von natürlicher Sprache („sprechende“ Benennung von Variablen,
Frameworks zu überprüfen. Prozeduren usw.)
8 Die fünfstelligen Feldbezeichner aus den klassischen Modulen sind ein Sonderfall. Wenn sie in Strukturen verwendet werden, fällt bei
Umstellung auf sprechende Bezeichner einiger Aufwand (und Fehlerrisiko) für das Mapping in beide Richtungen an. Daher kann die
Beibehaltung (trotz schlechterer Lesbarkeit) sinnvoll sein.
BEST PRACTICE
Wir empfehlen, den Pretty Printer / Formatierer zu ver-
wenden und die Einstellungen als einheitliche Vorgabe
zu definieren. Neben den Einstellungen im Pretty Printer
empfehlen wir außerdem, die funktionale Schreibweise
von Methodenaufrufen zu verwenden und auf den Aus-
druck CALL METHOD zu verzichten.
• Nutzen Sie Strukturpakete, um die Abhängigkeit von spezifisches Namensraumpräfix. Orientieren Sie sich
verschiedenen Softwarekomponenten hervorzuhe- dabei an der Anwendungshierarchie oder an einem
ben, umfangreiche Eigenentwicklungen sinnvoll zu Produktkürzel (Beispiel: Alle Objekte in der Pakethier-
gruppieren oder wenn Sie die Paketprüfung verwen- arche zu dem Hauptpaket Z_SALES_SUPPORT erhal-
den möchten. ten das Präfix SAS: Klasse ZCL_SAS_FIELD_WORKER,
• Prüfen Sie im Rahmen Ihrer Entwicklung, ob im Stammdatentabelle ZSASFIELDWORKERS, etc.).
Kundennamensraum bereits ein Hauptpaket für die
passende Top-Level-Anwendungskomponente (SE81)
existiert und legen Sie es anderenfalls an.
Paketschnittstellen und Verwendungserklärungen
• Ordnen Sie Pakete immer der semantisch am besten
passenden Anwendungskomponente zu. Der Paketzugriff lässt sich auf allen Paketebenen über Paketschnittstellen und
• Verwenden Sie Pakethierarchien, um Ihre Soft- Verwendungserklärung definieren. Während die Paketschnittstelle der Bekanntma-
waresysteme zu organisieren. Jedes Softwaresystem chung wiederverwendbarer Komponenten des Pakets dient, lässt sich über die
sollte mindestens über ein Hauptpaket verfügen, das Verwendungserklärung der Zugriff auf die Komponenten kontrollieren. Programmiert
ein Entwickler an der Paketschnittstelle vorbei und greift z.B. auf SAP-Standard-Kom-
seine Teilsysteme zusammenhält und deren wesentli- ponenten zu, die nicht über eine Paketschnittstelle freigegeben sind, kann das einen
che Absicht verdeutlicht. nicht zu unterschätzenden Aufwand auf Kundenseite im Rahmen von Upgrade-Aktivi-
• Setzen Sie Entwicklungspakete ein, um die seman- täten bedeuten. Was bei Nutzung von nicht freigegebenen Komponenten passieren
tisch und technisch zusammenhängenden Reposito- kann, ist exemplarisch im SCN-Blog11 beschrieben.
ry-Objekte an einer zentralen Stelle zu bündeln.
Sie können den Zugriff auf Komponenten anderer Pakete optional über das Konzept der
• Vermeiden Sie gegenseitige Abhängigkeiten zwischen Paketprüfungen steuern. Weitere Details für die Aktivierung der Paketprüfung sind in
zwei oder mehreren Paketen. Lagern Sie die abhängi- dem SAP-Hinweis 64889812 enthalten. Nach der Aktivierung können Sie die Werkzeuge
gen Komponenten in separate Pakete aus, so dass nur des Paketes SPAK_API nutzen und die Paketzugriffe kontrollieren.
noch eine einseitige Abhängigkeit besteht.
• Ordnen Sie Pakete mit einseitiger Abhängigkeit
möglichst weit oben in der Pakethierarchie Ihres
Softwaresystems an. Entsteht Bedarf, die Funktiona-
lität aus mehreren Softwaresystemen zu verwenden,
kann das Paket in ein allgemeines Basispaket ausge-
lagert werden.
11 Vgl. http://scn.sap.com/community/abap/blog/2013/01/28/is-sap-nw-ehp-3-really-non-disruptive
12 Vgl. https://launchpad.support.sap.com/#/notes/648898
BEST PRACTICE Neben den allgemein bekannten Kundennamensräumen Y*, Z* und /namespace/ bietet
2 PROGRAMMIERRICHTLINIEN
• Prüfen Sie vor der Wiederverwendung eines paket- SAP über das Paketkonzept die Bereiche $* und T* an. $TMP dürfte jedem Entwickler
geläufig sein. Aber wissen Sie auch, dass Sie die beiden Namensräume auch für eigene
fremden Repository-Objekts erst, ob das Objekt in
Pakethierarchien im Sinne von lokalen Entwicklungspaketen nutzen können? Der
einer Paketschnittstelle freigegeben wurde. Nur Unterschied zwischen den beiden Namensräumen besteht darin, dass $* nicht
Objekte die über eine Paketschnittstelle freigegeben transportiert werden kann und sich der Entwickler manuell um die Versionierung
sind, gewährleisten eine langfristige Stabilität. Im kümmern muss. Im Gegensatz dazu lässt sich der Inhalt von T* Paketen manuell via
SAP-Standard reduziert die Verwendung solcher Transport von Kopien in alle Systeme, die nicht als Produktivsystem gekennzeichnet
Objekte die Gefahr vor Veränderung bei einem sind, transportieren. Aus Sicht der Softwarestrukturierung ergeben sich daraus
Releasewechsel. folgende Vorteile:
• Stellen Sie den Zugriff auf Objekte eines Paketes über • Die Einarbeitung in neue Pakete ist einfacher, da weniger Overhead für die
die Definition von Paketschnittstellen zur Verfügung. Identifikation von halb fertig entwickelten Test- und produktiv genutzten Kompo-
Nur durch eine stringente Einhaltung der Pa- nenten entsteht.
ketschnittstellen lässt sich gewährleisten, dass die
• Produktivsysteme werden nicht mit unnötiger und evtl. sicherheitskritischer
von Ihnen definierte Paketstruktur eingehalten wird
Funktionalität überfrachtet.
und kein wilder Zugriff auf die Objekte Ihres Paketes
stattfindet. • Wartungs- und Weiterentwicklungskosten lassen sich reduzieren, da notwendige
• Bieten Sie bei Bedarf mehrere Paketschnittstellen an Änderungen zwingend nur in produktiv genutzten Paketen durchgeführt werden
müssen.
und gruppieren Sie die Schnittstellen auf Basis
semantischer Informationen, wie z.B. Datenmanipula-
tion oder Reporting-Werkzeuge, oder nach Verwen-
dungskriterien.
BEST PRACTICE
• Reichen Sie Ihre Paketschnittstellen bei Bedarf in der • Nutzen Sie einen passenden Namensraum für die
Pakethierarchie weiter nach oben. Dort haben Sie die Anlage Ihrer Pakete. Orientieren Sie sich an der
Möglichkeit, die Zugriffe weiter einzuschränken oder Transportrelevanz und dem Verwendungszweck der
die freigegebenen Elemente auch außerhalb Ihres Entwicklung (Testentwicklung lokal / Testentwicklung
Systems zugänglich zu machen. mit abweichendem Transportziel).
• Schränken Sie die Verwendung von kritischen Funkti- • Achten Sie darauf, dass lokale Entwicklungen nicht in
onen ein, indem Sie für diese Objekte separate Pa- das Produktivsystem gelangen.
ketschnittstellen anbieten. Die Nutzungsrechte der
Schnittstellen können Sie über die Definition einer
Einschränkung von Verwenderpaketen ausprägen.
nicht für jedes Unternehmen gleich geeignet und kann bei falscher Ausprägung nicht hier Grenzen, sodass manuelles Editieren notwendig sein kann).
zu rechtfertigende Mehraufwände bedeuten. Um Ihnen bei der Entscheidungsfindung
zu helfen, stellen wir Ihnen nachfolgende Tabelle zur Verfügung. Vermeidung von globalen Variablen
Die Bewertungskriterien orientieren sich an den Werten (+) = weniger wichtig bis (+++)
= sehr wichtig. Neben der Aufteilung des Programmtextes betrifft die Modularisierung auch die
Sichtbarkeit der Variablen. Diese sollte so gering wie möglich gehalten werden.
Regiona-
Große / Überset-
Kleines le Viel Wenig Add-on- Globale Variablen zerstören die Modularisierung eines Programms. Sie erschweren
Dezent- zungs-
zentrales Spezial- Custom Custom Entwick- das Verständnis und die Wartbarkeit massiv. Fehlerbehebungen und Erweiterungen
rale Aktivitä-
Team entwick- Code Code lung sind oft nur noch in der Art „Versuch und Irrtum“ möglich.
Teams ten
lung
Allg.
Paket- ++ +++ ++ +++ +++ ++ ++
konzept
BEST PRACTICE
Paket
schnitt- ++ +++ +++ + +++ + +++
Vermeiden Sie sämtliche globale Variablen.
stellen
Struktur-
+ ++ + ++ ++ + +++
pakete
Paket- Grenzen der Regel
+ ++ ++ + +++ + +++
prüfung
Bei kleinen Programmen mit nur wenigen, überschaubaren Modularisierungseinheiten
sind globale Variablen meist unschädlich (durch die geringe Größe ist das Programm
Modularisierung normalerweise übersichtlich und „versteckte“ bzw. wenig offensichtliche Nebenwirkun-
gen durch Änderungen an globalen Variablen sind unwahrscheinlich). Globale Variablen
Programme, in denen logische Verarbeitungseinheiten zu lang sind und nicht aufgeteilt lassen sich leider nicht in allen Fällen vermeiden. Insbesondere für die Elemente
werden, sind in weiterer Folge schwer lesbar und damit schwer wart- und erweiterbar. klassischer Dynpros und Selektionsparameter sind sie weiterhin erforderlich.
Eine Modularisierungseinheit (Form-Routine, Methode, Funktionsbaustein) soll logisch Eine weitere Ausnahme sind Druckprogramme unter der Technik SAPSCRIPT, welche
zusammengehörende Anweisungen zusammenfassen. Dabei ist jedoch zu beachten, explizit mit globalen Variablen arbeitet. Hier sollte man aufgrund der Lesbarkeit
dass die einzelnen Einheiten nicht triviale Funktionalitäten abdecken: Modularisie- immer mit Rückgabeparametern arbeiten, welche dann entsprechend in globalen
rungseinheiten mit sehr wenigen Anweisungen sind zu vermeiden, es sei denn, sie Variablen verfügbar gemacht werden.
dienen der besseren Lesbarkeit des Quellcodes und sind damit Teil der Dokumentation
des Quellcodes. Vermeidung von Code-Kopien
Die Modularisierung dient dazu, trotz Komplexität in der Aufgabenstellung, den Doppelter oder mehrfach existierender Quellcode (Klone) erschwert die Fehlerbehe-
Quellcode übersichtlich zu gestalten. Siehe hierzu auch Abschnitt „2.12 Programmier- bung, Funktionsänderung oder -erweiterung, da sichergestellt werden muss, dass alle
modell: Objektorientiert vs. Prozedural“. Kopien gefunden und angepasst werden. Hinzu kommt, dass die Kopien üblicherweise
nicht mehr 100%ig identisch sind und mit viel Mühe herauszufinden ist, ob und wo sie
sich unterscheiden.
logik erfolgen. Dies erlaubt es, Ergebnisse und Funktionen der Anwendungslogik
durch verschiedene User Interfaces (UIs) dem Benutzer anzuzeigen sowie über eine
einheitliche Schnittstelle anderen Systemen bereitzustellen. Diese Aussage ist für alle
BEST PRACTICE gängigen UI-Technologien gültig, wobei der Grad der Unterstützung bzw. Einhaltung
Befolgen Sie das DRY-Prinzip: „Don’t repeat yourself“13 dieser logischen Trennung unterschiedlich ist. In einer Floorplan-Manager/Web-Dyn-
und lagern Sie vor der erneuten Verwendung den Quell- pro-ABAP-Realisierung ist schon vom Framework eine Trennung zwischen Modell-
code in eine separate Methode aus. und UI-Logik vorgesehen. Bei klassischen Dynpros und BSPs wird die Trennung nicht
in gleicher Weise forciert, aber grundsätzlich kann und sollte die Trennung auch in
diesen Umgebungen umgesetzt werden. Allerdings gibt es hierfür keine technische
Prüfung wie bei Floorplan-Manager/Web Dynpro, für den entsprechende Prüfungen im
Code Inspector realisiert sind. Die gleichen Grundsätze gelten natürlich auch bei der
Anmerkungen UI5-Entwicklung (siehe Kapitel 10), bei der die Oberflächentechnologie bereits das
Model-View-Controller-Muster vorsieht und die Applikationslogik vom jeweiligen
Eine etwas großzügigere Formulierung des DRY-Prinzips ist die Dreierregel14, nach Backend zur Verfügung gestellt wird.16
der die erste Kopie noch erlaubt ist.
Ein typisches Beispiel für eine klare Trennung von Anwendungslogik und UI sind
Bei der Suche von Code-Kopien15 sollte generierter Quellcode ausgenommen werden, Plausibilisierungsregeln. Wenn die Plausibilisierung von Eingaben in einer bestimmten
da es sich hier um bewusste Kopien handelt. UI-Technologie (in der Präsentationsschicht) entwickelt wird, müssen diese Prüfungen
bei einem Wechsel auf eine andere UI-Technologie neu entwickelt werden. Um dies zu
Mehrere Anweisungen in einer Zeile, Method Chaining vermeiden, sollten die Funktionen zur Prüfung von Eingaben oder Parametern unab-
hängig von der verwendeten UI erstellt und gepflegt werden.
Um die Lesbarkeit des Quellcodes zu erhöhen, empfehlen wir, auf mehrere Anweisun-
gen in einer Codezeile zu verzichten. Meist ist es darüber hinaus auch sinnvoll, den Quellcode für das Datenmodell bzw. die
Datenbankzugriffe getrennt zu halten, sei es (bei kleinen, nicht auf Wiederverwendung
Eine Ausnahme stellt das Method Chaining dar. Durch die Verkettung von Methoden- zielenden Entwicklungen) über eine separate lokale Klasse, oder über Frameworks
aufrufen können Variablen, die nur zum Halten von Zwischenergebnissen eingeführt wie BOPF (Business Object Processing Framework17). Dies entspricht dem klassischen
würden, vermieden und der Quellcode so lesbarer gestaltet werden. Eine sehr tiefe Model-View-Controller-Muster.
Verkettung von Methoden kann jedoch insbesondere in Kombination mit wenig spre-
chenden Methodennamen die Lesbarkeit reduzieren. Eine pauschale Richtlinie kann
daher nicht gegeben werden.
13 Vgl. https://de.wikipedia.org/wiki/Don%E2%80%99t_repeat_yourself
14 Vgl. http://en.wikipedia.org/wiki/Rule_of_three_(programming) 16 SAP-Roadmap für die Oberflächenstrategie
15 Zum Beispiel mit dem SAP Clone Finder, Transaktion CCAPPS 17 http://scn.sap.com/community/abap/bopf
müssen in Textelementen (Programmtexte, Klassentexte, Online-Text-Repository • Nutzung der Sprache Englisch als zentrale Originalsprache
[OTR]), Standardtexten oder Nachrichtenklassen hinterlegt werden. Da alle Eigenent-
wicklungen den Anspruch haben sollten, weltweit eingesetzt zu werden, sollten alle • Definition einer Übersetzungstiefe (z.B. nur Oberflächentexte, Oberflächentexte
Texte in die jeweils wichtigsten Sprachen übersetzt werden. und F1-Hilfen, Komplettübersetzung) mit Orientierung am SAP Standard Transla-
tion Level18
Konfigurierbare sprachabhängige Texte werden in eigenen Texttabellen abgelegt. Eine
solche Texttabelle besitzt dieselben Schlüsselattribute wie die zugehörige Customi- • Zuordnung der Pakete zur SAP-Anwendungshierarchie, um für die Verteilung von
zing-Tabelle und verweist auf diese über eine Fremdschlüsselbeziehung. Zusätzlich Toptexten domänenspezifische Textvorschläge nutzen zu können
muss das erste Schlüsselattribut nach dem Mandantenfeld das Sprachenattribut sein
(Datenelement SPRSL oder SPRAS). • Kennzeichnung technischer Texttabellen, die nicht übersetzungsrelevant sind
• Nutzung von Langtextobjekten (z.B. via SO10) statt der Aufteilung von Texten in
mehrere Zeilen
BEST PRACTICE • Verwendung einer einheitliche Terminologie und Schreibweise von Bezeichnern
• Wir empfehlen, den Code Inspector bzw. ATC für die mit Hilfe der Terminologiedatenbank
Suche nach nicht übersetzbaren Texten zu verwen-
den. • Vermeidung anonymer Platzhalter (&) in Nachrichtentexten (stattdessen Nutzung
von &1 &2 &3 &4, da deren Positionierung im Nachrichtentext in verschiedenen
• Um spätere Übersetzungen einfach zu gestalten, Sprachen unterschiedlich sein kann)
sollte die Länge der Feldbezeichner und Textelemen-
te möglichst lang gewählt werden. Als Faustregel für • Arbeiten mit Auffüllsprachen in Systemen ungleich dem Entwicklungssystem für
die Länge von Textelementen hat sich bewährt, die die Auffüllung von Übersetzungslücken in den Zielsprachen Einsatz der Pseudo-
sprache 2Q für technische Oberflächentests19
1,5-fache Länge der nativen Beschreibung vorzusehen.
• Verwendung des SAP-Paketkonzeptes für die Trennung von übersetzungsrele-
vanten von nicht übersetzungsrelevanten Elementen
WEITERE QUELLEN
18 Vgl. https://websmp102.sap-ag.de/~form/handler?_APP=00200682500000002672&_EVENT=DISPLAY&_SCENA-
RIO=01100035870000000122&_HIER_KEY=501100035870000008578&_HIER_KEY=601100035870000248115&
19 http://www.se63.info/pseudo-localization-sap-applications/
Dynamische Programmierung Zur Laufzeit wird die WHERE-Bedingung für eine Datenbankoperation, z.B. SELECT, in
2 PROGRAMMIERRICHTLINIEN
• Steigerung der Flexibilität • Bei der dynamischen Programmierung ist in der Regel zur Designzeit keine
syntaktische Prüfung möglich. Dies kann bei fehlerhafter Belegung der
• Steigerung der Wiederverwendbarkeit variablen Inhalte (z.B. fehlerhafte Klammerung innerhalb einer dynamischen
WHERE-Klausel, fehlerhafter Name einer Klasse) einen Abbruch bei der
• Vermeidung von Kopien und damit Verkleinerung der zu wartenden Quellcode-Menge Programmausführung verursachen.
Beispiele zu den Vorteilen: • Die dynamische Programmierung birgt hohe Sicherheitsrisiken, wenn die
dynamischen Inhalte durch ungeschützten Zugriff beeinflussbar sind (z.B. wenn
Beispiel 1 – Eigener Aufbau von User Exits eine WHERE-Bedingung durch Benutzereingaben beeinflusst werden kann;
Stichwort: SQL-Injection).
Durch die statische Definition einer abstrakten Klasse inkl. Methodensignatur wird das
Grundgerüst für einen „User Exit“ vorgegeben. Anschließend können mehrere konkre- • Die Komplexität des Quellcodes erhöht sich.
te Implementierungen der abstrakten Klasse angelegt werden. Zur Laufzeit wird z.B.
aus einer Customizing-Tabelle der Name der zu verwendenden konkreten Klassenim-
plementierung gelesen und diese aufgerufen. Somit können unterschiedliche Imple-
mentierungsvarianten per Customizing aktiviert/deaktiviert werden.
20 https://de.wikipedia.org/wiki/Boilerplate#Programmierung
• Dynamische Programmierung sollte nur sehr dosiert • Verwenden Sie keine Techniken, um Ihren Quellcode
und kontrolliert zum Einsatz kommen. Quellcode, der zu verstecken, und vereinbaren Sie dies auch in
dynamische Anteile enthält, sollte nach dem Vier-Au- Verträgen mit externen Entwicklern.
gen-Prinzip kontrolliert und dokumentiert werden, • Aufgrund von möglichen Problemen bei Wartungsak-
denn er stellt ein potenzielles Sicherheitsrisiko dar.21 tivitäten durch unterschiedliche Entwickler raten wir
• Für generierten Quellcode sollte nach der Generie- davon ab, das Sperrkennzeichen für die Änderbarkeit
rung eine Syntaxprüfung mit dem Befehl SYNTAX- von Quellcode zu nutzen. Alternativ lässt sich der
CHECK durchgeführt werden. Schutz des Quellcodes durch dessen Auslagerung in
• Für dynamischen oder generierten Quellcode sollten separate Pakete erreichen, wobei die Berechtigung
die Prüfmechanismen der Klasse CL_ABAP_DYN_PRG auf bestimmte Personen über das Berechtigungsob-
genutzt werden, mit denen z.B. Whitelists für dynami- jekt S_DEVELOP und einer expliziten Ausprägung von
sche Tabellenzugriffe verwendet werden können. DEVCLASS eingeschränkt werden kann.
Im Kapitel 5.2 wird das Thema dynamische Programmierung auch im Kontext Sicher- 2.7 NEUE SPRACHELEMENTE
heit behandelt.
Mit NetWeaver 7.40 und 7.50 wurde die ABAP-Syntax stark erweitert.22 Die Neuerun-
Auditierbarkeit von ABAP-Quellcode gen lassen sich grob in zwei Themen aufteilen:
21 Zum Auffinden dynamischen Quellcodes (Vorauswahl für die Vier-Augen-Prüfung) können die Sicherheitsprüfungen des Code 22 http://scn.sap.com/community/abap/blog/2013/07/22/abap-news-for-release-740
Inspectors / ATC verwendet werden. http://scn.sap.com/community/abap/blog/2015/11/27/abap-language-news-for-release-750
Um einen Eindruck von den neuen Möglichkeiten der Ausdrucksorientierung aus • Zeichenketten-Templates (NW 7.40 Beispiel Zeile 2: Parameter der Display-Methode)
Punkt 1 zu geben, hier ein Beispiel aus dem Blog von Horst Keller (siehe unten):
• Zeichenkettenfunktionen und Reguläre Ausdrücke
Quellcode in NetWeaver 7.0
Mit SAP NetWeaver 7.40:
DATA itab TYPE TABLE OF scarr.
SELECT * FROM scarr INTO TABLE itab. • Inline-Deklarationen (in Zeile 1: DATA(itab))
DATA output TYPE string. • Neuer Parser für OpenSQL (in Zeile 1: @ als Kennzeichnung für Host-Variablen)
CONCATENATE ’Carrier:‘ wa-carrname INTO output SEPARATED BY space.
• SQL-Ausdrücke
cl_demo_output=>display( output ).
BEST PRACTICE
Entsprechender Quellcode in 7.40 (SP08)
Wir empfehlen, sich mit den neuen Sprachelementen
vertraut zu machen und sie einzusetzen, da die Effektivität
SELECT * FROM scarr INTO TABLE @DATA(itab).
bei der Entwicklung erhöht und die Lesbarkeit des Quell-
cl_demo_output=>display( |Carrier: { itab[ carrid = ’LH‘]-carrname }| ).
codes verbessert werden kann. Hierbei kann die Liste
oben als Einstieg dienen.
23 In NetWeaver 7.40 noch mit Einschränkungen (parametrisierte Views nur auf SAP HANA), ab NetWeaver 7.50 sind die CDS-View-
Funktionalitäten datenbank-agnostisch
ta-Paradigma. Arbeiten die Entwickler oft in unterschiedlichen Systemen mit unter- verschiedene Werkzeuge an:
schiedlichen SAP-Basisversionen, sollte ggf. deren kleinster gemeinsamer Nenner
verwendet werden, um nachträglichen Mehraufwand bei der Übertragung in ältere • Die einfache Syntaxprüfung wird automatisch bei der Aktivierung ausgeführt und
Systeme zu vermeiden. verhindert die Aktivierung fehlerhafter Entwicklungsobjekte.
Weitere Informationen zu den neuen Sprachelementen finden Sie in der ABAP-Schlüs- • Die erweiterte Programmprüfung kann auf individuellem, bereits aktiviertem
selwort-Dokumentation und den SCN-Blogs von Horst Keller.22 Quellcode (Programmen, globalen Klassen …) ausgeführt werden und berichtet in
drei Prioritäten potenzielle Probleme.
• Der Code Inspector bietet einen umfangreichen Katalog von teilweise konfigurier-
2.8 OBSOLETE ANWEISUNGEN baren Prüfungen, aus denen eine Prüfvariante zusammengestellt werden kann.
Die erweiterte Programmprüfung ist hier enthalten. Es gibt unter anderem auch
SAP vertritt eine strikte Abwärtskompatibilität. Trotzdem muss bei der Verwendung etliche Prüfungen zu den Bereichen Performance und Robustheit. Zusätzlich kön-
von obsoleten Anweisungen, wie z.B. Kopfzeilen in internen Tabellen, berücksichtigt nen eigene Prüfungen programmiert und eingebunden werden.
werden, dass bei der Übernahme von Code in Klassen Probleme auftreten. Für
obsolete Sprachelemente gibt es immer modernere Alternativen. Außer Gewohnheit • Das neueste Werkzeug ist das ABAP Test Cockpit (ATC)24, welches die Prüfvarian-
existieren wenige Gründe für deren Verwendung, deshalb sollten sie vermieden ten des Code Inspectors verwendet und einige Zusatzfunktionen bietet.
werden.
Diese Werkzeuge können von den Entwicklern bereits während der Entwicklung
genutzt werden. Alle sind gut in die ABAP Workbench und die ADT integriert (Ausnah-
me: Die erweiterte Programmprüfung ist von ADT nicht direkt erreichbar).
BEST PRACTICE Zusätzlich kann der Code Inspector oder das ATC über die Transaktion SE03 global
Wir empfehlen den regelmäßigen Einsatz eines statischen angeschaltet werden, um bei der Freigabe von Transportaufträgen frühzeitig Probleme
Codeanalyse-Tools, um obsolete Anweisungen zu ent- oder Schwächen zu erkennen und zu beheben. So kann unnötiger Aufwand für Trans-
decken. Aus den SAP-Bordmitteln eignet sich der Code porte, Test und Fehlersuche eingespart und die Programme performanter, robuster,
Inspector/ATC bzw. die Durchführung des Syntax-Checks. sicherer und besser wartbar gemacht werden.
Um den Zusatzaufwand zu minimieren, sollten die ob- Der Code Inspector oder das ATC werden im SAP-Standard nur bei Freigabe des Trans-
soleten Anweisungen immer dann ersetzt werden, wenn portauftrags ausgeführt. Empfehlenswert (und bei Transportmanagement mit Trans-
porten von Kopien – siehe Abschnitt 8.1.4 – die einzige sinnvolle Möglichkeit) ist die
Entwicklungsobjekte aufgrund anderer Erweiterungen Prüfung bereits bei der Freigabe der jeweiligen Transportaufgabe bzw. bereits bei der
sowieso bearbeitet werden. Dadurch ist auch der zusätzli- Fertigstellung der Entwicklungsobjekte durch den Entwickler. Hierzu muss das BAdI
che Testaufwand in der Regel gering. CTS_REQUEST_CHECK implementiert werden.25
Darüber hinaus existieren sehr gute Analysewerkzeuge
von Drittanbietern.
24 Verfügbar ab NetWeaver 7.4, sowie ab bestimmten SPs von 7.0 und 7.3.
25 Wie dies für den ATC geschehen kann, ist hier beschrieben.
BEST PRACTICE Unter problematischer Harter Codierung versteht man die Codierung von Daten wie
2 PROGRAMMIERRICHTLINIEN
Viele der in diesem Leitfaden genannten Regeln und Texten, Zahlen, Benutzernamen usw. direkt im Programm, die sich möglicherweise
ändern, z.B. weil sie eigentlich Konfigurationsinformationen (Pfade für Schnittstellen,
Empfehlungen für Entwicklungsobjekte lassen sich durch
…) sind. Harte Codierung spart zunächst Entwicklungszeit, führt aber auf den Gesamt-
die Werkzeuge automatisch prüfen. Die Werkzeuge soll- lebenszyklus der Anwendung bezogen zu höheren Kosten, weil z.B. Konfigurationsän-
ten daher den Entwicklern vertraut sein und frühzeitig im derungen eine Anpassung des Programms erfordern. Wenn der gleiche Wert in
Entwicklungsprozess verwendet werden. Die generelle mehreren Programmen oder Programmteilen hart kodiert wird, ergibt sich zusätzlich
Prüfung mit Code Inspector oder ATC bei Transportfreiga- noch das Problem, dass bei Änderungen alle Stellen angepasst werden müssen (siehe
be sollte konfiguriert werden. Als Voraussetzung hierfür auch „Vermeidung von Code-Kopien“ in Abschnitt 2.3).
muss eine Prüfvariante ausgewählt oder selber konfigu-
Ein verwandtes Thema sind Magic Numbers, also Zahlen, die ohne Erläuterung im
riert werden. Zusätzlich ist festzulegen, wer bei fehlge-
Programm verwendet werden. Das Problem hierbei ist die Verständlichkeit und die
schlagenen Prüfungen Ausnahmen genehmigen darf (z.B. Wartbarkeit des Programms. Auch hier wird also zunächst Aufwand gespart, der aber
Qualitätssicherungs-Beauftragter oder Entwicklungsleiter). bei späteren Anpassungen doch noch aufgewendet werden muss und ggf. sogar höher
ist, falls die Bedeutung der Magic Number erst ermittelt werden muss.
Ein weiterer Aspekt bei der Verwendung von Harter Codierung oder Magic Numbers
Zusätzlich existieren diverse Tools von Drittanbietern, die bereits zur Designzeit den ist, dass dies auch ein Hinweis auf eine Implementierung ohne Berücksichtigung
Quellcode auf Verstöße gegen Entwicklungsrichtlinien überprüfen und dem Entwickler objektorientierter Konzepte sein kann. Ein Beispiel wären CASE Statements über
ein direktes Feedback über bestimmte Eigenschaften der Codequalität liefern. Neben Konstanten, die entweder über die Refactoring Methodik „Replace Code with Subclas-
der Prüfung zur Designzeit bieten die Tools zum Teil auch die Möglichkeit der automa- ses“26 oder via Filter-BAdIs vermieden werden können27.
tischen Korrektur von Fundstellen an.
Die Benutzung von Konstantennamen, die identisch mit dem Wert sind, sollte unbe-
dingt vermieden werden. Sie führen bei einer Änderung des Wertes zu Fehlinformatio-
nen. (Paradoxerweise ist genau die Änderbarkeit der Hauptgrund für die Verwendung
von Konstanten.)
26 https://sourcemaking.com/refactoring/replace-type-code-with-subclasses
27 siehe dazu auch http://scn.sap.com/docs/DOC-10286
sinnvoll sein, nicht alle Konstanten an einem Interface zu hinterlegen, sondern eine können solche Objekte auch von anderen Entwicklern für ihre Zwecke leicht erweitert
fachliche Strukturierung der Interfaces und der enthaltenen Konstanten vorzunehmen. oder verändert werden, ohne dass die grundlegenden Funktionen beeinträchtigt
Dafür bietet es sich an, die Interfaces mit einem Tag-Interface zu versehen (analog werden (Open-Closed-Prinzip). Andererseits können zentrale Funktionalitäten oder
zum BAdI Interface IF_BADI_INTERFACE). So ist die Auffindbarkeit der Interfaces einzelne Variablen auch gezielt vor unerwünschtem Lese- oder Schreibzugriff durch
sichergestellt, die Konstanten beinhalten. aufrufende Programme geschützt werden. Einen ersten Überblick über die Grundprin-
zipien des objektorientierten Designs finden Sie z.B. in Wikipedia29.
Bei der Einführung von Konstanten ist sicherzustellen, dass diese auch von anderen
Entwicklern wiedergefunden werden, da ansonsten identische Konstanten mehrmals Im Rahmen der Einführung der Objektorientierung in ABAP mit ABAP Objects fand
im System hinterlegt werden. Hierfür gibt es leider kein offizielles SAP-Tool, das dies eine Bereinigung der Sprache und Vereinheitlichung der Konstrukte statt. Die Verwen-
automatisch bewerkstelligt. Alternativ kann auf das SAP-Ecosystem zurückgegriffen dung von ABAP Objects führt damit zu einer Steigerung der Wartbarkeit. Die Steige-
und das frei verfügbare Tool ConSea28 verwendet werden. Eine Option wäre die rung der Wartbarkeit kann für kleinere Programme30 bereits durch den Ersatz von
Dokumentation der Konstanten in Interfaces außerhalb des Systems, wobei die FORM-Routinen durch Klassen-Methoden einer lokalen Klasse lcl_main erreicht
Wahrscheinlichkeit hoch ist, dass die Pflege der externen Dokumentation vernachläs- werden, ohne ein striktes objektorientiertes (Re-)Design vorzunehmen.
sigt wird. Ab NetWeaver 7.40 empfiehlt sich die Inline-Dokumentation mittels ABAP-
Doc. Ab NetWeaver 7.50 lässt sich die Dokumentation dann analog zu JavaDoc expor- Die prozedurale Entwicklung in ABAP z.B. mit FORM-Routinen wurde von SAP inzwi-
tieren und so zugänglich machen. Falls die TREX-Suche bereits eingesetzt wird, schen als obsolet eingestuft. Eine prozedurale Entwicklung hat sich im Laufe der Jahre
könnte auch diese zur performanten Suche genutzt werden. auch im Hinblick auf globale Variablen und Includes als sehr unübersichtlich, komplex
und fehleranfällig erwiesen. Das ist ein weiterer Grund, zur objektorientierten Pro-
grammierung zu wechseln.
Beim Zugriff auf Daten sowie bei ihrer Präsentation sind die dafür notwendigen
Berechtigungsobjekte zu prüfen. Bei der Verwendung von Standardobjekten soll die BEST PRACTICE
Prüfung auf die entsprechenden SAP-Standard-Berechtigungsobjekte erfolgen Wir empfehlen Neuentwicklungen möglichst nur noch nach
(vereinfacht die Wartung der notwendigen Rollen). Zur Prüfung kundeneigener
Datenobjekte können in der Regel keine SAP-Standard-Berechtigungsobjekte verwen-
den Prinzipien der Objektorientierung mit ABAP Objects
det werden. Zu diesem Zweck können kundeneigene Berechtigungsobjekte implemen- umzusetzen. Obsolete Sprachkonstrukte des prozeduralen
tiert und geprüft werden. Weitere Informationen finden Sie im Kapitel 5.1.1. ABAP, wie z.B. FORM-Routinen, sollten vermieden und
durch ABAP Objects-Konstrukte ersetzt werden. Diese
Empfehlung deckt sich mit der Vorgabe „ABAP Objects als
Programmiermodell“ der Programmierrichtlinien aus der
2.12 PROGRAMMIERMODELL: OBJEKTORIENTIERT VS. PROZEDURAL ABAP-Schlüsselwortdokumentation.
Es ist ratsam, vom prozeduralen Programmiermodell auf objektorientierte Program-
mierung überzugehen, um zukunftssicher zu entwickeln und Objekte zu kapseln.
Insbesondere bei neuen Projekten sollte nur noch objektorientiert entwickelt werden.
29 https://de.wikipedia.org/wiki/Prinzipien_objektorientierten_Designs
30 Die Obergrenze für „kleine Programme“ in diesem Sinne sehen wir zwischen 200 und 500 Zeilen, je nach Programmierstil
28 Vgl. GitHub und Komplexität der Aufgabe.
• Systeme mit älteren Basisreleases, in denen ABAP Objects noch weniger ausge- der SAP-HANA-Datenbank gegenüber anderen Datenbanken Besonderheiten ergeben,
reift war (vor SAP Web Application Server 6.20) bzw. in Systemen/Modulen, in wird hierauf in den jeweiligen Unterkapiteln hingewiesen.
denen auch im SAP-Standard prozedurale Bestandteile dominieren.
WEITERE QUELLEN
3.1 VERMEIDUNGSPRINZIP
1. Horst Keller und Gerd Kluger, Not Yet Using ABAP Objects? Eight Reasons Why
Every ABAP Developer Should Give It a Second Look, Sap Professional Journal „Die sichersten, schnellsten, präzisesten, billigsten, wartbarsten, zuverlässigsten und
am leichtesten zu dokumentierenden Teile eines Computersystems sind die, die man
2. Horst Keller and Gerd Kluger, NetWeaver Development Tools ABAP, SAP AG weggelassen hat.“ (Gorden Bell)
Alle Entwickler sollten sich mit der gleichen Sprache anmelden und sprachabhängige
Texte in dieser Sprache pflegen. Grundsätzlich sollten sprachabhängige Texte in
übersetzbarer Form angelegt werden.
3.2 PERFORMANCE-OPTIMIERUNGEN NUR AN RELEVANTEN STELLEN
BEST PRACTICE Die im SAP-System bereits vorhandenen Werkzeuge bieten eine gute Unterstützung
• Konzentrieren Sie sich zuerst auf die klare und bei der Erstellung von performanten Anwendungen bzw. bei der Analyse von Perfor-
mance-Engpässen.
einfache Implementierung der Sachlogik. Führen Sie
3. PERFORMANCE
dann auf einem System mit genügendem Datenvolu- Die wichtigsten Transaktionen sind
men (meist das Testsystem) Performance-Tests aus,
um – falls das Programm überhaupt langsamer als • ATC/SCI – ABAP-Test-Cockpit / Code Inspector
vom Nutzer gewünscht ist – anschließend an den Statische Analyse von (unter anderem) Performance-Aspekten. Integriert in
relevanten Stellen die Performance zu optimieren. Workbench und ADT, Administration mit Transaktionen ATC und SCI
Eine Ausnahme stellen Programme dar, bei denen
• SAT – Laufzeitanalyse
von vornherein klar ist, dass sie Performance-kri-
Gesamtanalyse zur Laufzeit
tisch sein werden. Für diese sind schon zur Design-
zeit Entscheidungen zu treffen, z.B. Einsatz von • ST05 – Performance-Trace
Parallelisierung. Analyse der in einem Programm ausgeführten SQL-Befehle (und anderer Ereig-
nisse)
• Wir empfehlen, die Suche nach Performance-Eng-
pässen mit dem Einsatz der Laufzeitanalyse (Trans-
aktion SE30/SAT) mit voller Aggregation zu beginnen.
Dadurch sollte deutlich werden, ob die Laufzeit aus Darüber hinaus gibt es einige allgemeine, auch für Performance-Analysen nutzbare
der Interaktion mit der Datenbank oder der Verarbei- Werkzeuge
tung der geladenen Daten im Hauptspeicher resul-
tiert.31 Wichtig ist dabei, dass ein repräsentativer, • SM50/SM66 – Übersicht Workprozesse
praxisnaher Datenbestand verarbeitet wird, um nicht
• Debugger – Schrittweise Ausführung von Quellcode
durch seltene Verarbeitungsmuster einer falschen
Spur zu folgen. Wird mehr als die Hälfte der Laufzeit • ST03 – Systemlastmonitor
im DB-Teil verbraucht, sollte eine genauere Analyse
der SQL-Kommandos mit der Transaktion ST05 • ST22 – Analyse von Laufzeitfehlern (z.B. Speichermangel)
erfolgen. Wird mehr Laufzeit im ABAP-Teil ver-
braucht, erfolgen tiefergehende Analysen mit Hilfe • STAD – Workload-Analyse (Post Runtime)
der Transaktionen SE30/SAT, wobei die Aggregations-
stufen schrittweise verringert werden, um genauere
Aussagen über die kritischen Programmstellen zu Die folgenden Werkzeuge eignen sich für spezielle Performance-bezogene Themen
bekommen. Nach jedem Optimierungsschritt sollten
die Ergebnisse verglichen und dokumentiert werden. • ST04 – DB-Performance-Übersicht
31 Ein ersten Überblick über die Verteilung der Laufzeiten zwischen Datenbank und Applikationsserver bekommt man auch mittels der
Transaktion STAD.
• S_MEMORY_INSPECTOR – Memory Inspector (auch integriert im SAP GUI Der Aufbau des Datenmodells bildet die Basis performanter Anwendungen. Ein mit
3. PERFORMANCE
Debugger) Augenmaß normalisiertes Datenmodell kann effizienter mit Daten und Indizes arbei-
ten.32 Hierzu finden – unabhängig von der Programmiersprache ABAP – die Normali-
• SQLM/SQLMD – SQL Monitor sierungsregeln Anwendung. Darüber hinaus sollten sich bei der Datenmodellierung im
Aufzeichnung und Analyse aller SQL-Abfragen im Produktivsystem. Data Dictionary die Datenelemente jeweils auf Domänen beziehen. Dieses führt sowohl
Neu seit NetWeaver 7.0/7.4 (Details siehe Hinweis 1885926). zu einer erhöhten Transparenz als auch zu einer verbesserten Wartbarkeit.
Unabhängig vom Code Push Down muss bei der Verwendung von SAP HANA als
Datenbank Regel 4 bzgl. der Einführung von Indizes deutlich relativiert werden. In SAP nicht möglich, achten Sie darauf, zumindest die ersten
HANA sollten so wenige Indizes wie möglich angelegt werden. Durch die spaltenba- Elemente eines Index zu verwenden, damit die Daten-
sierte Ablage kann im Prinzip jede Spalte als Index verwendet werden und in der bank den Index bei der Suche nutzen kann.
Theorie werden daher keine Indizes mehr benötigt. Es gibt allerdings speziell im
Zeilenreduzierung
OLTP-Bereich Szenarien bei denen es auch mit SAP HANA sinnvoll ist, Indizes einzu-
führen, da es sonst zu einer schlechten Performance und/oder einem hohem CPU-Ver- • Nutzen Sie die WHERE-Bedingung, um die an das
brauch von SAP HANA kommen kann. Details dazu finden Sie im SAP-Hinweis 1794297 ABAP-System zu übertragenden Daten zu minimie-
– Sekundäre Indizes für die Business Suite auf HANA.33 ren. Verwenden Sie SELECT SINGLE / UP TO n ROWS,
wenn Sie nur einzelne Zeilen benötigen.
Aggregate
• Aggregate (MIN, MAX, …) sind in vielen Fällen (bei
BEST PRACTICES HANA grundsätzlich) sinnvoll, da sie schon auf dem
Spaltenreduzierung Datenbankserver ausgewertet werden, und somit
• Vermeiden Sie an voraussichtlich Performance-kriti- weniger Daten übertragen werden müssen. Beachten
schen Stellen (siehe Abschnitt 3.2), dass unnötige Sie aber, dass eventuell vorhandene Tabellenpuffer in
Spalten, vor allem Large Objects (zum Beispiel diesem Fall vom System nicht genutzt werden, was
Strings), von der Datenbank übertragen werden. einen gegenteiligen Effekt haben kann.
•
Achtung: Entgegen der verbreiteten Meinung stellen Updates
SELECT * und INTO CORRESPONDING FIELDS selbst • Analog zur Spaltenreduzierung beim Lesen kann mit
in diesen Fällen oft kein Problem dar, da das System der Anweisung UPDATE SET die Anzahl der zu schrei-
bereits zur Compile-Zeit die Quell- und Zielfelder benden Spalten reduziert werden. Wenn möglich,
intelligent auswertet. 34 sollte diese Anweisung verwendet werden.
34
33 SAP Hinweis 1794297 – Sekundäre Indizes für die Business Suite auf HANA
34 Vgl. SCN-Artikel „Why ‚INTO CORRESPONDING‘ is much better than its reputation“
Puffer im DBMS usw.) verbunden. Daher sollten pro alle Einträge der DB-Tabelle selektiert. Das ist
Statement möglichst viele der benötigten Daten auf meistens nicht gewünscht und kann zu Performance-
einmal übertragen werden. Benötigen Sie z.B. die problemen führen. Sie können das Problem durch
Daten von 50 Aufträgen, sollten Sie diese nicht durch eine Prüfung der Größe der Tabelle vor dem Ausfüh-
50 Einzel-Selects ermitteln, sondern durch eine ren der Abfrage beheben35.
Select-Abfrage. Dies erfolgt durch die Zusätze INTO • Enthält die interne Tabelle der FOR-ALL-ENTRIES-
TABLE bei lesenden bzw. FROM TABLE bei schreiben- Anweisung doppelte Einträge, kann dies dazu führen,
den Zugriffen (Array-Operation). dass Datensätze doppelt von der Datenbank geladen
Vermeidung von MODIFY werden bzw. das SELECT-Statement in der DB
• Setzen Sie MODIFY <DB-Tabelle> nicht ein. Das Schnittstelle unnötig aufgebläht wird. Es empfiehlt
Statement ist aus Performance-Gesichtspunkten sich, ein DELETE ADJACENT DUPLICATES auf der
sehr kritisch: Sogar bei der Verwendung von Array- internen Tabelle vor dem Ausführen der Abfrage
Operationen werden pro Zeile des Arrays zuerst ein auszuführen.
UPDATE und im Fehlerfall im Anschluss ein INSERT • Da bei FOR ALL ENTRIES ein implizites DISTIN-
ausgeführt, was die Performance unnötig verschlech- CT-Select ausgeführt wird, sollten Sie immer alle
tern kann. Schlüsselfelder mit selektieren, da es sonst vorkom-
VIEWS/JOINS men kann, dass nicht alle relevanten Datensätze
• Geschachtelte SELECT-Anweisungen und gelesen werden.
SELECT-Anweisungen in Schleifen sollten vermieden
werden. Stattdessen bieten sich JOINS, Views oder
der Zusatz FOR ALL ENTRIES an.
•
Sehr umfangreiche JOINS (mehr als 5 Tabellen)
sollten vermieden werden, da der DB Optimizer
dadurch behindert werden kann. 3.4.3 ABAP CORE DATA SERVICE (CDS) VIEWS35
ABAP CDS Views sind ein mit NetWeaver 7.40 SP05 eingeführtes DDIC-Artefakt, das im
Gegensatz zu klassischen SE11-Views erweiterte Möglichkeiten für die Definition von
Views bietet. Dies umfasst neben klassischen SQL-Funktionalitäten wie Outer Joins oder
Case-Anweisung auch SQL-Funktionen wie zum Beispiel zur Währungsumrechnung. Des
Weiteren bieten CDS Views die Möglichkeit, Assoziationen zwischen Tabellen zu definie-
ren und so Geschäftsobjekte wiederverwendbar in Form von Views zu definieren.
35 Mit Netweaver 7.40 liefert SAP den Runtime-Check-Monitor, der eine Prüfung zur Laufzeit auf dieses Problem ermöglicht.
Siehe dazu auch Hinweis 1931870 – Downport of transaction SRTCM to SP02 / 03 / 04
stehen zusätzlich die CDS Table Functions zur Verfügung, die den Aufruf von SQL-
Script ermöglichen. So stehen alle SAP HANA Features (z.B. Calculation Views) über • Wählen Sie die Tabellenart passend zur späteren
CDS Views zur Verfügung. Weitere Informationen zu ABAP CDS Views finden Sie in der Verwendung. Details hierzu finden Sie in der Schlüs-
ABAP-Schlüsselwertdokumentation zum Netweaver 7.40 36 bzw. NetWeaver 7.50 37 selwortdokumentation unter „Auswahl der Tabellen-
sowie auf der zugehörigen Landingpage im SCN.38 Beachten Sie, dass ABAP CDS Views art“. 39
nur über die ABAP-Development-Tools in Eclipse erstellt werden können.
• Wenn für eine Tabelle vom Typ Sorted oder Hashed
Zugriffe erfolgen, sollten diese immer mit dem
passenden (Teil-)Schlüssel stattfinden.
3.5 INTERNE TABELLEN UND REFERENZEN
Interne Tabellen stellen ein zentrales Konstrukt bei der Entwicklung von Anwendungen
39
mit ABAP dar. Neben Datenbankzugriffen sind sie die zweite Quelle von Performan-
ce-Problemen. Bei kleinen Datenmengen stellen Dinge wie die Wahl der passenden
Tabellenart und eines passenden Schlüssels noch kein Problem dar. Werden größere Ab AS ABAP 7.02 können Sie bei internen Tabellen, die selten geändert aber mit mehr
Datenmengen verarbeitet, können vorher aus Performance-Sicht unkritische Stellen als einem Zugriffmuster gelesen werden, neben dem primären Schlüssel auch weitere
zu erheblichen Laufzeitverlängerungen führen. sekundäre Schlüssel definieren. Der primäre Schlüssel wird dabei wie gehabt definiert
und verwendet. Die Sekundärschlüssel können einen vom Primärschlüssel abwei-
chenden Typ (Sorted, Hashed) haben.
Als Beispiel können Sie damit für eine als Hashed definierte Tabelle mit eindeutigem
Primärschlüssel einen weiteren Schlüssel vom Typ Sorted definieren. Dieser erlaubt
einen performanten Zugriff auf die Daten der Tabelle aus einem anderen Blickwinkel
(nicht eindeutig, Teilschlüssel möglich), ohne die eigentlichen Daten zweimal im
Hauptspeicher anlegen und bei Änderungen manuell für die Konsistenz zwischen den
beiden Tabellen sorgen zu müssen.
36 http://help.sap.com/abapdocu_740/de/index.htm?file=abencds.htm
37 http://help.sap.com/abapdocu_750/de/index.htm?file=abencds.htm 39 Zugriff wie vorne in Kapitel 2 beschrieben. Pfad: ABAP – Referenz → Interne Daten verarbeiten → Interne Tabellen
38 http://scn.sap.com/docs/DOC-70385 → Interne Tabellen-Übersicht
BEST PRACTICE
Verwenden Sie so wenig Parameter wie möglich. Nutzen
40 Sie in der Regel die Referenzübergabe und nur in den tech-
nisch notwendigen Ausnahmefällen die Wertübergabe.
3.5.1 FELDSYMBOLE
Feldsymbole bieten die Möglichkeit, auf existierende Daten, z.B. Zeilen von internen
Tabellen, zu referenzieren. Das Arbeiten mit Referenzen ist deutlich performanter als
das Kopieren der Daten. Daher sollten, wo möglich, Feldsymbole verwendet werden.
Bedenken Sie beim Einsatz von Feldsymbolen jedoch, dass eine Änderung des Wertes
eines Feldsymbols auch den Wert im referenzierten Datenelement überschreibt.
40 Ab NetWeaver Release 7.40 SP02 ist für diese Art der Überprüfung die Funktion LINE_EXISTS( ) verfügbar. Sie sollte aufgrund der
besseren Lesbarkeit verwendet werden.
Beim Einsatz von SAP HANA als Datenbanksystem kann die Performance insbesonde- BEST PRACTICE
re von datenintensiven Applikationen massiv gesteigert werden, wenn die dateninten- • Wir raten von der Verwendung von External Views und
siven Operationen auf die Datenbank verlagert werden. Die Verlagerung der Logik aus
Database Procedure Proxies aufgrund der unter-
3. PERFORMANCE
dem Applikationsserver in SAP HANA wird als Code Push Down bezeichnet. Das
verfolgte Ziel des Vorgehens ist es, die Daten nicht mehr zur Applikationschicht zu schiedlichen Lebenszyklus Problematik im AS ABAP
transportieren und dort zu verarbeiten (data-to-code), sondern die Verarbeitungslogik und SAP HANA Stack ab, sofern dies möglich ist.
dort zur Ausführung zu bringen, wo die Daten „leben“ (code-to-data). • Wenn Sie eine Optimierung Ihrer Anwendung mittels
Code Push Down vornehmen wollen, empfehlen wir
Dieses Ziel in Kombination mit der Architektur von SAP HANA hat zur Folge, dass die in
Abschnitt 3.4.1 definierten Regeln im Vergleich zu einer Non-HANA-Datenbank eine zur Selektion des zu optimierenden Codes die SQL
andere Gewichtung erfahren: Die ersten drei Regeln (Minimierung der Treffermenge, Performance Tuning Worklist (Transaktion SWLT), die
der übertragenen Daten und der Anzahl der Datenbankzugriffe) gewinnen im Zuge des auf Basis der Ergebnisse von statischen Codechecks
Code Push Downs an Bedeutung, während die vierte Regel (Optimierung des Suchauf- mittels ATC und Laufzeitinformationen aus dem
wands) aufgrund der spaltenbasierten Ablage der Daten etwas weniger wichtig wird. SQL-Monitor eine priorisierte Liste von Stellen im
Die fünfte Regel lässt sich darauf reduzieren, dass unnötige Last auf der Datenbank Quellcode zur Verfügung stellt. Auch hier sind die in
vermieden werden sollte, da durch das Vorgehen bewusst datenintensive Operationen
Abschnitt 3.3 beschriebenen Empfehlungen zu
auf die Datenbank verlagert und so die Datenbank belastet wird.
beachten.
Der mit SAP NetWeaver 7.40 bzw. 7.50 erweiterte Sprachumfang von ABAP und Open • Wir raten von der Verwendung von Native SQL ab.
SQL ermöglicht den Code Push Down im Wesentlichen auf zwei Wegen:
• Verwendung von ABAP Managed Database Procedures (AMDP) und als letzte WEITERE QUELLEN
Option von Native SQL
1. Einen Einstieg in die Performance-Optimierung bei ABAP bietet der SAP-Kurs
Welche der beiden Optionen in welchem Umfang genutzt werden, hängt stark von der BC490.
Zielsetzung ab. In beiden Fällen muss bestehender Code angepasst werden. Die
Komplexität der Anpassung ist im Falle der Verwendung von Open SQL und ABAP CDS 2. Sehr gute Einführungen in die Performanceanalyse-Tools SAT/SE30 und ATC
Views geringer als bei der Verwendung von AMDPs oder Native SQL. Ist das oberste bieten die Blogposts von Olga Dolinskaja im SAP Community Network
Ziel eine Maximierung der Performance der Anwendung, so wird man mit Open SQL
und ABAP CDS Views an Grenzen stoßen, die nur mittels AMDPs oder Native SQL 3. Das Profiling in Eclipse ist in dem Blogpost von Thomas Fiedler beschrieben
überwunden werden können. Ein weiterer Aspekt ist, dass bei der Verwendung von
AMPDs bzw. Native SQL tiefergehende Kenntnisse von SAP-HANA-Spezifika (z.B. 4. Die 5 Regeln für SQL-Zugriffe finden sich im Original jetzt (7.40) in gestraffter Form
SQLScript) notwendig sind, um optimale Ergebnisse erzielen zu können. Generell ist in der ABAPDOCU/F1-Hilfe, unter ABAP – Referenz / Externe Daten verarbeiten /
zu beachten, dass die Kompatibilität zu anderen Datenbanken nur bei der Verwendung ABAP-Datenbankzugriffe / Open SQL / Performance-Hinweise. Zusätzlich sind dort
von Open SQL und ABAP CDS Views (Ausnahme Table Functions) sichergestellt ist. Bei noch ausführliche Empfehlungen zu Sekundärindizes verlinkt
der Verwendung von AMDPs und Native SQL verliert man die Datenbankunabhängig-
keit.
Unter Robustheit verstehen wir die Fähigkeit eines Programms, selbst unter ungünsti-
6. Siegfried Boes, „Performance-Optimierung von ABAP-Programmen“, gen Umständen nicht abzubrechen sondern trotzdem korrekte Ergebnisse zu liefern.
dpunkt Verlag 2009, ISBN 3898646157 Das bedeutet insbesondere, dass Programme Fehlersituationen erkennen und in einer
Weise darauf reagieren, dass die gewünschte Funktionalität nicht gefährdet wird.
7. Hermann Gahm, „ABAP Performance Tuning“, SAP Press, 2009,
ISBN 978-1-59229-555-5 Andererseits können Fehlersituationen manchmal nicht sinnvoll behandelt werden,
und in vielen Fällen ist die Implementierung einer echten Fehlerbehandlung mit
8. Hermann Gahm, Thorsten Schneider, Eric Westenberger, Christiaan Swanepoel mindestens einer Ausnahme oder Fehlermeldung unangemessen aufwändig, da die
„ABAP-Entwicklung für SAP HANA“, 2015, ISBN 978-3-8362-3661-4 Eintrittswahrscheinlichkeit als sehr gering eingeschätzt wird. In diesen Fällen ist es
wichtig, ein zügiges Auffinden des Fehlers in der Wartungsphase zu ermöglichen,
anstatt die Fehlerursache durch eine ungeschickte Fehlerbehandlungsroutine zu
verschleiern.
In diesem Kapitel gehen wir auf Best Practices ein, die die Robustheit eigenentwickel-
ter Programme fördern.
Viele Aspekte können durch den Code Inspector/ATC automatisch getestet werden,
siehe dazu auch Abschnitt 7.2.2 Automatische Prüfungen.
4.1 FEHLERBEHANDLUNG
4.1.1 SY(ST)-SUBRC-PRÜFUNGEN
Bei einer ganzen Reihe von ABAP-Befehlen setzt der SAP-Kernel nach deren Ausfüh-
rung die globale Variable SY(ST)-SUBRC. In der Regel wird eine erfolgreiche Ausfüh-
rung durch den Wert 0 angezeigt.
Der sy-subrc sollte nach allen Befehlen, die ihn setzen, geprüft werden. Alternativ zu
einer dedizierten Auswertung von sy-subrc kann die Anweisung ASSERT sy-subrc = 0
verwendet werden, wenn der Programmierer der Ansicht ist, dass die Fehlersituation
nicht auftreten oder die Fehlersituation in der Anwendung nicht sinnvoll behandelt
werden kann. Die Verwendung dieser Anweisung führt im Fehlerfall zu einem Pro-
grammabbruch mit dem Laufzeitfehler ASSERTION_FAILED.
verhalten vorzuziehen, welches vielleicht lange Zeit nicht bemerkt wird und bei dem COMMITs auslösen und führen innerhalb eines RFC-Aufrufs zu Verbindungsabbrü-
die Ursache („root cause“) oft nur mit viel Detektivarbeit zu ermitteln ist. Die Behand- chen. Verwenden Sie innerhalb des eigentlichen Anwendungskerns klassenbasierte
lung des sy-subrc kann durch den Code Inspector/ATC automatisch geprüft werden. Ausnahmen, um auf Fehlersituationen hinzuweisen. Eine Ausnahme von dieser Regel
ist die Verwendung der Anweisung MESSAGE * INTO zum Setzen der SY(ST)-Felder.
Für Programme z.B. mit Massenverarbeitung, deren Fortsetzung auch bei Fehlern für
einzelne Objekte sichergestellt werden muss, ist eine echte Fehlerbehandlung
notwendig (Fehler protokollieren, diesen Schleifendurchlauf abbrechen, usw.).
4.1.3 KLASSENBASIERTE AUSNAHMEN
41 Eine detaillierte Unterscheidung der Ausnahmekategorien und Benutzungsempfehlungen dazu sind in der ABAP-Schlüsselwortdoku-
mentation zu finden, Pfad: ABAP – Programmierrichtlinien → Architektur → Fehlerbehandlung →Ausnahmekategorien
IF ….
Bei Erweiterungen an Nicht-Kundencode kann es unter Umständen unmöglich sein, “ Prüfung 2 nicht erfolgreich
Ausnahmedeklarationen modifikationsfrei zu Methoden oder Funktionsbausteinen lx_validation_exception = new … EXPORTING
hinzuzufügen. In diesem Fall bietet sich die Verwendung von Ausnahmeklassen an, die PREVIOUS = lx_validation_exception. “ Wichtig: Verkettung
von CX_NO_CHECK erben. Dies ermöglicht die Fehlerbehandlung ohne explizite
ENDIF.
Deklaration der Ausnahmeklassen in Methodensignaturen und ohne Programmab-
bruch zur Laufzeit.
… “ weitere Prüfungen
Unterklassen von CX_DYNAMIC_CHECK sollten lediglich in Signaturen von Methoden
deklariert werden, bei denen der Aufrufer durch Übergabe geeigneter Parameter ein
IF lx_validation_exception IS BOUND.
Auftreten der Ausnahme verhindern kann. Dadurch muss an der Aufrufstelle kein
unnötiger TRY-CATCH-Block ergänzt bzw. die Signatur nicht um die Ausnahmeklasse RAISE EXCEPTION lx_validation_exception.
erweitert werden. ENDIF.
Die Sperren sind nach Abschluss des Updates auf das Objekt aufzuheben. Dies erfolgt
mittels Aufruf des Dequeue-Funktionsbausteins. Beachten Sie dabei den wichtigen
4.1.4 NICHT BEHANDELBARE AUSNAHMEN Scope-Parameter, wenn in diesem Zusammenhang auch Verbuchungsbausteine
verwendet werden.
Es gibt Ausnahmen, die vom ABAP-Quellcode aus nicht behandelt werden können und
dadurch zwangsläufig zu einem Abbruch der Anwendung und einem Dump führen. In Um sicherzustellen, dass gesperrte Objekte auch in Ausnahmesituationen entsperrt
einigen Fällen ist es möglich, proaktiv vor der Ausführung eines Statements, das eine werden, bieten sich in der klassenbasierten Ausnahmebehandlung CLEANUP-Blöcke an.
nicht behandelbare Ausnahme auslöst, die Rahmenbedingungen zu prüfen.
Neben dem pessimistischen Sperrkonzept mit Exklusivsperren kann auch das optimis-
Beispiel: Das Statement OPEN DATASET löst einen Dump aus, wenn der Benutzer tische Sperrkonzept basierend auf dem Vergleich von Zeitstempeln zum Änderungs-
keine ausreichenden Berechtigungen zum Öffnen einer Datei hat. Um dies zu vermei- zeitpunkt verwendet werden. Welches Sperrkonzept bei Neuentwicklungen gewählt
den, sollte die Berechtigung proaktiv mit dem Funktionsbaustein AUTHORITY_CHECK_ wird, ist von Fall zu Fall zu entscheiden.
DATASET geprüft werden.
WEITERE QUELLEN
4.2 KORREKTE IMPLEMENTIERUNG VON DATENBANK-ÄNDERUNGEN
1.
A BAP-Schlüsselwortdokumentation Datenkonsistenz
4.2.1 SPERROBJEKTE
Die SAP-Sperre besteht über mehrere Datenbank-LUWs (Logical Unit of Work) hinweg,
sodass für das gesamte zu ändernde Business-Objekt konsistent Änderungen auf der
Datenbank geschrieben werden können.
42 zu den Begriffen pessimistisches/optimistisches Sperren siehe zum Beispiel Introduction to Database Concurrency Control
Generell sollten Fehler, Ausnahmen und Meldungen ins Business Application Log
gespeichert werden, um diese an zentraler Stelle (Transaktion SLG1) prüfen zu können.
BEST PRACTICE
Evaluieren Sie vor der manuellen Entwicklung einer Der Zugriff erfolgt über die Funktionsgruppe SBAL, die im System sehr gut dokumen-
tiert ist.
Datenbankzugriffsschicht existierende, von SAP bereit
gestellte Frameworks. Die Verwendung des Business Application Logs hat folgende Vorteile:
43 http://scn.sap.com/docs/DOC-45425
44 ABAP Schlüsselwortdokumentation Datenkonsistenz
Eine eigene Protokolltabelle (DB-Tabelle) kann ein sinnvoller Ersatz bzw. eine sinnvolle • Cyber-Angriffe mit dem Ziel der Industriespionage, Sabotage oder Erpressung
Ergänzung zum Business Application Log sein, wenn man laufübergreifend Werte
vergleichen möchte. Dies kann z.B. für tägliche Batchläufe in Frage kommen, die dann • Hintertüren, die Innentätern erweiterten Zugriff auf Daten ermöglichen
„n Datensätze von Typ x verarbeitet“ protokollieren.
• Pressemeldungen, wenn Schwachstellen oder Datendiebstähle bekannt werden
Eine weitere Ergänzung sind die aktivierbaren Log-Points (Befehl LOG-POINT in
Kombination mit Transaktion SAAB, siehe Referenz 3). Diese müssen jedoch zuvor Insbesondere darf selbst geschriebener ABAP-Code die Vertraulichkeit, Integrität und
aktiviert werden und es werden nur jeweils die Anzahl der Vorkommen sowie die Verfügbarkeit der Geschäftsdaten nicht gefährden.
Feldinformationen für das letzte Auftreten aufgezeichnet.
Da dieses Thema sehr komplex ist, können wir im Rahmen dieses Dokuments nur ein
WEITERE QUELLEN paar ausgewählte, zentrale Themen behandeln. Für weitergehende Fragen verweisen
wir auf die Literaturhinweise am Ende dieses Kapitels.
1.
S AP Application Log – Leitfaden für Anwender
2. Beispiele zur Verwendung der BAL-Funktionen in: Thorsten Franz, Tobias Trapp:
ABAP Objects: Application Development from Scratch. SAP Press, 2008. 5.1 PRÜFUNGSRELEVANTE SICHERHEITSTHEMEN IM SAP STANDARD
ISBN 9781592292110
Wir orientieren uns bei unseren Empfehlungen primär an einem Dokument, das beim
3.
A BAP-Schlüsselwortdokumentation zu Checkpoints und Checkpoint-Gruppen Bundesamt für Sicherheit in der Informationstechnik (BSI) als Hilfsmittel veröffentlicht
wurde, den „Top 20 Sicherheitsrisiken in ABAP-Anwendungen“45.
Dieses Dokument basiert auf einer umfassenden statistischen Analyse von Sicher-
heitsfehlern in ABAP-Eigenentwicklungen (Details hierzu siehe beim BSI veröffentlich-
tes Dokument). Auf Basis dieser Statistik konnten die häufigsten Sicherheitsdefekte
identifiziert werden. Diese wurden ergänzt durch einen Satz weniger häufiger aber
dafür besonders kritischer Sicherheitsrisiken. In Kombination ist dies eine wertvolle
45
https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Grundschutz/Hilfsmittel/Extern/TOP-20_Sicherheitsrisiken-in-ABAP-
Anwendungen.pdf
nächst nur eine begrenzte Menge von Regeln vorgeben wollen. Test basiert auf einer Analyse des Quellcodes (sogenannte statische Tests). Damit ein
Programm testbar ist, muss sichergestellt sein, dass der ABAP-Code sowohl vollstän-
Im Folgenden werden die Risiken zunächst in Bereiche unterteilt und dann Empfehlun- dig ausführbar als auch vollständig einsehbar ist.
gen ausgesprochen.
Sicherheitsprobleme ergeben sich in folgenden Fällen:
• Der Entwickler schreibt Code, der sich auf verschiedenen Systemen unterschied-
5.1.1 BERECHTIGUNGSPRÜFUNG lich verhält, was einen dynamischen Test potentiell gefährlicher Funktionalität
auf einem Qualitätssicherungssystem beeinträchtigen kann.
Rollen und Berechtigungen sind ein zentrales Sicherheitsthema im SAP-Umfeld. Es ist
daher wichtig zu verstehen, dass ABAP ein so genanntes “explizites Berechtigungsmo- • Der Entwickler schreibt Code, der sich auf verschiedenen Mandanten unter-
dell“ verwendet46. Berechtigungsprüfungen sollten grundsätzlich explizit im Quellcode schiedlich verhält, was ebenfalls einen dynamischen Test auf einem Qualitätssi-
programmiert werden, damit die Prüfung für alle Fälle sichergestellt ist. cherungssystem beeinträchtigen kann.
Sicherheitsprobleme ergeben sich häufig in folgenden Fällen: • Der Entwickler versteckt seinen Code und verhindert damit eine Quellcode-Analyse.
• Der Entwickler vergisst, die Berechtigungsprüfung zu programmieren. Während versteckter Code selten anzutreffen ist, kommen hart-codierte Prüfungen auf
Mandant oder System-ID mit einer Wahrscheinlichkeit von über 70 % pro System vor.
• Der Entwickler prüft beim Aufruf einer Transaktion nicht die Transaktions-Start-
berechtigung.
• Der Entwickler prüft keine fachlichen Berechtigungen in RFC-fähigen Funktions- 5.1.3 DATENSCHUTZ
bausteinen.
Ein primärer Zweck von SAP-Systemen ist die Verwaltung von Geschäftsdaten. Darin
• Der Entwickler sichert kritische PAI-Ereignisse nicht ab, die durch direkte enthalten sind unter anderem Geschäftsgeheimnisse, Personaldaten und Finanzdaten.
Eingabe von Funktionscodes ausgelöst werden können, obwohl das entsprechen- Der Schutz dieser Daten ist für Unternehmen elementar wichtig, nicht zuletzt auf
de UI-Element beim PBO abgeschaltet wurde. Grund gesetzlicher Anforderungen. Entsprechend muss auch selbst geschriebener
Code größte Sorge tragen, dass diese Daten nicht unerlaubt aus dem System abgezo-
• Der Entwickler verwendet das falsche Berechtigungsobjekt. gen werden können.
• Der Entwickler verwendet eine proprietäre Berechtigungsprüfung. Sicherheitsprobleme ergeben sich in folgenden Fällen:
• Der Entwickler behandelt den Rückgabewert der Prüfung nicht. • Eigenentwickelte Programme zeigen sensible Daten ohne hinreichende Berechti-
gungsprüfung an, z.B. im SAP GUI oder in HTML-Seiten.
Immer mehr Unternehmen lassen ihre Eigenentwicklungen nicht nur durch interne • Eigenentwickelte Programme übertragen sensible Daten ohne hinreichende
Teams testen, sondern auch durch unabhängige Dritte. Dabei wird entweder getestet, Berechtigungsprüfung.
46 Man kann zwar über S_TCODE viele Fälle implizit berechtigen, aber es verbleiben etliche Lücken (Externe Zugriffe über RFC oder
Services, Verzweigung in andere Programme, unterschiedliche Modi für Anzeige und Änderung innerhalb eines Programms)
Im ABAP-Quellcode werden häufig dynamische Befehle, Strukturen und Bezeichner Der SAP-Standard liefert verschiedene Sicherheitsmechanismen, die SAP-Systeme
verwendet, die aus Benutzereingaben zusammengefügt werden. Wenn hier nicht durch vor Angriffen schützen. Zu diesen Sicherheitsmechanismen gehören unter anderem
Input-Validierung bzw. Output-Encoding verhindert wird, dass Steuerzeichen in den die Mandantentrennung, Logging und das Berechtigungswesen. Entsprechend verlas-
Eingaben die Semantik des dynamischen Befehls verändern können, dann kann der sen sich Unternehmen auf diese Mechanismen, wenn sie ihre Systeme sicher konfigu-
dynamische Befehl zur Laufzeit schadhaft manipuliert werden. riert haben.
Sicherheitsprobleme ergeben sich in folgenden Fällen: Eigenentwicklungen dürfen daher die Funktionalität dieser Mechanismen nicht
unterlaufen.
• Der Entwickler vermischt Input mit dynamischem ABAP oder gefährlichen
Befehlen, wie z.B. die Ausführung von Betriebssystemkommandos oder von Sicherheitsprobleme ergeben sich beispielsweise in folgenden Fällen:
nativem SQL.
• Der Entwickler umgeht die Mandantentrennung.
• Der Entwickler führt eine unzureichende Input-Validierung durch.
• Der Entwickler deaktiviert das Datenbank-Logging.
• Der Entwickler vergisst Output-Encoding, um schadhafte Effekte durch Steuer-
zeichen im Input zu vermeiden. • Eigenentwickelte Programme ändern Geschäftsdaten, ohne Änderungsbelege
anzulegen.
Manche Injection-Schwachstellen treten häufig im eigenen Code auf. So befinden sich
z.B. statistisch betrachtet auf jedem Kunden-System 294 Directory Traversal Schwach- Fehler in diesem Bereich sind insbesondere daher kritisch, weil sie ggf. umfangreiche
stellen, welche jedoch nur begrenzten Schaden verursachen. Es gibt jedoch auch Sicherheitsmaßnahmen des Unternehmens zunichtemachen können.
Injection-Schwachstellen, deren Ausnutzung einem Angreifer vollständigen Zugriff aus
das gesamte SAP-System ermöglicht. Von diesen besonders schwerwiegenden
Schwachstellen gibt es statistisch gesehen 16 pro SAP-System.
5.2 SICHERHEITSEMPFEHLUNGEN
BEST PRACTICE • Prüfen Sie die Gültigkeit der Werte sämtlicher Eingabe
Wir empfehlen bei der ABAP-Programmierung auf folgen- parameter.
de Regeln zu achten: • Insbesondere Injection-Angriffe werden er-
schwert, wenn der Wertebereich von Eingaben
• Schränken Sie die Ausführung jeglicher Geschäftslo- weitgehend eingeschränkt ist. Wenn Sie bei-
gik mittels Berechtigungsprüfungen ein, damit durch spielsweise eine Telefonnummer verarbeiten,
die Berechtigungsadministration der Benutzerkreis sollten nur Ziffern und wenige Sonderzeichen wie
maximal reduziert werden kann. ( ) + - erlaubt sein.
• Selbst wenn sich in Ihren Programmen Sicher- • Verwenden Sie bei Eingabeparametern möglichst
heitsfehler befinden sollten, können diese dann kurze Variablentypen.
zumindest nur von wenigen Angreifern ausge-
nutzt werden. • Selbst wenn Ihre Gültigkeitsprüfung unzurei-
chend sein sollte, werden Angriffe deutlich
• Verlassen Sie sich bei relevanten Prüfungen nie erschwert, wenn dem Angreifer nur wenige
darauf, dass diese bereits an anderer Stelle erfolgt Zeichen zur Verfügung stehen.
sind.
• Verwenden Sie möglichst nur Funktionen aus zentra-
• Wenn für die Sicherheit Ihrer Programmlogik len Bibliotheken für Ihre Sicherheitsprüfungen.
bestimmte Prüfungen erforderlich sind, dann Schreiben Sie niemals eigene.
führen Sie diese durch.
• Funktionen, die Sicherheitsprüfungen ausführen,
• Vermeiden Sie generische Programmierung. sind komplex in der Erstellung und daher fehler-
• Je vielseitiger eine bestimmte Programmlogik anfällig. Die Erstellung und Wartung solcher
ist, desto höher ist die Wahrscheinlichkeit, dass Funktionen sollte von einem zentralen Team im
ein Angreifer einen Weg findet, sie zu missbrau- Unternehmen durchgeführt werden. Dadurch
chen. können potentielle Fehler vermieden bzw. im
• Umgehen Sie keine Sicherheitsmechanismen des Nachgang effizient verbessert werden.
SAP-Standards.
• Wenn SAP für eine bestimmte sicherheitsrele-
vante Funktionalität eine Methodik anbietet oder
vorschreibt, verwenden Sie diese und schreiben
Sie keine „einfachere“ Alternative.
BEST PRACTICE Die meisten Unternehmen verfügen über ein Internes Kontrollsystem (IKS), das
Konzentrieren Sie sich bei der Programmierung auf Compliance-Risiken entgegenwirkt. Dies ist beispielsweise in den international
die Vermeidung der folgenden besonders häufigen und anerkannten Referenzmodellen COSO & COBIT beschrieben. In einer typischen
kritischen Sicherheitsrisiken. Damit stellen Sie in Ihren IKS-Struktur sind die „Generellen IT-Kontrollen“ (ITGC-IT General Controls) Voraus-
setzung für das Erreichen aller IKS-Ziele im IT-dominierten Umfeld.
Eigenentwicklungen eine solide Grundabsicherung sicher.
Ein elementarer Baustein der ITGC ist das Änderungswesen (Change Management), zu
dem wiederum Eigenentwicklungen zählen. Sicherheitsdefekte im selbstgeschriebe-
nen ABAP-Quellcode stellen also eine Verletzung der generellen IT-Kontrollen dar.
Die kritischsten ABAP-Risiken und wichtigsten Empfehlungen entnehmen Sie bitte Wenn also in einem IKS der Bereich Change Management bzw. selbstgeschriebener
dem BSI Hilfsmittel „Top 20 Sicherheitsrisiken in ABAP-Anwendungen“. ABAP-Code unzureichend abgedeckt ist, dann helfen auch alle anderen Maßnahmen
nicht, da diese auf ein funktionierendes Change Management aufbauen. Dies führt zu
Eine etwas kompaktere Liste kritischer Risiken liefert der BIZEC APP/11-Standard. einem Compliance-Verstoß.
Hier sind allerdings die Beschreibungen nicht so ausführlich wie beim BSI-Hilfsmittel.
Die folgende Liste enthält eine Übersicht über SAP-Meldungen, die Gegenmaßnahmen
zu einigen der oben beschriebenen Probleme enthalten.
3.
BIZEC – The Business Application Security Initiative
5.4 TESTWERKZEUGE 4.
BSI-Hilfsmittel – Top 20 Sicherheitsrisiken in ABAP-Anwendungen vom 16.10.2014
• Hinreichende Testabdeckung:
Eine gute Integration externer Tools in die Entwicklungsumgebung (SE80, Eclipse) und
den Entwicklungsprozess (ChaRM, TMS) fördert deren Akzeptanz und Verwendung.
Die Dokumentation von Software ist in vielen Fällen genauso wichtig wie die Entwick- • Welche Anwendungen werden bei welchen Geschäftsprozessen verwendet?
lung selbst. Fehlt die Dokumentation oder ist sie nicht in ausreichendem Maß vorhan-
den, führt dies spätestens bei der Weiterentwicklung oder dem Wechsel von Entwick- • Welche Hintergrundjobs laufen wann am Tag / im Monat / im Jahr und welche
6. DOKUMENTATION
lern zu erhöhten Aufwänden. In diesem Kapitel werden unterschiedliche Möglichkeiten Entwicklungsobjekte sind davon betroffen?
zur Dokumentation von Entwicklungen in einem SAP-System dargestellt.
Für die Beantwortung dieser Fragen findet sich unserer Meinung nach kein geeignetes
Allgemein ist es bei jeder Dokumentation wichtig, das richtige Maß zu finden und Ablagemedium innerhalb der SAP-Entwicklungsumgebung, das insbesondere Grafiken
umzusetzen. In der Praxis findet man leider immer wieder die beiden Extreme: gut integriert. Wir empfehlen daher, für die Dokumentation dieser übergreifenden
entweder eine sehr umfangreiche oder gar keine Dokumentation. Die umfangreiche Zusammenhänge auf andere Medien zurückzugreifen. Beispiele dafür sind:
Dokumentation ist allerdings inhaltlich oft mangelhaft, weil sie viele redundante/
kopierte Informationen enthält und nicht aktuell gehalten wird. Sind die offiziellen • SAP Solution Manager
Anforderungen an die Dokumentation zu hoch oder zu abstrakt, führt dies manchmal
dazu, dass sie gar nicht erst erstellt wird. • Interne (Produkt-)Wikis
Die Dokumentation sollte während der Entwicklung, unbedingt aber vor der Produktiv- • Dokumente in gepflegten öffentlichen Verzeichnissen (Portalablage, SharePoint,
setzung bzw. Bereitstellung erstellt werden und es sollte keine Produktivsetzung ohne Fileshare …)
fertige Dokumentation geben. Ansonsten ergibt sich in der Regel ein Mehraufwand
oder letztlich eine fehlende Dokumentation. Die Erfahrung zeigt, dass die Herausforderung in diesem Bereich primär in der Frage
der Disziplin liegt. Diese Herausforderung kann kein Tool lösen, sondern nur das
Entwicklungsteam und die zugehörige Entwicklungsleitung.
6.1 DOKUMENTATION UNABHÄNGIG VON ENTWICKLUNGSOBJEKTEN Zur Dokumentation der Systemarchitektur inklusive Entwurfsentscheidungen bietet
sich die Verwendung einer Vorlage an, wie z.B. das arc42-Template. Dies kann verhin-
Neben der Beschreibung der vielen Entwicklungsobjekte, die einzelne, sehr spezielle dern, dass wesentliche Aspekte in der Dokumentation vergessen werden und be-
Funktionen im ABAP-System übernehmen, gibt es auch den Bedarf, die größeren schleunigt – bei Verwendung einer Vorlage über mehrere Projekte hinweg – die Suche
Zusammenhänge innerhalb eines Moduls und modulübergreifend darzustellen. Dazu nach spezifischen Informationen. Zudem erleichtert die Festlegung von Vorlagen das
gehören z.B. Antworten auf Fragen wie: Erstellen der Dokumentation parallel zur Entwicklung und die Einhaltung eines
angemessenen Abstraktionsniveaus.
Darüber hinaus kann eine veraltete Dokumentation irreführend sein. Deshalb sollte in
allen Dokumenten der Stand und eine Versionierung enthalten sein, um die Aktualität
bewerten zu können.
2.
SCN-Blog „Business process documentation with SAP Solution Manager 7.1“ Auf SAP-Systemen mit SAP_BASIS >= 7.40 können im Quellcode ABAP-Doc-Kommen-
6. DOKUMENTATION
tare verwendet werden. Dies kann als Alternative zur Dokumentation in der
3.
Das arc42-Template zur Architekturdokumentation ABAP-Workbench verwendet werden. Der volle Funktionsumfang von ABAP-Doc-Kom-
mentaren lässt sich derzeit allerdings nur mit den ABAP-Development-Tools für
4. Stefan Zörner: Softwarearchitekturen dokumentieren und kommunizieren. Eclipse ausschöpfen. Bei Verwendung von Core Data Services zur Definition von
Carl Hanser Verlag GmbH Co KG, 2015. ISBN 9783446429246 DDIC-Objekten können wesentlich mehr Entwicklungsobjekte im Quellcode dokumen-
tiert werden und die Notwendigkeit externer Dokumentation entfällt.
Beginnend mit SAP NetWeaver 7.50 lassen sich die ABAP-Doc-Kommentare von
6.2 DOKUMENTATION VON ENTWICKLUNGSOBJEKTEN Klassen und Schnittstellen als HTML-Dateien exportieren48.
• DDIC-Objekte
• Transaktionen
BEST PRACTICE
Wir empfehlen, für alle Entwicklungsobjekte und unab-
hängig vom Quellcode die Dokumentationsfunktion der
ABAP-Workbench zu nutzen und die Aufgaben und Bedeu-
tungen dieser Objekte im SAP-System zu dokumentieren.
Hierbei sollte ausschließlich der Ist-Stand dokumentiert
werden, gegebenenfalls angereichert um kurze Verweise
auf die Änderungsdokumentation (Transportdokumentati-
on, Defekt-Nummern).
6.3.3 PROGRAMMKOPF
Entwicklungsteams arbeiten heutzutage überwiegend international zusammen. Auch
wenn Sie derzeit rein deutschsprachig entwickeln, kann Ihr Projekt im Laufe der Zeit Änderungen in Programmen können zum Beispiel mit Namen oder Namenskürzel des
internationalisiert werden. Der Aufwand, der dann durch Koordinationsprobleme oder Entwicklers, dem Tagesdatum oder Monat und der Änderungsbelegnummer (Change
sogar nachträgliches Übersetzen entsteht, steht in keinem Verhältnis zu dem vielleicht Document, Incident Ticket, …) sowie einer stichwortartigen Beschreibung der Ände-
größeren Aufwand durch englische Dokumentation. rung im Programmkopf dokumentiert werden.
Es hat sich außerdem gezeigt, dass die Lesbarkeit von Quellcode und Kommentaren Beispiel:
durch englischsprachige Kommentare erhöht wird. Denn die ABAP-Befehle selbst sind
*/ Change Log
englisch und im Stil von Sätzen aufgebaut. Der Leser des Quellcodes muss bei engli-
scher Dokumentation also nicht ständig die Sprache wechseln. */ VN/Date ChangeDoc Description
*/ MZ/2012-08-06 CD4712 Add MMSTA in Output
*/ MZ/2012-02-01 CD4711 Import Material number
*/ MM/2009-01-01 CD0815 Added Field ABC in method signature and source
6.3.2 DOKUMENTATION VON ÄNDERUNGEN code in order to support quick search
Kommentare im Quellcode sollen dazu dienen, Entwicklern das Verstehen des Quell- Dieses Kapitel beschreibt, wie sich die Best Practices aus dieser Guideline in der
codes zu erleichtern, sofern dies nicht durch geschickte Gestaltung des Quellcodes Praxis verwirklichen lassen. Wir unterscheiden hierbei Umsetzbarkeit und Durchsetz-
allein (Modularisierung, Namenswahl von Methoden und Variablen) erreichbar ist. barkeit der Richtlinien.
Kommentare sind für andere Entwickler und mit zunehmendem zeitlichen Abstand Im Abschnitt „Umsetzbarkeit“ erklären wir, worauf ein Unternehmen achten sollte, das
auch für den ursprünglichen Entwickler gedacht. Sie sollten die Frage beantworten, Programmierrichtlinien einführen möchte. Wir erklären, wie ein Prozess dafür
„Warum“ etwas programmiert wurde und nicht „Was“. Letzteres ergibt sich aus dem aussehen könnte, wie man diesen ins Leben ruft und vor allem, wie man ihn am Leben
Quellcode ohnehin, während die Beweggründe oft nicht klar erkennbar sind. Gerade erhält. Im Abschnitt „Durchsetzbarkeit“ legen wir dar, wie ein Unternehmen die
sie helfen beim Verständnis aber wesentlich weiter. Dabei gilt der Grundsatz: So wenig Vorgaben aus dem Prozess prüfen kann. Hierzu gehören organisatorische Aspekte
Kommentar wie möglich, so viel Kommentar wie nötig. genauso wie Prüfmethoden und Werkzeuge. Wir gehen aber auch auf Grenzen der
Durchsetzbarkeit ein.
Stern-Kommentare sollten nur im Programmkopf oder für das temporäre Auskom-
mentieren von altem Quellcode verwendet werden. Abschließend stellen wir Tipps aus der Praxis vor, die die Autoren bei verschiedenen
Projekten im Umfeld der SAP-Entwicklung gesammelt haben.
Für alle anderen Kommentare empfiehlt SAP, Inline-Kommentare zu verwenden. Diese
sollten jeweils vor dem Quellcode stehen, den sie dokumentieren, und genauso
einger ückt sein wie dieser Quellcode. Letzteres wird (nur) für Inline-Kommentare
auch vom Pretty Printer korrekt durchgeführt. 7.1 UMSETZBARKEIT
Sicherheit
• Risiken bei Qualitätsmängeln: Scheitern der Wirtschaftsprüfung, Verstoß gegen 7.1.2 ERSTELLUNG UND PFLEGE DES PROZESSES
Compliance-Anforderungen oder gesetzliche Regelungen (z.B. Datenschutz).
Für die Umsetzung dieser Verfahren in der Praxis hat sich die formalisierte Beschrei-
Performance bung eines Prozesses bewährt. Dazu zählen klare Verfahrensanweisungen und
Verantwortlichkeiten. Die genaue Ausprägung des Prozesses ist unternehmensspezi-
• Vorteil: Das Unternehmen stellt sicher, dass die vorhandene Hardware optimal fisch und kann in diesem Leitfaden nicht abgebildet werden; der Verweis auf die
genutzt werden kann und schützt damit die bisherige Investition in Hardware. Notwendigkeit ist jedoch allgemeingültig.
Außerdem steigt die Zufriedenheit der Mitarbeiter, da die Nutzung der Anwen-
dung produktiver wird.
• Risiken bei Qualitätsmängeln: Geringere Akzeptanz von den Anwendern bzw. BEST PRACTICE
zusätzliche Kosten für schnellere Hardware, um die Softwaremängel auszuglei- Definieren Sie den einzuhaltenden Prozess und doku-
chen. mentieren Sie ihn in einer für alle zugänglichen Form.
Robustheit
Definieren Sie auch, wie Änderungen und Verbesserungen
am Prozess stattfinden sollen und wie Anmerkungen und
• Vorteil: Das Unternehmen stellt den kontinuierlichen Betrieb der Geschäftsan- Kritik eingebracht werden können. Dokumentieren Sie alle
wendungen sicher und vermeidet Unproduktivität auf Grund von Systemausfällen. geprüften Regeln ausführlich mit den Kapiteln Hintergrund/
Motivation, schlechte Beispiele, gute Beispiele, Hinweise
• Risiken bei Qualitätsmängeln: Geringere Akzeptanz von den Anwendern und die zum Vorgehen zur Beseitigung der Qualitätsprobleme und
Betriebskosten steigen wegen Unproduktivität der Anwender sowie durch
Literatur bzw. Ansprechpartner im Unternehmen.
Fehleranalysen und Wartungsarbeiten durch Techniker.
Wartbarkeit
• Vorteil: Das Unternehmen erreicht, dass die Applikation nachhaltig und kostenef- Motivation
fizient gewartet werden kann, weil die Programmstruktur leicht verständlich und
gut dokumentiert ist. Ein Prozess für Best Practices bei der Entwicklung hilft, die Qualität von Software
proaktiv und effizient zu verbessern und damit Kosten im Unternehmen langfristig zu
• Risiken bei Qualitätsmängeln: Hohe Wartungskosten und generell erhöhte senken. Je früher ein Fehler bei der Entwicklung erkannt wird, desto einfacher und
Fehleranfälligkeit der Applikation. kostensparender kann er behoben werden. Je weniger Fehler eine Anwendung enthält,
desto mehr entspricht ihre Nutzung den Erwartungen des Unternehmens. Insbeson-
Erweiterbarkeit dere läuft sie ohne Nebeneffekte, die das Business negativ beeinflussen.
muss festgelegt werden, wie diese werkzeuggestützt oder manuell überprüft werden
Interne Entwicklung kann. Wenn keine mechanische Überprüfung durch ein Werkzeug möglich ist, wird es
in der Praxis mit organisatorischem Aufwand verbunden sein, auf die konsequente
Für die interne Entwicklung werden Richtlinien als Nachschlagewerk für die tägliche Einhaltung der Regel zu achten.
Arbeit und regelmäßige Trainings für aktuelle Risiken benötigt.
Formale Code-Reviews verursachen erhebliche Aufwände. Sowohl für die Durchfüh-
Externe Entwicklung rung selbst als auch für die Vor- und Nachbereitung einschließlich der Kontrolle von
Korrekturen. Deshalb müssen Sie sich in aller Regel auf wenige nicht maschinell
Bei externer Entwicklung sind klare Qualitätsvorgaben für Ausschreibungen nötig. Vor prüfbare Aspekte kritischer Entwicklungsobjekte beschränken. Wenn z.B. die Einhal-
der Abnahme müssen die Anforderungen auch überprüft werden. tung von Performance-Vorgaben eine hohe Priorität besitzt, sollten in entsprechenden
Code-Reviews nur Entwicklungsobjekte mit Zugriffen auf Datenbanken oder mit
umfangreichen Berechnungen betrachtet werden.
BEST PRACTICE
Die Vorgaben aus dem Prozess müssen möglichst weit-
7.2 DURCHSETZBARKEIT
gehend mit geeigneten Tools überwacht werden. Für alle
Vorgaben, die nicht durch Tools validiert werden können, 7.2.1 MANUELLE PRÜFUNGEN
muss ein manueller, ggf. stichprobenhafter Prüfprozess
eingeführt werden. Hierzu eignen sich z.B. Mechanismen Viele der Prüfungen lassen sich automatisieren. Es gibt jedoch Bereiche, die sich für
wie das Pair-Programming49 oder iterative Code-Audits 50. eine automatische Prüfung nicht eignen, wie beispielsweise Dokumentation, Architek-
Die manuelle Prüfung bezieht sich hauptsächlich auf die tur oder viele funktionale Anforderungen. Die menschliche Sprache ist sehr komplex,
daher muss z.B. der Inhalt von Dokumenten und Dokumentationen manuell geprüft
Bereiche der Softwarestrukturierung / -architektur, Wart-
werden. Nur der menschliche Leser kann beurteilen, ob ein Text sinnvoll, vollständig,
barkeit und Erweiterbarkeit, die bei langlebigen Applikati- verständlich und korrekt ist. Eine automatische Prüfung kann dabei maximal die
onen einen hohen Kostentreiber darstellen können. Daher Existenz in den vorgegebenen Sprachen prüfen. Es empfiehlt sich dennoch ein auto-
empfehlen wir neben der Durchführung von maschinellen matischer Test auf nicht-funktionale Aspekte.
Prüfungen auch die manuellen Stichproben frühzeitig und
iterativ durchzuführen. Dieses Vorgehen bewährt sich Für die manuelle Prüfung ist es empfehlenswert, eine vollständige Prüfung anhand
vor allem bei größeren Projekten, da Fehlentwicklungen der Auswertung von Transportstücklisten vorzunehmen. Dabei ist zu berücksichtigen,
welche unternehmensinternen Richtlinien existieren. Abhängig von der Anzahl der
frühzeitig erkannt und mit Gegenmaßnahmen minimiert
Objekte muss eine vollständige oder zumindest stichprobenartige Prüfung erfolgen.
werden können. Das Prüfergebnis wird dem Zuständigen zur Verbesserung oder Vervollständigung der
Dokumente bzw. Dokumentationen übermittelt.
Ob ein Prozess alle Vorgaben erfüllt, kann nur mittels einer manuellen periodischen
Prüfung ermittelt werden. Falls sich Vorgaben ändern bzw. Mängel im Prozess aufge-
deckt werden, ist der Prozess entsprechend anzupassen oder ggf. neu zu definieren.
In der Praxis hat sich ein fest eingeplanter zyklischer Review des Prozesses bewährt.
stattfindet. Die Ausprägung der Klassifikationsattribute sollte auf Faktoren wie z.B.
7.3.1 QUALITÄTSSICHERUNG DES QUELLCODES erwartete Lebensdauer, Nutzungshäufigkeit, Kritikalität, Umfang, etc. basieren. Als
Resultat ergibt sich ein Szenario, das die zentralen Qualitätsbeauftragten entlastet und
Um eine erfolgreiche Einführung der Qualitätssicherung zu gewährleisten, ist ein die Teilverantwortung an das Entwicklungs- / Projektteam delegiert.
schrittweises und behutsames Vorgehen wichtig. Es empfiehlt sich, einen zweigeteil-
ten Ansatz zu fahren. Zunächst sollte neuer Quellcode „fehlerfrei“ erstellt und dies
geprüft werden. Erst wenn sich dieser Prozess stabilisiert hat, sollte nach und nach
bestehender Quellcode mit in die Checks aufgenommen werden. Ansonsten wird der
zu bewältigende Berg für die Entwickler zu groß und die Motivation sinkt rapide. BEST PRACTICE
Qualitätssicherung über Zwangsprüfungen wie die ATC/
Wenn die automatischen Codeprüfungen nicht auf der „grünen Wiese“ mit einer neuen Code-Inspector-Prüfung bei Transportfreigabe sind eine
Entwicklung eingeführt werden, sollte vorher der Umgang mit „Altlasten“ geklärt wirksame Möglichkeit Qualitätssicherung zu gewährleis-
werden. Auch bei neuen Entwicklungen lassen sich Änderungen an schon bestehenden ten. Allerdings führt dies zu einer gewissen Ineffizienz,
Objekten nicht vermeiden, die dann bei einer eingerichteten Transportprüfung zu
Problemen führen können. Hilfreich ist in solchen Fällen eine Klärung der Verantwort-
da zu diesem Zeitpunkt eventuell bereits fertiger Quell-
lichkeit für Entwicklungsobjekte, die z.B. durch das entsprechende Feld in Paketdefini- code überarbeitet werden muss. Sinnvoller ist es, wenn
tionen dokumentiert werden kann. Diese Verantwortlichen müssen entscheiden, ob Entwickler von vornherein Quellcode mit hoher Qualität
Fehler im bestehenden Quellcode sofort korrigiert werden müssen oder eine Ausnah- liefern. Dies kann zum Beispiel durch die Anwendung von
meregelung möglich ist. Clean-Code-Kriterien53 erfolgen. Wird in einem Team
grundsätzlich nach diesen Kriterien entwickelt, reduziert
Um die beschriebenen Probleme zu vermeiden, ist alternativ ein Konzept denkbar, in
dies den nachträglichen Anpassungsaufwand.
dem für älteres Coding keine Verschlechterung akzeptiert wird, in dem also in einer
automatischen Qualitätsprüfung keine neuen Befunde auftreten dürfen. SAP arbeitet
an einer Umsetzung dieses Konzepts für den ATC. Bis dahin gibt es einen SCN-Blog,
der eine kundenindividuelle Umsetzung beschreibt51. Vorteil ist, dass hierbei auch z.B.
neue Methoden in existierenden Klassen geprüft werden.
Generell ist es in vielen Fällen schon ausreichend, mit Standard-Bordmitteln, wie z.B. 7.3.2 TIME AND BUDGET QUALITY ASSURANCE (QA)
dem ABAP-Test-Cockpit, zu arbeiten, der sich auch um eigene Checks erweitern und
somit an eigene Bedürfnisse anpassen lässt. Um die Zeit und den Aufwand für die QA-Tätigkeiten möglichst gering zu halten, muss
der Entwickler den Quellcode während seiner Entwicklertätigkeit selbstständig auf
Eine weitere Strategie besteht darin, für Neuentwicklungen die Qualitätsanforderun- Fehler hin untersuchen können.
gen in den Prozess der Anforderungsanalyse mit einzubinden und direkt an das zu
erstellende Objekt zu koppeln. Hierdurch lässt sich eine Unterteilung in IT-Governance Tut er dies nicht, muss er automatisiert auf Fehler oder Verbesserungsmöglichkeiten
getriebene und anforderungsspezifische Qualitätskriterien erreichen. Während die hingewiesen werden. Tägliche Inspektionen mit einem entsprechenden Werkzeug und
IT-Governance getriebenen Qualitätsanforderungen (z.B. die Sicherheitskriterien) Verteilung der Ergebnisse stellen sicher, dass Fehler frühzeitig erkannt werden und
verpflichtend zu erfüllen sind, ist für die Beurteilung und Ausnahmebestimmung die Entwickler sich noch an ihre Tätigkeiten vom Vortag erinnern, was die Fehlerbehe-
anderer Kriterien der ABAP-versierte Produktverantwortliche zuständig. Technisch bung deutlich vereinfacht. So wird gewährleistet, dass auch Entwickler, die den
lässt sich das Konzept realisieren, indem der Produktverantwortliche in dem Paket manuellen Aufwand scheuen oder unter Zeitdruck stehen, trotzdem die Möglichkeit
hinterlegt wird und eine Versorgung des Pakets bzw. der enthaltenen Quellcode-Ob- erhalten, ihre Fehler im Quellcode zu beheben. Es gilt: Je später die QA einsetzt, desto
Ein Reibungspunkt ergibt sich durch die Frage, wer für die QA zuständig ist: Ersteller
oder Änderer. Bei neuen Sourcen ist dies kein Problem, bei bestehendem Quellcode
wird die Frage aber immer wieder aufgeworfen: 7.3.4 ENTSCHEIDUNGSFINDUNG BEI MODIFIKATIONEN
„Warum soll ich Quellcode überprüfen, in dem ich nur eine Zeile geändert habe?“ Die Hürde für Modifikationen sollte so hoch wie möglich gelegt werden. Dies ist
besonders wichtig, wenn zeitnah Enhancement Packages der SAP eingespielt werden
vs. sollen (SPAU-Problematik siehe dazu Abschnitt 8.4). Als Ansatzpunkt hierzu kann der
Modifikationsschlüssel dienen. Die Anzahl der Entwickler mit der Berechtigung,
„Warum soll ich Quellcode überprüfen, den ich schon Jahre nicht mehr angefasst habe?“ Modifikationsschlüssel zu generieren, muss möglichst gering sein. So ist es möglich,
steuernd einzugreifen und die Modifikationen über Change Requests und einen
Beide Positionen sind verständlich, deswegen muss eine klare Entscheidung bezüglich zugehörigen Prozess abzuhandeln. Da durch modifikationsfreie Erweiterungen kein
Handhabung von existierendem Quellcode, der auf anderen/keinen Konventionen SAP-Coding geändert wird und dadurch bei Upgrades potenziell weniger Probleme
beruht, getroffen und durchgesetzt werden. Wenn der Ersteller noch verfügbar ist, entstehen, sind sie Modifikationen grundsätzlich vorzuziehen.
empfiehlt sich, dass dieser in die QA miteinbezogen wird.
Die Frage, wodurch sich eine Modifikation rechtfertigt, ist unternehmensindividuell zu
Auch folgender Fall ist problematisch: Im Rahmen der Wartung erfolgt eine kleine beantworten und konsequent umzusetzen. Eine Pauschalantwort auf diese Frage gibt
Änderung an einem Include-Programm. Durch eine automatische Qualitätsprüfung es nicht. In jedem Fall sollte die Entscheidung jedoch auf gleichartigen, im Vorfeld
werden dabei Qualitätsfehler im Rahmenprogramm gefunden (bei mehrfach genutzten definierten und kommunizierten Kriterien basieren.
Include-Programmen evtl. sogar in mehreren Rahmenprogrammen). Die Korrekturen
erfordern – je nach Umfeld – einen aufwändigen zusätzlichen Test dieser Rahmenpro- Zum Thema Alternativen zu Modifikationen siehe Abschnitt 8.4.
gramme durch den Fachbereich.
Mails nicht zugestellt werden konnten. Solche Mails werden nun an eine zentrale
BEST PRACTICE Adresse versendet. Unvollständige Datensätze können so mit einem geringen Aufwand
Wenn SAP-Coding ergänzt oder geändert werden muss, identifiziert werden. Außerdem werden in diesem System nun keine Entwick-
lungs-User mehr ohne Mailadresse angelegt.
stehen vier Möglichkeiten zur Verfügung: explizite und
implizite Enhancements, Modifikationen und Kopieren Die Mails werden nicht von einem anonymen Batch-User sondern von der Mailadresse
des SAP-Objekts in den kundeneigenen Namensraum. des QA-Verantwortlichen gesendet, um dem Entwickler eine einfache Möglichkeit zu
Die einzelnen Optionen sollten in folgender Reihenfolge in geben, Fragen zu stellen. Zu Beginn entstand hierdurch ein hoher Aufwand, die Anzahl
Erwägung gezogen werden: explizite Enhancements vor der Fragen verringerte sich aber mit der Laufzeit des Projekts. Dies konnte durch
impliziten Enhancements, implizite Enhancements vor Schulungen erreicht werden, durch die die Entwickler effizienter Fehler korrigieren
Modifikationen und Modifikationen vor Kopien. Besonders bzw. diese schon bei der Entwicklung vermeiden können.
kritisch sind Kopien, weil dadurch eventuelle Fehler mit
Die Entwicklungssprache in der Entwicklungslandschaft ist Englisch. Dies wird durch
kopiert werden, der kopierte Quellcode aber nicht mehr einen weiteren Job geprüft und Fehler dem Entwickler gemeldet. SAP bietet im
der SAP-Wartung durch Hinweise und Updates unterliegt. Standard keine Möglichkeit, bei der Anlage eines Entwicklungsobjekts eine vorgegebe-
ne Sprache zu setzen. Deshalb gab es nur die beiden Möglichkeiten, entweder an
passender Stelle eine entsprechende Prüflogik per Modifikation einzubauen oder
damit zu leben, dass Objekte in falscher Sprache angelegt werden und im Nachgang
umgezogen werden müssen.
7.3.5 ERFAHRUNGSBERICHT AUS DER PRAXIS: COMGROUP GMBH
Bei Anlage von Objekten werden zudem per Modifikation Namenskonventionen
Das nachfolgende Beispiel der Comgroup GmbH, dem IT-Dienstleister der Würth überprüft, sodass diese nur gemäß den Konventionen benannt werden können.
Gruppe, zeigt, wie Programmierrichtlinien und Namenskonventionen in einer Soft-
wareentwicklung ein- und durchgesetzt werden können. Um eigene Prüfungen bei der Transportfreigabe durchzuführen (z.B. eigene Namens-
konventionen/mindestens deutsche und englische Übersetzung) wurde eine Imple-
Die Comgroup GmbH startete mit der Quellcode QA im globalen Entwicklungssystem mentierung für das Business Add In CTS_REQUEST_CHECK angelegt und die Methode
einer mehrstufigen Entwicklungslandschaft. Zur automatisierten Unterstützung wurde CHECK_BEFORE_RELEASE genutzt.
der Code Inspector eingesetzt. Da zeitgleich mit der Quellcode-QA auch ein neuer
Namensraum eingeführt wurde, wurden zu Beginn des Projekts nur Objekte aus dem Nachdem sich der Prozess im globalen Entwicklungssystem stabilisiert hatte, wurde
neuen Namensraum geprüft und bestehender Quellcode nicht berücksichtigt. Dies dieser an die nachfolgenden Entwicklungssysteme und Namensräume ausgerollt.
erleichterte die Selektion im Code Inspector, da diese keine Änderungs- oder Erstel- Bestehender Quellcode wird bisher noch nicht gecheckt. Zusätzlich ist geplant, ein
lungsdaten berücksichtigt. Außerdem wurden Performance- und Security-Checks aus externes Tool einzusetzen, das die Qualitätssicherung vereinfacht.
dem Code Inspector vorerst nicht aktiviert, um den Aufwand in einem überschaubaren
Rahmen zu halten.
Mit diesem Tool kann der Entwickler seinen Quellcode während der Entwicklung
selbstständig überprüfen. Zusätzlich wurde ein Nachtlauf eingeplant, der den kom-
pletten zu scannenden Quellcode analysiert und bei gefundenen Fehlern Mails an den
jeweiligen Entwickler sendet.
8.1.1.2 Qualitätssicherung
54 Auch in der 3-Systeme-Landschaft kann mit Transporten von Kopien gearbeitet werden, wie in Abschnitt 8.1.4 Best Pratice beschrieben. 55 Vgl. DSAG-Leitfaden Datenschutz
Im Testsystem herrscht absolutes Customizing- und Entwicklungsverbot. Customizing- Im Wartungssystem erfolgt die Wartung bzw. Betreuung der produktiven Software für
und Workbench-Objekte werden ausschließlich per Transportauftrag importiert. den Zeitraum, in dem im Entwicklungssystem das neue Release entwickelt wird. Die
LIFECYCLE MANAGEMENT
8. INFRASTRUKTUR UND
Übernahme aller Korrekturen aus dem Wartungssystem in das neue Release muss
Importe in dieses System erfolgen im Regelfall durch Transporte von Kopien (siehe sichergestellt werden.
Abschnitt 8.1.4 Best Pratice). So wird gewährleistet, dass bearbeitete Entwicklungsob-
jekte im Entwicklungssystem über den gesamten Release-Zeitraum gesperrt bleiben. Nach einem Produktivgang, d. h. dem Transport eines Releases auf die Produktion,
Der Original-Transportauftrag wird erst zur Produktivsetzung freigegeben. Durch die muss das Wartungssystem wieder konsistent mit der Produktion werden. Dies kann
Transporte von Kopien können Entwicklungen und Customizing schon vorab im auf unterschiedlichen Wegen erfolgen. Ein typisches Vorgehen ist der Import der
Testsystem getestet werden. Damit ist es möglich, viele Entwicklungen und Customi- Releasetransporte auf das Wartungssystem.
zing im Entwicklungssystem zu bündeln und so die Anzahl der Release-Transporte für
das Qualitätssicherungs- und das Produktivsystem zu minimieren. Wenn dieser Vorteil
nicht benötigt wird, kann auf das Testsystem verzichtet werden.
8.1.2.5 Konsolidierung
Das Testsystem wird bei Bedarf aus dem Produktivsystem kopiert. So ist es möglich,
bereits vorab umfangreiche Tests durchzuführen. In diesem System erfolgt der Test der Änderungen aus dem Wartungssystem.
8.1.2.3 Qualitätssicherung
Das Qualitätssicherungssystem entspricht in dieser Landschaft dem Qualitätssiche- 8.1.2.7 Schematische Darstellung 6-Systemlandschaft
rungssystem der 3-Systemlandschaft.
BEST PRACTICE
8.1.4 TRANSPORTWESEN Um Probleme mit der Importreihenfolge von freigegebenen
Transporten, die dieselben Entwicklungsobjekte betreffen,
Der Transportweg ist wie folgt festgelegt: zu vermeiden, sollte für die Belieferung der Test- und Qua-
litätssicherungssysteme mit Transport von Kopien gear-
• 3-Systemlandschaft: beitet werden. Die geänderten Entwicklungsobjekte bleiben
bis zur Produktivsetzung durch den eigentlichen Transpor-
Entwicklung → Qualitätssicherungssystem → Produktion (nach Qualitäts
sicherungssystem evtl. mit Transporten von Kopien)
tauftrag im Entwicklungssystem gesperrt. Ein Entwick-
ler wird durch das System darauf hingewiesen, wenn ein
• 5-/6-Systemlandschaft: anderer Entwickler das Objekt bereits bearbeitet, und kann
sich mit diesem Entwickler abstimmen. Nach Abschluss
Entwicklung → Test (in dem Fall immer Transporte von Kopien) des Projekts oder der Änderung wird nur der eigentliche
Transportauftrag über das Qualitätssicherungssystem ins
Entwicklung → Test -> Qualitätssicherungssystem → Produktion
Produktivsystem transportiert.
(Release-Transporte)
zur überschneidenden Verwendung von Objekten kommen, die es im Zielsystem dies zu erreichen:
(noch) nicht gibt. Dies führt zum Fehler beim Import. Hieraus ergibt sich die Pflicht
zur Prüfung der von Dritten (Non-SAP) erstellten Objekte bei deren Verwendung. • Kompletter Rückbau der Änderungen, sofern diese auch in späteren Releases
Neuentwicklungen bzw. Erweiterungen müssen in geeigneten Paketen bzw. Trans- nicht benötigt werden.
portaufträgen gekapselt werden. Es wird empfohlen, die Transportaufträge für ein
Projekt auf je einen Transportauftrag für Workbench, Customizing und Berechti- • Deaktivierung der Entwicklung, so dass der Quellcode im Produktivsystem nicht
gungsrollen einzuschränken. „Vorabtransporte“ sollten nur mit Hilfe von Transport von durchlaufen wird. Dies kann durch unterschiedliche Strategien erreicht werden:
Kopien erlaubt sein.
• Durch Auskommentieren des Quellcodes (bei kleineren Code-Anderungen).
Die endgültige Freigabe und der Transport erfolgt erst zum Projektabschluss. Alle
Projektmitarbeiter verwenden innerhalb eines Projekts nur Aufgaben zu einem jeweils • Durch Einbauen einer Weiche im Quellcode, die sicherstellt, dass der nicht
vorgegebenen Transportauftrag. Es gibt keine „persönlichen“ Transportaufträge für freigegebene Quellcode nicht durchlaufen wird. Die Ausgestaltung der
Projektmitarbeiter. Weiche hängt vom konkreten Fall ab.
Generell erfolgt ein Import nur nach formeller Freigabe (siehe Change-Verfahren) durch • Customizing muss ggf. komplett entfernt oder zurückgebaut werden.
einen Process Owner, die Qualitätssicherung oder ähnliche Instanzen. Die Abfolge sowie
die beteiligten Bereiche müssen unternehmensspezifisch festgelegt werden. Im Falle der Nutzung von TMS Quality Assurance (QA)56 als Genehmigungsworkflow gilt:
Zum Rückbau von „verwaisten“ Entwicklungen ist im SCN ein kleines Z-Programm
vorgestellt worden (Report for Rolling Back Abandoned Developments).
56 https://help.sap.com/saphelp_nw70/helpdata/de/9c/a544c6c57111d2b438006094b9ea64/content.htm
Um eine SAP-Systemlandschaft wartbar und beherrschbar zu gestalten, ist ein CC Nummer: Datum:
formales Change-Verfahren die Voraussetzung für jede Systemänderung. Dabei gilt
LIFECYCLE MANAGEMENT
von IT ausfüllen
8. INFRASTRUKTUR UND
CC Titel:
das grundsätzliche Verfahren gleichermaßen für Änderungen am SAP-Standard und
von IT ausfüllen
für Kundenentwicklungen.
Anforderung
Das Basiswerk zur Einführung eines Change- und Releasemanagements ist die Anforderer: Kostenstelle:
Wir empfehlen grundsätzlich, die folgenden Aspekte bei der Einführung eines Change-
Control-Verfahrens (auch: Change-Request-Verfahren) zu berücksichtigen:
Ausführliche Beschreibung als Anlage anfügen!
Process Owner: Datum/Unterschrift:
• Fachliche Anforderung
Process Owner Datum/Unterschrift:
Fremd:
• Begründung
Bearbeitung
• Bewertung (Aufwandschätzung) Applikation/Modul: Bearbeiter:
Genehmigt Datum/Unterschrift:
• Genehmigung SAP-Koordination:
Genehmigt Datum/Unterschrift:
SAP-Leitung
• Freigabe der Änderung für das Produktivsystem Bemerkung:
Die Verwendung eines geeigneten Tools (z.B. Solution Manager ChaRM) wird dringend Geprüft
SAP-Koordination: Datum/Unterschrift:
empfohlen. Dabei gilt jedoch: Eine papierbasierte Lösung ist besser als keine! Geprüft IT-Leitung:
Datum/Unterschrift:
Transport/Übergabe
durch Bearbeiter: Datum/Unterschrift:
57 siehe https://de.wikipedia.org/wiki/IT_Infrastructure_Library
• Nach Fertigstellung lässt der Bearbeiter die Änderung durch den Anforderer
• Der Anforderer füllt den Teil „Anfordernde Abteilung“ aus und sorgt für die prüfen.
Unterschrift des Process Owners und/oder des Process Owners Fremd
• Entspricht die Umsetzung den Anforderungen, gibt der Anforderer die Änderung
• Der Process Owner ist in der Regel ein Vorgesetzter des Anforderers. Er ist zum Transport frei; der Anforderer bestätigt mit seiner Unterschrift die ord-
verantwortlich für einen bestimmten Teil der Daten bzw. für die Nutzung be- nungsgemäße Umsetzung; ein Transport darf erst nach Freigabe durch den
stimmter Teile der SAP-Software, z.B. der Einkaufsleiter für die SAP-Einkaufsda- Anforderer durchgeführt werden.
ten und -programme
• SAP-Koordinator und IT-Leitung bestätigen die ordnungsgemäße Umsetzung. Die
• Der Process Owner Fremd ist immer dann einzubeziehen, wenn eine Änderung ordnungsgemäße Umsetzung sollte anhand einer Checkliste überprüft und durch
auch Daten oder Programme betrifft, die außerhalb der Zuständigkeit des den Einsatz von Prüfwerkzeugen unterstützt werden (siehe nachfolgende Best
Process Owners liegen. Practice-Empfehlungen). Ein Transportauftrag darf nicht ohne vorangegangene
Beispiel: Der Einkäufer benötigt Berechtigungen aus dem Bereich der Anlagen- Freigabe durch die SAP-Koordination und die IT-Leitung ins Produktivsystem
buchhaltung; hier muss der Process Owner zustimmen, der diesen Teil des importiert werden.
Systems verantwortet (z.B. der Leiter der Anlagenbuchhaltung).
• Der Bearbeiter übergibt den Transport in das Produktivsystem und leitet das CC
• Eine ausführliche Beschreibung der Änderung ist dem CC in jedem Fall als an die SAP-Koordination und die IT-Leitung weiter.
Anlage anzufügen; CCs ohne eine ausführliche Beschreibung werden zurückge-
wiesen. Der Anforderer gibt das CC an die IT weiter. Der Genehmigungs- und Freigabeprozess und damit auch der Inhalt des Formulars
können branchenspezifisch stark variieren. In pharmazeutischen Unternehmen ist
• Der SAP-Koordinator ist derjenige, der die anfallenden Aktivitäten für SAP oder beispielsweise grundsätzlich die QA in das CC-Verfahren eingebunden. Darüber hinaus
einen Teil von SAP koordiniert und den einzelnen Modulbetreuern die Aufgaben ist es in allen Unternehmen üblich, dass bei Überschreitung von bestimmten (ge-
zuweist. Diese Aufgabe kann – in Abhängigkeit von der Größe der Organisation – schätzten) Projektkostenlimits weitere Genehmiger der Umsetzung zustimmen
auch von einem Gruppen- oder Abteilungsleiter innerhalb der IT übernommen müssen. Die Genehmigungsstruktur hängt also auch von der jeweiligen Unternehmens
werden. Die betreffende Person trägt die Applikation bzw. das Modul im Formular organisation ab.
ein und weist das CC einem Bearbeiter zu. Sie kann das CC auch aufgrund
formaler Fehler (z.B. fehlende oder unzureichende Beschreibung, fehlende Das vorgestellte Formular enthält daher lediglich die Minimalanforderungen an ein CC
Unterschrift des Process Owners oder des Process Owner Fremd) zurückweisen. ohne Berücksichtigung branchen- oder organisationsspezifischer Anforderungen.
Der SAP-Koordinator vergibt eine eindeutige CC-Nummer und den CC-Titel; diese
CC-Nummer kann z.B. auch von einem Projektmanagement-Tool übernommen Weitere Genehmigungs- bzw. Freigabeschritte oder zusätzliche Felder mit Bezug zu
werden. anderen Dokumenten (z.B. Validierungsdokumente) sind bei Bedarf individuell zu
ergänzen und der Prozess entsprechend zu erweitern.
• Der IT-Leiter oder der SAP-Leiter genehmigt / lehnt ab / stellt zurück (mit
entsprechender Begründung), nachdem der Koordinator genehmigt hat.
BEST PRACTICE Die Wartbarkeit von Software ist ein Kriterium bei der Entwicklung von Software und
zeigt an, mit welcher Energie und mit welchem Aufwand Änderungen in einem System-
LIFECYCLE MANAGEMENT
User-Exits sind Unterprogramme, die sich in Includes im SAP-Namensraum Mit dem neuen Enhancement Framework versuchte SAP, die Nachteile der bisheri-
befinden, aber nur einmalig von SAP ausgeliefert werden und deshalb ohne gen Erweiterungstechniken zu beheben. Zum Enhancement Framework zählen:
LIFECYCLE MANAGEMENT
8. INFRASTRUKTUR UND
Diese erlauben die modifikationsfreie Erweiterung von CDS Views. Die Erweite- Modifikation des von der SAP ausgelieferten Quellcodes ist grundsätzlich
rung ermöglicht das Hinzufügen von View-Feldern und Assoziationen. Die problematisch, da
LIFECYCLE MANAGEMENT
8. INFRASTRUKTUR UND
Jeweils am Anfang und am Ende von Prozeduren kann Code eingefügt oder der Grundsätzlich sollte nur dann modifiziert, wenn:
komplette Code (bei Methoden) ausgetauscht werden.
• Customizing oder Personalisierung Ihre Anforderung nicht umsetzen
Der Unterschied zwischen impliziten und expliziten Enhancements ist groß: können und
Implizite Enhancements ähneln Modifikationen, mit teilweise den gleichen
Nachteilen. Explizite Enhancements ähneln BAdIs. • Keine geeigneten Erweiterungsmöglichkeiten vorgedacht sind.
Bei der Verwendung von impliziten Enhancements ist die SPAU_ENH abzuarbeiten, Im Change-Prozess sollte der Sonderfall Modifikation aus Gründen der Nachvoll-
da diese Enhancements in der regulären SPAU-Transaktion nicht angezeigt werden. ziehbarkeit separat abgebildet werden.
59
CDS View SAP NetWeaver 740
CDS View SAP NetWeaver 750
WEITERE QUELLEN
Die Entdeckung von und der Umgang mit Mängeln lässt sich durch den Einsatz
verschiedener Hilfsmittel unterstützen. Angefangen bei der Definition eines Prozess-
LIFECYCLE MANAGEMENT
8. INFRASTRUKTUR UND
modells (z.B. I2M, ITIL, V-Modell) für die Festlegung der Testebenen und Quality Gates,
der Ausrichtung an einem Qualitätsstandard (z.B. SQuaRE, ISO/IEC 9126) zur Definition
von Prüfkriterien, der Verwendung verschiedener Produktentwicklungsmethoden (z.B.
SAP Agile SE, KANBAN, Scrum) für den Umgang mit Fertigungs- und Abnahmekriteri-
en, bis hin zur Einführung eines effektiven Risikomanagements und der Festlegung von
Schutzbedarfsklassen für Anwendungskategorien, ist das Spektrum für den Umgang
mit Tests breit gestreut und von verschiedenen Faktoren abhängig. Hierzu gehören
u.a. die Branchenzugehörigkeit des Unternehmens, gesetzliche Rahmenbedingungen
und die potenzielle Schadensauswirkung der Anwendung auf den Geschäftsprozess.
Teststufen
Bei der Fertigung von Softwareprodukten lassen sich grundsätzlich drei verschiedene Abbildung 4: W-Modell mit Teststufen 61
Testverfahren voneinander unterscheiden:
Typische Vertreter von White-Box-Tests sind Komponenten- und Integrationstests. Die
• White Box Gemeinsamkeit dieser Tests liegt darin, dass die Struktur, Implementierung oder
Reihenfolge der getesteten Softwareartefakte bekannt ist. Die Tests werden in der
• Grey Box Regel im Rahmen der Entwicklung direkt durch das Entwicklerteam auf dem Entwick-
lungssystem erstellt, durchgeführt und weiterentwickelt.
• Black Box
Das Grey-Box-Testverfahren ist dem Akzeptanztest vorangestellt und wird nach
Fertigstellung des Produkts bzw. eines Produktinkrements in Form von Systemtests
durchgeführt. Meistens findet die Erstellung dieser Tests auf einer Produktivsys-
tem-nahen Umgebung durch ein separates Test-Team statt. Die organisatorische
Aufteilung zwischen Grey- und White-Box-Tests hat den Vorteil, dass sich das Entwick-
lungsteam auf seine Kernaufgaben konzentrieren kann. Das Test-Team validiert die
Anwendung aus einer anderen Perspektive und versucht, mögliche Schwachstellen
oder Mängel und deren Ursachen zu identifizieren.
62 In Anlehnung an http://www.informatik.hs-bremen.de/spillner/ForschungSpillnerWmo.pdf
• Initialer Mehraufwand
8.5.2 TESTAUTOMATISIERUNG • Eventuell aufwändige Umsetzung, z.B. bei Unit-Tests, wenn Datenbank-Aufrufe
nicht gekapselt sind.
Eine Testautomatisierung eignet sich für alle Bereiche, in denen regelmäßig eine Folge
von manuellen Arbeitsschritten durchgeführt werden muss, um das korrekte Verhal- Diese Kontexte sprechen besonders für den Einsatz von Unit-Tests:
ten einer Funktionalität zu überprüfen. Die Entscheidung, welche Aktivitäten zu
automatisieren sind, sollte von der Risikokategorie, dem Komplexitätsgrad, der • Häufige Anpassungen der Software sind zu erwarten
Ausführungshäufigkeit und der Relation von manuellen Kosten gegenüber den Auto-
matisierungskosten abhängig sein. Automatisierte, wiederholbare Tests können sehr • Softwareteile, die vermutlich wiederverwendet werden
effizient sein.
• Komplexe Funktionalität
• SAP-NetWeaver-Softwarestand
Auch für automatisierte Funktionstests kann die Trennung der Schichten manchmal
• Hilfsmittel Test-Seams ab SAP NetWeaver 7.50 verfügbar hilfreich sein, der Fokus bei eCATT liegt allerdings auf der Ansteuerung über SAP GUI.
• Klassen, deren Zweck der Datenbankzugriff ist („Datenbankschicht“, „Model“ im BEST PRACTICE
Model-View-Controller-Muster), und die keine komplexe Logik beinhalten. • Nutzen Sie für die Entscheidung, welche Prozesse für
automatisierte Regressionstests in Frage kommen,
• Klassen, deren Zweck die Ansteuerung und Kommunikation mit der Oberfläche
ist („View“ im Model-View-Controller Muster), und die keine komplexe Logik
die im SAP System zur Verfügung stehenden Auf-
beinhalten. rufstatistiken (Transaktionsstatistik via ST03N /
Usage Procedure Logging).
• Existierende Software mit schlechter Modularisierung (vor allem, wenn Test- • Starten Sie bei der Einführung von Unit-Tests bzw.
Seams noch nicht verfügbar sind, siehe oben)
automatisierten Funktionstests mit einem kleinen
engagierten Team. Dessen Erfahrungen und Erfolge
lassen sich als Erfolgsgeschichten bei der weiteren
Einführung des Themas in Ihrer Organisationseinheit
BEST PRACTICE nutzen. Hierbei ist es wichtig, dass das Team von
• Erwägen Sie den Einsatz von automatisierten Tests. seiner Tätigkeit überzeugt ist und anhand von Bei-
• Bauen Sie Kompetenz in diesem Bereich auf. spielen den Nutzen dieser Tätigkeit belegen kann.
Im ABAP-Umfeld ist in vielen Fällen die Integration der Datenbank oder der Oberfläche WEITERE QUELLEN
ein Hindernis, wenn es um die Erstellung von wiederholbaren, automatisierten Tests
geht. Für Unit-Tests liegt die Lösung in der ohnehin sinnvollen Modularisierung. 1. http://www.testbarkeit.de
2. http://de.wikipedia.org/wiki/Testbarkeit
63 siehe https://github.com/uweku/mockA 7.
Test-Seams and Injections
eingebettet aufgerufen. Mittelfristig wird sich eine Notwendigkeit zum Umstieg auf
In der Vergangenheit fanden Entwicklungen im SAP-Umfeld ausschließlich in den ADT ergeben.
ABAP-Workbench-Werkzeugen statt (SE80). Im Rahmen der neuen Technologien sind
in den letzten Jahren weitere Entwicklungswerkzeuge wie zum Beispiel die SAP Web
IDE (SAP-UI5-Entwicklung im Browser) oder das SAP HANA Studio (Eclipse-basierte
Umgebung für die Administration und native Entwicklung auf/mit HANA)64 entstanden. 9.3 VORTEILE
Für die ABAP-Entwicklung steht mit den ABAP Development Tools (ADT) für Eclipse
seit AS ABAP 7.31 SP4 der Nachfolger zur ABAP-Workbench zur Verfügung. ADT Die Vor- und Nachteile, die sich aus der Verwendung von ADT ergeben, hängen
basiert auf der Entwicklungsumgebung Eclipse erweitert um entsprechende Plug-ins maßgeblich von der individuellen Arbeitsweise als auch vom konkreten Projektumfeld
für die Entwicklung in ABAP. ab. In den folgenden Abschnitten haben wir die aus unserer Sicht wichtigsten Vor- und
Nachteile bei der Arbeit mit ADT aufgeführt. Eine gute Übersicht über die mit ADT
insgesamt verfügbaren Funktionen bietet [1] sowie das FAQ-Dokument zu ADT [7].
Wie bereits oben erwähnt ist mindestens Release AS ABAP 7.31 SP4 und Kernel 7.21 Bei der Arbeit mit ADT ist man beim Editieren von ABAP-Quellcode nicht mehr an SAP
notwendig, um die ADT für Eclipse einsetzen zu können. Der in ADT verfügbare GUI-Modi gebunden. Das heißt, es können viele Sourcen gleichzeitig geöffnet sein und
Funktionsumfang ist jedoch nicht nur von der verwendeten ADT-Version abhängig diese bleiben auch nach Ab-/Anmeldung in exakt gleicher Form erhalten. ADT-Links
sondern auch von der verwendeten AS-ABAP-Version. Eine ständig aktualisierte ermöglichen es zeilengenau Links zu Stellen im ABAP-Quellcode zu erstellen und zu
teilen (siehe [3]). Weiterhin ermöglicht es das Eclipse-Tool Mylyn, den ADT-Arbeitsplatz
Übersicht über die mit den verschiedenen AS-ABAP-Versionen verfügbaren Funktio- und die geöffneten ABAP-Quellcodes anhand von Aufgaben (z.B. aus einem Ticketsys-
nen ist unter [1] im SCN verfügbar. tem) zu organisieren (siehe [4]).
Im Gegensatz zur ABAP-Workbench ist für ADT eine zusätzliche Installation auf dem Konfigurierbarkeit des ADT-Arbeitsplatzes
Arbeitsplatz des Entwicklers notwendig. Eine aktuelle Installationsanleitung für ADT
ist unter [2] verfügbar. Eclipse und somit auch ADT ermöglicht es, den Arbeitsplatz flexibel zu konfigurieren.
So ist es durch Drag and Drop einfach möglich, Views zu vergrößern oder die Position
Alternativ zu dieser Anleitung ist je nach Firmengröße eine Alternative, ein Grundpaket bestimmter Views zu ändern. Weiterhin ermöglicht das Verknüpfen von Views, dass
(Eclipse IDE + ADT) über den Standardverteilungsmechanismus verfügbar zu machen z.B. im View der ABAP-Dokumentation immer die Dokumentation zum aktuell ausge-
und lokal nur das Update auf die aktuelle Version zu machen (über SAP-Updatesite wählten Schlüsselwort angezeigt wird.
oder hausintern).
Editorfunktionen
Der Editor selbst bietet eine Reihe zusätzlicher Funktionen, die die Entwicklereffizienz
9.2 NOTWENDIGKEIT erhöhen:
ADT für Eclipse ist der von SAP designierte Nachfolger der ABAP-Workbench. Neue • Laufende Syntaxprüfung (nicht erst bei manuellem Aufruf wie in der SE80 per
Objekttypen wie z.B. ABAP Core Data Services (CDS) können mit der ABAP-Workbench Knopfdruck im Editor)
(SE80 oder anderen SAP GUI-Transaktionen) nicht mehr bearbeitet werden, da sich
diese nur noch in der Wartung befindet. Zusätzlich wächst der Funktionsumfang von • Quickfix-Funktionen: das System schlägt Möglichkeiten vor, wie der aktuelle
ADT mit jedem Release. Für verbliebene, noch nicht in ADT implementierte Funktionen Syntaxfehler behoben werden kann (z.B. halbautomatisches Anlegen einer neuen
Methode mit den verwendeten Parametern)
64 Dies stellt keine Empfehlung für das HANA Studio zur Entwicklung nativer HANA-Anwendungen dar.
• ABAP-Doc als integrierte Dokumentationsmöglichkeit Der Einstieg in jedes neue Werkzeug ist mit einer initialen Ein- bzw. Umgewöhnungs-
phase verbunden. Insbesondere erfordert der Umstieg von der ABAP-Workbench auf
Refactoring-Funktionen ADT auch die Gewöhnung an ein neues Entwicklungsparadigma. Während in der
ABAP-Workbench formularbasierte Editoren überwiegen (z.B. für Klassen und
ADT bietet eine ganze Reihe von automatisieren Refactoring-Funktionen. So ist es Methoden), verwendet ADT überwiegend Quellcode-basierte Editoren. So ist zusätzlich
möglich, eine Variable und alle ihre Verwendungen umzubenennen oder nicht verwen- zu dem neuen Werkzeug auch die Gewöhnung an eine neue Form der Bearbeitung des
dete Variablendeklarationen automatisch zu entfernen. Komplexere Refactoring-Funk- Quellcodes notwendig. Dieser Umstand stellt aus unserer Erfahrung eine nicht zu
tionen erlauben die automatisierte Extraktion einer Methode oder eines Attributs. unterschätzende Einstiegshürde dar.
Verbesserte Laufzeitanalyse Schlussendlich wird man jedoch nach dem Umstieg schnell feststellen, dass ein
Sourcecode-basiertes Arbeiten deutlich effizienter ist.
Die in ADT integrierte Laufzeitanalyse (siehe [5]) ermöglicht es, ABAP-Traces graphisch
zu visualisieren. Diese Visualisierung erlaubt es sehr einfach, performancekritischen Fehlende Spezialtransaktionen
Quellcode zu identifizieren und zu optimieren.
ADT unterstützt nicht alle Spezialtransaktionen, die über die SAP GUI verfügbar sind.
Verbesserte Versionshistorie Obwohl der Funktionsumfang von ADT stetig erweitert wird (z.B. um Modellierungs-
funktionen für BOPF), werden auch in Zukunft nie alle Spezialtransaktionen in ADT
Die in ADT integrierte Versionshistorie kann remote über Systeme hinweg verwendet umgesetzt werden. Diese können zwar über die SAP GUI Integration innerhalb von ADT
werden und hat auch eine lokale (arbeitsplatzbezogene) Historie und ermöglicht so aufgerufen werden. Jedoch ist die Verwendung über die SAP GUI-Integration nicht
eine maximale Flexibilität. immer ideal. So ist zum Beispiel das Arbeiten mit den SAP-CRM-WebUI-Tools in ADT
nicht immer konsistent. Bestimmte Objekte in den SAP-CRM-WebUI-Tools werden zur
SQL-Tools Bearbeitung in der ABAP-Workbench geöffnet, während andere Objekte in den
ADT-Editoren geöffnet werden.
In ADT haben sich auch die klassischen Werkzeuge des Entwicklers im SQL-Bereich
neu erfunden. Zum Beispiel steht eine SQL-Konsole als auch eine integrierte Da-
ta-Preview-Funktion zu Verfügung.
9.5 PROBLEME UND HILFESTELLUNGEN FÜR DEN UMSTIEG
Erweiterbarkeit
Die ersten Tage der Arbeit mit ADT werden aus der Erfahrung heraus etwas holprig.
Da es sich bei Eclipse um eine offene Plattform handelt, ist diese sehr flexibel erwei- Insbesondere die freie Konfigurierbarkeit der Entwicklungsumgebung und das
terbar. So stehen zum einen SAP-Tools zur Verfügung. Zum anderen ist ADT auch mit Quellcode-basierte Entwicklungsparadigma stellen für erfahrene SAP-Entwickler ein
existierenden Tools aus dem Eclipse-Ökosystem erweiterbar. Zusätzlich ist für ADT ein Hindernis dar. Sie werden im ersten Moment nicht als nennenswerter Vorteil wahrge-
SDK (Software Development Toolkit) verfügbar (siehe [6]), das es ermöglicht, ADT um nommen. Vielmehr werden sie als unnötige Veränderung ohne Mehrwert erlebt. Dies
eigene Funktionen zu erweitern. Zusätzlich dazu wird auch eine SAP-Codejam zu ändert sich aber nach Überwindung der Einstiegshürde und die Entwicklungseffizienz
diesem Thema angeboten. nimmt zu.
Auch ist es ein Problem, wenn für mehrere Systeme mit unterschiedlichen Release- [2] ABAP in Eclipse Installationsanleitung
Ständen in ADT entwickelt werden soll. In diesem Fall kann es vorkommen, dass
bestimmte Funktionen nicht in allen Systemen verfügbar sind (vergleiche [1]). [3] How ADT links change the way you work
Falls man eine größere Anzahl an Entwicklern im Unternehmen hat, hat es sich [4] Use mylyn tasks to organize your ABAP in Eclipse workspace
bewährt, die Einführung von ADT mit einer Schulung beziehungsweise mit einer
Vorstellung des Werkzeugs zu beginnen (Begrifflichkeiten und Grundeinstellungen). [5] ABAP Profiling in Eclipse
Alternativ ist in ADT der sogenannte „Feature Explorer“ integriert. Der Feature Explo- [6] First version: SDK for ABAP development tools
rer ist eine Art Lerntutorial für das Selbststudium, der die grundlegende Arbeitsweise
mit ADT erklärt. Hier wird beispielsweise gezeigt, wie man ein Entwicklungssystem in [7] FAQs zu ADT
ADT oder mit Hilfe der Refactoring-Werkzeuge Teile einer Methode extrahieren kann.
[8] BOPF Modelling in ADT
Eine weitere Möglichkeit für den Einstieg ist, an einem SAP-Codejam für ABAP in
Eclipse teilzunehmen.65 [9] ADT Feature Explorer
9.6 FAZIT
Die Vorteile von ADT überwiegen spätestens seit Release 7.40 die Nachteile. Der
Umstellungsaufwand ist überschaubar (allerdings je nach Lernmotivation und -fähig-
keit verschieden). Insbesondere wird die Umstellung jüngeren Mitarbeiterinnen bzw.
Mitarbeitern, die in Entwicklungsumgebungen außerhalb der ABAP-Workbench
gearbeitet haben, leichter fallen.
BEST PRACTICE
Wir empfehlen aus unserer Erfahrung die Verwendung
von ADT ab AS ABAP Release 7.31 SP6.
65 Vgl. http://scn.sap.com/community/events/codejam
UI-Technologien spielen eine immer wichtigere Rolle in Entwicklungsprojekten. Aus Geringer Entwick-
diesem Grund möchten wir auch in diesem Kapitel darauf eingehen. lungsaufwand, vor Für kleinere
allem bei einfachen Entwicklungen in
Dynpro (klassisch) nur noch Support
Reports mit gene- vielen Fällen
Der Fokus des UI-Kapitels liegt auf den „neuen“ SAP-UI-Technologien, da wir in den riertem Selektions- weiterhin sinnvoll
SAP-Produkten einen klaren Trend zu SAPUI5 als UI-Framework und SAP Fiori als bild.
zentralen Einstieg in die SAP-Welt sehen. Bei Power-Usern
beliebt.
Dennoch bewerten wir z.B. Web Dynpro oder klassisches Dynpro als wichtige UI-Kom- Business Server Durch Web Dynpro
ponenten in der SAP-Welt. Für diese schon lange etablierten Technologien gibt es bei nur noch Support Nicht sinnvoll
Pages (BSP) abgelöst
vielen SAP-Kunden bereits Empfehlungen und auch ein breites Grundwissen.
Für klassische
Im CRM auf Basis der
CRM-Apps weiterhin
Um sich einen ersten Überblick über die verschiedenen UI-Technologien zu verschaf- BSP-Technologie
WebClient UIF nur noch Support relevant. SAP Hybris
entwickelt und im
fen, empfiehlt sich der EA Explorer66 der SAP. Dort findet man einen guten Einstieg in C4C setzt hier auf
Einsatz
verschiedene Aspekte von User Interfaces. In diesem Leitfaden sind die wichtigsten SAPUI5/SAP Fiori
UI-Technologien in der nachfolgenden Tabelle aufgelistet. Die Tabelle beschränkt sich Sollte nicht mehr
auf einen Überblick sowie einer kurzen Bewertung zum jeweiligen Gebrauch bei (Neu-) Web Dynpro Java nur noch Support Nicht sinnvoll
verwendet werden
Entwicklungen.
In Kombination mit Sinnvoll für größere
Web Dynpro ABAP
Kleinere Erweiterun- Floorplan Manager Neuentwicklungen.
inkl. Floorplan
gen weniger aufwändig Auch SAPUI5 in
Manager
als Standalone. Erwägung ziehen.
Konfiguration und
Scripting (Java-
Script), um existie- Für UI-Überarbeitung
Kleinere Erweiterun- rende Anwendungen existierender
SAP Screen Personas
gen auf Basis klassischer Dynpro-Programme
Dynpros attraktiver sinnvoll.
und besser bedienbar
zu machen
Sinnvoll. Siehe Vor-/
SAPUI5 Strategisch Nachteile im
Folgenden
66 SAP EA Explorer
ckelte Anwendungen zeichnen sich dadurch aus, dass sie eine responsive Web-Ober-
∙ Modernstes Aussehen ∙ S AP Gateway erforderlich (bei der empfoh-
fläche sowohl auf dem Desktop-Browser als auch auf mobilen Endgeräten zur Verfü-
lenen separaten Installation zusätzliche
∙ T heoretisch ist alles möglich, was HTML5 in gung stellen.
Kosten)
Verbindung mit JavaScript erlaubt
∙ In Spezialfällen u. U. fehlende Features und
∙ Nutzung auf Tablets und Smartphones Unter dem Namen OpenUI569 wird SAPUI5 auch unter einer Open-Source-Lizenz
schlechtere Performance gegenüber SAP
∙ Kein Client zu installieren GUI / ALV (Apache 2.0) vertrieben. Hierbei sind allerdings einige Komponenten wie Diagramme
und Smart Controls nicht in der Distribution enthalten.
∙ Responsive UI (Automatische Anpassung an ∙ Relativ neue Technologie, daher Probleme
das jeweilige Endgerät) beim Einsatz der Tools und als Endprodukt
möglich Aktuell realisierte Anwendungen sollen dabei nach den SAP Fiori Design Guidelines70
∙ Nutzung der Endgerätfähigkeiten wie z.B.
realisiert werden, um eine optimale Multi Device User Experience zu gewährleisten
Kameras ∙ Komplexe Apps erfordern mehr Aufwand
und sich in das „Look and Feel“ von SAP-Anwendungen zu integrieren. In SAPUI5 sind
∙ Native SAP-Fiori-Launchpad-Integration (Stateless Apps)
aus den Anfängen der Bibliothek noch rein Desktop orientierte Komponenten enthalten
∙ Relativ neue Technologie, daher optimale (sap.ui.commons), die aber nicht mehr verwendet werden sollten (deprecated).
Integration in aktuelle Web-Browser
10.2.1 ANFORDERUNGEN
SAP Fiori bezeichnet die neue User Experience (UX) aktueller Lösungen der SAP, die
auf Basis moderner Design-Prinzipien entstanden sind. Das Thema SAP Fiori werden Für den Einsatz von SAPUI5 wird im Frontend ein unterstütztes Endgerät benötigt, das
wir im Kapitel SAPUI5 nur ansatzweise behandeln, da die darunterliegenden Technolo- von SAP innerhalb der SAP NetWeaver 7.5 Browser Support PAM71 unterstützt wird.
gien in der On-Premise-Welt aktuell SAPUI5 und SAP Gateway sind. Auf das Thema
HANA Cloud Platform (HCP) wird in dem UI-Teil nicht explizit eingegangen, da sich der
SAPUI5 Teil nicht groß von der On-Premise-Welt unterscheidet und sich die Best
Practices von der On-Premise-Welt fast eins zu eins übernehmen lassen.
Auch das Thema Design Thinking bekommt in den letzten Jahren einen immer größe-
ren Stellenwert im Bereich UX und sollte für einen voll umfänglichen End-to-End-Pro-
zess ebenfalls betrachtet werden.
Eng mit dem Design Thinking ist auch das Thema Mock-up verknüpft. Hier gibt es
schon etablierte Tools, in denen es fertige SAP Fiori Design Stencils67 gibt, die das
SAP Fiori UX Pattern abbilden. Ein neues Produkt von SAP in diesem Bereich ist
Splash / BUILD, aber Stand Sommer 2016 ist dieses Produkt noch in der Beta-Phase Abbildung 5: SAP NetWeaver 7.5 Browser Support PAM
und es gibt erst wenige Erfahrungen dazu.
68 SAP-User-Experience-Strategie (UX)
69 OpenUI5-Homepage
70 SAP Fiori Design Guidelines
67 SAP Fiori Design Stencils 71 SAP NetWeaver 7.5 Browser Support PAM
72
10.2.2 ENTWICKLUNG
SAP folgt und unterstützt bei der modernen UX-Entwicklung den Ansatz des Design
Thinkings73, der sich bei der Entwicklung neuer Prozesse und Benutzeroberflächen
nutzen lässt. Design Thinking umfasst die drei Phasen Discover, Design und Deliver.
Im Rahmen der Discovery-Phase wird versucht, das aktuelle Kundenproblem zu BEST PRACTICE
verstehen und kreativ im Team einen Prozess zur Lösung herauszuarbeiten. Die • Die Anwenderzielgruppe sollte möglichst frühzeitig in
10. USER INTERFACE (UI)
Lösung beschreibt dabei einen konkreten Arbeitsablauf für eine definierte Zielgruppe.
den Prozess des Prototyping involviert werden, da das
Design einer Anwendung genau auf die Anforderung
und Arbeitsweise des Anwenders ausgerichtet wird.
10.2.2.2 Design Auch die Akzeptanz wird so gesteigert, da die Ziel-
gruppe in die Design-Phase integriert wurde und das
Innerhalb der Design-Phase wird mit der Zielgruppe ein Prototyp skizziert, der den Design miterarbeitet hat.
bestmöglichen Arbeitsablauf zur Erreichung der Anforderung aus der Analyse abbil-
den soll. • In gemeinsamen Workshops kommt man immer noch
am schnellsten mit dem Whiteboard zu allgemeinen
Je nach Know-how und Zielgruppe können folgende Tools verwendet werden: Ergebnissen. Der SAPUI5-Explorer77 sowie die SAP
Fiori Demo Cloud78 sind dabei hilfreiche Werkzeuge,
• Papier und Stift um neuen Anwendern das Thema SAPUI5 näherzu-
Immer noch die einfachste Variante, Ideen festzuhalten.
bringen.
• Whiteboards / Whitewalls • Stand 2016 haben Splash und BUILD noch einige
Die exklusive Papier und Stift Variante. Macken, die teilweise eine produktive Verwendung
inkl. der Code-Übernahme verhindern.
• SAP Splash and BUILD
Die SAP stellt mit Splash und BUILD74 ein Browser-basiertes Tool zur Verfügung, • Der openSAP-Kurs „Build Your Own SAP Fiori App in
mit dem via Drag & Drop Prototypen erstellt werden können, die sich an SAPUI5/ the Cloud – 2016 Edition79“ bietet einen umfassenden
SAP Fiori Vorlagen orientieren und auch dessen Widgets enthalten. Ein Einstieg und Überblick für das Thema SAP Fiori UX.
BUILD-Prototyp kann zur weiteren Entwicklung in die SAP Web IDE importiert
werden75.
Wurde im Rahmen des Prototypen-Designs ein entsprechender Prototyp verabschiedet, BEST PRACTICE
kann dieser nun in eine SAPUI5-Anwendung überführt werden. • Die Empfehlung durch den SAP Fiori 2.0 Guide ist,
10. USER INTERFACE (UI)
Test
Das SAPUI5 SDK stellt Funktionalitäten für den Unit- und Komponententest zur
77 SAPUI5 Explored (UI Explorer) Verfügung, über die die Testfälle weitestgehend automatisiert werden können.
78 SAP Fiori Demo Cloud
79 openSAP Kurs „Build Your Own SAP Fiori App in the Cloud – 2016 Edition“
80 SAP Web IDE Einsteigervariante für 5 Entwickler
81 SAP-Development-Tools für Eclipse 82 SAPUI5 Extension using component configuration
Innerhalb des SAPUI5-Frameworks erfolgt die Service Kommunikation i.d.R. über ent
sprechende Datenmodelle. Je nach Anwendungszenario existieren hierzu folgende Modelle:
• OData84
Das OData-Model definiert Datentypen und Strukturen und erlaubt einen
REST-basierten Zugriff auf Backend-Systeme. Das SAP Gateway unterstützt
OData über entsprechende Services und ab NW 7.40 über Core Data Services
(CDS). Ab NW 7.50 kann der CDS direkt über eine Annotation als OData Servcie
verfügbar gemacht werden, vorher muss dieser noch manuell in der SEGW
angelegt werden werden.
83 SAPUI5-Demo-Kit 84 OData-REST-Spezifikation
dass man nicht auf sogenannte „deprecated“-Komponenten setzt, die nicht mehr
• XML weiterentwickelt werden und irgendwann aus der Library entfernt werden
Datenaustausch über XML-Strukturen. Der AS-ABAP-Server stellt hierzu könnten.
XML-Transformationen zur Verfügung.
• Für das UI-Design sollten ausschließlich XML-Views verwendet werden, da nur
Zusätzlich zu den Modellen, die einen Request-basierten Zugriff auf Backend-Systeme diese von Tools wie dem SAP Web IDE unterstützt werden. Das SAPUI5 Extension
ermöglichen, existiert mit der WebSocket api eine weitere Technologie: Framework unterstützt nur XML-Views im Rahmen der Erweiterung von SAP-Fiori-
Apps.
• WebSocket
Push-Service-Technologie, über die ein Backend-System aktiv Daten an den • Die Bibliothek sap.ui.commons beinhaltet Komponenten, die nicht Bestandteil des
Client pushen kann. Hierzu kann das SAP-spezifische SAP Push Channel Protot- SAP Fiori Design Guidelines sind, und die auf der UI5con als deprecated genannt
col (PCP) verwendet werden. Das SAP Gateway stellt hierzu APC/AMC-Dienste wurden. Sofern möglich, sollte vollständig auf diese Bibliothek verzichtet werden.
zur Verfügung. Viele Kunden haben auf dieser Basis größere Anwendungsszenarien gebaut, die
mittelfristig auf sap.m migriert werden müssen, um Upgrade-fähig zu bleiben.
• Für den Einstieg bietet sich die Verwendung eines SAP-Web-IDE-Templates an.
Leider unterscheiden sich die Templates relativ stark in der Qualität, da sich
BEST PRACTICE diese an den SAPUI5-Möglichkeiten zum Erstellungszeitpunkt orientieren. Am
• Das OData-Model in Version 2 ist das von SAP favori- besten sollte ein passendes Template auf Basis des höchsten Versionstands
sierte Datenaustauschmodell für den Zugriff auf genutzt werden.
Backend-Systeme (Stand Q2/2016). Im SAP Gateway
sind sowohl Version 2 und 4 implementiert • In der SAP Web IDE können Projekte auf Basis der SAP Fiori Reference Apps 86
angelegt werden, die einen Best-Practice-Ansatz für die Themen Shop, Approve
• Nach Möglichkeit sollte die gesamte Kommunikation Purchase Order und Manage Products abbilden.
auf Basis von OData Services erfolgen, wobei eine
Komponente mit nur einem OData Service kommuni- • Vor der Entwicklung relevanter Services bietet sich ein UI-Prototyp mit Mock-up-
zieren sollte (Empfehlung SAP-Fiori-Design und Daten an, da sich die relevanten SAP Annotations 87 in der SAP Web IDE einfacher
gleichzeitig Restriktion der SAP Web IDE). beschreiben und testen lassen als im SAP Gateway Designer.
• In bestimmten Szenarien bietet es sich an, zusätzlich • Der Zugriff auf Business-Daten sollte über OData-Entitäten erfolgen, die vom
die WebSocket-Kommunikation mit in das Anwen- SAP Backend-System (z.B. Gateway) zur Verfügung gestellt werden. Die gesamte
dungsszenario aufzunehmen. Hierdurch kann auf Geschäftslogik wird dadurch im Backend kontrolliert und verwaltet. Die SAPUI5-
Server-seitige asynchrone Prozesse in Realtime Oberfläche mappt dabei nur die relevanten Feldinformationen und steuert
Workflows und Sichtbarkeiten.
reagiert werden.
• Für die Adaption und Erweiterung bestehende Anwendungen und Komponenten Die Funktionalität von Backend-Systemen, die u. U. größeren Änderungen unterliegt,
sollte man das Extensibility-Konzept89 von UI5 anwenden. sollte nicht direkt nach außen exponiert werden. Das Ziel ist, mittels APIs verschie-
densten Konsumenten stabile Zugriffspunkte auf die Systeme anzubieten (siehe API
• Für das Theming wird i.d.R. der UI Theme Designer verwendet, der auf allen Economy 90).
unterstützten Systemen vorhanden ist. I.d.R. basiert ein eigener Theme auf dem
SAP BlueCrystal Theme. Seit SAPUI5 1.38 wird an dem neuen Belize Theme in Das Hauptanwendungsgebiet für den SAP Gateway ist die User-Interface-Integration.
zwei Ausprägungen gearbeitet, der das neue Design von SAP Fiori 2.0 abbilden Typische Konsumenten sind Websites, native Mobile Apps, Web Apps auf Ja-
soll. Der Belize Theme wird mit Version 1.40.x der neue Standard Theme und va-Script-Basis (siehe Fiori und UI5) oder auch Anwendungen einer Cloud-Plattform.
ersetzt BlueCrystal. Während bisher in der SAP-Entwicklung meist RFC-basierte Technologien eingesetzt
wurden, dominieren für die o.g. Anwendungsszenarien RESTful Services, meist
kombiniert mit dem OData-Protokoll.
• S AP Fiori Design Guidelines Das OData-Protokoll ist ein Datenaustauschstandard für das Web, der volle CRUDQ-
Funktionalität (Create, Read, Update, Delete, Query) besitzt. Daher wird es auch als
• SAP User Experience Community ODBC für das Web bezeichnet. OData basiert auf dem Entity Data Model, das jede
modellierte Entität (Objekt) sowie deren Beziehungen untereinander darstellt.
• SAP Fiori Cloud Demo
Als Datenformat werden JSON (JavaScript Object Notation) sowie ATOM/XML unter-
• SAPUI5 SDK stützt.
• OpenUI5
• openSAP-Kurse
a. Developing Web Apps with SAPUI5
b. Build Your Own SAP Fiori App in the Cloud – 2016 Edition
Der SAP Gateway kann in drei verschiedenen Varianten betrieben werden: BEST PRACTICE
Die Empfehlung ist, die erste Variante (Central Hub Deplo-
10. USER INTERFACE (UI)
RESTful Services sind ein wichtiger Baustein in der Realisierung von stateless Web-
Apps, d.h. SAPUI5-basierten Apps. Hierbei wird im Backend-System kein Zustand der
App bzw. Nutzersession gehalten, sondern es ist immer nur der Zustand der letzten
Kommunikation bekannt. Dies steht im Gegensatz zur klassischen ABAP-Programmie-
rung mit SAP GUI, wo das Backend immer den Zustand der Clients verwaltete (state-
ful-Anwendungen). Das hat Konsequenzen in der Programmierung, da bei Änderungen
von Daten im Umfeld hochfrequentierter, paralleler Zugriffe nicht mehr die klassi-
schen Sperrlogiken verwendet werden können. Weiterhin findet kein Session-Handling
im klassischen Sinne statt, d.h. beim Schließen der Browser-Sitzung ist immer nur der
letzte Zustand nach dem letzten Aufruf eines OData-Services im Backend bekannt.
Wenn Service-Aufrufe idempotent sind, d.h. immer das gleiche Resultat im Backend
hervorrufen (Anlage, Löschen), gibt es keine Probleme. Schwierig wird es bei Ände-
rungen, da Sperren nur solange gesetzt werden sollten, wie der OData-Aufruf im
91
SAP Help: SAP Gateway Deployment Optionen 92
SCN SAP Gateway Deployment Options in a nutshell
Änderer gewinnt, bei weiteren Aufrufern dann nur ein Refresh der Web-App mit der • Navigationseigenschaften: Sollten bei Relation 1 den Entitätstypen bzw. bei
Änderung erfolgt. Für kritischere Schnittstellen, in denen die Datensynchronisierung Relation N die Entitätsmenge95 verwenden.
zwischen Backend und dem API-Konsumenten eine große Rolle spielt, ist die
ETag-Funktionalität93 des Gateway zu empfehlen. Damit kann die Aktualität der Daten Service-Implementierung
in der Anwendung kontrolliert und entsprechend darauf reagiert werden. Nichtsdesto-
trotz gibt es Möglichkeiten klassische Sperrkonzepte94 weiterhin zu verwenden. Bei der Implementierung sollten die gängigen ABAP Objects-Richtlinien und -Namens-
Hierfür sollte man allerdings einen höheren Entwicklungsaufwand einplanen. Weiter- konventionen angewandt werden.
hin können Konzepte herangezogen werden, wie man sie bspw. aus der IDoc-Eingangs-
verarbeitung kennt. Bei Verwendung des Gateway Service Builders ist zu beachten, dass die generierten
Klassen nur die ersten 20 Zeichen des Gateway-Projektnamens verwenden. Idealer-
Bei der Entwicklung mit dem SAP Gateway werden meist drei Phasen unterschieden. weise sollte der Projektname entweder so gewählt werden, dass die ersten 20 Zeichen
Anhand dieser Phasen werden Vorschläge für Namenskonventionen sowie Best bereits eine korrekte Service-Identifizierung erlauben, oder der Name muss für die zu
Practices dargestellt. Für die Entwicklung von OData-Services bietet SAP den Gateway generierenden Klassen angepasst werden. Ansonsten wird automatisch ein Zähler an
Service Builder an (Transaktion SEGW). die generierten Klassen (Model Provider Class, Data Provider Class) angehängt, was
die Identifizierung der Klassen bei der Entwicklung erschwert.
OData-Modellierung
Service-Konfiguration
In Entwicklungsprojekten kommt dem API-Design eine wichtige Rolle zu. Hier hat man
einen klassischen Zielkonflikt zwischen Wiederverwendbarkeit der APIs und dem Der externe Servicename sollte Rückschluss auf die Funktionalität geben.
schnellen, möglichst effizienten Verfügbarmachen der Daten. Auf keinen Fall sollte Vorschläge zur Namenskonvention:
man einfach das Interface von (Standard-)Funktionsbausteinen 1:1 exponieren. Besser
geeignet ist bspw. die Kapselung der Funktionalität durch Wrapper-Funktionsbaustei- • Technischer Servicename:
ne. Das API-Design sollte von den Anforderungen des API-Konsumenten (z.B. einer
SAPUI5-Web-App) getrieben sein. • Z + <externer Servicename>
Für die OData-Modellierung empfehlen wir daher die folgenden Hinweise zu beachten: • Der _SRV Suffix wird automatisch seitens SAP angehangen.
• Entitätstypen: Entitäten sollten auf den Anwendungsfall zugeschnitten werden • Externer Servicename:
und nicht vom zugrundeliegenden Datenbankmodell getrieben sein. Der Anwen-
dungsfall sollte sich im Entitätsnamen widerspiegeln. • Namespace: /<Kunden Namespace>/ (falls Kundennamesraum verwendet wird,
ansonsten Z*)
• Komplexe Typen: Dienen der Strukturierung von Entitäten.
• Optional: GW_* als Präfix oder Infix erlaubt eine einfache Zuordnung als Gate-
• Entitätsmengen: Gruppe eines Entitätstyps, SAP schlägt Suffix-Set vor, alternativ way-Service
die Mehrzahl einer Entität.
• System-Alias: Da System-Aliase transportiert werden können, ist die Verwen-
dung des Alias-Namen als Landschaftsnamen zu empfehlen.
Der folgende Abschnitt enthält einige Leitlinien, die in der Entwicklung mit SAP • TLS-Nutzung ist verpflichtend (HTTPS)
Gateway zu beachten sind. Bei einigen Punkten wird entsprechend auf weiterführende
10. USER INTERFACE (UI)
Quellen verwiesen. • Bei Verwendung des SAP Gateway als Hub sollte eine Vertrauensbeziehung99
(Trusted-RFC-Verbindung) zwischen dem Gateway und dem gerufenen Ba-
OData/ Funktionalität ckend-System bestehen.
• Eine gute Übersicht über OData Best Practices96 wird auf SAP-Help angeboten. • Der SAP-NetWeaver-ABAP-Applikationsserver unterstützt unterschiedliche
Authentifizierungsmethoden, die in SAP Gateway genutzt werden können.
• Bei der OData-Service-Entwicklung sollte dem „Separations of Concerns“ Abhängig vom Szenario (Desktop-Anwendungen, Web-Anwendungen, …) werden
Designprinzip gefolgt werden. Business-Logik gehört ins Backend, die Ser- unterschiedliche Methoden empfohlen (Kerberos, SAML 2.0, …) empfohlen.100
vice-Implementierung sollte sich auf „Glue Code“ beschränken.
• Bei Verwendung mehrerer Backend-Systeme innerhalb einer SAPUI5 Web App ist
die Multi-Origin-Composition (MOC)-Funktionalität empfehlenswert.
Performance
• Statt vieler paralleler Aufrufe sollten $batch und $expand98 genutzt werden.
• OData bietet mit der $select-Option eine Möglichkeit zum Einschränken der zu
übertragenden Daten. Generell sollten immer nur so wenige Daten wie notwendig
übertragen werden.
Leiter Anwendungsentwicklung & Beratung, FACTUR Billing Solutions GmbH Head of Software Engineering, Miele & Cie. KG
Dr. Christian Drumm arbeitet seit 2004 im SAP-Umfeld. Nach seiner Zeit bei SAP-Re- Martin Hoffmann ist seit 1987 im Entwicklungs-nahen Umfeld tätig und konnte
search arbeitet er in verschiedenen Rollen (Entwickler, Projektleiter, Architekt) in der Erfahrungen als Entwickler und in verschiedenen leitenden Positionen im Entwick-
Beratung mit den Schwerpunkten SAP CRM und SAP IS-U. Seit 2013 leitet er die lungsumfeld sammeln. Seit 2007 verantwortet er bei Miele den Bereich Software-En-
Abteilung Anwendungsentwicklung und Beratung der FACTUR Billing Solutions GmbH. gineering.
Interessen der Kunden und Partner in Zusammenarbeit mit der SAP ein.
Holger Schäfer
Business Unit Manager, UNIORG Solutions GmbH
Holger Schäfer ist seit 1999 im SAP-Umfeld in den Schwerpunktthemen User Interfa-
ces, Integration, HANA/HCP und E-Commerce tätig. Er engagiert sich in der Arbeits-
gruppe UI-Technologien und in der OpenUI5 Community. Seit 2010 verantwortet er die
strategische Geschäftsfeldentwicklung im Bereich neuer SAP-Technologien.
Denny Schreber
Senior Solution Architect, cbs Corporate Business Solutions Unternehmensberatung
GmbH
Denny Schreber arbeitet seit 2007 in SAP-nahen Technologiethemen. Sein Schwer-
punkt liegt dabei auf Mobile & UI-Technologien sowie Integrationsthemen. Zuvor war
er im Bereich der Java-Software-Entwicklung tätig. Seit 2015 ist er stellvertretender
Sprecher in der DSAG-AG UI-Technologien.
Andreas Wiegenstein
Chief Technology Officer (CTO) und Mitgründer, Virtual Forge GmbH
Andreas Wiegenstein arbeitet seit 2002 im Bereich SAP-Security mit dem Schwer-
punkt Penetrationstests. Er ist Co-Autor des Buches „Sichere ABAP-Programmie-
rung“ (SAP Press) und hält regelmäßig Vorträge zum Thema SAP-Sicherheit auf
internationalen Konferenzen, wie z.B. Troopers, RSA, Black Hat, BIZEC, IT Defense,
Deep Sec, Hack In The Box, SAP TechEd und auf DSAG-Veranstaltungen.
Bärbel Winkler
Systemanalystin SAP-Basis/Programmierung, Alfred Kärcher GmbH & Co. KG
Bärbel Winkler arbeitet seit 2000 im SAP-Umfeld in der ABAP-Programmierung und
Projektarbeit und ist seit 2011 bei der Alfred Kärcher GmbH & Co. KG. in kundeneigene
Entwicklungen und deren Koordination eingebunden. Zu ihren Aufgaben gehört die
regelmäßige Aktualisierung der Entwicklungsrichtlinien, die Beurteilung und Schät-
zung eingehender Entwicklungsanforderungen sowie die Begleitung der Umsetzung
bei extern durchgeführter Programmierung.
Namenskonventionen, bei denen der Datentyp als Präfix zum Objektnamen vorge- • Das Erlernen, Kontrollieren und Aktualisieren der Konventionen ist mit zusätzli-
schrieben wird, fordern in der Regel auch noch weitere technische, fachliche oder chem Aufwand verbunden.
organisatorische Kategorien, die ebenfalls in den Präfix aufgenommen werden sollen.
Insofern könnte man von „umfassenden“ Namenskonvention sprechen. Es besteht eine Vorteile von minimalen Namenskonventionen
Verwandtschaft zu der bei Microsoft erfundenen Ungarischen Notation101.
• Mehr Platz und Aufmerksamkeit für den sprechenden Namen, sowohl beim
Bei genauer Betrachtung wird die umfassende Namenskonvention in der Regel nur Schreiben als auch beim Lesen.
halbherzig umgesetzt, da die Konvention bei geschachtelten Datentypen nur auf der
ersten Ebene stattfindet (LS_CUSTOMER-PARTNER-HISTORY statt LS_CUSTOMER-S_ • keine redundanten Informationen (Datentyp lässt sich durch Vorwärtsnavigation /
PARTNER-T_HISTORY). F2 (ADT) ermitteln, Herkunftssystem steht im Objektkatalog, die Zuordnung zur
Anwendungshierarchie lässt sich über das Paket ableiten, usw.).
Im Gegensatz dazu steht die „minimale“ Namenskonvention, wo bisweilen nur die
Präfixe zur Unterscheidung von Parametern (I_ für IMPORTING, E_ für EXPORTING, Die erste Version dieses Leitfadens verfolgte eine Variante der umfassenden Namens-
usw.) vorgeschrieben werden, und stattdessen der Fokus auf einem sinnvollen konvention, von der wir uns aufgrund unserer eigenen Erfahrungen, sowie dem
„sprechenden“ Namen liegt. Für diese Art der Namenskonvention sprechen sich unter aktuellen Diskusionsstand in der Fachliteratur und im SCN (siehe Anhang A.3) distan-
anderem die Autoren der „ABAP-Programmierrichtlinien“ (jetzt Teil der F1-Hilfe) aus. zieren.
Vorteile von umfassenden Namenskonventionen Im Folgenden finden Sie ein Beispiel, wie eine eher schlanke Namenskonvention
aussehen kann.
• Beim Lesen des Quellcodes ist der Objekttyp sofort ersichtlich, ohne dass z.B. in
den DDIC navigiert werden muss. Allgemeine Hinweise:
• Ungewollte Verschattungen (z.B. Typen in Methoden gegenüber Typen in der • Objekte im ABAP Dictionary haben unterschiedliche Begrenzungen in der Anzahl
Klasse) können besser vermieden werden. zur Verfügung stehender Zeichen. Bei der Benennung der Objekte ist dies zu
berücksichtigen.
• Objektnamen wirken einheitlich und ordentlich durch den einheitlichen Präfix
(auch wenn der sprechende Teil der Namen vielleicht schlecht gewählt ist). • Nachfolgend wird der Kundennamensraum Y… verwendet. Stattdessen kann, wie
in Kapitel 2 beschrieben, alternativ der Namensraum Z… oder ein kundeneigener
Nachteile Namensraum /…/ verwendet werden.
• eine vollständige und eindeutige Systematik ist umfassend und komplex, siehe
die Diskussion im Buch „ABAP-Programmierrichtlinien“.
101 https://de.wikipedia.org/wiki/Ungarische_Notation
Anforderungen konzentrieren kann und keine Aufwände in eine individuelle Vermei- Technisches Objektkürzel für
dung von Namensüberlagerung investieren muss. Des Weiteren dient die Konvention [ Typinformation ] einen bestimmten Typ. Nicht CL = Globale Klasse
im Quellcode als Hilfestellung für den Einsatz der zu dem Objekt passenden Operato- für jedes Objekt notwendig.
ren (Beispiel INSERT statt APPEND beim Anhängen einer neuen Zeile in eine sortierte Zusammenfassendes
Tabelle). Repository-Objekte unterscheiden sich in den meisten Fällen102 durch ihren Arbeitsgebiet, ein Produkt
Objektkatalogeintrag voneinander, weshalb aus technischer Sicht bei der Namensver- oder die Zuordnung zur
gabe nur sehr wenigen Konflikte entstehen können. Daneben werden für diverse Anwendungshierarchie bzw. Anwendungshierarchie SD:
[ Kontext ]
Objekte, wie z.B. Ausnahmeklassen (Präfix = CX) oder Sperrobjekte (Präfix = E), Softwarekomponente. In der Sales & Distribution
Namenskonventionen durch die Entwicklungsumgebung erzwungen103. Regel wird der Kontext über
ein Struktur- oder Hauptpa-
ket gebildet.
Die nachfolgenden Konventionen erweitern die Vorgaben aus oben genanntem Hinweis.
Das Ziel der Richtlinien ist die Bereitstellung praxistauglicher, pragmatischer Regeln Informationen über ein
die auf Überregulierung weitestgehend verzichten. Hierzu werden nur für konkurrie- Domänenobjekt, dessen
Absicht oder bekannte
rende Objekte Namenskonventionen festgelegt, die sich am SAP-Standard orientieren
[ Semantische Information ] Anwendungsmuster basie- OPEN_ITEMS_LIST
(z.B. Präfixkonventionen für Typinformationen aus dem BOPF-Framework). rend auf einer allgegenwärti-
gen, verständlichen Sprache
Die Namenskonventionen setzen sich aus folgenden Bereichen zusammen und werden (s. Kapitel 2.3).
zum Teil durch Unterstriche voneinander getrennt: Anwendungen:
Ein Muster ist ein optionaler Worklist / Chart / Overview
Teil der semantischen
Information und beschreibt Design:
[ Muster ] eine etablierte Vorgehens- Master / Detail
weise im Rahmen des
Designs / der Programmie- Implementierung103
rung. Factory / Data Access Object /
Gateway
102 Eine Ausnahme sind Tabellen und Strukturen. Diese haben beide den TADIR-Objekttyp TABL. 104 Da im Rahmen der Implementierung häufig mehrere Muster gleichzeitig zum Einsatz kommen, sollten die Details über die eingesetz-
103 Weitere Details zu den betroffenen Objekten sind im SAP-Hinweis 16466 hinterlegt ten Muster besser im Quellcode und nicht im Objejktnamen kommentiert werden.
Namensbildung [ Einzelnes Substantiv | Zusammengesetzte Substantive ] [ Abkürzung des übergeordneten Paketes ] [ semantische
Namensbildung
Information ]
Anwendungshierarchie / Softwarekomponente:
- Y_COMPUTER_AIDED_SELLINGS (Hauptpaket)
- Y_DEVELOPMENT_FOUNDATION (Strukturpaket)
- Y_CAS_BUSINESS_OBJECTS (Entwicklungspaket)
- Y_ERP_CENTRAL_APPLICATIONS (Strukturpaket)
Beispiele - Y_CAS_COMMON (Entwicklungspaket)
- Y_ACCOUNTING (Strukturpaket)
- Y_CAS_CORE (Entwicklungspaket)
- Y_...
- Y_CAS_CONFIGURATION (Entwicklungspaket)
- Y_LOGISTICS (Strukturpaket)
- Y_LOGISTICS_EXECUTION (Hauptpaket)
Paketschnittstellen:
- Y_PROCUREMENT (Hauptpaket)
Die Bezeichnung von Paketschnittstellen dient der Bekannt-
Beispiele - Y_SALES (Hauptpaket) Typ machung einer Absichtserklärung, wie mit bestimmten, über
-
Y_COMPUTER_AIDED_SELLINGS (Hauptpaket) die Paketschnittstelle propagierten Objekten, umgegangen
werden soll.
- Y_CAS_COMMON (Entwicklungspaket)
[ Paketbezeichnung ] [ [ Sichtbarkeit ] | [ Zugriffsart ] | [
- Y_NETWEAVER_PLATFORM (Strukturpaket) Namensbildung
Konsument ] ]
- Y_SAP_DELIVERABLES (Strukturpaket) - Y_CAS_SALES_ACTIVITY_PUBLIC
- Y_RAPID_DEPLOYMENT_SOLUTIONS (Hauptpaket) Beispiele - Y_CAS_CONFIGURATION_READ
- Y_SAP_BEST_PRACTICES (Hauptpaket) - Y_CAS_CONFIGURATION_WRITE
- Y_SAP_NOTES (Hauptpaket)
- Y_SNOTE_2294645 (Entwicklungspaket)
Elementare Datentypen:
Datenelemente und Domänen beschreiben die technischen
und semantischen Eigenschaften eines Daten- oder Referenz-
Typ
typen. Da sie sich durch ihren Objektkatalogeintrag technisch
voneinander unterscheiden, ist die Verwendung von identi-
schen Namen möglich.
Namensbildung [ Einzelnes Substantiv | Zusammengesetzte Substantive ]
Y_CAS_ACTION_IDENTIFIER (Domäne)
Beispiele
Y_CAS_ACTION_IDENTIFIER (Datenelement)
Strukturen teilen sich historisch bedingt den gleichen Objektkatalogeintrag mit transparenten und ein CDS-Datenbank-View. Um CDS-Datenbank-Views von normalen Datenbank-Views zu
Tabellen. Daher ist es notwendig, die beiden Typen zwingend per technischem Präfix vonein- unterscheiden, empfehlen wir den SAP Standard Beispielen104 zu folgen und CDS-Daten-
ander zu unterscheiden. bank-Views mit dem Präfix SQL zu kennzeichnen.
Beispiel: Beispiel:
YS_CAS_ACTION YSQL_CAS_MASTER (CDS-Datenbank-View)
YS_CAS_MASTER_LINE
Transparente Tabellen:
In der Regel sollte die Präfixbezeichnung D für Transparente Tabellen ausreichen. Falls eine
weitere Unterteilung notwendig ist, empfehlen wir auf Grund der Längenbeschränkung von 16
A.1.3 CONTAINER FÜR QUELLTEXTOBJEKTE
Zeichen das Präfix um die technische Auslieferungsklasse der Tabelle zu erweitern bzw. T für
die Kennzeichnung von Texttabellen zu verwenden.
Ausführbare Anwendungen
Beispiel: Aus dem Namen einer Anwendung sollte sich direkt ableiten
lassen, was die Anwendung leistet, welches Geschäftsobjekt
YD_CAS_CONFIG
im Fokus steht und ggf. mit welchem Verfahren die Anwen-
YDC_CAS_ACTIONS (Konfigurationstabelle) Typ
dung zu bedienen ist (Worklist, Wizard, …). Wir empfehlen bei
YDT_CAS_ACTIONS (Texttabelle) der Namensvergabe bekannte Bedienverfahren aus dem
Floorplan Manager105 bzw. aus den Fiori Design Guidelines106
YDA_CAS_MASTER (Stamm- und Bewegungsdaten) zu adaptieren.
YDL_CAS_FILEINPT (Temporäre Daten) [ Einzelnes Substantiv | Zusammengesetzte Substantive ]
Namensbildung
Views: [ Muster ]
Falls die Präfixbezeichnung V für Views nicht ausreicht, empfehlen wir eine weitere Untertei- Y_CAS_CUSTOMER_VISIT_PLANNER
lung auf Basis des View-Typen einzuführen.
Beispiele Y_CAS_SALES_ACTIVITY_WORKLIST
Beispiel:
Y_CAS_DATA_MIGRATION_WIZARD
YV_CAS_CONFIG
YVC_CAS_ACTIONS (Pflege-View)
YVH_CAS_ACTIONS (Help-View)
YVD_CAS_MASTER (Datenbank-View)
YVP_CAS_MASTER (Projektions-View)
Tabellentypen:
Ist die Anlage mehrerer Tabellentypen für denselben Zeilentyp notwendig, empfehlen wir die
Zugriffsart in die Präfixbezeichnung aufzunehmen und die semantische Bezeichnung um
Informationen über die Schlüsseldefinition zu ergänzen. Anderenfalls ist die Präfixbezeich-
nung T ausreichend.
108
SAP-Help: „Naming Conventions in ABAP Objects“
CONSTANTS: Für lokale Deklarationen in Methoden kann unter folgender Bedingung die Präfixkon-
vention l_ verwendet werden:
BEGIN OF partner_function,
key_account_manager TYPE tpar-parvw VALUE ’KA‘, • Die lokale Deklaration verschattet ein statisches Klassenattribut.
...
END OF partner_function. • Die Methode muss auf das statische Klassenattribut zugreifen.
ENDCLASS.
• Der Klassenname ist sehr lang.
A.2.2 SICHTBARKEIT
Unbeabsichtigte Verschattung lokaler Deklarationen lässt sich durch die Definition von
Präfixbezeichnern für Signaturen und globale Variablen / Typen vermeiden. Aus
technischer Sicht ist die Einführung weiterer Präfixkonventionen nicht notwendig.
Für Anhänger und Verfechter einer umfangreichen Namenskonvention verweisen wir A.4.1 KUNDENNAMENSRÄUME
aus Gründen der Einheitlichkeit auf beigefügten de-facto-Standard für umfangreiche
Namenskonventionen aus der SCN-Community: Sollten Sie mehrere Systemlandschaften im Einsatz haben, zwischen denen Entwick-
http://scn.sap.com/people/uwe.schieferstein/blog/2009/08/30/nomen-est-omen-- lungen hin und her transportiert werden, empfiehlt sich die Einbindung der (hoffentlich
ANHANG A
abap-naming-conventions eindeutigen) System-ID in den Präfixnamensraum. Hierdurch ersparen Sie sich evtl.
auftretende Namenskonflikte zwischen den jeweiligen Systemen.
Eine weitere, etwas reduzierte Variante finden Sie hier:
http://scn.sap.com/community/abap/blog/2016/02/05/fanning-the-flames-prefixing- Beispiele für System ID = D01:
variableattribute-names
• YD01*
Die entsprechenden Gegenbewegungen zu dem Thema möchten wir Ihnen natürlich
nicht vorenthalten: • /ZYXD01/*
http://scn.sap.com/community/abap/blog/2013/05/23/abap-code-naming-conventions-
-a-rant
• [ Releasestand ]*
109
SAP-Help-Suche „Classification Toolset“
A.5 FORMULARE
Adobe Interactive Forms – Interfaces
Typ Formularschnittstellen sollten sich von den regulären BEST PRACTICE
Formularen durch Hinzufügen eines Suffixes hervorheben.
Auf Grund der eingeschränkten Funktionalität empfehlen
Namensbildung [ Formularname ] [ Interfacekürzel ] wir die Verwendung der Tabellenpflegeviews V_TRESN,
Beispiele Y_CAS_SALES_ACTIVITY_IF bzw. CTSRESNAME sorgfältig zu überdenken und eher
nicht zu verwenden.
Die Pflege einzelner Objekttypen pro Paket ist sehr zeitintensiv und mit entsprechend
hohem Änderungsaufwand verbunden. Eine generische Pflege für alle Objekte eines
einzelnen Pakets funktioniert nur bei reservierten Kundennamensräumen und ist
deshalb nicht für alle Kunden relevant. Ein zusätzliches Manko besteht darin, dass die
Konventionen keine „Überlappung“ der Präfixe für verschiedene Pakete und deren
enthaltenen Elemente zulassen. Es ist beispielsweise nicht möglich, das Präfix
/ZYX/123 für das Paket /ZYX/SOME_PACKAGE und parallel das Präfix /ZYX/1234 für
das Paket /ZYX/SOME_OTHER_PACKAGE einzusetzen, da das zweite Präfix eine
Untermenge des ersten Präfix darstellt. Eine Gewährleistung, dass alle im Paket
enthaltene Elemente mit dem definierten Präfix beginnen müssen, ist nicht sicherge-
stellt, da Objekte ohne definiertes V_TRESN-Präfix problemlos dem Paket zugeordnet
werden können.
110 Vgl. Definition von Namenskonventionen (SAP-Bibliothek – Softwarelogistik) 111 SCN-Blog: „News about ABAP Package Concept: Naming Conventions for Package Hierarchies“
Sie finden die Werkzeuge für die Pflege der Transaktion ABAPDOCU in dem Paket
SABAPDOCU. Dort enthalten ist das Programm ABAP_DOCU_TREE_MAINTAIN, mit
dessen Hilfe Sie die einzelnen Artikel in den Navigationsbaum einhängen und editieren
können. Beim Speichern des Navigationsbaums durchläuft das Programm den
gleichnamigen Funktionsbaustein ABAP_DOCU_TREE_MAINTAIN, in dessen lokaler
Klasse TREE_MAINTAIN eine Methode EDIT_STORE_TO_DATABASE gerufen wird, die
zu Beginn über eine Konstante auf ein zentrales SAP-Dokumentationssystem verprobt.
Nach Umschiffung der beiden Proben können Sie den geänderten Navigationsbaum
speichern und die Änderungen in andere Systeme transportieren.
HINWEIS:
Wir weisen ausdrücklich darauf hin, dass das vorliegende Dokument nicht jeglichen
IMPRESSUM
Jedwede unerlaubte Verwendung ist nicht gestattet. Dies gilt insbesondere für die
Vervielfältigung, Bearbeitung, Verbreitung, Übersetzung oder die Verwendung in
elektronischen Systemen/digitalen Medien.
WEITERE INFORMATIONEN:
Arbeitskreis Development, www.dsag.de/ak-development