BED-Con - Berlin




  Toolbox für den täglichen Kampf
         eines Entwicklers

                   Patrick Baumgartner – Senior Software Consultant
29. März 2012         Odilo Oehmichen – Senior Software Consultant
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
                                                       2
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



                                               3
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

                                                 4
Unsere Toolbox   5
Zeitfresser
              6
Pomodoro Technique
        




                          (c) Staffan Nöteberg - Pomodoro Technique Illustrated
                                                                                 


                                                                                         7   
                                    
Pomodoro Technique

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

§  Tools
     §  Pomodoro (Eieruhr)
     §  Focus Buster




                                                    8
Verschmutzter Code

                     9
Verschmutzter Code

§  String i = “Peter“!

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

§  Methoden über mehrere Bildschirmseiten

§  Keine Kommentare

§  Zu viele Kommentare

§  ...



                                             10
Clean Code
Clean Code

§  Software Craftsmanship

§  Geprägt von Uncle Bob (Robert C. Martin)

§  Code Smells
    §    Klassen-, Methoden-, Variablennamen
    §    Methodengrösse
    §    Comments
    §    Strong cohesion -> Single Responsibility
    §    …



                                                     12
Projekt Lombok

§  Java Library – lombok.jar

§  Reduce Boilerplate Code

§  Annotationsbasiert

     @Getter, @Setter, @ToString,

     @Data, @EqualsAndHashCode, ...




                                      13
Projekt Lombok




                 14
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



                                                  15
Test schreiben
               Issue riskieren




Safer Coding

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




                                                    17
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




                                                 18
Integration Testing
§  Testet Zusammenspiel einzelner Komponenten
 Test-Setup Komplexität

                                  Laufzeitumgebung


                            Externen Systeme

               Keine externen Systeme

                                               Abhängigkeiten
•  Einsatz von Dependency Injection Frameworks
   erleichtern Testing

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

                                                    20
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

                                              21
Where‘s the build?!
Works on my machine?!




                        23
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



                                           24
You broke the build!




                       25
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




                                         26
Pausen machen




                27
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
                                                     28
Your Daily Comic Strip
Muskeln trainieren...




                        30
Code Reviews
Rubber Duck Debugging
§  Setup
   §  Gummiente besorgen
   §  Ente vor dem PC platzieren
§  Durchführung
   §  Code der Ente erklären


§  Resultat
            Entspricht der Code der Beschreibung?!

                                                     32
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




                                                    33
Gerrit Workflow




                  34
Wiederkehrende Aufgaben
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
                                                              36
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



                                                           37
Mouse Junkies
                38
Shortcuts
§  Lösungen
    §  Eclipse Mousefeed-Plugin zeigt Shortcuts auf




    §  Save-Actions räumt Code auf
    §  Cheatsheets (für jegliche Tools)
                                                       39
Fokus
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
                                                       41
Guava

•  String Operationen




•  Functional Programming




                            42
Apache Commons – CLI

§  Command Line Programm mit Option „-h“




§  Programmausgabe



                                            43
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


                                                     44
Weiterkommen mit Spaß
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



                                              46
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


                                              47
...und sonst
§  Besuche...
     §  Konferenzen
     §  Hackathons / Hackergarten
     §  Java User Groups
