Spuren im Wald
Das in Python geschriebene Trac verbindet wie sein C-Vorgänger CVStrac Versionsverwaltung und Wiki, ein neues Werkzeug, das Entwickler selbst erweitern können.
- Jochem Huhmann
Ähnlich wie das Versionsverwaltungssystem Subversion, das als moderner Nachfolger zu CVS entstand, hat Trac einen Vorläufer in CVStrac, das schon einen webbasierten CVS-Repository-Browser, einen Bugtracker und ein integriertes Wiki-System zur Verfügung stellt. CVStrac ist allerdings als Standalone-C-Programm mit minimalem Featureset realisiert, was zwar eine einfache Installation sicherstellt und die Hardwareanforderungen in engen Grenzen hält, jeglicher Erweiterbarkeit und Anpassung aber eher abträglich ist.
Trac dagegen ist in Python geschrieben, benötigt eine Version ab 2.3 und benutzt SQLite als Datenbank-Backend durch Einbindung von PySQLite. Neuere Versionen unterstützen außerdem PostgreSQL (ab Version 0.9) und MySQL (ab 0.10). Als Template-System für die HTML-Erzeugung kommt ClearSilver zum Einsatz. Die Auslieferung der Seiten per HTTP kann wahlweise ein eingebauter Server übernehmen oder einem vorhandenen Webserver überlassen bleiben, entweder per CGI oder FastCGI. Die direkte Ausführung von Python-Code per Apache und mod_python (ab 3.1.3) zählt ebenfalls zu den Optionen. Trac steht als freie Software unter der BSD-Lizenz zur Verfügung und darf Bestandteil kommerzieller Projekte sein beziehungsweise als Basis für quelloffene und kommerzielle Produkte dienen.
Wie die Häufung von Versionsnummern im vorigen Absatz vielleicht vermuten lässt, kann die Installation von Trac auf einem existierenden Produktionssystem zu einer Herausforderung geraten. Vor allem die Verwendung von mod_python, das Entwicklerversionen dieses Moduls und des Apache-Servers voraussetzt, kann zu Schwierigkeiten führen, wenn auf dem System schon ein Webserver produktiv zum Einsatz kommt. Ähnliches gilt für eventuell eingesetzte Versionen von Python, SQLite und PySQLite. Trac ist hier teilweise wählerisch, sodass eine Lektüre des Installation Guide angeraten ist. Beschränkt man sich auf den eingebauten HTTP-Server und ein Betriebssystem mit einer Standardinstallation aus einem gut gepflegten Paketsystem, ist das Problem in der Regel keins: Auf Debian-basierten Systemen (einschließlich Ubuntu) reicht ein apt-get install trac und auf Mac OS X mit DarwinPorts führt ein port install trac ohne weitere Eingriffe zum gewünschten Ergebnis.
Der nahe liegenden Idee, Trac auf einem dedizierten Server zu installieren, steht die Einschränkung im Wege, dass das Subversion-Repository in aktuellen Versionen noch lokal vorliegen muss. Die Windows-Versionen der Python-Bindings unterstützen immerhin netzwerktransparente UNC-Pfade (Universal Naming Convention), sodass hier theoretisch der Zugriff auf ein entferntes Repository möglich ist, obwohl diese Methode unter anderem aus Performancegründen nicht empfehlenswert ist.
Wiki und Sourcecode-Browser
Die Startseite eines Projekts enthält nicht nur wie alle Trac-Seiten eine Navigationsleiste zu einzelnen Komponenten des Systems, sondern stellt gleichzeitig den Einstiegspunkt zum integrierten Wiki dar. Im Auslieferungszustand enthält die Startseite eine kurze Beschreibung von Trac und Links zu den eingebauten Hilfeseiten sowie auf externe Dokumentation. Die Inhalte sind frei editierbar, hier können Entwickler das allgemeine Design ihres Projekts festhalten, Dinge wie Datenformate oder Installationshinweise bereitstellen und im Idealfall parallel zur Entwicklung des Codes zumindest eine rudimentäre Dokumentation erstellen.
Auf allen Wiki-Seiten lassen sich über Links oben auf der Seite (unter der eigentlichen Trac-Navigation) nützliche Dinge wie eine Liste der zuletzt geänderten Wiki-Seiten, eine alphabetisch sortierte Seitenliste und die Entwicklungsgeschichte der aktuellen Seite erreichen, während sich die Buttons zum Bearbeiten der Seite und zum Anhängen externer Dateien am unteren Seitenrand befinden.
Das unterstützte Wiki-Markup lehnt sich an andere Wikis an, vor allem MoinMoin (moinmoin.wikiwikiweb.de) hat offenbar Pate gestanden. Außer den üblichen Auszeichnungsoptionen wie Text, Verlinkungen, Überschriften und Listen können Autoren einfache Tabellen verwenden. Eine Besonderheit sind Makros, die ähnlich wie Funktionen mit Argumenten arbeiten und dynamische HTML-Ausgaben erzeugen können. Eine Reihe praktischer Makros enthält Trac von vornherein, so lassen sich beispielsweise Zeitstempel oder ein Inhaltsverzeichnis der Seite einfügen. Spezielle Wiki-Notationen zum Verweis auf existierende Subversion-Commits oder Trouble-Tickets (siehe weiter unten) fehlen ebenfalls nicht.
Revisionsstand direkt einsehbar
Initialisierung
Als erster Schritt nach der Installation muss jemand für jedes gewünschte Projekt eine Arbeitsumgebung mit dem Kommando trac-admin initenv erzeugen. Das Projektverzeichnis (hier liegen Arbeitsdateien wie Wikiseiten und die Konfiguration) ist frei wählbar. Allerdings muss der Benutzer, unter dessen Account der verwendete Webserver läuft, über Schreibrechte auf dieses Verzeichnis verfügen.
trac-admin fragt jetzt interaktiv nach dem Projektnamen, dem Pfad zum Subversion-Repository (falls vorhanden) und einem Pfad zu den zu verwendenden HTML-Templates (mit sinnvoller Voreinstellung). AnschlieĂźend startet das Kommando tracd -port 8000 den Trac-Daemon, woraufhin unter der URL http://localhost:8000 eine Auswahlliste der angelegten Projektumgebungen erscheint. Folgt man einem dieser Links, landet man auf der Startseite des betreffenden Projekts.
Hat man bei der Initialisierung eines Projektes auf ein Subversion-Repository mit dazugehörigen Quelltexten verwiesen, enthält die Navigationsleiste den Punkt „Browse Source“. Hier findet man den Verzeichnisbaum und kann den aktuellen Stand der Quellen sowie ältere Revisionen und Kommentare zu eingecheckten Änderungen einsehen. Dies schließt solche zwischen Revisionen samt einer diff-ähnlichen Ausgabe der Quelltexte ein. Kommentare zu Modifikationen sind außerdem im klassischen ChangeLog-Format und als RSS Feed verfügbar. Nützlich ist die Unterstützung der Notation #Ticketnummer in Kommentaren, die direkt auf das Ticket eines Bugreports verweisen kann. Auf diese Weise lassen sich berichtete Fehler direkt mit dem zu ihrer Behebung geschriebenen Code verknüpfen.
Trac stellt ĂĽbrigens kein allgemeines Frontend zu Subversion dar, Ein- oder Auschecken von Quelltexten sowie deren Bearbeitung sind nicht vorgesehen. Der Sourcecode-Browser ist zudem optional, Trac kann durchaus als reines Wiki mit integriertem Bugreportsystem dienen.
Bugreportsysteme wie Bugzilla haben sich mittlerweile nicht nur bei größeren Projekten als unverzichtbar erwiesen, wenn es darum geht, Softwarefehler formalisiert festzuhalten, Zuständigkeiten zu verwalten und allgemein den Fortschritt des Entwicklungsprojekts zu systematisieren statt dies dem Gedächtnis oder Notizen einzelner Entwickler zu überlassen. Die Inhalte des Systems avancieren damit schnell zu wertvollen Informationssammlungen mit häufigen Querverweisen. Auf der anderen Seite dienen Wikis heute oft dazu, mit geringem Aufwand reich verlinkte Informationssammlungen zu erzeugen und zu verwalten, ohne dafür spezielle Applikationen vorauszusetzen (man denke nur an Wikipedia).
Trac verbindet die Vorzüge eines Wiki und Bugreportsystems, indem es neben dem üblichen Wiki-Markup für einfache Textformatierungen Hyperlinks, Tickets und Commit-Kommentare einbezieht. Im typischen Entwicklungszyklus eines Projekts kann sich dies in der Praxis so darstellen: Beim Testen der Software (durch Entwickler oder Anwender) entdeckt jemand einen Bug oder eine fehlende Eigenschaft und hält das in einem Ticket fest. Dabei kann er außer einer kurzen und vollständigen Beschreibung sowie einigen Details (Priorität, Version der betroffenen Software, betroffene Komponenten et cetera) Dateien (etwa Screenshots) anhängen.
Ein Entwickler mit den nötigen Rechten weist das Ticket einem zuständigen Kollegen zu, der den betreffenden Code aus dem Subversion-Repository auscheckt und den Fehler beseitigt; dabei kann er dem Ticket weitere Informationen wie Nachfragen zu näheren Details hinzufügen. Nachdem seine Version des betreffenden Codes zufriedenstellend arbeitet, checkt er ihn wieder in das Repository ein und kann sich im Kommentar des Commits mit der Notation #Ticketnummer auf das Ticket mit der betreffenden Nummer beziehen, Trac stellt bei der Darstellung des Kommentars im Source-Browser automatisch einen Link auf das Ticket her. Umgekehrt kann man in Tickets durch die Formatierung [Commitnummer] auf den Kommentar eines existierenden Commits verweisen.
Da das Sammeln von Fehlerberichten nicht viel wert ist, wenn man sie nicht nach bestimmten Kriterien ausgeben lassen kann, bietet Trac unter dem Menüpunkt „View Tickets“ eine Auswahl von Listen - beispielsweise zur Ausgabe von einem bestimmten Entwickler zugeordneten Tickets. Hinter den Kulissen handelt es sich um recht schlichte SQL-Abfragen, sodass sich bei Bedarf weitere Report-Typen hinzufügen lassen.
Milestones, Roadmap, Timeline
Trac erlaubt das Festsetzen von Milestones, die bestimmte angetrebte Zustände (eine bestimmte Version oder implementierte Features) im Leben eines Projektes markieren. Tickets können sich auf einen solchen Milestone beziehen. Der Menüpunkt „Roadmap“ listet Milestones zusammen mit existierenden offenen oder geschlossenen Tickets und zeigt so den erreichten Fortschritt in Bezug auf das angestrebte Ziel. Die Roadmap ist unter anderem im iCalendar-Format verfügbar und lässt sich deshalb beispielsweise mit Mozilla Calendar oder Apples iCal abonnieren. Zum Anlegen von Milestones dient trac-admin.
Der Menüpunkt „Timeline“ wiederum fasst alle Ereignisse im Projekt auf einer Zeitschiene zusammen: neu angelegte oder geänderte Wiki-Seiten, erzeugte oder abgeschlossene Tickets und eingecheckte Änderungen im Subversion-Repository. Die Timeline kann Trac auch als RSS Feed zur Verfügung stellen.
Zwar zählt Trac zu den Webapplikationen, allerdings müssen die Verantwortlichen für Verwaltungsaufgaben wie das Vergeben von Rechten für Benutzer, Im- und Export von Wiki-Seiten, Backup der Projekt-Umgebung, Anlegen von Milestones et cetera zurzeit noch trac-admin auf der Kommandozeile bemühen, das mit rund 50 Optionen nicht gerade übersichtlich erscheint und zudem einen lokalen Benutzeraccount erfordert. Es gibt allerdings schon ein Plug-in, das für viele Features eine HTML-Oberfläche anbietet, mit Version 0.11 soll es schließlich in die Weboberfläche integriert sein.
Viele Optionen einmal angelegter Umgebungen lassen sich später nur noch durch manuelles Bearbeiten der Konfigurationsdatei conf/trac.ini im jeweiligen Projektverzeichnis ändern. Die Datei ist aber gut dokumentiert und strukturiert.
Fazit
Zusammenfassend lässt sich sagen, dass Trac schon mit einer Minimalinstallation als Wiki und Bugreportsystem ein nützliches Werkzeug ergibt. Integriert mit einem existierenden Subversion-Repository entsteht daraus eine durchaus mächtige Umgebung, die trotz schlichter Oberfläche die Softwareentwicklung im Team überschaubarer machen kann.
Etwas schwierig sind die unter Umständen nicht ganz triviale Installation und die Administration per Kommandozeile und Konfigurationsdatei. Die bisher noch fehlende Lokalisierung (die Oberfläche ist komplett in englischer Sprache) wollen die Entwickler nachholen, sobald sich die Eigenschaftenliste stabilisiert hat. Python und die Template-Engine unterstützen dies prinzipiell.
Per Plug-ins ist Trac erweiterbar, etwa zur Integration des Dokumentationsgenerators Doxygen oder der Verwendung anderer Versionskontrollsystemen auĂźer Subversion.
Jochem Huhmann
ist freiberuflicher Autor und Berater.
iX-WERTUNG
- [+] praxisgerechte Integration von Wiki, Ticket-System und Sourcecode-Browser
- [+] überschaubare und durchdachte Oberfläche
- [+] vielfältig erweiterbar
- [-] unter Umständen komplexe Installationsvoraussetzungen
- [-] Verwaltung in der getesteten Version noch per Kommandozeile
(hb)