Von Michael Kluge, Stand: November 2012

Inhaltsverzeichnis:

Abstrakt

Die Dokumentation von fehlerhaftem Verhalten einer Anwendung mit Hilfe von Bugtrackern ist in großen Softwareprojekten gängige Praxis. Doch auch in kleinen und privaten Projekten ist die Nutzung solcher Tools sinnvoll. Dieses Dokument soll einen kurzen Überblick über die Motivation, einige gängige Tools zum Dokumentieren von fehlerhaftem Code und Tipps zu ihrer Beseitigung geben.

Der Webentwickler Savage führt in seinem Artikel Gründe für die Nutzung von Bugtrackern in privaten Projekten auf. Demnach führe das häufige und alleinige Arbeiten häufig fälschlicherweise zu der Auffassung, man kenne alle Probleme und Schadstellen des Quellcodes; eine Dokumentation sei überflüssig, da man sich später daran erinnere. Zudem sei es eine gute Angewohnheit, sich die generelle Nutzung eines Bugtrackers anzugewöhnen. So müsse man sich nicht umstellen, wenn man an größeren Projekten arbeite.

In größeren Projekten kommen zudem weitere Vorteile zum Tragen. So kann zum einen die Kommunikation innerhalb des Teams wie auch außerhalb zwischen Entwicklern und Kunden verbessert werden. Eine einheitliche Dokumentation, komplexe Suchanfragen, hohe Verfügbarkeit, Priorisierung und Kategorisierung von Fehlern mit Hilfe von Bugtracking Systemen tragen zur erhöhten Produktivität bei.

 

Software

In Folge wird eine Übersicht gängiger Tools gegeben. Neben der Möglichkeit zur Dokumentation von Fehlern bieten einige des Weiteren Projektmanagement-Funktionen wie ein eigenes Wiki, Feature-Requests oder die Integration einer Versionsverwaltung an. Alle untersuchten Tools weisen eine Stable-Version auf, werden derzeit weiterentwickelt und lassen sich per Demo-Installation über den Webbrowser ausprobieren.

Bugzilla

Einer der am weitesten verbreiteten Bug-Tracker, wird von einer Vielzahl an namhaften Unternehmen wie Apache, GNOME, Facebook und NASA verwendet. Ein sehr mächtiges Tool mit hoher Sicherheit und der Möglichkeit, Bugs per Email einzutragen und zu ändern. Ermöglicht umfangreiche Suchanfragen; bietet jedoch nur wenige Projektmanagement Funktionen. Benötigt Root-Access auf dem Webserver.

MantisBT

Freier Bug-Tracker mit Web-Oberfläche und vielen Projektmanagement Funktionen wie RSS-Feeds, Chat und Wiki. Ermöglicht umfangreiche Suchanfragen. Mit MantisTouch existiert ein mobiler Client für iPhone, Android und Windows Phone, dieser ist allerdings kostenpflichtig.

Trac

Timeline, Wiki, Commit-Messages, Roadmap und SVN-Repository Anzeige sind nur einige Funktionen, die Trac neben der Möglichkeit zum Tracken von Bugs auf einer intuitiven Bedienungsoberfläche unterbringt. Wird unter anderem von großen Projekten wie WordpressPidgin und jQueryverwendet.

Redmine

Redmine wurde stark von Trac beeinflusst und bietet ein vielfältiges Berechtigungssystem zur Benutzerkontrolle sowie einen eigenen kostenlosen mobilen Client für iPhone und Android an.

Fossil

Fossil ist in C geschrieben und benutzt eine SQLite Datenbank. Dank einer einzelnen ausführbaren Datei gestaltet sich die Installation sehr einfach. Neben der Funktion zum Bug Tracking bietet es Projekt-Wikis an. Es gibt weder einen Desktop-Client, noch eine deutschsprachige Version.

WebIssues

Open-Source Tool zum Dokumentieren von Bugs mit der Möglichkeit des Exportierens nach HTML, PDF und CSV und der Versendung von Benachrichtigungen per Email. Kaum zusätzliche Projektmanagement Funktionen. Unterstützt mittlerweile den Zugriff per Webbrowser, dessen Oberfläche sich vielfältig anpassen lässt.

Jira

Sehr umfangreicher aber auch kostenpflichtiger Bug-Tracker mit vielen Projektmanagement Funktionen. Wahlweise Eigeninstallation oder Möglichkeit zur Nutzung der Server des Herstellers, sodass ein Installationsaufwand entfällt. Empfehlenswert für wichtige, kommerzielle Projekte.

 

 BugzillaMantisBTTracRedmineFossilWebIssuesJira
