Toolbox für den täglichen Kampf
eines Entwicklers
BED-Con - Berlin
Patrick Baumgartner – Senior Software Consultant Odilo Oehmichen – Senior Software Consultant 29. März 2012
2
Speaker Profiles
§ Patrick Baumgartner § Senior Software Consultant | Partner § SpringSource Certified Trainer § Spring Framework, OSGi & agile Methoden § Co-Autor von „OSGi für Praktiker“ (Hanser)
§ Odilo Oehmichen § Senior Software Consultant | Partner § mehr als 10 Jahre Erfahrung im Java-Umfeld § Spring, Spring MVC, Webflow, Security
§ Swiftmind GmbH (http://www.swiftmind.com) § Enterprise Java, Spring & OSGi Consulting § Spring & OSGi Workshops/Trainings § Agile Engineering Practices Workshops
3
Entwickler im Herzen
§ Wir haben Spass am Entwicklen
§ Sind begeistert, wenn etwas funktioniert
§ Wollen Probleme optimal lösen
§ Entwerfen Architekturen
§ Diskutieren mit anderen Entwicklern
§ Unterstützen im Entwicklungsprozess
4
Aber...
Wir kämpfen täglich gegen:
§ Legacy Code
§ Arbeitsunterbrechungen
§ Langweilige, immer wiederkehrende Tasks
§ Verschiedene Auffassungen von Codequalität
§ Langsame Rechner J
Spaß am Entwickeln bleibt auf der Strecke
5
Unsere Toolbox
6
Zeitfresser
7
Pomodoro Technique
(c) Staffan Nöteberg - Pomodoro Technique Illustrated
8
Pomodoro Technique
§ Ergebnisse § Lernen Aktivitäten planen & schätzen § Aufzeichnen & verbessern der Aktivitäten § Störungen vermindern & vermeiden
§ Tools § Pomodoro (Eieruhr) § Focus Buster
9
Verschmutzter Code
10
Verschmutzter Code
§ String i = “Peter“!
§ public void doit(String it){...}!
§ Methoden über mehrere Bildschirmseiten
§ Keine Kommentare
§ Zu viele Kommentare
§ ...
Clean Code
12
Clean Code
§ Software Craftsmanship
§ Geprägt von Uncle Bob (Robert C. Martin)
§ Code Smells § Klassen-, Methoden-, Variablennamen § Methodengrösse § Comments § Strong cohesion -> Single Responsibility § …
13
Projekt Lombok
§ Java Library – lombok.jar
§ Reduce Boilerplate Code
§ Annotationsbasiert
@Getter, @Setter, @ToString,
@Data, @EqualsAndHashCode, ...
14
Projekt Lombok
15
Projekt Lombok
§ Benötigt Java ≥ 6
§ Java Agents hooken in Compile Prozess
javac –cp lombok.jar Person.java
§ Eclipse, netbeans, maven Plugins
§ Andere Tools: PMD, findbugs, checkstyle, Simian
BUGS!
Issue riskieren
Test schreiben
Safer Coding
17
Recap: Unit Testing
§ Testet isoliert § Schnell aufgesetzt § Unter Einsatz von dynamischen Mocks / Stubs § Läuft schnell § Meist mit JUnit oder TestNG § Getestet wird nur eine einzelne Unit
18
System Integration
§ Moderne Systeme besitzen Schnittstellen zu externen Komponenten:
SMTP, FTP, LDAP, RDBMS, ...
§ Abhängigkeiten zu Funktionalitäten welche vom Container bereitgestellt werden, wie:
DataSource, ConnectionFactory, TransactionManager
19
Integration Testing
§ Testet Zusammenspiel einzelner Komponenten
• Einsatz von Dependency Injection Frameworks erleichtern Testing
Test-Setup Komplexität
Abhängigkeiten
Keine externen Systeme
Externen Systeme
Laufzeitumgebung
20
Integration Testing
§ Schnell § Wiederholbar § Automatisiert § Leicht konfigurierbar § Soll gute Abdeckung von End-to-End Business
Usecases bieten
Wie kann man effektiv eine Java Anwendung integrationstesten, ohne die komplette
Infrastruktur hochzufahren?
21
Integration Testing
§ Annäherung an Produktionsumgebung § Simulation der Komponenten § Open Source Frameworks für Embedded Testing
§ MockFtpServer § FakeFtp / StubFtpServer
§ Dumbster‘s SimpleSmtpServer § Mailserver
§ Jetty § In-Memory Servlet-Container
§ H2 / HSQL / Derby § In-Memory Datenbank
Where‘s the build?!
23
Works on my machine?!
24
Jenkins
§ Alles was es braucht ist Java § Gehe zu http://jenkins-ci.org § Download War-File § Command-Line java -jar jenkins.war
§ Plugin-Mechanismus § Chuck-Norris § Lava Lampe § Ampel
25
You broke the build!
26
CI Game
§ „You broke the build“ § Einzahlung in Build-Kasse § „<...> Developer of the week“ § ...
§ CI Game von Clint Shank § Reward-System § Jenkins-Plugin verfügbar
27
Pausen machen
28
Pausen machen
§ Das Problem:
§ Wir vergessen oft Pausen zu machen!
§ Braucht Disziplin und ein bisschen Planung
§ Pausen (10-15 min) verbessern die Produktivität
§ Augen entspannen, Bewegung, steife Muskeln
strecken, mehr Blut- und Sauerstofffluss ins
Gehirn, komplexe Probleme entwirren
Your Daily Comic Strip
30
Muskeln trainieren...
Code Reviews
32
Rubber Duck Debugging
§ Setup § Gummiente besorgen
§ Ente vor dem PC platzieren
§ Durchführung
§ Code der Ente erklären
§ Resultat
Entspricht der Code der Beschreibung?!
33
Gerrit
§ Entwickelt von Google für Android
§ Basierend auf Git
§ Verhält sich wie eine Firewall vor einem Git Repo
§ Web-basierendes Review Tool
§ SSH & Git Server
34
Gerrit Workflow
Wiederkehrende Aufgaben
36
Redeploy Hell
§ Problem § Code geschrieben -> Build -> Deploy auf Server § Über 15 % der Entwicklungszeit ist Warten auf
Redeploy § Frißt Nerven, Zeit und Geld
§ Lösungen § Funktionalitäten ausgliedern § Abhängigkeiten zu Laufzeit-Umgebungen reduzieren § Unittests § Tools
§ Debugger § JRebel
37
JRebel
§ Integriert sich in JVM § Richtiges Hotdeployment
§ Hinzufügen von Methoden § Ändern von Methodensignaturen § Konfigfile Änderung (Spring, Hibernate, JSF, Wicket,…)
§ Verbindet sich direkt mit IDE-Workspace § Unterstützt alle gängigen Appserver
§ Nachteil: Kommerziell
38
Mouse Junkies
39
Shortcuts
§ Lösungen § Eclipse Mousefeed-Plugin zeigt Shortcuts auf
§ Save-Actions räumt Code auf § Cheatsheets (für jegliche Tools)
Fokus
41
Do not re-invent the wheel
§ Fokussierung auf die Businesslogik
§ Einsatz von Open Source Libraries im Projekt § Bessere Applikations-Architektur § Source Code von der Community benutzt § Gut (Unit-)getestet § Schnelleres Entwickeln mit kleineren Team
§ Libraries § Guava § Apache Commons § FluentJava § Spring
42
Guava
• String Operationen
• Functional Programming
43
Apache Commons – CLI
§ Command Line Programm mit Option „-h“
§ Programmausgabe
44
Apache Commons
Attributes, BeanUtils, Betwixt, Chain, CLI, Codec,
Collections, Compress, Configuration, Daemon,
DBCP, DbUtils, Digester, Discovery, EL, Email, Exec,
FileUpload, IO, JCI, Jelly, Jexl, JXPath, Lang,
Launcher, Logging, Math, Modeler, Net, Pool,
Primitives, Proxy, Sanselan, SCXML, Transaction,
Validator, VFS
Weiterkommen mit Spaß
46
Softwerkskammer
§ Dach für lokale Zusammenschluss von Entwicklern die sich austauschen wollen
§ we care
§ we practice § we learn
§ we share § Software Craftsmanship § Nicht an Sprache gebunden
47
Softwerkskammer (Forts.)
• Inhalt: § Book Clubs § Coding Dojos § Lightning Talks § One Line of Code § Code Retreats
§ Über den Tellerrand schauen § Mehr Infos unter www.softwerkskammer.de
48
...und sonst
§ Besuche... § Konferenzen § Hackathons / Hackergarten § Java User Groups
§ Tausch dich aus § E-Learning
§ Blogs § Parleys (Offline-Client) § InfoQ
49
Q & A
Patrick Baumgartner, Odilo Oehmichen patrick.baumgartner [at] swiftmind [dot] com odilo.oehmichen [at] swiftmind [dot] com http://www.swiftmind.com http://www.twitter.com/swiftmind
Top Related