Softwarequalitätssicherung
mit Continuous Integration Tools



Treffpunkt Semicolon, 26.10.2010, GFU Cyrus AG

Dirk Weil, GEDOPLAN GmbH
Entwicklung von Informationssystemen
30+ Jahre am Markt
~35 Mitarbeiter
Beratung und Entwicklung
Maßgeschneiderte Lösungen              GEDOPLAN
Standardsoftware
                                       Archi-   Entwick-
                            Analyse
                                       tektur     lung
                                                           SAP®

                                       Java
Seit 1998 im Bereich Java:
   100+ Beratungs- und Entwicklungsprojekte
   Konzeption und Entwicklung
   30+ Seminartitel für Seminarpartner
   Java / Java EE                       GEDOPLAN
   Diverse App.-Server
       Glassfish                        Archi- Entwick-
       IBM WebSphere          Analyse
                                        tektur   lung
      JBoss
      Oracle WebLogic                                     SAP®
      SAP NetWeaver
                                       Java
IT-Systeme und Prozesse
Beratung, Schulung, Entwicklung
80+ Mitarbeiter
www.involva-gruppe.de
Automatischer Softwaretest




                                  Testgetriebene
                                  Softwareentw.
                                  Test-
                             automatisierung




                                                   5
Automatischer Softwaretest

  Experimentelles Verfahren zum Test einer Anwendung
  (SUT = System Under Test)

  Zwei Zielsetzungen:
     Destruktiver Test: Im SUT möglichst viele Fehler aufdecken
     Demonstrativer Test: Korrektheit des SUT demonstrieren

  Effiziente und kostensparende Test-Durchführung:
      Möglichst viele Test-Aktivitäten durch Werkzeuge unterstützen
      Test-Aktivitäten automatisiert ablaufen lassen


                                                                  6
Ziele der Testautomatisierung

  Explizite und detaillierte Beschreibung des Testwissens
  Effiziente Testdurchführung
  Reproduzierbare Testergebnisse
  Beliebige Wiederholbarkeit von Testläufen
  Erhöhung der Software-Qualität
  Einsparung von Personal- und Sachkosten




                                                            7
Unit Tests

  Weit verbreitetes Framework: JUnit 4
    Nutzt intensiv        public class MitarbeiterServiceTest
    Annotationen          {
                            @BeforeClass
    Bedingt Java 5          public static void setUpBeforeClass()
                            {
    Gute Integration          … // Test-Fixture erzeugen
                            }
    in IDE, Maven, …
                               @Test
                               public void testAddBerechtigung()
                               {
                                 … // zu testende Funktionalität aufrufen

                                   Assert.assertEquals(…);
                               }
                           }



                                                                            8
Test von Swing-GUIs

  Abbot
     Framework zum Test von Java-GUI-Elementen
     Open Source
     http://abbot.sourceforge.net

     Record and Play
     Editor für GUI-Skripts

     Einbindung in JUnit möglich



                                                 9
Test von Webanwendungen

  Selenium
      Testframework für Web-
      Anwendungen
      Open Source
      http://seleniumhq.org/

     Record and Play via
     Browser-Plugin

     Integrierbar in JUnit


                               10
Continuous Integration

  Voraussetzung: Projekt enthält ausführbare Tests
     JUnit
     Selenium, Abbot, …

  Build selbst ist auch ein Test!




                                                     11
Continuous Integration

  Manuelle Ausführung reicht nicht
    belastet den Entwicklungsprozess
    keine (einheitliche) Veröffentlichung der Ergebnisse
    keine (einheitliche) Eskalation bei Fehlern

                            An dem Teil habe ich
                              nichts gemacht!


         Bei mir läuft's!                Oh, sorry – das habe
                                           ich noch nicht
                                             eingecheckt.


                                                                12
Continuous Integration

  Anforderungen an eine Build- und Test-Umgebung
     Regelmäßige, automatische Ausführung
        zeitgesteuert ("Daily Build")
        durch Check-In getriggert
        …
     Kompletter Build
     Ausführung aller Tests
     Ggf. Qualitätsprüfung (Style, Coverage, …)
     Reporting
     Benachrichtigung


                                                   13
Continuous Integration




                         14
Continuous Integration

                                                 Arte-
                         Inform                  fakte

                                     CI-System
                   Checkout
 Entw.-Umgebung
                                                 Re-
                                                 ports




                                  Checkout
        Commit           SCM


                                                   15
Hudson

  "Extensible Continuous Integration Engine"

  Build und Test von Software-Projekten
  Monitoring von beliebigen Jobs

  Einfache Installation und Konfiguration

  Umfangreiche Werkzeugunterstützung "out-of-the-Box"
    SVN, CVS
    ant, mvn, shell
    javadoc, junit, …
                                                        16
