35
Mustersuche in Quellcode Komponentenbasierte Softwareentwicklung 13.07.2005 Peter Schübel

Mustersuche in Quellcodestreitdf/KBSE/StudVortraege/Schuebel.… · – C++, C#, Corba IDL, Java, VisualBasic 6/.NET Entwurf mittels Design Patterns Synchronhaltung Quellcode

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 1

    Mustersuche in Quellcode

    Komponentenbasierte Softwareentwicklung

    13.07.2005

    Peter Schübel

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 2

    Gliederung1. Vorstellung des Projekts „InPulse“2. Design Patterns

    1. Idee2. Beispiele

    3. Referenzsystem „World Simulator“4. Mustersuche

    1. Suchalgorithmen2. Werkzeuge / Schnittstellen3. Implementierungen4. Ergebnisse

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 3

    InPulse – Projekt (1)● = Integrative Pattern- und UML-orientierte Lern-

    und System – Entwicklungsumgebung

    ● Aufgabe: Automatische Erkennung der verwendeten Design Patterns in existierendem Quellcode

    ● Ziel:– Besseres Verständnis– Vereinfachtes Refactoring

    [1]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 4

    InPulse – Projekt (2)● Laufzeit: 01.10.2003 – 30.09.2005● Beteiligte Institutionen / Firmen:– BMBF– TU Ilmenau, OFFIS Oldenburg– Daimler-Chrysler, Ulm– eXXellent solution GmbH Ulm– transit GmbH, Ilmenau– Phaidros Software AG Ilmenau

    ● Umfang: 211 TEUR[1]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 5

    Design Patterns (1)● „...descriptions of communicating objects and

    classes that are customized to solve a general design problem in a particular context.“ (Gamma...)

    ● Fertige Lösungsansätze für häufige Probleme● Erleichtern Verständnis von Quellcode und die

    Kommunikation im Softwareentwicklungsprozess

    ● Gamma, Helm, Johnson, Vlissides (GOF): Festlegung von 23 objekt-orientierten Entwurfsmustern

    [2]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 6

    Design Patterns (2)● Dekorierer (Decorator)– Dynamisches Hinzufügen / Entfernen von

    Funktionalität zu Objekten– Häufige Verwendung, wenn Ableitung

    unpraktisch ist (viele Kombinationen)

    [2]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 7

    Design Patterns (3)

    [2]

    ● Dekorierer – Beispiel: ScrolledWindow

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 8

    Design Patterns (4)● Kompositum (Composite)– Baumstrukturen (Teil-Ganzes-Hierarchien)– Einzelne Objekte und Kompositionen werden

    gleichbehandelt

    [2]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 9

    Design Patterns (5)● Kompositum – Beispiel: Vektorgrafik

    [2]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 10

    Referenzsystem „World Simulator“● Implementierung aller 23

    „GoF“ Design Patterns● Dient als Referenz für

    Suchalgorithmen

    ● Implementiert keine sinnvolle Funktionalität

    ● „reale“ Verwendungen von Design Pattern sind oft Variationen der „ursprünglichen“ DPs

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 11

    Mustersuche (1)● 4 Diplom-/Studienarbeiten● Allg. Methodik: Suche nach Schlüsselmerkmalen– Definition von notwendigen Merkmalen– Definition von verbotenen Merkmalen– Nutzung einer API, die diese Merkmale liefert– Möglichst allgemeingültige Suchalgorithmen

    ● Qualitätsmaße:– Recall: % der existierenden Muster gefunden– Precision: % der gefundenen Muster korrekt

    [3]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 12

    Mustersuche (2)

    [3]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 13

    Suchalgorithmus Dekorierer● für jede Klasse i (Dekorierer) do

    – gibt es 1-zu-1-Aggregation zu einer Klasse j (Komponente)?– ja: ist Klasse j Oberklasse von Klasse i?– ja: hat Klasse i Unterklasse k (konkreter Dekorierer)?– ja: für alle Methoden L von Klasse k do

    ● gibt es ein Aufruf auf Klasse i gefolgt von lokalem Methodenaufruf?

    ● ja: enthält die in Methode L aufgerufene Methode der Klasse i einen Aufruf der gleichnamigen Methode der Klasse j?

    ● ja: Muster gefunden– od

    ● od[3]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 14

    Suchalgorithmus Kompositum● für jede Klasse i (Kompositum) do

    – besitzt Klasse i eine 1-zu-n-Aggregation zu einer Oberklasse(Komponente)? ja: weiter

    – besitzt Klasse i Unterklassen? nein: Muster gefunden– ja: für jede Unterklasse k (spez. Kompositum) von Klasse i do

    ● für jede Methode L der Klasse k do– ruft Methode L eine Methode der Klasse i auf, und folgt

    dem ein lokaler Methodenaufruf?– nein: weiter, ja: Abbruch

    ● od– od– Muster gefunden

    ● od [3]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 15

    Werkzeuge / Schnittstellen● Entwicklung in Java unter Eclipse● UML-Design Toolkit „together“– UML-Diagramme erstellen– Sourcecode-Generierung

    ● Java-Archiv als PlugIn nutzbar

    ● Auffinden der Schlüsselmerkmale:– OpenAPI von together– „chorda“-API von eXXellent

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 16

    together (1)

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 17

    together (2)● Entwicklungsumgebung– C++, C#, Corba IDL, Java, VisualBasic 6/.NET

    ● Entwurf mittels Design Patterns● Synchronhaltung Quellcode UML-Diagramme

    ➔ Reverse Engineering● OpenAPI liefert Daten aus Diagrammen, SourceCode

    & Kommentaren– IDE (Ausgabe)– Read-Write Interface RWI– SourceCode Interface SCI (sprachenabhängig!) [7]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 18

    together (3)• Probleme:

    — Abhängigkeit von proprietärer API— Schlechte Performance (Java)— Virtualität, Klassennamen bei Zeigern— OpenAPI prüft nur Header-Dateien— Klassenstruktur muss separat gespeichert

    werden (Hashtables)— Togethersoft von Borland aufgekauft:• Neues Datenmodell, veränderte API, Bugs...

    — Kein Debuggen der PlugIns möglich

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 19

    „chorda“-API (1)● Basiert auf Meta Object Facility (OMG)– abstrakte Sprache und Framework zur Verwaltung

    technologieneutraler Metamodelle– MOF (Meta-meta) ==> UML (Meta) ==> UML-

    Modell ==> Computer System● Allgemeines, abstraktes Modell für Quellcode● Spezialisierung: Definition konkreter Sprachelemente● Geplant als eigenständige unabhängige API– Bisher als PlugIn für together realisiert– Portierung für andere IDE's (Eclipse)

    [4, 5]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 20

    „chorda“-API (2)

    [6]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 21

    „chorda“-API (3)

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 22

    „chorda“-API (4)● Probleme– Zugriff auf Daten oft sehr umständlich– Kardinalität nicht direkt abfragbar– API unvollständig

    ● Bisher nur konkretes Modell für Java● Expressions teilweise nicht implementiert

    – Dokumentation mangelhaft– Quellcode nicht verfügbar– Keine Debug-Version

    ➔Nur per Log-Ausgaben nachvollziehbar

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 23

    Bisherige Implementierung (1)● Nutzung der OpenAPI● Speicherung / Ausgabe der Suchresultate● Abstrakte Klasse „FindPattern“– häufig benötigte Methoden:

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 24

    Bisherige Implementierung (2)● Interne Repräsentation in Hashtables:

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 25

    Neue Implementierung● Nutzung der „chorda“-API● Speicherung / Ausgabe der

    Suchresultate● Abstrakte Klasse „FindPattern“– häufig benötigte Methoden

    ● Interne Repräsentation durch chorda-Baum

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 26

    FindPattern● getStatements(IModelElement methodNode)– Allgemeines Statement? => Stringvergleich

    /* if(children[j].getModelElementType().equals(IModelElementJava.STATEMENT_EXPRESSION)) {

    v_statements.addElement(children[j]); }*/if(children[j].getModelElementType().equals("javaExpression")){

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 27

    Find_Decorator (1)● für jede Klasse i (Dekorierer) do

    – gibt es 1-zu-1-Aggregation zu einer Klasse j (Komponente)?– ja: ist Klasse j Oberklasse von Klasse i?– ja: für jede Klasse j do

    ● ja: hat Klasse i Unterklasse k (konkreter Dekorierer)?● ja: für alle Methoden L von Klasse k do

    – gibt es einen Aufruf auf Klasse i gefolgt von lokalem Methodenaufruf?

    – ja: enthält die in Methode L aufgerufene Methode der Klasse i einen Aufruf der gleichnamigen Methode der Klasse j?

    – ja: Muster gefunden● od

    – od● od [3]

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 28

    Find_Decorator (2)● Ergänzungen:– Mehrere ConcreteDecorator werden erkannt und

    gespeichert– Test auf Methodenaufrufe wird für alle

    aggregierten Oberklassen durchgeführt

    ● Probleme:– Kardinalität kann nicht direkt bestimmt werden

    if(!(attribute.getSpecification().getSpecificationElementType().equals(ISpecificationElementJava.ARRAY)))

    {...

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 29

    Find_Composite (1)● für jede Klasse i (Kompositum) do

    – besitzt Klasse i eine 1-zu-n-Aggregation zu einer Oberklasse j(Komponente)?

    – ja: für jede Klasse j do● besitzt Klasse i Unterklassen? nein: Muster gefunden● ja: für jede Unterklasse k (spz. Kompositum) von Klasse i do

    – für jede Methode L der Klasse j do● ruft Methode L eine Methode der Klasse i auf, und

    folgt dem ein lokaler Methodenaufruf?● nein: weiter, ja: Abbruch

    – od● od; Muster gefunden

    – od● od

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 30

    Find_Composite (2)● Ergänzungen:– Test auf Methodenaufrufe wird für alle

    aggregierten Oberklassen durchgeführt

    ● Probleme:– Kardinalität kann nicht direkt bestimmt werden➔Akzeptieren aller Aggregationen

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 31

    InPulse Plug-In (1)● Starte Suche...

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 32

    InPulse Plug-In (2)● Ergebnisse:

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 33

    Ergebnisse● Qualitätsmaße:– Recall 100%– Precision 100%

    ● Angaben zu „realen“ Projekten?● Anzahl der gefundenen Muster:

    [8]

    Projekt/Muster Dekorierer KompositumBsp. Projekt 1 (1) 1 (1)WorldSimulator 0 (1) 1 (0)

    ➔ geerbte Methode wurde nicht berücksichtigt?

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 34

    Quellenangaben[1] http://www.tu-ilmenau.de/fakia/Drittmittelprojekte

    [2] Gamma, et al: Design Patterns. Elements Of ReUsable Object-Oriented Software, 1995.

    [3] Naumann, Sebastian: Reverse-Engineering von Entwurfs-mustern, 2001. TU Ilmenau. Diplomarbeit.

    [4] http://www.software-kompetenz.de/?7116

    [5] OMG: Meta Object Facility Specification, 2002. Ver 1.4

    [6] chorda-Dokumentation: sprachabbildung.pdf

    [7] Herbig, Jens: Reverse Engineering von Entwurfsmustern, 2003. TU Ilmenau. Studienarbeit

    [8] Seidel, Antje: Analyse von Algorithmen zur automatisierten Mustererkennung, 2004. TU Ilmenau. Diplomarbeit.

  • 13.07.05 Peter Schübel - Mustersuche in Quellcode 35

    Vielen Dankfür Ihre

    Aufmerksamkeit!