55
Clean Code in ABAP Sauberer Code in ABAP

Clean code in ABAP

Embed Size (px)

Citation preview

Page 1: Clean code in ABAP

Clean Code in ABAPSauberer Code in ABAP

Page 2: Clean code in ABAP

Föß Clean Code in ABAP

Johann FößleitnerSenior Consultant at Cadaxo

eMail: [email protected]: @foessleitnerj

Beratungsschwerpunkte

• Konzeption & Management von Entwicklungsprojekten• Qualitymanagement & Performanceoptimierung• Webanwendungen auf Basis von SAPUI5, BSP oder Web Dynpro

for ABAP• SAP CRM Entwicklungen (WebUI, Middleware, … )

Page 3: Clean code in ABAP

Clean Code in ABAP

6. August 1990

Page 4: Clean code in ABAP

Clean Code in ABAP

Clean Code

Page 6: Clean code in ABAP

Clean Code in ABAP

Umfrage Clean Code

Page 7: Clean code in ABAP

Clean Code in ABAP

Definition von Clean Code

Page 8: Clean code in ABAP

Clean Code in ABAP

“Clean code is simple and direct. Clean codereads like well-written prose.”

Grady Booch, Mitbegründer von UML

Page 9: Clean code in ABAP

Clean Code in ABAP

“Any fool can write code that a computer can understand. Good programmers write code that

humans can understand.” Martin Fowler, Pionier der agilen Softwareentwicklung

Page 10: Clean code in ABAP

Clean Code in ABAP

“You know you are working on clean code when each routine you read turns out to be pretty much what you

expected.” Ward Cunningham, Extreme Programming Pionier und „Erfinder“ von Wiki

Page 11: Clean code in ABAP

Clean Code in ABAP

Funktioniert korrekt

Lesbar wie ein Buch

Einfach und direkt

Effizient

Einfach erweiterbar

Definition von Clean Code

Page 12: Clean code in ABAP

Clean Code in ABAP

Wie immer, geht‘s um

Schlechter Code kostet Geld!

Page 13: Clean code in ABAP

Clean Code in ABAP

4. Juni 1996

Explosion Ariane 5◦ 36,7 Sekunden nach dem Start◦ Ursache

Arithmetischer Überlauf bei der Umwandlung einer 64-Bit-Gleitkomma-Zahl in eine 16-Bit-Ganzzahl – der Wert der horizontalen Geschwindigkeit.

Lenksystem brach zusammen und löste eine Selbstzerstörung aus

◦ Hintergrund Software stammt von Ariane 4. Ariane 5 flog jedoch

schneller

Schaden ca. 500 Millionen Dollar für Rakete und 4 Satelliten

Page 14: Clean code in ABAP

Clean Code in ABAP

TOTER CODEVöllig unnütz

KOMMENTAREMeist schlecht

DUPLICATESDon‘t repeat yourself

KOMPLEXITÄTSchwierig zu verstehen

ZU GROßE EINHEITENKleiner Einheiten sind besser zu verstehen

NAMENSGEBUNGZweckbeschreibende Namen wählen

Schlechter Code - Beispiele

Page 15: Clean code in ABAP

Clean Code in ABAP

Verständlicher Code ist enorm wichtig◦ Überwiegende Kosten für Software sind

Wartungskosten

◦ Code wird daher überwiegend gelesen

◦ Je unverständlicher der Code, desto größer die Gefahr, dass er nicht ausreichend verstanden wird

Code wird meist gelesen

Page 16: Clean code in ABAP

Clean Code in ABAP

Page 17: Clean code in ABAP

Clean Code in ABAP

Warum erstellen wir überhaupt schlechten Code?

Page 18: Clean code in ABAP

Namensgebung Clean Code in ABAP

Namensgebung◦ Aussagekräftige Namen für Felder, Methoden, Klassen, …

◦ Lange Namen sind nicht schlecht

◦ Namen sollen den Zweck beschreiben (GET_PARTNER)

◦ Verwendet aussprechbare & suchbare Namen

◦ Und bitte, einheitlich in Englisch

MARA-MTART oder BSEG-DMBTR sind keine Vorbilder!

Page 19: Clean code in ABAP

Namensgebung Clean Code in ABAP

Beispiel: Funktionsname ◦ Was könnte bei folgendem Code ausgeführt werden

