Qualitätssicherung durch Entwicklungswerkzeuge Christian Mahnke 05.02.09 05.02.2009 Mahnke
Probleme (Auswahl) Mangelnde Überprüfbarkeit Für das Testen einer Änderung muss eine Testversion installiert werden. Undokumentierte Abhängigkeiten Versionskonflikte Unbenutzte Bibliotheken (bläht Repository und Distribution unnötig auf) Redundante Implementierungen Verringerte Wartbarkeit durch überflüssigen Kode Mangelnde Dokumentation 05.02.2009 Mahnke
Lösungsansätze (Grundsätze) Wichtig: Lösung durch Methode, nicht spezifische Implementierung (sofern möglich)! Sollte zumindest unabhängig von der Programmiersprache sein! Metadaten eines Softwareprojektes sollten maschinenlesbar sein! 05.02.2009 Mahnke
Unit Tests (Konzept) Einzelne Teile der Software (Units) werden getestet ob sie das erwartete Verhalten zeigen. Software muss so gestaltet sein, das ohne Seiteneffekte funktioniert. Verhalten sollte komplett dokumentiert sein Idealerweise werden die Tests vor der zu testenden Software auf Basis einer Spezifikation erstellt. 05.02.2009 Mahnke
Unit Tests (Implementierungen) JUnit für Java Definition von Testklassen Feine Steuerung über das Erstellen von Objekten Integration über Java 5 Annotations möglich PHPUnit für PHP Klone von JUnit für PHP (mit Erweiterungen) 05.02.2009 Mahnke
Maschinenlesbare Projekt Metadaten Dokumentation folgender Eigenschaften (Auswahl) Typ (z.B. Bibliothek oder Webanwendung) Menschenlesbare Metadaten (z.B. als URL) Abhängigkeiten Anweisungen zur Übersetzung Anweisungen für Tests Generierung von Dokumentation Deployment Distribution 05.02.2009 Mahnke
Projekt Metadaten (Implementierung) Maven Grundprinzipien Project Object Model (POM) Konvention über Konfiguration Projekt Lebenszyklus kann durch Plugins erweitert oder geändert werden 05.02.2009 Mahnke
Projekt Metadaten (Implementierung) cont. Maven Features Buildtool (wie make oder Ant) Integration der Tests (analog zu „make test“) Deployment („make install“) Plugins für Dokumentation (javadoc oder doxygen) Erstellung von Projekt Webseiten Repositories für Abhängigkeiten 05.02.2009 Mahnke
Continuous Integration (Konzept) Regelmäßige Überprüfung aller benötigten Komponenten (z.B. Nachts) Kompilierbar? Ausführbar? Testergebnisse? Implizite Vorteile (um das überhaupt prüfen zu können) Portabilität Funktionale Einheiten 05.02.2009 Mahnke
Continuous Integration  ( Implementierung ) Hudson Integration verschiedener SCMs Auswertung von Projekt Metadaten (maven) Frei konfigurierbare Anweisungen für Erstellung der Anwendung (Ant, Shell Script) Integration mit Issue Trackern Benachrichtigung via Mail und RSS Webadministration 05.02.2009 Mahnke
Metriken (Konzept) Erfassung verschiedener Kennzahlen (Auswahl) Testabdeckung Verhältnis zwischen Kode und Kommentarzeilen Komplexität (auf Basis des Quelltexts) Ergebnisse einer statischen Analyse (wenn möglich mit flexiblen Regeln) Doppelter Kode 05.02.2009 Mahnke
Metriken (Implementierungen) Sonar (Java) Modulare Architektur Regelwerk anpassbar Visualisierung Webadministration PHPUnit (PHP, nicht so umfassend) Unterstützung von PMD („Project Mess Detector “) 05.02.2009 Mahnke
Weitere mögliche Werkzeuge Distribution: Archiva für die Verteilung von Artefakten Dokumentation: UML aus dem Kode Integration: Jira – Eclipse Anbindung für die Verwaltung von Aufgaben („Task focused UI“) 05.02.2009 Mahnke
Demonstration Beispiele für die einzelnen Werkzeuge Fragen? 05.02.2009 Mahnke

