Diplomarbeit, 2008
164 Seiten, Note: 1,5
1. Einleitung
1.1. Motivation
1.2. Ziel der Diplomarbeit
2. Grundlagen
2.1. Program Slicing
2.1.1. Statisches Slicen
2.1.2. Datenfluss der Slicing-Dienste
2.2. TGraph
2.2.1. TGraph Eigenschaften
2.2.2. Schema
2.3. Referenzschema
3. Entwicklung eines Referenzschemas für Programmiersprachen
3.1. Entwicklung des Referenzschemas
3.2. Erweiterung des EL-Schemas zum Referenzschema
3.3. Abbildung des C-Schemas auf das Referenzschema
3.3.1. Direkte Abbildungen vom RePSS auf das C-Schema
3.3.2. Klassen des C-Schemas und von RePSS ohne Abbildung
3.3.3. Unterschiede zwischen dem C-Schema und RePSS
3.3.4. Kantenklassen im C-Schema und in RePSS
3.4. Datenmodelle des C-Schemas
3.4.1. Abstrakter Syntaxgraph (ASG) für C
3.4.2. Erweiterter Kontrollflussgraph (ACFG) für C
3.4.3. Points-to-Graph (PG) für C
3.4.4. Aufrufgraph (CG) und erweiterter Aufrufgraph (ECG) für C
3.4.5. Erweiterter Systemabhängigkeitsgraph (ESDG) für C
3.5. Fazit zu RePSS
4. Definition von RePST
4.1. Anwendungsfälle
4.2. Anforderungen
4.2.1. Funktionale Anforderungen
4.2.2. Technische Anforderungen
4.2.3. Anforderungen an die Architektur
4.2.4. Qualitätsanforderungen
4.2.5. Anforderungen an die Benutzerschnittstelle
4.2.6. Anforderungen an die Dokumentation
5. Architektur
5.1. Architektur-Muster
5.2. Architektur Eigenschaften von RePST
5.3. Architektur der Komponente ProgramSlicingTool
5.4. Architektur der Komponente ProgramPreprocessor
5.5. Architektur der Komponente ProgramSlicer
5.6. Konfiguration von RePST
5.7. Verwendung gemeinsamer Komponenten
6. Realisierung der Komponenten
6.1. ProgramSlicingTool
6.2. ProgramPreprocessor
6.3. ASGComputer
6.4. ACFGComputer
6.5. PGComputer
6.6. ECGComputer
6.7. CGComputer
6.8. DefUseInfComputer
6.9. ESDGComputer
6.10. BasicESDGComputer
6.11. IntMetEdgesComputer
6.12. ConDepEdgesComputer
6.13. DataFlowEdgesComputer
6.14. SumEdgesComputer
6.15. ProgramSlicer
6.16. ESDGMarker
6.17. StaticBackwardSliceComputer
6.18. StaticForwardSliceComputer
6.19. Weitere Slice- und ChopComputer
6.20. ESDGToCodeConverter
6.21. ProgramSlicingComponent
6.22. SharedComponent
6.23. GReQLAdapter
7. Implementation
7.1. TGraph-Anfragen
7.1.1. Anfragen mit GReQL2
7.1.2. Algorithmen mit dem RePSS-API
7.1.3. Bewertung der TGraph-Anfragen
7.1.4. GReQL2-Nutzung in RePST
7.2. Unittests gegen ein C-Testprogramm
7.2.1. Testprogramm
7.2.2. ASGComputerForCTest
7.2.3. ACFGComputerForCTest
7.2.4. PGComputerForCTest
7.2.5. CGComputerForCTest
7.2.6. DefUseInfComputerForCTest
7.2.7. BasicESDGComputerForCTest
7.2.8. IntMetEdgesComputerForCTest
7.2.9. ConDepEdgesComputerForCTest
7.2.10. DataFlowEdgesComputerForCTest
7.2.11. SumEdgesComputerForCTest
7.2.12. ESDGMarkerForCTest
7.2.13. StaticBackwardSliceComputerForCTest
7.2.14. StaticForwardSliceComputerForCTest
7.2.15. ESDGToCodeConverterForCTest
7.3. Ausnahmebehandlung
7.3.1. Exception-Hierarchie in RePST
7.3.2. Mögliche Auslöser der ProgramSlicingToolExceptions
7.4. Installation von RePST
7.5. Die Benutzungsoberfläche von RePST
7.6. Steuerung von RePST per Konsole
7.7. API von RePST
8. Fazit
8.1. Bewertung
8.1.1. Bewertung: Funktionale Anforderungen
8.1.2. Bewertung: Technische Anforderungen
8.1.3. Bewertung: Anforderungen an die Architektur
8.1.4. Bewertung: Qualitätsanforderungen
8.1.5. Bewertung: Anforderungen an die Benutzerschnittstelle
8.1.6. Bewertung: Anforderungen an die Dokumentation
8.2. Weiterentwicklung
8.2.1. Program Slicing von Quellcode in anderen Programmiersprachen
8.2.2. Alternative Slicing- und Chopping-Verfahren
8.2.3. PGComputer
8.2.4. Implementierung der abstrakten RePST-Komponenten
8.2.5. Program Slicing für C-Programme
8.2.6. Integration in fremde Umgebungen
8.3. Zusammenfassung
Ziel dieser Arbeit ist die Entwicklung und Implementierung eines komponentenbasierten, adaptierbaren Referenztools (RePST) für das Program Slicing nach einem spezifischen Dienstmodell. Das Tool soll so allgemein gestaltet sein, dass Program Slicing für eine Vielzahl von Programmiersprachen durch die Definition entsprechender Referenzschemata ermöglicht wird, wobei das Slicen von C-Quellcode exemplarisch realisiert wird.
2.1. Program Slicing
Program Slicing wurde 1979 in Weisers Dissertation [Wei79] eingeführt. Die deutsche Übersetzung „ein Programm in Scheiben schneiden“ [Sch07] beschreibt, was Programmierer laut Weisers Studie [Wei82] im Kopf tun, wenn sie ein Programm debuggen. So zerlegt oder schneidet der Programmierer den Quellcode in kleinere Teile, die nur die relevanten Stellen des Codes enthalten. Diese Teile können dann auch als Scheiben des Quellcodes betrachtet werden.
Die Reduzierung des Quellcodes auf die relevanten Stellen geschieht beim Program Slicing in Abhängigkeit von einem Slicing-Kriterium. Dieses Kriterium variiert je nach angewendetem Slicing-Verfahren. Im ursprünglichen Verfahren besteht es jedoch aus einer bestimmten Stelle im Quellcode und einer Teilmenge aller Variablen des Quellcodes.
Die hier implementierten statischen Slicing-Verfahren verwenden ein Slicing-Kriterium SliceCrit = , wobei i für eine Anweisung im Quellcode steht und X eine Variablenmenge festlegt. Eine Slice ist nun ein Ausschnitt des Quellcodes, welche aus Streichungen von Anweisungen im ursprünglichen Quellcode hervorgeht. Diese Streichungen basieren auf der Traversierung des erweiterten Systemabhängigkeitsgraphen (ESDG). Beim Rückwärtsslicen wird ausgehend von der Anweisung i rückwärts traversiert; analog dazu wird beim Vorwärtsslicen vorwärts traversiert. Während der Traversierung werden alle Anweisungen gestrichen, die keine Abhängigkeiten zu den Variablen in der Menge X besitzen.
1. Einleitung: Beschreibt die Motivation für komponentenbasierte Program Slicing Werkzeuge und definiert das Ziel der Arbeit, ein entsprechendes Dienstmodell zu implementieren.
2. Grundlagen: Erläutert die theoretischen Konzepte von Program Slicing, TGraphen und die Definition von Referenzschemata als Basis für die Arbeit.
3. Entwicklung eines Referenzschemas für Programmiersprachen: Detailliert die Erweiterung eines existierenden Schemas zu einem allgemeinen Referenzschema (RePSS) und die Abbildung des C-Schemas darauf.
4. Definition von RePST: Beschreibt die Definitionsphase mit Anforderungsanalyse, Anwendungsfällen und Kategorisierung der funktionalen sowie technischen Anforderungen an das System.
5. Architektur: Stellt das Architektur-Muster "Call-Return" sowie die komponentenbasierte Architektur von RePST und deren Konfiguration vor.
6. Realisierung der Komponenten: Erläutert detailliert die Implementierung der einzelnen Komponenten wie ASGComputer, ACFGComputer und anderer Dienste zur Realisierung des Slicing-Prozesses.
7. Implementation: Beschreibt die technische Umsetzung, den Einsatz von GReQL2-Anfragen, Unittests gegen ein C-Testprogramm und die Schnittstellen des Systems.
8. Fazit: Bewertet die erreichten Ergebnisse anhand der Anforderungen und skizziert Möglichkeiten für zukünftige Weiterentwicklungen.
Program Slicing, Referenzschema, RePST, RePSS, Komponentenbasierte Architektur, C-Programmierung, Systemabhängigkeitsgraph, TGraph, GReQL2, Softwaretechnik, Dienstmodell, statisches Slicing, Datenflussanalyse, Compilerbautechniken
Die Arbeit befasst sich mit der Entwicklung und Implementierung eines komponentenbasierten Referenztools für das Program Slicing, welches auf einem flexiblen Dienstmodell basiert.
Zentrale Themen sind die Entwicklung eines allgemeinen Referenzschemas für Programmiersprachen, eine komponentenbasierte Software-Architektur und die beispielhafte Anpassung dieser Konzepte für die Programmiersprache C.
Das primäre Ziel ist es, ein Tool (RePST) zu schaffen, das Program Slicing für verschiedene Sprachen ermöglicht, indem es die gemeinsame Funktionalität in einem Referenzschema (RePSS) kapselt und durch Spezialisierung für spezifische Sprachen (wie C) erweiterbar macht.
Es werden Ansätze der komponentenbasierten Softwareentwicklung, Graphentechnologien zur Darstellung von Programmcode sowie formale Spezifikationen und Modellierungssprachen verwendet.
Der Hauptteil umfasst die Entwicklung des Referenzschemas, die detaillierte Architektur des Slicing-Tools, die Implementierung der einzelnen Softwarekomponenten und deren Validierung durch Unittests.
Die wichtigsten Begriffe sind Program Slicing, RePST, Referenzschema, Systemabhängigkeitsgraph (ESDG) und komponentenbasiertes Design.
Das System ist modular aufgebaut. Um eine neue Sprache zu unterstützen, muss lediglich eine Abbildung zwischen dem allgemeinen Referenzschema RePSS und dem spezifischen Schema der neuen Sprache erstellt und die entsprechenden Komponenten spezialisiert werden.
GReQL2 wurde gewählt, um Anfragen an die internen Graphen-Strukturen (TGraphen) effizient und formal fundiert zu formulieren, was eine präzise Informationsgewinnung für das Slicing ermöglicht.
Der GRIN Verlag hat sich seit 1998 auf die Veröffentlichung akademischer eBooks und Bücher spezialisiert. Der GRIN Verlag steht damit als erstes Unternehmen für User Generated Quality Content. Die Verlagsseiten GRIN.com, Hausarbeiten.de und Diplomarbeiten24 bieten für Hochschullehrer, Absolventen und Studenten die ideale Plattform, wissenschaftliche Texte wie Hausarbeiten, Referate, Bachelorarbeiten, Masterarbeiten, Diplomarbeiten, Dissertationen und wissenschaftliche Aufsätze einem breiten Publikum zu präsentieren.
Kostenfreie Veröffentlichung: Hausarbeit, Bachelorarbeit, Diplomarbeit, Dissertation, Masterarbeit, Interpretation oder Referat jetzt veröffentlichen!

