49
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

BED-Con - Tools für den täglichen Kampf als Entwickler

Embed Size (px)

DESCRIPTION

Slides zum Vortrag von Patrick Baumgartner und Odilo Oehmichen an den Berliner Expert Days (29. März 2012)

Citation preview

Page 1: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 2: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 3: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 4: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 5: BED-Con - Tools für den täglichen Kampf als Entwickler

5

Unsere Toolbox

Page 6: BED-Con - Tools für den täglichen Kampf als Entwickler

6

Zeitfresser

Page 7: BED-Con - Tools für den täglichen Kampf als Entwickler

7

Pomodoro Technique

(c) Staffan Nöteberg - Pomodoro Technique Illustrated

Page 8: BED-Con - Tools für den täglichen Kampf als Entwickler

8

Pomodoro Technique

§  Ergebnisse §  Lernen Aktivitäten planen & schätzen §  Aufzeichnen & verbessern der Aktivitäten §  Störungen vermindern & vermeiden

§  Tools §  Pomodoro (Eieruhr) §  Focus Buster

Page 9: BED-Con - Tools für den täglichen Kampf als Entwickler

9

Verschmutzter Code

Page 10: BED-Con - Tools für den täglichen Kampf als Entwickler

10

Verschmutzter Code

§  String i = “Peter“!

§  public void doit(String it){...}!

§  Methoden über mehrere Bildschirmseiten

§  Keine Kommentare

§  Zu viele Kommentare

§  ...

Page 11: BED-Con - Tools für den täglichen Kampf als Entwickler

Clean Code

Page 12: BED-Con - Tools für den täglichen Kampf als Entwickler

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 §  …

Page 13: BED-Con - Tools für den täglichen Kampf als Entwickler

13

Projekt Lombok

§  Java Library – lombok.jar

§  Reduce Boilerplate Code

§  Annotationsbasiert

@Getter, @Setter, @ToString,

@Data, @EqualsAndHashCode, ...

Page 14: BED-Con - Tools für den täglichen Kampf als Entwickler

14

Projekt Lombok

Page 15: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 16: BED-Con - Tools für den täglichen Kampf als Entwickler

BUGS!

Issue riskieren

Test schreiben

Safer Coding

Page 17: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 18: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 19: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 20: BED-Con - Tools für den täglichen Kampf als Entwickler

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?

Page 21: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 22: BED-Con - Tools für den täglichen Kampf als Entwickler

Where‘s the build?!

Page 23: BED-Con - Tools für den täglichen Kampf als Entwickler

23

Works on my machine?!

Page 24: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 25: BED-Con - Tools für den täglichen Kampf als Entwickler

25

You broke the build!

Page 26: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 27: BED-Con - Tools für den täglichen Kampf als Entwickler

27

Pausen machen

Page 28: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 29: BED-Con - Tools für den täglichen Kampf als Entwickler

Your Daily Comic Strip

Page 30: BED-Con - Tools für den täglichen Kampf als Entwickler

30

Muskeln trainieren...

Page 31: BED-Con - Tools für den täglichen Kampf als Entwickler

Code Reviews

Page 32: BED-Con - Tools für den täglichen Kampf als Entwickler

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?!

Page 33: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 34: BED-Con - Tools für den täglichen Kampf als Entwickler

34

Gerrit Workflow

Page 35: BED-Con - Tools für den täglichen Kampf als Entwickler

Wiederkehrende Aufgaben

Page 36: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 37: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 38: BED-Con - Tools für den täglichen Kampf als Entwickler

38

Mouse Junkies

Page 39: BED-Con - Tools für den täglichen Kampf als Entwickler

39

Shortcuts

§  Lösungen §  Eclipse Mousefeed-Plugin zeigt Shortcuts auf

§  Save-Actions räumt Code auf §  Cheatsheets (für jegliche Tools)

Page 40: BED-Con - Tools für den täglichen Kampf als Entwickler

Fokus

Page 41: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 42: BED-Con - Tools für den täglichen Kampf als Entwickler

42

Guava

•  String Operationen

•  Functional Programming

Page 43: BED-Con - Tools für den täglichen Kampf als Entwickler

43

Apache Commons – CLI

§  Command Line Programm mit Option „-h“

§  Programmausgabe

Page 44: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 45: BED-Con - Tools für den täglichen Kampf als Entwickler

Weiterkommen mit Spaß

Page 46: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 47: BED-Con - Tools für den täglichen Kampf als Entwickler

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

Page 48: BED-Con - Tools für den täglichen Kampf als Entwickler

48

...und sonst

§  Besuche... §  Konferenzen §  Hackathons / Hackergarten §  Java User Groups

§  Tausch dich aus §  E-Learning

§  Blogs §  Parleys (Offline-Client) §  InfoQ

Page 49: BED-Con - Tools für den täglichen Kampf als Entwickler

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