Doc What`s Up Handbuch

Philipp Bartsch (DocWhatsUp[AT]gmx.net)

v0.93, 23.07.2003

Dieses Dokument beschreibt die Installation und Nutzung der Fehleranalyse- und -reportbibliothek Doc What`s Up (DWU).


1. Einführung

2. Was Doc What`s Up ist

3. Nutzung

4. Integrationsszenario

FAQ

Lizenztext GPL



1. Einführung

Copyright (C)2003 Philipp Bartsch.
This document is free; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

Die aktuellste Variante dieses Dokuments und DocWhatsUp sind auf docwhatsup.sourceforge.net zu finden.




2. Was Doc What`s Up ist

Da kein Programm perfekt ist und Fehler, Bugs genannt, Teil jedes Entwicklungsprozesses sind, stellt sich zwangsläufig die Frage, wie man als Entwickler mit Softwaremängeln umgeht. Viel zu viele beschränken sich bei der Fehlerbehandlung darauf, einen Stacktrace in einer Log-Datei verschwinden zu lassen und dem Nutzer kryptisch mitzuteilen, das ein Fehler aufgetreten ist. Dadurch geht die Erfahrungen des Kunden mit Mängeln am Produkt, eine wertvolle Informationsquelle, verloren und kann nicht in die Weiterentwicklung des Produkts einfließen.
DWU ermöglicht es, das Auftreten eines Fehlers automatisch zu dokumentieren und ohne Zusatzprogramme per Mail zu melden. Es ist darauf ausgelegt, das technisch unbedarfte und "ungeduldige" Nutzer nicht verschreckt werden.
DWU arbeitet als eigenständige Bibliothek und muss in kritischen Programmabschnitten explizit aufgerufen werden, wobei sich der Umfang des Schnittstelle auf 1 bis 2 Methodenaufrufen beschränkt.


2.1 Eigenschaften


2.2 Funktionsweise

DWU erstellt ein Profil des auftretenden Fehlers, indem es einerseits Informationen zum Fehler und Rechner sammelt und speichert es in einer lokalen Profilqueue ab. Anschliessend kann mit dem Profil auf verschiedene Weise gearbeitet werden:

Soll ein Profil nun übertragen werden, werden die Profildaten in ein angegebenes Format exportiert und anhand der vorhandenen Mailingkonfiguration übermittelt. Ist es übertragen worden, wird es lokal gelöscht und seine Signatur vermerkt.


2.3 Installation

DWU liegt als fertiges JAR Paket vor und muss lediglich im Classpath platziert oder der Classpath um den Pfad von DWU erweitert werden. Die einzige Klasse, mit welcher man später in Kontakt kommt, ist org.shaker.dwu.DocWhatsUp.




3. Nutzung


3.1 Das Fehlerprofil

Kern eines Fehlerfalls ist ein Fehlerprofil (BugProfile), das dienliche Informationen zum Fehler und zum Zustand des Rechner aufnimmt. Grundsätzlich enthält ein Fehlerprofil das Exceptionobjekt des Fehlers (oder eine String Fehlerbeschreibung) und die Fehlerkategorie.
Da das Fehlerprofilobjekt, von Properties abgeleitet ist, können per put(keystring, valuestring) zusätzliche Informationen, die für den Fehlerkontext relevant sind, übergeben werden; besonderen Mailformaten wie Bugzilla müssen weitere Informationen übergeben werden, damit sie gültig sind. Die Standardaspekte eines Fehlerfalls werden weiter unten näher erläutert.

Die Dokumentation der Rechnerinformationen wird durch die Datei filter.properties, die sich im Wurzelverzeichnis von dwu.jar befindet, bestimmt. Die Datei besteht aus einer durch Zeilenumbrüche separierten Auflistung von System Property Keys (beispielsweise user.dir\n java.runtime.version\n usw.): der Inhalt jedes gelisteten Properties wird zum Fehlerzeitpunkt ausgelesen und dokumentiert.
Es ist zu beachten, das filter.properties nur manuell bearbeitet werden kann. Sie sollten vor der Auslieferung auch nur die interessantesten Properties bestimmen, um den Umfang der Fehlermail gering zu halten, denn die von ihr bestimmten Properties werden bei JEDEM Fehler dokumentiert. Wird keine Filterdatei gefunden, werden die Version der Java Runtime, der Name des Betriebssystems und das Fehlen der Filterdatei als weiterer Fehleraspekt im Fehlerprofil vermerkt.

