Open-Source-Werkzeugkasten für
           Software-QS
      05.05.2011 | 10:15 - 11:15 Uhr | Zagrebsaal I


Freitag, 13. Mai 2011                                 1
Speaker
         • Tobias Joch
               – inovex GmbH
               – Head of Solution
                 Development
               – leichtgewichtige und
                 hochskalierende (Web-)
                 Anwendungen
               – CCD



Freitag, 13. Mai 2011                     2
Kurzer Überblick über das
                        Thema QS




Freitag, 13. Mai 2011                        3
Ziel = Erfüllung der
                        Qualitätsmerkmale
                                  •   Korrektheit
                                  •   Zuverlässigkeit
                                  •   Robustheit
                                  •   Effizienz
                                  •   Benutzerfreundlichkeit
                                  •   Wartbarkeit
                                  •   Wiederverwendbarkeit
                                  •   Portierbarkeit
                                  •   Kompatibilität
                                  •   Vertrauenswürdigkeit
Freitag, 13. Mai 2011                                          4
Agiler Prozess am Beispiel
                        von Scrum
                               24




                               2-4




Freitag, 13. Mai 2011                        5
QS im SDLC
                            Tracking
                                                               Specs
                                                                               BDD
                                            Analyse

                                       g




                                                       De
                                   /Bu




                                                        sig
                                CR




                                                          n
                                                                                 TDD
          Monitoring                             CI                  xUnit
                                 Wa




                                                         l.
                                                          p
                                    rtu




                                                       Im
                                                                                   Pair-
                                        n




      Systemtests                                                              Programming
                                       g




                                            Delivery                Metriken
                                                         UAT

                                                        Pen-Tests            Reviews
                        Integrationstests
                                            Manuell

Freitag, 13. Mai 2011                                                                    6
Abgrenzung / Scope
                                 • Umfangreiches
                                   Thema
                                 • Konzentration auf die
                                   für Java-(Web-)
                                   Entwicklung
                                   relevantesten Tools
                                   und Frameworks
                                 • kein Anspruch auf
                                   Vollständigkeit
Freitag, 13. Mai 2011                                      7
Inhalt des heute mitgebrachten
                 Werkzeugkasten




Freitag, 13. Mai 2011                     8
Inhalt des heute mitgebrachten
                 Werkzeugkasten
         •    Unit-Tests
         •    Web-Tests
         •    Performance- / Last-Tests
         •    JVM-Analyse Tools / Techniken
         •    Build-Tools / CI
         •    Statische Code-Analyse
         •    Reports / Metriken
         •    Code-Review-Tools, SCM, ...
Freitag, 13. Mai 2011                         9
Unit-Tests
         • xUnit
               – JUnit
                        •   de facto Standard
                        •   DBUnit
                        •   XMLUnit
                        •   HTTPUnit
                        •   EJB3Unit
                        •   SpringJUnit4ClassRunner...
               – TestNG

Freitag, 13. Mai 2011                                    10
JUnit
         •    XP / TDD
         •    Kent Beck, Erich Gamma
         •    passed
         •    failed
               – failure
               – error
         • grün = Fehlerfrei?
               – nur so viel testen bis es "grün" ist
                        • Antipattern!
         • Autor Code & Test identisch                  http://www.junit.org/

Freitag, 13. Mai 2011                                                   11
JUnit
         • IDE-Integration




Freitag, 13. Mai 2011                12
Test Double
         • Test Stub
               – Hand geschriebenes Objekt für Testzwecke
         • Mock Objects
               – Erwartung vor dem Test konfiguriert
                        • z.B. EasyMock / PowerMock
         • Test Spy
               – Verifikation findet nach dem eigentlichen
                 Test statt
                        • z.B. Mockito

Freitag, 13. Mai 2011                                        13
Test Coverage
         • Eclipse Plugins
               – djUnit
               – EclEmma
         • Reports
               – Cobertura
               – Emma




Freitag, 13. Mai 2011                   14
Web-Tests




