Java Entwicklung mit Open Source Tools

Autoren:
Steffen Schluff
Orientation in Objects GmbH
Kristian Köhler
Orientation in Objects GmbH
Steffen Schluff
Steffen Schluff
Kristian Köhler
Kristian Köhler
Datum:Juni 2002

Abstrakt

Der vorliegende Artikel liefert eine kurze Übersicht, welche Tools für ein professionelles und effizientes Arbeiten selbst bei kleinen Software-Projekten unverzichtbar sind. Insbesondere wird demonstriert, wie sich im Java Umfeld eine vollständig auf Open Source Technologien basierende Entwicklungslandschaft aufbauen und betreiben läßt. Die hier vorgestellten Erkenntnisse resultieren aus eigener Projekterfahrung sowie aus dem Einsatz bei Kunden.

Motivation

Zur Entwicklung guter und wartbarer Software ist ein gewisser Grundbestand an Hilfs- und Unterstützungswerkzeugen absolut unerläßlich. Die Erfahrung zeigt, daß winzige oder kurzlebige Projekte quasi nicht existieren. Selbst bei nur wenig beteiligten Programmieren und einer kurzen Entwicklungsdauer erwarten die Anwender über einen mittel- bis längerfristigen Zeitraum eine adäquate Wartung und Pflege. Dies läßt sich ohne die entsprechende Tooling Unterstützung gar nicht oder nur mit unverhältnismäßig hohem Aufwand erreichen.

In der Praxis wird oft aus Kostengründen auf die Anschaffung und Nutzung der entsprechenden Entwicklungshilfen verzichtet. Somit gilt es, kostengünstige oder sogar kostenfreie Lösungen, etwa aus dem Open Source Bereich, zu finden, die auf Dauer im professionellen Entwicklungsumfeld eingesetzt werden können.

Entwicklungswerkzeuge

Source Code Management System

Aufgabe

Ein Source Code Management System ist das mit Abstand wichtigste Werkzeug bei der Softwareentwicklung und bietet die folgenden Möglichkeiten:

  • Zentrale Ablage von Quellcode
    Dies gewährleistet, daß alle Mitarbeiter mit den gleichen Quelldateien arbeiten. Eine zentrale Ablage vereinfacht darüberhinaus erheblich die Sicherung des Codebestandes auf Backup-Medien und erlaubt die Einrichtung einer Zugriffskontrolle. Zusätzlich sollte man in der Lage sein, zusammengehörige Dateien logisch zu gruppieren, etwa in Projekte und Sub-Projekte. Zur Bearbeitung von Code werden lokale Kopien auf den Entwicklungsrechnern erzeugt, die nach Änderung wieder in die zentrale Ablage übernommen werden.
  • Speichern der Änderungsgeschichte jeder Datei
    Jede an einer Datei vorgenommene Änderung wird unter Angabe des Zeitpunktes, des Nutzers und des Änderungsgrundes protokolliert. Außerdem muß es möglich sein, bei Bedarf jederzeit wieder eine vergangene Version einer Datei zu erhalten.
  • Versionierungsinformation verwalten
    Dieses Feature gestattet es, eine bestimmte Markierung an allen Dateien eines Projekts anzubringen, um zum Beispiel einen bestimmten Releasestand zu markieren.
  • Parallele Entwicklung ermöglichen
    Durch das Arbeiten mit lokalen Kopien kann es zu Synchronisationsproblemen beim Zurückspielen der Änderungen in den gemeinsamen Codebestand kommen. Die Source Code Verwaltung muß sich überschneidende Änderungen erkennen und entsprechend darauf reagieren.

Open Source Tool: CVS - Concurrent Version System

Das Concurrent Version System, kurz CVS, ist eines der populärsten Source Code Management Systeme überhaupt. Die hohe Verbreitung rührt neben seiner Zuverlässigkeit daher, daß es seit seiner Entstehung Mitte der 80er Jahre kostenfrei für nahezu jedes Betriebssystem verfügbar ist.

Neben der reinen Kommandozeilenversion existieren auch eine Vielzahl graphischer Ergänzungen zu CVS, die ein GUI basiertes Arbeiten mit Source Code Archiven ermöglichen. Außerdem bietet so gut wie jede moderne integrierte Entwicklungsumgebung (IDE) mittlerweile eine eingebaute Unterstützung für CVS an.

CVS Perspective der Eclipse IDE
Unterschiede zwischen zwei Dateiversionen (CVS Perspective der Eclipse IDE)

Bug Tracking System

Aufgabe

