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