§  Tausch dich aus
§  E-Learning
     §  Blogs
     §  Parleys (Offline-Client)
     §  InfoQ




                                     48
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
                                                       49

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

  • 1.
    BED-Con - Berlin Toolbox für den täglichen Kampf eines Entwicklers Patrick Baumgartner – Senior Software Consultant 29. März 2012 Odilo Oehmichen – Senior Software Consultant
  • 2.
    Speaker Profiles §  PatrickBaumgartner §  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 2
  • 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 3
  • 4.
    Aber... Wir kämpfen täglichgegen: §  Legacy Code §  Arbeitsunterbrechungen §  Langweilige, immer wiederkehrende Tasks §  Verschiedene Auffassungen von Codequalität §  Langsame Rechner J Spaß am Entwickeln bleibt auf der Strecke 4
  • 5.
  • 6.
  • 7.
    Pomodoro Technique  (c) Staffan Nöteberg - Pomodoro Technique Illustrated  7   
  • 8.
    Pomodoro Technique §  Ergebnisse §  Lernen Aktivitäten planen & schätzen §  Aufzeichnen & verbessern der Aktivitäten §  Störungen vermindern & vermeiden §  Tools §  Pomodoro (Eieruhr) §  Focus Buster 8
  • 9.
  • 10.
    Verschmutzter Code §  Stringi = “Peter“! §  public void doit(String it){...}! §  Methoden über mehrere Bildschirmseiten §  Keine Kommentare §  Zu viele Kommentare §  ... 10
  • 11.
  • 12.
    Clean Code §  SoftwareCraftsmanship §  Geprägt von Uncle Bob (Robert C. Martin) §  Code Smells §  Klassen-, Methoden-, Variablennamen §  Methodengrösse §  Comments §  Strong cohesion -> Single Responsibility §  … 12
  • 13.
    Projekt Lombok §  JavaLibrary – lombok.jar §  Reduce Boilerplate Code §  Annotationsbasiert @Getter, @Setter, @ToString, @Data, @EqualsAndHashCode, ... 13
  • 14.
  • 15.
    Projekt Lombok §  BenötigtJava ≥ 6 §  Java Agents hooken in Compile Prozess javac –cp lombok.jar Person.java §  Eclipse, netbeans, maven Plugins §  Andere Tools: PMD, findbugs, checkstyle, Simian 15
  • 16.
    Test schreiben Issue riskieren Safer Coding BUGS!
  • 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 17
  • 18.
    System Integration §  ModerneSysteme besitzen Schnittstellen zu externen Komponenten: SMTP, FTP, LDAP, RDBMS, ... §  Abhängigkeiten zu Funktionalitäten welche vom Container bereitgestellt werden, wie: DataSource, ConnectionFactory, TransactionManager 18
  • 19.
    Integration Testing §  TestetZusammenspiel einzelner Komponenten Test-Setup Komplexität Laufzeitumgebung Externen Systeme Keine externen Systeme Abhängigkeiten •  Einsatz von Dependency Injection Frameworks erleichtern Testing 19
  • 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? 20
  • 21.
    Integration Testing §  Annäherungan 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 21
  • 22.
  • 23.
    Works on mymachine?! 23
  • 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 24
  • 25.
    You broke thebuild! 25
  • 26.
    CI Game §  „Youbroke the build“ §  Einzahlung in Build-Kasse §  „<...> Developer of the week“ §  ... §  CI Game von Clint Shank §  Reward-System §  Jenkins-Plugin verfügbar 26
  • 27.
  • 28.
    Pausen machen §  DasProblem: §  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 28
  • 29.
  • 30.
  • 31.
  • 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?! 32
  • 33.
    Gerrit §  Entwickelt vonGoogle für Android §  Basierend auf Git §  Verhält sich wie eine Firewall vor einem Git Repo §  Web-basierendes Review Tool §  SSH & Git Server 33
  • 34.
  • 35.
  • 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 36
  • 37.
    JRebel §  Integriert sichin 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 37
  • 38.
  • 39.
    Shortcuts §  Lösungen §  Eclipse Mousefeed-Plugin zeigt Shortcuts auf §  Save-Actions räumt Code auf §  Cheatsheets (für jegliche Tools) 39
  • 40.
  • 41.
    Do not re-inventthe 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 41
  • 42.
    Guava •  String Operationen • Functional Programming 42
  • 43.
    Apache Commons –CLI §  Command Line Programm mit Option „-h“ §  Programmausgabe 43
  • 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 44
  • 45.
  • 46.
    Softwerkskammer §  Dach fürlokale Zusammenschluss von Entwicklern die sich austauschen wollen §  we care §  we practice §  we learn §  we share §  Software Craftsmanship §  Nicht an Sprache gebunden 46
  • 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 47
  • 48.
    ...und sonst §  Besuche... §  Konferenzen §  Hackathons / Hackergarten §  Java User Groups §  Tausch dich aus §  E-Learning §  Blogs §  Parleys (Offline-Client) §  InfoQ 48
  • 49.
    Q&A Patrick Baumgartner, OdiloOehmichen patrick.baumgartner [at] swiftmind [dot] com odilo.oehmichen [at] swiftmind [dot] com http://www.swiftmind.com http://www.twitter.com/swiftmind 49