SlideShare ist ein Scribd-Unternehmen logo
1 von 49
Herzlich Willkommen!

…flipping default template layout
Spannend, listener connection …
Waiting geht‘s losstill ramping up…
…speaker‘snich‘ ?! …..
Gleich for ego
und

Auf dem Weg zu Unwartbarkeit
Die besten Strategien für den sicheren Erfolg!
Benjamin Schmid
Software Architect

Oliver Pehnke
Software Engineer
Das große Stück
Anteil Wartungskosten in Softwareprojekten
~67% bis >90% der Gesamtkosten
W art ung & Verbesserung
Ent w icklung

Quellen:
Zelkowitz et al. (1970)
”Principles of Software Engineering and Design”
Moad, J. (1990)
“Maintaining the competitive edge”

• Projektlaufzeit überdauert oft Projekt-Mitarbeiter
• Wartbarkeit entscheidend für langfristigen Projekterfolg
Die Spielregeln für Projekte
1.
2.
3.
4.

Das Spiel kann anhand der Prozess-Anleitung nicht
gewonnen werden – Improvisation erforderlich
Die fixen Termine und Budgets
sind zu Beginn der Spielanleitung zu entnehmen
Nicht die Fachlichkeit,
sondern der Spielleiter entscheidet
Wenn‘s kein Spass macht, machs‘d was falsch!
Strategie #1:

Visionen einbringen
Analyse- und Entscheidung
Analyse: Fundament der Wartbarkeit

Gute Spezifikationen
Die Herausforderung:
• vollständig und präzise
• sind nicht einfach
(auch graphisch)

Die Probleme:
• Kommunikation
– Kunde, Analyst, Entwickler
haben eigene Vorstellungen

• Konkretisierungen nötig

Analyseergebnis ist die Basis von Allem
Klarheit & Eindeutigkeit reduzieren die Risiken
Graphische Spezfikationen
Graphische Spezifizikationen mal klar & eindeutig
…und viel muß es sein
Strategie #2:
Die Wahl der richtigen Waffen
Technologien und Frameworks
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
„Manfestierter
Unternehmensstyle & -qualität“
XML ready!
Frameworks: Den Rahmen finden

Ungünstige Wahl:
• Einschränkungen
• Komplexität
• TechnikSelbstzweck

Gute Wahl:
• effizienter
• fehlerfreier
• wartbarer

Agilitäts-Verlust > Effizienz-Gewinn ?
Strategien für den steinigen Weg
– Wahllos Hinzu

– Blind „den Standard“

– StringUtils neu erfinden
Strategie #3:
Die Rekrutierung
Team und Zusammenarbeit
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 lines
or you are a real professional)

4. Check-in!
Welcome as WOMM solutionist!
Strategie #4:
Die hohe Kunst der Verschleierung
Namen und Code-Formatierung
Marry‘s Metamorphose
Falsche Fährten legen
Nun aber zur Preisfrage

Wenn a und b false sind, dann ist x:

a) 42!
b) z

c) y
d) x
d) x
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
Marry‘s Metamorphose
Strategie #5:
The swiss-army knife of Java: Vererbung
OO-Konzepte
Professionelle Polymorphie in Java

Was bewirkt setVisible() eigentlich?
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
Niemals Verantwortung abgeben
Verändern bzw. Hinzufügen von Verhalten in der OO
Vererbung:

Delegation bzw. Event/Listener:

A ist ein spezielles B

A hat/nutzt/verwendet B

Enge, integrative Bindung

Entkoppelt, einzeln wieder verwendbar
Strategie #6:
Gordische Seilkünste
Module und Komponenten
Intelligent Design…

Rolle

Administrator
Rolle

Benutzer
Intelligent Design…

Manager

Textfield

Rolle

Administrator
Rolle

Benutzer

Session
…und Grenzen anerkennen

Modul

Manager

Textfield

Rolle

Administrator
Rolle

Modul

Modul

Benutzer

Session

Modul

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

Modul

Was ist eine gute Komponentaufteilung?
Wie sehen passenden Schnittstellen aus?
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
Strategie #6½:
Gordische Seilkünste II – Das Schwert
Schnittstellen
Nach AOP: VOP
Trennungsschmerzen
Schnittstellen sind Rollen mit austauschbarer Besetzung!
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
Veröffentliche Schnittstellen sind Vertragsbestandteil
einer Klasse und nachträglich schwer zu ändern
Strategie #7:
Mute the fire-alarm
Fehlerbehandlung
Nur nicht aufgeben
Nicht-deterministischer Rechenapparat

Lautlose Fehlerkorrektur
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 {…}
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
Strategie #8:
Originell programmieren
Java Basics
Bloat your code
Indirektion: Schlüssel zur OO