Ein unerwünschter, aber doch allseits bekannter Vorgang während der Softwareentwicklung ist das Auftreten von Fehlern. Da es unmöglich ist, daß sich eine einzelne Person alle während oder nach der Entwicklung auftretenden Fehler inklusive aller Details merkt, ist ein Bug Tracking System unerlässlich. Ein solches System sollte dabei die folgenden Funktionen anbieten:

  • Fehler inklusive Details erfassen
    Fehler müssen mittels einer textuellen Beschreibung erfasst werden können und gleichzeit einer bestimmten Softwareversion und / oder Hardwarekonfiguration zugewiesen werden. Zusätzlich wird hinterlegt, wer den Fehler wann gemeldet bzw. ergänzende Informationen geliefert hat. In der Praxis erweist es sich oft als nützlich, wenn zusammen mit den Fehlern weitere Daten abgelegt werden können, etwa Screenshots oder Logdateien.
  • Fehler bearbeiten und beseitigen
    Die gemeldeten Fehler müssen einzelnen Entwicklern oder Abteilungen zur Bearbeitung zugewiesen werden können. Jeder Fehler befindet sich somit in einem bestimmten Zustand, etwa 'Neu gemeldet' oder 'In Bearbeitung'. Darüberhinaus muß es möglich sein, Fehler zu priorisieren und diese gewissen Projekt Milestones zuzuweisen. Für das Ändern von Fehlerstati müssen Zugriffsrechte zugewiesen werden können, so hat zum Beispiel nur die Qualitätssicherung die Berechtigung einen Fehler als 'gefixt' zu melden.
  • Fehler abfragen und auswerten
    Projektmitarbeiter müssen in der Lage sein, bestimmte Abfragen auf den gemeldeten Fehlern auszuführen. Ein Entwickler muß zum Beispiel sehen können, welche Fehler ihm mit welcher Priorität zugewiesen sind. Zusätzlich ist es von großem Vorteil, wenn sich der Projektleiter oder die Qulitätssicherung automatisiert statistische Daten ausgeben lassen kann, zum Beispiel wie viele Fehler von Kunden nach dem ersten Beta-Release gemeldet wurden.
  • Externe Fehlererfassung
    Je nach Projekt kann es von Vorteil sein, externen Beta-Testern oder auch Kunden Zugang zu dem Bug Tracking System zu gewähren. Hierdurch wird zum einen die Zahl der aktiven Testpersonen erhöht und zum anderen der Kunde frühzeitig in die Entwicklung involviert, was sich oft positiv auf die Akzeptanz der Software auswirkt.

Open Source Tool: Bugzilla

Bugzilla ist ein Bug Tracking System, das vor allem durch seinen Einsatz im Rahmen des Mozilla Open Source Browser Projektes bekannt wurde. Es ist in Perl geschrieben und läßt sich problemlos auf verschiedenen Plattformen mit der ebenfalls als Open Source verfügbaren Datenbank MySQL betreiben.

Bugzilla bietet ein einfach zu bedienendes HTML Interface und einen Email basierten Benachrichtigungsmechanismus. Durch die vielseitigen Konfigurationsmöglichkeiten läßt sich vor allem auch das Aussehen leicht an bestimmte Vorgaben anpassen.

OIOzilla Queryseite
OIOzilla Fehlercharts
Von OIO verwendeter Bugzilla (OIOzilla)

Build Management Tool

Aufgabe

Ein weiterer Grundpfeiler in der Softwareentwicklung ist eine solide Buildumgebung, die das einfache und konsistente Übersetzen eines Projektes ermöglicht. Die nachfolgenden Features erweisen sich in diesem Zusammenhang als nützlich:

  • Inkrementelle und schnelle Builds
    Um das tägliche Arbeiten möglichst effizient gestalten zu können, sollte das Build Management Tool in der Lage sein, das Projekt schnell und inkrementell zu übersetzen. Bestimmte Arbeitsweisen wie Extreme Programming (XP) oder Refactoring setzen dies sogar als Grundbedingung voraus.
  • Automatisierbarkeit
    Neben dem eigentlichen Übersetzen des Quellcodes sollte es eine gute Buildumgebung ermöglichen, weitere Aufgaben automatisiert auszuführen. Hierzu gehören zum Beispiel der Abgleich mit dem gemeinsamen Source Code Archiv oder das Durchführen von Testläufen. Kommandozeilentools, wie 'make' aus dem C Umfeld, sind dabei häufig deutlich flexibler als graphische Umgebungen.
  • Möglichst portabel
    In der Praxis kann es sich als nützlich erweisen, sich nicht exklusiv an die Tools bestimmter Entwicklungsumgebungen zu binden oder sich zu früh auf bestimmte Betriebssysteme festzulegen.

Open Source Tool: Apache Ant (Java only)

Bei Apache Ant handelt es sich um ein Java basiertes Buildtool für Java Projekte. Es läßt sich entfernt mit Make vergleichen, ist jedoch vor allem durch seine XML Builddateien ungleich einfacher in der Handhabung.

Ant läßt sich in fast jede populäre Entwicklungsumgebung integrieren und ist bei Bedarf auch beliebig erweiterbar. Die Tatsache, daß mittlerweile Sun selbst für viele Java Beispiele Ant verwendet, zeigt deutlich, daß es zur Quasi-Standard Buildumgebung für Java geworden ist.