Ein Beispielaufruf zur Erstellung eines Fehlerprofils:
BugProfile bugProfile = DocWhatsUp.createBugProfile(exception,                 //exception
                                                    "XML Importfehler"[,       //Fehlerkategorie
                                                    "bugs@projektseite.org"]); //Zieladresse

3.2 Woraus das Fehlerprofil besteht

Prinzipiell besteht ein Fehlerprofil aus den Informationen, die Sie ihm übergeben (Bsp: im Rahmen einer Zählschleife ist vielleicht der Umfang von i oder dem Iterator interessant). Einige Standardinformationen sind jedoch schon vordefiniert, weil sie sich einerseits als generell interessant herausgestellt haben und andererseits für bestimmte Mailformate unabdingbar sind.

Die Standardschlüssel und ihre Auswirkung auf das Mailformat

Schlüssel: BugProfile.<> Erklärung Auswirkung Bugzilla Format Auswirkung auf HTML&Text Format
ERROR_CLASS Der Fehlercode-String ist für die Erstellung der Fehlerprofilmail erforderlich. Er spezifiziert, aus welcher Kategorie der Fehler kommt und wird von jedem Ausgabeformat vorausgesetzt. Benötigt Die Fehlerklasse wird als "component" vermerkt und muss einen Wert enthalten, der Bugzilla bekannt ist, da die Submission sonst verweigert wird. Benötigt Wird Teil der Betreffzeile und hilft so, eindeutige Betreffs zur Mailfilterung zu schaffen. Der Aufbau der Betreffzeile ist wie folgt:
DWU caught an error in: "$ERROR_CLASS": $MESSAGE
PRODUCT_NAME Die Produktbezeichnung. Sie wird mittels System.getProperty("product.name") ausgelesen. Benötigt Der Produktname wird als "product" vermerkt und muss einen bekannten Wert enthalten, da die Submission sonst verweigert wird. Teil der Fehlerbeschreibung im Mailbody.
PRODUCT_VERSION Die Produktversion. Sie wird mittels System.getProperty("product.version") ausgelesen. Benötigt Der Produktname wird als "version" vermerkt und muss einen bekannten Wert enthalten. Teil der Fehlerbeschreibung im Mailbody.
USER_COMMENT Der Nutzerkommentar, also der Inhalt des Kommentarfeldes im Fehlerdialog (wird automatisch ausgelesen). Der Kommentar des Nutzer wird Teil der Fehlerbeschreibung und wird nicht vorausgesetzt. Teil der Fehlerbeschreibung im Mailbody.
MESSAGE Eine kurze Fehlerbeschreibung. Wird als "short_desc" verwendet. Wird in der Betreffzeile und in der Fehlerbeschreibung im Mailbody hinterlegt.
MAIL_TO Die Mailadresse des Empfängers. Wird Sie nicht direkt durch setProperty(BugProfile.MAIL_TO,...) übergeben, wird sie aus settings.dwu ausgelesen, in welchem ein Standardempfänger (neben weiteren) angegeben werden kann.
Siehe auch: 3.5 DWU Konfiguration
Hier muss der entsprechende bugzilla account übergeben werden, über den mail submissions vorgenommen werden können. -.
FORMAT Das zu verwendende Format für das Fehlerprofil. Mit Hilfe dieses Properties ist es möglich, Fehlerprofilen unterschiedliche Formate zuzuweisen, nach welchen sie zu verschicken sind. Wird kein Format bestimmt, wird das in settings.dwu beschriebene Standardformat verwendet.
Gültige Angaben sind: html, bugzilla und text.
Siehe auch: 3.5 DWU Konfiguration
Stellt sich heraus, das Bugzilla als Format gewählt wurde, jedoch nicht genügend Informationen für eine valide Meldung zur Verfügung stehen, wird auf das in settings.dwu beschriebene Ausweichformat zurückgegriffen (oder text, wenn nicht möglich)
Siehe auch: 3.5 DWU Konfiguration
-


3.3 Mit dem Profil arbeiten

Was kann man nun mit dem erstellten Fehlerprofil machen? Zunächst einmal: es ist lokal in der Queue gespeichert und verbleibt dort, bis es verschickt wird. Handelt es sich um einen weniger schwerwiegenden Fehler, der dem Nutzer nicht mitgeteilt werden muss, kann man ihn nach der Erstellung ignorieren und fortfahren, er würde später zusammen mit den anderen Fehlerprofilen versendet werden. Möchte man den Fehler gleich versenden lassen oder dem Nutzer mitteilen, bieten sich verschiedene Varianten an:


