Promotionsvorhaben

Die Präprozessor-Problematik im Reverse Engineering und beim Programmverstehen

Name
Volker Riediger
Status
Abgeschlossen
Abschluss der Promotion
Erstbetreuer*in
Prof. Dr. Jürgen Ebert
Gutachter*in 2
Prof. Dr. Rainer Koschke
Der Einsatz von Präprozessoren in Programmiersprachen stellt ein bedeutendes Problem in der Softwaretechnik dar. Durch textuelle Transformationen, durch die Inklusion externer Quelltexte und durch tief verschachtelte komplexe Bedingungen wird das Begreifen von Zusammenhängen und die Inspektion bestehender Systeme erschwert. Detailliertes Verständnis bestehender Software ist jedoch die Voraussetzung nahezu aller Aktivitäten im Software-Lebenszyklus: Implementation, Test, Wartung, Pflege und Weiterentwicklung von Softwaresystemen erfordern die Analyse von Quelltexten in Gegenwart von Präprozessor-Anweisungen. Die Präprozessor-Problematik wird damit zu einer wesentlichen Fragestellung im Reverse Engineering und beim Programmverstehen. Bei einer bisher nur unscharfen Präprozessor-Terminologie schafft diese Arbeit zunächste eine begriffliche Grundlage zur Diskussion der Präprozessor-Problematik. Der Fokus im präprozessor-bezogenen Reverse Engineering lag bisher lediglich auf dem C-Präprozessor. Andere weit verbreitete Programmiersprachen blieben unberücksichtigt. In dieser Arbeit werden die Präprozessoren der Sprachen C/C++, COBOL und PL/I vergleichend untersucht und hinsichtlich ihrer Fähigkeiten zur Manipulation des Präprozessor-Input in einen gemeinsamen Rahmen gestellt. Zahlreiche Programmbeispiele illustrieren die durch Präprozessoren induzierten Probleme im Reverse Engineering und beim Programmverstehen. Das Verständnis für die Problemkreise der Textersetzung, der Datei-Inklusion und der Einflüsse der Systemumgebung wird damit vertieft und die Notwendigkeit einer Werkzeugunterstützung wird motiviert. Mit einem sprachunabhängigen Repository-Schema wird ein Rahmen für die Repräsentation von Präprozessor-Fakten entwickelt. Dieses Schema erlaubt eine von der konkreten Programmiersprache und deren speziellen Verarbeitungsregeln unabhängige Repräsentation von Präprozessor-Aktionen in Fold-Graphen. Schließlich werden aufbauend auf diesem Repository-Schema graphbasierte Algorithmen und Werkzeuge realisiert, die in der generischen Umgebung zum Programmverstehen GUPRO die Kluft zwischen Präprozessor-Input und Präprozessor-Output überbrücken. Der von der GUPRO-Umgebung unabhängige Fold-Graph-Viewer ermöglicht die interaktive Analyse, Visualisierung und Erkundung von Programmen in Gegenwart von Präprozessor-Anweisungen.