Masse gewinnen
…und sei kreativ
Initialisierung mal anders

„richtig“ Null
Instanzen zählen…
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?
Strategie #9:
Qualität ‚fühlen‘ lernen – Testen vermeiden
Testen und Messen
Testen? Wir sind WOMM-zertifiziert!

“I don't need to test my programs.
I use error-correcting RAM (ECC)”
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
• Code Robustheit
• Diagnostik

(‚Fehler durch Design verhindern‘)
(Fail gracefully)
(‚schnelle Fehlerlokalisierung‘)
Strategie #10:
Die richtige Autobiographie
Dokumentation
…ist selbsterklärend – denk ich
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)
Oliver Pehnke
Software Engineer

… eine Frage hätte ich da
aber jetzt noch …
Benjamin Schmid
Software Architect
Vielen Dank für Ihre Aufmerksamkeit!

Besuchen Sie uns!
… Zertifizierung bei uns am Stand!

http://www.exxcellent.de

Quellen und Links zum Thema
The Daily WTF
Tips for maintainable Java code
It Works on My Machine
Unmaintainable code

http://worsethanfailure.com/
http://www.squarebox.co.uk/download/javatips.html
http://jcooney.net/archive/2007/02/01/42999.aspx
http://mindprod.com/jgloss/jgloss.html

Weitere ähnliche Inhalte

Andere mochten auch

Next Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im ÜberblickNext Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im ÜberblickBenjamin Schmid
 
Vital und fit bis ins hohe Alter: Refactoring im Projekt
Vital und fit bis ins hohe Alter: Refactoring im ProjektVital und fit bis ins hohe Alter: Refactoring im Projekt
Vital und fit bis ins hohe Alter: Refactoring im ProjektBenjamin Schmid
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumBenjamin Schmid
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEEBenjamin Schmid
 
Datenbank-Refactoring mit LiquiBase
Datenbank-Refactoring mit LiquiBaseDatenbank-Refactoring mit LiquiBase
Datenbank-Refactoring mit LiquiBaseBenjamin Schmid
 
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery MobileTrittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery MobileBenjamin Schmid
 
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-EntwicklungVielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-EntwicklungBenjamin Schmid
 

Andere mochten auch (7)

Next Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im ÜberblickNext Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
Next Generation Java - Ceylon, Kotlin, Scala & Fantom im Überblick
 
Vital und fit bis ins hohe Alter: Refactoring im Projekt
Vital und fit bis ins hohe Alter: Refactoring im ProjektVital und fit bis ins hohe Alter: Refactoring im Projekt
Vital und fit bis ins hohe Alter: Refactoring im Projekt
 
Automatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit SeleniumAutomatisierte GUI-Tests mit Selenium
Automatisierte GUI-Tests mit Selenium
 
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEESchnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
Schnelle Winkel: 10x schnellere Webapps mit AngularJS und JEE
 
Datenbank-Refactoring mit LiquiBase
Datenbank-Refactoring mit LiquiBaseDatenbank-Refactoring mit LiquiBase
Datenbank-Refactoring mit LiquiBase
 
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery MobileTrittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
Trittsicher auf allen Mobilen Pfaden mit HTML5 & jQuery Mobile
 
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-EntwicklungVielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
Vielfalt vs. Abstraktion - Der Jakobsweg der modellbasierten GUI-Entwicklung
 

Ähnlich wie Auf dem Weg zu Unwartbarkeit - Die besten Strategien für den sicheren Erfolg!

Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013superflomo
 
Clean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxClean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxkaftanenko
 
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Javatim
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013Oliver Zeigermann
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Florian Bosselmann
 
Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?
Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?
Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?embarc Software Consulting GmbH
 
Coderetreat Vorlage
Coderetreat VorlageCoderetreat Vorlage
Coderetreat VorlageRamon Anger
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler PlattformRobin Sedlaczek
 
FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...
FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...
FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...Verein FM Konferenz
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1DraphonyGames
 
Programmieren lernen Grundkurs - Tag1: 2. Theoretischer Einstieg
Programmieren lernen Grundkurs - Tag1: 2. Theoretischer EinstiegProgrammieren lernen Grundkurs - Tag1: 2. Theoretischer Einstieg
Programmieren lernen Grundkurs - Tag1: 2. Theoretischer EinstiegJan Brinkmann
 
eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)
eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)
eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)eparo GmbH
 
WUD 2009 Workshop: Quick Wins
WUD 2009 Workshop: Quick WinsWUD 2009 Workshop: Quick Wins
WUD 2009 Workshop: Quick Winsguest60c1a2
 