Freitag, 13. Mai 2011               15
Web-Tests
         • Validatoren
               – Link Checker
               – HTML-Syntax, ...
         • Functional / Acceptance
               – Fitnesse
               – Selenium (Grid)
               – Windmill
               – Cucumber (rake, rspec)
               – Celerity, Watir, ...
Freitag, 13. Mai 2011                     16
Web-Tests
         • Cucumber für Java
              (und viele weitere Sprachen für die JVM)

               – cuke4duke 0.4.3
 Feature: Hello JAX 2011
  Scenario: Say Hello to the JAX 2011
    Given I have a skeleton web application
    When I open the home page
    Then the page heading should be "Hello JAX 2011!"




Freitag, 13. Mai 2011                                    17
Web-Tests
         • Cucumber für Java
              (und viele weitere Sprachen für die JVM)

               – cuke4duke 0.4.3
 Feature: Hello JAX 2011
  Scenario: Say Hello to the JAX 2011
    Given I have a skeleton web application
    When I open the home page
    Then the page heading should be "Hello JAX 2011!"




Freitag, 13. Mai 2011                                    18
Performance- / Last-Tests




Freitag, 13. Mai 2011                         19
Performance- / Last-Tests
         • Apache
               – ab
               – JMeter
         • Grinder
               – GrinderStone
         • Tsung
               – Erlang
               – High Performance
               – Multi-Protokoll
Freitag, 13. Mai 2011                         20
JVM-Analyse Tools /
                            Techniken




Freitag, 13. Mai 2011                         21
JVM-Analyse Tools /
                            Techniken
         • Shell / Console
               – kill -3 / jstack
               – Thread Dump für z.B. „looping threads“, timeouts, etc.
         • jvmstat
               – jps
               – jstat
               – visualgc
         • jConsole
         • VisualVM
         • Eclipse Memory Analyzer
               – Heap Dump Analyse
Freitag, 13. Mai 2011                                                     22
Build-Tools / CI




Freitag, 13. Mai 2011                      23
Build-Tools / CI
         • Build-Tools
               – Ant
               – Maven
               – Buildr
               – Gradle
         • CI
               – CruiseControl
               – Apache Continuum
               – Hudson => Jenkins
Freitag, 13. Mai 2011                        24
Build-Tools / CI
                               Maven
         • einheitliche der Projektstruktur
         • Standard Aufgaben „out-of-the-box“
               – Plugins
         • Dependency Management
               – Firmen eigener Proxy sinnvoll
               – QS




Freitag, 13. Mai 2011                            25
Build-Tools / CI
                            Jenkins
         • aktive Community
         • viele Plugins
         • einfache Verwaltung


                             •   http://www.wakaleo.com/books/
                                 jenkins-the-definitive-guide




Freitag, 13. Mai 2011                                            26
Build-Tools / CI
                             Jenkins
         • Beispiel
               – http://ci.jenkins-ci.org/




Freitag, 13. Mai 2011                        27
Statische Code-Analyse




Freitag, 13. Mai 2011                            28
Statische Code-Analyse
         • oder auch „linting“ genannt (Lint)
         • formaler Prüfung
               – Quelltext
               – Bytecode
         • manuell oder automatisch
               –   einfachen Coding-Standards
               –   Prüfung von Typumwandlungen /Bereichsgrenzen
               –   Speicherlecks
               –   „Bad Smells“
               –   null-Referenzen
               –   uninitialized values, ...
Freitag, 13. Mai 2011                                             29
Statische Code-Analyse
         • FindBugs
               – static bytecode analyzer
               – based on Jakarta BCEL
         • PMD
               – source code analyzer
               – identifies potential problems
               – static ruleset
         • Checkstyle
               – some static code analysis
               – shows violations of a configured coding standard
Freitag, 13. Mai 2011                                               30
Reports / Metriken




Freitag, 13. Mai 2011                        31
Reports / Metriken
         • Formale Vergleichs- und
           Bewertungsmöglichkeiten
               – ausgedrückt in Meßzahlen
               – interpretierbar als der Erfüllungsgrad einer
                 Qualitätseigenschaft
               – Indikation für den Zustand der SW
                        • Wartbarkeit, Erweiterbarkeit,
                          Verständlichkeit