Der Fehlerdialog

Der Fehlerdialog enthält 3 Tabs:


Aufruf:
DocWhatsUp.showErrDialog(bugProfile,              // das Fehlerprofil
                         parentalFrame,			 
                         errorMessageForTheUser[, // eine Fehlernachricht für den Nutzer
                         hintMessageForTheUser]); // ein optionaler Hinweis/Workaround o.ä.
	


Der Infodialog

Der Infodialog beschränkt sich auf den Informationstab des Fehlerdialogs (siehe oben). Er erscheint übrigens auch an Stelle des Fehlerdialogs, wenn ein Fehler aufgetreten ist, der bereits gemeldet wurde, um redundanten Versand von Fehlerberichten zu vermeiden.

Aufruf:

DocWhatsUp.showMsgDialog(parentalFrame,			 
                         errorMessageForTheUser[, // eine Fehlernachricht für den Nutzer
                         hintMessageForTheUser]); // ein optionaler Hinweis/Workaround o.ä.


Der stille Versand

Der Aufruf dieser Methode erstellt aus allen in der Queue vorhandenen Profilen Mails und versucht, diese auf Basis der Mail-Konfiguration zu versenden. Damit diese Methode erfolgreich abschliesst, muss eine Verbindung zum Mailserver bestehen.

Aufruf:

DocWhatsUp.submitBugQueue();.


BlackBoard Panel: das schwarze Brett

Im Gegensatz zu den Fehler- und Infodialogen kann man das BlackBoard auch ausserhalb eines Fehlerkontexts, also ohne das Vorhandensein eines gerade aufgetretenen Fehlers, aufrufen. Das schwarze Brett kann beispielsweise als Panel im Über-Dialog-Bereich eines Programms platziert, oder aber als JDialog dargestellt werden.
Das BlackBoard stellt die aktuelle Mailkonfiguration und eine Fehlerstatistik dar, also wieviele Fehlerprofile inzwischen aufgetreten und wieviele bereits versendet wurden. Ausserdem kann in dieser Stelle der stille Versand gestartet werden.

Aufruf als Panel:

JPanel panel = DocWhatsUp.getBlackBoard(Window);

Aufruf als Dialog:
DocWhatsUp.getBBDialog(Window).show();


3.4 Mailkonfiguration

Die Mailkonfiguration beschreibt die für den Fehlerberichtversand zu verwendenen Server. Es gibt folgende Einstellungen:

Property Beschreibung Format
mail.from Die Absenderadresse username@hostname.tld
mail.host Der SMTP Server Standard URL (RFC 1738)
mail.host.port Der Port des SMTP Servers Zahl zwischen 1 und 65536 (Standard ist 25)
mail.pop Der zur POP Authentifizierung verwendete POP Server Standard URL (RFC 1738)
mail.pop.port Der Port des POP Servers Zahl zwischen 1 und 65536 (Standard ist 110)
mail.user Der Name des verwendeten Mailkontos String
mail.pass Das Passwort des Mailkontos String

Eine Beispieldatei:

#This properties file provides a default mail account setting. 
#NO FITNESS WARRANTY! Custom settings are preferred. 
#Please be fair and don`t misuse this account.
mail.from=yourname@yourhost.com
mail.pop=pop.yourhost.com
mail.host.port=25
mail.host=smtp.yourhost.com
mail.pop.port=110
mail.user=your_user_name
mail.pass=your_passwd
Gespeichert werden die Einstellungen in den zwei unterschiedlichen Dateien, die unterschiedliche Zwecke erfüllen: zum einen gibt es die Datei default.mta ("mta" wie Mail Transfer Agent), die sich im Wurzelverzeichnis der Datei dwu.jar befindet und zum anderen die Datei ~/.docwhatsup/custom.mta.
Erstere enthält eine Standardkonfiguration, die vom Produktanbieter (von Ihnen) mitgeliefert wird. Sie bezieht sich auf eine Adresse, die vom Produktanbieter eingerichtet wurde und von DWU zum Versand genutzt werden kann. Da nicht garantiert werden kann, das die Standardeinstellung funktioniert (der Nutzer könnte hinter einer Firewall arbeiten o.ä.), kann der Nutzer eine eigene Mailkonfiguration angeben, die in der Datei ~/.docwhatsup/custom.mta abgelegt wird. Es wird übrigens kein Nutzerpasswort (mail.pass) gespeichert, jenes wird im Gegensatz zur Standardkonfiguration bei jedem Versand abgefragt!