Ich will agil testen! was muss ich können iqnite 2014 - verison 2.0
Ich will agil testen! was muss ich können   iqnite 2014 - verison 2.0Ich will agil testen! was muss ich können   iqnite 2014 - verison 2.0
Ich will agil testen! was muss ich können iqnite 2014 - verison 2.0Michael Fischlein
 
05 Das richtige DoE-Design für Ihren Erfolg auswählen
05 Das richtige DoE-Design für Ihren Erfolg auswählen05 Das richtige DoE-Design für Ihren Erfolg auswählen
05 Das richtige DoE-Design für Ihren Erfolg auswählenStefan Moser
 
Beyond Agile - when Freedom grows to Quality and Speed
Beyond Agile - when Freedom grows to Quality and SpeedBeyond Agile - when Freedom grows to Quality and Speed
Beyond Agile - when Freedom grows to Quality and SpeedSebastian Bernt
 

Ähnlich wie Auf dem Weg zu Unwartbarkeit - Die besten Strategien für den sicheren Erfolg! (20)

Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013
 
Clean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptxClean Coding - Theorie und Praxis Guide.pptx
Clean Coding - Theorie und Praxis Guide.pptx
 
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
Vortrag Dirk Weil Gute zeilen, schlechte Zeilen auf der JAX 2012
 
JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013JavaScript für Java-Entwickler W-JAX 2013
JavaScript für Java-Entwickler W-JAX 2013
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
 
Design OOA OOD
Design OOA OODDesign OOA OOD
Design OOA OOD
 
Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?
Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?
Verunfallte Softwarearchitektur. Erfolgreiche Lösungen höchstens per Zufall?
 
Coderetreat Vorlage
Coderetreat VorlageCoderetreat Vorlage
Coderetreat Vorlage
 
PHP mit Paul Bocuse
PHP mit Paul BocusePHP mit Paul Bocuse
PHP mit Paul Bocuse
 
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
#SpeakRoslyn - Die Microsoft .NET Compiler Plattform
 
FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...
FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...
FMK2015: Strukturierte Namensgebung als Basis für komplexe Programmierung by ...
 
C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1C Sharp Einfuehrung Teil 1
C Sharp Einfuehrung Teil 1
 
Programmieren lernen Grundkurs - Tag1: 2. Theoretischer Einstieg
Programmieren lernen Grundkurs - Tag1: 2. Theoretischer EinstiegProgrammieren lernen Grundkurs - Tag1: 2. Theoretischer Einstieg
Programmieren lernen Grundkurs - Tag1: 2. Theoretischer Einstieg
 
Workshop: Besseres C#
Workshop: Besseres C#Workshop: Besseres C#
Workshop: Besseres C#
 
eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)
eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)
eparo – Quick Wins (Workshop WUD 2009 – Rolf Schulte Strathaus)
 
WUD 2009 Workshop: Quick Wins
WUD 2009 Workshop: Quick WinsWUD 2009 Workshop: Quick Wins
WUD 2009 Workshop: Quick Wins
 
objectiF extrem
objectiF extremobjectiF extrem
objectiF extrem
 
Ich will agil testen! was muss ich können iqnite 2014 - verison 2.0
Ich will agil testen! was muss ich können   iqnite 2014 - verison 2.0Ich will agil testen! was muss ich können   iqnite 2014 - verison 2.0
Ich will agil testen! was muss ich können iqnite 2014 - verison 2.0
 
05 Das richtige DoE-Design für Ihren Erfolg auswählen
05 Das richtige DoE-Design für Ihren Erfolg auswählen05 Das richtige DoE-Design für Ihren Erfolg auswählen
05 Das richtige DoE-Design für Ihren Erfolg auswählen
 
Beyond Agile - when Freedom grows to Quality and Speed
Beyond Agile - when Freedom grows to Quality and SpeedBeyond Agile - when Freedom grows to Quality and Speed
Beyond Agile - when Freedom grows to Quality and Speed
 

