Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu...

49
Herzlich Willkommen! Gleich geht‘s los !

Transcript of Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu...

Page 1: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

…speaker‘s ego still ramping up…

Herzlich Willkommen!

Waiting for listener connection …Spannend, nich‘ ? …..…flipping default template layoutGleich geht‘s los !

Page 2: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Auf dem Weg zu Unwartbarkeit

Benjamin SchmidSoftware Architect

Oliver PehnkeSoftware Engineer

und

Die besten Strategien für den sicheren Erfolg!

Page 3: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Das große Stück

Anteil Wartungskosten in Softwareprojekten

• Projektlaufzeit überdauert oft Projekt-Mitarbeiter

• Wartbarkeit entscheidend für langfristigen Projekterfolg

Wart ung & VerbesserungEnt w icklung

~67% bis >90% der Gesamtkosten

Quellen:Zelkowitz et al. (1970)

”Principles of Software Engineering and Design”Moad, J. (1990)

“Maintaining the competitive edge”

Page 4: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Die Spielregeln für Projekte

1. Das Spiel kann anhand der Prozess-Anleitung nicht gewonnen werden – Improvisation erforderlich

2. Die fixen Termine und Budgetssind zu Beginn der Spielanleitung zu entnehmen

3. Nicht die Fachlichkeit, sondern der Spielleiter entscheidet

4. Wenn‘s kein Spass macht, machs‘d was falsch!

Page 5: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Strategie #1:Visionen einbringen

Analyse- und Entscheidung

Page 6: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Analyse: Fundament der Wartbarkeit

Die Herausforderung:

• vollständig und präzise

• sind nicht einfach(auch graphisch)

Die Probleme:

• Kommunikation– Kunde, Analyst, Entwickler

haben eigene Vorstellungen

• Konkretisierungen nötig

Gute Spezifikationen

Analyseergebnis ist die Basis von Allem

Klarheit & Eindeutigkeit reduzieren die Risiken

Page 7: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Graphische Spezfikationen

Graphische Spezifizikationen mal klar & eindeutig

Page 8: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

…und viel muß es sein

Page 9: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Die Wahl der richtigen WaffenStrategie #2:

Technologien und Frameworks

Page 10: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Tech.Lösungen für nicht-technische Probleme

Einbinden von Hoffnungen

SOA„Wieder verwendbarer Baustein“

JUnit„Applikation ist getestet“

Groovy„Wir sind agil & flexibel“

MochiKit„Es ist Web 2.0 und komfortabel“

CompanyFramework.jar„ManfestierterUnternehmensstyle & -qualität“

Page 11: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

XML ready!

Page 12: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Gute Wahl:

• effizienter

• fehlerfreier

• wartbarer

Frameworks: Den Rahmen finden

Strategien für den steinigen Weg

Ungünstige Wahl:

• Einschränkungen

• Komplexität

• Technik-Selbstzweck

– StringUtils neu erfinden– Blind „den Standard“– Wahllos Hinzu

Agilitäts-Verlust > Effizienz-Gewinn ?

Page 13: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Die RekrutierungStrategie #3:

Team und Zusammenarbeit

Page 14: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Gegeneinander

WOMM Certification…in 4 easy steps

1. Compile(CVS/SVN update purely optional!)

2. Launch!

3. Test you code path(Unless code change is less than 5 linesor you are a real professional)

4. Check-in!

Welcome as WOMM solutionist!

Page 15: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Die hohe Kunst der Verschleierung

Namen und Code-Formatierung

Strategie #4:

Page 16: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Marry‘s Metamorphose

Page 17: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Falsche Fährten legen

Page 18: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Nun aber zur Preisfrage

Wenn a und b false sind, dann ist x:

a) 42! c) yb) z d) xd) x

Page 19: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Name your babies

Compiler übersetzen – Entwickler lesen!

• Lesbare Methoden, Klassen und Attributnamen– die tun was sie sagen

– konstante Begrifflichkeiten

– griffige Namen

• Namen und Bedeutung synchron halten– Namen sind Orientierung im Code und Design

• Java Coding Conventions

Page 20: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Marry‘s Metamorphose

Page 21: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

The swiss-army knife of Java: Vererbung Strategie #5:

OO-Konzepte

Page 22: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Professionelle Polymorphie in Java

Was bewirkt setVisible() eigentlich?

Page 23: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Kräftig umrühren

Extensive Nutzung von extends bewirkt

– Hohe Komplexität durch verteilte Logik innerhalb der Hierarchie

– Starke, nicht-lösbare Abhängigkeiten

– Vermischung von Zuständigkeiten

– Versteckte Verhaltens- & Semantikänderungen

Page 24: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Niemals Verantwortung abgeben

Vererbung: Delegation bzw. Event/Listener:

A hat/nutzt/verwendet BEntkoppelt, einzeln wieder verwendbar

A ist ein spezielles BEnge, integrative Bindung

Verändern bzw. Hinzufügen von Verhalten in der OO

Page 25: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Gordische SeilkünsteStrategie #6:

Module und Komponenten

Page 26: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Rolle

Intelligent Design…

AdministratorRolle Benutzer

Page 27: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Rolle

Intelligent Design…

Textfield

AdministratorRolle Benutzer

Session

Manager

Page 28: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

…und Grenzen anerkennen

Modul

Modul

ModulModul

Modul

