Generierung und Erweiterung des Resource Flow Graph f ... Generierung und Erweiterung des Resource

  • View
    213

  • Download
    0

Embed Size (px)

Text of Generierung und Erweiterung des Resource Flow Graph f ... Generierung und Erweiterung des Resource

  • Generierung und Erweiterung des Resource

    Flow Graph für Visual Basic 6 Programme

    Diplomarbeit

    Jan Harder

    Matrikelnummer: 1358811

    11.12.2006

    Universität Bremen

    Fachbereich Mathematik / Informatik Studiengang Informatik

    1. Gutachter: Prof. Dr. Rainer Koschke 2. Gutachter: Dr. Berthold Ho�mann

  • Erklärung

    Ich versichere, die Diplomarbeit ohne fremde Hilfe angefertigt zu haben. Ich habe keine an- deren als die angegebenen Quellen und Hilfsmittel benutzt. Alle Stellen, die wörtlich oder sinngemäÿ aus Verö�entlichungen entnommen sind, sind als solche kenntlich gemacht.

    Bremen, den 11.12.2006

    . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (Jan Harder)

    ii Generierung des RFG für VB6-Programme

  • INHALTSVERZEICHNIS

    1 Einleitung 1

    1.1 Das Bauhaus-Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

    1.2 Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

    1.2.1 Konkrete Ziele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.3 Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1.3.1 Begri�e . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

    1.3.2 Genus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2 Grundlagen 7

    2.1 Visual Basic 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.1.1 Syntaxbeispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    2.1.2 Programmaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    2.1.2.1 Prozedurale Programmierung . . . . . . . . . . . . . . . . . . 9

    2.1.2.2 Objektorientierte Programmierung . . . . . . . . . . . . . . . 10

    2.1.3 Besonderheiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2.1.4 Verfügbare Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . 16

    2.1.4.1 Grammatiken . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    2.1.4.2 Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.2 COM - Das Component Object Model . . . . . . . . . . . . . . . . . . . . . . 19

    2.2.1 Spätes Binden in COM . . . . . . . . . . . . . . . . . . . . . . . . . . 19

    2.2.2 Typbibliotheken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    2.3 Metamodelle zur Programmrepräsentation . . . . . . . . . . . . . . . . . . . . 23

    2.3.1 Der Resource Flow Graph . . . . . . . . . . . . . . . . . . . . . . . . . 23

    2.3.2 Das FAMIX-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

    2.3.3 Das Dagstuhl Middle Metamodel . . . . . . . . . . . . . . . . . . . . . 26

    2.4 Software-Metriken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    2.4.1 Lines of Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    2.4.2 Halstead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

    2.4.3 Zyklomatische Komplexität . . . . . . . . . . . . . . . . . . . . . . . . 30

    2.4.4 Anforderungen an die Analyse von Visual Basic 6 . . . . . . . . . . . . 32

    3 Konzeption eines RFG-Schemas für Visual Basic 6 33

    iii

  • Inhaltsverzeichnis

    3.1 Existierende RFG-Schemata . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.2 Schema für Visual Basic 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

    3.2.1 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

    3.2.2 Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    3.2.3 Variablen und Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . 39

    3.2.4 Routinen und Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    3.2.5 Propertys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    3.2.6 Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    3.2.7 Unbekannte Symbole . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    3.2.8 Visuell erstellte Programmanteile . . . . . . . . . . . . . . . . . . . . . 48

    3.2.9 Das vollständige RFG-Schema für Visual Basic 6 . . . . . . . . . . . . 49

    3.2.10 Konventionen zur Grapherstellung . . . . . . . . . . . . . . . . . . . . 49

    3.3 Anforderungen an die Analyse von Visual Basic 6 . . . . . . . . . . . . . . . . 50

    4 Analyse von Visual Basic 6 53

    4.1 Quelltextanalyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    4.1.1 Sprachanalyse mit unvollständigem Wissen . . . . . . . . . . . . . . . 55

    4.1.1.1 Partielle Analysemethoden . . . . . . . . . . . . . . . . . . . 55

    4.1.1.2 Rekonstruktion von Grammatiken . . . . . . . . . . . . . . . 57

    4.1.2 Vorgehensweise in dieser Arbeit . . . . . . . . . . . . . . . . . . . . . . 59

    4.1.2.1 Parsergenerator . . . . . . . . . . . . . . . . . . . . . . . . . 59

    4.1.2.2 Transformation der Grammatiken zu ANTLR . . . . . . . . . 60

    4.1.2.3 Testbasierte Verfeinerung . . . . . . . . . . . . . . . . . . . . 61

    4.1.2.4 Detaillierte Übersicht der VB6-Analyse . . . . . . . . . . . . 61

    4.1.3 Lexikalische Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

    4.1.3.1 Bezeichner und Schlüsselwörter . . . . . . . . . . . . . . . . . 64

    4.1.3.2 Leerzeichen und Zeilenumbrüche . . . . . . . . . . . . . . . . 66

    4.1.3.3 For-Next-Schleifen . . . . . . . . . . . . . . . . . . . . . . . . 68

    4.1.4 Syntaktische Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

    4.1.4.1 Unterscheidung von Bezeichnern und Schlüsselwörtern . . . . 70

    4.1.4.2 Quali�zierte Bezeichner . . . . . . . . . . . . . . . . . . . . . 73

    4.1.4.3 Prozedurargumente . . . . . . . . . . . . . . . . . . . . . . . 74

    4.2 Analyse von COM-Bibliotheken . . . . . . . . . . . . . . . . . . . . . . . . . . 77

    4.2.1 Auslesen von COM-Bibliotheken . . . . . . . . . . . . . . . . . . . . . 77

    4.2.2 Zwischenformat zur Übertragung der Schnittstellende�nitionen . . . . 78

    4.3 Semantische Analyse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80

    4.3.1 Geltungsbereiche und Namensräume . . . . . . . . . . . . . . . . . . . 80

    4.3.2 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

    iv Generierung des RFG für VB6-Programme

  • Inhaltsverzeichnis

    4.3.3 Analysevorgang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

    4.3.3.1 Sammeln der Symbolinformationen . . . . . . . . . . . . . . . 91

    4.3.3.2 Au�ösen von Typen in der Symboltabelle . . . . . . . . . . . 91

    4.3.3.3 Au�ösen von Bezeichnern im Quelltext . . . . . . . . . . . . 92

    4.3.4 Metriken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    4.3.4.1 Lines of Code . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    4.3.4.2 McCabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

    4.3.4.3 Halstead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

    4.3.4.4 Zusätzliche Metriken . . . . . . . . . . . . . . . . . . . . . . . 99

    5 Generierung des RFG 101

    5.1 Ada-C++ Interfacing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101

    5.2 Vorgehen bei der RFG-Generierung . . . . . . . . . . . . . . . . . . . . . . . . 102

    5.3 Sichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    5.4 Linken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103

    6 Ergebnisse und Zusammenfassung 107

    6.1 Bewertung der Ergebnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107

    6.2 Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

    6.3 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

    A Grammatiken 115

    A.1 Visual Basic 6 � Lexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    A.2 Visual Basic 6 �Parser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    A.3 Austauschformat für COM-Schnittstellen � Lexer . . . . . . . . . . . . . . . . 137

    A.4 Austauschformat für COM-Schnittstellen � Parser . . . . . . . . . . . . . . . . 138

    Abbildungsverzeichnis 143

    Listings 145

    Literaturverzeichnis 149

    Jan Harder v

  • Inhaltsverzeichnis

    vi Generierung des RFG für VB6-Programme

  • KAPITEL 1

    Einleitung

    Visual Basic ist eine populäre Sprache zum Erstellen von Windowsapplikationen. Nach An- gaben des Herstellers Microsoft wurde allein die fünfte Version bis Anfang 1998 mehr als eine Million Mal lizenziert.1 Dementsprechend groÿ dürfte auch die Menge von Applikationen sein, die über die Jahre in dieser Sprache realisiert wurden.

    Im Zuge der Einführung des .NET-Frameworks, einer neuen, einheitlichen und objektorien- tierten Plattform und Laufzeitumgebung von Microsoft, wurde Visual Basic jedoch so grund- legend verändert, um der neuen Windowswelt gerecht zu werden, dass die Abwärtskompati- bilität zu den früheren Versionen verloren ging. Tiefgreifende Veränderungen an der Syntax, aber vor allem auch der Semantik der Sprache machen eine direkte Migration v