3.5 DWU Konfiguration

Neben den Angaben des zu verwendenden Mail Servers kann man mit Hilfe der Datei settings.dwu das Verhalten von DWU genauer steuern und sich durch geschickte Angaben in dieser Datei einige Schreibarbeit beim Aufruf der DWU Schnittstelle ersparen.
Neben den Signaturen der versendeten Fehlerreports dient diese Datei dazu, Standardwerte und Verhaltensweisen festzulegen. DWU besitzt keine Mechanismen, diese Werte selbständig zu manipulieren; sie sollten also, wie bei der oben erwähnten Datei filter.properties, vor der Auslieferung sinnvolle Werte setzen.

Schlüssel Erklärung
mailing Ist dieser Wert nicht auf "true" gesetzt, ist es nicht möglich, Mails per DWU zu versenden. Der Fehlerdialog wird keine Meldelasche enthalten und der Aufruf von DocWhatsUp.submitBugQueue() bleibt folgenlos.
dialogs Ist dieser Wert nicht auf "true" gesetzt, werden keine DWU Dialoge dargestellt.
cc Diesem Wert kann eine kommaseparierte Liste von Mailadressen übergeben werden, wobei JEDE Adresse JEDEM Fehlerbericht als zusätzlicher Empfänger mitgeteilt wird.
alt Dieser Eintrag bestimmt einen Ausweichempfänger für den Fall, das ein angefordertes Format nicht erstellt werden konnte, oder kein Empfänger spezifiziert wurde.
format Dieser Eintrag bestimmt das Standardformat der Mail. Mögliche Werte sind html, bugzilla und text. Sollten Sie hier ein kritisches Format eintragen, das einen bestimmten Informationsumfang benögt, der zum Fehlerzeitpunkt nicht befriedigt werden kann (wie Bugzilla), wird text verwendet! Ausserdem wird für den Fall, das ein Format nicht "gesättigt" ist, auf die unter alt angebene Empfängeradresse ausgewichen!
maintain Dieser Eintrag enthält die Adresse des DWU Maintainers. Ist dieser Wert vorhanden und mit einer validen Adresse versehen, verschickt DWU im Schatten von Fehlerberichten eigene Statusmeldungen, die anonymisierte Logmessages enthalten.
Sollten Sie nicht wünschen, das DWU eigene Berichte verschickt, entfernen Sie den Eintrag. Selbstverständlich können Sie (hoffentlich neben meiner Adresse ;)) auch eine eigene Adresse einfügen, wenn Sie sich an der Weiterentwicklung von DWU beteiligen möchten.

3.6 Die Fehlermail

Der Fehlerbericht ist eine Visualisierung des Fehlerprofils, enthält also einerseits die konkreten Fehlerdaten als auch die System Properties, die mittels filter.properties spezifiziert wurden. Wie dies im einzelnen aussieht, können Sie in Beispielen auf docwhatsup.sourceforge.net betrachten. Alternativ kann auch mittels "shell$java -jar dwu.jar" eine Test session gestartet werden, die in Abhängigkeit von Ihren Angaben einen Testreport erstellt.


4. Integrationsszenario

Sie arbeiten an einem Projekt und haben sich entschlossen, DWU als Feedback Agent zu installieren. Um DWU zu integrieren, bieten sich folgende Schritte an:





FAQ

DWU ist steht unter der GPL. Kann ich es trotzdem in meinem kommerziellen Programm nutzen ?

Es is möglich, DWU in Verbindung kommerziellen Produkten zu nutzen, ein entsprechender Zusatzparagraph ist Teil der Lizenz, wobei Veränderungen an DWU nachwievor der GPL unterliegen und damit offen sein müssen. Dieses ist allerdings auf die Nutzung der DocWhatsUp.java Schnittstelle beschränkt.
Es wäre nett, wenn Sie im Gegenzug zur Nutzung von DWU Ihre Erfahrungen einbringen würden :).

Warum wird nicht XML zur Speicherung der Einstellungen und Fehlerprofile genutzt?

So läuft DWU auch mit älteren JREs (getestet wurde es ab 1.2.2). XML Processing gehört erst seit 1.4 zum Umfang der JRE. Die würde bedeuten, dass das entsprechende Parser Framework entweder mit DWU oder mit dem überwachten Produkt ausgeliefert werden müsste, was den Umfang selbiger erheblich steigern würde.
Ich überlege allerdings, eine weitere Version anzubieten, die XML nutzt: wenn jemand daran interessiert ist, bitte melden!