Installation und Start

  Download von hudson.war von http://hudson-ci.org/

  Start …
     per Kommandozeile: java –jar hudson.war
     als Deployment in JBoss, Tomcat, …

  Bedienung per Browser auf http://host:8080[/hudson]




                                                        17
Job-Übersicht




                18
Zusammenfassung eines Jobs




                             19
Zugriff auf Build-Ergebnisse

                               Javadoc

                               Gebaute Artefakte

                               Unittest-Ergebnisse
                               (inkl. Drill-Down)




                                                     20
Benachrichtigungen

  Per Mail
      nach jedem fehlgeschlagenen Build
      nach erstem erfolgreichen Build
      an Mail-Verteiler oder Verursacher




                                           21
Erweiterbarkeit




                                       Plugins
                                       Core




       2006       2007   2008   2009




                                                 22
Erweiterbarkeit

  Plugin-Konzept
     Benachrichtigungen
        IRC, Jabber, Twitter, …
     Oberfläche
        Emotical Hudson, Green Balls, …
     Benutzerverwaltung
        Active Directory, LDAP, …
     Berichte
        Checkstyle, Cobertura, Crap4J, FindBugs, PMD, …




                                                          23
Erweiterbarkeit

  Plugin-Konzept
     Build-Werkzeuge
         Buckminster, Gradle, Rake, …
     Quellcodeverwaltung
         ClearCase, Git, PVCS, Visual Sourcesafe, …
     Artefaktverteilung
         FTP, SCP, …
     …




                                                      24
Projekt-Voraussetzungen

  Build per Cmd Line
     ant, mvn, make, shell, …

  Projekt komplett im SCM

  alle Dependencies verfügbar
      auch im SCM
      per Maven o.ä.




                                25
Erweiterungen: Checkstyle

  Überprüft die Einhaltung von Konventionen im Java-Code.
  Maven-Plugin:
  Prüfung des Codes
  Hudson-Plugin:
  Sammeln und Darstellen
  der Prüfergebnisse
      Trend
      Drill-Down




                                                            26
Erweiterungen: Cobertura

  Prüft die Code-Abdeckung durch Tests

  Maven-Plugin:
  Instumentierung des Codes,
  Testausführung.

  Hudson-Plugin:
  Sammeln und Darstellen
  der Prüfergebnisse
      Trend
      Drill-Down

                                         27
Erweiterungen: Extreme Feedback

  Prominente Darstellung des Build-Status

  Emotional Mr. Hudson
  Builderlein
  …




                                            28
Weitere Features
                                     S
  Verteiltes Build
                      M              S

                                     S


  Matrix Build
                             Derby       Oracle
                     JBoss
                     MySQL




                                                  29
Danke für Ihre Aufmerksamkeit!
      Haben Sie Fragen?

