Diese Arbeit befasst sich mit Gesichtspunkten der Softwareentwicklung, die direkten oder indirekten Einfluss auf das Verständnis von Quellcodes haben. Ein Ziel der Darstellung ist es, Probleme bei der Entwicklung von Softwaresystemen und im speziellen bei der Wartung von Software aufzuzeigen. Wichtige Eckpunkte stellen dabei die Dokumentation von Softwaresystemen und die gedankliche Gliederung von Softwaresystemen in Aspekte dar. Ein Aspekt stellt eine gedanklich kapselbare Einheit von Verhalten dar.
Darüber hinaus wird eingegangen auf relevante Randbedingungen, die die Dokumentation, das bedeutet die Wissensbewahrung, beeinflussen. Dazu gehören beispielsweise Softwareentwicklungsprozesse, Normen und die Teamarbeit. Dabei wird nicht außer Acht gelassen, dass die Qualität von bewahrten Informationen und Wissen maßgeblich durch die beteiligten Personen geprägt wird. Ziel ist es, Kernfaktoren aufzuzeigen, die grundlegenden Einfluss auf das Verstehen von Softwaresystemen haben. Es wird ein technischer Lösungsansatz skizziert, der zu einer Verbesserung der Dokumentationsmöglichkeiten von Softwaresystemen führt.
Der praktische Teil der Arbeit beinhaltet die prototypische Umsetzung wichtiger vorgestellter Ansätze zur Dokumentation von Quellcode. Die Lösung besteht aus einem Softwarepaket, das sich in den Implementierungsprozess von Java Anwendungen integrieren lässt. Die Integration in den Implementierungsprozess wird durch die Einbindung in die Softwareentwicklungsumgebung Eclipse und die Erweiterung von SnipSnap, einem einfachen Content Management System realisiert. Es ermöglicht eine einfache Bedienung während der Implementierung.
Inhaltsverzeichnis
1 Einleitung
1.1 Problemstellung
1.2 Zielsetzung
2 Hintergrund
2.1 Dokumentation von Softwaresystemen in der Softwareentwicklung
2.1.1 Dokumentation während der Implementierung
2.1.2 Typische Probleme im Rahmen der Wartung und Weiterentwicklung von Softwaresystemen
2.2 Qualitative Anforderungen an Softwaresysteme und deren Management
2.2.1 Einflussfaktoren auf die Dokumentation von Softwaresystemen während der Implementierung
2.2.2 Weiterentwicklung und Wartung von Software
2.3 Vorgehensmodelle in der Softwaretechnik
2.3.1 Betrachtung derunterschiedlichenVorgehensmodelle
2.3.2 Zusammenfassung
2.4 Einwirkungen des Menschen und des Arbeitsumfeldes auf die Dokumentation in der Softwareentwicklung
2.4.1 Mensch
2.4.2 Teamarbeit
2.4.3 Arbeitgeber
2.4.4 Kunde
2.4.5 Einflüsse des Arbeitsumfeldes auf die Erstellung einer Dokumentation
2.5 Informationsmanagement und Wissensmanagement in der Softwareentwicklung
2.5.1 Implementierung und Wartung
2.6 Zusammenfassung
3 Konzept einer quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen
3.1 Quellcodegebundene Dokumentation
3.2 Dokumentation von Aspekten in Softwaresystemen
3.3 Dokumentationselemente zum Bewahren von Wissen und Informationen
3.3.1 Dokumentationsvorlagen
3.4 Zusammenfassung
4 Technischer Lösungsansatz
4.1 Hypertext - Dokumentation
4.2 Quellcodegebundene Dokumentation
4.2.1 Abstrakter Syntaxbaum
4.2.2 Java-Quellcode in XML
4.2.3 Eudibamus
4.2.4 Funktionales Verhalten der Werkzeugunterstützung
4.2.5 Entscheidung
4.3 Zusammenfassung
5 Prototypische Umsetzung
5.1 Formularvorlagen in SnipSnap
5.1.1 Grundlegende Funktionsweise von SnipSnap
5.1.2 Erweiterungsmöglichkeiten von SnipSnap durch Makros
5.1.3 Formularansicht
5.1.4 Wissensmodell
5.2 Integration in die Entwicklungsumgebung
5.3 Anwendungsbeispiele
5.3.1 Implementierungsphase
5.3.2 Analyse- und Wartungsphase
5.4 Umsetzungen der Anforderung
5.5 Installation des Systems
6 Zusammenfassung - Fazit
7 Anhang
7.1 Abbildungsverzeichnis
7.2 Begriffsverzeichnis
7.3 Literaturverzeichnis
1 Einleitung
Softwareentwickler müssen derzeit möglichst schnell ihnen teilweise unbekannte Softwaresysteme verstehen, um geeignet auf die Wünsche der Kunden reagieren zu können. Das ist eine hohe Anforderung an die Wartbarkeit und Erweiterbarkeit bestehender Softwaresysteme. Den zentralen Punkt für das Verständnis von Softwaresystemen stellen die Dokumentation eines Softwaresystems und der Quellcode dar. Die Dokumentation spiegelt die Bewahrung der Informationen und des Wissens zu Softwaresystemen und Systemteilen wider, wohingegen der Quellcode die technische Verwirklichung repräsentiert. Zwischen der Dokumentation und dem Quellcode kommt es zu einem Bruch des Informationsflusses, da zwischen den beiden Elementen meist keine direkte Verbindung existiert. Diese Problematik wird in den Kapiteln 2.1 „Dokumentation von Softwaresystemen in der Softwareentwicklung“ und 2.5 „Informationsmanagement und Wissensmanagement in der Softwareentwicklung“ dargelegt. Darüber hinaus werden mögliche Einflüsse auf die Dokumentation im Kapitel 2.3 „Vorgehensmodelle in der Softwaretechnik“ und Kapitel 2.4 „Einwirkungen des Menschen und des Arbeitsumfeldes auf die Dokumentation in der Softwareentwicklung“ verdeutlicht. Die Dokumentation eines Softwaresystems kann wiederum auf die qualitativen Merkmale des Softwaresystems selbst Einfluss haben, dadurch dass Informationen und Wissen aus der Dokumentation für die Weiterentwicklung und Wartung des Systems genutzt werden. Im Kapitel 2.2 „Qualitative Anforderungen an Softwaresysteme“ wird diese Abhängigkeit veranschaulicht.
Eine Lösungsidee, den dargestellten Informationsflussbruch zwischen Dokumentation und Quellcode zu überbrücken, wird in Kapitel 3 „Konzept einer quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen“ veranschaulicht. Die Idee ist es, Quellcode mit Informationen direkt zu verknüpfen und diese Dokumentationsmöglichkeit in die Entwicklungsumgebung des Entwicklers zu integrieren, um dadurch den bestehenden Bruch zwischen Information und Quellcode zu überbrücken. Damit wird es möglich, dem Entwickler möglichst transparent wichtige Informationen während der Arbeit mit dem Quellcode anzubieten. Im Kapitel 3.2 wird veranschaulicht, dass Softwaresysteme die Umsetzung gedanklich kapselbarer Einheiten von Verhalten, im weiteren Aspekte genannt, darstellen. Dabei können Aspekte über den Quellcode verteilt sein oder aber mehrere Aspekte können in einer Quellcodestelle realisiert sein. Diese Idee, Verhalten in gekapselten Einheiten zusammenzuführen, ist auf programmiertechnischer Seite durch aspektorientiertes Programmieren bekannt.
Im Kapitel 4 wird aufgezeigt, welche technischen Ansätze möglich sind, um Quellcode und Dokumentation miteinander zu verknüpfen. Kapitel 5 beschreibt die technische Realisierung des Werkzeuges, das die Idee der quellcodegebundenen Dokumentation für Aspekte in Softwaresysteme umsetzt.
1.1 Problemstellung
Softwaresysteme bestimmen den Alltag der Menschen im 21. Jahrhundert. In den vergangenen Jahren hat die Abhängigkeit des Lebens der Menschen von Softwaresystemen stetig zugenommen und wird sich noch weiter verstärken. „In einigen Bereichen, wie Banken und Versicherungen, werden nahezu alle Dienstleistungen durch Software-Einsatz realisiert.“ [BalOO] Es gibt so gut wie keinen Bereich des Lebens, der nicht durch Softwaresysteme auf die eine oder andere Art und Weise beeinflusst wird. Das hat zur Folge, dass die funktionellen Anforderungen und Qualitätsanforderungen an die Softwaresysteme immer weiter ansteigen. Darüber hinaus werden die Kosten für eine Investition in Softwaresysteme in der heutigen Zeit immer kritischer hinterfragt, denn: „Teilweise betragen die Softwarekosten 9O Prozent der Gesamtkosten.“ [BalOO]. Die Entwicklung von Softwaresystemen stellt dadurch zunehmend höhere Anforderungen an die Softwareunternehmen. Das führt dazu, dass Softwareentwickler in kürzester Zeit komplexe Sachverhalte realisieren und den Qualitätsanforderungen gerecht werden müssen.
Der Großteil der Tätigkeit eines Softwareentwicklers besteht aus der Wartung von Softwaresystemen. McClure merkt dazu an: „Softwarewartung beherrscht den Lebenszyklus von Software. Deshalb wenden wir den größten Teil des Personals und der Mittel, die für den Softwarebereich zur Verfügung stehen, für die Wartung und nicht für die Entwicklung auf.“ [McC93]. Zu beachten ist, dass Softwarewartung nicht nur die „Instandhaltung“ von Softwaresystemen umfasst. Der Anteil der eigentlichen Fehlerbehebung macht nur einen kleinen Teil der Softwarewartung aus. Schon 1991 machte die Systemerweiterung rund 4O% des gesamten Wartungsaufwands aus [Sne91]. Softwarewartung umfasst auch die Weiterentwicklung von Systemen wie z.B. die Weiterentwicklung von Iteration zu Iteration eines Softwaresystems, zumeist als Softwareentwicklung bezeichnet, aber auch die Weiterentwick- lung von „bestehenden“ Softwaresystemen z.B. durch das Hinzufugen neuer Funktionalitäten zu einem bestehenden System . Balzer teilt den englischen Begriff Maintenance in Wartung und Pflege, wobei er Wartung als Lokalisierung und Behebung von Fehlern und Pflege als Lokalisierung und Durchführung von Änderungen und Erweiterungen eines in Betrieb befindlichen Softwaresystems definiert. Im weiteren setzt er Pflege mit Weiterentwicklung gleich und hält fest, dass es in einem evolutionären und inkrementellen Prozessmodell keine Pflegephase gibt, sondern die Pflegeaktivitäten sind die Erstellung einer neuen Produktversion [BalOO].
Das Problem bei der Softwarewartung besteht darin, dass bereits Systemteile vorhanden sind, die durch den Entwickler verstanden und erweitert werden müssen. Die vorhandenen Systemteile wurden aber zumeist durch einen anderen Softwareentwickler implementiert. Der Entwickler benötigt nun Informationen und Wissen über die zu erweiternden vorhandenen Systemteile, um diese zu verstehen und dadurch geeignet erweitern zu können. Wenn keine zusätzlichen Informationen vorhanden sind, wird die Einarbeitung in das System erschwert. Curth stellt dazu fest: „Da große unstrukturierte Programme so schwer zu verstehen sind, hat jeder neue Programmierer, der mit der Wartung einer alten Anwendung beauftragt wird, eine flache Lernkurve.“ [CG89]. Diese „zusätzlichen“ Informationen zum Quellcode sind auch dann von Bedeutung, wenn der Softwareentwickler die Systemteile selbst entwickelt hat, sich aber nicht mehr an die Hintergründe erinnern kann. Dies ist in der Praxis meist schon nach kurzer Zeit der Fall. Das zeigt, dass Wissensmanagement für die Softwarewartung und für die Softwareentwicklung eine enorme Bedeutung hat.
Wissensmanagement in der Softwareentwicklung umfasst dabei das Wissen über zu erweiternde Systemteile und über die damit in Verbindung stehenden Systemteile, aber auch das Wissen über übergeordnete Systemanforderungen bzw. Entscheidungen (siehe Kapitel 2.5 „Informationsmanagement und Wissensmanagement in der Softwareentwicklung“).Wissens- management wird innerhalb der Softwareentwicklung durch die Dokumentation von Softwaresystemen und Softwareentwicklungsprozessen und damit durch verbundene Tätigkeiten realisiert.(siehe Kapitel 2.1 „Dokumentation von Softwaresystemen in der Softwareentwicklung“). Die grundsätzliche Bedeutung der Dokumentation für die Softwareentwicklung ist schon lange bekannt und erforscht [Leh94]. Leider wird der Dokumentation von Softwaresystemen dennoch in Projekten vieler Unternehmen nicht die Bedeutung geschenkt, die erforderlich ist, damit Informationsverlust und Wissensverlust nicht auftreten. Das zeigt sich meist daran, dass Softwaresysteme nicht oder nur unvollständig dokumentiert werden. Darüber hinaus spiegeln die Dokumentationen zum Großteil nicht den aktuellen Stand der Systeme wieder. Die Gründe, die dazu fuhren, sind vielfältig. Zu den verbreitetsten Gründen gehören die mangelnde Akzeptanz und das fehlende Verständnis dafür, dass auch die scheinbar unnötigen Informationen festgehalten werden sollten. Häufig wird von Entwicklern versucht darzulegen, dass für die Dokumentation keine Zeit mehr vorhanden war. Durch das Fehlen einer vollständigen und aktuellen Dokumentation wird die Softwarewartung respektive Softwareentwicklung erschwert, weil erst geprüft werden muss, welche Teile der Dokumentation den aktuellen Stand des Softwaresystems widerspiegeln und welche nicht. Die Informationen und das Wissen, die verloren gegangen sind, müssen nun erst wieder erworben werden. Der Wiederbeschaffung des Wissens zu einem Systemteil ist aber enorm aufwendig und teilweise ist dies z.B. beim Weggang des Mitarbeiters, der den Systemteil implementiert hat, auch nicht mehr möglich. Das führt im Extremfall dazu, dass ein System komplett neu implementiert werden muss. Darüber hinaus wird ein Teil des investierten Kapitals durch den Verlust von Informationen und Wissen vernichtet. Zusätzlich muss für die Wiederbeschaffung der Informationen und des Wissens neues Kapital investiert werden, was zur Unwirtschaftlichkeit sowie schließlich zum Scheitern eines Projektes führen kann. Dieses Scheitern des Projektes durch enormen Zeitverlust glaubte man aber gerade durch das Einsparen der Zeit, die für die Erstellung der Dokumentation nötig gewesen wäre, verhindern zu können. Gerade das Weglassen der Dokumentationsphase stellt sich aber häufig als kurzsichtige Entscheidung heraus und führt, wie dargestellt, zu enormen Problemen bei der Softwareentwicklung. Da Software in zunehmendem Maße als Investitionsgut verstanden wird, steht die Wirtschaftlichkeit der Investition im Mittelpunkt des Handelns [Kau94]. Es wird deutlich, dass das Wissen und die Informationen zu Softwaresystemen bewahrt werden müssen, um möglichst wirtschaftlich auf die Anforderungen der Kunden reagieren zu können. Dieses Problem wurde erkannt und spiegelt sich in der Forderung des Kunden nach zertifizierten Entwicklungsprozessen auf Seiten des Auftragnehmers wider.
Zertifizierte Entwicklungsprozesse sind unabhängig überprüfte Entwicklungsprozesse einer Firma, die die Umsetzung einer bestimmten Norm z.B. der IS09001 widerspiegeln. Die IS09001 hält z.B. fest, welche Dokumentationen zu einem System am Ende vorhanden sein müssen. Durch die Etablierung von zertifizierten Entwicklungsprozessen im Unternehmen wird festgeschrieben, welche Dokumentationen zu einem System erstellt werden müssen. Das führt bei einem Großteil der Projekte dazu, dass eine Dokumentation geschaffen wird, welche nicht direkt mit dem implementierten Softwaresystem verbunden ist. Dadurch kommt es zu einem „Bruch“ zwischen Dokumentation und implementiertem Softwaresystem. Das führt dazu, dass die Informationen nicht mit konkreten Quellcodestellen direkt in Verbindung gebracht werden können. Dem Entwickler wird damit unnötigerweise das Verstehen konkreter Implementierungen erschwert. Ein Ansatz, diesem Problem zu begegnen, besteht in der Dokumentation des Quellcodes z.B. in Java durch Javadoc. Die Quellcodedokumentation ermöglicht aber nur sehr eingeschränkt den direkten Rückschluss zu übergeordneten Zusammenhängen zwischen unterschiedlichen Quellcodestellen. Dadurch kommt es wiederum zum „Bruch“ zwischen Implementierung und Dokumentation. Weiterhin enthalten Quellcodedokumentation und „normale“ Dokumentation zumeist Redundanzen, die bei Änderungen gepflegt werden müssen. In den meisten Fällen wird die Pflege vernachlässigt und Teile der Dokumentation bzw. Quellcodedokumentation sind inaktuell oder widersprüchlich und damit zum Großteil unbrauchbar.
Durch Redokumentation versucht man sich innerhalb des Reengineering sich einen Überblick über die Funktionsweise eines Systems bzw. Systemteils zu verschaffen. „Redokumentation beinhaltet die Erzeugung einer für den Menschen verständlichen Darstellung des Quellcodes eines Programms und seiner Funktionalität, deren Inhalt mit dem Quellcode übereinstimmt.“ [StrOO] Dieser Ansatz überführt den Quellcode in ein anders sprachiges Modell wie z.B. UML, wodurch technische Zusammenhänge sichtbar werden. Die Erzeugung des Modells beinhaltet aber nicht die Wiedergewinnung von „menschlichen“ Informationen und Wissen zu einzelnen Systemteilen. Gerade diese Informationen und das Wissen sind jedoch enorm wichtig für das Verständnis des Systems sowie für eine schnelle Wartung.
Wie dargestellt, besteht die Hauptaufgabe eines Softwareentwicklers in der Wartung von Software. Diese Aufgabe stellt ihn aber immer wieder vor das Problem, dass für einen Großteil der zu wartenden bzw. erweiternden Softwaresysteme eine geeignete Dokumentation fehlt. Zum Beispiel bei der Erweiterung [Eclipse]durch ein eigenes Plugin führt die fehlende vollständige Dokumentation aller Extension Points zu einem enormen Zeitaufwand bei der Suche nach der gewünschten Erweiterungsstelle. Wie von Curth richtig feststellt, hat ein Entwickler, der ein bestehendes System erweitert, eine flache Lernkurve [CG89]. Diese Kurve möglichst steil zu halten, sollte Ziel der Dokumentation eines Softwaresystems sein.
1.2 Zielsetzung
Zunächst wird die Arbeit mögliche Einflüsse auf die Qualität und Art der Dokumentation eines Softwaresystems darlegen. Dies ist notwendig, da kein technischer Ansatz zur Dokumentation von Softwaresystemen Erfolg haben kann, wenn den an der Softwareentwicklung beteiligten Partnern nicht bewusst ist, welche Arbeitsbereiche und Prozesse Einfluss auf die Dokumentation haben. Daher wird die Arbeit aufzeigen, dass wesentlichen Einfluss auf die Art der zu einem Projekt erstellten Dokumentation Softwareentwicklungsprozesse und Softwareentwicklungsmodelle haben, da in ihnen viele Arbeitsschritte, die die Dokumentation beeinflussen, festgeschrieben sind. Darüber hinaus wird darlegt werden, dass das Arbeitsumfeld eines Softwareentwicklers enormen indirekten Einfluss auf die Qualität der Dokumentation hat. Dazu ist anzumerken, dass beispielsweise fehlendes Verständnis für die Notwendigkeit der Einplanung von Arbeitszeit für die Dokumentation seitens des Arbeitgebers bzw. Projektleiters zum Weglassen der Dokumentationsphase durch den Entwickler führen kann.
Die Notwendigkeit, auch mögliche, durch die Dokumentation beeinflusste Bereiche zu beleuchten, wird deutlich bei der Betrachtung des großen Einflusses der Dokumentation eines Softwaresystems auf die Qualität des Softwaresystems selbst. Gerade die Qualitätsmerkmale Erweiterbarkeit und Verständlichkeit eines Softwaresystems sind zum Großteil von einer qualitativ hochwertigen Dokumentation abhängig.
Es wird deshalb dargelegt, dass Wissensmanagement in der Softwareentwicklung sich in der Dokumentation von Softwaresystemen widerspiegelt. Die Arbeit wird aufzeigen, dass die Dokumentation von Softwaresystemen ein etablierter Arbeitsprozess innerhalb der Softwareentwicklung ist und dieser Prozess für das Bewahren von Informationen und Wissen genutzt wird. Darüber hinaus wird deutlich gemacht, dass Wissensmanagement mehr bedeutet als das bloße Festhalten von Informationen und Wissen. Dazu wird erläutert, dass die Dokumentation von Softwaresystemen zu meist losgelöst von anderen Prozessen erfolgt, und eine Vernetzung der Informationen und des Wissens nicht stattfindet.
Ziel der Arbeit ist es, eine Möglichkeit aufzuzeigen, wie Informationen und Wissen über Systemzusammenhänge und Hintergründe zu Softwaresystemen und Systemteilen durch die Bindung an Quellcodeelemente vereinfacht festgehalten und vernetzt werden können. Die direkte Verbindung von Dokumentationselementen und Quellcodeelementen soll das Verstehen von Softwaresystemen bzw. Systemteilen durch den Softwareentwickler bei der Weiterentwick- lung und Wartung der Softwaresysteme erleichtern. Aufgezeigt wird, dass damit der Bruch zwischen normaler Dokumentation und dem Quellcode, der das Verständnis fur Zusammenhänge zwischen verschiedenen Quellcodeelementen erschwert, behoben wird. Die Verbindung von Quellcodeelementen und Dokumentationselementen soll ermöglichen, dass der Informationsfluss von der Dokumentation zum Quellcode und umgekehrt ohne Systemwechsel reibungsfrei möglich ist. Wie aufgezeigt, ist es das primäre Ziel, die Implementierung und die Dokumentation so näher zusammenzubringen. Damit soll es möglich sein, Systemzusammenhänge zwischen unterschiedlichen Quellcodeelementen auf einer höheren abstrakten Ebene, Dokumentationsebene genannt, sichtbar zu machen. Ein weiteres Ziel der Arbeit ist es, darzulegen, dass für das Verständnis von Softwaresystemen das Verständnis der einzelnen Aspekte eines Softwaresystems entscheidend ist. Aspekte bilden gedanklich kapselbare Einheiten von Verhalten, die durch den Menschen besser aufgenommen und verstanden werden. Spezielle Dokumentationselemente ermöglichen das Dokumentieren von Aspekten und der Verbindung mit dem Quellcode. Dadurch kann die Verteilung eines Aspektes im Quellcode sichtbar gemacht werden.
Ein prototypisches System zu implementierten, das die Dokumentation des Softwaresystems und die Verlinkung in den Quellcode ermöglicht und sich in den Implementierungsprozess des Entwicklers integriert, ist das Ziel des praktischen Teils der Arbeit.
2 Hintergrund
Die Softwareentwicklung unterliegt vielen verschiedenen Einflüssen. Diese Einflüsse können positiv aber auch negativ sein. In diesem Kapitel wird auf eine Vielzahl von Einflussfaktoren eingegangen, die direkten oder indirekten Einfluss auf die Dokumentation eines Softwaresystems haben. Der Hintergrund ist, dass der Erfolg technischer Neuerungen entscheidend vom Wissen über relevante Einflussfaktoren und deren Berücksichtigung bei der Lösung abhängt. Das Hauptaugenmerk wird dabei auf den Menschen, also den Entwicklern selbst liegen, da von ihnen die Art, die Qualität und der Umfang einer Dokumentation abhängen. Softwareentwicklung und damit auch das Dokumentieren von Software ist ein kreativer Prozess, der von Menschen durchgeführt wird. Das sollte an keiner Stelle der Planung und des Managements vernachlässigt werden. Der Erfolg oder Misserfolg eines Softwareprojektes und der darin enthaltenen Dokumentation hängt maßgeblich von Menschen, deren Motivation, Können und Entscheidungen ab und weniger als man glauben mag, von der Technik. Im Kapitel 2.1 wird dargelegt, welche Rolle die Dokumentation von Softwaresystemen in der Softwareentwicklung spielt. Das Kapitel 2.2 betrachtet Qualitätsmerkmale von Softwaresystemen und die Einflussmöglichkeiten der Dokumentation auf diese und umgekehrt. Unterschiedliche Vorgehensmodelle für die Softwareentwicklung und den Einfluss der Vorgehensmodelle auf die Dokumentation eines Softwaresystems untersucht das Kapitel 2.3. Das Kapitel 2.4 zeigt mögliche Einflussfaktoren aus dem Arbeitsumfeld auf. Abschließend beleuchtet Kapitel 2.5 den Aspekt des Wissensmanagements im Zusammenhang mit der Dokumentation von Softwaresystemen. Die Dokumentation von Software ist immer noch ein vernachlässigtes Feld in der Softwareentwicklung, wobei ihre Bedeutung für die Qualität eines Softwareproduktes nachgewiesen ist [Leh94].
2.1 Dokumentation von Softwaresystemen in der Softwareentwicklung
Unter Dokumentation wird zumeist im alt hergebrachten Sinne das Sammeln, Erfassen, Beschreiben, Darstellen und Ordnen von Dokumenten verstanden [HR89]. Das Deutsche Universalwörterbuch definiert Dokumentation als die „Zusammenstellung, Ordnung u. Nutzbarmachung von Dokumenten [DUD03]. Die Ziele einer einheitlichen Dokumen tation sind nach Mayr [MayOl]:
- einheitliche Struktur der Dokumente
- rasche, einfache Erstellung neuer Dokumente
- parallele Erstellung bzw. Zusammenführung von Dokumenten
- Möglichkeiten zur Präsentation des Projektstands
- Möglichkeiten zur Projektkontrolle.
An der Definition von Mayr ist erkennbar, dass das vornehmliche Ziel einer Dokumentation in der einfachen Handhabung liegt.
Ein Dokument einer Dokumentation stellt eine „strukturierte, als Einheit erstellte u. gespeicherte Menge von Daten“ [DUD03] dar und verfugt über eine ihm inne wohnende logische und inhaltliche Struktur sowie über ein definiertes Layout. Dadurch ist es möglich sich in unterschiedlichen Dokumenten, die als Grundlage ein und dieselbe Vorlage haben, schneller zurechtzufinden. Sehr genau definierte Vorlagen können auch als Formular bezeichnet werden. Ein Formular definiert feste Bereiche, in denen bestimmte Informationen bzw. Angaben festgehalten werden können. Dokumente werden in der heutigen Zeit nur in Ausnahmefällen in Papierform aufbewahrt, sondern werden als digitales Medium in Computersystemen abgelegt. Das vereinfacht vor allem den Zugriff und die Bearbeitbarkeit der Dokumente. In der Softwareentwicklung bezeichnet der Begriff „Dokumentation“ umgangssprachlich sowohl den Prozess, d.h. die Tätigkeit des Dokumentierens, als auch das Produkt, d.h. das Ergebnis dieser Tätigkeit [Leh94]. Dabei dient die Dokumentation als Kommunikationsmedium zwischen den an der Softwareentwicklung beteiligten Personen. Die Dokumentation fasst also die Informationen und das Wissen zu einem Softwaresystem sowie die die Entwicklung des Systems umgebenden Prozesse strukturiert zusammen. Henzler stellt fest, die Grundlage jeder Dokumentation ist die Information [Hen92]. Die Fülle an verschiedenen Informationen zu ei nem Softwaresystem hat zur Folge, dass eine riesige Anzahl verschiedener Dokumentationen zu einem System und zu den das System umgebenden Prozessen erstellt werden können. Thaller merkt dazu an: „Ein nicht unerheblicher Teil des Aufwands für ein Software-Projekt besteht in der Erstellung der Dokumentation.“ [Tha02]. Das macht den Stellenwert deutlich, den die Dokumentation innerhalb der Softwareentwicklung inne hat. Grupp versucht, durch die Einordnung der verschiedenen Dokumentationen in unterschiedliche Dokumentationsbereiche die Dokumentationen zu klassifizieren [Gru91]:
- Projektmanagementdokumentation oder Projektablaufdokumentation
Die Projektmanagementdokumentation umfasst alle das Projektmanagement betreffenden Dokumentationen, wie z.B. die Dokumentation des Projektauftrags, der Planung, des Schriftwechsels und der Besprechungsprotokolle.
- Organisationsdokumentation oder Systemdokumentation
In der Organisationsdokumentation sind alle Dokumentationen enthalten, die während der Projektdurchführung anfallen, beispielsweise Analyse- und Entwurfsergebnisse sowie Konzepte.
- Programmdokumentation
Die Programmdokumentation umfasst sowohl Programmieraufgaben als auch Programmiervorgaben sowie während der Programmierung erstellte Hilfsdokumente.
- Rechenzentrumsdokumentation
Die Rechenzentrumsdokumentation enthält z.B. die Dokumentationen zur Systembedienung.
- Benutzerdokumentation
Die Benutzerdokumentation enthält unter anderem Informationen zur Installation und Bedienung eines Softwaresystems.
Scheibl [Sch85] unterteilt die Dokumentationsbereiche in folgende Gruppen:
- Projektdokumentation bzw. projektbegleitende Dokumentation
- Entwicklungsdokumentation
- Produktdokumentation
- Benutzerdokumentation
Grupp und Scheibl entfernen sich bei ihren Klassifizierungen nicht all zu weit voneinander. Beide unterscheiden zwischen Projektdokumentation bzw. Projektmanagementdokumentation und die das Softwaresystem direkt betreffenden Klassifizierungen.
Wie bereits dargestellt, umfasst die Dokumentation eines Softwaresystems eine Vielzahl an unterschiedlichen Dokumentationen. Was alles innerhalb eines Softwareprojektes dokumentiert werden soll, wird durch einige festgeschriebene aber auch durch variable Faktoren bestimmt. Die Umsetzung eines zertifizierten Entwicklungsprozesses (siehe Kapitel 2.3) führt dazu, dass von diesem Entwicklungsprozess geforderte Dokumentationen erstellt werden müssen. Diese Anforderungen sind in den jeweiligen Normen, wie z.B. der DIN, ISO, IEEE oder ANSI Norm, nach denen der Entwicklungsprozess zertifiziert ist, definiert. Darüber hinaus können bestimmte Dokumentationen Bestandteil des Auftrags sein und müssen daher, wenn nicht vorhanden, zusätzlich erstellt werden. Festzuhalten ist, dass es über die geforderten Dokumentationen hinaus, im Idealfall eine gemeinsame Entscheidung des Entwicklerteams, des Projektleiters und möglicherweise des Kunden sein sollte, welches Wissen zusätzlich zu dokumentieren bzw. aufzubewahren ist.
Softwaresysteme nehmen in den meisten Fällen schon nach kurzer Zeit an Größe und Komplexität zu und werden damit für den Softwareentwickler unüberschaubar. Auf Seite des Projektmanagements wird es mit zunehmender Projektgröße immer schwieriger, den aktuellen Stand des Projektes zu überschauen und alle wichtigen Fakten bei der Fülle an Informationen im Auge zu behalten. Daher wird versucht, alle wichtigen Informationen und Erkenntnisse festzuhalten. Für die einzelnen Bereiche eines Projektes stehen dafür unterschiedliche Dokumentationstypen zur Verfügung. Was genau dokumentiert wird, hängt von den aufgezeigten Anforderungen sowie den Erfahrungen der Projektmitglieder ab. Das folgende Zitat soll noch einmal die Bedeutung der Dokumentation für die erfolgreiche Durchführung eines Projekt belegen: „Wenn den Studenten der Informatik gesagt wird, dass die von ihnen erstellte Software gut dokumentiert werden muss, dann glauben sie es so lange nicht, bis sie ein von ihnen erstelltes und nicht dokumentiertes Programm nach einiger Zeit selbst ändern müssen.“ [Pra03] Dieses Beispiel mag sich zwar nur auf eine kleines Softwaresystem beziehen, aber die Folgen einer fehlenden Dokumentation werden auch hier schon deutlich. Die Auswirkungen einer fehlenden Dokumentation auf die Qualität komplexer Softwaresysteme potenzieren sich. Daher sollte der Erstellung der Dokumentation die entsprechende Bedeutung geschenkt werden, da die Qualität einer Dokumentation entscheidend für die Verwendbarkeit des Softwaresystems ist.
Ein häufiger Fehler, der zu qualitativ minderwertigen bzw. unvollständigen Dokumentationen führt, ist in der Tatsache begründet, dass die Dokumentation eines Softwaresystems mit der Fertigstellung des Systems als abgeschlossen betrachtet wird. In der Folge werden Änderungen, die am System z.B. bei Wartungsarbeiten durchgeführt werden, nicht in der Dokumentation berücksichtigt [Leh94]. Damit spiegelt die Dokumentation nicht mehr den aktuellen Stand des Softwaresystems wider. Das Ziel einer Dokumentation sollte es aber sein, folgende Einschätzung zu widerlegen, ,,... die einzige wahre Beschreibung des Programms ist das Programm selber...“ [Sne91].
Die Qualität der Dokumentation ist für ihre Nutzbarkeit entscheidend. Wichtige Qualitätsmerkmale einer Dokumentation sind Vollständigkeit, Korrektheit, Konsistenz sowie Änderbarkeit [ZusOl]. Vollständigkeit definiert das Vorhandensein aller wichtigen Informationen sowie die Korrektheit der Übereinstimmung der Informationen mit den der Dokumentation zu Grunde liegenden Quellen. Unter Konsistenz versteht man die Widerspruchsfreiheit der Dokumentation. Die Änderbarkeit gewährleistet die problemlose Bearbeitung der Dokumentation. Für genauere quantitative Anforderungen an die Dokumentation sei an dieser Stelle auf Lehner [Leh94] und Stetter [Ste81] verwiesen, die dieses Thema näher beleuchten.
Diese Arbeit befasst sich vornehmlich mit dem Dokumentieren von Informationen und Wissen, das direkt den Quellcode und das Softwaresystem selbst betrifft. Interessant sind dabei vor allem die mit dem Quellcode in Zusammenhang stehenden Entscheidungen und Hintergründe, die für das Verständnis des Systems und seiner einzelnen Komponenten wichtig sind. Dazu wird im weiteren dargestellt, wie wichtige Informationen während der Implementierung dokumentiert werden sollten. Darüber hinaus wird beleuchtet, welche Bedeutung die Dokumentation für die Wartung bzw. Weiterentwicklung eines Softwaresystems hat. Ziel ist es, mögliche Probleme beim Dokumentieren innerhalb des Implementierungs- und Wartungsprozesses zu veranschaulichen.
2.1.1 Dokumentation während der Implementierung
Die entscheidende Bedeutung kommt der Erfassung der Informationen und des Wissens während der eigentlichen Implementierungs- bzw. Weiterentwicklungsphase zu. Nur während der Implementierung wird neuer Quellcode erzeugt. Damit ist klar, dass vornehmlich im Verlaufe der Implementierung alle Entscheidungen, welche die Funktionalität des Softwaresystems betreffen, umgesetzt werden. Die Implementierungsphase eines Softwaresystems sollte daher die Dokumentation der Problemlösung und der Implementierungsentscheidungen durch geeignete Verbalisierung und Kommentierung beinhalten [BalOO]. Dieser Prozess sollte nicht aufgeschoben werden, damit keine Hintergrundinformationen zur praktischen Umsetzung verloren gehen. Balzer merkt dazu an: „Der Aufwand für die Dokumentation wird reduziert, wenn zu dem Zeitpunkt, an dem die Information anfällt, von demjenigen, der sie erzeugt oder verarbeitet, auch dokumentiert wird.“ [BalOO]. Dazu lässt sich festhalten, dass zu jedem anderen Zeitpunkt meist nicht wieder alle Informationen greifbar sind und damit Informationen verloren gehen können.
Ein Softwaresystem ist demzufolge so zu dokumentieren, dass zu einem späteren Zeitpunkt Wartung sowie Einarbeitung in das System effektiv und fehlerfrei möglich sind.
Zum Implementierungsprozess gehört außer der Dokumentation auch die Festlegung gemeinsamer Programmierrichtlinien sowie das Führen eines Fehlerbuches [BalOO] und die Einhaltung darüber hinaus gehender Programmierprinzipien. Programmierrichtlinien sind ein weit verbreitetes Mittel, um für einen einheitlichen Quellcode zu sorgen. Zu den Programmierrichtlinien gehören unter anderem:
- Die Wahl geeigneter Bezeichner für Pakte, Klassen, Methoden, Attribute, Variablen uvm..
- Die Verwendung von Quellcodedokumentationen zur Erklärung von kleineren Quellcodeabschnitten.
- Das einheitliche Formatieren der Programmiersprachenanweisungen, z.B. Klammerung von Methoden.
- Die einheitliche Beschreibung von Softwaresystemteilen wie Klassen durch:
- Kurzbeschreibung,
- Name der Programmierer
- Versionsangaben
- uvm.
Eine sehr detaillierte, vollständige Darstellung aller Programmierrichtlinien findet sich im Lehrbuch der Software-Technik [BalOO]. Anzumerken bleibt, dass das gemeinsame Verwenden einheitlicher Standards sehr großen Einfluss auf die Lesbarkeit des Quellcodes hat, vor allem bei nicht selbst dokumentierenden Sprachen wie Java.
Die Frage bleibt, weshalb werden dennoch so wenige Softwaresysteme vollständig dokumentiert, wo doch die Vorteile klar auf der Hand zu liegen scheinen. Als Hauptursache wird von den Entwicklern und Unternehmen vor allem der hohe Zeitbedarf für die Dokumentation eines Softwaresystems angegeben. Zusätzlichen Zeitbedarf als KO-Kriterium für die Dokumentation anzusehen, ist in Anbetracht der möglichen Folgen des Fehlens einer Dokumentation sehr kurzsichtig. Das Scheitern eines Projektes wirkt sich stärker auf das Unternehmen aus als die Verschiebung eines Termins oder das Überschreiten des Projektbudgets. Diese Erkenntnis setzt sich oftmals nur dann durch, wenn durch das Fehlen einer Dokumentation eigene Softwareprojekte gescheitert sind. Die Wahrnehmung des latenten Problems wird oft dadurch getrübt, dass ein „pfiffiger Programmierer in letzter Sekunde das Runder noch herumreißt“. Diese Notlösung wird meist sogar noch als „Erfolg“ angesehen. Bei der Betrachtung meiner eigenen Programmiererfahrungen zeigt sich, dass mangelnde Disziplin sowie begrenzte Erfahrungen im Dokumentieren meistens die Ursache dafür waren, dass ein Softwaresystem nicht oder unvollständig dokumentiert wurde. Ein Softwaresystem verursacht jedoch nicht die Hauptkosten während der Entwicklung, sondern mehr als 2/3 der Kosten entstehen bei der Wartung und Weiterentwicklung des Systems [BalOO]. Gerade bei der Weiterentwicklung respektive Wartung kann sich das Fehlen einer Dokumentation sehr kostenintensiv auswirken.
2.1.2 Typische Probleme im Rahmen der Wartung und Weiterentwicklung von Softwaresystemen
Die Wartung von Softwaresystemen bestimmt den Alltag der Programmierer. Wartung umfasst die Fehlerkorrektur, Änderung der ursprünglichen Anforderungen sowie Verbesserung von Funktionalität und Leistung [McC93]. Für die Wartung eines Softwaresystems benötigt der Programmierer Informationen über das zu wartende System bzw. die zu wartenden Teile des Systems. Grundlage aller Information stellt die Dokumentation des Softwaresystems dar, da in ihr die Konzepte und die Umsetzung des Systems dokumentiert sind. Ziel des Entwicklers ist es, sich die Teile aus der Dokumentation herauszusuchen, die für ihn interessant erscheinen. Im Weiteren wird der Entwickler versuchen, die Informationen aus der Dokumentation mit konkreten Quellcodestellen, die zu verändern oder zu erweitern sind, in Verbindung zu bringen. Diese Aufgabe kann sich als schwierig erweisen, da in einer Dokumentation selten direkte Verweise auf Quellcodestellen enthalten sind. Dadurch kommt es zu einem Bruch zwischen Dokumentation und Quellcode. Abhilfe würde eine quellcodegebundene Dokumentation schaffen, wie sie in Kapitel 3 „Konzept einer quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen“ vorgestellt wird. Ohne eine derartige Dokumentation muss der Entwickler versuchen, die Informationen und das Wissen, die in der Dokumentation enthalten sind, mit dem Quellcode in Verbindung zu bringen. Wie schnell er betreffende Quellcodestellen findet, hängt davon ab, wie genau diese Stellen in der Dokumentation beschrieben sind.
Die Voraussetzung für dieses Vorgehen ist aber die Existenz einer vollständigen und korrekten Dokumentation des Softwaresystems, was aber meistens nicht der Fall ist. Große Probleme treten oft dann auf, wenn die Dokumentation fehlerhaft, unvollständig oder inaktuell ist. In einem solchen Fall trifft die Aussage zu, dass die einzige wahre Beschreibung des Programms das Programm selber zu [Sne91]. Im vorliegenden Fall ist es erforderlich, dass zunächst festgestellt wird, welchen Stand des Systems eine vorhandene Dokumentation widerspiegelt. Der zweite Schritt ist zu versuchen, die fehlende Information aus dem Quellcode wiederzugewinnen. Dazu wird meist auf das Reengineering des Softwaresystems gesetzt. Reengineering beinhaltet Reverses Engineering und das wiederum Redokumentation (siehe Abbildung 1: Begriffliche Einordnung des Reengineering).
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 1: Begriffliche Einordnung desReengineering
Ziel des Reverse Engineering ist es, das Softwaresystem zu redokumentieren und damit Entwurfsinformationen aus dem Quellcode zu erzeugen, die es erleichtern, das Programm zu verstehen [McC93]. Reengineeringmaßnahmen werden immer durch Werkzeugunterstützung realisiert. Festzuhalten ist, dass die Redokumentation immer Teil der Wartung sein sollte, da so die Aktualität der Dokumentation überprüft wird. Redokumentationswerkzeuge sind heute meist schon in die Entwicklungsumgebung (IDEs - Integrated Developement Environment zu deutsch integrierte Entwicklungsumgebung) integriert und ermöglichen somit schnell den Quellcode beispielsweise in eine beliebige UML - Ansicht zu transformieren. Welche Möglichkeiten Reengineering für die Wartung bietet, soll hier nicht weiter vertieft werden. Festzuhalten ist, dass menschliches Wissen und genaue Hintergründe zu bestimmten Realisierungen nicht allein aus dem Quellcode wiedergewonnen werden können. Zur Vertiefung der Reengi- neeringthematik sei auf „Software-Reengineering“ [Kau94], „Reengineering Ein integrales Wartungskonzept zum Schutz von Software-Investition“ [Thu90] sowie „Software-Automatisierung - Reengineering-Repositiry Wiederverwendbarkeit“ [McC93] verwiesen.
Bei der Wartung von Softwaresystemen sollte darauf geachtet werden, dass die Dokumentation des Systems aktualisiert wird. Das heißt, dass die vorgenommenen Änderungen und Hintergründe vermerkt werden. Wie bereits kurz angesprochen, wird im Kapitel 3 erläutert, welche Möglichkeiten die quellcodegebundene Dokumentation für die Wartung von Softwaresystemen bieten könnte. Anzumerken ist, dass gerade in der Wartung oftmals direkt mit dem Quellcode gearbeitet wird. Das Ziel dieser Arbeit ist es, durch die quellcodegebundene Dokumentation dem Entwickler innerhalb seiner Entwicklungsumgebung zu visualisieren, dass an dem von ihm untersuchten Quellcode eine Dokumentation hängt. Diese Dokumentation ließe sich dann auf Wunsch sehr einfach darstellen. Dadurch soll der Bruch zwischen Dokumentation und Quellcode behoben werden.
2.2 Qualitative Anforderungen an Softwaresysteme und deren Management
An Softwaresysteme werden im zunehmenden Maße höhere Qualitätsanforderungen gestellt. Der Grund dafür ist, dass Software in immer mehr Bereichen eingesetzt wird, in denen ein Versagen nicht nur zu wirtschaftlichen Verlusten, sondern auch zur Gefährdung von Menschenleben führen kann [Bal00]. Daher müssen Softwaresysteme eine Vielzahl von Qualitätsanforderungen erfüllen. Diese Qualitätsanforderungen werden in Qualitätsmerkmalen genauer definiert. Unter einem Qualitätsmerkmal versteht man die Eigenschaft einer Ware, die die Qualität der Ware ausmacht. Qualität wird als Güte, das heißt als Grad der guten Beschaffenheit eines Erzeugnisses, definiert [DUD03]. Für die Softwareentwicklung ist ein Qualitätsmerkmal ein Satz von Eigenschaften eines Softwareprodukts, anhand dessen seine Qualität beschrieben und beurteilt wird. Ein Softwarequalitätsmerkmal kann über mehrere Stufen in Teilmerkmale verfeinert werden [Imb04]. In der ISO 9126 wird Softwarequalität wie folgt definiert: „Softwarequalität ist die Gesamtheit der Merkmale und Merkmalswerte eines Softwareproduktes, die sich auf dessen Eignung beziehen, festgelegte oder vorausgesetzte Erfordernisse zu erfüllen“. Balzer merkt dazu an: „Die Software-Qualität wird allgemein oder bezogen auf einzelne Entwicklungen durch Qualitätsmerkmale beschrieben“ [Bal00].
Software-Qualitätsmerkmale nach ISO 9126 sind:
- Funktionalität: Angemessenheit, Richtigkeit, Interoperabilität, Ordnungsmäßigkeit, Sicherheit
Funktionalität definiert als Qualitätsmerkmal das Vorhandensein von Funktionen mit festgelegten Eigenschaften, wobei diese Funktionen die definierten Anforderungen erfüllen.
- Zuverlässigkeit: Reife, Fehlertoleranz, Wiederherstellbarkeit
Unter Zuverlässigkeit wird die Fähigkeit der Software verstanden, ihr Feistungsniveau unter festgelegten Bedingungen über einen festgelegten Zeitraum zu bewahren.
- Benutzbarkeit: Verständlichkeit, Erlernbarkeit, Bedienbarkeit
Benutzbarkeit betrachtet den Aufwand, der zur Benutzung eines Softwaresystems erforderlich ist und beinhaltet die individuelle Beurteilung der Benutzung durch eine festgelegte oder vorausgesetzte Benutzergruppe.
- Effizienz: Zeitverhalten, Verbrauchsverhalten
Unter Effizienz versteht man das Verhältnis zwischen dem Feistungsniveau einer Software und dem Umfang der eingesetzten Betriebsmittel unter festgelegten Bedingungen.
- Änderbarkeit: Analysierbarkeit, Modifizierbarkeit, Stabilität, Prüfbarkeit
Das Qualitätsmerkmal Änderbarkeit betrachtet den Aufwand, der zur Durchführung vorgegebener Änderungen notwendig ist. Unter einer Änderung werden die Korrekturen, Verbesserungen oder Anpassungen an Änderungen der Umgebung, der Anforderungen sowie der funktionalen Spezifikationen verstanden.
- Übertragbarkeit: Anpassbarkeit, Installierbarkeit, Konformität, Austauschbarkeit
Unter Übertragbarkeit wird die Eignung der Software verstanden, von einer Umgebung in eine andere übertragen zu werden. Eine Umgebung kann sowohl eine organisatorische Umgebung als auch eine Hardware- oder Software-Umgebung einschließen
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 2: Qualitätsmerkmale nach ISO 9126
Es stellt sich die Frage, wie kann die Erfüllung definierter Qualitätsmerkmale in einem Softwaresystem überprüft sowie gewährleistet werden und welche Qualitätsmerkmale soll ein Softwaresystem erfüllen. Die Überprüfung und das Management von Qualitätsmaßnahmen unterliegt dem Qualitätsmanagement. Das Qualitätsmanagement teilt sich in produktorientiertes sowie prozessorientiertes Qualitätsmanagement. Das prozessorientierte Qualitätsmanagement überprüft den Prozess der Erstellung eines Produktes und aus ihm gehen konstruktive und analytische Qualitätsmaßnahmen hervor. Produktorientiertes Qualitätsmanagement überprüft die Qualitätsmerkmale eines Produktes und seiner Zwischenergebnisse. Unter konstruktiven Qualitätsmaßnahmen wird der Einsatz von technischen (z.B. Werkzeugeinsatz, uvm.) und organisatorischen Maßnahmen verstanden. Analytische Maßnahmen zielen auf das Messen und Analysieren sowie Testen von Qualitätsanforderungen ab. Zu den analysierenden Verfahren zählen die statische Programmanalyse, das Review, der Walkthrough und das Audit eines Softwaresystems. Ein Review ist ein mehr oder weniger formal geplanter und strukturierter Analyse- und Bewertungsprozess, in dem Projektergebnisse einem Team von Gutachtern präsentiert und von diesem kommentiert oder genehmigt werden (IEEE-Norm 729-1983). Für die Messung von Qualitätsanforderungen werden Metriken verwendet. Beispielsweise zählt dazu, die Messung der Abhängigkeit einer Klasse in einem Paket [Wul02]. Testende Verfahren überprüfen dagegen das Verhalten des Systems z.B. anhand von UnitTests. In Java wird beispielsweise JUnit [JUnit] zum Testen von Schnittstellen verwendet. Organisatorische Maßnahmen definieren zu Projektbeginn Richtlinien, wie beispielsweise Dokumentationsrichtlinien, Standards und Checklisten, welche gewisse Rahmenbedingungen für die Erstellung eines Softwaresystems und den Prozess der Erstellung des Systems gewährleisten. Alle diese Maßnahmen zusammen überprüfen und verbessern die Qualität eines Softwaresystems und leisten damit einen wichtigen Beitrag, qualitativ hochwertigere Softwaresysteme zu entwickeln. Zu beachten ist, dass die Verbesserung eines Entwicklungsprozesses nicht zwangsläufig zu einer Verbesserung der Produktqualität führt.
Der Anspruch an eine professionelle Softwareentwicklung ist es, die geforderten Qualitätsmerkmale für ein Softwaresystem zu erfüllen. Maßnahmen, die für die Erfüllung der verlangten Qualitätsanforderungen nötig sind, kosten häufig Zeit und Geld. Diese Tatsache muss dem Kunden vermittelt und verdeutlicht werden. Dabei kann als Argument angeführt werden, dass diese Kosten zumeist während der Wartungsphase eingespart werden können, da Qualitätsmerkmale wie Zuverlässigkeit und Änderbarkeit den Wartungsaufwand verringern helfen. Es ist aber zu beachten, dass es Qualitätsmerkmale gibt, die sich gegenseitig behindern [ZusOl], so z.B. Effizienz und Erweiterbarkeit. Daher sollten schon von Projektbeginn an die grundlegenden Qualitätsmerkmale eines Softwaresystems von und mit dem Kunden zusammen festgeschrieben werden [ZusOl]. Darüber hinaus wirken sich externe Elemente der Softwareentwicklung, wie die Dokumentation eines Softwaresystems, nicht unwesentlich auf die Qualität des Softwaresystems selbst aus. Die Güte der Qualitätsmerkmale Änderbarkeit und Benutzbarkeit werden beispielsweise von der Dokumentation eines Softwaresystems beeinflusst [MayOl]. Es zeigt sich, dass die Dokumentation den Einsatz und die Wartung von Softwaresystemen unterstützt. Da die Wartung einen Großteil der Tätigkeit eines Entwicklers ausmacht (etwa 2/3), ist der Einfluss einer guten Dokumentation für die zukünftige Qualität des Systems bedeutend. In den nächsten Abschnitten sollen daher die Einflüsse und Einflussmöglichkeiten auf und von der Dokumentation eines Softwaresystems auf die Qualität eines Systems beleuchtet werden. Dazu wird zunächst betrachtet, welche quantitativen Anforderungen an ein Softwaresystem Einfluss auf die Dokumentation des Systems haben. Im weiteren wird dargestellt werden, welchen Anteil die Dokumentation an der Qualität des Softwaresystems selbst hat.
Für die intensivere Betrachtung des Themas Qualitätsmanagement und Softwareentwicklung empfiehlt sich Software Engineering mit UML und dem Unified Process [ZusOl], Projekt Engineering - Ingenieurmäßige Softwareentwicklung in Projektgruppen [MayOl] und das Lehrbuch der Software-Technik [BalOO]. Das Thema Qualitätsmanagement kann, wie die Buchtitel zeigen, nicht losgelöst von Entwicklungsprozessen und den beteiligten Entwicklern betrachtet werden und Qualitätsmanagement macht nur einen kleinen Teil des ganzheitlichen Prozesses der Softwareentwicklung aus.
2.2.1 Einflussfaktoren auf die Dokumentation von Softwaresystemen während der Implementierung
Wie bereits dargestellt, hängen die Qualitätsmerkmale Änderbarkeit und Benutzbarkeit eines Softwaresystems nicht unerheblich von der Qualität respektive der Verständlichkeit der Dokumentation des Softwaresystems ab. Gerade die Erlernbarkeit und Modifizierbarkeit eines Softwaresystems kann durch eine qualitativ hochwertige Dokumentation beeinflusst werden. Damit zeigt sich, dass die Qualitätsanforderungen, die an ein Softwaresystem gestellt werden, nicht allein durch das System selbst, erfüllt werden. Gerade die Bewahrung der Informationen und des Wissens während der Implementierung hat Einfluss auf die zukünftige Qualität des Softwaresystems. Werden beispielsweise quantitative Anforderungen und Wünsche des Kunden nicht dokumentiert, fehlt deren Umsetzung im Endprodukt und beeinflusst damit das Qualitätsmerkmal Richtigkeit. Darüber hinaus kann das Fehlen von wichtigen Informationen, die beispielsweise die Hintergründe und Entscheidungen eines Implementierungsdetails erläutern, schwerwiegende Folgen hervorrufen und damit das Qualitätsmerkmal Stabilität beeinflussen. So kann zum Beispiel die Verwendung eines veralteten Treibers für die Datenbank sich bei der Wartung als scheinbar mögliche Ursache eines Fehlers darstellen und damit ein Update auf die aktuelle Version als sinnvoll erachtet werden. Der Hintergrund der Nutzung des Treibers ist aber eine spezielle Anpassung auf die hausinterne Datenbank. Ein Austausch des Treibers würde unter bestimmten Bedingungen bei der Jahresabschlussrechnung zu einem erheblichen Datenverlust führen und so das Qualitätsmerkmal Funktionalität - Sicherheit beeinflussen. Da dieser Fehler erst bei der Auslieferung des Systems aufgetreten ist, wurde vergessen, Testfälle für diese Konstellation zu schreiben und lediglich eine Notiz in der Dokumentation vorgenommen. Problematisch könnte es werden, wenn diese Notiz nicht direkt mit dem Treiber in Verbindung gebracht wurde, da sie dann innerhalb der Wartungsakti vitäten leicht übersehen werden könnte. Abhilfe kann an dieser Stelle die quellcodegebundene Dokumentation schaffen (siehe Kapitel 3), die einen Vermerk direkt am Treiber oder dem Build-Skript ermöglicht. Um mögliche negative Einflüsse auf die Qualität eines Softwaresystems zu vermeiden, sollte es möglich sein, wichtige Hintergrundinformationen und Entscheidungen zu einem Softwaresystem durch ihr Dokumentieren zu bewahren. Ziel dabei ist es, mögliche, erst später das System direkt betreffende, negative Einflüsse auf die Qualität des Softwaresystems zu vermeiden. Daher kommt der Dokumentation im Verlauf der Implementierungsphase eine wichtige Bedeutung für den Informationsaustausch zu. Gerade bei der Wartung von Softwaresystemen wirken sich anfängliche Qualitätseinbußen bei der Änderbarkeit des Systems, die durch die Dokumentation beeinflusst werden, negativ auf die Zuverlässigkeit, Funktionalität und Übertragbarkeit eines Softwaresystems aus.
2.2.2 Weiterentwicklung und Wartung von Software
Die Qualität der Dokumentation, die teilweise die Güte der Qualitätsmerkmale Änderbarkeit und Benutzbarkeit widerspiegelt, wirkt sich bei der Wartung eines Systems indirekt auf die Funktionalität, Übertragbarkeit und Zuverlässigkeit des Softwaresystems aus. Beispielsweise können wichtige Informationen, die das System betreffen, für den Wartungsprozess verloren gegangen sein, die eigentlich in der Dokumentation hätten zu finden sein müssen. Dadurch kann die Wartung oder Weiterentwicklung des Systems erschwert werden. Darüber hinaus kann die Lösung, aus Unwissenheit über die Konzeption des Gesamtsystems, parallel zu einem bereits existierenden Lösungsansatz des Systems implementiert worden sein. Oder aber die Information in der Dokumentation sind inaktuell oder falsch und daher nicht für die aktuelle Systemversion verwendbar. Im schlimmsten Fall wird dies nicht bemerkt und auf Grund falscher Annahmen wird das System geändert und damit fehleranfälliger. Es ist aber auch möglich, dass viel Zeit in die Weiterentwicklung des Systems unter Betrachtung der falschen Annahmen investiert und erst zu einem späterem Zeitpunkt in der Weiterentwicklung dieser Fehler bemerkt wird. Die Folgen können zum Scheitern des Projektes oder aber zu einer enormen Kostenexplosion führen.
Die Mängel in Aktualität sowie Richtigkeit einer Dokumentation können während der Wartung des Softwaresystems Auswirkungen auf die spätere Qualität des Systems haben. Daher sollten diese Faktoren bei der Erstellung der Dokumentation in der Implementierungsphase und bei nötigen Anpassungen der Dokumentation infolge Änderungen des Systems bei Wartungsaktivitäten berücksichtigt werden. Ist dies nicht der Fall, kann mangelnde Professionalität im Umgang mit der Dokumentation eines Softwaresystems, wie dargestellt, zu erheblichen Problemen führen. So kann z.B. die lose Verbindung von Dokumentation und Quellcode, da keine direkte Verbindung zwischen Dokumentation und Quellcode besteht, die Umsetzung der geforderten Belange erschweren. Ziel ist es, durch die in Kapitel 3 vorgestellte quellcodegebundene Dokumentation von Aspekten, dieses Problem zu beheben. Die Idee ist dabei, den Quellcode in der Entwicklungsumgebung sichtbar mit Information zu verknüpfen.
2.3 Vorgehensmodelle in der Softwaretechnik
Vorgehensmodelle beschreiben einen festgelegten organisatorischen Rahmen der Softwareentwicklung. Festgelegt wird, welche Aktivitäten in welcher Reihenfolge von welchen Rollen zu erledigen sind und welche Ergebnisse dabei entstehen und wie diese in der Qualitätssicherung überprüft werden [Imb04]. Damit strukturiert ein Vorgehensmodell den Entwicklungsprozess konzeptionell. Vorgehensmodelle bauen zum Großteil auf grundlegenden Arbeitsschritten bzw. Phasen auf. Zu diesen Phasen zählen die Analyse-, Entwurfs-, Implementierungs- und die Testphase. Diese Phasen zusammengenommen und die Ordnung ihrer zeitlichen Abfolge bezeichnet man als Software-Lebenszyklus [MayOl]. Die meisten Vorgehensmodelle beinhalten darüber hinaus übergeordnete Bereiche wie das Projektmanagement, die Arbeitsorganisation und die Qualitätssicherung. Das Ziel eines definierten Vorgehensmodells ist die Erhöhung der Qualität der zu erstellenden Software durch bessere Transparenz und Steuerbarkeit der Softwareentwicklung [Lux02]. Durch die Verwendung eines Vorgehensmodells soll die Projektplanung und Durchführung kontrollierbarer und planbarer werden. Durch die Festlegung planbarer Einzelschritte wird für alle beteiligten Parteien klarer, wann, was und wie bearbeitet werden muss und welche Arbeitsschritte auf welchen anderen aufbauen. Im weiteren sollen die bekanntesten Vorgehensmodelle kurz vorgestellt werden, um die möglichen unterschiedlichen Vorgehensweisen in der Softwareentwicklung darzulegen. Ziel dabei ist es aufzuzeigen, weshalb manche Vorgehensmodelle die Erstellung einer Dokumentation berücksichtigen und andere wiederum nicht und welche Vorgehensmodelle das im Einzelnen sind. Zusätzlich soll festgestellt werden, in welchen Phasen der Vorgehensmodelle die Erstellung einer Dokumentation geplant ist und wie der Aspekt der Wartung im Zusammenhang mit der Dokumentation eines Softwaresystems berücksichtigt wird.
2.3.1 Betrachtung der unterschiedlichen Vorgehensmodelle
Es sollen im Weiteren die folgenden sehr bekannten Vorgehensmodelle unter dem Aspekt der Dokumentation von Softwaresystemen betrachtet werden:
- Build-and-Fix-Cycle - chaotisches Vorgehensmodell
- Phasenmodell - sequenzielles Vorgehensmodell mit strikter Trennung der Arbeitsschritte
- Wasserfallmodell - sequenzielles Vorgehensmodell mit Trennung der Arbeitsschritte und der Möglichkeit in vorhergehende Phasen zurückzuspringen
- V-Modell und das W-Modell- sequenzielle Vorgehensmodelle mit starker Einbeziehung von Softwaretests
- Spiralmodell - evolutionäres Vorgehensmodell, das interatives Vorgehen ermöglicht.
Darüber hinaus werden die zwei derzeit populärsten Vorgehensmodelle, der Rational Unified Process (RUP) und Extreme Programming (XP) betrachtet. Die Ansätze beider Prozesse könnten nicht gegensätzlicher sein. Beim RUP handelt es sich um einen schwergewichtigen Entwicklungsprozess und bei XP um einen leichtgewichtigen (agilen) Prozess. Beim agilen Entwicklungsprozess XP werden zielorientiert nur benötigte Produkte erzeugt und so lange gepflegt, wie diese einen Nutzen für das Projekt haben. Der Ration Unified Process dagegen ist ein schwergewichtiger Prozess, der relativ viel bürokratischen Aufwand erfordert. Dabei reichen die Aufgaben von der Erstellung einer Kostenabschätzungen über die Anfertigung von Prüfberichten bis zur Erzeugung von Visionsdokumenten.
Zunächst wird der Build-and-Fix-Cyle betrachtet, ein sehr chaotisches Vorgehensmodell.
Build-and-Fix-Cycle
Unter dem Build-and-Fix-Cycle Vorgehensmodell ist das einfache Implementieren einer Idee, die der Programmierer im Kopf hat, zu verstehen. Der Programmierer definiert keine expliziten Qualitätsanforderungen und arbeitet so lange am System, bis es seinen Vorstellungen entspricht. Es werden keine Analysedokumente, Entwurfsdokumente oder eine Dokumentation erstellt. Das Vorgehen des Entwicklers folgt keinem einheitlich geplanten Vorgehen. Der Hintergrund dieses Vorgehens ist das einfache und schnelle Implementieren einer eigenen Softwarelösung, an die keine nennenswerten Ansprüche gestellt werden. Meist werden aus den kleinen Softwarelösungen größere Projekte und das chaotische Vorgehen am Anfang hat große Auswirkungen auf die spätere Weiterentwicklung. Daher ist dieses Vorgehensmodell auf Grund seines chaotischen Vorgehens fur jedwedes professionelle Softwaresystem abzulehnen.
Phasenmodell
Das Phasenmodell wurde auf Grund der Anforderungen, Projekte der öffentlichen Hand nach einheitlich Richtlinien abwickeln zu können, entwickelt. Dem Vorgehen des Phasenmodells liegt die Idee zugrunde, dass die Softwareentwicklung in genaue Phasen geteilt werden kann. Jede Phase liefert ein klar definiertes Ergebnis, ohne das nicht in die nächste Phase übergegangen werden kann. Diese Ergebnisse sind zu meist wohldefinierte Dokumente. Ziel des Phasenmodells ist es, Softwareprojekte einfacher planbar, organisierbar und kontrollierbar zu machen. Dieses Vorgehen führt dazu, dass erst sehr spät greifbare Produkte entstehen. Das macht es sehr schwierig, frühzeitig auf Änderungswünsche des Kunden reagieren zu können. Darüber hinaus kann nach der Planungsphase nicht mehr auf geänderte Kundenanforderungen reagiert werden, da ein Rückschritt in eine frühere Phase nicht möglich ist.
Bei der praktischen Umsetzung zeigt sich aber, dass das strenge Trennen der einzelnen Phasen sich als sehr nachteilig auswirkt, da dadurch ein Reagieren auf Änderungen und späte Entscheidungen so gut wie nicht möglich ist. Die Dokumentation wird beim Phasenmodell in der Implementierungsphase erstellt. Problematisch für die Dokumentation ist es, wenn durch die strenge Trennung der Phasen mögliche Veränderungen am Quellcode nicht mehr in der Dokumentation vermerkt werden, wenn diese beispielsweise in der Wartung durchgeführt werden. Darüber hinaus erweist sich die Trennung der einzelnen Dokumente (Pflichtenheft, Dokumentation, uvm.) als nachteilig für den Informationsfluss, da eine Vernetzung der Information nur sehr schwierig realisierbar ist. Dieses Vorgehensmodell ist abzulehnen, da nicht im angemessenen Rahmen auf die heutigen Kundenanforderungen reagiert werden kann und damit schon von vornherein klar ist, dass das Vorgehen zergliedert wird und damit außerhalb der eigentlichen Planung erfolgt. Darüber hinaus widerspricht die starre Trennung der Phasen dem normalen Umfeld der Softwareentwicklung.
Wasserfallmodell
Das Wasserfallmodell ist eine Weiterentwicklung des sequenziellen Phasenmodells. In ihm sind Rückschritte aus einzelnen Phasen in darüber liegende Phasen möglich. Um eine Kostenexplosion zu vermeiden, sollten die Rückschritte möglichst nicht über mehrere Phasen erfolgen. Zusätzlich wurde die Validierung der Ergebnisse der einzelnen Phasen eingeführt, um die Auswirkungen von Fehlentscheidungen zu begrenzen und den Softwareprozess besser kontrollieren zu können. Dabei ist festzustellen, dass sich das Wasserfallmodell besonders für kleinere Teams eignet, die gemeinsam an allen Phasen arbeiten können [MayOl]. Wie beim Phasenmodell ist die starre Teilung in Phasen nachteilig für mögliche späte Änderungswünsche, da diese sehr teuer werden. Daher eignet sich das Modell vor allem für Projekte mit klar definierten Zielen. Die Dokumentation des Systems erfolgt auch beim Wasserfallmodell in der Implementierung
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 3: Wasserfallmodell
V-Modell und W-Modell
Das V-Modell gliedert den Entwicklungsprozess in die Phasen Anforderung, Grobentwurf, Feinentwurf, Modulspezifikation und Programmierung sowie Modultest, Integrationstest, Systemtest und Abnahmetest. Dabei bilden die Tests die Qualitätskontrolle der dazugehörigen Entwicklungsphasen und entsprechen den unterschiedlichen Sichten auf das System. Ziel des Vorgehens ist es, die Umsetzung der einzelnen Entwicklungsphasen durch geeignete Testpha- sen zu kontrollieren und damit die Produktqualität zu verbessern. Die einzelnen Entwicklungsphasen sind dabei wie beim Wasserfallmodell streng gekapselt und folgen einem sequenziellen Ablauf. Dadurch ist es sehr schwierig, auf Änderungen der Anforderungen zu reagieren.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 3: V-Modell
Darüber hinaus werden wichtige das System betreffende Informationen, wie beim Wasserfallmodell in unterschiedlichen Dokumenten festgehalten, da sie in unterschiedlichen Phasen erstellt werden. In den Anforderungsdokumenten sind beispielsweise keine Rückschlüsse auf Implementierungsentscheidungen möglich. Auch die Dokumente des Grobentwurfes ermöglichen keine Rückschlüsse auf die direkte Implementierung und so können mögliche Änderungen des Designs wegen Problemen bei der Implementierung dort nicht beschrieben sein. Für die Wartung des Systems sind die existierenden Tests für die einzelnen Entwicklungsphasen von Vorteil, da diese als Regressionstest verwendet werden können. Auf die Wartungsaktivitäten von Systemen geht das Modell aber nicht weiter ein. Insgesamt stellt die Kontrolle der einzelnen Phasen durch Tests eine zu begrüßende Erweiterung gegenüber dem Wasserfallmodell dar. In punkto Flexibilität des Entwicklungsprozesses wurden aber keine Fortschritte gegenüber dem Wasserfallmodell erreicht.
Das W-Modell stellt eine Erweiterung des V-Models dar. Ziel des W-Modells ist die frühe Planung des Testes der einzelnen Entwicklungsphasen, um eine mögliche Aufwandsabschätzung für die späteren Tests aufstellen zu können. Parallel zu den Entwicklungsphasen Anforderungsdefinition, Grobentwurf, Feinentwurf, Modulspezifikation wird die Planung der jeweiligen Teststrategien für die einzelnen Phasen betrieben. Dadurch kann das Risiko für die spätere Testphase minimiert und Probleme, die das Systemumfeld betreffen, früh erkannt werden. Von Vorteil ist es, dass dadurch die Testbarkeit des Systems frühzeitig im Auge behalten wird. Durch dieses Vorgehen ist es möglich, das Softwaresystem umfangreicher zu testen als es durch das V-Modell möglich ist, da das System in punkto Testbarkeit von Anfang an optimiert wird. Für die Belange der Dokumentation eines Softwaresystems hat sich beim W-Mo- dell gegenüber dem V-Modell nichts geändert. Weiterhin wird die Dokumentation des Systems seitens des Vorgehensmodells eher vernachlässigt.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 5: W-Modell
Spiralmodell
Das Spiralmodell ist ein Vorgehensmodell, das es ermöglicht, während des Entwicklungsprozesses auf notwendige Änderungen einzugehen und damit versucht, mögliche Projektrisiken zu minimieren. Es handelt sich beim Spiralmodell um einen evolutionären Entwicklungsprozess. Die Entwicklung eines Softwaresystems erfolgt dabei in einzelnen Zyklen und das System entwickelt sich von Prototyp zu Prototyp, bis es den Anforderungen des Kunden entspricht und ausgeliefert werden kann. Vorteilhaft ist dieses Vorgehen vor allem dann, wenn der Kunde nicht genau sagen kann, was er will, aber wenn er das System „anfassen und sehen“ kann, dann genau weiß, wie es auszusehen hat. Darüber hinaus ermöglicht das Spiralmodell einen fließenden Übergang in die Wartungsphase. Die Wartung stellt einen weiteren Entwicklungszyklus im Spiralmodell dar. Ein Zyklus des Spiralmodells besteht aus folgenden Teilen:
1. Bestimmung der Ziele, Alternativen und Restrisiken des aktuellen Entwicklungszyklus
2. Bewertung der Alternativen sowie Identifizierung und Beseitigung von Restrisiken
3. Entwicklung des Produktes und Prüfung der nächsten Produktstufen
4. Planung des nächsten Entwicklungszyklus
Ein Zyklus kann dabei als Vorgehensmodell beispielsweise das Wasserfallmodell oder aber das V-Modell bzw. W-Modell zu Grunde liegen haben [ZusOl]. Die Anzahl der Zyklen bis zum fertigen Produkt sind beliebig und hängen von den auftretenden Problemen und Anforderungen des Kunden ab. Problematisch ist, dass beim Spiralmodell eine genaue Abschätzung der Kosten und des Zeitbedarfs nur mit viel Erfahrung möglich ist.
Abbildung in dieser Leseprobe nicht enthalten
Die Dokumentation wird beim Spiralmodell von Zyklus zu Zyklus weiterentwickelt und damit gut in den Entwicklungsprozess mit integriert. Darauf zu achten ist, dass die möglichen Risiken und Alternativen aus der 2. Phase, die nicht implementiert wurden, mit Begründung in der Dokumentation festgehalten werden, um so die Hintergründe für die Entscheidung transparent und nachvollziehbar aufzubewahren. Die Verwendbarkeit des Spiralmodells auch für die Wartung eines Softwaresystems ermöglicht die Integration der Dokumentation des Systems in den Wartungsprozess. Die Wartung stellt dabei einfach einen weiteren Zyklus im Spiralmodell dar. Ein Zyklus im Spiralmodell wird durch das Wasserfallmodell oder auch jedes beliebige andere Vorgehensmodell beschrieben. Bei der Dokumentation sollte darauf geachtet werden, dass sich der Dokumentationspozess vollständig durch einen Zyklus des Spiralmodells zieht und damit in alle Phasen des verwendeten Vorgehensmodells integriert wird. Nur so können alle getroffenen Anforderungen, Entscheidungen und Implementierungsdetails dokumentiert werden und die vollständige Bewahrung des Wissens wird möglich.
Extreme Programming (XP)
Extreme Programming ist wie dargestellt ein leichtgewichtiger respektive agiler Entwicklungsprozess bzw. ein Vorgehensmodell, das erst mit der objektorientierten Softwareentwicklung und der Möglichkeit, Quellcode zu refaktorisieren [FowOO], Einzug in die Softwareentwicklung gehalten hat. XP ist ein quellcode- und testgetriebener iterativer Entwicklungsprozess. Die Idee von XP ist es, die Iterationen sehr klein zu halten, um auf Änderungen des Kunden, der in den Entwicklungsprozess mit eingebunden wird, reagieren zu können. Die maximale Teamgröße beträgt etwa 15 Entwickler.
XP erfreut sich unter den Entwicklern großer Beliebtheit, da der Wegfall der als so störend empfundenen bürokratischen Zwänge (Erzeugung von Analyse-, Design- und Entwicklungsdokumente) die Arbeit des Entwickler wieder auf das Wesentliche, die Implementierung des Softwaresystems konzentriert. Zu beachten ist dabei aber, das noch viele andere kleine Merkmale des Prozesses erst das Umfeld schaffen, in dem XP gedeihen kann. Darüber hinaus verlangt der Prozess von den Entwicklern viel Disziplin und Erfahrung.
Das Risiko der Entwicklung, auf späte Anforderungen des Kunden nicht mehr reagieren zu können, soll durch die iterative Entwicklung und direkte Einbeziehung des Kunden in den Entwicklungsprozess minimiert werden. Darüber hinaus soll bei der Implementierung des Systems immer auf den einfachsten Ansatz gesetzt werden und komplexere Probleme durch die Verwendung von Entwurfsmustern der Schrecken genommen werden. Ziel ist, so das Verständnis für das System und seine Erweiterbarkeit zu erleichtern. Kernbestandteil von XP ist u.b. das Arbeiten in einem Team und in einem den menschlichen Bedürfnissen angepassten Umfeld. Das fängt beim paarweisen Programmieren (Paar-Programming) [KirOl] an und geht über eine definierte 4O Stunden-Woche bis hin zur gemeinsamen Planung der nächsten Iteration durch Story- und Aufgabenkarten (Task Cards). Ein Unterschied zum Spiralmodell ist die testgetriebene Entwicklung. Das heißt, dass zuerst der Test des zu implementierenden Quellcodes implementiert wird und die Implementierung selbst dann fertig ist, wenn der Test erfüllt wird [EH01].
Die Dokumentation in XP hat keine direkte Bedeutung, da der Prozess den Quellcode als Dokumentation des Systems versteht. Wenn der Auftraggeber eine Dokumentation des Systems verlangt, wird dies als extra Feature bzw. eigenes Produkt betrachtet, für das eine Zeit- und Kostenplanung erstellt wird. Der Gedanke von XP ist es, gerade durch den einfach gehaltenen Quellcode mögliche Wartungsaktivitäten zu vereinfachen. Darüber hinaus soll durch die Einbeziehung des ganzen Teams in die Implementierung wie auch das paarweise Programmieren jedem Entwickler das vollständige Verstehen des Quellcodes ermöglicht werden, da so der Verlust eines Entwicklern oder auch mehrerer Entwickler kompensiert werden kann. Leider fehlen die direkten Verbindungen von Quellcode und Storys sowie von Quellcode und Aufgabenkarten (Task Cards), aber auch die Dokumentation von Entscheidungen und Erklärungen zur Implementierung. In der Diplomarbeit von Ebel „Aufgabenorientierte Verknüpfung von Anforderungen und Programmcode auf Basis einer Wissensmanagementumgebung“ [Ebe04] wird die Verbindung von Story sowie Task Cards und Quellcode untersucht. Die Verknüpfung von Quellcode und Dokumentation beleuchtet und veranschaulicht diese Arbeit in Kapitel 3.
Rational Unified Process (RUP)
Der Rational Unified Process (RUP) [RUP] ist ein ein iteratives, inkrementelles, Anwendungsfall getriebenes und Architektur zentriertes Vorgehensmodell für objektorientierte Soft- ware[BEM03]. Ziel ist es, die Produktivität des Entwicklers zu erhöhen und dem Projektleiter Kontrollmöglichkeiten für die Planung und die Ergebnisse des Projektes an die Hand zu geben. Dies wird durch die folgenden Eigenschaften von RUP unterstützt werden:
- generisches Prozess-Modell
- ergebnisorientiert
- Unified Modelling Language ™ (UML ®) ist die zentrale Notation [UML]
- Use Cases basiert
- unterstützt den prototypischen Ansatz
- vollständige Werkzeugunterstützung
RUP unterscheidet den Softwareentwicklungsprozess in zwei Dimensionen, die Zeitachse (Phasen) und die Arbeitsinhalte (Workflow). Die zeitlichen Aspekte werden in RUP in Phasen zusammengefasst. Dabei besteht das Vorgehensmodell aus folgenden Phasen:
- Konzeptionsphase
- Entwurfsphase
- Konstruktionsphase
- und Übergangsphase.
Die vier Phasen werden jeweils von einem Meilenstein abgeschlossen. Für die einzelnen Phasen ist genau definiert, welche Ziele verfolgt, welche Aufgaben erfüllt und Ergebnisse erwartet werden. Die Anforderungen, die ein Meilenstein erfüllen muss, schreibt RUP fest vor. Dadurch ist für jede Arbeitsphase klar definiert, welche Aufgaben respektive Anforderungen zu erfüllen sind. Die zweite Dimension der Arbeitsinhalte umfasst die Kernarbeitsabläufe und die unterstützenden Kernarbeitsabläufe. Zu den Kernarbeitsabläufen (Core Process Workflow) gehören die Geschäftsprozessmodellierung (Business Modeling), die Erfassung der Anforderungen (Requirements), die Analyse sowie das Design (Analysis & Design), die Implementierung (Implementation), der Test (Test) und die Verteilung (Deployment).
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 7 Rational Unified Process (RUP)
Die Kernarbeitsabläufe (Core Supporting Workflows) bestehen aus dem Konfigurationsmanagement sowie Änderungsmanagement (Configuration & Change Management), dem Projektmanagement (Project Management) und dem Umgebungsmanagement (Enviroment). Die Schwerpunktverteilung der einzelnen Arbeitsabläufe über den Projektverlauf hinweg kann man der Abbildung 7 entnehmen. XP wird durch eine komplette Werkzeugpalette in der Bearbeitung der einzelnen Phasen und Arbeitsabläufe unterstützt und damit können die unterschiedlichen Informationen miteinander vernetzt werden. Die Werkzeugunterstützung und Vernetzung und ist ein enormer Vorteil des Prozesses. Als nachteilig erweisen sich aber leider die hohen Kosten für die Werkzeugeinführung.
RUP hält eine Vielzahl von Informationen und Hintergründen in Dokumenten fest. Der Prozess wird so kontrollierbarer und abschätzbarer. Inwieweit die Dokumente miteinander vernetzt werden können, hängt von der technischen Umsetzung ab. Eine direkte Verbindung von Quellcode und Dokumentation wäre dabei von einem enormen Vorteil. Die Fülle an dokumentierten Entscheidungen ermöglicht es, die Wartung des Systems gut zu unterstützen, wenn die Dokumentation vollständig und aktuell ist. Der Rational Unified Process erstellt eine große Fülle an Dokumenten. Ob eine Straffung für das Verständnis nicht sinnvoll wäre, soll an dieser Stelle dahingestellt bleiben. Der Aufwand, der für die Softwareentwicklung getrieben wird, ist im Gegensatz zu XP sehr hoch.
2.3.2 Zusammenfassung
Die vorgestellten Vorgehensmodelle berücksichtigen die Erstellung einer Dokumentation mehr oder weniger. Bei XP wird die Dokumentation im Prozess selbst nicht direkt berücksichtigt und RUP hält eine Vielzahl von Einzelheiten fest. Das Wasserfallmodell, das V-Mo- dell sowie das W-Modell berücksichtigen die Dokumentation nur in der Implementierungsphase. Dort ist aber keine direkter Rückschluss auf Entscheidungshintergründe aus erster Hand möglich. Darüber hinaus wird keine Aussage darüber getroffen, wie die Dokumentation in der Wartungsphase zu behandeln ist. Festzuhalten bleibt, dass die Dokumentation meist als losgelöstes Produkt von der eigentlichen Software betrachtet wird und auf das Problem der fortlaufenden Dokumentation in den Vorgehensmodellen nicht eingegangen wird. Um dies zu ändern, stellen Vorgehensmodelle den Ausgangspunkt bei der Einführung und Durchsetzung veränderter Arbeitsweisen dar. Um die Wissensbewahrung stärker in der Softwareentwicklung zu etablieren, sollte für die einzelnen Phasen eines Vorgehensmo- dells klar dargelegt werden, welche Informationen sinnvollerweise bewahrt werden sollten. Der Prozess der Informations- und Wissensbewahrung wird aber immer stark von den einzelnen Mitarbeitern und deren Sensibilisierung fur diese Problematik sowie dem Arbeitsumfeld abhängen.
2.4 Einwirkungen des Menschen und des Arbeitsumfeldes auf die Dokumentation in der Softwareentwicklung
Die Dokumentation von Software ist ein Prozess, der beeinflusst wird durch die Softwareentwicklung, das Arbeitsumfeld, die menschlichen Bedürfnisse und Interessen, aber auch durch die technischen Gegebenheiten. Diese Ansichten werden seit Ende der 60er Jahre, als auf Grund der Softwarekrise zwei Arbeitskonferenzen zum Thema Software Engineering in Garmisch und Rom stattfanden, heiß diskutiert. Auf den Arbeitskonferenzen wurden zwei grundsätzliche Hauptursachen für die Probleme verantwortlich gemacht. Ein Teil der Teilnehmer war der Ansicht, dass die Probleme der Softwaretechnik auf Probleme mit der Kommunikation, Kooperation und Organisationsstruktur zurückzuführen sind. Die anderen Teilnehmer waren der Auffassung, dass die Krise auf fehlende Software-Technologien zurückzuführen ist [PAS94]. Allein diese intensiv geführte Diskussionen macht klar, dass es wohl beide Faktoren sind, die enormen Einfluss auf die Softwareentwicklung haben. In diesem Kapitel werden daher das Umfeld der Softwareentwicklung und der Dokumentation von Software sowie die Einflüsse auf diese Faktoren beleuchtet.
Einer aktuellen Studie (An der Studie haben insgesamt 2001 Frauen und Männer über 18 Jahre teilgenommen.) aus dem Jahr 2003 von Gallup [Gallup] zufolge machen 70 Prozent der deutschen Arbeitnehmer nur Dienst nach Vorschrift. Festgestellt wurde dabei, dass Chefs selten andere Meinungen zulassen und die Vorgesetzten kaum Interesse am Mitarbeiter selbst zeigen. Dadurch fühlt sich der Arbeitnehmer nicht mit dem Unternehmen verbunden und macht nur die ihm aufgetragenen Aufgaben, also Dienst nach Vorschrift. Der Schaden, der dabei für die Wirtschaft durch Fehlzeiten und niedrige Produktivität entsteht, wird mit etwa 220 Milliarden Euro jährlich angegeben. Diese Problematik hat natürlich auch Einfluss auf einen kreativen Prozess wie die Softwareentwicklung und die Dokumentation von Softwaresystemen und sollte daher keinesfalls vernachlässigt werden (siehe Kapitel 2.4.1).
Für die Softwareentwicklung und damit auch für die Dokumentation hat die Organisation von leistungsfähigen Teams eine gewichtige Bedeutung. Die Art, wie ein Team organisiert ist, legt fest, wieviel Einfluss ein einzelner Entwickler auf die Entwicklung eines Softwaresystems hat (siehe Kapitel 2.4.2). Darüber hinaus haben bestimmte grundlegende Ansichten des Arbeitgebers sowie des Kunden Auswirkungen auf die Erstellung der Dokumentation. Wird die Dokumentation eines Softwaresystems beispielsweise als sinnlos und unnötig generell abgelehnt, wird dem Entwickler, selbst wenn er eine Dokumentation erstellen möchte, die Zeit dafür fehlen, weil für ihn vom Projektleiter die notwendige Entwicklungszeit nicht eingeplant wurde (siehe Kapitel 2.4.3). Auf Seiten des Kunden kann die Meinung vorherrschen, dass die Erstellung einer Dokumentation so nebenbei passiert und keine Kosten verursacht. In einem solchen Fall gerät der Auftragnehmer enorm unter Druck. Der Auftragnehmer sollte daher versuchen, dem Kunden klar zu machen, dass die Erstellung der Dokumentation geplant werden muss und Kosten verursacht. Zusätzlich sollte er die Gründe für eine Dokumentation von Softwaresystemen stärker hervorheben und die Einsparung von Kosten bei der Wartung darlegen (siehe 2.4.4).
Es zeigt sich, dass viele nicht sofort erkennbare Faktoren Einfluss auf die Softwareentwicklung und damit auf die Erstellung der Dokumentation haben. Gerade die Erstellung einer Dokumentation ist bei Softwareentwicklern keine beliebte Arbeitsaufgabe. Daher sollte versucht werden, das Umfeld, in der die Dokumentation erstellt wird, so zu optimieren, dass der Softwareentwickler sich aufgehoben fühlt und auch diese Arbeit gern und zielstrebig erledigt.
2.4.1 Mensch
Der Mensch ist ein Lebewesen, das Bedürfnisse hat. Diese Bedürfnisse haben sich im Laufe der Zeit erweitert und verändert. Die Maslowsche Bedürfnispyramide (siehe Abbildung 8) geht von der Annahme aus, dass Menschen danach suchen, unbefriedigte Bedürfnisse zu befriedigen. Sofern eine Person die dauerhafte Befriedigung einer der aufgeführten Bedürfnisse als weitgehend sichergestellt ansieht, verliert diese Bedürfniskategorie ihre handlungsmotivierende Wirkung. Allerdings können Veränderungen der Lebenssituation wie Krieg, Arbeitslosigkeit etc. dazu führen, das ein ehemals befriedigtes Bedürfnis erneut als unbefriedigt angesehen wird, und somit eine erneute handlungsmotivierende Bedeutung erhält [MotOl].
Damit sich die Motivatoren (siehe Abbildung 8) Wertschätzung und Selbstverwirklichung entfalten können, müssen die Defizitbedürfnisse erfüllt sein. Zu den Defizitbedürfnissen, die durch das Arbeitsumfeld beeinflusst werden können, gehören die Sicherheitsbedürfnisse (kein Angst um den Arbeitsplatzes und das Einkommen) und die sozialen Bedürfnisse (Zusammenhalt & Kontakt mit Menschen, Akzeptanz). Dadurch werden aber auch die physiologischen Bedürfnisse (Bedürfnis nach Nahrung, Wohnung und Kleidung) beeinflusst, da erst durch das Gehalt die Möglichkeit geschaffen wird, sich Nahrungsmittel und Kleidung zu kaufen. Das bedeutet, dass das Arbeitsumfeld Einfluss auf alle Defizitbedürfnisse haben kann. Wenn dieser Einfluss aber negativ ist, ist es nicht möglich, die Motivatoren zu aktivieren.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 8: Maslowischen Bedürfnispyramide
Durch das Ansprechen der Motivatoren können aber die Mitarbeiter stärker daran interessiert werden, sich für das Unternehmen einzusetzen. Das Aktivieren der Motivatoren im Arbeitsumfeld geschieht durch das Ansprechen der Wertschätzungsbedürfnisse (Anerkennung des Menschen, seiner Leistung, Einräumen von optionalem Gestaltungsspielraum) und der Selbstverwirklichungsbedürfnisse (freie Gestaltung der Arbeit, Verantwortung) wodurch die Mitarbeiter über die „Dienst nach Vorschriftschwelle“ gehoben werden und so in besonderem Maße zum Unternehmenserfolg beitragen können. Gerade dies scheint aber in vielen deutschen Unternehmen leider zu misslingen [Gallup]. Daher ist es notwendig, ein Umfeld zu schaffen, in dem sich die Softwareentwickler wohl fühlen. Die Softwareentwickler messen den Herausforderungen ihrer Tätigkeit eine ähnlich große Bedeutung zu wie dem Jahresgehalt [DeMOl]. Daher ist es notwendig, ihnen diese Herausforderung zu bieten, um damit mögliche negative Auswirkungen auf die Softwareentwicklung und die Dokumentation zu minimieren. Eine mangelndes Interesse bzw. fehlende Motivation, die Dokumentation zu erstellen, hat zur Folge, dass wichtige Information nicht oder ungenügend festgehalten werden. Daraus können sich hohe Wartungskosten aber auch hohe Einarbeitungsaufwände für neue Mitarbeiter ergeben. Gerade dies zu vermeiden und die Motivatoren zu aktivieren, sollte Ziel eines umsichtigen Managements sein.
2.4.2 Teamarbeit
Die Teamarbeit stellt das grundsätzliche organisatorische Arbeitsumfeld in der Softwareentwicklung dar. Nur durch das gemeinsame Bearbeiten von komplexen Aufgaben in einer Gruppe von Entwicklern können diese Aufgaben gelöst werden. Für einen einzelnen Entwickler ist der Arbeitsaufwand für die Lösung der Aufgabe meist zu groß und darüber hinaus kann nicht jeder Entwickler alle erforderlichen Fähigkeiten besitzen. Der Vorteil eines Teams ist, dass durch Arbeitsteilung, Zusammenwirken von unterschiedlichen Personen sowie Ideen- und Wissensaustausch (Kommunikation) fast alle Probleme gemeinsam gelöst werden können. Ein Team ist eine harmonische Gruppe von Menschen, die sich gemeinsamen Zielen verpflichtet, Freude an der Arbeit hat und hervorragende Leistungen bringt [Tha02].
Teams können unterschiedlich organisiert sein. Zum einem existiert die bekannte hierarchische bzw. autokratische Organisation von Teams, zum anderen die demokratische Organisation. Häufig herrscht der Glaube vor, dass die Teams im eigenen Unternehmen demokratisch agieren. Dies ist aber meist nur zwischen gleichrangigen Gruppenmitgliedern und nicht innerhalb des gesamten Teams der Fall. Das wird vor allem dann deutlich, wenn Teile des Teams an bestimmten Prozessen nicht beteiligt werden oder gar nur gefilterte Informationen erhalten. Der Grund dafür liegt in den direkten und indirekten Organisationsstrukturen der Unternehmen und Institutionen. Direkte Organisationsstrukturen bestehen aus Hierarchien und besitzen damit eine ihnen innewohnende „Weisungsbefugnis“, durch die es zu Kommunikationsproblemen im Team kommen kann. Die strenge Hierarchie führt häufig dazu, dass Probleme und Fehler nicht oder erst sehr spät an höhere Ebenen weitergeleitet werden. Das haben viele Unternehmen erkannt und die Organisationsform ihrer Teams angepasst und Hierarchieebenen in ihnen minimiert oder ganz aufgehoben. Durch die Besitzstandswahrung entstehen aber meist indirekte Organisationsstrukturen, die dazu führen, dass immer noch bestimmte Teammitglieder nicht an Entscheidungen beteiligt werden. Meist herrscht die Angst vor, sich mit zu vielen Entwicklern bei einem Meeting in unendlichen Diskussionen zu verlieren. Verkannt wird dabei aber häufig, dass durch eine wenn auch nur minimale physische oder auch geistige Beteiligung aller Teammitglieder am Entscheidungsprozess das Gesamtverständnis und die Akzeptanz für das gemeinsame Produkt steigen. Diese Akzeptanz stellt einen unschätzbaren Wert für die Produktivität dar, denn es kommt zu einem „Einschwören“ des Teams, weil sich alle als zum Team gehörend fühlen.
Chef-Progammierer- Team
Eine stark verbreitete Teamorganisationsform ist das Chef-Progammierer-Team, bei dem der Chef, unterstützt von einigen Assistenten, das Softwaresystem entwickelt [PAS94]. Problematisch ist dabei, dass alle Entscheidungen allein vom Chef, einem sehr fähigen aber nicht unfehlbaren Entwickler getroffen werden. Darüber hinaus kennt außer dem Chef niemand das fertige Softwaresystem genau, weil keine weiteren Entwickler an allen Entscheidungen beteiligt waren. Da stellt sich natürlich die Frage, wer bei einer möglichen Wartung des Systems diese durchführt und wie ein Informationsverlust beim Weggang des Entwicklers vermieden werden kann. Eine Lösungsmöglichkeit stellt die Dokumentation des Systems dar. Das Problem dabei ist, dass nur der Chef eine qualitativ hochwertige Dokumentation erzeugen kann, da nur er alle Details des Systems kennt. Aber Zeitnot und fehlende Priorität gefährden das Erstellen der Dokumentation. Das Chef-Entwickler-Team stellt damit nicht die ideale Organisationsform eines Teams dar.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 9: Erweitertes Chef-Programmierer-Team
Die erweiterte Form des Chef-Programmierer-Teams besteht aus einer hierarchischen Organisationsstruktur (siehe Abbildung 9). Dabei leitet jeder Seniorprogrammierer ein Team von Ju- niorprogammierern, die die eigentliche Implementierungsarbeit leisten. Die Entwurfsarbeit wird dabei von den Seniorprogrammierern übernommen. Das führt aber zu Problemen, da die Kommunikation zwischen den Juniorprogrammiern teilweise nur über die Zwischenebene der Seniorprogrammierer und damit gefiltert erfolgt. Hierarchische Kommunikationswege beeinträchtigen die Qualität, Quantität und Schnelligkeit des Informationsflusses [MayOl]. Zusätzlich ist die Autonomie der Gruppen gegenüber ihrer Umwelt beim erweiterten ChefProgrammierer-Team durch die Hierarchie eingeschränkt, da immer eine Interaktion mit den anderen Gruppen bei übergreifenden Problemen notwendig ist. Für die Dokumentation des Systems bedeutet das, dass es bei der Erstellung zu Überschneidungen und Lücken in der Dokumentation kommen kann. Grund dafür ist, dass Entwurfsentscheidungen und die Implementierung dieser kein Teammitglied genau kennt. Die Juniorprogrammierer kennen nicht alle Hintergründe des Systems und die Seniorprogrammierer besitzen nicht das Detailwissen über die Implementierung. Darüber hinaus kennen die einzelnen Teams nicht die Systemteile der anderen Teams und etwaige Benutzung eigner Systemteile durch sie. Daher ist diese Art der Teamorganisation für den Austausch von Wissen und die Zusammenarbeit bei der Erstellung einer Dokumentation nachteilig. Die Folge ist eine schlechte Qualität der Dokumentation, da die Dokumentation nicht homogen wirkt.
Die demokratische Organisation von Teams
Die demokratische Organisation von Teams ermöglicht es, dass sich jedes Teammitglied in den Arbeitsprozess einbringen und je nach seinen Fähigkeiten auch die Leitung des Teams übernehmen kann [PAS94]. Diese Faktoren bewirken eine enorme Dynamik, die sich aus der Maslowischen Bedürfnispyramide (siehe Abbildung 8) ergibt. Die Vorteile einer demokratischen Organisation von Teams sind vielfältig. Dazu gehören das schnellere Erkennen von Fehlern, eine bessere Kontrolle der Projektfortschritte, die Minimierung der Negativefolgen eines Personalwechsels und der Anstieg der allgemeinen Arbeitszufriedenheit in der Gruppe. Auf den Strukturen eines demokratischen Teams baut die Idee des „egoless Programming“ auf. Viele Entwickler betrachten den von ihnen implementierten Quellcode als ihr Eigentum und erweitern ihr Ego um diesen. Daraus ergeben sich Probleme beim Kritisieren des Codes durch andere Entwickler. Um diese Problem zu vermeiden, soll sich der Programmierer gegenüber seinen Kollegen öffnen und den Quellcode als Eigentum des Projektteams begreifen. Diese Öffnung des Programmierers bezeichnet man als „egoless programing“ [Wei98]. Durch das Öffnen des Programmieres ist es möglich, dass der Quellcode in der Gruppe oder von einzelnen Teammitgliedern geprüft werden kann, ohne dass Kritik an der Implementierung als Kritik an dem einzelnen Entwickler verstanden wird, sondern als Motivation für die Gruppe, die den Quellcode gemeinsam implementiert und auch den Fehler gefunden hat. Extreme Programming (siehe Seite 30) baut auf denselben Grundvorstellungen wie das „egoless programming“ und die demokratischen Teams auf und erfreut sich gerade auch wegen der damit verbundenen Möglichkeit, sich in die Entwicklung mit einzubringen, großer Beliebtheit.
Für die Dokumentationserstellung hat ein demokratisches Team einige Vorteile. Entwickler können sich beispielsweise die Arbeit teilen und sich darüber hinaus gegenseitig unterstützen und erkennen gemeinsam schneller, welche Informationen wirklich wichtig sind und welche nicht. Die Dokumentation sollte in demokratischen Teams auch dazu verwendet werden, viel hintergründiges Wissen zwischen den Teammitgliedern auszutauschen, um es damit gleichzeitig zu bewahren. Die Teamkonstellation schafft darüber hinaus durch die enge Bindung der Teammitglieder eine Basis für den ungezwungenen Austausch von Informationen. Denn häufig passiert es noch, dass Informationen von einzelnen Entwicklern zurückgehalten werden, weil sie diese nicht teilen wollen, da sie glauben, sich so einen Vorteil gegenüber den anderen Entwicklern verschaffen zu können. Hilfreich ist in solchen „persönlichen“ Teams, wenn kontextbezogene Informationen abgelegt und automatisch jedem Teammitglied zugänglich gemacht werden können. So ist es jedem Teammitglied möglich, die Informationen anzupassen bzw. zu erweitern oder zur Diskussion zu stellen.
2.4.3 Arbeitgeber
Der Arbeitgeber hat das Ziel, aus den Aufträgen, die er bekommen hat, Gewinn zu erwirtschaften, d.h. wirtschaftlich zu arbeiten. Um dieses Ziel zu erreichen, versucht er alle Projekte mit Erfolg im vorgegebenen Zeit- und Kostenrahmen durchzuführen. Um das zu schaffen, stellt er Teams von Entwicklern zusammen und übergibt ihnen den Projektauftrag. Ziel des Arbeitgebers ist es nun, den Teams die erforderlichen Randbedingungen zu schaffen sowie finanzielle Mittel zur Verfügung zu stellen, damit sie den Auftrag erfolgreich durchführen können. Darüber hinaus wird er versuchen, seine Mitarbeiter so zu managen, dass sie gerne bei ihm arbeiten und ihre Bedürfnisse befriedigt werden (siehe Abbildung 8 Maslowsche Bedürfnispyramide). Bei der Planung des Projektes ist drauf zu achten, dass der Arbeitgeber Menschen und geplante Arbeitsmonate nicht gleichgesetzt, denn Menschen und geplante Arbeitszeiten sind nicht austauschbar, da immer Reibungsverluste auftreten [PAS94]. Zu enge Zeitpläne führen automatisch zu ungewollten Qualitätseinbußen.
Das Managen der Teams umfasst die Zusammenstellung der Teams, deren Einschwörung, Motivation und Konfliktbewältigung. Darüber hinaus muss ein Umfeld für das Team geschaffen werden, in dem es produktiv arbeiten kann. Dazu gehören Räume für die Mitarbeiter, für Diskussionsrunden, für die Präsentation, aber auch Räume, in denen sich die Mitarbeiter für eine Weile entspannen können, um danach weiterzuarbeiten. In vielen Unternehmen wurden diese Ruheräume in den letzten Jahren einführt, so zum Beispiel 1995 am Hauptsitz der IBM in der Schweiz [Sie02]. Der Erfolg gibt dem Unternehmen recht. Anzumerken ist, dass ein befürchteter Missbrauch völlig ausgeblieben ist. Wichtig für das Gelingen eines Projektes ist aber auch die Ausstattung mit den richtigen Hilfsmitteln. Dazu zählen beispielsweise schnelle Computer, die das Arbeiten nicht behindern oder auch Softwaresysteme, welche die Projektarbeit sinnvoll unterstützen.
Diese Faktoren mögen in erster Linie nichts mit der Erstellung von Dokumentationen von Softwaresystemen zu tun haben, beeinflussen aber diese in hohem Maße. Verstehen sich beispielsweise einige Teammitglieder überhaupt nicht, geht viel Zeit mit unnötigen Streitereien verloren und darunter leidet auch die Erstellung der Dokumentation. Da Dokumentation aber die Bewahrung von Informationen und Wissen ist, wird klar, dass sich Probleme im Team auch auf die Qualität der Dokumentation auswirken, da der Austausch von Informationen behindert wird. Eine andere Problematik kann die fehlende nötige Ruhe bei der Arbeit sein. Stehen den Mitarbeitern zum Beispiel nur laute Großraumbüros zur Verfügung, leidet darunter die Qualität der Dokumentation, da sich der Entwickler nicht konzentrieren kann, weil beispielsweise im Raum geredet, diskutiert oder telefoniert wird [DT99]. Nicht unerheblich störend und Zeit fressend können veraltete Arbeitsmittel sein. Wenn beispielsweise das System (Hardware) für das Starten der Software, die zum Erstellen der Dokumentation dient, sehr lange braucht, wird der Entwickler schon allein durch diese Tatsache davor zurückschrecken, das System zu benutzen. Er möchte nur ungern seinen Arbeitsprozess unterbrechen. Auf der Softwareseite führen veraltete und nicht den Möglichkeiten und Bedürfnissen anpassbare Software zum steten Ärgernis der Entwickler, weil die Tätigkeit des Dokumentierens unnötig erschwert wird. Alle diese Probleme haben einen negativen Einfluss auf die Dokumentationen, denn dadurch verlieren die Mitarbeiter das Interesse an diesen Aufgaben.
Den Auftraggeber (Kunden) und das Team Zusammenzufuhren und in Konfliktfällen zu vermitteln, ist u.a. Aufgabe des Arbeitgebers. Wichtig ist es dabei vor allem, dass die Erstellung einer Dokumentation gegenüber dem Kunden plausibel vertreten und vermittelt wird, da die Erstellung einer Dokumentation Kosten für den Kunden verursacht.
2.4.4 Kunde
Der Kunde bezahlt Geld dafür, dass der von ihm erteilte Auftrag erfüllt wird. Die meisten Softwareentwicklungsprojekte erfordern eine intensive, vorherige Abstimmung, in deren Ergebnis ein detaillierter verbindlicher Projektplan mit definierten Meilensteinen vereinbart wird. In vielen Fällen wird ein Produkt speziell auf die Bedürfnisse und Anforderungen des Kunden zugeschnitten. Vertrauen und Zusammenarbeit spielt für das gemeinsame erfolgreiche Realisieren des Projektes eine entscheidende Rolle, dazu zählt von Anfang an ein offener Umgang mit Problemen, Risiken und Entscheidungen, die den Projekterfolg tangieren. (Hätte beispielsweise Toll Collect die Bundesregierung in den Jahren 2002/03 frühzeitig über seine Probleme bei der Projektrealisierung informiert, hätte die Abschaffung der bestehenden Vignette verzögert werden können, um so den finanziellen Schaden zu minimieren.) Werden Risiken bei der Sicherheit des Systems zugunsten der Kosten verschwiegen, kann das zu Regressansprüchen seitens des Kunden gegenüber dem Auftragnehmer führen und das Verhältnis so gestört sein, dass eine weitere Zusammenarbeit nicht möglich ist. Der Kunde muss gerade bei individuellen Lösungen bereit sein, eigene Mitarbeiter für die direkte Zusammenarbeit mit dem Entwicklerteam einzusetzen. Einen vorbildlichen Ansatz stellt die Grundidee von XP dar, mindestens einen Mitarbeiter des Kunden in das Entwicklerteam aufzunehmen, der jederzeit alle auftretenden Fragen beantworten oder weiterleiten kann, da gerade Softwareentwicklung kein Prozess ist, der bis ins Letzte geplant werden kann. Der gemeinsame Umgang mit Problemen ist besonders wichtig für das gegenseitige Vertrauen und für die spätere Zusammenarbeit. Wie bereits dargestellt, verursacht Softwareentwicklung einen hohen Teil der insgesamt anfallenden Kosten für ein Softwaresystem [Sne91]. Diese Kosten zu minimieren, Risiken und Entscheidungen zu dokumentieren, ist Bestandteil einer erfolgreichen Projektrealisierung.
Denn gerade das Dokumentieren von kritischen Entscheidungen und möglichen Problemen kann für eine spätere Weiterentwicklung von enormem Vorteil sein. Dazu ist es aber erforderlich, dass der Kunde im Einzelfall akzeptiert, dass es nicht immer die ideale Lösung gibt oder aber diese mehr kostet. Fehlt dieses Verständnis beim Auftraggeber, verführt das den Auftragnehmer mit einem hohem Risiko zu arbeiten. Die Folgen treten dann zumeist erst viel später zu Tage und können sehr kostenintensiv werden. Die Dokumentation ist ein sehr sensibler Produktteil. Ihre Güte und daraus entstehende Folgen hängen nicht unwesentlich von der Zusammenarbeit und dem Vertrauen zwischen Kunden und Auftraggeber ab. Zu beachten ist, dass verschwiegene kritische Punkte auch durch ein Reengineering des Softwaresystems meist nicht entdeckt werden können. Der Gesetzgeber hat in jüngster Zeit die Aufsichtspflicht für Unternehmen (insbesondere für Banken und Versicherungen), die ihre IT im Outsourcing betreiben lassen, erheblich verschärft. Hauptgrundlage für die Wahrnehmung dieser Verantwortung sind fehlerfreie, aktuelle Dokumentationen auch von Anwendungsprogrammen.
2.4.5 Einflüsse des Arbeitsumfeldes auf die Erstellung einer Dokumentation
Die Einflüsse des Arbeitsumfeldes auf die Dokumentation sind auf den ersten Blick meist nicht erkennbar, aber dennoch können sie, wie sich gezeigt hat, große Auswirkungen auf die Qualität der Dokumentation eines Softwaresystems und damit auf das Softwareprojekt selbst haben. Diese Einflüsse sind meist nicht nur technischer Natur. Wie aufgezeigt, wirken sich vor allem die sogenannten „weichen Faktoren“ direkt auf die Softwareentwicklung aus. Dazu gehören unter anderem die menschlichen Bedürfnisse, wie sie Maslow darstellt, aber auch der Teamzusammenhalt. Dies zu beachten ist wichtig bei der Planung und Durchführung eines Softwareprojektes. Gerade die Qualität sensibler Arbeitsergebnisse wie die Dokumentation eines Softwaresystems hängt stark von den Umfeldbedingungen ab.
2.5 Informationsmanagement und Wissensmanagement in der Softwareentwicklung
Informations- und Wissensmanagement spielt in der Softwareentwicklung eine entscheidende Rolle bei der erfolgreichen Durchführung von Projekten. Gerade bei der Entwicklung von Software müssen oftmals zwischen weit voneinander getrennten Lokationen Anforderungen der Kunden, Entscheidungen aber auch Erkenntnisse zu Problembereichen kommuniziert werden [RL02].
Als problematisch erweist sich die Haltung zahlreicher Unternehmen gegenüber dem Wissensmanagement. Über 50% der Unternehmen haben kein Wissensmanagement. (Quelle: KPMG: Knowledge Management - Research Report, 1998). Die Umfrage von 1998 befasst sich zwar nicht vornehmlich mit Unternehmen aus der Softwareentwicklung, es wird aber deutlich, dass viele Unternehmen das Wissensmanagement vernachlässigen. In den letzten Jahren erst ist die Sensibilität zu diesem Thema gewachsen. Die Unternehmen fangen an zu erkennen, dass die wichtigste Ressource in innovativen Branchen wie der Softwareentwicklung das Wissen ist. Der Erwerb von Wissen verursacht hohe Kosten. Sie können minimiert werden, wenn das Wissen nicht mehrfach bzw. wiederholt erworben werden muss. In diesem Zusammenhang stellt sich die Frage, was Wissen eigentlich ist? Probst definiert Wissen folgendermaßen:
„Wissen bezeichnet die Gesamtheit der Kenntnisse und Fähigkeiten, die Individuen zur Lösung von Problemen einsetzen. Dies umfasst sowohl theoretische Erkenntnisse als auch praktische Alltagsregeln und Handlungsanweisungen. Wissen stützt sich auf Daten und Informationen, ist im Gegensatz zu diesen jedoch immer an Personen gebunden. Es wird von Individuen konstruiert und repräsentiert deren Erwartungen über Ursache-Wirkungs-Zusam- menhänge.“ [PRR03]
Es wird dabei ein Unterschied zwischen explizitem und implizitem Wissen gemacht. Explizites Wissen umfasst greifbares und damit beschreibbares, formalisierbares, zeitlich stabiles Wissen, welches standardisiert, strukturiert und methodisch in sprachlicher Form beispielsweise in Dokumenten, Datenbanken und Patenten eindeutig festgehalten und repräsentiert werden kann.[PRR03] Im Gegensatz dazu ist implizites Wissen in den Köpfen von einzelnen Individuen gespeichert und beinhaltet sowohl kognitive Elemente wie subjektive Einsichten, Wahrnehmungen, Intuitionen und Gefühle. Dieses Wissen lässt sich nur schwer formalisieren und kommunizieren. Damit ist es schwierig implizites Wissen zu transportieren und anderen Arbeitnehmern zur Verfügung zu stellen.
Das Wissensmanagement hat die Aufgabe, das Umfeld und den Austausch von Wissen zu fördern und zu organisieren. Das Wissensmanagement umfasst Maßnahmen, die es erlauben das Wissen effizient zu nutzen. Diese können dabei sowohl organisatorischer, personeller aber auch technischer Natur sein. Das kann bei der Einführung von Wissensmanagement unterstützenden Organisationsformen, die die hierarchischen Strukturen minimieren, anfangen und geht bis zu gemeinsamen außerbetrieblichen Unternehmungen, die die Mitarbeiter näher zusammenbringen. Hauptaufgabe des Wissensmanagements ist es dabei, die Barrieren, die das Verteilen von Wissen beeinflussen, zu minimieren. Als solche haben sich in einer Umfrage die Zeitknappheit, fehlendes Bewusstsein fürs Wissensmanagement, Unkenntnis über den Wissensbedarf aber auch die Einstellung „Wissen ist Macht“ erwiesen (Quelle: Bullinger, H..- J.; Wörner, K.; Pieto, J.: Wissensmanagement heute - Daten, Fakten, Trends; Ergebnisse einer Unternehmensstudie des Fraunhofer-Instituts für Arbeitswissenschaft und Organisation in Zusammenarbeit mit dem Manager Magazin, 1997).
Als die klassischen Kernbausteine des Wissensmanagements verstehen sich die Wissensidentifikation, der Wissenserwerb, die Wissensentwicklung, die Wissensverteilung, die Wissensnutzung und die Wissensbewahrung. Wichtig für das Wissensmanagement ist es zu erkennen, wer Wissen zu einem definierten Thema oder Problem hat. Damit kommt der Wissensidentifikation eine zentrale Bedeutung zu. Bei der Wissensidentifikation wird erkannt, ob und in welchem Umfang Wissen von außen benötigt wird. Wenn dies der Fall ist, ist es notwendig Wissen zu erwerben, was meist nicht ohne Probleme möglich ist. Daher kommt der zielgerichteten unternehmenseigenen Wissensentwicklung eine hohe Bedeutung zu. Für eine reibungsfreie Wissensentwicklung ist es vor allem erforderlich, dass Barrieren weggeräumt werden, um so den Wissenserwerb der Mitarbeiter bewusst zu fördern. Ein wichtiger Schritt ist dabei die Verteilung von bestehendem Wissen. Möglich wird das durch technische aber auch organisatorische Maßnahmen. Im Einzelnen kann ein Softwaresystem zum Festhalten und Austauschen von Wissen genauso wichtig sein wie das Aufheben unnötiger räumlicher Trennungen. Ist das Wissen im Unternehmen erst einmal vorhanden, muss es effektiv genutzt werden. So ist es z.B. notwendig, die richtigen Personen in die Vorbereitung wichtiger Entscheidungen einzubeziehen. Darüber hinaus ist die optimale Zusammenstellung von Teams und die Integration aller Mitarbeiter förderlich für die Nutzung des Wissens des Einzelnen. Damit das Wissen der Mitarbeiter z.B. beim Weggang oder durch einfaches Vergessen für das Unternehmen nicht verloren geht, muss das Wissen bewahrt werden. Die Wissensbewahrung stellt eine der schwierigsten und komplexesten Bereiche des Wissensmanagements dar. Die Wissensbewahrung ist auch einer der wichtigsten Teilbereiche des Wissensmanagements für die Softwareentwicklung. Viel Wissen ist während der Entwurfs-, Design- und Implementierungsphase zu einem Softwaresystem vorhanden, das zumeist dann im Laufe der Entwicklung verloren geht. Die Aufgabe der Dokumentation eines Softwaresystems ist es, diesen Verlust an Wissen zu minimieren. Dabei kommen auf den Softwareentwickler große Herausforderung zu. Er muss erkennen, welches Wissen bewahrt werden soll. Dies ist schwierig, da für den internen Entwicklerkreis vieles als selbstverständlich gilt. Hilfreich dabei ist, wenn klar ist, welche Wissensziele erreicht werden sollen. Für die Softwareentwicklung stellt sich dabei die konkrete Frage, was soll alles dokumentiert werden. Soll z.B. nur die Struktur oder auch jedes Detail des Systems beschrieben werden? Die verschiedenen Vorgehensmodelle verwenden unterschiedliche Strategien zum Thema Wissensbewahrung. XP setzt fast vollständig auf das Entwicklerteam für die Bewahrung des Wissens und sorgt dafür, dass das Wissen an alle Teammitgliedern weitergegeben wird. RUP dagegen nutzt für die Bewahrung des Wissens die unterschiedlichen Dokumentationensmöglichkeiten eines Softwaresystems und dessen Entwicklungsprozess. Für die Wartung ist die Bewahrung des Wissens durch die Dokumentation von Vorteil, da das Verständnis des Systems erleichtert wird. XP dagegen setzt nur auf den Quellcode als Dokumentation, weil das Vorgehensmodell postuliert, dass die einzige wahre Dokumentation der Code selbst ist und andere Dokumentationen zum Großteil inaktuell sind.
Welche Variante im Einzelfall am effektivsten ist, kann nur ein praktischer Feldversuche klären. Festzuhalten bleibt aber, dass für einen Auftraggeber in erster Linie mehr Sicherheit geboten wird, wenn das System dokumentiert ist, da der Quellcode keine Entscheidungen und Hintergründe festhalten kann.
Wissensmanagement zielt in der Softwareentwicklung vornehmlich auf das Dokumentieren des Softwareentwicklungsprozesses und des Systems ab. Nicht unwesentlichen Anteil am Erfolg des Wissensmanagements haben die beteiligten Entwickler selbst. Erfolgreiche Teamarbeit und Zusammenhalt zwischen den beteiligten Entwicklern fördert in hohem Maße die Kommunikationsfreudigkeit zwischen den beteiligten Personen und somit auch den Informations- und Wissensaustausch. Der Weg zu einer guten Software führt über ein gutes Team. Wenn Konkurrenzdenken vorherrscht, entstehen hohe Barrieren für den Austausch von Wissen und Informationen. Der umgangssprachliche Ausdruck „Wissen ist Macht“ verdeutlicht im Softwareentwicklungskontext, dass Wissen die Macht darstellt, um Probleme bestmöglich lösen zu können. Wir befinden uns im Zeitalter der Wissensgesellschaft, in dem stetes Lernen und Erweitern des bestehenden Wissens wichtig für die persönliche Zukunft ist. Dies gilt auch für die Zukunft von Unternehmen und für die Qualität der von ihnen erzeugten Produkte.
2.5.1 Implementierung und Wartung
Für die Implementierung und die Wartung eines Softwaresystems ist die Bewahrung des Wissens der entscheidende Rentabilitätsfaktor mit Langzeitwirkung. Langfristig können nur solche Firmen bestehen, die ausreichende Innovationskraft besitzen und erkennen, dass ihre Mitarbeiter ein Gut darstellen, in das sie investieren müssen. Dazu gehören Schulungen und Weiterbildungen oder auch die Übernahme der Kosten für Fachzeitschriften. Wissensmanagement bedeutet für die Softwareentwicklung vor allem Wissensbewahrung. Nur durch die Wissensbewahrung können Fehler vermieden und damit die Lernkurve eines Entwicklers bei der Einarbeitung in ein System minimiert werden. Ohne den Erwerb neuen Wissens fehlt den Unternehmen das Know-how, um neue erfolgreiche Softwareprodukte entwickeln zu können. Wissensmanagement nimmt für die Rentabilität und die Zukunft eines Softwareunternehmens eine Schlüsselfunktion ein.
2.6 Zusammenfassung
Die dargestellten Grundlagen bilden die Voraussetzung für die Einführung einer neuen technischen Möglichkeit, Softwaresysteme zu dokumentieren. Dabei sollten vor allem die bestehenden Probleme mit der Wartung von Softwaresystemen Motivation sein, einen neuen Weg bei der Dokumentation von Softwaresystemen einzuschlagen. Der bestehende Bruch zwischen Dokumentation und Quellcode erschwert das Verstehen eines Softwaresystems unnötig. Dieser Bruch führt häufig dazu, dass die Dokumentation inaktuell ist. Gezeigt hat sich, dass die Vorgehensmodelle enormen Einfluss auf die Art der zu einem Softwaresystem erstellten Dokumentation haben, da sie festschreiben, welche Dokumentationen wann zu erstellen sind. Für die Qualität von Softwaresystemen ist es wichtig, dass erkannt wird, welche Faktoren Einfluss auf die Softwareentwicklung und damit auf die Dokumentation von Softwaresystemen haben. Grundlegend für eine gute Dokumentation ist ein ausreichendes Verständnis für den Prozess des Wissensmanagements innerhalb der Softwareentwicklung. Die Leistungen und Fähigkeiten der eingesetzten Mitarbeiter entscheiden, ob ein Projekt Erfolg hat oder scheitert. Wichtig ist es vor allem zu erkennen, dass trotz vieler Beteuerungen die Probleme der Softwareentwicklung und Dokumentation von Softwaresystemen nicht nur rein technischer Natur sind. Denn ohne die Einbeziehung der Bedürfnisse der Mitarbeiter wird jeder noch so gute technische Ansatz an Wirkungskraft verlieren. Ttrotzdem kann ein verbesserter technischer Ansatz die bestehenden Möglichkeiten stark erweitern.
3 Konzept einer quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen
Im Kapitel 2 wurde erläutert, dass eine Vielzahl von Faktoren Einfluss auf die Qualität sowie auf Art und Umfang einer Dokumentation eines Softwaresystems haben. Zu den direkten Einflussfaktoren gehören quantitative Anforderungen an ein Softwaresystem sowie Vorgehensmodelle, die festlegen, wann und wie Teile der Dokumentation erstellt werden müssen. Deutlich wurde, dass durch die Aufteilung der Dokumentation in unterschiedliche Teildokumente, die Phasen abhängig erstellt werden, eine Vernetzung der Informationen und des Wissens nicht stattfindet. Die Betrachtung der unterschiedlichen Einflüsse macht deutlich, dass die theoretischen und technischen Ansätze zum Dokumentieren von Softwaresystemen die Betrachtung der Dokumentation und der Implementierung als Einheit nicht ermöglichen. Ursache dafür ist, dass die Dokumentation des Softwaresystems sowie die Dokumentation der Hintergründe der Implementierung zu meist, wenn überhaupt, zeitversetzt in separaten Dokumenten erfolgt. Dabei hat sich in der Praxis herausgestellt, dass viele Hintergrundinformationen zu konkreten Stellen der Implementierung eines Softwaresystems vor allem in der Wartung benötigt werden, die durchschnittlich Zweidrittel des Arbeitsumfanges eines Entwicklers ausmacht. Diese benötigten Informationen stehen aber in der Wartungsphase selten zur Verfügung, da wie dargestellt, die Dokumentation und der Quellcode keine Einheit bilden. Zusätzlich zeigt sich gerade bei der Wartung, dass es erforderlich ist, dass eigene Erkenntnisse und Erklärungen zu bestimmten Quellcodestellen direkt an diese gebunden und dokumentiert werden. Durch die direkte Bindung der Information an den Code können diese nicht wieder verloren gehen und stehen auch anderen Entwicklern zur Verfügung.
Der Bruch zwischen Dokumentation und Quellcode, der technischer und organisatorischer Natur sein kann, ist die Ursache dafür, dass Softwaresysteme von den Entwicklern in solchen Konstellationen im nachhinein nur schwer verstanden werden können. Dieser Bruch verhindert die direkte Vernetzung von Informationen aus der Dokumentation mit konkreten Quellcodestellen und die Rollenzuweisung des Quellcodes in Beziehung zu den konkreten Informationen. Festgestellt hat diese Problem auch schon Mayr und dazu angemerkt: „Bedingt durch die Komplexität moderner Softwaresysteme eignet sich sequenzieller Text immer wenigerer zur Dokumentation. Eine moderne Systemdokumentation kann z.B. adäquat als Hypertext in Verbindung mit automatisch extrahierter Information aus dem Quellcode erstellt werden.“ [MayOl]. Das Ziel dieser Arbeit ist es, die Dokumentationsmöglichkeiten von Softwaresystemen zu erweitern. Dazu wird nicht wie von Mayr vorgeschlagen der Quellcode in die Dokumentation extrahiert, sondern durch die Verbindung von Dokumentation und Quellcode der Bruch des Informationsflusses vermieden. In Kapitel 3.l ist dazu dargelegt, was unter einer quellcodegebundenen Dokumentation zu verstehen ist und wie damit der Bruch zwischen Quellcode und Dokumentation behoben werden kann. Es wird darüber hinaus aufgezeigt, wie einzelne Teile der quellcodegebundenen Dokumentation als Aspekte bzw. Teilaspekte festgehalten oder diesen zugeordnet werden können und somit das konzeptionelle Gesamtverständnis des Softwaresystems erleichtert. Ein Aspekt stellt eine gedanklich kapselbare Einheit von Verhalten in einem Softwaresystem dar. Durch die Dokumentation von Aspekten oder der Zuordnung von Informationen zu diesen entsteht eine Dokumentation, die in die einzelnen funktionalen Bestandteile des Softwaresystems gegliedert ist (siehe Kapitel 3.2). Zur Erleichterung der Dokumentation von Information und Wissen werden darüber hinaus Dokumentationsvorlagen eingeführt, die durch die Verwendung der quellcodegebundenen Dokumentation das Arbeiten und Verstehen des Quellcodes erleichtern. Diese Vorlagen ermöglichen es, der Dokumentation des Softwaresystems eine einheitliche Struktur vorzugeben. Durch diese einheitliche Struktur und durch die Integration der quellcodegebundenen Dokumentation in die Entwicklungsumgebung werden den Anforderungen einer einheitlichen Dokumentation, wie sie durch Mayr [MayOl] definiert sind, Rechnung getragen.
Die quellcodegebundene Dokumentation versteht sich nicht als Ersatz für die Redokumentati- on von Quellcodes beim Reengineering, sondern als Ergänzung dazu. Die Redokumentation ermöglicht nur die Transformation des Quellcode in eine andere Darstellungsform und nicht die Wiedergewinnung von Hintergrundinformationen und Entscheidungen zum Softwaresystem. Durch die quellcodegebundene Dokumentation ist es aber möglich zusätzliche Quellcodestellen übergreifende Informationen zu bewahren. Durch die Bewahrung insbesondere des Wissens aus der Entwicklung wird das Verstehen des Softwaresystems erleichtert.
3.1 Quellcodegebundene Dokumentation
Die Dokumentation von Quellcode erfolgt derzeit zum Großteil durch die Kommentierung von Codestellen im Quellcode direkt (Quellcodedokumentation genannt) oder aber durch das Beschreiben des Verhaltens von Codes in separaten Dokumenten. Die Quellcodedokumentation ermöglicht es dabei nicht, eine Codestelle direkt mit anderen Quellcodestellen in Verbindung zu bringen und so das Konzept des Softwaresystems darzustellen. Die Dokumentation in separaten Dokumenten ermöglicht dagegen zwar die konzeptionelle Beschreibung des Systems, nicht aber die direkte Einbeziehung der (aktuellen) Implementierung des Quellcodes. Die Folge ist ein Informationsflussbruch zwischen Dokumentation und Quellcode bzw. Implementierung (siehe Abbildung 10 links).
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 10: Weg zur quellcodegebundenenDokumentation
Dieser Bruch zwischen der konzeptionellen Beschreibung des Softwaresystems und der Umsetzung im Quellcode kann durch die Verbindung von Quellcode und Dokumentation aufgehoben werden. Die Verbindung von Code und Dokumentation vernetzt das Konzept des Systems sowie deren Beschreibung und die Implementierung miteinander (siehe Abbildung 10 rechts). Diese Vernetzung wird durch den Hypertextansatz ermöglicht. „Hypertext beruht auf der nichtlinearen Organisation von Wissen in Netzwerken (den Hypertextbasen) und auf der ebenfalls nichtlinearen Erarbeitung von Information aus den in den Netzwerken gespeicherten Wissensobjekten .“ [Kuh02] Der Hypertextansatz ermöglicht das Verbinden von
Quellcode und Dokumentation. Dabei können von jedem Objekt (Dokumentationsstellen oder Quellcodestelle) eine beliebige Anzahl von Verknüpfungen ausgehen, so dass sich dem Nutzer die Wahl eröffnet, der Verknüpfung zu einem neuen Objekt nachzugehen, die ihm besonders interessant erscheint [Kuh02]. Damit ist es nun möglich, den an einer Quellcodestelle hängenden Dokumentationen zu folgen. Mit der Dokumentation, die Information sowie Entscheidungen und Hintergründe zu einer Quellcodestelle enthält, können wiederum andere Codestellen oder Dokumentationen verknüpft sein, wodurch die Codestellen über die Dokumentation miteinander vernetzt werden. Durch diese Verknüpfungen entsteht ein Wissensnetz, welches eine abstrakte Dokumentation des Quellcodes darstellt. Diese Verknüpfung von Quellcode und Dokumentation ermöglicht somit die quellcodegebundene Dokumentation von Softwaresystemen. Mit der Möglichkeit Verknüpfungen zu spezifizieren, wird es zusätzlich möglich, die Rolle, die eine verknüpfte Quellcodestelle im Bezug zur Dokumentation spielt, zu definieren. Im weiteren wird diese Spezifizierung der Verknüpfung Rollenzuweisung einer Quellcodestelle genannt.
Durch die Verbindungen der verschieden Quellcodestellen über Dokumentationselemente bzw. Informationen werden die Codestellen, wie dargestellt, miteinander vernetzt und es entsteht eine abstrakte Dokumentationsebene. Diese Dokumentationsebene schafft eine über die Quellcodedokumentation hinausgehende Möglichkeit, dass Softwaresystem zu beschreiben und greift damit den Gedanken von Lehner auf: „Die programminterne Dokumentation darf nicht nur auf Programmkommentare reduziert werden.“ [Leh94]. Die abstrakte Dokumentationsebene ermöglicht die Beschreibung der Konzepte des Softwaresystems durch die Verlinkung von Informationen mit dem Quellcode. Unterstützt wird die Beschreibung durch die Rollenzuweisungen der einzelnen Verknüpfungen. Die Umsetzung der Idee der quellcodegebundene Dokumentation ist das Ziel des praktischen Teils der Arbeit.
Anforderungen an eine technische Umsetzung
Die Anforderungen, die an ein Gesamtsystem zum quellcodegebundenen Dokumentieren von Software gestellt werden, sind vielfältig. Zu beachten ist dabei vor allem, dass sich das System ohne Qualitätseinbußen für den Implementierungsprozess in die Entwicklungsumgebung einpassen lässt.
Kernanforderungen
Zu den Kemanfordernngen an ein System zur Umsetzung der quellcodegebundenen Dokumentation gehören die direkte Verbindung von beliebigen Quellcodestellen mit beliebigen Dokumentationselementen und die Rollenzuweisungen für Quellcodestellen abhängig vom Dokumentationselement. Die direkte Verbindung von Quellcodeelementen und Dokumentationselementen muss durch eine m:n Verbindung zwischen den Elementen möglich sein, da nur so eine quellcodegebundene Dokumentation erreicht wird. Damit kann eine beliebige Quellcodestelle mit beliebig vielen Dokumentationsstellen verbunden sein und eine Dokumentation kann wiederum auf beliebig viele Codestellen verweisen. Darüber hinaus ist eine Rollenzuweisung für jede Verknüpfung eines Quellcodelements mit einem Dokumentationselement nötig, um eine Einordnung der Quellcodestelle im Zusammenhang mit dem Dokumentationselement möglich zu machen.
Für die effektive Verwendung eines Werkzeugs zur quellcodegebundenen Dokumentation muss dieses Werkzeug möglichst gut in den Implementierungsprozess integrierbar sein. Im Detail beinhaltet das die Versionierbarkeit der Dokumentation parallel zum Quellcode, die Integration des Werkzeugs in die Entwicklungsumgebung sowie die Verwendbarkeit des Werkzeugs im Zusammenspiel mit dem Refaktorisieren von Quellcodes. Da die Erstellung der quellcodegebundenen Dokumentation in die Implementierungsphase eines Softwaresystems rückt, ist es erforderlich, dass der Prozess der quellcodegebundenen Dokumentation in die Implementierungsphase integriert wird. Dazu ist es notwendig, dass die Dokumentation zum Quellcode, wie der Code selbst, versioniert werden kann, da Quellcode und Dokumentation eine Einheit bilden. Es ist erforderlich, dass beim Zurückgreifen auf eine ältere Quellcodevariante auch ein Zurückgreifen auf die zu dieser Quellcodeversion passenden Dokumentation möglich ist. Aus technischer Sicht ist die Versionierung der Dokumentation kein Problem. Weit schwieriger stellt sich die Problematik der Versionierung bei der Betrachtung der Dokumentation als Medium zum Bewahren des Wissens dar. Grund dafür ist, dass die Verschmelzung von unterschiedlichen Dokumentationsversionen nicht automatisch überprüft werden kann, da die Syntax und Semantik von Texten nicht automatisch auf ihre inhaltliche Richtigkeit überprüfbar ist. Daher wird für die Versionierung der Dokumentation unter Umständen viel „Handarbeit“ des Entwicklers erforderlich sein. Eine weitere wichtige Anforderung stellt die Verwendbarkeit des Werkzeugs im Zusammenhang mit dem Refaktorisieren des Quellcodes dar, da mögliche Zusammenhänge zwischen Dokumentation und Quellcode verändert werden. Festzustellen ist, dass das Refaktorisieren eines Quellcodes, der mit der Dokumentation verbunden ist, schwierig zu automatisieren ist. Dabei wäre aus technischer Sicht zu untersuchen, ob sich die Refaktorisierungsmöglichkeiten für Quellcodes auf die folgenden drei Varianten herunterbrechen lassen.
- Verschieben der gesamten dokumentierten Quellcodestelle
In diesem Fall wird die Verknüpfung zur Dokumentation mit verschoben.
- Teilen der dokumentierten Quellcodestelle in mehrere Quellcodestellen
Die Verknüpfung zur Dokumentation wird um die Verknüpfungen der neu hinzugekommen Quellcodestellen erweitert und zu einer Quellcodestelle wiederum zusammengefasst.
- Ersetzen und Verändern einer dokumentierten Quellcodestelle
Die alte Verbindung zum Quellcode wird durch die neue Verknüpfung zwischen veränderter Quellcodestelle und Dokumentation ersetzt.
Wäre dies der Fall, könnten die Verbindungen zwischen der Dokumentation und dem Quellcode aus technischer Sicht automatisch angepasst werden. Zu beachten ist dabei aber, dass durch Refaktorisierung des Quellcodes sich auch die konzeptionelle Ausrichtung des Systems ändern kann und somit die Dokumentation angepasst werden muss. Das Ändern der Dokumentation kann dabei nicht automatisiert durchgeführt werden, sondern müsste vom Entwickler per Hand erfolgen. Unterstützen könnte den Entwickler dabei die Entwicklungsumgebung, indem sie die mit dem refaktorisierten Quellcode in Verbindung stehenden Dokumentatio- nenselemente als „zu überarbeiten“ kennzeichnet. Wie am Versionieren und Refaktorisieren von Quellcodes zu erkennen ist, ist die quellcodegebundene Dokumentation eine sehr implementierungsnahe Tätigkeit. Diese Nähe zur Implementierung macht es erforderlich, dass ein Werkzeug zur Erstellung einer quellcodegebundenen Dokumentation in die Entwicklungsumgebung des Entwicklers eingebettet wird. Dadurch wird die Idee, die Dokumentation in die Implementierungsphase zu integrieren, verwirklicht.
Anforderungen
Ein Werkzeug zur quellcodegebundenen Dokumentation sollte über die Kernanforderungen hinaus noch weitere Anforderungen erfüllen. Die einfache Bedienbarkeit und Erweiterbarkeit muss Ziel einer praktischen Umsetzung sein und beinhaltet die einfache Installation und Integration des Systems in die bestehende Entwicklungsumgebung sowie einen standardisierten Zugriff auf das System sowie die Anpassbarkeit an die eigenen Bedürfnisse. Erforderlich für eine umfangreiche Dokumentation des Softwaresystems ist, dass das System fur die Beschreibung des Softwaresystems funktionale Mittel bereitstellt, die eine über die einfache textliche Beschreibung hinaus gehende Dokumentation ermöglichen. Die Integrationsmöglichkeit von externem Wissen, zum Beispiel aus dem Intranet oder Internet, sollte das Werkzeug unterstützen. Darüber hinaus wäre eine persönliche Erweiterbarkeit des funktionalen Umfangs sinnvoll, damit es den Unternehmen bzw. den Entwicklern möglich ist, den Prozess der quellcodegebundenen Dokumentation an die Anforderungen des eigenen Entwicklungsprozesses anzupassen. Ein wichtiges Kriterium für die Qualität einer Dokumentation ist ihre Aktualität. Damit die Aktualität überprüft werden kann, sollten Quellcodestellenverknüpfungen Information darüber enthalten, bei welcher Codeversion die Verbindung erstellt wurde und welche Quellcodeversion die aktuelle Dokumentation widerspiegelt. Wünschenswert wäre es, wenn das Werkzeug das paarweise Programmieren, wie es aus dem Extreme Programming bekannt ist, unterstützt. Da die Dokumentation ein wichtiges Wirtschaftsgut darstellt, ist es erforderlich, dass das System einen Schutz vor Manipulation durch unberechtigte Personen bietet.
Wie bereits dargelegt, ermöglicht die quellcodegebundene Dokumentation die Verknüpfung von Code- und Dokumentationselementen, stellt aber kein Konzept dar, wie das Verhalten eines Softwaresystems effektiv beschrieben werden kann. Hintergrund des nächsten Kapitels ist es aufzuzeigen, wie durch die Ausrichtung der Dokumentation auf das Dokumentieren von konkreten gedanklich kapselbaren Einheiten von Verhalten, das System kurz und aussagekräftig beschrieben werden kann.
3.2 Dokumentation von Aspekten in Softwaresystemen
Der Aspektbegriff ist in der aktuellen Softwaretechnikdiskussion vor allem im Bereich der objektorientieren Softwareentwicklung ein häufig genutzter und verschieden interpretierter Begriff. Die wohl bekannteste Verwendung des Aspektbegriffs findet sich in der aspektorientierten Programmierung wieder. Ziel der aspektorientierten Programmierung (AOP) ist es, die Verhaltenseigenschaften eines Systems, die nicht (notwendigerweise) an funktionale Komponenten gebunden sind, wie beispielsweise die Fehlerbehandlung, Persistenz, Synchronization/Kommunikation, Replikation, Koordination, Speicherverwaltung und Echtzeitbedingungen als Aspekte des Verhaltens des Systems zu betrachten und getrennt zu implementieren [MarOO]. Dies ist möglich, da die Aspekte, wie dargestellt, nur eine lose Verbindung mit dem Softwaresystem eingehen. Es ist dabei strittig, ob die Umsetzung von Aspekten auf nichtfunktionales Verhalten beschränkt ist. Auf diese Diskussion soll an dieser Stelle nicht eingegangen werden, da sie nicht Gegenstand der Arbeit ist. Festzuhalten bleibt aber, dass in AOP implementierte Aspekte Verhalten bündeln und damit das Verständnis für die Funktionsweise des Systems erleichtern. Das Verhalten der Aspekte wird durch das Definieren von Verbindungspunkten (join points) wieder an das Softwaresystem geknüpft und von einem Aspekt-Weber mit dem Programm zur Kompilier- oder aber Laufzeit verwoben [Stü02].
Das Verständnis des Aspektbegriffs aus der aspektorientieren Programmierung wird in dieser Arbeit aufgegriffen. Im Zusammenhang mit der quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen wird ein Aspekt als konkrete gedanklich kapselbare Einheit von Verhalten definiert. Ein Softwaresystem setzt sich unter diesem Gesichtspunkt aus vielen unterschiedlichen Aspekten zusammen. Den Hintergrund bildet die Erkenntnis, dass einerseits jede Quellcodestelle in objektorientierten Systemen mindestens einem oder auch mehreren Aspekten und andererseits einem Aspekt beliebig viele Quellcodestellen zugeordnet sein können. Diese Zuordnungen bilden eine gedankliche Gruppierung des Verhaltens des Softwaresystems. Im weiteren stellen Aspekte damit die Umsetzung von Anforderungen an ein Softwaresystem dar. Dadurch spiegeln konkrete Quellcodestellen die Umsetzung der Anforderungen an das Softwaresystem wider. Die abstrakte Betrachtung von Quellcodestellen als Teil eines Aspektes und damit auch als Teilrealisierung einer funktionalen Anforderungen vereinfacht das Verständnis für das Softwaresystem. Durch die Dokumentation der Aspekte und Teilaspekte sowie die Rollenzuweisung der Quellcodestellen im jeweiligen Kontext, wird die bereits angesprochene abstrakte Dokumentationsebene geschaffen. Die Einbeziehung der Aspektdokumentation strukturiert die abstrakte Dokumentationsebene nach der Umsetzung von kapselbarem Verhalten des Systems, wodurch das einfachere Verstehen des gesamten Softwaresystems ermöglicht wird. Die vollständige Realisierung der dargelegten Gedanken, findet in der quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen ihre Vollendung. Die quellcodegebundene Dokumentation von Aspekten in Softwaresystemen versteht sich als die Dokumentation von Aspekten in Softwaresystemen und die beliebige Zu- und Einordnung in die Quellcodestellen zu dieser Dokumentation. Der Grund für die Einbeziehung der Aspektidee als Strukturierungsmittel in die Dokumentation begründet sich aus den Vorteilen, die sich bei der Verwendung der aspektorientierten Programmierung für das
Verständnis der einzelnen Belange gezeigt haben. Anzumerken ist, dass die aspektorientierte Programmierung nicht ersetzt, sondern ergänzt werden soll. Die Dokumentation wird durch die Verwendung der aspektorientierten Programmierung nicht hinfällig, denn gerade die Definition der Erweiterungspunkte verlangt nach einer Dokumentation der Hintergründe.
Es zeigt sich, dass durch die quellcodegebundene Dokumentation von Aspekten in Softwaresystemen eine neuartige Chance eröffnet wird, Wissen verhaltensabhängig festzuhalten. Damit größere Aspekte auch in kleine zerlegbar und somit strukturierter festgehalten werden können, besteht die Möglichkeit, Aspekte beliebig oft in Teilaspekte zu zerlegen. In dem so entstandenen Aspektbaum kann sich der Entwickler entlang der Äste immer detaillierter über die Einzelheiten und Hintergründe der Implementierung informieren. Die Verteilung von Aspekten in der Implementierung wird durch die Analyse der Quellcodeverbindungen der Aspektdokumentation ermöglicht. Damit ist es möglich zu erkennen, wie sich die Aspekte an den Quellcodestelle verteilen. Interessant ist dabei zu erkennen, ob ein Aspekt weit über den Code verstreut ist und ob es Quellcodestellen gibt, die mehrere Aspekte realisieren, wodurch zu erkennen ist, dass das Ändern dieser Codestelle viele nicht vorhersehbare Seiteneffekte hervorruft.
Anforderungen an eine technische Umsetzung
Ein System zur quellcodegebundenen Dokumentation von Aspekten im Softwaresystemen muss die direkte Dokumentation von Aspekten und eine Zuordnung von Dokumentationselementen zu diesen Aspekten sowie die Verbindung mit dem Quellcode ermöglichen, wie sie bereits für die quellcodegebundene Dokumentation möglich ist. Erforderlich ist es auch, dass die Dokumentation eines Aspektes in beliebig viele Teilaspekte beliebig tief aufgeteilt werden kann, um so große gedankliche Einheiten in kleinere, besser verständliche Einheiten aufteilen zu können. Darüber hinaus ist eine grafische Visualisierung der Verteilung der dokumentierten Aspekte durch die Visualisierung der verknüpften Quellcodestellen nötig, um die Verteilung der Aspekte über die Implementierung darzustellen.
3.3 Dokumentationselemente zum Bewahren von Wissen und Informationen
Die Anforderungen an eine Dokumentation nach Mayr zeigen, dass es vor allem darauf ankommt, dass eine Dokumentation einheitlich und ohne viel Aufwand erstellt werden kann [MayOl]. Deutlich wurde aber auch, dass die unterschiedlichen Vorgehensmodelle genaue Vorstellungen haben, welche Dokumentationen erzeugt werden müssen. Dabei werden einheitliche Vorgaben und Strukturen vorgeschrieben. Es ist also von Bedeutung, wie das Wissen und die Informationen bewahrt werden. Für die Implementierung von immer wiederkehrenden Anwendungsfällen bzw. abstrakten funktionalen Anforderungen haben sich Entwurfsmuster als das geeignete Mittel herausgestellt. Sie bilden in der Softwareentwicklung Architekturen, die mit Erfolg immer wieder verwendet werden und dann in einer eindeutigen Vorlage festgehalten werden. Die Entwurfsmuster werden in Katalogen gesammelt. Den bekanntesten Katalog für Entwurfsmuster liefert das Buch „Entwurfsmuster“ von Gamma, Helm, Johnson und Vlissides dar [GamOl]. Auf die Dokumentation von Informationen und Wissen bezogen, bilden vor allem innerbetriebliche Vorlagen die Wahl des Mittels, um die Informationen festzuhalten. Dabei haben sich im Laufe der verschiedenen Softwareprojekte zu meist einheitlichen Vorlagen herausgebildet. In einer Firma, in der der Autor tätig war, gab es solche Vorlagen beispielsweise für Besprechungen (Besprechungsprotokolle). Die Idee der Muster und Vorlagen wird in Kapitel 3.3.1 für die quellcodegebundene Dokumentation von Softwaresystemen aufgegriffen. Es wird dargelegt, wie Dokumentationsvorlagen zum Festhalten der Informationen und des Wissens verwendet werden können. Die Dokumentationsvorlagen bilden dabei ähnlich den Entwurfsmustern, eine definierte Struktur zum Bewahren von Informationen und Wissen. Im Gegensatz zu den Mustern wird diese Struktur aber nicht als starr angesehen, sondern kann an die eigenen Bedürfnisse angepasst werden.
3.3.1 Dokumentationsvorlagen
Dokumentationsvorlagen bilden den Versuch, Informationen, die von vielen Entwicklern und Autoren für die Dokumentation von Quellcode als sinnvoll erachtet werden, zu bündeln und als Vorlage für die quellcodegebundene Dokumentation anzubieten. Bei der Recherche der Frage, wie soll Quellcode dokumentiert werden, wurden immer wieder ähnliche Vorschläge und Vorschriften zur Dokumentation von Codes gefunden. Darüber hinaus offenbarten sich bei der Einführung der quellcodegebundenen Dokumentation von Aspekten immer wiederkehrende Strukturen zur Dokumentation des Quellcodes. Dazu gehört die Dokumentation von Aspekten und Teilaspekten, von Projektdaten, Wartungsaktivitäten, Entscheidungsprozessen, die Beschreibung der Erweiterungsmöglichkeiten des Systemverhaltens aber auch die Dokumentation von verwendeten Entwurfsmustern. Die aufgeführten Vorlagenvorschläge habe keinen Anspruch auf Vollständigkeit, sondern sollen die Möglichkeiten aufzeigen, die sich durch
3.3 Dokumentationselemente zum Bewahren von Wissen und Informationen die quellcodegebundene Dokumentation ergeben. Die quellcodegebundene Dokumentation macht es dabei möglich, verschiedenste Implementierungsdetails einfach zu beschreiben und sichtbar zu machen. Durch die Vernetzung der unterschiedlichen Dokumentationselemente entsteht die abstrakte Dokumentationsebene, welche, wie dargestellt, das Verständnis fur die Implementierung eines Softwaresystems erleichtert.
Es hat sich gezeigt, dass über die Dokumentation von Quellcode hinaus ein persönliches Fehlertagebuch ein sinnvolles Mittel darstellt, um die eigenen Erkenntnisse zu Fehlern bei der Implementierungsarbeit festzuhalten [BalOO]. Durch das Festhalten bzw. Dokumentieren der eigenen Fehler können wiederkehrende ähnliche Fehler schnell gefunden oder gleich vermieden werden. Die Verbindung von Quellcode und Dokumentation ermöglicht dabei die Vernetzung der Fehlertagebucheinträge mit dem Code. Zum Beispiel bei der Verwendung von Frameworks kann dies sehr hilfreich sein, da bei der Erstellung einer neuen Instanz des Frameworks die Wiederholung eines dokumentierten Fehlers vermieden werden kann.
Die Dokumentationsvorlagen sollen vor allem eine Anregung darstellen, wie Informationen und Wissen strukturiert festgehalten und damit schneller wiedergefunden werden können. Der Benutzer der quellcodegebundenen Dokumentation soll darüber hinaus angeregt werden, die Vorlagen an seine eigenen Bedürfnisse anzupassen oder aber eigene neue Vorlagen zu erstellen. Wichtig bei der Verwendung von Vorlagen ist, dass bei der Nutzung im Einzelnen von der eigentlichen Vorlage abgewichen werden kann. Den Hintergrund bildet dabei die Feststellung, dass Entwickler beim Festhalten von Informationen und Wissen nicht eingeschränkt sondern unterstützt werden wollen. Dieser Anspruch soll durch die Verwendung von Vorlagen umgesetzt werden.
Allen Ausprägungen der Dokumentationsvorlagen ist gemein, dass mit ihnen beliebig viele Quellcodestellen verknüpft und den Verknüpfungen Rollen zugewiesen werden können. Darüber hinaus gehörtjedes Dokumentationselement, das sich auf den Quellcode bezieht, zu einem festen Projekt.
Projektdatendokumentation
Die Dokumentation wichtiger Eckdaten zum Projekt wird in vielen Unternehmen unterschiedlich sein. Die Projektdatendokumentationsvorlage zielt dabei im Folgenden auf die wichtigsten Informationen zu einem Projekt ab. Zunächst sind das projektorganisatorische Informationen, wie 3 Konzept einer quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen
- Name des Projektes
- Kurzbezeichnung des Projektes
- Beschreibung des Projektes
- Zeitrahmen des Projektes
- Projektplan
- Projektleiter
- Projektteammitglieder
Im Weiteren werden der Kundendaten und Kundenanforderungen oder aber ein Verweis auf das Anforderungsdokument festgehalten, wie
- Auftraggeber
- Ansprechpartner
- Anforderungsbeschreibung
Für die reibungsfreie Projektarbeit sollten darüber hinaus wichtige technische und organisatorische Details festgehalten werden. Dazu zählen:
- Nameskonvention
- Projektablagen (CVS-Zugang, Dokumentenablagepfad)
Die Projektdatenbeschreibung stellt vor allem für neue Mitarbeiter die erste Anlaufstelle dar, um sich über das Projekt zu informieren. Aber auch bei organisatorischen Fragen ist die Projektbeschreibung die erste Informationsquelle.
Dokumentation von Aspekten und Teilaspekten
Die Dokumentationsvorlage für Aspekte oder Teilaspekte ermöglicht die Beschreibung von konkreten gedanklich kapselbaren Einheiten oder Teileinheiten von Verhalten. Gerade für komplexe Aspekte besteht dabei die Möglichkeit, diese in Teilaspekte zu zerlegen. Das grundlegende Merkmal der Dokumentation von Aspekten liegt im Sichtbarmachen von konkreten gedanklich kapselbaren Einheiten von Verhalten und deren konkreten Umsetzungen im Quellcode. Damit stellt die Vorlage die Umsetzung der Idee der quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen dar. Durch die Vernetzung der verschiedenen Dokumentationselemente entsteht die dargestellte abstrakte Dokumentationsebene, die das Verständnis des Systems erleichtert.
Der Unterschied zwischen einem Aspekt und einem Teilaspekte liegt darin, dass ein Teilaspekte immer einem Aspekt zugeordnet ist. Die Dokumentationsvorlage für Aspekte wie Teilaspekte enthält folgende Punkte:
- Name
Der Name für den Aspekt oder Teilaspekt beschreibt griffig den Hintergrund des Aspektes.
- Beschreibung
Die Beschreibung des Aspektes enthält alle wichtigen Informationen, die für das Verständnis des Aspektes wichtig sind.
- Liste aller direkt oder indirekt verbundenen Teilaspekte
- Liste aller direkt oder indirekt verbundenen Quellcodestellen und deren Rollenzuordnung
- Liste aller dem Aspekt direkt zugeordneten Dokumentationselemente
- Liste aller dem Aspekt indirekt zugeordneten Dokumentationselemente
- Autor
- Erstellungsdatum
- Modifikationsdatum
- Möglichkeit der Kommentierung
Durch die Listen der Zuordnungen werden die Dokumentationselemente direkt miteinander vernetzt. Über Links innerhalb der Beschreibung oder zu anderen Textelementen werden Wissensinhalte indirekt miteinander verbunden.
Dokumentation von Entscheidungsprozessen
Gerade die Diskussion über unterschiedliche Varianten einer späteren Lösung sollte festgehalten werden. Die Nachvollziehbarkeit der Entscheidung wird so klarer, da die Vor- und Nachteile nicht zu einem späteren Punkt erneut diskutiert werden müssen. Bei einer späteren Wartung stellt sich die Frage, weshalb wurde so entschieden. Durch die Dokumentation der Entscheidung kann diese Frage eindeutig beantwortet werden. Die Vorlage bietet zum Festhalten der Entscheidungen folgende Daten an:
- Name
- Zuordnung zu einem Aspekt
- Beschreibung der Anforderungen
- Beschreibung der unterschiedlichen Varianten
- Wann wurde die Entscheidung gefällt
- Wer hat die Entscheidung getroffen
- Welche Variante soll wie eingesetzt werden
- Weshalb wurde die Entscheidung so gefällt (Vor- und Nachteile)
- Liste aller verbunden Quellcodestellen Dokumentation von Mustern im Quellcode
Muster werden bei der Implementierung von Softwaresystemen häufig verwendet. Die Verwendung wird durch die Wahl der Bezeichner transparent gemacht. Darüber hinaus kann es aber nötig sein, die Verwendung der Muster genauer zu beschreiben. Die Dokumentationsvorlage für Muster bietet folgende Daten an:
- Name
- Name des verwendeten Entwurfsmusters
- Verweis auf die abstrakte Beschreibung des Musters im Musterkatalog
- Beschreibung der Verwendung des Musters
- Hintergrund (z.B. beim Entwurfsmuster Strategie kann dargestellt werden, welche anderen Varianten denkbar sind oder zu einem späteren Zeitpunkt implementiert werden sollen)
- Liste der verbunden Quellcodestellen
Dokumentation von Wartungsaktivitäten
Nach Lehner sollten folgende Angaben zu den Wartungsaktivitäten in der Dokumentation eines Softwaresystems festgehalten werden [Leh94]:
- Wer führte die Änderung durch?
- Was wurde geändert?
- Wann wurde die Änderung durchgeführt?
- Wo im Programm wurde etwas geändert?
- Warum wurde das Programm geändert?
- Wer hat den Wartungsauftrag gegeben?
Diese Anforderungen an die Dokumentation eines Wartungsvorganges greift die Vorlage zur Dokumentation von Wartungsaktivitäten auf. Die Dokumentation einer Wartungsaktivität kann darüber hinaus einem Aspekt oder Teilaspekt sowie einer bestehenden Dokumentation zugewiesen werden. Zu den Eigenschaften der Vorlage gehören:
- Name
Der Name stellt eine griffige Abkürzung der eigentlich Beschreibung dar.
- Datum der Änderung
- Zuordnung zu einem Aspekt
- Zuordnung zu einem bestehenden Dokumentationselement
- Auftraggeber der Wartungsaktivität
- Beschreibung der Wartungsaufgabe
- Hintergrund der Änderung
- Ausführender Entwickler
- Liste aller geänderten Quellcodestellen
- Beschreibung der Durchführung
Durch die Wartungsdokumentation können wichtige Informationen festgehalten und so nachvollziehbar gemacht werden.
Dokumentation von Erweiterungsmöglichkeiten des Systemverhaltens
Häufig werden Funktionalitäten implementiert, die erweitert werden können. Ein Beispiel stellen die Erweiterungsmöglichkeiten von SnipSnap durch Markos dar (mehr zu SnipSnap in Kapitel 4 und 5). Durch die Dokumentation der Erweiterungsmöglichkeiten z.B.im Quellcode wird anderen Entwicklern die Erstellung eigener Makros vereinfacht. Wichtig ist dabei, eine genaue Handlungsanleitung festzuhalten und die Wirkungsweise der einzelnen Funktionen zu beschreiben:
- Name
- Vorgehensbeschreibung
- Liste alle verbunden Quellcodestellen
Persönliches Fehlertagebuch
Das persönliche Fehlertagebuch ermöglicht die Speicherung von verschiedenen Fehlertagebucheintragungen zu unterschiedlichen Projekten. Die Gruppierung der Fehlertagebucheinträge nach definierten Kriterien ist dabei fur eine besseres Wiederfinden sinnvoll. Die Idee des Fehlertagebuches stammt von Balzer, der dafür im „Lehrbuch der Softwaretechnik“ ein Formular vorgibt [BalOO]. Dieses Formular wird für die Vorlage eines Fehlertagebucheintrages aufgegriffen.
Fehlertagebucheintrag
Ein Fehlertagebucheintrag sollte folgende Details festhalten:
- Aussagekräftiger Name des Fehlers
- Wann entdeckt(Datum)?
- Name des betroffenen Programms
- Ursache des Fehlers
- Wie konnte der Fehler rückverfolgt werden?
- Weshalb waren Gegenmaßnahme unwirksam?
- Welche Programmierregel/Gegenmaßnahme hilft, diesen Fehler zu vermeiden?
- Beschreibung des Fehlers (Quellcode Auszug)
- Liste der verbunden Quellcodestellen
Durch das Festhalten der unterschiedlichen Informationen werden der Fehler und dessen Hintergrund transparent und es erleichtert später das Finden ähnlicher Fehler.
Zusammenfassung
Dokumentationsvorlagen stellen Strukturelemente dar, die die Informationen und das Wissen geordnet festhalten. Dadurch wird das Wiederfinden von Informationen erleichtert und darüber hinaus die Struktur der Wissensdokumentation vereinheitlicht. Es ist von Vorteil, dass die Vorlagen problemlos auf die eigenen Bedürfnisse angepasst werden können und somit flexibel einsetzbar sind. Die Vorlagen sind nicht starr, sondern ermöglichen auch Abweichungen in konkreten Ausprägungen, damit wird der Entwickler beim Festhalten der Informationen und des Wissens umfangreich unterstützt.
3.4 Zusammenfassung
Die quellcodegebundene Dokumentation von Aspekten in Softwaresystemen ermöglicht die abstrakte Beschreibung eines Softwaresystems während der Implementierung. Dabei entsteht eine abstrakte Dokumentationsebene, die die direkte Verbindung zwischen Quellcode und Dokumentation ermöglicht. Durch die Beschreibung des Verhaltens eines Systems sogar vor oder während der eigentlich Implementierungsarbeit ist gesichert, dass möglichst wenig Wissen über die Implementierung sowie über Entscheidungen und Hintergründe zum Code verloren gehen. Darüber hinaus können andere Teammitglieder, die an den selben Quellcodeelementen arbeiten, an dem Wissen der anderen Entwickler teilhaben, ohne dass eine direkte Kommunikation zwischen allen Beteiligten stattfinden muss. Die Verwendung von Dokumentationsvorlagen erleichtert dabei das Festhalten der Informationen und des Wissens zum Softwaresystem oder deren Implementierung. Die Vorlagen geben einen einheitlichen Rahmen vor, um die Struktur der Dokumentation zu vereinfachen. Gerade für die Wartung ist von Vorteil, dass das System durch eine abstrakte Sicht sehr implementierungsnah beschrieben wird. Die Wartung eines Softwaresystems wird größtenteils von Entwicklern durchgeführt, die das System noch nicht kennen. Ihnen wird die Einarbeitung durch die Beschreibung des Systems vereinfacht. Mit dem Ansatz der quellcodegebundenen Dokumentation soll der Fehler vermieden werden, dass die Dokumentation als fertig betrachtet wird, wenn die Software fertig gestellt ist. Softwaresysteme sind nie fehlerfrei und müssen daher immer gewartet werden. Gerade bei der Durchführung der Wartung fällt es schwer ins Gewicht, wenn die Dokumentation zum Softwaresystem fehlt. Ein neuer Entwickler muss dann erst das System analysieren und die relevanten Systemteile kennenlernen. Dabei macht sich der Entwickler viele Notizen zum Softwaresystem und sammelt seine Erkenntnisse zu einzelnen Quellcodeelementen. Die quellcodegebundene Dokumentation unterstützt den Entwickler auch bei dieser Tätigkeit, indem er seine Erkenntnisse sofort festhalten und sammeln kann. Durch das Sammeln und direkte Anbinden der Informationen an den Quellcode kann dieses Wissen nicht mehr verloren gehen. Gerade durch das Dokumentieren auch aller kleinen Systemteile und das Ordnen der Informationen zu Aspekten entsteht eine zusammenhängende Dokumentation, die dem Entwickler einen Gesamtüberblick über das System ermöglicht.
4 Technischer Lösungsansatz
Das Konzept der quellcodegebundenen Dokumentation von Aspekten in Softwaresystemen verlangt von der technischen Realisierung die Umsetzung verschiedenster Anforderungen. Die Betrachtung der Lösungsansätze im Rahmen dieser Diplomarbeit wird sich auf die Entwicklung von Programmen in der Programmiersprache Java beschränken. Das bedeutet, dass die quellcodegebundene Dokumentation von Aspekten in Softwaresystemen ausschließlich für Softwaresysteme, die in der Programmiersprache Java entwickelt werden, realisiert wird. Java ist eine sehr verbreitete plattformunabhängige objektorientierte Programmiersprache, die in den letzten Jahren immer mehr an Bedeutung gewonnen hat [Java].
Die technische Realisierung erfordert eine vollständige Einpassung in den Implementierungsprozess. Diese Anforderung macht es erforderlich, dass sich die Umsetzung in eine Entwicklungsumgebung für die Programmiersprache Java integrieren lässt.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 11: EclipseArchitektur
Die integrierte Entwicklungsumgebung (IDE) des Eclipse Projektes erfüllt diese Anforderungen. Das Eclipse Projekt baut auf der Idee der freien Software (Open Source - offenen Quellen) auf und bietet mit der Eclipse Plattform eine offene und erweiterbare Entwicklungsumgebung vornehmlich für die Programmiersprache Java an. Der Idee der freien Software (Open Source) liegt die Open Source Lizenzierung zugrunde. Diese Lizenzen legen unter anderem fest, dass der Quellcode eines Systems frei zugänglich sein muss und beliebig erweitert werden darf [OpenSource]. Die Begriffe Entwicklungsumgebung und -plattform werden synonym verwendet. Die Entwicklungsumgebung Eclipse baut auf einer vollständig durchgehenden Pluginstruktur und der Infrastruktur fur die Laufzeitumgebung (Plattform Runtime) für die Plugins auf (siehe Abbildung 11) [Wey03]. Das Ziel des Eclipse Projektes ist die nahtlose Integration anderer Entwicklungswerkzeuge (Plugins) in die Entwicklungsplattform. Die Entwicklungsumgebung (Plugin Development Environment (PDE)) unterstützt dabei selbst direkt die Entwicklung von Plugins [Wid03]. Eclipse bildet damit einen wichtigen Teil in einem Gesamtsystem zur quellcodegebundenen Dokumentation. Ein System zur Dokumentation des Softwaresystems wird in Kapitel 4.1 vorgestellt. Das Kapitel 4.2 untersucht mögliche technische Umsetzungen zur quellcodegebundenen Dokumentation. Das Hauptaugenmerk wird dabei auf der Verbindung von Quellcode und Dokumentation liegen.
4.1 Hypertext - Dokumentation
Das Internet und im besonderen das World Wide Web (WWW) ist in den letzten Jahrzehnten das einzigartige Medium für die Verbreitung von Informationen geworden. Hintergrund ist einerseits die problemlose Vernetzung von Rechnern und andererseits die Einfachheit, mit der Informationen öffentlich gemacht werden können. Insbesondere die Standardisierung der HyperText Markup Language (HTML) [HTML] hat daran einen besonderen Anteil. Die quellcodegebundene Dokumentation von Softwaresystemen setzt bei der Verbindung von Quellcode und Dokumentation auf den Hypertext-Ansatz. Daher ist es nur konsequent, wenn die Dokumentation als Hypertext verfasst wird. Damit ist es möglich, die Dokumentation beliebigen Teammitgliedern barrierefrei zur Verfügung zu stellen. Darüber hinaus hat sich gezeigt, dass beliebige Informationen benutzergerecht dargestellt werden können, da das Integrieren von anderen Medien wie Video, Sound, 3D-Visualisierung uvm. in den Hypertext kein Problem darstellt. Damit bietet der Hypertext ein unermessliche Fülle an Möglichkeiten Softwaresysteme zu dokumentieren.
Für die technische Umsetzung der Dokumentation soll ein System verwendet werden, das die Dokumentation des Softwaresystems einfach verwalten kann. Das System soll jedem Entwickler die Möglichkeit bieten, neue Informationen zu dokumentieren sowie an dem Wissen der anderen Entwicklern zu partizipieren. Entscheidend für die Wahl eines solchen Systems ist es, dass es sich bei dem Produkt um ein Open Source Projekt handelt, an dem aktiv gearbeitet wird und das Zukunftsaussichten bietet. Hintergrund dieser Anforderung ist es, dass ein System für die quellcodegebundene Dokumentation beliebig angepasst werden kann und z.B. im Falle eines Fehlers im System der Quellcode zur Verfügung steht, um diesen Fehler selbst beheben zu können. SnipSnap ist ein Weblog und Wiki System erfüllt die gestellten Anforderungen für die Dokumentation des Quellcodes [SnipSnap].
Wiki
„Wikis sind im World Wide Web verfügbare Seitensammlungen, die von Benutzern nicht nur gelesen, sondern auch online verändert werden können. Sie können somit als abgespeckte offene Content Management Systeme angesehen werden.“ [Wikipedia] Ein Content Management System (CMS) ist eine zu meist serverseitig realisierte Software, welche die Verwaltung von Webseiten stark vereinfacht und somit das Management von Webseiten auch Laien über den Webbrowser ermöglicht. Wikis verwenden zum Layouten und Verlinken der Texte Tags (alle Tags zusammen genommen bezeichnet man als WikiSyntax), die leichter zu erlernen sind als HTML Syntax. Das Wort wiki stammt aus dem hawaiianischen und dort bedeutet „wiki wiki“ so viel wie „schnell“. Schnell Informationen ohne viel Aufwand anderen Menschen zur Verfügung zu stellen und die Menschen daran teilhaben zu lassen, ist das Ziel eines Wikis. Da viele Menschen die Möglichkeit haben, Informationen einzustellen, zu ergänzen oder zu verbessern, wird die Qualität der Informationen verbessert und umfassender.
Wiki Einsatz im Unternehmensumfeld
Wikis bieten Unternehmen wie jedes CMS die Möglichkeit, Informationen zwischen den Arbeitnehmern auszutauschen. Im Besonderen ermöglicht ein Wiki dabei vor allem den ungezwungenen, demokratischen Austausch von Informationen. Dabei kann ein Wiki die indirekten Kommunikationswege erweitern und Informationen, die z.B. auf dem Flur ausgetauscht werden können, allen Mitarbeitern zugänglich machen.
Vor- und Nachteile
Gerade das Teilen von Wissen muss sich aber als Unternehmensphilosophie etabliert haben, da ein Wiki sonst keinen Anklang bei den Mitarbeitern findet. Denn wie bereits in Kapitel 2.5 festgestellt wurde, hängt die Wissensteilung sehr stark von den beteiligten Personen und damit auch vom Zusammengehörigkeitsgefühl ab. Vorteil eines Wikis ist es, dass jeder Mitarbeiter beliebige Informationen einstellen, ergänzen und verbessern kann. Dabei wird dies aber gerade im Unternehmenskontext als nachteilig angesehen, da so Informationen manipuliert werden können. Durch Einführung von Zugangskontrollen und Versionieren der Informationsveränderungen sowie Festhalten der Autoren, ist ein unbemerktes Manipulieren von Informationen nicht möglich. Da jedem Mitarbeiter dies bewusst ist und er auch öffentlich als Autor zu erkennen ist, wird es kaum zu einem wie auch immer gearteten Missbrauch kommen. Als schwierig kann sich der Einsatz eines Wikis in Unternehmen erweisen, die streng hierarchisch strukturiert sind, da der demokratische Grundgedanke nicht der Firmenphilosophie entspricht.
Für Gestaltung und Vernetzung der Informationen bieten Wikis eine Vielzahl von Möglichkeiten an. Über die Wikisyntax können Texte beliebig optisch gestaltet und miteinander verlinkt werden. Dafür muss meist eine einfache Wikisyntax erlernt werden. Die Bereitschaft diese Syntax zu lernen, sollte durch den Arbeitgeber unterstützt werden, da sonst eine hohe Barriere für die Nutzung des Wikis entsteht. Der Zugang zu einem (serverseitigen) Wiki erfolgt ohne Zusatzsoftware über den Webbrowser und der Einsatz des Systems ist relativ kostengünstig realisierbar. Somit verursacht die Einführung eines Wikis keine größeren Kosten.
SnipSnap
SnipSnap ist ein Weblog und Wiki System, das im Zusammenhang mit dem KOGITO Projekt [KOGITO] am Fraunhofer-Institut für Rechnerarchitektur und Softwaretechnik FIRST in Berlin entsteht [FIRST]. Die Entwicklung von SnipSnap ist noch nicht abgeschlossen und es kommen mit jedem Release eine Fülle an neuen Möglichkeiten hinzu, um Informationen zu verwalten. Darüber hinaus ist SnipSnap ein Open Source Projekt unter der GPL Lizenz [GPL] und ermöglicht so die Mitarbeit von interessierten Entwicklern. SnipSnap ist in Java geschrieben und baut auf dem Jetty Webserver und Servletcontainer auf [Jetty]. Als Wiki Renderengi- ne verwendet SnipSnap Radeox eine Render Engine API für Wikis [Radeox]. Ein besonderer Vorteil von SnipSnap und Radeox ist die Erweiterbarkeit des Wikifunktionsumfangs durch Makros. Diese Makros können ohne Modifikationen des Systems zusätzlich geladen werden und so die Funktionalität des Wikis beliebig erweitern [Sch03]. Durch die Verwendung der vorgegebenen und durch Makros unterstützten Wikisyntax sind die Möglichkeiten, Inhalte in SnipSnap zu layouten, sehr umfangreich. Die Verwendung der Wikisyntax ist schnell zu erlernen und wird durch eine umfangreiche Hilfe unterstützt. Die Informationen werden in SnipSnap als so genannte Snips, zu deutsch Informationsschnipsel, abgelegt. Snips sind das einzige Element, um Informationen zu speichern. Damit haben alle Informationselemente (Snips) festgelegte gleiche Eigenschaften und können dennoch darüber hinaus individuell angepasst werden. Die Verknüpfung von externen Informationen aus dem Internet mit einem Snip, hängt von den Möglichkeiten der Wikisyntax ab. Von Haus aus unterstützt SnipSnap die gängigen Möglichkeiten, Hypertext miteinander zu verlinken und es kann, wie dargelegt, durch die Verwendung eigener Makros beliebig erweitert werden. Die Vernetzung der Informationselemente in SnipSnap selbst geht aber noch einen Schritt weiter. In SnipSnap ist es möglich, Snips zu typisieren sowie über Labels miteinander zu verbinden und einzuordnen, Inhalte der Snips miteinander zu verknüpfen und Metainformationen zu den Snips zu speichern. Ab der SnipSnap Version 0.5a wurde die automatische Versionsverwaltung von Snips eingeführt. Damit werden Veränderungen an den Informationsinhalten nun sichtbar gemacht.
Auf der technischen Seiten ist es durch die Verwendung der XML-Remote Procedure Call (XML-RPC) Schnittstelle von SnipSnap möglich, das System als Webservice anzusprechen [XML-RPC]. Damit kann man auf das System direkt zugreifen und es so in die Gesamtarchitektur eines Systems zur quellcodegebundenen Dokumentation integrieren (siehe Kapitel 5). Die Installation von SnipSnap ist nicht kompliziert und durch die Verwendung von Java auf allen gängigen Plattformen möglich.
4.2 Quellcodegebundene Dokumentation
Die Kernanforderungen an die quellcodegebundene Dokumentation sind:
- Verbindung von beliebigen Quellcodestellen mit beliebigen Dokumentationselementen (m:n Verbindung)
- Zuweisung einer Rolle für eine Verbindung im Zusammenhang mit dem jeweiligen Kontext.
Grundlage dieser Betrachtung ist nur Quellcode, der in der Programmiersprache Java geschrieben ist, da die Arbeit nur die Verbindung zwischen Java-Quellcode und Dokumentationselementen umsetzt. In Java lassen sich bestimmte Strukturelemente über ihren Bezeichner und dessen Namensraum eindeutig bestimmen und referenzieren. „Ein Name identifiziert ein Objekt. Zur eindeutigen Zuordnung ist jedoch der entsprechende Kontext - eben der Namensraum zu beachten.“[Wikipedia] Zu diesen Elementen gehören:
- Pakete - Eindeutigkeit: vollständiger Paketname
- Klassen - Eindeutigkeit: vollständiger Paketname + Klassenname
- lokale Klassen (in [lokalen] Klassen oder Methoden) - Eindeutigkeit: Vollständiger Paketname + Klassenname +([Methodenname] + [lokaler Klassenname])* + Name der Lokalen- klasse
- Paketzugehörigkeit einer Klasse - Eindeutigkeit: Vollständiger Paketname + Klassenname + Paketstatment in der Klasse
- Variablendeklarationen in einer Klasse, Methoden und einem Konstruktor -Eindeutigkeit: Vollständiger Paketname + Klassenname + [Methodenname/Konstruktorenname] +Varia- blenname
- Konstruktoren- und Methodenparameterdeklarationen - Eindeutigkeit: Vollständiger Paketname + Klassenname + [Methodenname/Konstruktorname] +Variablenname
- Konstruktoren - Eindeutigkeit: Vollständiger Paketname + Klassenname + Kostruktor“name“ incl. Parametername
- Methoden - Eindeutigkeit: Vollständiger Paketname + Klassenname + Methodenname incl. Parametername
Das Ziel, beliebige Quellcodestellen identifizieren zu können, ist in Java ohne die Speicherung zusätzlicher Informationen am Quellcode nicht möglich, da Anweisungen innerhalb einer Methode nicht eindeutig referenziert werden können. Somit können Quellcodestatements innerhalb einer Methode, dazu zählen beispielsweise Methodenaufrufe, Schleifen aber auch anonyme Klassen nicht referenziert werden, weil die gleichen Anweisungen mehrfach innerhalb eines Methodenrumpfs Vorkommen können. Damit kann nicht bestimmt werden, welche der möglicherweise mehrfach vorkommenden Anweisungen referenziert wurde. Das Speichern der Zeilennummer, in der ein Statement steht, stellt keinen Gewinn dar, da schon durch das Umformatieren diese Zeilennummern nicht mehr stimmen. Auch viele andere denkbare Ansätze fuhren nicht zum Ziel, wenn die Referenzierungen während der Modifikationen nicht angepasst werden. Es ist also erforderlich, dass die Entwicklungsumgebung die Referenzie- rung von Quellcodestellen unterstützt bzw. um diese Unterstützung erweitert wird. Für die verwendete Entwicklungsplattform Eclipse, ist derzeit kein Plugin bekannt, das die vollständige Referenzierung von Quellcode ermöglicht. Zwei theoretische Ansätze und ein bereits technisch realisierter Ansatz sollen im Weiteren betrachtet werden. Dabei soll untersucht werden, welcher Ansatz für die prototypische Umsetzung der quellcodegebundenen Dokumentation von Aspekten in Softwaresystem für diese Arbeit verwendet werden soll. Zu einem ist da die
Möglichkeit durch Erweiterung des abstrakten Syntaxbaums die Informationen direkt an diesen zu binden und im Quellcode persistent zu speichern (siehe Kapitel 4.2.1) und zum anderen der Ansatz, Java Quellcode in srcML bzw. JavaML zu speichern und somit Verknüpfungen als weitere Eigenschaft einer XML-Repräsentation eines Quellcodeelementes zu speichern (siehe Kapitel 4.2.2). Diese beiden Ansätze beruhen auf einer relativ aufwändigen Erweiterung der Eclipse Plattformen. Daher soll zusätzlich Eudibamus, ein eingeschränkter Ansatz, der es erlaubt bestimmte Quellcodeelemente und mit beliebigen anderen Elementen zu verknüpfen, betrachtet werden (siehe Kapitel 4.2.3).
4.2.1 Abstrakter Syntaxbaum
Der abstrakte Syntaxbaum in Englisch „Abstract Syntax Tree“ AST stellt eine Zwischenrepresentation des Quellcodes dar [Pin03]. Diese baumähnliche Darstellung des Quellcodes, wird in vielen integrierten Entwicklungsumgebungen und strukturorientierten Editoren verwendet [Mic03]. Der AST wird vor allem für den Compiler und das Reverse Engineering aber auch für das Refaktorisieren von Quellcodes eingesetzt. Der abstrakte Syntaxbaum stellt den Quellcode in seiner exakten syntaktischen Struktur dar und ermöglicht so die Analyse des Codes. Die Grammatik der Programmiersprache, in diesem Fall Java, legt dabei fest, wie einzelne Statements zu parsen und deren abstrakte Syntaxbaumzweige aufzubauen sind [Hav03]. Um nun mit Hilfe des AST Informationen über die Verbindung zwischen Quellcodestellen und der Dokumentation speichern zu können, muss das AST - Datenmodell um die Speicherung der Verknüpfung für alle Elemente erweitert werden. Möglich ist auch, dass jedem Element eine eindeutige ID zugeordnet und die Verknüpfung extern gespeichert wird. Darüber hinaus müssen die Informationen über mögliche Verknüpfungen, im weiteren Metainformationen genannt, persistent abgelegt werden. Denn der AST wird in der Entwicklungsumgebung Eclipse automatisch aus den jeweiligen Quellcodedateien erst aufgebaut, wenn er benötigt wird, daher müssen die Metainformationen persistent abgespeichert und eingelesen werden. Diese Metainformationen können z.B. durch eine entwickelte JavaDoc-Erweiterung direkt im Quellcode oder in einer extra Datei gespeichert werden. Beim persistenten Speichern der Metadaten im Quellcode muss der Editor so angepasst werden, dass die Metainformationen aus der Quellcodeansicht gefiltert werden. Darüber hinaus müssen die gespeicherten Metadaten beim Offenen bzw. Laden einer Datei ausgelesen, auf Richtigkeit überprüft und am AST gespeichert werden.
Für die Verwendung des AST-Konzepts zur Verlinkung von Dokumentation und Quellcodeelementen müssen folgende Anforderungen realisiert werden:
- Anpassung der AST-Elemente, was eine Modifikation von Eclipse zur Folge hat. Damit kann das Problem bestehen, dass für jede neue Eclipseversion die AST-Erweiterung angepasst werden muss.
- Erstellung von AST-Visitors zum Modifizieren des AST und zum Auslesen der Informationen.
- Eine persistente Speicherungslösung zur Speicherung der Metadaten. Die persistente Speicherung der Daten außerhalb des Quellcodes kann dazu führen, dass der Quellcode unbeabsichtigt verändert wird und damit die Verknüpfungen zerstört werden.
Festhalten lässt sich, dass die Erweiterung des AST für die vollständige Integration der quellcodegebundenen Dokumentation in die Entwicklungsumgebung Eclipse ein gute Wahl ist. Denn durch die Verwendung des AST besteht die Möglichkeit, dass die Verknüpfungen, ohne viel Mehraufwand z.B. beim Refaktorisieren des Quellcodes erhalten bleiben oder aber durch minimale Anpassung des Refaktorisierungalgorithmus übernommen werden.
Die nicht einschätzbaren Unwägbarkeiten bei der Erweiterung des ASTs und der hohe Entwicklungsaufwand haben mich dazu bewegt, nach weiteren Möglichkeiten für die technische Realisierung der quellcodegebundenen Dokumentation Ausschau zu halten.
4.2.2 Java-Quellcode in XML
XML (Extensible Markup Language) ist derzeit der wohl populärste Standard zur Definition von Auszeichnungssprachen (Markup Languages (ML)) [XML]. XML wurde von SGML abgeleitet [SGML]. Grundlage der XML Auszeichnungssprachen bildet das jeweilige XML- DTD-Datenmodell. Die unterschiedlichen Auszeichnungssprachen wie z.B. SOAP [SOAP] oder aber Mathematical Markup Language [MathML] ermöglichen es, die speziellen Informationsinhalte zu beschreiben und darüber hinaus die Datenspeicherung und deren Repräsentation zu trennen. Für die Darstellung der Daten wird zu meist der XSLT Standard verwendet [XSLT]. Die Daten können durch Auszeichnungssprachen strukturiert und somit durch Computertechnik ausgewertet werden. Der einfache Text „In Berlin ist es heute 37°C warm.“ ist durch ein Softwaresystem nur schwer auszuwerten. Dagegen ist der Text, „In <ort>Berlin</ort> ist es <datum value=“23.8.2003“>heute</datum> <temp ort=“berlin“>37°
C</temp> warm.“, durch ein Computersystem auswertbar. Damit gewinnt die Auszeichnungssprache fur Beschreibungen von Informationen an Bedeutung, da so über die einfache textuelle Beschreibung hinausgehend die Inhalte beschrieben werden können. Der große Vorteil von XML besteht darin, dass unterschiedliche Inhaltselemente miteinander verknüpft werden können. Anzumerken ist, dass in XML das dargestellte Beispiel nicht so einfach verwendet werden kann, sondern dass noch einige Randbedingungen zu erfüllen sind. Zur Vertiefung dieses Themas empfiehlt sich „Einstieg in XML“ [Hel04] oder „XML“ [Amm03].
Mit einer Auszeichnungssprache, die auf XML basiert, ist es also möglich, Daten strukturiert abzulegen und genauer zu beschreiben. Welche Möglichkeiten sich beispielsweise durch die Speicherung von Java-Quellcode unter Verwendung der Java Markup Language (JavaML) ergeben, hat Badros untersucht [Bad02]. Eine weitere Auszeichnungssprache für Quellcode basieren auf XML, im weiteren XML-Quellcodeformat genannt, ist srcML. Wie JavaML ist auch srcML noch kein definierter Standard. Die Transformation aus einem normalen Quellcode in JavaML und zurück wird durch die Verwendung von XSL ermöglicht. Der Hintergrund, Quellcode im XML-Format zu speichern ist, dass immer mehr Informationen durch die Entwicklungsumgebungen aus dem Quellcode gewonnen werden müssen. Im Gegensatz zum AST liegen diese Informationen dann schon für die unterschiedlichen Werkzeuge in einem einheitlichen Format vor und müssen nicht für die Werkzeuge erst generiert werden. Darüber hinaus kann Quellcode im XML-Quellcodeformat beliebig dargestellt und editiert werden, womit den unterschiedlichen Benutzeransprüche z.B. in der Frage der Quellcodeformatierung beliebig entsprochen werden kann. Darüber hinaus lassen sich mit XML-Quellcodeformaten die unterschiedlichen Quellcodeelemente auch beliebig verlinken. Die Unterschiede zwischen den unterschiedlichen Quellcoderepräsentationsformen macht noch einmal die Abbildung 12 deutlich, srcML steht dabei als Repräsentant für die XML-Quellcodeformate. SrcML ist ein XML-Quellcodeformat, das im Gegensatz zu JavaML beispielsweise die originale Codeformatierung erhält [CMM02].
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 12: Vergleich Klartext, AST und srcML [CMM02]
Mit der Möglichkeit Quellcodeelemente mit der Dokumentation zu verlinken, erfüllen die XML-Quellcodeformate die Kernanforderungen der quellcodegebundenen Dokumentation. Für die Integration einer Sprache wie srcML oder JavaML als Grundlage für die Bewahrung des Quellcodes müssen viele Bereiche der Entwicklungsumgebung Eclipse angepasst und erweitert werden, da ein Austausch der Quellcoderepräsentation viele unterschiedliche Funktionalitäten berührt. Dazu gehören z.B. die Darstellung im Editor oder aber auch das Einlesen und Schreiben von Quellcode. Dies würde einen generellen Umbruch in der Entwicklungsumgebung erfordern, der nur durch die Eclipse Entwickler selbst durchführbar ist. Sehr wahrscheinlich wird dieser Schritt eines Tages gemacht, da sich beispielsweise bisher solche übergreifenden Ideen, wie das Verfolgen von Concerns über den gesamten Entwicklungsprozess, wie es beispielsweise von Juri Memmert mit dem Cosmos Ansatz verfolgt wird, nicht realisieren lassen [Mem02a].
Eine anderer Versuch, die Speicherung von Quellcode im XML-Quellcodeformat in die Entwicklungsplattform Eclipse zu integrieren, könnte darin bestehen, dass die gängige Speicherung von Quellcode zusätzlich um die parallele Transformation des Quellcodes in ein XML- Quellcodeformat und die Speicherung in separaten Dateien inclusive der Verknüpfungen erweitert wird. Dabei ergibt sich das Problem, dass die Metainformationen immer mühselig mitgeführt und zwischengespeichert werden müssen, um in die XML Repräsentation eingepflegt zu werden. Damit arbeitet diese Lösungsidee aber an den entwicklungsunterstützenden Werkzeugen wie dem Refaktorisieren von Quellcode vorbei. Sinnvoll wäre es daher, eine XML basierte Auszeichnungssprache für die persistente Speicherung der Metadaten des ASTAnsatzes zu verwenden und den AST-Ansatz umzustellen. Diese Lösung würde aber eine Menge technischer Möglichkeiten unbeachtet lassen.
Die weiteren Möglichkeiten, die das Speichern von Quellcode im XML-Format mit sich bringen, sind vielfältig und gehen über die hier besprochenen Möglichkeiten noch hinaus. Beispielsweise ist es möglich die Codeversionen direkt zu speichern, Zugangskontrollen für Quellcodeelemente einzuführen und vieles mehr. An dieser Stelle soll auf diese Möglichkeiten nicht genauer eingegangen werden, da sie für die quellcodegebundene Dokumentation keine direkte Relevanz haben. Es sei dazu auf die Arbeit „Prospects of encoding Java source code in XML“ von Simic und Topolnik [ST02] verwiesen.
4.2.3 Eudibamus
Eudibamus [Eudibamus] wird im Rahmen des KOGITO Projektes, wie SnipSnap, am Fraunhofer-Institut für Rechnerarchitektur und Softwaretechnik FIRST in Berlin entwickelt. Den Kern von Eudibamus bildet ein Eclipse Plugin, das den Mozilla Webbrowser in Eclipse integriert, um so das „Surfen“ im WWW aus der Entwicklungsumgebung heraus zu ermöglichen. Dazu wurden die wichtigsten Interaktionsmöglichkeiten des Browsers mit dem Benutzer auf SWT angepasst. Den wichtigsten Teil von Eudibamus bildet die integrierte Verlinkungschnittstelle zwischen Quellcode und SnipSnap. Dabei ermöglicht die Schnittstelle die Umsetzung von Paketen, Klassen und Methoden Bezeichnern aus dem Javaquellcode in eindeutige SnipS- napURLs, die auf namensgleiche Snips verweisen und ermöglicht damit so die eingeschränkte Verbindung von Quellcodestellen und Snips. Hintergrund ist die einfache, nicht explizite Verlinkung von in Java (über den Bezeichner und dessen Namensraum) eindeutigen Elementen mit Snips. Der Bezeichner und der Namensraum eines Elementes wird dabei in eine eindeutige URL konvertiert. Damit stellt Eudibamus eine Alternative für die prototypische Umsetzung der quellcodegebundenen Dokumentation dar. Im weiteren soll zunächst betrachtet werden, welches funktionale Verhalten eine bestmögliche und umfassende Integration eines Werkzeugs zur quellcodegebundenen Dokumentation in den Implementierungsprozess ermöglicht. Dabei wird vor allem auf die Benutzung von Eclipse während des Implementierungsprozesses eingegangen.
4.2.4 Funktionales Verhalten der Werkzeugunterstützung
Im folgenden werden das funktionale Verhalten beim Ändern von verlinkten Quellcodes, das Verlinken von Quellcodes, das Löschen einer Verlinkung zum Quellcode und das Ändern der Verlinkung zum Code erläutert.
Ändern von Quellcode
In allen vorgestellten Ansätzen ist eine vollständige Werkzeugunterstützung notwendig, um den Quellcode zu ändern und mögliche veränderte Verknüpfungen zwischen Quellcode und Dokumentation anzupassen. Wichtig dabei ist vor allem die Unterstützung beim Umbenennen und Modifizieren von verknüpften Quellcodestellen. Offen ist dabei aber noch, wie generell mit Änderungen an verknüpften Quellcodestellen umgegangen werden soll. Wichtig ist aber vor allem, dass sich die Benutzung des Systems in den Implementierungsprozess möglichst reibungsfrei integrieren lässt. Das Verändern eines Statements (z.B. ein Statement wird durch einen Methodenaufruf ersetzt) führt bei allen drei Ansätzen zuerst einmal zum direkten Verlust der Verknüpfung, wenn diese nicht an ein neues Element geknüpft wird. Die Frage ist, wie sollte die Entwicklungsumgebung und im speziellen der Editor entscheiden, welches Element durch welches andere ersetzt wurde. Dies könnte durch direkte Interaktion mit dem Benutzer erfolgen, was aber den Implementierungsprozess möglicherweise unnötig stören könnte. Eine anderer Ansatz wäre es, durch das halbautomatische Erkennen und Visualisieren gegenüber dem Benutzer das Löschen oder Ersetzen einer Quellcodestelle im Editor zu realisieren. Der Ansatz, der bei den drei bekanntesten Textverarbeitungssystemen StarOffice-Wri- ter (in Version 7.0) [StarOffice], OpenOffice-Writer (in Version 1.1) [OpenOffice] und Microsoft Winword [MSOffice] (in Version 2000) beim Verändern von markierten Text innerhalb eines Dokumentes Verwendung findet, könnte Abhilfe schaffen. Das visuelle Hervorheben repräsentiert dabei eine Verknüpfung mit der Dokumentation im Editor bspw. von Eclipse. Das Vorgehen, das sich aus den drei Textverarbeitungssystemen ableiten lässt, könnte dabei wie folgt aussehen:
- Vollständiges Markieren und Löschen der Quellcodestelle, löscht die Verknüpfung.
- Ersetzen und Hinzufügen von Zeichen innerhalb der Quellcodestelle verändert die Verknüpfung (Verknüpfung bleibt erhalten).
- Das Anfügen von Zeichen an eine verknüpfte Quellcodestelle könnte wahlweise als das Erweitern der verknüpften Quellcodestelle oder aber als das Schreiben eines neuen Quellcodestatement interpretiert werden. Diese Funktionalität sollte durch den Benutzer spezifisch anpassbar und möglichst über eine Tastenkombination wechselbar sein.
Durch dieses Verhalten integriert sich die Arbeit mit verlinkten Quellcode vollständig in der Implementierungsphase und ermöglich die schnelle Implementierung von Codes.
Verlinken von Quellcode
Das Verlinken von Quellcodeelementen ist schwierig ohne Unterbrechungen in den normalen Implementierungsprozess zu integrieren. Folgende Vorgehensweisen wären denkbar:
- Sofortiges Verlinken
Durch die Auswahl einer Dokumentation als aktuelle zu verlinkende Dokumentation wird der Quellcode, der nun implementiert wird, automatisch mit der Dokumentation verknüpft. Wenn die Dokumentation noch nicht besteht, kann sie von vornherein angelegt werden und dann als aktuelle Dokumentation ausgewählt werden.
- Nachträgliches Verlinken
Durch das Markieren von Codes, können beliebige Quellcodeelemente mit einer Dokumentation verlinkt werden. Dabei kann aus bestehenden Dokumentationen eine ausgewählt oder aber eine neue Dokumentation angelegt werden.
Löschen der Verlinkung zum Quellcode
Das Löschen einer Verbindung zwischen Quellcode und Dokumentation ist sehr einfach. Dazu muss sich der Cursor im Editor von Eclipse innerhalb der Quellcodestelle befinden dessen Verbindung gelöscht werden soll und über das Kontextmenü oder eine definierte Tastaturkombination wird die Verbindung gelöscht. Eine sinnvolle Erweiterung kann dabei sein, dass in den Einstellungen des Plugins festgelegt werden kann, ob das Löschen einer Verbindung zwischen Quellcode und Dokumentation eine Sicherheitsabfrage erfordern soll. Wenn mehrere Verbindungen zu einer Quellcodestelle existieren, kann die zu löschende Verbindung im Kontextmenü oder aber über eine Popupfenster ausgewählt werden.
Ändern der Verlinkung zum Quellcode
Das Ändern einer Verknüpfung funktioniert wie das Löschen einer Verlinkung. Der Cursor befindet sich innerhalb der Quellcodestelle, deren Verlinkung geändert werden soll und über das Kontextmenü oder eine Tastaturkombination kann eine neue Dokumentation für die bestehende aus einem Popupfenster ausgewählt werden. Bei der Existenz mehrerer Verlinkungen wird die gewünschte Verbindung direkt über das Kontextmenü oder über ein Popupfenster ausgewählt. Natürlich ist auch das Anlegen einer neuen Dokumentation möglich, auf die dann verlinkt wird.
Zusammenfassung
Der Prozess der Erzeugung einer Dokumentation ist ein neuer Arbeitsschritt in der Implementierungsphase. Sinnvoll ist es, zuerst die Dokumentation anzulegen und durch das Dokumentieren zunächst einmal alle nun folgenden Arbeitsschritte und zu erwarteden Ergebnisse zu durchdenken. Danach folgt die Implementierung der Anforderung. Während der Implementierung der Quellcodestelle oder am Ende sollten dann noch wichtige Erkenntnisse und Entscheidung festgehalten werden. Nun können die Quellcodestellen auch genau eingeordnet und in Beziehung zu einander gebracht werden.
4.2.5 Entscheidung
Die prototypische Umsetzung der quellcodegebundenen Dokumentation von Aspekten im Softwaresystem sollte möglichst als Gesamtsystem wirken und in einem überschaubaren Zeitrahmen implementierbar sein. Darüber hinaus reicht es für die Veranschaulichung der Grundidee der quellcodegebunden Dokumentation von Aspekten aus, wenn die Verknüpfung wichtiger Quellcodeelemente realisiert wird. Vordergründig sollte die Installation und Verwendung des Gesamtsystems schnell und einfach möglich sein, um so die Hürde für das Ausprobieren der Umsetzung der quellcodegebundenen Dokumentation gering zu halten. Die Abbildung 13 vergleicht dabei noch einmal die unterschiedlichen Lösungsansätze miteinander. Dabei wird deutlich, dass die Möglichkeit, beliebige Quellcodeelemente dokumentieren zu können, höhere Kosten verursacht. Denn für die Verwendung des AST-Ansatz oder des XML-Ansatz müssen vor allem an der Entwicklungsumgebung Eclipse größere Modifikationen vorgenommen werden. Das hat zur Folge, dass ein nicht abschätzbarerer Aufwand für die Anpassung der Lösung an neuere Eclipseversionen nötig ist. Darüber hinaus, wird damit die Installation des Gesamtsystems unnötig erschwert.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 13: Vergleich
Eudibamus befindet sich derzeit zwar noch in der Entwicklung, bietet aber ausreichend Funktionalität, um die quellcodegebundene Dokumentation von Aspekten zu veranschaulichen. Gerade auch weil der Eudibamusansatz die Integration eines Webbrowsers in die Entwicklungsumgebung einschließt und somit ermöglicht, die Dokumentation direkt zu bearbeiten, wird die Umsetzung der quellcodegebundenen Dokumentation unter Verwendung des Eudiba- musplugin fur Eclipse realisiert. Im weiteren werden die Vor- und Nachteil von Eudibamus dargelegt und die Einschränkungen für die quellcodegebundene Dokumentation aufgezeigt.
Vor- und Nachteile der Verwendung von Eudibamus und SnipSnap
Das Eudibamus Plugin für Eclipse ermöglicht die Integration der Bedienung von SnipSnap in die Entwicklungsumgebung und damit in den Implementierungsprozess. Dadurch ist es möglich die Dokumentation zu den einzelnen Quellcodeelementen darzustellen. Der Bruch, der zwischen herkömmlicher Dokumentation und Quellcode bestand, wird somit aufgehoben. Es ist nun möglich, sich direkt in der Entwicklungsumgebung die mit dem Quellcode verbundenen Dokumentation anzeigen zu lassen und so dem Entwickler zu eröffnen, sich in der abstrakten Dokumentationsebene frei zu bewegen. Der Vorteil dabei ist, dass der Entwickler direkt über die Dokumentationselemente zu den verbundenen Quellcodeelementen gelangt. Diese Elemente können vornehmlich nur Pakte, Klassen und Methoden sein. Die Erweiterung um alle anderen eindeutig identifizierbaren Javaelemente, wie sie bereits aufgelistet wurden, stellt keine Hürde dar. Nachteilig ist aber die fehlende Integration von Eudibamus und SnipSnap in die Refaktorisierungsmöglichkeiten und die fehlende Interaktion bei der Veränderung von verlinkten Quellcodeelementen. Diese Unterstützung kann aber durch ein Plugin, das den Editor und das Refaktorisieren erweitert, implementiert werden.
4.3 Zusammenfassung
Die Entscheidung für Eudibamus und SnipSnap steht zum Teil auch mit dem Arbeitsumfeld des Autors in Verbindung, der am Fraunhofer-Institut für Rechnerarchitektur und Softwaretechnik FIRST in Berlin tätig ist. Dort hat er die Möglichkeiten und Chancen von SnipSnap kennengelernt. Der Einblick, der ihm in das SnipSnap Projekt gewährt wurde, hat gezeigt, dass der Funktionsumfang von SnipSnap, der das Dokumentieren von Softwaresystemen ermöglicht, noch anwachsen wird. Das Gesamtsystem mit Eclipse als Entwicklungsumgebung und SnipSnap als Dokumentationsplattform ermöglicht durch ihre Plattformunabhängigkeit die Unterstützung der gängigen Betriebsysteme. Damit wird eine große Hürde für die Verwendung des Systems in den unterschiedlichen Bereichen genommen.
5 Prototypische Umsetzung
Das Werkzeug „myAspectMap“ setzt die quellcodegebundene Dokumentation von Aspekten prototypisch um. Der Name „myAspectMap“ entsteht durch die Zusammensetzung der folgenden Synonyme:
my - durch Entwickler erstellte Dokumentation
Aspekt - konkrete gedanklich kapselbare Einheit von Verhalten eines Softwaresystems
Map - abstrakte Dokumentationsebene, die ein Softwaresystem beschreibt
MyAspectMap ermöglicht die Erstellung einer Dokumentation fur konkrete gedanklich kapselbare Einheiten von Verhalten eines Softwaresystems und die Vernetzung der Dokumentation- und Quellcodeelemente, wodurch eine abstrakte Dokumentationsebene entsteht. Das Werkzeug stellt die praktische Umsetzung dieser Arbeit durch den Autor dar und beinhaltet sowohl die Erweiterungen und Veränderungen an SnipSnap wie auch die Plugins zur Erweiterung von Eclipse. Die Projektseite von myAspectMap ist unter http://myaspectmap.berlios.de/ zu finden.
Die Umsetzung besteht aus dem Zusammenspiel des Wiki- und Weblogsystems SnipSnap unter Verwendung des Eudibamusplugins für Eclipse sowie die Integration der quellcodegebundenen Dokumentation in die Entwicklungsumgebung Eclipse. Die Abbildung 14 zeigt die realisierten Erweiterungen und Modifikation sowie die Kommunikationswege zwischen den unterschiedlichen Systemen.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 14: Prototypische Realisierung - Technische Ansicht
Für die Realisierung der vorgeschlagenen Dokumentationsvorlagen wurden in SnipSnap folgende Erweiterungen und Implementierungen vorgenommen:
- Erweiterung von SnipSnap um eine Formularansicht
- Erweiterung der Makroidee um sich selbst darstellende Formularmakros
- Einführung von CSS-Vorlagen für die Formularmakros
- Implementierung generisch verwendbarer Formularmakros
- Erweiterung der RenderEngine zum Speichern und Darstellen der Formularmakros in der Formularansicht
- Implementierung von Hilfsmakros
Auf die einzelnen Umsetzungsdetails der Dokumentationsvorlagen, geht das Kapitel 5.1 „Formularvorlagen in SnipSnap“ ein.
Der zweite Teil der praktischen Umsetzung beinhaltet die Integration von SnipSnap durch das Eudibamusplugin in Eclipse sowie die Verbindung von Quellcode und Dokumentation. Die Verbindung von Code und Dokumentation umfasst die Visualisierung von Quellcodestellen, die mit Dokumentationselementen verbunden sind, und die Integration des Dokumentationsprozesses in die Entwicklungsumgebung Eclipse. Die praktische Realisierung umfasst nachfolgende Punkte:
- Anpassung des Layouts von SnipSnap für eine bessere Darstellung innerhalb eines kleinen Pluginfensters von Eudibamus.
- Implementierung eines Eclipse Plugin zum Visualisieren der verknüpften Quellcodestellen durch Erweiterung des „Marker“-Ansatzes von Eclipse
- Erweiterung des Plugins um einen XML-RPC Client
- Implementierung eines XML-RPC Handlers für die Kommunikation mit SnipSnap
- Implementierung eines XML-RPC Wrapper Plugins, um die Verwendung der XML-RPC Bibliothek in Eclipse zu ermöglichen
- Implementierung einer Eclipseansicht zur Auswahl von Dokumentationselementen für die Verknüpfung mit Quellcodestellen
Die Umsetzungsdetails werden im Kapitel 5.2 „Integration in die Entwicklungsumgebung“ genauer dargestellt. Im Kapitel 5.3 wird die Verwendung des Werkzeugs mit Hilfe von Benutzungsszenarien veranschaulicht. Dabei wird anhand von Beispielen die Dokumentation von Quellcodeelementen während des Implementierungsprozesses und der „Nachdokumentation“ innerhalb der Wartungsphase dargestellt. Darüber hinaus werden die Möglichkeiten der entstandenen abstrakten Dokumentationsebene für das Verständnis des Softwaresystems veranschaulicht.
5.1 Formularvorlagen in SnipSnap
Für die Einführung von Formularen in SnipSnap ist es erforderlich die Funktionsweise von SnipSnap zu beschreiben (siehe Kapitel 5.1.1). Im Anschluss daran wird erläutert, wie die Wikisyntax von SnipSnap durch Makros erweitert werden kann (siehe Kapitel 5.1.2). Auf dem Makrokonzept aufbauend wird die Einführung von Formularmakros erläutert. Formularmakros stellen variable Komponenten zur Erzeugung von beliebigen Formularen in SnipSnap dar (siehe Kapitel 5.1.3). Die Grundlage für das Formularkonzept in SnipSnap bildet die Formularansicht für Snips, die Integration dieser Ansicht in SnipSnap wird in Kapitel 5.1.3 erläutert. Abschließend wird dargelegt, wie Formularvorlagen in SnipSnap erstellt werden können (siehe Kapitel 5.1.3).
5.1.1 Grundlegende Funktionsweise von SnipSnap
SnipSnap ist ein Wiki. Ein Wiki ist eine im World Wide Web verfügbare Sammlung von Seiten, die von den Benutzern nicht nur gelesen, sondern auch online geändert werden können. SnipSnap ist darüber hinaus eine Serverapplikation, die auf einem Java Web Server und Servlet Container namens Jetty läuft.
Auf SnipSnap kann damit über den Webbrowser zugegriffen werden. In einem SnipSnap- System können beliebig viele Seiten, genannt Snips, gespeichert sein. Diese Seiten können Informationen zu beliebigen Themen enthalten. Snips sind damit nach außen nichts weiter als normale Webseiten. Der Vorteil eines SnipSnap-Systems ist, dass über den Webbrowser direkt neue Snips bzw. Seiten angelegt, bestehende Snips geändert oder gelöscht werden können. Darüber hinaus kann nach Begriffen innerhalb des Systems gesucht werden. Das Standardsuchergebnis liefert dabei alle Snips, die den gesuchten Begriff enthalten. Die Abbildung 15 veranschaulicht einen Snip zum Thema „aktuelle Softwareversionen“. Es wird deutlich, dass Snips nach außen hin genauso wie normale Webseiten aussehen. Gegenüber einer normalen Webseite kann ein Snip aber direkt vom Benutzer editiert werden, indem in der Funktionsleiste eines Snips auf „edit“ geklickt wird. Es erscheint dann, wie in Abbildung 16 dargestellt, die Editoransicht eines Snips. In dieser wird der gesamte Snip Kontext in einer frei editierbaren Eingabemaske angezeigt.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 15: SnipSnap
Der Kontext in einem Wikisystem wird im Gegensatz zu einer normalen HTML-Seite nicht mit Hilfe von HTML-Tags sondern über die WikiSyntax layoutet. Die WikiSyntax für SnipSnap befindet sich in jedem SnipSnap-System im Snip „snipsnap-help“ [SnipSyntax]. Die Wikisyntax für SnipSnap verwendet beispielsweise zwei hintereinander folgende Unterstriche vor und hinter einem Wort zum Fettschreiben des Wortes in der Normalansicht (siehe Abbildung 16 und 17 die Softwareversionsnummern). Eine weitaus größere Möglichkeit zum Darstellen von Inhalten in SnipSnap bieten Makros. Makros sind in diesem Fall eine Art Layoutvorlage, deren Inhalt durch Makroparameter ergänzt und bestimmt werden kann. Auf die Funktionsweise von Makros geht das Kapitel 5.1.2 genauer ein.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 16: SnipSnap Editoransicht
Metainformationen zu einem Snip
Über den normalen Kontext hinaus kann ein Snip Metainformationen über sich selbst speichern. Diese Metainformationen ermöglichen beispielsweise die Speicherung des Typs eines Snips oder aber die Art, wie er dargestellt werden soll. Konfigurationsdateien von SnipSnap sind in SnipSnap selbst als Snips abgelegt. Damit der Kontext dieser Konfigurationssnips nicht in der Normalansicht interpretiert wird, kann ihnen beispielsweise eine andere Darstellungsart zugewiesen werden. Die Möglichkeiten der Verwendung von Labels sind vielfältig. Darüber hinaus können Labels wie Markos selbst definiert und nachgeladen werden. Da sich diese Funktionalität in einem Umbruch befindet, sei an dieser Stelle auf die Projektseite von SnipSnap verwiesen [SnipSnap].
5.1.2 Erweiterungsmöglichkeiten von SnipSnap durch Makros
Für die Einführung von dynamischen Formularen in SnipSnap ist es erforderlich, zunächst die standardisierte Erweiterungsmöglichkeit von SnipSnap durch Makros zu beschreiben. Die Makros stellen die Grundlage für die Erweiterung von SnipSnap um Formularmakros dar. Makros sind, wie beschrieben, eine Möglichkeit, um die Wikisyntax von SnipSnap beliebig zu erweitern. SnipSnap unterscheidet zwischen Radeoxmakros und SnipSnapmakros. SnipS- napmakros ermöglichen den Zugriff innerhalb des Makros auf den Snip, in dem sie ausgeführt werden. Im Weiteren wird im Zusammenhang mit Makros nur noch von SnipSnapmakros gesprochen. Makros können von unterschiedlichen Entwicklern losgelöst von SnipSnap wie Plugins entwickelt werden. Ein Makro wird durch eine eigene Klasse realisiert, die von der Klasse SnipMacro erbt und wie in Abbildung 17 (Code) dargestellt, die execute und getname Methode implementiert. Die getname Methode muss einen eindeutigen Namen für ein Makro zurückgeben, um die Verwendung des Markos durch den Makronamen (siehe Abbildung 17 (blau)) eindeutig der Klasse des Makros zuordnen zu können. Dies ist erforderlich, um die im SnipSnap-System geladenen Makros bei ihrer Verwendung eindeutig zu identifizieren. In der Normalansicht werden die Makros dargestellt bzw. ausgeführt. Anstelle der Makrosyntax wird die in der execute Methode definierte Ausgabe visualisiert (siehe Abbildung 17 (Normalansicht)). Bei der Verwendung eines Makros können diesem beliebig viele Parameter mit übergeben werden. Wofür die Makroparameter verwendet werden, hängt von der Implementierung der execute Methode ab. SnipSnap kann dabei nicht direkt die Gültigkeit der Parameter überprüfen. Die Überprüfung der Parameter ist nur in der execute Methode möglich. Im Beispiel Abbildung 17 wird der erste mit übergebene Parameter hinter dem Text mit ausgegeben. Der zweite Parameter wird innerhalb der execute Methode nicht verwendet und ist damit gegenstandslos. Die Klasse des Makros kann darüber hinaus eine Methode getParamDescription überschreiben (die Methode getParamDescription liefert standardmässig nur einen Hinweistext). Der Rückgabewert der Methode beschreibt in der Hilfe von SnipSnap die Makroparameter des Makros. Darüber hinaus kann die Klasse des Makros eine weitere Methode überschreiben, um eine spezielle Beschreibung des Makros in der Hilfe anzuzeigen. Um die selbst entwickelten Makros in SnipSnap zu integrieren, müssen die Class-Dateien der Makros zusammen mit der Konfigurationsdatei „org.radeox.macro.Ma- cro“, die im Verzeichnis „META-INF/services“ stehen, in eine JAR-Datei gepackt werden.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 17: Verwendung eines Makros Codeansicht, Editoransicht, Normalansicht
Um die einzelnen Makros zu registrieren wird in der Konfigurationsdatei in je eine Zeile der vollständige Klassenname eines Makro geschrieben. Damit die Makros beim Start von SnipS- nap automatisch geladenen werden, muss die JAR-Datei in das Bibliotheksverzeichnis der SnipSnap Applikation kopiert werden. Weitere Informationen zur Implementierung von Markos findet man auf den Projektseiten von SnipSnap [SnipSnap].
5.1.3 Formularansicht
SnipSnap ermöglicht standardmässig nur die einfache Erstellung von Snips in der Editoransicht durch das direkte Schreiben von Wikisyntax (siehe Abbildung 16). Das Ausfullen von Formularen wird dabei nicht durch das System unterstützt. SnipSnap wurde daher um eine Formularansicht erweitert. Die Formularansicht ist eine spezielle Editoransicht für Snips, die vom Typ Formular sind. Die Abbildung 18 veranschaulicht den praktischen Unterschied zwischen einem Formularsnip und einem normalen Snip.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 18: Formularsnip und ein normaler Snip in der Nomialansicht
In der Formularansicht können Daten formalisiert eingegeben werden. Die Formularansicht stellt eine neue zusätzliche Ansicht für Snips des Typs Formular in SnipSnap dar. Die Formularansicht selbst gibt dabei den technischen Rahmen für die Formulare vor. Die Formulare selbst können durch spezielle Makros, sogenannte Formularmakros, beschrieben werden. Formularmakros stellen dabei eine Erweiterung der bestehenden Makroidee dar. Durch das Beschreiben des Snipkontexts unter Verwendung von Fomularmakros und die Zuweisung des Typs Formular als Label (engl. Form) ist es möglich einen Snips nicht nur in der normalen Editoransicht, sondern auch in der Formularansicht darzustellen. Die Erweiterung der Makroidee durch Formularmakros wird im Folgenden erläutert.
Form ularmakros
Für die Formularansicht ist es wie dargestellt erforderlich, dass das Makrokonzept von SnipSnap um Formularmakros erweitert wird. Der Ansatz, dass ein Makro selbst weiß, wie es in der Normalansicht dargestellt werden möchte, wurde auch für die Formularansicht aufgegriffen. Ein Formularmakro erbt von der Klasse AbstractFormViewSnipMacro. Diese Klasse erweitert die Schnittstelle der Klasse SnipMacro um die Methoden editOutput und storeOutput. In der Methode editOutput definiert ein Formularmakro, wie es in der Formularansicht dargestellt wird und in der Methode storeOutput legt es fest, wie die eingegeben Daten aus der Formularansicht abgespeichert werden sollen. Um die Implementierung von Formularmakros zu vereinfachen, enthält die Klasse AbstractFormViewSnipMacr einige Hilfsmethoden. Darüber hinaus implementiert die Klasse die Speicherung der Daten aus der Formularansicht generisch, so dass die Methode storeOutput nur in sehr speziellen Fällen überschrieben werden muss. Zu den Methoden, die durch ein Formularmakro implementiert werden müssen, gehören die Methoden edi- tOutputHock und execute. Die Methode editOutput der Klasse AbstractForm- ViewSnipMacro ruft dabei die spezielle Implementierung der Methode editOutputHock eines Formularmakros auf. Die Methode editOutputHock enthält den Teil an Funktionalität, der speziell für dieses Makro implementiert wurde. Die Schnittstelle eines Formularmakros veranschaulicht die Abbildung 19 noch einmal genau. Damit ist es nun möglich, beliebige Formularmakros für die speziellen Bedürfnisse der Dokumentationsvorlagen zu implementieren.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 19: Schnittstelle einesFormularmakros
Anzumerken ist, dass gerade die Mehrfachverwendung von Makros in einem Snip und die Speicherung von Daten über die Formularansicht, die Einführung von speziellen Ids bei der Interpretierung der Makros für die Formularansicht und die Auswertung der Formularansicht nötig gemacht haben. Für diese Details sei auf den Quellcode der praktischen Umsetzung verwiesen.
Die Realisierung der Anforderungen durch Dokumentationsvorlagen erfordert die Implementierung von generischen Formularmakros, da der Großteil von Formularen in WWW aus wenigen verschiedenen Elementen zusammengesetzt wird. Im Speziellen wurden folgende Formularmakros implementiert:
Implementierte Formularmakros
Textbox
Makrosyntax
{docu_textbox:<Beschriftung>}Inhalt{docu_textbox}
Formularansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 20 :Formularmakro "docujextbox" Formularansicht
Normalansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 21: Formularmakro "docujextbox" Normalansicht
Textarea
Makrosyntax
{docu_textarea:<Beschriftung>}Inhalt{docu_textarea}
Formularansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 22 :Formularmakro "docujextarea" Formularansicht
Normalansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 23: Formularmakro "docujextarea" Normalansicht
Text
Makrosyntax
{docu_text:<Beschriftung für die Formularansicht>}Inhalt
{docu_text}
Formularansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 24: Formularmakro "docujext" Formularansicht
Normalansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 25: Fomiularmakro "docujext" Normalansicht
Label-Selection
Makrosyntax
{form_label:<Name des Labels>, <Typ des Labels>, <Beschriftung>, Eingabefeld [true/false], [Listenname des Labels], [Listenwert des Labels], Wert als Link[true/false] }?? {form_label}
Formularansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 26: Formularmakro "form_Jabel"Formularansicht
Normalansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 27: Fomiularmakro "form Jabel" Normalansicht
Wrapper für SnipSnapmakros Makrosyntax
{docu_macrowrapper:<Beschriftung in der Fomularansicht>, <Makroname>, [Parameter des Makros]*}??{docu_macrowrapper}
Formularansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 28: Formularmakro "docujnacrowrapper" Formularansicht
Normalansicht
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 29: Formularmakro "docujnacrowrapper" Normalansicht
Darüber hinaus wurden einige weitere Makros zur Verbesserung der Visualisierung der Formularansicht implementiert. An dieser Stelle sei auf die Lösung des praktischen Teils verwiesen.
Technische Lösung der Formularansicht
Die technische Lösung der Formularansicht stellt die Grundlage des Formularkonzeptes für SnipSnap dar. Die Implementierung beinhaltet folgende Teile:
- FormViewServlet und JSP-Seite für die Formularansicht
- FormStoreServlet für die Speicherung der Inhalte aus der Formularansicht
- FormViewRenderEngine zum Aufbau der Formularansicht
- FormStoreRenderEngine zum Auswerten und Speichern der Formularansicht
- FormViewFilter für die RenderEngine zum Aufbau der Formularansicht
- FormStoreFilter für die RenderEngine zum Auswerten und Speichern der Formularansicht
Für spezielle Details der Implementierung sei auf den Quellcode der praktischen Lösung verwiesen. Im Folgenden wird nur das Zusammenspiel der unterschiedlichen Komponenten beschrieben. Abbildung 30 veranschaulicht das Zusammenwirken der einzelnen Komponenten. Der Darstellungsrahmen der Formularansicht wird durch das FormViewServlet und die dazugehörige JSP-Umsetzung realisiert. Die Aufgabe, den Kontext eines Snips für die Formularansicht zu interpretierten, übernimmt eine speziell implementierte FormViewRenderEngine. Diese RenderEngine baut auf der Verwendung eines speziellen FormViewFilters zur Anzeige von Snips auf. Der Filter analysiert den SnipSnapKontext und filtert alle Makros heraus. In einem weiteren Schritt überprüft der Filter, ob es sich beim gefilterten Makro um ein Formularmakros handelt. Ist dies der Fall, wird die Methode editOutput des Makros ausgeführt.
Handelt es sich bei den gefilterten Teilen des Kontextes beispielsweise um SnipSnapMakros, werden diese und alle anderen Inhalte wie in der Normalansicht interpretiert. Darüber hinaus speichert der Filter zusätzliche Daten über die verwendeten Makros und ermöglicht somit die Bereitstellung von Zusatzinformationen, die durch den HttpServletRequest des Servlets transportiert werden. Nun kann das Formular vom Webbrowser geladen und dargestellt werden.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 30: Funktionsweise der Formularansicht
Nachdem das Formular ausgefüllt oder verändert wurde, können diese Modifikationen abgespeichert werden. An dieser Stelle greift das FormStoreServlet die Daten aus dem HttpServletRequest auf und verarbeitet die Daten aus dem Formular mit den intern gespeicherten Variablen. Anschließend leitet das Servlet die Daten an die FormStoreRenderEn- gine weiter. Diese verwendet einen speziellen FormStoreFilter, der wiederum aus dem Snip- kontext die Formularmakros herausfiltert und über die storeOutput Methode der Formularmakros die Daten für die einzelnen Makros abspeichert.
Gerade für die Datenspeicherung müssen einige Hilfsfunktionalitäten verwendet werden, da die Speicherung der Daten im Snipkontext nicht einfach zu realisieren ist.
Festzuhalten bleibt, dass damit beliebige, von unterschiedlichen Entwicklern implementierte Formularmakros, verwendet werden können. Darüber hinaus ist es zur grafischen Verschönerung der Formularansicht möglich auch normale Makros, die jedwede HTML Funktionalität implementieren, zu verwenden. Der FormularMakroWrapper für normale Makros erlaubt es, die Standardmakros von SnipSnap editierbar in die Formularansicht zu integrieren.
Aufbau von Formularvorlagen
Die Formularansicht ermöglicht zusammen mit den Formularmakros die Verwendung von Formularen in SnipSnap. Im Folgenden wird dargestellt, wie Vorlagen in SnipSnap aufgebaut und verwendet werden können.
Die Formularmakros werden in der Standardeditoransicht dazu benutzt den Inhalt des Snips zu beschreiben. Weiterhin muss der Typ des Snips auf „Form“ gesetzt werden. Nun ist es möglich den Snip in der Formularansicht darzustellen. Man kann damit beliebige Snips als Formularvorlagen erstellen. Ein spezielles Makro ermöglicht darüber hinaus die Erstellung eines beliebigen Formularsnips aus einer Vorlage durch Eingabe eines Namens für den Formu- larsnip und die Auswahl einer Formularvorlage durch Eingabe des Snipnamens oder durch die direkte Auswahl der Vorlage. Dadurch kann zum Beispiel direkt aus einer Dokumentationsvorlage eine beliebige Dokumentation erstellt werden.
5.1.4 Wissensmodell
Das Wissensmodell beschreibt die Typisierung und Verlinkungsmöglichkeiten von Dokumentationselementen bzw. Snips, Codesnips und Formularen. Codesnips sind direkte Repäsenta- tionen von JavaElementen, die eindeutig über ihren Namen referenzierbar sind. Codesnips stellen die Verbindungen zwischen Javaelementen und Dokumentationselementen, im weiteren nur noch Dokumentationssnips genannt, dadurch her, dass ein Codesnip das eindeutige Abbild eines Javaelementes ist. Dadurch ist es möglich, alle Informationen, die an einem Javaelemente gespeichert werden sollen, direkt am Codesnip zu speichern.
Labels sind in SnipSnap nur sehr eingeschränkt verwendbar, da einem Snip ein Label nur einmal zugewiesen werden kann. Beispielsweise ist es nicht möglichen, dass ein Snip zwei gleiche Labels mit unterschiedlichen Werten besitzt. Daher wurde ein zusätzliches Dokumentationssniptyplabel eingeführt, um einem Label mehr als einen Typ zuweisen zu können. Darüber hinaus erfolgte eine Erweiterung des Standardtyplabel um die Typen „Form“ (Formular), „FormTemplate“ (Formularvorlage) und „Codesnip“. Das Dokumentationssniptyplabel, genannt „ExtendedType“ Erweitertertyp. Standardmässig sind die folgenden Typen für ExtendedTyplabel schon vorgegeben:
- aspect (Aspektdokumentation)
- aspectpart (Teilaspektdokumentation)
- project (Projektdokumentation)
- patter (Musterdokumentation)
- docu (Dokumentation)
- maintenanceactivity (Wartungsaktivitätendokumenation)
Die Einschränkungen der Labelfunktionalität wirken sich besonders stark auf die direkte Verlinkung von Snips mit anderen Snips aus. So ist es beispielsweise nicht möglich, in einem Label eine Liste von Snip zu speichern und so einen Snip mit beliebig vielen anderen Snips zu verlinken. Daher wird für eine m:n, m:l und l:n Verbindung in dem Wert eines Label eine se- rialisierte Liste von Werten gespeichert. So kann das Label „connectedDocus“ des Codesnips beliebig viele Verbindungen zu Dokumentationssnips halten. Die Verbindungen zwischen einem Codesnip und den Dokumentationssnips werden ausschließlich im Codesnip gespeichert. Das heißt, dass eine Dokumentationssnip nicht weiß mit welchem Codesnip er verbunden ist. Ein Dokumentationssnip kann aber die zentrale Instanz fragen mit welchem Codesnip er in Verbindung steht. Falls es möglich wird, in SnipSnap Snips umzubenennen, kann die Refak- torisierungsunterstützung für die quellcodegebundene Dokumentation problemloser implementiert werden. Da so nicht die Dokumentationssnips sondern nur die Codesnips verändert werden müssen.
Zur direkten Verbindung von Aspekten und Teilaspekten, Dokumentationssnips mit Aspekten und die Zuordnung von Dokumentationssnip zu Projekten, wurden noch folgende Labeltypen eingeführt:
- partofaproject (Teil eines Projektes)
Es ist so möglich, direkt auf den Projektsnip zu verweisen.
- parentaspect (Eltern Aspekt)
Jeder Teilaspekt kann genau einem Elternaspekt zugewiesen werden.
- partofaaspect (Teil eines Aspekts)
Beliebige Dokumentation können einem Aspekt zugewiesen und so in die abstrakte Dokumentationsebene eingeordnet werden.
Für die Einführung weiterer Labels sei auf die Erweiterungsmöglichkeit von SnipSnap verwiesen, die es erlaubt, Labels wie Makros selbst zu implementieren [SnipSnap].
Snips können in SnipSnap nicht nur über Labels direkt miteinander verlinkt werden, sondern sie können auch indirekt über ihren Kontext miteinander verbunden werden. Dazu muss nur im Snipkontext eines Snips durch einen Link auf einen anderen Snip verwiesen werden. Dabei stellt ein Link auf einen anderen Snip nichts anderes dar, als einen Hyperlink (wie er aus HTML bekannt ist). Darüber hinaus kann der Inhalt von Snips direkt in andere Snips hineingepackt werden, ohne ihn hineinkopieren zu müssen. Alle diese indirekten Möglichkeiten Snips miteinander zu verbinden, bietet SnipSnap schon von sich aus. Darüber hinaus ist durch die Projektentwickler von SnipSnap geplant, die Labelfunktionalität zu erweitern, da deren Funktionalität, wie sich gezeigt hat, nicht ausreicht. Für die Demonstration der quellcodegebundenen Dokumentation reichen die Möglichkeiten zur Vernetzung der Informationen respektive Snips in SnipSnap aus.
5.2 Integration in die Entwicklungsumgebung
Die Integration in die Entwicklungsumgebung umfasst vor allem die Verbindung von Quellcode- und Dokumentationselementen. Die Verbindung von Quellcodeelementen und Snips erfolgt indirekt durch die Referenzierung der eindeutigen Namen der JavaElemente. In der praktischen Umsetzung ist es möglich, Klassen, Methoden und Pakete mit Snips zu verlinken. Die Realisierung der m:n Verbindung zwischen Dokumentationselementen bzw. Snips und Quellcode bzw. JavaElementen erfolgt über Codesnips. Die Verbindungen zwischen Codeelementen und Dokumenatiosnips wird in den Metadaten des entsprechenden Codesnips im Label „connectedDocus“ gespeichert. Zusätzlich wird für jede Verbindung die Rolle, die eine Quellcodestelle im Zusammenhang mit der verlinkten Dokumentation spielt, festgehalten. Die
Abbildung 31 veranschaulicht diese Verbindungen noch einmal deutlich. Die Anforderung, beliebige Quellcodestellen zu verlinken, wurde in der prototypischen Umsetzung nicht realisiert, da zur einfachen Veranschaulichung des Konzeptes der quellcodegebundenen Dokumentation sich die gewählte Umsetzung am besten eignet.
Abbildung in dieser Leseprobe nicht enthalten
Abbildung 31: Quellcode Dokumentationsverbindung durch Codesnips und Snips
Die Dokumentation des Softwaresystems wird innerhalb der Entwicklungsumgebung durch das Eudibamusplugin (Webclient) dargestellt. Über Eudibamus ist es möglich, die Dokumentationen zu erstellen und zu verändern ober auch zu löschen. Um die verlinkten Quellcodestellen innerhalb der Entwicklungsumgebung visualisieren, anlegen, löschen oder verändern zu können, kommuniziert das myAspectMap Plugin über XML-RPC mit dem SnipSnap-System. Durch den XML-RPC Handler, der in SnipSnap integriert wurde, können Daten aus SnipSnap ausgelesen und geschrieben werden. Damit ist es möglich, direkt aus der Entwicklungsumgebung Eclipse heraus die Quellcode-Dokumentation respektive Codesnip - Snip Verbindungen anzulegen, zu löschen oder zu bearbeiten. Die Abbildung 14 auf Seite 84 veranschaulicht diese Kommunikationswege noch einmal deutlich.
Das myAspectMap dient vor allem der Visualisierung und dem Management von Verbindungen zwischen Quellcode und Dokumentation. Dazu implementiert es einen Dokumentationsmarker fur den Ruler (linke Statusleiste in der Eclipse Quellcodeansicht) sowie die nötigen Kontextmenüs zum Anlegen, Verändern und Löschen eines Markers. Diesen Marker nutzt das Plugin auch zum Visualisieren bestehender Verbindungen zwischen Quellcodeelementen und Dokumentationssnips. Für die einzelnen Implementierungsdetails sei auf den Quellcode der Umsetzung verwiesen. Anzumerken ist, dass für die Verwendung von XML-RPC ein Wrap- perPlugin geschrieben werden musste, um die XML-RPC Bibliotheken in Eclipse verwenden zu können. Außerdem wurde ein reduziertes Layout für die Darstellung von Snips in Eudiba- mus implementiert, da das Browserfenster meist als kleines Pluginfenster verwendet wird. Die Kommunikation des Eclipse Plugin mit SnipSnap über XML-RPC beschränkt sich zum Großteil auf die Übermittlung von Listen von Dokumentationselementen und auf das Anlegen und Modifizieren von Codesnips. Die Details können direkt dem Quellcode entnommen werden.
5.3 Anwendungsbeispiele
Die Verwendung des Werkzeuges wird für die wichtigsten Entwicklungsphasen exemplarisch dargestellt. Zunächst wird die quellcodegebundene Dokumentation von Aspekten während der Implementierung betrachtet. Im Anschluss folgt die Darstellung des Vorgehens beim Dokumentieren von bestehenden Softwaresystemen unter Verwendung der quellcodegebundenen Dokumentation. Viele bestehende Systeme sind wie bereits dargestellt, nicht oder nur unzureichend dokumentiert. Gerade dann hat der Entwickler große Probleme, das System zu verstehen. Der Entwickler ist dann gezwungen, das System Schritt für Schritt zu analysieren. Dabei fallen immer mehr Informationen zu bestimmten Quellcodestellen und Erkenntnisse über das Zusammenspiel unterschiedlicher Systemteile an. Der Entwickler versucht nun während der Analyse des Systems, Notizen über das Wissen und die Informationen anzufertigen, die er zum System gewonnen hat. Zumeist werden diese Notizen in vom Quellcode getrennten Textdokumenten festgehalten. Eclipse bietet für das Festhalten von wichtigen Randbemerkungen Lesezeichen (engl. Bookmarks) an. Diese können alledings nicht miteinander verbunden oder anderen Entwicklern zugänglich gemacht werden. Hier schafft die Umsetzung der quellcodegebundenen Dokumentation Abhilfe.
5.3.1 Implementierungsphase
Durch die quellcodegebundene Dokumentation des Softwaresystems während der Implementierungsphase ist das direkte Festhalten aller wichtigen Fakten zum Softwaresystem möglich. In welchen Schritten ein System bei der Implementierung dokumentiert werden kann, wird im Folgenden anhand eines Beispiels näher beschrieben.
Ein Entwickler bekommt den Auftrag, ein Makro für SnipSnap zu implementieren, das einen beliebigen Text farbig darstellen kann. Der Entwickler macht sich zunächst Notizen in einem Snip, im weiteren als Gedankensnip bezeichnet (in Eclipse unter Verwendung der Eudibamus- plugin), welche Informationen er für die Implementierung des Makros benötigt. Da er bereits einige Makros für SnipSnap implementiert hat, kennt er sich mit den Grundlagen der Implementierung eines Makros aus. Es fehlen tuen ihm aber noch Informationen darüber, wie der Text durch HTML-Tags farbig angezeigt werden kann. Dazu surft er zu den Webseiten von SELFHTML und sucht die ihm fehlenden Informationen heraus. Den Link zu der konkreten Seite bei SELFHTML hält er zusammen mit einem Vermerk in seinem Gedankensnip fest. Nun kann er anfangen das Makro zu implementieren. Nach kurzer Zeit ist das Plugin fertig und er testet es in einem SnipSnap-System. Dabei stellt er fest, dass er einen Fehler gemacht haben muss, denn der Text, den er eingegeben hat, wird nicht dargestellt. Nach den Testen und Ausprobieren ermittelt er, dass er den falschen Makroparameter für die Darstellung des Textes verwendet hat. Nachdem er den Fehler analysiert und herausgefunden hat, dass durch das Kontrollieren der erforderlichen Parameter vor deren Verwendung der Fehler abgefangen werden kann, hält er sein Wissen in einem Fehlertagbucheintrag fest. Den Eintrag verlinkt er darüber hinaus direkt mit der Methode der Klasse des Makros, in der der Fehler aufgetreten ist, sowie mit der Basisklasse des Makros. Der Entwickler behebt den Fehler und das Makro funktioniert nun wie gewollt. Anschließend dokumentiert er die Realisierung des Makro kurz in seinem Gedankensnip und macht diesen zu einer Dokumentation, die er wiederum mit der Klasse des Makros verbindet. Die Dokumentation weist er nun dem Teilaspekt „Makro-Visualisierung von Text“ zu. Damit ist der Entwickler fertig und wendet sich der nächsten Aufgabe zu.
Es ist zu erkennen, dass das Dokumentieren des Softwaresystems parallel zum Implementie- rungspozess abläuft und ohne den Entwickler zu behindern.
5.3.2 Analyse- und Wartungsphase
Das Implementierungsbeispiel greift die Beschreibung der Möglichkeiten der quellcodegebundene Dokumentation für die Analyse- und Wartungsphase auf.
Einige Tage nach der Implementierung des Makros für SnipSnap zum farbigen Darstellen von Texts soll das Makro, um die Verwendbarkeit in der Formularansicht erweitert werden. Da der Programmierer, der das Makro implementiert hat, krank ist, wird ein anderer Entwickler gebeten, das Makro zu erweitern bzw. umzubauen.
Leider kennt sich der Entwickler nicht mit der Entwicklung von Makros für SnipSnap aus. Daher liest er zunächst einmal die Dokumentation, die er an der Implementierung des Makros entdeckt hat. Schnell wird ihm klar, wie das Makro implementiert wurde. Es stellt sich für ihn nur noch die Frage: „Wie kann ich aus einem normalen Makro ein Formularmakro machen?“ Dazu surft er durchs Netz und entdeckt auf den myAspectMap Webseiten eine Beschreibung des Formularmakrokonzeptes. Den Link zu der Seite und seine Gedanken hält er in dem bereits existierenden Dokumentationssnip zur Klasse fest. Bei der Suche nach der Implementierung eines Formularmakros stellt er fest, dass bereits einige Makros für das bestehende System implementiert, aber nicht dokumentiert wurden. Er macht sich nun daran, die Funktionsweise eines bestehenden Formularmakros nachzuverfolgen und hält dazu seine Erkenntnisse in einem neuen Dokumentationssnip fest und verlinkt diesen mit der analysierten Makroklasse sowie mit dem Aspekt „Makro“. Nach und nach wird ihm klarer, wie das Konzept funktioniert. Bei seiner Suche im SnipSnapDokumentationssystem stößt er auf eine Dokumentation über die Konfigurationsdateien für die Registrierung von Makros. Er verbindet die bestehende Dokumentation des zu erweiternden Makros indirekt über einen Link mit der Dokumentation, die eine Funktionsweise der Konfigurationsdatei beschreibt und verlinkt sie mit der existierenden Konfigurationsdatei. Dem Entwickler ist nun klar, das er nun nur noch eine zusätzliche Methode implementieren und von der Basis Klasse AbstractForm- ViewSnipMacro erben muss. Er testet seine Implementierung und stellt fest, dass es zu einem Fehler in der Formularansicht kommt. Bei der Betrachtung der Klasse entdeckt er den verlinkten Fehlertagebucheintrag. Dabei kommt ihm der Gedanke, dass er vielleicht in der Methode editOutputHock die falschen Parameter benutzt hat. Nachdem er festgestellt hat, dass das der Fehler war, testet er das Makro erneut. Nun funktioniert es. Zum Abschluss seiner Arbeit erstellt er unter Verwendung der Dokumentationsvorlage fur Wartungsaktivitäten noch die Dokumentation zu seiner Implementierung und wendet sich dann anderen Aufgaben zu.
Wie sich zeigt, integriert sich die quellcodegebundene Dokumentation gut in den Analyse- und Wartungsprozess und ermöglicht somit die schnelle Bearbeitung selbst unbekannter Problemfelder.
5.4 Umsetzungen der Anforderung
An die Umsetzung der quellcodegebundenen Dokumentation wurden eine Vielzahl von Anforderungen gestellt. Dazu zählen die Integration in den Implementierungsprozess, die Verbindung von beliebigen Quellcodestellen mit Dokumentationselementen, die Unterstützung bei der Erstellung einer einheitlichen Dokumentation sowie die Beschreibung von Aspekten durch Teilaspekte und die Zuordnung von Dokumentationselementen zu Aspektbeschreibungen. Die Realisierung der Anforderungen wird im Folgenden kurz noch einmal zusammengefasst.
Die Integration in den Implementierungsprozess beinhaltet die einfache Arbeit mit den Verbindungen zwischen Quellcode- und Dokumentationselementen, wie sie in Kapitel 5.3 dargestellt wurden. Darüber hinaus werden die Verbindungen direkt in der Entwicklungsumgebung visualisiert. Die Integration von myAspectMap in die Refaktorisierungsmöglichkeit von Eclipse, wurde nicht umgesetzt. Die geforderte Versionierung der Dokumentation bzw. der Snips wird direkt von SnipSnap unterstützt und ermöglicht auch den Vergleich zwischen unterschiedlichen Dokumentationsversionen. Die Verbindung von beliebigen Dokumentationselementen und Quellcodestellen wurde in der prototypischen Umsetzung auf die Verbindung von beliebigen Dokumentationselementen und Paketen, Klassen und Methoden beschränkt. Darüber hinaus wurde das Konzept der Dokumentationsvorlagen vollständig umgesetzt und ermöglicht so die Erstellung einer einheitlichen Dokumentation. Die Möglichkeiten der Dokumentation sind dabei nicht auf die einfache textuelle Beschreibung beschränkt, sondern es ist möglich, beliebige Inhalte, die im WWW dargestellt werden können, zu verwenden bzw. durch Makros zu integrieren. Es ist auch möglich, die Dokumentation mit externem Wissen aus dem Intranet oder Internet über Links zu verknüpfen. SnipSnap kann, da es über den Webbrowser benutzt wird, auch für das Paarprogramming aus XP eingesetzt werden. Ein Entwickler programmiert beispielsweise und der andere Entwickler schreibt schon die Dokumentation.
Dabei ist die sofortige Verbindung von Quellcode und Dokumentation durch den programmierenden Entwickler möglich. Dies wird dadurch erreicht, dass der dokumentierende Entwickler auf dem SnipSnap-System des programmierenden Entwicklers arbeitet. Der Schutz der Dokumentation ist durch eine Zugriffskontrolle des SnipSnap-System gegeben. Abschließend lässt sich sagen, dass durch die Verbindung beliebiger Teilaspektdokumentationen mit Aspektdokumentationen ein Aspekt in kleineren Einheiten beschrieben werden kann. Es ist dabei auch möglich, beliebige Dokumtationselemente mit Aspekten oder Teilaspekte zu verknüpfen. Die Verteilung der Aspekte im Quellcode wird dabei in SnipSnap durch die Auflistung der verbundenen Quellcodestellen realisiert.
SnipSnap bietet durch die Fülle an Funktionalitäten eine Reihe von Möglichkeiten, um ein Softwaresystem zu dokumentieren und darüber hinaus die Kommunikation zwischen den Mitarbeitern zu vereinfachen.
5.5 Installation des Systems
Die Installation der prototypischen Umsetzung der Arbeit, im weiteren myAspectMap genannt, erfolgt in mehren Schritten. Zunächst ist es erforderlich, dass folgende Pakete aus dem Internet heruntergeladen werden:
- Aktuelle von myAspectMap unterstützte Version von Eclipse [Eclipse]
- Modifiziertes SnipSnap von myAspectMap [myAspectMap]
- myAspectMap Plugin für Eclipse und das modifizierte SnipSnap [myAspectMap]
Im nächsten Schritt wird Eclipse und das MyAspectMap Plugin für Eclipse wie unter Eclipse üblich in das Pluginverzeichnis installiert. Danach wird das modifizierte SnipSnap Paket wie von SnipSnap beschrieben, entpackt und SnipSnap wie üblich installiert. Bei Problemen mit SnipSnap empfiehlt es sich, die Projektseite von SnipSnap zu studieren. Die sehr aktive Gemeinschaft hilft gern. Danach können SnipSnap und Eclipse gestartet werden und die Einstellungen am myAspectMap Plugin für Eclipse vorgenommen werden.
Im Laufe des Frühjahrs 2004 wird es auf den Projektseiten von myAspectMap auch einen Patch für die jeweils aktuelle SnipSnapversion geben, um SnipSnap direkt selbst für myAspectMap anpassen zu können.
6 Zusammenfassung - Fazit
Die Werkzeugunterstützung für die Erstellung quellcodegebundener Dokumentation für Aspekte in Softwaresystemen versetzt den Entwickler in die Lage, sein Wissen und seine Informationen zu Softwaresystemteilen direkt während der Implementierung am Quellcode festhalten zu können. Darüber hinaus kann ein Entwickler nun seine Gedanken und Schlüsse zu einem bestehenden System quellcodenah bei der Analyse eines Systems in der Wartungsphase dokumentieren. Durch die Werkzeugunterstützung ist es möglich, die unterschiedlichen Informationen und Dokumentationen miteinander zu vernetzen und so das einfachere Verständnis für das Softwaresystems durch andere Entwickler zu fördern. Bei der Dokumentation des Quellcodes und der Vernetzung der Dokumentationen entsteht eine abstrakte Dokumentationsebene, die das System beschreibt und den Bruch zwischen der gängigen Dokumentation eines Softwaresystems und dem Quellcode aufhebt. Als Vorteil hat sich dabei die Gliederung der Dokumentation in Aspekte und Teilaspekte des Softwaresystems erwiesen, da so die Dokumentation des Systems in gedanklich kapselbare Einheiten von Verhalten strukturiert wird. Die Realisierung besteht aus einem System, das das Wiki SnipSnap für die Dokumentation von Quellcode und Eclipse für die Integration des Werkzeugs in eine Entwicklungsumgebung miteinander verbindet. Dabei unterstützt das System die Verknüpfung von Quellcodeelementen und strukturierten Dokumentationselementen sowie die Visualisierung der Verknüpfungen in der Entwicklungsumgebung.
Wie sich gezeigt hat, hängt eine bessere Dokumentation von Softwaresystemen nicht nur von der Realisierung möglicher Werkzeug ab, sondern erfordert die Berücksichtigung vieler Aspekte. Bevor in eine neue technische Lösung investiert wird, um die Arbeitsleistung zu erhöhen und zu verbessern, sollte das Arbeitsumfeld analysiert und bewertet werden. Nur so kann sichergestellt werden, dass die Rentabilität der Investition nicht durch ein schlechtes Arbeitsumfeld gefährdet wird. Wenn das Umfeld den Entwickler stark bei seiner Tätigkeit behindert, kann allein durch ein neues Werkzeug keine Qualitäts- oder Produktivitätssteigerung erzielt werden.
In Zukunft werden integrierte Entwicklungsumgebungen eine immer stärkere Vernetzung unterschiedlichster bisher getrennt agierender Prozesse miteinander ermöglichen. Der Ansatz von Juri Memmert [Mem02a], der die Vernetzung aller Entwicklungszyklen und deren Artefakte sowie die Verfolgung der Mutation der Artefakt vorsieht, geht diesen Weg noch konsequenter, als es der Ansatz der quellcodegebundenen Dokumentation kann. Die vielen unterschiedlichen Produktteile eines Softwaresystems werden immer enger miteinander verwoben, um den Informations- und Wissensgewinn der dabei entsteht, fur qualitativ hochwertigere und komplexere Softwareprodukte zu nutzen. Die unterschiedlichen Brüche, wie sie zwischen der Anforderungsbeschreibung, den Analysedokumenten, den Designdokumenten, der eigentlichen Dokumentation und der zentralen Realisierung des Systems d.h., der Implementierung bestehen, müssen aufgehoben werden, um das Systemverständnis zu erleichtern und den steigenden Anforderungen gerecht zu werden.
Der nächste Entwicklungsschritt des Projektes myAspectMap, könnte im Rahmen eines Open- Source Projektes die Umsetzung der Verlinkung von beliebigen Quellcodeelementen sein. Denkbar ist auch, dass das Werkzeug um die Verfolgung und Aufzeichnung von Quellcode- browsing Sitzungen erweitert wird. Dazu könnte der Weg, den ein Entwickler durch den Code nimmt, aufgezeichnet und von ihm an beliebigen Stellen dokumentiert werden. Die so gewonnenen Informationen könnten Aufschluss über die Herkunft von Erkenntnissen bei der Analyse des Systems geben. Grundlegend erfordern alle Ansätze, die Quellcodes mit anderen Informationen vernetzen wollen, die Möglichkeit, einzelne Elemente des Quellcodes zu refe- renzieren. Wie die Arbeit darstellt, ist ein vielversprechender Ansatz die Speicherung von Quellcode im XML-Format. Die Realisierung der quellcodegebundenen Dokumentation für Aspekte in Softwaresystemen stellt dabei einen ersten Schritt dar, um die Möglichkeiten der Verbindung von Quellcode und Information eingehender zu erproben.
7 Anhang
7.1 Abbildungsverzeichnis
Abbildung 1: Begriffliche Einordnung des Reengineering
Abbildung 2: Qualitätsmerkmale nach ISO 9126
Abbildung 3: Wasserfallmodell
Abbildung 4: V-Modell
Abbildung 5: W-Modell
Abbildung 6: Spiralmodell
Abbildung 7 Rational Unified Process (RUP)
Abbildung 8: Maslowsche Bedürfnispyramide
Abbildung 9: Erweitertes Chef-Programmierer-Team
Abbildung 10: Weg zur quellcodegebundenen Dokumentation
Abbildung 11: Eclipse Architektur
Abbildung 12: Vergleich Klartext, AST und srcML [CMM02]
Abbildung 13: Vergleich
Abbildung 14: Prototypische Realisierung - Technische Ansicht
Abbildung 15: SnipSnap
Abbildung 16: SnipSnap Editoransicht
Abbildung 17: Verwendung eines Makros Codeansicht, Editoransicht, Normalansicht
Abbildung 18: Formularsnip und ein normaler Snip in der Normalansicht
Abbildung 19: Schnittstelle eines Formularmakros
Abbildung 20 :Formularmakro "docu_textbox" Formularansicht
Abbildung 21: Formularmakro "docu_textbox" Normalansicht
Abbildung 22 :Formularmakro "docu_textarea" Formularansicht
Abbildung 23: Formularmakro "docu_textarea" Normalansicht
Abbildung 24: Formularmakro "docu_text" Formularansicht
Abbildung 25: Formularmakro "docu_text" Normalansicht
Abbildung 26: Formularmakro "form_label" Formularansicht
Abbildung 27: Formularmakro "form_label" Normalansicht
Abbildung 28: Formularmakro "docu_macrowrapper" Formularansicht
Abbildung 29: Formularmakro "docu_macrowrapper" Normalansicht
Abbildung 30: Funktionsweise der Formularansicht
Abbildung 31: Quellcode Dokumentationsverbindung durch Codesnips und Snips
7.2 Begriffsverzeichnis
Abbildung in dieser Leseprobe nicht enthalten
- Citar trabajo
- Diplom Informatiker Peter Glöckner (Autor), 2004, Werkzeugunterstützung für die Erstellung einer quellcodegebundenen Dokumentation für Aspekte in Softwaresystemen, Múnich, GRIN Verlag, https://www.grin.com/document/120512
-
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X. -
¡Carge sus propios textos! Gane dinero y un iPhone X.