Development Toolbox

  • 1.
    Qualitätssicherung durch EntwicklungswerkzeugeChristian Mahnke 05.02.09 05.02.2009 Mahnke
  • 2.
    Probleme (Auswahl) MangelndeÜberprüfbarkeit Für das Testen einer Änderung muss eine Testversion installiert werden. Undokumentierte Abhängigkeiten Versionskonflikte Unbenutzte Bibliotheken (bläht Repository und Distribution unnötig auf) Redundante Implementierungen Verringerte Wartbarkeit durch überflüssigen Kode Mangelnde Dokumentation 05.02.2009 Mahnke
  • 3.
    Lösungsansätze (Grundsätze) Wichtig:Lösung durch Methode, nicht spezifische Implementierung (sofern möglich)! Sollte zumindest unabhängig von der Programmiersprache sein! Metadaten eines Softwareprojektes sollten maschinenlesbar sein! 05.02.2009 Mahnke
  • 4.
    Unit Tests (Konzept)Einzelne Teile der Software (Units) werden getestet ob sie das erwartete Verhalten zeigen. Software muss so gestaltet sein, das ohne Seiteneffekte funktioniert. Verhalten sollte komplett dokumentiert sein Idealerweise werden die Tests vor der zu testenden Software auf Basis einer Spezifikation erstellt. 05.02.2009 Mahnke
  • 5.
    Unit Tests (Implementierungen)JUnit für Java Definition von Testklassen Feine Steuerung über das Erstellen von Objekten Integration über Java 5 Annotations möglich PHPUnit für PHP Klone von JUnit für PHP (mit Erweiterungen) 05.02.2009 Mahnke
  • 6.
    Maschinenlesbare Projekt MetadatenDokumentation folgender Eigenschaften (Auswahl) Typ (z.B. Bibliothek oder Webanwendung) Menschenlesbare Metadaten (z.B. als URL) Abhängigkeiten Anweisungen zur Übersetzung Anweisungen für Tests Generierung von Dokumentation Deployment Distribution 05.02.2009 Mahnke
  • 7.
    Projekt Metadaten (Implementierung)Maven Grundprinzipien Project Object Model (POM) Konvention über Konfiguration Projekt Lebenszyklus kann durch Plugins erweitert oder geändert werden 05.02.2009 Mahnke
  • 8.
    Projekt Metadaten (Implementierung)cont. Maven Features Buildtool (wie make oder Ant) Integration der Tests (analog zu „make test“) Deployment („make install“) Plugins für Dokumentation (javadoc oder doxygen) Erstellung von Projekt Webseiten Repositories für Abhängigkeiten 05.02.2009 Mahnke
  • 9.
    Continuous Integration (Konzept)Regelmäßige Überprüfung aller benötigten Komponenten (z.B. Nachts) Kompilierbar? Ausführbar? Testergebnisse? Implizite Vorteile (um das überhaupt prüfen zu können) Portabilität Funktionale Einheiten 05.02.2009 Mahnke
  • 10.
    Continuous Integration ( Implementierung ) Hudson Integration verschiedener SCMs Auswertung von Projekt Metadaten (maven) Frei konfigurierbare Anweisungen für Erstellung der Anwendung (Ant, Shell Script) Integration mit Issue Trackern Benachrichtigung via Mail und RSS Webadministration 05.02.2009 Mahnke
  • 11.
    Metriken (Konzept) Erfassungverschiedener Kennzahlen (Auswahl) Testabdeckung Verhältnis zwischen Kode und Kommentarzeilen Komplexität (auf Basis des Quelltexts) Ergebnisse einer statischen Analyse (wenn möglich mit flexiblen Regeln) Doppelter Kode 05.02.2009 Mahnke
  • 12.
    Metriken (Implementierungen) Sonar(Java) Modulare Architektur Regelwerk anpassbar Visualisierung Webadministration PHPUnit (PHP, nicht so umfassend) Unterstützung von PMD („Project Mess Detector “) 05.02.2009 Mahnke
  • 13.
    Weitere mögliche WerkzeugeDistribution: Archiva für die Verteilung von Artefakten Dokumentation: UML aus dem Kode Integration: Jira – Eclipse Anbindung für die Verwaltung von Aufgaben („Task focused UI“) 05.02.2009 Mahnke
  • 14.
    Demonstration Beispiele fürdie einzelnen Werkzeuge Fragen? 05.02.2009 Mahnke