Symphony und das Hierarchische Reflexion Modell
Rainer Koschke und Daniel Simon
Universitat StuttgartInstitut fur Softwaretechnologie
Abt. Programmiersprachen und Compilerbau
WSR 2004
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Symphony Designebene
Target ViewpointsProblem Statement
process designer reconstructor
Source Viewpoints
stakeholders
actor in
data flowInformationInterpretation
Target ViewpointsMapping RulesProblem
StatementProblemElicitation
Source Viewpoints
KnowledgeInference
Library ofViewpoints
Refinement
ConceptDetermination
DataGathering
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Problem Elicitation — Hierarchisches Reflexion Modell
Ziele:
Architekturvalidierung von Compilern
hypothesengetriebene Architekturrekonstruktion
Erweiterung Reflexion Modell vonMurphy, Notkin, Sullivan, 1995
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Problem Elicitation — Hierarchisches Reflexion Modell
Ziele:
Architekturvalidierung von Compilern
hypothesengetriebene Architekturrekonstruktion
Erweiterung Reflexion Modell vonMurphy, Notkin, Sullivan, 1995
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Concept Determination
Useful Viewpoints:
Modulsichtkonzeptuelle SichtReflexion Modell Sicht
Target Viewpoint:
Kombination aus Modul und Reflexion Sichtspater: Modul und hierarchische Reflexion Sicht
Mapping Rules
Hypothetical Views: high-level Modulsicht
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Concept Determination
Useful Viewpoints:
Modulsichtkonzeptuelle SichtReflexion Modell Sicht
Target Viewpoint:
Kombination aus Modul und Reflexion Sichtspater: Modul und hierarchische Reflexion Sicht
Mapping Rules
Hypothetical Views: high-level Modulsicht
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Concept Determination
Useful Viewpoints:
Modulsichtkonzeptuelle SichtReflexion Modell Sicht
Target Viewpoint:
Kombination aus Modul und Reflexion Sichtspater: Modul und hierarchische Reflexion Sicht
Mapping Rules
Hypothetical Views: high-level Modulsicht
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Concept Determination
Useful Viewpoints:
Modulsichtkonzeptuelle SichtReflexion Modell Sicht
Target Viewpoint:
Kombination aus Modul und Reflexion Sichtspater: Modul und hierarchische Reflexion Sicht
Mapping Rules
Hypothetical Views: high-level Modulsicht
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Compiler — Logisch
AnalysisLexical
AnalysisSyntactic Semantic
AnalysisCodeGeneration
AST
SymbolTable
Optimization
Que
lltex
t
Cod
e
Lehrbucher, etwa Wilhelm/Maurer, Ubersetzerbau
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Compiler — Grobstruktur
referenced by all
referenced by all
references all
Control
AST2IL
Global Configuration
Front End Middle End
Initialization
references (first hypothesis)
Back End
Common
AST
IL
Shaw und Garlan, 1993Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Anwendung des Reflexion Modells
1 hypothetischesArchitekturmodell erstellen
2 Quellmodell extrahieren
3 Quellentitat auf konzeptuelleEntitaten abbilden
4 Reflexion Modell berechnen5 Verfeinern/korrigieren
hypothetisches ModellAbbildungQuellmodell
A B C<<ref>> <<ref>>
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Anwendung des Reflexion Modells
1 hypothetischesArchitekturmodell erstellen
2 Quellmodell extrahieren
3 Quellentitat auf konzeptuelleEntitaten abbilden
4 Reflexion Modell berechnen5 Verfeinern/korrigieren
hypothetisches ModellAbbildungQuellmodell
c1 c2b
A B
a
C
<<ref>>
<<ref>> <<ref>>
<<ref>>
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Anwendung des Reflexion Modells
1 hypothetischesArchitekturmodell erstellen
2 Quellmodell extrahieren
3 Quellentitat auf konzeptuelleEntitaten abbilden
4 Reflexion Modell berechnen5 Verfeinern/korrigieren
hypothetisches ModellAbbildungQuellmodell
c1 c2b
A B
a
C
<<maps−to>>
<<ref>>
<<ref>>
<<maps−to>>
<<ref>>
<<ref>>
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Anwendung des Reflexion Modells
1 hypothetischesArchitekturmodell erstellen
2 Quellmodell extrahieren
3 Quellentitat auf konzeptuelleEntitaten abbilden
4 Reflexion Modell berechnen5 Verfeinern/korrigieren
hypothetisches ModellAbbildungQuellmodell
c1 c2b
A B
a
C
<<maps−to>>
<<ref>>
<<ref>>
<<maps−to>>
<<ref>>
<<ref>>
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Anwendung des Reflexion Modells
1 hypothetischesArchitekturmodell erstellen
2 Quellmodell extrahieren
3 Quellentitat auf konzeptuelleEntitaten abbilden
4 Reflexion Modell berechnen5 Verfeinern/korrigieren
hypothetisches ModellAbbildungQuellmodell
c1 c2b
A B
a
C
<<maps−to>>
<<ref>>
<<ref>>
<<maps−to>>
<<ref>>
<<ref>>
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Reflexion
b
A B
a konkreteModulSicht
hypothetischeModulSicht
<<ref>>
<<ref>>
<<maps−to>>
Konvergenz
propagated-ref(A,B) ⇔ ∃(a, b ∈ M) : (ref(a, b)∧maps-to(a) = A∧maps-to(b) = B)
convergence(A,B) ⇔ ref(A,B) ∧ propagated-ref(A,B)
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Reflexion
b
A B
a konkreteModulSicht
hypothetischeModulSicht
a b
A B<<ref>>
<<maps−to>>
Abwesenheit
<<ref>>
<<ref>>
<<maps−to>>
Konvergenz
absence(A,B) ⇔ ref(A,B) ∧ ¬propagated-ref(A,B)
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Reflexion
b
A B
a a b
A B<<ref>>
<<maps−to>>
Abwesenheit
a b
A B
<<ref>>
<<maps−to>>
Divergenz
konkreteModulSicht
hypothetischeModulSicht
<<ref>>
<<ref>>
<<maps−to>>
Konvergenz
divergence(A,B) ⇔ ¬ref(A,B) ∧ propagated-ref(A,B)
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Compiler — Grobstruktur
referenced by all
referenced by all
references all
Control
AST2IL
Global Configuration
Front End Middle End
Initialization
references (first hypothesis)
Back End
Common
AST
IL
Shaw und Garlan, 1993
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Compiler — Feinstruktur
referenced by all
referenced by all
references all
Lexer
Parser
Control
Control Flow
Data Flow
Optimizers
Symbol Table
AST
IL
CFG
AST2IL
DescriptionTarget Machine
Code Generator
Peephole Optimizer
Back End
Error Handler Utilities
Common
Preprocessor
SemanticAnalysis
Global Configuration
Front End Middle End
Initialization
references (first hypothesis)
references (later refinement)
Ursprungliches Reflexion Modell hat keine Hierarchien.Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Hierarchisches Reflexion Modell
**
ba
maps−to(a) maps−to(b)
A B<<ref>>
HypothetischeModulsicht
KonkreteModulsicht
<<ref>>
Konvergenz
propagated-ref ↑(A,B) ⇔ ∃(a, b ∈ M) : (ref(a, b)∧partof ∗(maps-to(a),A)∧partof ∗(maps-to(b),B))
convergence(A,B) ⇔ ref(A,B)
∧propagated-ref ↑(A,B)
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Hierarchisches Reflexion Modell
* ***
ba
maps−to(a) maps−to(b)
A B<<ref>>
maps−to(b)maps−to(a)
a b
BA<<ref>>
Abwesenheit
HypothetischeModulsicht
KonkreteModulsicht
<<ref>>
Konvergenz
absence(A,B) ⇔ ref(A,B) ∧ ¬propagated-ref ↑(A,B)
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Problem Elicitation & Concept DeterminationCompiler Architektur I & ReflexionCompiler Architektur II & hierarchische Reflexion
Hierarchisches Reflexion Modell
* *** * *
ba
maps−to(a) maps−to(b)
A B<<ref>>
maps−to(b)maps−to(a)
a b
BA<<ref>>
Abwesenheit
a
A’
A=maps−to(a)
B’
b
HypothetischeModulsicht
KonkreteModulsicht
<<ref>>
Konvergenz
B=maps−to(b)
<<ref>>
Divergenz
divergence(A,B) ⇔ ¬∃(A′,B ′) : (partof ∗(A,A′)∧partof ∗(B,B ′)∧ref(A′,B ′)) ∧ propagated-ref(A,B)
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Data GatheringInference & Interpretation
Symphony Ausfuhrungsebene
SourceViews
TargetViews
ViewsArchitectural
stakeholders
Data
reconstructor
RepositoryDataGathering
actor in
data flow
KnowledgeInference
TargetSource
InformationInterpretation
Map
Views Views
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Data GatheringInference & Interpretation
Extraktion der Information mit Bauhaus
GlobalDeclarationModule
Routine
Object
Type
Directory
declared indeclared indeclared in
Type
Routine
Object
sameexpression
Variable Constant
based_on
of_type
set, use, take−addressinternal access
direct callindirect call
return, parameter−type
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
Data GatheringInference & Interpretation
Knowledge Inference &Information Interpretation: Bauhaus GUI
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Untersuchte Compiler
sdcc — Small Device C Compiler
ANSI-CIntel 8051, Zilog Z80, Dallas 80C390. . .
cc1 — Teil der GNU Compiler Collection
(ANSI), GNU Cviele Plattformen
System KLOC C Module Aufwand
sdcc1 100 49 6 hcc12 500 156 8+ h
1http://sourceforge.net/projects/sdcc/2http://gcc.gnu.org/
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur sdcc
Abbildung von Dateien auf Module relativ einfach
erste Iteration: viele DivergenzenVerfeinerungen (5 weitere Iterationen):
45 globale Deklarationen nicht in passenderUbersetzungseinheitdie meisten in die Komponente Global Declarationsubersehene Abhangigkeiten in hypothetischen Modulsicht
Architekturverletzungen:Symboltabelle referenziert den Parser
declaration block number und line number
Backend referenziert den Parserglobale Variable fur Stackgroße von Aktivierungsblocken
Architekturmuster: Optimierer referenziert BackendPlattform spezifische Parameteruber Funktionszeiger“anonyme” Abhangigkeit
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur sdcc
Abbildung von Dateien auf Module relativ einfach
erste Iteration: viele Divergenzen
Verfeinerungen (5 weitere Iterationen):45 globale Deklarationen nicht in passenderUbersetzungseinheitdie meisten in die Komponente Global Declarationsubersehene Abhangigkeiten in hypothetischen Modulsicht
Architekturverletzungen:Symboltabelle referenziert den Parser
declaration block number und line number
Backend referenziert den Parserglobale Variable fur Stackgroße von Aktivierungsblocken
Architekturmuster: Optimierer referenziert BackendPlattform spezifische Parameteruber Funktionszeiger“anonyme” Abhangigkeit
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur sdcc
Abbildung von Dateien auf Module relativ einfach
erste Iteration: viele DivergenzenVerfeinerungen (5 weitere Iterationen):
45 globale Deklarationen nicht in passenderUbersetzungseinheitdie meisten in die Komponente Global Declarationsubersehene Abhangigkeiten in hypothetischen Modulsicht
Architekturverletzungen:Symboltabelle referenziert den Parser
declaration block number und line number
Backend referenziert den Parserglobale Variable fur Stackgroße von Aktivierungsblocken
Architekturmuster: Optimierer referenziert BackendPlattform spezifische Parameteruber Funktionszeiger“anonyme” Abhangigkeit
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur sdcc
Abbildung von Dateien auf Module relativ einfach
erste Iteration: viele DivergenzenVerfeinerungen (5 weitere Iterationen):
45 globale Deklarationen nicht in passenderUbersetzungseinheitdie meisten in die Komponente Global Declarationsubersehene Abhangigkeiten in hypothetischen Modulsicht
Architekturverletzungen:Symboltabelle referenziert den Parser
declaration block number und line number
Backend referenziert den Parserglobale Variable fur Stackgroße von Aktivierungsblocken
Architekturmuster: Optimierer referenziert BackendPlattform spezifische Parameteruber Funktionszeiger“anonyme” Abhangigkeit
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur sdcc
Abbildung von Dateien auf Module relativ einfach
erste Iteration: viele DivergenzenVerfeinerungen (5 weitere Iterationen):
45 globale Deklarationen nicht in passenderUbersetzungseinheitdie meisten in die Komponente Global Declarationsubersehene Abhangigkeiten in hypothetischen Modulsicht
Architekturverletzungen:Symboltabelle referenziert den Parser
declaration block number und line number
Backend referenziert den Parserglobale Variable fur Stackgroße von Aktivierungsblocken
Architekturmuster: Optimierer referenziert BackendPlattform spezifische Parameteruber Funktionszeiger“anonyme” Abhangigkeit
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur cc1
nur Ubersetzungseinheiten abgebildet (keine Verfeinerungenfur globale Deklarationen)
Frontend ist gut strukturiert und lose mit Middle- undBackend verbunden
Backend einfach zu finden
Architekturverletzungen:Middleend referenziert den Praprozessor
verwendet Hashtabelle aus Praprozessor(wir haben drei Hashtabellen im cc1 gefunden)
viele Divergenzen. . .
Middleend ist ein großer Klumpen
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur cc1
nur Ubersetzungseinheiten abgebildet (keine Verfeinerungenfur globale Deklarationen)
Frontend ist gut strukturiert und lose mit Middle- undBackend verbunden
Backend einfach zu finden
Architekturverletzungen:Middleend referenziert den Praprozessor
verwendet Hashtabelle aus Praprozessor(wir haben drei Hashtabellen im cc1 gefunden)
viele Divergenzen. . .
Middleend ist ein großer Klumpen
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur cc1
nur Ubersetzungseinheiten abgebildet (keine Verfeinerungenfur globale Deklarationen)
Frontend ist gut strukturiert und lose mit Middle- undBackend verbunden
Backend einfach zu finden
Architekturverletzungen:Middleend referenziert den Praprozessor
verwendet Hashtabelle aus Praprozessor(wir haben drei Hashtabellen im cc1 gefunden)
viele Divergenzen. . .
Middleend ist ein großer Klumpen
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur cc1
nur Ubersetzungseinheiten abgebildet (keine Verfeinerungenfur globale Deklarationen)
Frontend ist gut strukturiert und lose mit Middle- undBackend verbunden
Backend einfach zu finden
Architekturverletzungen:Middleend referenziert den Praprozessor
verwendet Hashtabelle aus Praprozessor(wir haben drei Hashtabellen im cc1 gefunden)
viele Divergenzen. . .
Middleend ist ein großer Klumpen
Daniel Simon Hierachisches Reflexion Modell
Symphony DesignSymphony Ausfuhrung
Resultate
sdccGNU cc1
Resultate fur cc1
nur Ubersetzungseinheiten abgebildet (keine Verfeinerungenfur globale Deklarationen)
Frontend ist gut strukturiert und lose mit Middle- undBackend verbunden
Backend einfach zu finden
Architekturverletzungen:Middleend referenziert den Praprozessor
verwendet Hashtabelle aus Praprozessor(wir haben drei Hashtabellen im cc1 gefunden)
viele Divergenzen. . .
Middleend ist ein großer Klumpen
Daniel Simon Hierachisches Reflexion Modell
Erfahrungen
Reflexion Modell muss hierarchische Architekturenunterstutzen
Anwendungswissen bei der Erstellung der hypothetischenArchitektur wesentlich
manuelle Schritte aufwandig, Iterationen ublich
Toolunterstutzung zur Erstellung der Abbildung
dann aber automatisierte Anwendung fur Folgeiterationen
Abgleich von Soll- gegen Ist-Architektur