RolleTextfield

AdministratorRolle Benutzer

Session

Manager

Page 29: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

“A good modular, componentized design means minimizing the knowledge and dependency one part of the system has to have about another.”

Unberührte Natur

Was ist eine gute Komponentaufteilung?

Wie sehen passenden Schnittstellen aus?

Modul

Modul

Modul

Page 30: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Der Weg aus der Abhängigkeit

Wegweiser für gute Modul-Einteilungen / Dekomposition

• Fachliche Ordnung(„Fax-Service“, „Kontoverwaltung“)

• Technische Schichten (GUI-, Business-Layer)

• Wenige, unidirektionale Abhängigkeiten

• Klares Gedankenmodell bzgl. Frage:Was gehört rein, was nicht?

• Erfahrung

Page 31: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Gordische Seilkünste II – Das SchwertStrategie #6½:

Schnittstellen

Page 32: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Nach AOP: VOP

Page 33: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Trennungsschmerzen

Schnittstellen einfach halten!

• Komplexität gehört in die Implementierung

• “If you’re in doubt – leave it out !”• Bei Klassen: private, etc. nutzen

• Neue Rollen erkennen und via Refactoring frühzeitig abbilden

Schnittstellen sind Rollen mit austauschbarer Besetzung!

Veröffentliche Schnittstellen sind Vertragsbestandteileiner Klasse und nachträglich schwer zu ändern

Page 34: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Strategie #7:

Fehlerbehandlung

Mute the fire-alarm

Page 35: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Nur nicht aufgeben

Nicht-deterministischer Rechenapparat

Lautlose Fehlerkorrektur

Page 36: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Error-Handling: War was?

• Fehler immer individuell, vollständig und korrekt behandeln oder …

• … einpacken und weitergeben– In geeignete, deklarierte Exceptions

– oder komfortable RuntimeException

Dass bedeutet

– Keine Details/Fehler verschlucken

– auch wenn throws nervt (lieber: RuntimeException)

– Fehlerhandling Alternativen, z.B. try {…} finally {…}

Page 37: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Forensische Medizin

Diagnostikmöglichkeiten einbauen

• Logs sind der Schlüssel zur Laufzeitdynamik

• Nicht nur Details - auch Eckpunkte dokumentieren„Versuche Fax ID:4711 an Empfänger Y zu senden“

• Kein Sonderzeichen-Krieg; Log-Levels/Kategorien

Page 38: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Originell programmierenStrategie #8:

Java Basics

Page 39: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Bloat your code

Indirektion: Schlüssel zur OO

Masse gewinnen

Page 40: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Initialisierung mal anders

…und sei kreativ

„richtig“ Null

Page 41: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Instanzen zählen…

Page 42: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

I‘m a 3l33t h@x0r

static Variablen/Mutables– Pitfall! public static HashSet aktuelleZahlen= Session.getSprache().berechne();

– Good style: private final static String FOO = „buh“;

(Immutable und Konstante)

synchronized

– In der der Regel: Vermeiden!Besser: java.util.concurrent verwenden

– Wenn doch, erst mal Gegenprobe: volatile bekannt?

Page 43: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Qualität ‚fühlen‘ lernen – Testen vermeidenStrategie #9:

Testen und Messen

Page 44: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Testen? Wir sind WOMM-zertifiziert!

“I don't need to test my programs. I use error-correcting RAM (ECC)”

Page 45: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Entwickler und Tests

Gute Tests zu schreiben ist anspruchsvoll• Nicht nur Pfade ablaufen, Ergebnisse prüfen

• Nebenpfade und Randbereiche bedenken

• Automatisierbar und Regressionsfähig halten

• Unbedarft gegen den Vertrag der API testen

Fehlern vorbeugen• Konstruktive Mittel (‚Fehler durch Design verhindern‘)

• Code Robustheit (Fail gracefully)

• Diagnostik (‚schnelle Fehlerlokalisierung‘)

Page 46: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Strategie #10:Die richtige Autobiographie

Dokumentation

Page 47: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Was dokumentieren

• Code (API zu 100%)

• Design (nach Entwurf)

• Commits (Nachvollziehbarkeit)

Wie dokumentieren• Nicht was, sondern die

Hintergründe (Warum, Wie)

• Sagen was der Code nicht sagt

• JavaDoc ausnutzen– Zusammenhänge mit @link, @see

– Parameter (Nullable, Defaults) und Rückgabewerte (Typ)

…ist selbsterklärend – denk ich

Page 48: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Oliver PehnkeSoftware Engineer

Benjamin SchmidSoftware Architect

… eine Frage hätte ich da aber jetzt noch …

Page 49: Der 10-Punkte-Plan für den sicheren Weg zum nicht-wartbaren Code · 2015-02-13 · Auf dem Weg zu Unwartbarkeit Benjamin Schmid Software Architect Oliver Pehnke Software Engineer

Besuchen Sie uns!… Zertifizierung bei uns am Stand!

Vielen Dank für Ihre Aufmerksamkeit!

http://www.exxcellent.de

Quellen und Links zum ThemaThe Daily WTF http://worsethanfailure.com/Tips for maintainable Java code http://www.squarebox.co.uk/download/javatips.htmlIt Works on My Machine http://jcooney.net/archive/2007/02/01/42999.aspx Unmaintainable code http://mindprod.com/jgloss/jgloss.html