Upload
cmahnke
View
500
Download
0
Embed Size (px)
DESCRIPTION
Entwicklung Develpment Tools
Citation preview
Qualitätssicherung durch Entwicklungswerkzeuge
Christian Mahnke
05.02.09
05.02.2009
1
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 Dokumentation05.02.2009
Mahnke
2
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
3
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
4
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
5
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
– Distribution05.02.2009
Mahnke
6
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
7
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
8
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
9
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
10
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
11
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
12
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
13
Demonstration
• Beispiele für die einzelnen Werkzeuge
• Fragen?
05.02.2009
Mahnke
14