LR_DATE->ADD( 5 ).

◦ Besser wäre:

LR_DATE->ADDDAYSTO( 5 ) (addiere 5 Tage)

LR_DATE->INCREASEBYDAYS( 5 ) (addiere 5 Tage)

LR_DATE->DAYSSINCE ( 5 ) (gib datum + 5 Tage zurück)

Page 20: Clean code in ABAP

Funktionen Clean Code in ABAP

Funktionen◦ KISS – Keep it simple and stupid

◦ Funktionen sollten genau nur eine Aufgabe erledigen

◦ Minimale Funktionsargumente (Parameter)

Keine FLAGs als Parameter verwenden

◦ Einheitlich klassenbasierte Ausnahmen verwenden

Page 21: Clean code in ABAP

Kommentare Clean Code in ABAP

Kommentare◦ Niemals kommentieren, was der Code macht

◦ Kommentieren warum es so gelöst wurde

Hintergrundinfos

◦ Auskommentiertes Coding entfernen

Jedes SAP System verfügt über eine Versionsverwaltung

◦ Keine redundanten Kommentare

◦ Keine irreführenden Kommentare

Page 22: Clean code in ABAP

Kommentare Clean Code in ABAP

PERFORM BUILD_QUERYTAB IN PROGRAM SAPLADCE

TABLES QUERYPARAMTAB

USING ‘EN‘ “only a dummy caused by this bullshit API

RESULT_FROM

RESULT_TO.