Apache Ant auf der Konsole
Apache Ant in der Eclipse IDE
Verschiedene Aufrufe von Apache Ant

Testing Framework

Aufgabe

Testen von Software ist ein unverzichtbarer Bestandteil eines soliden Entwicklungsprozesses. Obwohl je nach Projekt die notwendigen Tests stark variieren können, sollten die folgenden Punkte bei allen Tests sichergestellt sein:

  • Paralleles Entwickeln und Testen
    Für qualitativ hochwertige Software ist es unverzichtbar, Fehler während der Entwicklung möglichst früh zu erkennen. Dadurch ergibt sich die Notwendigkeit bereits während der Entwicklung zu testen und nicht erst nachdem die Entwicklung (scheinbar) abgeschlossen ist. Bestimmte Entwicklungstechniken wie Extreme Programming (XP) und Refactoring setzten ein paralles Entwickeln und Testen sogar als unabdingar voraus.
  • Möglichst automatisiertes Testen
    Manuelles Testen ist sehr arbeits- und zeitintensiv und zusätzlich auch sehr fehleranfällig. Folglich ist es von großem Vorteil, sowohl für die Testaufwände als auch für die Menge entdeckbarer Fehler, wenn der Großteil der Software automatisiert getestet werden kann.

Open Source Tool: JUnit (Java only)

Bei JUnit handelt es sich um ein Open Source Unit Testing Framework, welches das automatisierte Testen von Java Software ermöglicht. Mittlerweile existieren schon einige Ableger von JUnit, die sich schwerpunktmäßig auf bestimmte Umgebungen spezialisieren, etwa HttpUnit zum Testen von HTML basierten Oberflächen. Wie bereits bei dem zuvor erwähnten Ant, bieten die meisten Java Entwicklungsumgebungen eine graphische Integration von JUnit an.

JUnit Testrunner für Swing
JUnit Testreport aus Apache Ant
Durch JUnit erzeugte Testergebnisse

Integrierte Entwicklungsumgebung (IDE)

Aufgabe

Für ein produktives Entwicklungsumfeld ist es notwendig, die bereits vorgestellten Tools effizient miteinander zu verbinden. Hierzu werden in der Regel integrierte Entwicklunsgumgebungen, sogenannte IDEs, verwendet, die dem Entwickler alle notwendigen Werkzeuge gebündelt zur Verfügung stellen. Folgende Merkmale sollte eine modernen IDE besitzen:

  • Leistungsfähiger Editor
    Die meiste Zeit der Entwicklung besteht aus Erstellen und Editieren von Quellcodedateien. Entsprechend sollte die IDE diese Arbeit so komfortabel wie möglich gestalten. Hierzu gehören zum Beispiel Features wie automatische Vervollständigung, Formatierung und sprachbezogene Darstellung des Quellcodes.
  • Gute Projektübersicht
    Die IDE sollte eine möglichst gute Übersicht über die gesamte Projektstruktur bieten und umfangreiche Navigationsmöglichkeiten vorsehen. Dies beinhaltet etwa eine Klassenhierarchie bei objektorientierten Sprachen sowie kontextbezogene Suchmöglichkeiten.
  • Integration weiterer Tools
    Die IDE sollte eine einfache Schnittstelle bieten, um weitere Tools selbst erstellen, oder bereits bestehende anbinden zu können.

Open Source Tool: Eclipse (Mainly Java)

Eclipse ist eine erweiterbare, auf Java basierende IDE, die das komfortable Entwicklen mit Java und anderen Sprachen ermöglicht. Sie zeichnet sich neben ihren eigenen Features, erwähnt sei hier zum Beispiel die hervorragende Refactoring Unterstützung, durch einen starken Integrationscharakter aus, der das Einbinden externer Tools ermöglicht. Insbesondere können alle zuvor erwähnten Open Source Tools integriert eingesetzt werden.

Eclipse IDE
Eclipse IDE

Fazit

Zusammenfassend läßt sich sagen, daß es problemlos möglich ist, eine vollständige Java Entwicklungslandschaft basierend auf Open Source Tools zu schaffen. Der Verbreitungsgrad der vorgestellten Werkzeuge spricht sowohl für ihre Qualität, als auch für ihre praktische Anwendbarkeit, was in zahlreichen kleinen wie großen eigenen Projekten bestätigt werden konnte.

Referenzen

CVS Home
(http://ximbiot.com/cvs/wiki/index.php)

Bugzilla Project Home Page
(http://www.bugzilla.org/)

Apache Ant
(http://ant.apache.org/)

JUnit
(http://www.junit.org/)

Eclipse
(http://www.eclipse.org/)

Zum Geschaeftsbreich Competence Center
Schulung
Online Artikel
Gründe warum Sie mit eclipse entwickeln sollten, erfahren Sie im Online Artikel zur eclipse IDE.
Newsletter abonnieren

Competence Center

Veröffentlichungen

Artikelübersicht

Service