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

Preview:

DESCRIPTION

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

Citation preview

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

Recommended