Freitag, 13. Mai 2011                                           32
Reports / Metriken
         • Umfang (LOC, Wiederverwendung,
           Prozeduren, ...)
         • Komplexität (McCabe)
         • Lesbarkeit (Stil)
         • Entwurfsqualität (Modularität, Kohäsion,
           Kopplung, ...)
         • Produktqualität (Testergebnisse,
           Testabdeckung, Dubletten, ...)
         • ...
Freitag, 13. Mai 2011                                 33
Reports / Metriken
         • Sonar
               – Integration in Maven und Eclipse
               – Jenkins-Plugin
         • http://nemo.sonarsource.org/




Freitag, 13. Mai 2011                               34
Vielen Dank!


Freitag, 13. Mai 2011                  35

Jax 2011-qs

  • 1.
    Open-Source-Werkzeugkasten für Software-QS 05.05.2011 | 10:15 - 11:15 Uhr | Zagrebsaal I Freitag, 13. Mai 2011 1
  • 2.
    Speaker • Tobias Joch – inovex GmbH – Head of Solution Development – leichtgewichtige und hochskalierende (Web-) Anwendungen – CCD Freitag, 13. Mai 2011 2
  • 3.
    Kurzer Überblick überdas Thema QS Freitag, 13. Mai 2011 3
  • 4.
    Ziel = Erfüllungder Qualitätsmerkmale • Korrektheit • Zuverlässigkeit • Robustheit • Effizienz • Benutzerfreundlichkeit • Wartbarkeit • Wiederverwendbarkeit • Portierbarkeit • Kompatibilität • Vertrauenswürdigkeit Freitag, 13. Mai 2011 4
  • 5.
    Agiler Prozess amBeispiel von Scrum 24 2-4 Freitag, 13. Mai 2011 5
  • 6.
    QS im SDLC Tracking Specs BDD Analyse g De /Bu sig CR n TDD Monitoring CI xUnit Wa l. p rtu Im Pair- n Systemtests Programming g Delivery Metriken UAT Pen-Tests Reviews Integrationstests Manuell Freitag, 13. Mai 2011 6
  • 7.
    Abgrenzung / Scope • Umfangreiches Thema • Konzentration auf die für Java-(Web-) Entwicklung relevantesten Tools und Frameworks • kein Anspruch auf Vollständigkeit Freitag, 13. Mai 2011 7
  • 8.
    Inhalt des heutemitgebrachten Werkzeugkasten Freitag, 13. Mai 2011 8
  • 9.
    Inhalt des heutemitgebrachten Werkzeugkasten • Unit-Tests • Web-Tests • Performance- / Last-Tests • JVM-Analyse Tools / Techniken • Build-Tools / CI • Statische Code-Analyse • Reports / Metriken • Code-Review-Tools, SCM, ... Freitag, 13. Mai 2011 9
  • 10.
    Unit-Tests • xUnit – JUnit • de facto Standard • DBUnit • XMLUnit • HTTPUnit • EJB3Unit • SpringJUnit4ClassRunner... – TestNG Freitag, 13. Mai 2011 10
  • 11.
    JUnit • XP / TDD • Kent Beck, Erich Gamma • passed • failed – failure – error • grün = Fehlerfrei? – nur so viel testen bis es "grün" ist • Antipattern! • Autor Code & Test identisch http://www.junit.org/ Freitag, 13. Mai 2011 11
  • 12.
    JUnit • IDE-Integration Freitag, 13. Mai 2011 12
  • 13.
    Test Double • Test Stub – Hand geschriebenes Objekt für Testzwecke • Mock Objects – Erwartung vor dem Test konfiguriert • z.B. EasyMock / PowerMock • Test Spy – Verifikation findet nach dem eigentlichen Test statt • z.B. Mockito Freitag, 13. Mai 2011 13
  • 14.
    Test Coverage • Eclipse Plugins – djUnit – EclEmma • Reports – Cobertura – Emma Freitag, 13. Mai 2011 14
  • 15.
  • 16.
    Web-Tests • Validatoren – Link Checker – HTML-Syntax, ... • Functional / Acceptance – Fitnesse – Selenium (Grid) – Windmill – Cucumber (rake, rspec) – Celerity, Watir, ... Freitag, 13. Mai 2011 16
  • 17.
    Web-Tests • Cucumber für Java (und viele weitere Sprachen für die JVM) – cuke4duke 0.4.3 Feature: Hello JAX 2011 Scenario: Say Hello to the JAX 2011 Given I have a skeleton web application When I open the home page Then the page heading should be "Hello JAX 2011!" Freitag, 13. Mai 2011 17
  • 18.
    Web-Tests • Cucumber für Java (und viele weitere Sprachen für die JVM) – cuke4duke 0.4.3 Feature: Hello JAX 2011 Scenario: Say Hello to the JAX 2011 Given I have a skeleton web application When I open the home page Then the page heading should be "Hello JAX 2011!" Freitag, 13. Mai 2011 18
  • 19.
  • 20.
    Performance- / Last-Tests • Apache – ab – JMeter • Grinder – GrinderStone • Tsung – Erlang – High Performance – Multi-Protokoll Freitag, 13. Mai 2011 20
  • 21.
    JVM-Analyse Tools / Techniken Freitag, 13. Mai 2011 21
  • 22.
    JVM-Analyse Tools / Techniken • Shell / Console – kill -3 / jstack – Thread Dump für z.B. „looping threads“, timeouts, etc. • jvmstat – jps – jstat – visualgc • jConsole • VisualVM • Eclipse Memory Analyzer – Heap Dump Analyse Freitag, 13. Mai 2011 22
  • 23.
  • 24.
    Build-Tools / CI • Build-Tools – Ant – Maven – Buildr – Gradle • CI – CruiseControl – Apache Continuum – Hudson => Jenkins Freitag, 13. Mai 2011 24
  • 25.
    Build-Tools / CI Maven • einheitliche der Projektstruktur • Standard Aufgaben „out-of-the-box“ – Plugins • Dependency Management – Firmen eigener Proxy sinnvoll – QS Freitag, 13. Mai 2011 25
  • 26.
    Build-Tools / CI Jenkins • aktive Community • viele Plugins • einfache Verwaltung • http://www.wakaleo.com/books/ jenkins-the-definitive-guide Freitag, 13. Mai 2011 26
  • 27.
    Build-Tools / CI Jenkins • Beispiel – http://ci.jenkins-ci.org/ Freitag, 13. Mai 2011 27
  • 28.
  • 29.
    Statische Code-Analyse • oder auch „linting“ genannt (Lint) • formaler Prüfung – Quelltext – Bytecode • manuell oder automatisch – einfachen Coding-Standards – Prüfung von Typumwandlungen /Bereichsgrenzen – Speicherlecks – „Bad Smells“ – null-Referenzen – uninitialized values, ... Freitag, 13. Mai 2011 29
  • 30.
    Statische Code-Analyse • FindBugs – static bytecode analyzer – based on Jakarta BCEL • PMD – source code analyzer – identifies potential problems – static ruleset • Checkstyle – some static code analysis – shows violations of a configured coding standard Freitag, 13. Mai 2011 30
  • 31.
  • 32.
    Reports / Metriken • Formale Vergleichs- und Bewertungsmöglichkeiten – ausgedrückt in Meßzahlen – interpretierbar als der Erfüllungsgrad einer Qualitätseigenschaft – Indikation für den Zustand der SW • Wartbarkeit, Erweiterbarkeit, Verständlichkeit Freitag, 13. Mai 2011 32
  • 33.
    Reports / Metriken • Umfang (LOC, Wiederverwendung, Prozeduren, ...) • Komplexität (McCabe) • Lesbarkeit (Stil) • Entwurfsqualität (Modularität, Kohäsion, Kopplung, ...) • Produktqualität (Testergebnisse, Testabdeckung, Dubletten, ...) • ... Freitag, 13. Mai 2011 33
  • 34.
    Reports / Metriken • Sonar – Integration in Maven und Eclipse – Jenkins-Plugin • http://nemo.sonarsource.org/ Freitag, 13. Mai 2011 34
  • 35.