Dieses Dokument beschreibt zwei der drei Aufgaben für den Schein zur Vorlesung
Software-Reengineering
WS 07/08 .
Hier wird zunächst die erste Aufgabe beschrieben. Im Laufe des
Semester erfolgen noch zwei weitere Aufgaben.
Ergänzt wird die Projektarbeit noch durch ein Fachgespräch über den
Inhalt der Vorlesung.
Tool-Einführung
Für die erste Abgabe (und auch für weitere) kann man (muss aber nicht)
Bauhaus einsetzen. Am 19.12.2007, um 10 Uhr, stelle ich deshalb
Bauhaus in Raum OAS 3016 (Linzer Str. 9a, 3. Stock) genauer vor. Alle
Interessenten sind herzlich eingeladen.
Abgabe
Die Abgabe muss elektronisch per E-Mail spätestens bis zum 28. Januar 2008 erfolgen.
Elektronische Abgabe
Die elektronische Abgabe erfolgt als E-Mail an Rainer Koschke. Das
Format der elektronischen Fassung muss entweder ASCII oder PDF
sein.
Aufgabe 1
Versetzen Sie sich in die folgende Situation: Sie sollen die Wartung
für Weltab übernehmen, das Sie von einem Vorgänger
geerbt haben. Ihr Chef (ein weiser Manager, wie man ihn selten findet)
räumt Ihnen Zeit ein, die Implementierung des Systems in Ordnung zu
bringen, bevor er Sie mit Erweiterungen beauftragt. Zunächst
betrachten Sie den Quellcode und finden dessen "Problemzonen", ohne
tatsächlich den Code zu ändern.
Finden Sie Schwachstellen im Quellcode von Weltab, die Sie als
verbesserungswürdig betrachten; d.h. von der Sie der Ansicht sind,
dass sie einem Refactoring unterzogen werden sollten. Sie können
hierzu jede beliebige Technik (z.B. Software-Metriken, Klonerkennung,
aber auch einfaches Durchlesen) und jedes verfügbare Werkzeug
verwenden.
Begründen Sie jeden Ihrer Vorschläge.
Beschreiben Sie, wie Sie die Schwachstellen gefunden haben und -
präzise mit Bezug auf die Quelltextstellen - wie Sie sie ausbessern
würden.
Stellen Sie einen klaren Bezug Ihrer Anmerkungen zum Quellcode her,
indem Sie für jede Anmerkung den Dateinamen, die Anfangs- und die
Endzeile angeben.
Beschreiben Sie kurz aus Ihrer Sicht Ihre "Lessons Learned" in diesem
Projekt und welche Erfahrungen Sie mit welchen Werkzeugen gemacht
haben. Interessant wäre auch, welche Art Werkzeugunterstützung Sie
sich noch für Ihre Aufgabe gewünscht hätten.
Sie können hierzu in Zweiergruppen arbeiten.
Werkzeuge
Sie können die Klonerkennung und Metrikerhebung des
Bauhaus-Systems verwenden. Sie können aber natürlich auch jedes
andere Werkzeug heranziehen und selbstredend ganz manuell vorgehen.
Bauhaus erhalten Sie über Rainer Koschke.
Vorberechnete Informationen über Weltab
Um Ihnen Arbeit abzunehmen, haben wir einige Informationen mit den
Bauhaus-Werkzeugen für Sie vorberechnet, die Sie in dem
Weltab-Archiv finden:
- clones.baxter.cpf: Klonliste nach Baxter (im Clone-Pair-Format (CPF);
visualisierbar mit Emacs und dem CPF-Emacs-Mode)
- clones.baker.cpf: Klonliste nach Baker (im Clone-Pair-Format;
visualisierbar mit Emacs und dem CPF-Emacs-Mode)
- weltab.csv: Metriken (Lines of Code, Halstead, McCabe und
maximale Schachtelungstiefe pro Funktion) als Comma-Separated-Values
- LOG: enthält das Protokoll der Übersetzung mit Bauhaus; darin
findet man auch alle Compiler-Warnungen zu unbenutzten Deklarationen
etc.
Sie können damit die Aufgabe angehen, ohne tatsächlich die Werkzeuge
installieren zu müssen.
Emacs-Mode für CPF (Visualisierung von Klonen)
Hier können Sie sich den Emacs-Modus für die Visualisierung der
Klonpaare in Emacs herunterladen. Bitte
beachten Sie die Installationshinweise in dieser Datei.
Bewertungskriterien
Die folgenden Bewertungskriterien werden wir für die Benotung Ihrer
Abgabe anlegen:
- Vollständigkeit: Werden Aussagen zu allen geforderten Aspekten gemacht
(Schwachstelle, mögliches Refactoring, Begründung, Vorgehen)?
- Umfang: Wurden die wesentlichen Schwachstellen identifiziert?
- Granularität: Erfolgen die Angaben in ausreichendem Detail?
- Systematik: Sind Sie systematisch vorgegangen?
- Konsistenz: Sind die gemachten Aussagen konsistent zueinander?
- Reflexion: Wurden die gemachten Erfahrungen ausreichend reflektiert (Lessons Learned)
- Termintreue: Wurde die Aufgabe fristgerecht abgegeben?
- Äußere Form: Ist Ihre Abgabe verständlich und lesbar sowie frei
von Rechtschreibfehlern? Ist der Bezug zwischen Anmerkungen
und Quellcode klar? Sind etwaige Tabellen und Grafiken lesbar
und klar verständlich?
Bonus-Punkte werden für die selbstständige Suche nach alternativen
Werkzeugen und besonders kreatives Vorgehen vergeben.
Weltab
Die Geschichte von Weltab wird in diesem Artikel
beschrieben.
Hier können Sie die Sourcen von Weltab herunterladen (das Archiv
enthält neben den Sourcen auch alle von den Bauhaus-Werkzeugen
generierten Dateien, wie z.B. die Zwischendarstellungen IML und RFG
sowie die Metrikendateien und die Klonlisten):
Sourcen + Bauhaus-Dateien
Das Archiv enthält ein angepasstes Makefiles:
- "make" übersetzt Weltab nach IML, dem Bauhaus-Zwischenformat (ein
AST). Das Resultat ist die Datei 'weltab', die jedoch nicht
ausführbar ist.
- "make bauhaus" generiert alle weiteren Daten (den RFG, die
Metriken und die Klonlisten)
Weltab besteht aus einer Reihe von einzeln ausführbaren
Programmen. Für die Gesamtanalyse von Weltab sind alle Programme mit
Bauhaus zu einem Gesamtsystem gelinkt worden. Die ursprünglichen
main-Funktionen wurden zu diesem Zweck umbenannt in XXX_main für jede
Datei XXX, die eine main-Funktion enthält. Außerdem wurde eine
künstliche main-Funktion in bauhaus.c hinzugefügt, die alle anderen
eigentlichen main-Funktionen aufruft. Auf diese Weise kann man auf
einfache Weise toten Code finden, indem man alle von main aus nicht
erreichbaren Deklarationen identifiziert.
Beachten Sie bitte, dass Bauhaus den normalen Übersetzungsprozess
simuliert und damit Dateien mit der Endung .o sowie die
Datei weltab anlegt. Diese Dateien enthalten jedoch
Programmrepräsentationen in Bauhaus-Formaten.
Die folgenden Views sind bereits vorberechnet und im RFG enthalten
(die Default-Views sind im Handbuch beschrieben):
- Clones (Baxter): Klone, wie sie mit der Technik von Baxter
gefunden wurden
- Clones (Baker): Klone, wie sie mit der Technik von Baker
gefunden wurden
- BASE CYCLES: alle Zyklen in BASE
- Call Dominance Tree: Dominanzbaum für CALL
- BASE Dominance Tree: Dominanzbaum für BASE
- LIFTED FILE: Kanten aus BASE geliftet in FILE
Seite erstellt von
Rainer Koschke
WS 07/08 $