* This is terrible basis function module. :-((

DELETE NPLAN INDEX SY-TABIX.

“ we have to delete the whole fucky bunch of volumes where we

“ were able to insert before (life is terrible)

* 24.01.1989 mit First release

Page 23: Clean code in ABAP

Kommentare Clean Code in ABAP

Beispiel: Redundante Kommentare◦ Oft werden redundante Kommentare eingefügt

◦ Wenn der Code sich selbst ausreichend erklärt, ist ein redundanter Kommentar nur überflüssig, verwirrend, ...

* Lesen aller Felder aus der BUT000

SELECT * FROM BUT000 INTO …

* Verlasse Routine, wenn SY-SUBRC > 0

IF SY-SUBRC > 0.

EXIT.

ENDIF.

Page 24: Clean code in ABAP

Kommentare Clean Code in ABAP

Beispiel: Irreführende Kommentare◦ Irreführende Kommentare bzw. subtile Fehlinformationen sind

schwerer zu lesen als der Code selbst

◦ Unbedingt vermeiden

* Lesen aller Felder aus der BUT000

SELECT PARTNER, NAME1 FROM BUT000 INTO …

* Verlasse Routine, wenn Fehler oder flag = true.

IF SY-SUBRC > 0 AND FLAG = ABAP_TRUE.

EXIT.

ENDIF.

Page 25: Clean code in ABAP

Formatierung Clean Code in ABAP

Formatierung◦ Code muss sauber formatiert sein

◦ Was zusammengehört, vertikal zusammenfassen

◦ Keine horizontale Ausrichtung

◦ Ein unsauber formatierter Code deutet darauf hin, dass der eigentliche Code ebenfalls unsauber ist.

Page 26: Clean code in ABAP

Ausnahmen Clean Code in ABAP

Klassenbasierte Ausnahmen sind besser als Fehlercodes

◦ Fehlercodes führen zu tief verschachtelten Strukturen, der Aufrufer muss den Fehler sofort behandeln

◦ Der Verwendung von Ausnahmen ermöglicht die Trennung von der Fehlerverarbeitung und dem normalen Coding

◦ Catch Bereiche in eigene Methoden auslagern

Page 27: Clean code in ABAP

Ausnahmen Clean Code in ABAP

METHOD main.

TRY.

do_something( ).

do_more( ).

do_the_last_thing( ).

CATCH zcx_an_exception INTO DATA(lr_exception).

handle_exception( lr_exception ).

ENDTRY.

ENDMETHOD.

Erste Anweisung

Letzte Anweisung

AusnahmebehandlungIn eigener Methode

Page 28: Clean code in ABAP

Klassen Clean Code in ABAP

Klassen & Objekte◦ SRP - Single-Responsibility-Prinzip – Eine Verantwortlichkeit je

Klasse

◦ Klein, Klein, Klein – keine Gottklassen erschaffen

◦ Objektorientiert entwickeln und damit Erweiterungen ermöglichen

Es gibt auch Instanzen, Interfaces, Konstruktoren, …

Page 29: Clean code in ABAP

Schlechter Code Clean Code in ABAP

Was hindert uns daran schlechten Code zu verbessern?

Page 30: Clean code in ABAP

Unit Tests Clean Code in ABAP

Unit Tests◦ Mit Unit Tests werden einzelne Units (Methoden,

Funktionbausteine) automatisiert getestet.

◦ Ziel der Unit Tests ist die Isolation aller Parts eines Programmes und die Prüfung ob alles ordnungsgemäß läuft.

ABAP Unit Tests

Page 31: Clean code in ABAP

Unit Tests Clean Code in ABAP

Unit Tests – FIRST Prinzip◦ Fast – Tests sollen schnell sein

◦ Independent – Tests sollen nicht von einander abhängen

◦ Repeatable – Jede Umgebung (Dev, QA, Prod, … )

◦ Self-Validating – der Test wird bestanden oder er scheitert

◦ Timely – Tests müssen rechtzeitig geschrieben werden

Page 32: Clean code in ABAP

Unit Tests Clean Code in ABAP

Page 33: Clean code in ABAP

Unit Tests Clean Code in ABAP

UI Tests

Acceptance Tests

Integration Tests

Unit Tests ABAP Unit

eCATT

Page 34: Clean code in ABAP

Clean Code in ABAP

Umfrage von ABAP Units

Page 35: Clean code in ABAP

Nächste Webinare Clean Code in ABAP

https://www.eventbrite.com/e/tdd-mit-abap-units-tickets-27079167519

Page 36: Clean code in ABAP

Clean Code in ABAP

Tools im SAP bzw. ABAP

Page 37: Clean code in ABAP

Code Inspector Clean Code in ABAP

Der Code Inspector führt verschiedene statische Prüfungen durch◦ Es können einzelne Objekte oder viele Objekte (ein Paket, Z*, … ) geprüft werden

◦ Geprüft wird beispielsweise:

Performancekritische Statements, „totes“ Coding, fehlende Indices bei Datenbankzugriffen, Namenskonventionen, …

◦ Meldungen können mit Pseudokommentaren (z.B. #EC CL_BYPASS) unterdrückt werden.

◦ Transaktionscode: SCI

Page 38: Clean code in ABAP

Coverage Analyzer Clean Code in ABAP

Der Coverage Analyzer ist ein Tool, mit dem die Verarbeitung von ABAPs systemweit analysiert werden kann.◦ Ermittlung von Programmteilen welche selten bzw. nie aufgerufen werden

◦ Ermittlung von Programmteilen welche sehr oft aufgerufen werden und sich daher für performanceverbessernde Aktivitäten eignen könnten

◦ Transaktionscode: SCOV

Page 39: Clean code in ABAP

ABAP for Eclipse Clean Code in ABAP

ABAP in Eclipse

◦ Bietet mehr Möglichkeiten im Bereich Refactoring als SE80

Page 40: Clean code in ABAP

Wie schreibt man sauberen Code? Clean Code in ABAP

Wie schreibt man sauberen Code◦ Zuerst notieren wir unsere Gedanken, ordnen sie bis sie gut

lesbar sind, bis sie logisch und verständlich sind

◦ Dann schreiben wir die Funktion. Zuerst meist eine lange Funktion mit vielen verschachtelten Schleifen, schlechten Namen, Duplizierungen, etc. um eine schnelles Ergebnis zu haben

◦ Und schließlich verfeinern wir den Code, lagern Funktionen aus, ändern die Namen, eliminieren Duplizierungen

◦ Wir säubern unseren Code!

Page 41: Clean code in ABAP

Clean Code in ABAP

Professionell sein

Page 42: Clean code in ABAP

Arbeitsethik Clean Code in ABAP

Lebens-langes

lernen

Praxis

Arbeits-gebiet kennen

Teamwork

Mentoren-arbeit

Identifikation mit der Arbeit

Bescheiden bleiben

Page 43: Clean code in ABAP

Unsere Arbeitsgebiete Clean Code in ABAP

ABAP JSON / XMLJavascript

HTML5

ODataSAP HANA

JQuery CSS Web IDE

ABAP for Eclipse

Web Dynpro for ABAP

Floorplan Manager

SQL Script

CDS Views

SAP Gateway

ABAP Channels

ABAP SQL Expressions SQL Monitor

Code InspectorBOPF

AMDP

SAPUI5

Open SQL

RegexABAP Expressions

BOR Laufzeitanalyse

BRF/BRF+

Shared Objects

BADIs

Switch Framework

Adobe Document Services

BSP

WebServices

Page 44: Clean code in ABAP

Clean Code in ABAP

Praktizieren & Üben

Page 45: Clean code in ABAP

Praktizieren & Üben Clean Code in ABAP

Übung macht den Meister◦ Damit ein Musiker bei einem Konzert begeistern kann, muss er

üben.

◦ Damit ein Sportler erfolgreich ist, muss er üben.

◦ Damit ein Softwareentwickler perfekte Lösungen abliefert, muss er üben.

Die geübten Skills sollten außerhalb des normalen Jobs sein

Skills sollen verfeinert bzw. erweitert werden

Es geht schlichtweg darum, das Gehirn zu trainieren

Beispiele in ABAP◦ Dec/Bin/Hex Umrechnung; Quicksort ausprogrammieren; eMail Validierung mit Regex, …

Page 46: Clean code in ABAP

Praktizieren & Üben Clean Code in ABAP

Picture by Wang Ming [GFDL (http://www.gnu.org/copyleft/fdl.html) or CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0/)], via Wikimedia Commons from Wikimedia Commons

Page 47: Clean code in ABAP

Praktizieren & Üben Clean Code in ABAP

Kata – Die Perfektion ist das Ziel◦ Ein Programmier-Kata ist eine festgelegte Gruppe von

choreographierten Tasteneingaben/Mausbewegungen

◦ Man löst nicht wirklich ein Problem, man kennt die Lösung bereits

◦ Man übt die Bewegungen und Entscheidungen die zur Lösung gehören

http://codekata.com/

http://katas.softwarecraftsmanship.org/

Page 48: Clean code in ABAP

Praktizieren & Üben Clean Code in ABAP

Waza – Paarweise üben◦ Entwickler A schreibt einen ABAP Unit Test

◦ Entwickler B implementiert die Methode, bis der Test bestanden wird

◦ Entwickler A kann für den Test z.B. auch min. Geschwindigkeit oder den max. Speicherverbrauch vorgeben.

Page 49: Clean code in ABAP

Praktizieren & Üben Clean Code in ABAP

Randori – Übungen für‘s Team◦ Editor wird an die Wand projiziert

◦ Entwickler A schreibt einen ABAP Unit Test

◦ Entwickler B implementiert die Methode, bis der Test bestanden wird

◦ Entwickler B schreibt einen ABAP Unit Test

◦ Entwickler C implementiert die Methode, bis der Test bestanden wird

◦ …

Page 50: Clean code in ABAP

Praktizieren & Üben Clean Code in ABAP

Page 51: Clean code in ABAP

Praktizieren & Üben Clean Code in ABAP

Ethisch handeln◦ Professionelle Entwickler üben in ihrer Freizeit

◦ Auf die eine oder andere Weise üben und praktizieren alle Profis Ärzte, Musiker, Sportler, …

◦ Da wir in der Freizeit üben, können wir auch in anderen Programmiersprachen üben

◦ Es liegt in unserer eigenen Verantwortung unsere Skills zu schärfen, es ist nicht die Verantwortung unserer Auftrag- bzw. Arbeitgeber

Page 52: Clean code in ABAP

Nächste Webinare Clean Code in ABAP

https://www.eventbrite.com/e/tdd-mit-abap-units-tickets-27079167519

Page 54: Clean code in ABAP

If you want to stay in touch …

https://twitter.com/foessleitnerj

https://www.linkedin.com/in/johann-fößleitner-a9851b2a

https://www.xing.com/profile/johann_foessleitner

[email protected]

See you again!Thank you for participating!

Page 55: Clean code in ABAP

http://com.slideshare.net/cadaxogmbh

https://twitter.com/cadaxo

https://www.linkedin.com/company/cadaxo-gmbh

http://www.youtube.com/CadaxoGmbH

https://www.facebook.com/CadaxoGmbH

https://www.xing.com/companies/cadaxogmbhCadaxo GmbHStubenring 18/5a| 1010 Vienna, Austria

[email protected]