Open-Source-Werkzeugkasten für Software-QS 05.05.2011 10:15-11:15 Uhr Zagrebsaal I 1
Speaker Tobias Joch inovex GmbH Head of Solution Development leichtgewichtige und hochskalierende (Web-) Anwendungen CCD 2
Kurzer Überblick über das Thema QS 3
Ziel = Erfüllung der Qualitätsmerkmale Korrektheit Zuverlässigkeit Robustheit Effizienz Benutzerfreundlichkeit Wartbarkeit Wiederverwendbarkeit Portierbarkeit Kompatibilität Vertrauenswürdigkeit 4
Agiler Prozess am Beispiel von Scrum 24 2-4 5
QS im SDLC Tracking CR/Bug Analyse Design Specs BDD TDD Monitoring Systemtests Wartung CI Delivery Impl. UAT xunit Metriken Pair- Programming Integrationstests Manuell Pen-Tests Reviews 6
Abgrenzung / Scope Umfangreiches Thema Konzentration auf die für Java-(Web-) Entwicklung relevantesten Tools und Frameworks kein Anspruch auf Vollständigkeit 7
Inhalt des heute mitgebrachten Werkzeugkasten 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,... 9
Unit-Tests xunit Mastertextformat JUnit bearbeiten de facto Standard DBUnit XMLUnit HTTPUnit EJB3Unit SpringJUnit4ClassRunner... TestNG 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/ 11
JUnit IDE-Integration 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 13
Test Coverage Eclipse Plugins djunit EclEmma Reports Cobertura Emma 14
Web-Tests 15
Web-Tests Validatoren Link Checker HTML-Syntax,... Functional / Acceptance Fitnesse Selenium (Grid) Windmill Cucumber (rake, rspec) Celerity, Watir,... 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!" 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!" 18
Performance- / Last-Tests 19
Performance- / Last-Tests Apache ab JMeter Grinder GrinderStone Tsung Erlang High Performance Multi-Protokoll 20
JVM-Analyse Tools / Techniken 21
Shell / Console JVM-Analyse Tools / Techniken 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 22
Build-Tools / CI 23
Build-Tools / CI Build-Tools Ant Maven Buildr Gradle CI CruiseControl Apache Continuum Hudson => Jenkins 24
Build-Tools / CI Maven einheitliche der Projektstruktur Standard Aufgaben out-of-the-box Plugins Dependency Management Firmen eigener Proxy sinnvoll QS 25
Build-Tools / CI Jenkins aktive Community viele Plugins einfache Verwaltung http://www.wakaleo.com/books/ jenkins-the-definitive-guide 26
Build-Tools / CI Jenkins Beispiel http://ci.jenkins-ci.org/ 27
Vielen Dank! 28
Statische Code-Analyse 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,... 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 31
Reports / Metriken 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 33
Reports / Metriken Umfang (LOC, Wiederverwendung, Prozeduren,...) Komplexität (McCabe) Lesbarkeit (Stil) Entwurfsqualität (Modularität, Kohäsion, Kopplung,...) Produktqualität (Testergebnisse, Testabdeckung, Dubletten,...)... 34
Reports / Metriken Sonar Integration in Maven und Eclipse Jenkins-Plugin http://nemo.sonarsource.org/ 35