Vorlesung Software-Reengineering Prof. Dr. Rainer Koschke Arbeitsgruppe Softwaretechnik Fachbereich Mathematik und Informatik Universit¨ at Bremen
Wintersemester 2005/06
¨ Uberblick I 1
Strukturelle Architektursichten
Strukturelle Architektursicht
Strukturelle Architektursicht
1
Strukturelle Architektursichten Reflektionsmethode Software-Clustering Wiederholungsfragen
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
3 / 60
WS 2005/2006
4 / 60
Strukturelle Architektursicht
Lernziele
strukturelle Sicht von Software-Architektur kennen strukturelle Sicht rekonstruieren hypothesengesteuert automatisches Clustering
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Strukturelle Architektursicht
Software-Architektur-Rekonstruktion
Symbol Table
Text
Lexical Analysis
Syntactic Analysis
Semantic Analysis
Optimization
Code Generation
Code
AST
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
5 / 60
Strukturelle Architektursicht
Reflektionsmethode von Murphy u. a. (1995, 2001)
Ziele der Reflektionsmethode: hypothesengetriebene Architekturrekonstruktion Architekturvalidierung
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
6 / 60
Strukturelle Architektursicht
Reflektionsmethode (Murphy u. a. 2001) 1
Stelle Architekturmodell auf
2
Extrahiere Implementierungsmodell
3
Bilde Modelle aufeinander ab
4
Berechne Reflektionsmodell
5
Verfeinere/korrigiere
Example H1
H2
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
H3
WS 2005/2006
7 / 60
Strukturelle Architektursicht
Reflektionsmethode
convergence
A
B
hypothesized module view
b
concrete module view
a
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)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
8 / 60
Strukturelle Architektursicht
Reflektionsmethode
convergence
A
B
absence
A
a
B
hypothesized module view
b
concrete module view
b
a
absence(A, B) ⇔ ref(A, B) ∧ ¬propagated-ref(A, B)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
9 / 60
Strukturelle Architektursicht
Reflektionsmethode
convergence
A
B
absence
A
a
b
divergence
B
A
a
b
B
hypothesized module view
b
concrete module view
a
divergence(A, B) ⇔ ¬ref(A, B) ∧ propagated-ref(A, B)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
10 / 60
Strukturelle Architektursicht
Reflektionsmethode f¨ur große Systeme
große Systeme werden hierarchisch in Subsysteme zerlegt die originale Reflektionsmethode erlaubt keine hierarchische hypothetische Sicht → Erweiterung von Koschke und Simon (2003)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
11 / 60
Strukturelle Architektursicht
Hierarchische Reflektionsmethode: Inkonsistentes Modell?
A
B
A’
A’’
B’
B’’
u
a
b
w
v
Rainer Koschke (Univ. Bremen)
a’
Vorlesung Software-Reengineering
WS 2005/2006
12 / 60
Strukturelle Architektursicht
Hierarchische Reflektionsmethode convergence A
B
*
*
maps−to(a)
maps−to(b)
a
b
hypothesized module view concrete module view
propagated-ref ↑ (A, B) ⇔ ∃(a, b ∈ M) : (ref(a, b)
∧partof ∗ (maps-to(a), A) ∧partof ∗ (maps-to(b), B)) ⇔ ref(A, B) ∧ propagated-ref ↑ (A, B)
convergence(A, B)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
13 / 60
Strukturelle Architektursicht
Hierarchische Reflektionsmethode convergence A
absence B
*
A
*
B
*
*
maps−to(a)
maps−to(b)
maps−to(a)
maps−to(b)
a
b
a
b
absence(A, B) ⇔
Rainer Koschke (Univ. Bremen)
hypothesized module view concrete module view
ref(A, B) ∧ ¬propagated-ref ↑ (A, B)
Vorlesung Software-Reengineering
WS 2005/2006
14 / 60
Strukturelle Architektursicht
Hierarchische Reflektionsmethode convergence A
absence B
*
A
*
divergence B
A’
*
*
*
maps−to(a)
maps−to(b)
maps−to(a)
maps−to(b)
a
b
a
b
B’
*
A=maps−to(a)
a
B=maps−to(b)
b
hypothesized module view concrete module view
divergence(A, B) ⇔ ¬∃(A0 , B 0 ) : (partof ∗ (A, A0 )
∧partof ∗ (B, B 0 ) ∧ref(A0 , B 0 )) ∧ propagated-ref(A, B)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
15 / 60
Strukturelle Architektursicht
Beispiel
C
B
A
C’
A’
A’’
B’
B’’
e
u
a
b
b’
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
16 / 60
Strukturelle Architektursicht
Beispiel
C
B
A
C’
A’
A’’
B’
B’’
e
u
a
b
b’
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
17 / 60
Strukturelle Architektursicht
Beispiel
C
B
A
C’
A’
A’’
B’
B’’
e
u
a
b
b’
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
18 / 60
Strukturelle Architektursicht
Beispiel
C
B
A
C’
A’
A’’
B’
B’’
e
u
a
b
b’
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
19 / 60
Strukturelle Architektursicht
Beispiel
C
B
A
C’
A’
A’’
B’
B’’
e
u
a
b
b’
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
20 / 60
Strukturelle Architektursicht
Beispiel
C
B
A
C’
A’
A’’
B’
B’’
e
u
a
b
b’
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
21 / 60
Strukturelle Architektursicht
Fallstudie f¨ur C-Compiler (Koschke und Simon 2003)
System sdcc cc1
KLOC 100 500
Rainer Koschke (Univ. Bremen)
C-Units 49 156
Multi-Plattform ja ja
Vorlesung Software-Reengineering
Aufwand 6h 8+ h
WS 2005/2006
22 / 60
Strukturelle Architektursicht
Bauhaus-Fakten-Extraktion
declared in
declared in Directory
declared in Global Declaration
Module
direct call indirect call
Type
Routine
Routine
internal access
set, use, take−address Object
return, parameter−type Type
of_type Object
same expression
based_on Variable
Rainer Koschke (Univ. Bremen)
Constant
Vorlesung Software-Reengineering
WS 2005/2006
23 / 60
Strukturelle Architektursicht
Compiler-Architektur (grobe Modulsicht) Control
Global Configuration
referenced by all
Initialization
references all
Front End
Middle End
Back End IL
AST AST2IL references (first hypothesis)
referenced by all
Common
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
24 / 60
Strukturelle Architektursicht
Compiler-Architektur (detaillierte Modulsicht) Control
Global Configuration
referenced by all
Initialization
references all
Front End
Middle End
Preprocessor
Optimizers
Lexer
Data Flow
Back End CFG
IL
Target Machine Description Peephole Optimizer
Control Flow Parser Code Generator Semantic Analysis
Symbol Table AST2IL references (first hypothesis) AST references (later refinement)
Error Handler
Utilities
referenced by all
Common
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
25 / 60
Strukturelle Architektursicht
Resultate f¨ur sdcc
Abbildung von Dateien relativ klar viele Divergenzen in der ersten Iteration Verfeinerung (5 zus¨atzliche Iterationen): 45 globale Deklarationen nicht auf die konzeptionelle Komponente abgebildet, auf die Datei abgebildet wurde, die sie deklariert die meisten davon auf Global Declarations einige u ¨bersehene Abh¨angigkeiten in der hypothetischen Sicht
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
26 / 60
Strukturelle Architektursicht
Resultate f¨ur sdcc
Architekturverletzungen: Symboltabelle referenziert Parser Blocknummer von Deklarationen und Zeilennummer
Back-End referenziert Parser globale Variablen, die Kellergr¨ oße f¨ ur Aktivierungsbl¨ ocke verwalten
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
27 / 60
WS 2005/2006
28 / 60
Strukturelle Architektursicht
Resultate f¨ur sdcc
Architekturmuster: Optimierung referenziert Back-End um plattformabh¨angige Parameter zu erhalten mittels Funktionszeigern → “anonyme” Abh¨angigkeit
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Strukturelle Architektursicht
Resultate f¨ur cc1
nur Units abgebildet (keine Verfeinerung f¨ ur globale Deklarationen) Front-End ist gut strukturiert and lose gekoppelt an Middle-/Back-End Back-End ist einfach identifierbar Middle-End ist ein “big ball of mud”
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
29 / 60
WS 2005/2006
30 / 60
Strukturelle Architektursicht
Modulabh¨angigkeiten von cc1
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Strukturelle Architektursicht
Resultate f¨ur cc1
Architekturverletzungen: Middle-End referenziert Preprozessor benutzt Hash-Tabelle des Preprozessors (es gibt mindestens drei verschiedene Hash-Tabellen in cc1 )
viele, viele Divergenzen. . .
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
31 / 60
Strukturelle Architektursicht
Gesammelte Erfahrungen
Extraktion: Funktionszeigeranalyse sehr wichtig
Verfeinerungen der Modelle: alle Modelle (hypothetisches und konkrete Sicht, Abbildung)
Einfluss der Strukturiertheit des analysierten Systems: Koh¨asion der Units erleichtert Abbildung enorm
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
32 / 60
Strukturelle Architektursicht
Zusammenfassung
hierarchisches hypothetisches Modell ist notwendig f¨ ur große Systeme hypothetisches Modell und Abbildung m¨ ussen manuell erstellt werden Voraussetzungen: hypothesische Sicht erfordert Wissen u ¨ber Anwendungsbereich und potentielle Architektur
Weitere notwendige Erweiterungen: Abbildung von Relationen Kontroll- und Datenflussabh¨angigkeiten statt nur Referenzen
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
33 / 60
Strukturelle Architektursicht
Hypothesengetriebene manuelle Zuordnung versus un¨uberwachte Klassifikation
Reflektionsmethode beginnt mit Architekturhypothese die Abbildung konkreter auf logischer Komponenten ist manuell bei 1,5 MLOC m¨ ussen leicht 10.000 Routinen, zumindest hunderte von Dateien abgebildet werden → umgekehrter Ansatz: automatische Gruppierung zusammengeh¨ origer Elemente
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
34 / 60
Strukturelle Architektursicht
Automatisches Software-Clustering Kennzeichen: ¨ Software-Elemente werden automatisch auf der Basis ihrer Ahnlichkeit gruppiert1 bzw. auf Basis ihrer Un¨ahnlichkeit unterschieden. Software-Clustering ist un¨ uberwachte Klassifikation. Fragen: Welche Software-Elemente werden gruppiert? ¨ Wie ist die Ahnlichkeit zwischen Software-Elementen definiert? Auf welche Weise wird gruppiert (welcher Algorithmus wird verwendet)? 1
Wir folgen hier einer allgemeinen Darstellung von Wiggert (1998). Eine alternative ausf¨ uhrliche Zusammenstellung und Klassifikation von Methoden und Techniken findet man insbesondere bei Koschke (2000) Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
35 / 60
Strukturelle Architektursicht
Gegenstand des Software-Clusterings
Gruppiert werden. . . globale Deklarationen in C Attribute und Methoden in objektorientierten Programmen Klassen in objektorientierten Programmen Module und Pakete Dateien vereinzelt sogar einzelne Anweisungen und Ausdr¨ ucke ...
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
36 / 60
Strukturelle Architektursicht
¨ Ahnlichkeit zwischen zwei Elementen fill
λ call
get
λ
λ call
call
λ call
put
parameter
τ
set
λ
λ
call
list_insert
parameter
List enclosing
call
list_length use
λ
Routine
τ
Typ
enclosing
malloc Member
head
size
set Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
2006-01-29
Vorlesung Software-Reengineering Strukturelle Architektursichten Software-Clustering ¨ Ahnlichkeit zwischen zwei Elementen
WS 2005/2006
37 / 60
¨ Ahnlichkeit zwischen zwei Elementen fill
put
λ call
λ call
call
λ call
get
λ
parameter
list_insert set
λ
τ
parameter
List enclosing
call
λ
call
list_length use
λ
Routine
τ
Typ
enclosing
malloc Member
head set
¨ Ahnlichkeitsdefinition kann sich auf • Beziehungen zwischen Elementen und • Eigenschaften jedes einzelnen Elements st¨ utzen.
size
Strukturelle Architektursicht
¨ Ahnlichkeit auf Basis von Eigenschaften
Arten von Eigenschaften (abh¨angig von Skalen): Nominalskala Ordinalskala Intervallskala Rationalskala Absolutskala
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
38 / 60
Strukturelle Architektursicht
Bin¨are Eigenschaften I Bin¨ are Eigenschaften sind spezielle nominale Eigenschaften, die zweiwertig repr¨asentiert werden k¨onnen. Symmetrische bin¨are Eigenschaften: zwei Kategorien z.B.Routine versus Variable. Asymmetrische bin¨are Eigenschaften: Eigenschaften ist vorhanden (1) z.B. Routine ist Blatt im Aufrufgraph
Eigenschaft ist nicht vorhanden (0) z.B. Routine ruft andere Routinen auf
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
39 / 60
Strukturelle Architektursicht
Bin¨are Eigenschaften II Beispiel f¨ ur asymetrische bin¨are Eigenschaften: Routine liest/schreibt Variable. set/use r1 r2 r3
v1 × × ×
v2 ×
v3
v4
×
Rainer Koschke (Univ. Bremen)
v5
v6 × ×
Vorlesung Software-Reengineering
WS 2005/2006
40 / 60
Strukturelle Architektursicht
Bin¨are Eigenschaften III Assoziationskoeffizienten:
Element i
1 0
Element j 1 0 a b c d a+c b+d
a+b c +d n =a+b+c +d
¨ Werden 0-0-Ubereinstimmungen gewertet, und wenn ja, wie? ¨ Gewichtung von Ubereinstimmungen und Differenzen?
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
41 / 60
Strukturelle Architektursicht
Bin¨are Eigenschaften IV set/use r1 r2 r3
v1 × × ×
v2 ×
v3
v4
×
v5
v6 × ×
r2 1 0
r1
1 2 1 2+1
0 1 2 1+2
2+1 1+2 n =2+1+1+2
r3 1 0
r1
Rainer Koschke (Univ. Bremen)
1 1 0 1+0
0 2 3 2+3
1+2 0+3 n =1+2+0+3
Vorlesung Software-Reengineering
WS 2005/2006
42 / 60
WS 2005/2006
43 / 60
Strukturelle Architektursicht
Bin¨are Eigenschaften V simple matching coefficient: simple(i, j) =
a+d n
2+2 2 = 2+1+1+2 3 1+3 2 simple(r 1, r 3) = = 1+2+0+3 3
simple(r 1, r 2) =
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Strukturelle Architektursicht
Bin¨are Eigenschaften VI Jaccard coefficient: Jaccard(i, j) =
a a+b+c
1 2 = 2+1+1 2 1 1 Jaccard(r 1, r 3) = = 1+2+0 3 Jaccard(r 1, r 2) =
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
44 / 60
WS 2005/2006
45 / 60
Strukturelle Architektursicht
Bin¨are Eigenschaften VII
Sorensen-Dice coefficient: Sorensen-Dice(i, j) =
2×a 2×a+b+c
Sorensen-Dice(r 1, r 2) =
2×2 4 = 2×2+1+1 5
Sorensen-Dice(r 1, r 3) =
2×1 1 = 2×1+2+0 2
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Bin¨are Eigenschaften VII
2006-01-29
Vorlesung Software-Reengineering Strukturelle Architektursichten Software-Clustering
Sorensen-Dice coefficient: Sorensen-Dice(i, j) =
Bin¨ are Eigenschaften
2×a 2×a+b+c
Sorensen-Dice(r 1, r 2) =
2×2 4 = 2×2+1+1 5
Sorensen-Dice(r 1, r 3) =
2×1 1 = 2×1+2+0 2
Eine Fallstudie von Saeed u. a. (2003) zeigte, dass: • Sorensen-Dice und Jaccard verhalten sich gleich → die zus¨ atzliche Gewichtung gemeinsamer Eigenschaften bringt keinen erkennbaren Vorteil. • Simple matching coefficient erscheint ungeeignet (was man intuitiv erwarten w¨ urde, weil er der Abwesenheit von Eigenschaften viel Bedeutung zumisst; im Falle von Software-Elementen sind die meisten Eigenschaften der oben genannten Art u ¨blicherweise solche, die die beiden Element beide nicht besitzen.
Strukturelle Architektursicht
Intervallskala
x1,1 x1,2 x2,1 x2,2 ... ... xn,1 xn,2
. . . x1,f . . . x2,f ... ... . . . xn,f
. . . x1,p . . . x2,p . . . xn,p
mit xi,j : Wert der Eigenschaft j f¨ ur Element i. Beispiele: Anzahl Aufrufe McCabe-Komplexit¨at L¨ange in Codezeilen Bezeichnerl¨ange ... → siehe Klonerkennung. . . Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
46 / 60
Strukturelle Architektursicht
Intervallskala: Normalisierung
x1,1 x1,2 x2,1 x2,2 ... ... xn,1 xn,2
. . . x1,f . . . x2,f ... ... . . . xn,f
. . . x1,p . . . x2,p . . . xn,p
Erster Schritt: Normalisiere (standardisiere) die Werte: sf =
1 × (|x1,f − mf | + |x2,f − mf | + . . . + |xn,f − mf |) n
wobei mf = n1 (x1,f + x2,f + . . . + xn,f ). Z-Score: zi,f =
Rainer Koschke (Univ. Bremen)
xi,f − mf sf
Vorlesung Software-Reengineering
WS 2005/2006
47 / 60
Strukturelle Architektursicht
¨ Ahnlichkeit f¨ur Intervallskala I Minkowski-Distanz: q d(i, j) = q |zi,1 − zj,1 |q + |zi,2 − zj,2 |q + . . . + |zi,p − zj,p |q wobei q > 0. Falls q = 1, dann ist d die Manhattan-Distanz: d(i, j) = |zi,1 − zj,1 | + |zi,2 − zj,2 | + . . . + |zi,p − zj,p | ¨ Ahnlichkeit: sim(i, j) = 1 − d(i, j)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
48 / 60
Strukturelle Architektursicht
¨ Ahnlichkeit f¨ur Intervallskala II Falls q = 2, dann ist d der Euklidische Abstand: q d(i, j) = |zi,1 − zj,1 |2 + |zi,2 − zj,2 |2 + . . . + |zi,p − zj,p |2 Eigenschaften: d(i, j) ≤ 0 d(i, i) = 0 d(i, j) = d(j, i) d(i, j) ≤ d(i, k) + d(k, j) Weitere Alternativen (gewichtete Distanz, parametrische Produktmoment-Korrelation) siehe Literatur.
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
49 / 60
WS 2005/2006
50 / 60
Strukturelle Architektursicht
Clustering-Algorithmen
Varianten: graphentheoretische Algorithmen Konstruktionsalgorithmen Optimierungsalgorithmen Hierarchische Agglomeration
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Strukturelle Architektursicht
Graphentheoretische Algorithmen
Clustering von Knoten in einem Graph (bin¨are Relation) Beispiele Starke Zusammenhangskomponenten (Zyklen) Dominanzanalyse Einfache Zusammenhangskomponenten (isolierte Teilgraphen)
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
51 / 60
WS 2005/2006
52 / 60
Strukturelle Architektursicht
Einfache Zusammenhangskomponenten
Stecke jeden Knoten in eigene Menge foreach edge (s,t) in graph loop union (find(s),find(t)) end loop
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Strukturelle Architektursicht
Konstruktionsalgorithmen
Gruppierung der Knoten in einem Durchlauf auf der Basis ihrer Eigenschaftsvektoren geographische Techniken Suche nach dichten Ansammlungen
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
53 / 60
WS 2005/2006
54 / 60
Strukturelle Architektursicht
Optimierungsalgorithmen
Erstelle initiale Partition mit n Gruppen repeat bestimme Kristallisationskerne2 (KK) gruppiere jedes Element zum ¨ahnlichsten KK until keine Elemente mehr re-gruppiert werden k¨ onnen
2
Kristallisationskern ist oft Zentroid
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
Strukturelle Architektursicht
Hierarchische Agglomeration
Partitioniere n Element in n Gruppen ¨ Berechne n × n-Ahnlichkeitsmatrix repeat ¨ finde das Paar (a,b) mit maximaler Ahnlichkeit merge (a,b) ¨ aktualisiere Ahnlichkeitsmatrix until keine Elemente mehr re-gruppiert werden k¨ onnen Resultat: Dendrogramm
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
55 / 60
Strukturelle Architektursicht
Dendrogramm 0.0 0.1 0.2 0.3 0.4 0.5 Schwellwert 0.6 0.7 0.8 0.9
a Rainer Koschke (Univ. Bremen)
b
c
d
e
f
Vorlesung Software-Reengineering
g
h
i
j WS 2005/2006
k 56 / 60
Strukturelle Architektursicht
Hierarchische Agglomeration ¨ Wie wird Ahnlichkeit zwischen ganzen Gruppen bestimmt? Single-Linkage single-link(C , A ∪ B) = max(sim(C , A), sim(C , B)) Complete-Linkage complete-link(C , A ∪ B) = min(sim(C , A), sim(C , B)) Unweighted Pair-Group-Average avg-link(C , A ∪ B) =
Rainer Koschke (Univ. Bremen)
|A| × sim(C , A) + |B| × sim(C , B) |A| + |B|
Vorlesung Software-Reengineering
WS 2005/2006
57 / 60
Strukturelle Architektursicht
Wiederholungs- und Vertiefungsfragen I Wie geht man bei der Reflektionsmethode vor? Wie sind Konvergenzen, Divergenzen und Abwesenheit genau definiert? Was sind ihre wesentlichen Kennzeichen? Wo liegen ihre Schwierigkeiten? Was ist Software-Clustering? Wozu wird Software-Clustering verwendet? ¨ Wie kann Ahnlichkeit zwischen zwei Elementen definiert werden? Wie h¨angt dies mit den Skalen zusammen? ¨ Wie kann Ahnlichkeit f¨ ur ganze Mengen von Elementen definiert werden? Welche Algorithmen kann man f¨ ur das Clustering benutzen? Welche prinzipiellen Schritte sieht Symphony vor? Was soll die Trennung von Blickwinkeln (Viewpoints) und Sichten (Views) bewirken? Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
58 / 60
Strukturelle Architektursicht
1 Koschke 2000 Koschke, Rainer: Atomic Architectural Component Recovery for Program Understanding and Evolu Universit¨at Stuttgart, Deutschland, Dissertation, 2000 2 Koschke und Simon 2003 Koschke, Rainer ; Simon, Daniel: Hierarchical Reflexion Models. In: Working Conference on Reverse Engineering, IEEE Computer Society Press, November 2003, S. 36–45 3 Murphy u. a. 1995 Murphy, Gail C. ; Notkin, David ; Sullivan, Kevin: Software Reflexion Models: Bridging the Gap Between Source and High-Level Models. In: Proc. of the Third ACM SIGSOFT Symposium on the Foundations of Software Engineering, ACM Press, 1995, S. 18–28 4 Murphy u. a. 2001 Murphy, Gail C. ; Notkin, David ; Sullivan, Kevin J.: Software Reflexion Models: Bridging the Gap between Design and Implementation. In: IEEE Computer Society Transactions on Software Engineering 27 (2001), April, Nr. 4, S. 364–380
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
59 / 60
Strukturelle Architektursicht
5 Saeed u. a. 2003 Saeed, M. ; Maqbool, O. ; Babri, H.A. ; Hassan, S.Z. ; Sarwar, S.M.: Software Clustering Techniques and the Use of Combined Algorithm. In: European Conference on Software Maintenance and Reengineering, IEEE Computer Society Press, 2003, S. 301–310 6 Wiggert 1998 Wiggert, T. A.: Using Clustering Algorithms in Legacy Systems Remodularization. In: Working Conference on Reverse Engineering, IEEE Computer Society Press, 1998, S. 33–43. – Nice introduction to software clustering. Does not introduce a new clustering technique, but gives an overview on the clustering techniques compiled from literature on general clustering (not software related).
Rainer Koschke (Univ. Bremen)
Vorlesung Software-Reengineering
WS 2005/2006
60 / 60