HerstellerMozilla FoundationMantis TeamEdgewall SoftwareJean-Philippe LangD. Richard HippWebIssues TeamAtlassian
LizenzMPLGPLBSDGNU v2BSDGNU v3proprietär
KostenkeinekeinekeinekeinekeinekeineGering bis moderat (gem. Anzahl Benutzer)
Source CodefreifreifreifreifreifreiNicht frei
DatenbankenMySQL, PostgreSQL und OracleMySQL, MS SQL oder PostgreSQLSQLite, PostgreSQL, oder MySQLMySQL, PostgreSQL, Oracle, SQL Server, SQLiteSQLiteMySQL, PostgreSQL oder SQLkA
EntwicklungsstandStable, wird weiterentwickeltStable, wird weiterentwickeltStable, wird weiterentwickeltStable, wird weiterentwickeltStable, wird weiterentwickeltStable, wird weiterentwickeltStable, wird weiterentwickelt
Web ClientJaJaJaJaJaJaJa
Desktop ClientJa (Windows, Linux, Mac)Ja (Windows, Linux, Mac), DrittanbieterJa (Windows, Linux, Mac), DrittanbieterJa (Windows, Linux, evtl. Mac)NeinJa (Windows, Linux, Mac)Ja (Windows, Linux, Mac)
Mobile ClientJa (iPhone, Android), DrittanbieterJa (iPhone, Android und Windows Phone), kostenpflichtigNeinJa (iPhone, Android)NeinNeinJa (iPhone, Android)
Demo UmgebungJaJaJaJaJaJaJa
Dokumentation / SupportExzellent (große Community, aber auch Paid Support)GutGutGutGutGutExzellent
Benötigt WebserverJaJaJaJaNeinJaJa
Anspruch Installationmoderatmoderatmoderatmoderatgeringmoderatnicht vorhanden / gering
DeutschsprachigJaJaJaJaNeinJaJa
Projekt WikiJa (Addon)JaJaJaJaNeinJa (Confluence zusätzliche Kosten)
Projektmanagement-FunktionenwenigeumfangreichumfangreichumfangreichwenigewenigeSehr umfangreich (teilweise m. zusätzliche Kosten)

 

 

Bug Fixing

Nachdem das Fehlverhalten der Software dokumentiert wurde, gilt es, den fehlerhaften Quellcode zu identifizieren und auszubessern. Einen groben Anhaltspunkt hierfür bietet meist bereits die Dokumentation. So sollte im Vorwege bereits akribisch aufgeschrieben werden, unter welchen Umständen das Problem aufgetreten ist. Im Folgenden werden einige Tipps und Referenzen zum Ausbessern von Programmfehlern gegeben.

“Making Programs Fail”

Im Buch von Zeller heißt es, dass bevor mit dem eigentlichen Debuggen begonnen werden könne, das Programm zunächst in einen Zustand gebracht werden müsse, in dem es getestet werden könne – genauer gesagt müsse es mit der Absicht ausgeführt werden, den Fehler zu erzwingen (Reproduktion).

Relevanten Code identifizieren

Nun gilt es, den für den Fehler verantwortlichen und den nicht relevanten Code zu identifizieren, und das Problem dadurch einzugrenzen. Matloff bezeichnet diesen Prozess in seiner Abhandlung über Debugging als Vorgang der schrittweisen Validierung von Annahmen – also der Überprüfung von Dingen, die ein Programmierer für richtig annimmt, die sich gegebenenfalls aber als nicht richtig herausstellen. Ein übliches Mittel hierbei ist der Ansatz des “Teile und herrsche” oder der binären Suche: Falls man beispielsweise bemerkt, dass der Wert einer Variablen am Ende des Quellcodes den falschen Wert aufweist, überprüft man dessen Wert in der Mitte des Quellcodes erneut. Ist er bereits an dieser Stelle fehlerhaft, so springt man wiederum zur Hälfte dieses Teils und grenzt so den Ursprungsort des Fehlers schrittweise ein.

Siehe hierzu auch den Artikel von Pruehs.

Gut, besser, Debugger

Lässt man sich auf den Vergleich von Kolawa ein, der die Nutzung von Print- Debugausgaben als ein Relikt der Bronzezeit der Softwareentwicklung bezeichnet, so gehören die heutzutage verfügbaren Debugger, mit der Möglichkeit, einen Fehler automatisch und schrittweise auf seinen Ursprungsort zurückzuverfolgen, der Neuzeit der Softwareentwicklung an.

Aus Fehlern lernen; ein Fazit

Gut, wenn das Debuggen Software fehlerfrei macht. Noch besser ist es, wenn man aus Fehlern lernen kann und dadurch ein Auge für fehlerträchtigen Quellcode bekommt. So gesehen kann die konsequente Benutzung von Bugtrackern gleichwohl zum Lernprozess beitragen und die Anzahl zukünftig gemachter Fehler verringern.

Referenzen

[Savage] Why Tracking Bugs In Personal Projects Matters; December 9, 2009; Zugriff November 27, 2012 http://www.brandonsavage.net/why-tracking-bugs-in-personalprojects-matters/

[Natarajan] Top 10 Open Source Bug Tracking System; August 31, 2010; Zugriff November 28, 2012 http://www.thegeekstuff.com/2010/08/bug-tracking-system/

[Zeller] Why Programs Fail: A Guide to Systematic Debugging; July 3, 2009; Zugriff November 27, 2012 http://www.whyprogramsfail.com/

[Kolawa] The Evolution of Software Debugging; Entstehungsdatum unbekannt; Zugriff November 28, 2012 http://www.parasoft.com/jsp/products/article.jsp?articleId=490

[Matloff] Guide to Faster, Less Frustrating Debugging; April 4, 2002; Zugriff November 28, 2012 http://heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/Debug.html

[Pruehs] Guide to Faster, Less Frustrating Debugging; February 21, 2012; Zugriff November 28, 2012 http://www.npruehs.de/?p=121

  • No labels