Auf dem Weg zu Unwartbarkeit - Die besten Strategien für den sicheren Erfolg!

  • 1. Herzlich Willkommen! …flipping default template layout Spannend, listener connection … Waiting geht‘s losstill ramping up… …speaker‘snich‘ ?! ….. Gleich for ego
  • 2. und Auf dem Weg zu Unwartbarkeit Die besten Strategien für den sicheren Erfolg! Benjamin Schmid Software Architect Oliver Pehnke Software Engineer
  • 3. Das große Stück Anteil Wartungskosten in Softwareprojekten ~67% bis >90% der Gesamtkosten W art ung & Verbesserung Ent w icklung Quellen: Zelkowitz et al. (1970) ”Principles of Software Engineering and Design” Moad, J. (1990) “Maintaining the competitive edge” • Projektlaufzeit überdauert oft Projekt-Mitarbeiter • Wartbarkeit entscheidend für langfristigen Projekterfolg
  • 4. Die Spielregeln für Projekte 1. 2. 3. 4. Das Spiel kann anhand der Prozess-Anleitung nicht gewonnen werden – Improvisation erforderlich Die fixen Termine und Budgets sind zu Beginn der Spielanleitung zu entnehmen Nicht die Fachlichkeit, sondern der Spielleiter entscheidet Wenn‘s kein Spass macht, machs‘d was falsch!
  • 6. Analyse: Fundament der Wartbarkeit Gute Spezifikationen Die Herausforderung: • vollständig und präzise • sind nicht einfach (auch graphisch) Die Probleme: • Kommunikation – Kunde, Analyst, Entwickler haben eigene Vorstellungen • Konkretisierungen nötig Analyseergebnis ist die Basis von Allem Klarheit & Eindeutigkeit reduzieren die Risiken
  • 9. Strategie #2: Die Wahl der richtigen Waffen Technologien und Frameworks
  • 10. 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 „Manfestierter Unternehmensstyle & -qualität“
  • 12. Frameworks: Den Rahmen finden Ungünstige Wahl: • Einschränkungen • Komplexität • TechnikSelbstzweck Gute Wahl: • effizienter • fehlerfreier • wartbarer Agilitäts-Verlust > Effizienz-Gewinn ? Strategien für den steinigen Weg – Wahllos Hinzu – Blind „den Standard“ – StringUtils neu erfinden
  • 14. 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 lines or you are a real professional) 4. Check-in! Welcome as WOMM solutionist!
  • 15. Strategie #4: Die hohe Kunst der Verschleierung Namen und Code-Formatierung
  • 18. Nun aber zur Preisfrage Wenn a und b false sind, dann ist x: a) 42! b) z c) y d) x d) x
  • 19. 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
  • 21. Strategie #5: The swiss-army knife of Java: Vererbung OO-Konzepte
  • 22. Professionelle Polymorphie in Java Was bewirkt setVisible() eigentlich?
  • 23. 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
  • 24. Niemals Verantwortung abgeben Verändern bzw. Hinzufügen von Verhalten in der OO Vererbung: Delegation bzw. Event/Listener: A ist ein spezielles B A hat/nutzt/verwendet B Enge, integrative Bindung Entkoppelt, einzeln wieder verwendbar
  • 29. Unberührte Natur “A good modular, componentized design means minimizing the knowledge and dependency one part of the system has to have about another.” Modul Modul Modul Was ist eine gute Komponentaufteilung? Wie sehen passenden Schnittstellen aus?
  • 30. 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
  • 31. Strategie #6½: Gordische Seilkünste II – Das Schwert Schnittstellen
  • 33. Trennungsschmerzen Schnittstellen sind Rollen mit austauschbarer Besetzung! 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 Veröffentliche Schnittstellen sind Vertragsbestandteil einer Klasse und nachträglich schwer zu ändern
  • 34. Strategie #7: Mute the fire-alarm Fehlerbehandlung
  • 35. Nur nicht aufgeben Nicht-deterministischer Rechenapparat Lautlose Fehlerkorrektur
  • 36. 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 {…}
  • 37. 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
  • 39. Bloat your code Indirektion: Schlüssel zur OO Masse gewinnen
  • 40. …und sei kreativ Initialisierung mal anders „richtig“ Null
  • 42. 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?
  • 43. Strategie #9: Qualität ‚fühlen‘ lernen – Testen vermeiden Testen und Messen
  • 44. Testen? Wir sind WOMM-zertifiziert! “I don't need to test my programs. I use error-correcting RAM (ECC)”
  • 45. 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 • Code Robustheit • Diagnostik (‚Fehler durch Design verhindern‘) (Fail gracefully) (‚schnelle Fehlerlokalisierung‘)
  • 46. Strategie #10: Die richtige Autobiographie Dokumentation
  • 47. …ist selbsterklärend – denk ich 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)
  • 48. Oliver Pehnke Software Engineer … eine Frage hätte ich da aber jetzt noch … Benjamin Schmid Software Architect
  • 49. Vielen Dank für Ihre Aufmerksamkeit! Besuchen Sie uns! … Zertifizierung bei uns am Stand! http://www.exxcellent.de Quellen und Links zum Thema The Daily WTF Tips for maintainable Java code It Works on My Machine Unmaintainable code http://worsethanfailure.com/ http://www.squarebox.co.uk/download/javatips.html http://jcooney.net/archive/2007/02/01/42999.aspx http://mindprod.com/jgloss/jgloss.html