Softwarequalitätssicherung mit Continuous Integration Tools

  • 1.
    Softwarequalitätssicherung mit Continuous IntegrationTools Treffpunkt Semicolon, 26.10.2010, GFU Cyrus AG Dirk Weil, GEDOPLAN GmbH
  • 2.
    Entwicklung von Informationssystemen 30+Jahre am Markt ~35 Mitarbeiter Beratung und Entwicklung Maßgeschneiderte Lösungen GEDOPLAN Standardsoftware Archi- Entwick- Analyse tektur lung SAP® Java
  • 3.
    Seit 1998 imBereich Java: 100+ Beratungs- und Entwicklungsprojekte Konzeption und Entwicklung 30+ Seminartitel für Seminarpartner Java / Java EE GEDOPLAN Diverse App.-Server Glassfish Archi- Entwick- IBM WebSphere Analyse tektur lung JBoss Oracle WebLogic SAP® SAP NetWeaver Java
  • 4.
    IT-Systeme und Prozesse Beratung,Schulung, Entwicklung 80+ Mitarbeiter www.involva-gruppe.de
  • 5.
    Automatischer Softwaretest Testgetriebene Softwareentw. Test- automatisierung 5
  • 6.
    Automatischer Softwaretest Experimentelles Verfahren zum Test einer Anwendung (SUT = System Under Test) Zwei Zielsetzungen: Destruktiver Test: Im SUT möglichst viele Fehler aufdecken Demonstrativer Test: Korrektheit des SUT demonstrieren Effiziente und kostensparende Test-Durchführung: Möglichst viele Test-Aktivitäten durch Werkzeuge unterstützen Test-Aktivitäten automatisiert ablaufen lassen 6
  • 7.
    Ziele der Testautomatisierung Explizite und detaillierte Beschreibung des Testwissens Effiziente Testdurchführung Reproduzierbare Testergebnisse Beliebige Wiederholbarkeit von Testläufen Erhöhung der Software-Qualität Einsparung von Personal- und Sachkosten 7
  • 8.
    Unit Tests Weit verbreitetes Framework: JUnit 4 Nutzt intensiv public class MitarbeiterServiceTest Annotationen { @BeforeClass Bedingt Java 5 public static void setUpBeforeClass() { Gute Integration … // Test-Fixture erzeugen } in IDE, Maven, … @Test public void testAddBerechtigung() { … // zu testende Funktionalität aufrufen Assert.assertEquals(…); } } 8
  • 9.
    Test von Swing-GUIs Abbot Framework zum Test von Java-GUI-Elementen Open Source http://abbot.sourceforge.net Record and Play Editor für GUI-Skripts Einbindung in JUnit möglich 9
  • 10.
    Test von Webanwendungen Selenium Testframework für Web- Anwendungen Open Source http://seleniumhq.org/ Record and Play via Browser-Plugin Integrierbar in JUnit 10
  • 11.
    Continuous Integration Voraussetzung: Projekt enthält ausführbare Tests JUnit Selenium, Abbot, … Build selbst ist auch ein Test! 11
  • 12.
    Continuous Integration Manuelle Ausführung reicht nicht belastet den Entwicklungsprozess keine (einheitliche) Veröffentlichung der Ergebnisse keine (einheitliche) Eskalation bei Fehlern An dem Teil habe ich nichts gemacht! Bei mir läuft's! Oh, sorry – das habe ich noch nicht eingecheckt. 12
  • 13.
    Continuous Integration Anforderungen an eine Build- und Test-Umgebung Regelmäßige, automatische Ausführung zeitgesteuert ("Daily Build") durch Check-In getriggert … Kompletter Build Ausführung aller Tests Ggf. Qualitätsprüfung (Style, Coverage, …) Reporting Benachrichtigung 13
  • 14.
  • 15.
    Continuous Integration Arte- Inform fakte CI-System Checkout Entw.-Umgebung Re- ports Checkout Commit SCM 15
  • 16.
    Hudson "ExtensibleContinuous Integration Engine" Build und Test von Software-Projekten Monitoring von beliebigen Jobs Einfache Installation und Konfiguration Umfangreiche Werkzeugunterstützung "out-of-the-Box" SVN, CVS ant, mvn, shell javadoc, junit, … 16
  • 17.
    Installation und Start Download von hudson.war von http://hudson-ci.org/ Start … per Kommandozeile: java –jar hudson.war als Deployment in JBoss, Tomcat, … Bedienung per Browser auf http://host:8080[/hudson] 17
  • 18.
  • 19.
  • 20.
    Zugriff auf Build-Ergebnisse Javadoc Gebaute Artefakte Unittest-Ergebnisse (inkl. Drill-Down) 20
  • 21.
    Benachrichtigungen PerMail nach jedem fehlgeschlagenen Build nach erstem erfolgreichen Build an Mail-Verteiler oder Verursacher 21
  • 22.
    Erweiterbarkeit Plugins Core 2006 2007 2008 2009 22
  • 23.
    Erweiterbarkeit Plugin-Konzept Benachrichtigungen IRC, Jabber, Twitter, … Oberfläche Emotical Hudson, Green Balls, … Benutzerverwaltung Active Directory, LDAP, … Berichte Checkstyle, Cobertura, Crap4J, FindBugs, PMD, … 23
  • 24.
    Erweiterbarkeit Plugin-Konzept Build-Werkzeuge Buckminster, Gradle, Rake, … Quellcodeverwaltung ClearCase, Git, PVCS, Visual Sourcesafe, … Artefaktverteilung FTP, SCP, … … 24
  • 25.
    Projekt-Voraussetzungen Buildper Cmd Line ant, mvn, make, shell, … Projekt komplett im SCM alle Dependencies verfügbar auch im SCM per Maven o.ä. 25
  • 26.
    Erweiterungen: Checkstyle Überprüft die Einhaltung von Konventionen im Java-Code. Maven-Plugin: Prüfung des Codes Hudson-Plugin: Sammeln und Darstellen der Prüfergebnisse Trend Drill-Down 26
  • 27.
    Erweiterungen: Cobertura Prüft die Code-Abdeckung durch Tests Maven-Plugin: Instumentierung des Codes, Testausführung. Hudson-Plugin: Sammeln und Darstellen der Prüfergebnisse Trend Drill-Down 27
  • 28.
    Erweiterungen: Extreme Feedback Prominente Darstellung des Build-Status Emotional Mr. Hudson Builderlein … 28
  • 29.
    Weitere Features S Verteiltes Build M S S Matrix Build Derby Oracle JBoss MySQL 29
  • 30.
    Danke für IhreAufmerksamkeit! Haben Sie Fragen?