… ist der Titel einer der besten Diplom- bzw. Magisterarbeiten aller Studien der Technischen Fakultät an der Universität Klagenfurt und wurde vom Förderverein Technische Fakultät mit EUR 750,– ausgezeichnet. Die Autorin und Preisträgerin, Frau DI Daniela Pohl, ist nun Mitarbeiterin am Institut für Informatiksysteme, Forschungsgruppe „Software Engineering und Soft Computing„, und arbeitet dort als Universitätsassistentin unter anderem an ihrer Dissertation. Der Preis wurde im Rahmen der Eröffnung des akademischen Jahres 2010/2011 übergeben und wir möchten ihre Diplom- bzw. Magisterarbei kurz vorstellen.
Kurzfassung:
Man stelle sich vor, man stünde vor einem großen, schönen Haus mit einem einzigen Haken, einem Schild an der Türe: „Betreten des Hauses auf eigene Gefahr!“. Würden Sie freiwillig eintreten?
Eigentlich stehen wir vor dem gleichen Problem wenn man an die Software‐Entwicklung denkt. Wer garantiert, dass Software auch dies hält, was sie verspricht oder zu versprechen scheint? Wenn man ehrlich ist: nicht immer kann es versprochen werden. Um sicherzustellen und zu überprüfen ob eine Software die Anforderungen hält, muss man in erster Linie eine Möglichkeit finden, sie zu bewerten. Dafür muss eine Software aber leichter und besser verstanden werden. Das Verstehen ist sowohl während als auch bei Aktivitäten nach der eigentlichen Entwicklung, wie der Wartung, notwendig. Dies ermöglicht es erst zu entscheiden, ob die Vorstellungen und Versprechungen der Software erfüllt wurden. [MBPR01, S 95] Dieser Gedanke bildet die Basis meiner Arbeit: die Unterstützung des Verstehens der Eigenschaften von Software. Dafür müssen Konzepte der Software identifiziert, sowie deren Zusammenhänge verstanden werden. Um diesen Prozess zu unterstützen wurde ein Framework implementiert. Es wurde dabei so konzipiert, dass es mit beliebigen Dokumenten umgehen kann. Exemplarisch werden im Rahmen der Arbeit formale Z‐Spezifikationen herangezogen.
Die Welt ist voller Konzepte und Abhängigkeiten. Somit beinhalten auch Dokumente der Softwareentwicklung, von Analysedokumenten über Design, bis hin zur Implementierung, Konzepte und Abhängigkeiten. Durch Änderungen im Projekt finden auch Änderungen der Konzepte im Dokument statt. Sie werden hinzugefügt, verworfen oder ausgebaut. Das Verständnis dieser Dokumente ist immer notwendig, daher gilt es den Verständnisprozess bestmöglich zu unterstützen. Dokumente besitzen eine bestimmte Struktur. Diese Struktur besteht aus unterschiedlichen Teilen, bei einem normalen Schriftstück zum Beispiel aus Kapiteln, Absätzen und Sätzen. Für das Gesamtverständnis müssen Teile innerhalb von Dokumenten häufig miteinander in Verbindung gebracht werden. Auch Verweise auf andere Dokumente können notwendig sein. Die im Dokument enthaltenen Teile beschreiben bestimmte, notwendige Konzepte und deren Zusammenhänge. Meist werden im Text beschriebene Konzepte und Zusammenhänge falsch interpretiert, weil sie vielleicht im Widerspruch mit unseren Vorstellungen stehen, oder sie werden auch einfach übersehen. Konzepte bilden ein wichtiges, wenn nicht sogar ein mächtiges, Hilfsmittel im Verständnis von Dokumenten jeglicher Art.
Ein Softwareprojekt, unabhängig vom dahinterliegenden Prozessmodell, besteht aus verschiedenen Phasen und Abschnitten, welche innerhalb der Laufzeit auch mehrmals durchlaufen werden können. Während jeder dieser Phasen werden Dokumente erstellt, in denen das Wissen und die Erkenntnisse über die entstehende Software festgehalten werden. Ideen werden dabei ausgebaut, verworfen oder neu aufgenommen. Dokumente weisen daher komplexe, umfangreiche Inhalte auf. Diese Dokumente werden erstellt, um den Entstehungsprozess zu unterstützen und zu erleichtern, um Informationen über Projektgrenzen hinweg zu kommunizieren und für die späteren Phasen festzuhalten. Dafür müssen Dokumente, von jedem der sie verwendet, verstanden werden. Während es einem einfach erscheint, Dokumente, welche man selbst geschrieben hat, zu verstehen, sind Dokumente aus anderen Quellen nicht immer sofort klar und verständlich.
Der Ursprung des Konzeptes stammt aus der Philosophie. Konzepte beschreiben Generalisierungen oder Abstraktionen, abgeleitet von spezifischen Merkmalen der Instanzen. Immanuel Kant, als einer der bedeutendsten Philosophen, beschreibt Begriffe für das Verstehen von Konzepten als eine notwendige Vorraussetzung für die Erkenntnis im Denkprozess [HaSc88]. Der Begriff bildet eine Abstraktion des Gesehenen aufgrund von unterschiedlichen Merkmalen ab. Dadurch wird es einem beispielsweise ermöglicht zwischen einer normalen Funkfernbedienung und einem Mobiltelefon zu unterscheiden. Genau diese Begriffe geben den Konzepten einen Namen und lassen uns mentale Modelle unserer Welt aufbauen und verstehen. Oft wird davon gesprochen, dass man sich ein mentales Modell aufbauen muss, um Dokumente verstehen zu können. Durch das mentale Modell kann die ursprüngliche Idee hinter dem Dokument aufgegriffen werden. Dies ist sowohl in Bereichen der Software‐Wartung und Evolution, als auch in der normalen fortschreitenden Entwicklung notwendig, vor allem wenn Informationen aufgrund der Menge vergessen werden oder neue Projektmitglieder hinzukommen. Konzepte helfen dieses Modell aufzubauen. Die Identifizierung von Konzepten, auch Concept‐Location genannt, erfolgt mittels unterschiedliche Verfahren [ChRa00, ACC+02 oder WHGT99]. Dabei können zum Beispiel jene Stellen im Code identifiziert werden, in denen aufgrund der Wartungsaktivitäten Änderungen durchgeführt werden müssen, oder auch Funktionalitäten ergänzt werden müssen.
Auch bei der komponentenbasierte Software‐Entwicklung ist das Aufbauen eines mentalen Modells wichtig [MBPR01]. Durch das Verstehen von Software‐Komponenten, kann festgestellt werden ob die gewünschte Funktionalität durch die Komponente gesichert ist. Reuse (Wiederverwendung) und Comprehension (Verständnis) stehen daher in engem Zusammenhang. Dabei stehen unterschiedliche Arten von Informationsquellen, wie beispielsweise Source‐Code und in idealen Situationen auch Spezifikationen, zur Verfügung. Mitglieder eines Softwareteams müssen daher bei dem Aufbau des mentalen Modells und bei der Identifizierung von Konzepte und der Verwaltung bereits identifizierter Konzepte unterstützt werden.
Spezifikationen sind, wenn vorhanden, eine wünschenswerte und wertvolle Informationsquelle. Sie beschreiben die Funktionalität bzw. die Eigenschaften eines Softwareproduktes in einer semantisch kompakten Arten und Weise [Boll04, S. 17]. Aufgrund dessen sind Spezifikationen oft nicht leicht verständlich, vor allem und in erschwerter Weise, wenn der Ursprung des Dokumentes nicht von eigener Hand kommt oder auch längere Zeit zurückliegt. Weiters bieten Spezifikationen einem die Möglichkeit, kompakt die Eigenschaften eines Systems zu beschreiben. Schon aufgrund der kompakten Schreibweise ist es hier wichtig Teile in Spezifikationen zu finden, die mit anderen Teilen in Verbindung stehen, um so Konzepte und ein Verständnis für diese Konzepte zu ermöglichen. Auch ein partielles Verständnis eines Spezifikationsdokuments kann notwendig sein, um beispielsweise Fehler auszubessern, Änderungen in Spezifikationen nach zu ziehen oder einen Einblick in die Eigenschaften der Software(‐Komponente) zu bekommen.
Aus diesem Grund beschreibt die eingereichte Arbeit, ein Konzeptverwaltungssystem, welches die Identifizierung und persistente Verwaltung von Konzepten in Spezifikationsdokumenten ermöglicht. Dadurch wird die Bildung eines mentalen Modells für ein bestimmtes Dokument erleichtert. Im Rahmen der Arbeit wird die Rekonstruktion von Konzepten als eine mehrdimensionale Repräsentation angesehen, in der Konzepte aufgrund ihres Charakters in unterschiedlichen Konzeptebenen kategorisiert werden. Die beschriebene mehrdimensionale Abbildung ermöglicht es, Konzepte von Dokumenten zu manifestieren und mit anderen Konzepten unterschiedlicher Ebenen in Beziehung zu setzen. Aufbauend auf diese Abbildung wurde ein Datenbankschema entwickelt, welches die gewonnen Informationen persistent speichert und im Rahmen des Entwicklungsprozesses ablegt. Die Abhängigkeiten zwischen Konzepten können über einfache Datenbankabfragen ermittelt werden.
Der Ansatz wurde generisch gehalten, um in weiterer Folge auch andere Dokumenttypen verwalten zu können. Zudem können zukünftig dadurch Konzepte verschiedener Dokumente des Entwicklungsprozesses miteinander in Verbindung gesetzt werden, um weiters die Rückführbarkeit (Traceability) oder die Entwicklung von Konzepten festzuhalten. Zur Veranschaulichung des Ansatzes wurden für die Extraktion Spezifikationsdokumente herangezogen. Hierfür wurde ein bestehendes System, das ViZ (Visualization of Z Specifications) Projekt des Instituts für Informatiksystem der Alpen‐Adria Universität Klagenfurt [Boll07], erweitert. Das System unterstützt die Suche von Konzepten in Z‐Spezifikationen. Jedoch werden dabei komplexe, rechenintensive Algorithmen zur Ermittlung der Informationen herangezogen und die Ergebnisse nicht persistent abgelegt.
Das grundsätzliche Ziel dieser Arbeit ist es zu zeigen, wie durch Konzeptverwaltung der Prozess der Software‐Entwicklung unterstützt werden kann. Ein Anforderungsdokument, eine Spezifikation oder ein Programm bauen auf verschiedenen Konzepten. Diese Konzepte bilden sich durch die Analysephase innerhalb der Anforderungserhebung. Es soll geklärt werden, inwiefern Konzepte den Entwicklungsprozess unterstützten können. Der Verhalt wird exemplarisch am Beispiel zustandsbasierter Z‐Spezifikationen gezeigt werden. Um dies jedoch erfolgreich zu diskutieren, müssen aber zusätzliche Teilbereiche näher durchleuchtet werden.
Es wurde gezeigt, wie Konzepte manifestiert, verwaltet und miteinander in Verbindung gebracht werden können. Dabei wurde als erstes der Begriff „Konzept“ näher untersucht. Viele Bereiche der Softwareentwicklung sprechen von Konzepten, ohne jedoch den Begriff im Detail zu definieren. Aus diesem Grund wurde der Konzeptbegriff im Bezug auf Z‐Spezifikationen klar abgegrenzt. Weiters wurde festgehalten, wie Konzepte miteinander in Verbindung stehen und wie diese Verbindungen lokalisiert werden können.
Um eine Unterstützung im Software‐Prozess zu ermöglichen, beschreibt die Arbeit zudem welche Funktionalitäten zur Unterstützung des Comprehension und Reengineering‐Prozesses für Spezifikationsdokumente von Nöten sind. Da die alleinige Speicherung von Konzepten nicht ausreichend ist, wurde in der Arbeit untersucht, wie Beziehungen zwischen Konzepten effizient abgebildet werden können. Weiters wurden verschiedene anderer Funktionalitäten für die Handhabung der verwalteten Konzepte im Bereich von Comprehension und Reengineering benötigt. Eine detaillierte Erarbeitung und Aufschlüsselung der Funktionalitäten war daher erforderlich.
Vollständige und vor allem aktuelle Spezifikationen sind im Bereich von Software‐Wartung und Evolution besonders hilfreich. Durch die Untersuchung von unterschiedlichen Vor‐ und Nachteilen, wird die Relevanz der Konzeptverwaltung im Bezug auf Software‐Wartung und Evolution ergründet. Da Konzepte auch hier eine entscheidende Rolle spielen, müssen mögliche Anforderungen ebenfalls für diese Bereiche erfasst werden. Durch die Berücksichtigung des Softwareentwicklungsprozess mit den wichtigsten Subdisziplinen werden die zu erfüllenden Anforderungen erhoben. Diese müssen durch eine geeignete Concept‐Location‐Repräsentation (vgl. mehrdimensionale Repräsentation) abgedeckt werden. Deshalb wird sowohl die gewählte Repräsentationsform als auch die im Rahmen der Arbeit durchgeführte Implementierung in Hinblick auf ihre Eignung durch aus der Literatur bekannten Beispielen für Z‐Spezifikationen evaluiert.
Literatur
[MBPR01] Roland T. Mittermeir, Andreas Bollin, Heinz Pozewaunig, and Dominik Rauner‐Reithmayer. Goal‐driven combination of software comprehension approaches for component based development. SIGSOFT Software Engineering Notes 26, Seiten 95‐‐102, New York, NY, USA, 2001. ACM.
[HaSc88] Robert Hartman und Wolfgang Schwarz. Immanuel Kant Logic. Dover Publications, Inc., Mineola, New York, 1988.
[ChRa00] Kunrong Chen und Václav Rajlich. Case Study of Feature Location Using De‐ pendence Graph. In IWPC ’00: Proceedings of the 8th International Workshop on …. Program Comprehension, Seite 241, Washington, DC, USA, 2000. IEEE Computer Society.
[ACC + 02] Giuliano Antoniol, Gerardo Canfora, Gerardo Casazza, Andrea De Lucia, und Ettore Merlo. Recovering Traceability Links between Code and Documentation. IEEE Trans. Softw. Eng., 28(10):970‐‐983, 2002.
[WHGT99] W. Eric Wong, Joseph R. Horgan, Swapna S. Gokhale, und Kishor S. Trivedi. Locating Program Features using Execution Slices. In ASSET ’99: Proceedings of the 1999 IEEE Symposium on Application ‐ Specific Systems and Software Engineering and Technology, Seite 194, Washington, DC, USA, 1999. IEEE Computer Society.
[Boll04] Andreas Bollin. Specification Comprehension Reducing the Complexity of Specifications. Dissertation, Institute for Informatics‐Systems, University of Klagenfurt, 2004.
[Boll07] Andreas Bollin. The ViZ Framework ‐ Support for Formal Z Specification Comprehension. Technical report, AAU KLU, Klagenfurt, Österreich, Juni 2007.