SlideShare a Scribd company logo
Richard Wettel and Michele Lanza
University of Lugano, CH
Code City
Software systems as
Richard Wettel and Michele
CodeCity
The city metaphor
3
Richard Wettel and Michele
CodeCity
The city metaphor
3
domain mapping
classes buildings
package
s
districts
system city
Richard Wettel and Michele
CodeCity
The city metaphor
3
domain mapping
classes buildings
package
s
districts
system city
Richard Wettel and Michele
CodeCity
The city metaphor
3
domain mapping
classes buildings
package
s
districts
system city
Richard Wettel and Michele
CodeCity
The city metaphor
3
domain mapping
classes buildings
package
s
districts
system city
Richard Wettel and Michele
CodeCity
The city metaphor
3
domain mapping
classes buildings
package
s
districts
system city
class metric building
propertynumber of
methods (NOM)
height
number of
attributes (NOA)
width,
length
Richard Wettel and Michele
CodeCity
The city metaphor
3
domain mapping
classes buildings
package
s
districts
system city
package
metric
district
propertynesting level color
class metric building
propertynumber of
methods (NOM)
height
number of
attributes (NOA)
width,
length
Richard Wettel and Michele
CodeCity
“Reading” a code city
4
Richard Wettel and Michele
CodeCity
“Reading” a code city
4
skyscrapers
(NOM, NOA)
Richard Wettel and Michele
CodeCity
“Reading” a code city
4
skyscrapers
(NOM, NOA)
parking lots
(NOM,
NOA)
Richard Wettel and Michele
CodeCity
“Reading” a code city
4
skyscrapers
(NOM, NOA)
parking lots
(NOM,
NOA)
office buildings
(NOM, NOA)
Mapping techniques
Richard Wettel and Michele
CodeCity
1. Identity mapping
6
NOM heightf(x) = x
Richard Wettel and Michele
CodeCity
1. Identity mapping
6
NOM heightf(x) = x
Richard Wettel and Michele
CodeCity
1. Identity mapping
6
NOM heightf(x) = x
Richard Wettel and Michele
CodeCity
Identity mapping applied
7
Richard Wettel and Michele
CodeCity
2. Linear mapping
8
NOM heightf(x) = ax + b
Richard Wettel and Michele
CodeCity
2. Linear mapping
8
NOM heightf(x) = ax + b
Richard Wettel and Michele
CodeCity
2. Linear mapping
8
NOM heightf(x) = ax + b
Richard Wettel and Michele
CodeCity
2. Linear mapping
8
NOM heightf(x) = ax + b
Richard Wettel and Michele
CodeCity
Linear mapping applied
9
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
very high
high
average
low
very low
upper quartile
lower quartile
median
lower whisker
upper whisker
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
very high
high
average
low
very low
upper quartile
lower quartile
median
lower whisker
upper whisker
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
3. Boxplot-based mapping
10
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
Boxplot-based mapping applied
11
Richard Wettel and Michele
CodeCity
4. Threshold-based mapping
12
NOM heightclustering
Richard Wettel and Michele
CodeCity
4. Threshold-based mapping
12
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
4. Threshold-based mapping
12
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
4. Threshold-based mapping
12
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
4. Threshold-based mapping
12
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
4. Threshold-based mapping
12
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
4. Threshold-based mapping
12
NOM heightclustering
very high
high
average
low
very low
Richard Wettel and Michele
CodeCity
Threshold-based mapping applied
13
Richard Wettel and Michele
CodeCity
Mappings compared
14
identit
y
linear
boxplot-
basedthreshold-
based
Richard Wettel and Michele
CodeCity
Mappings compared
14
identit
y
linear
boxplot-
basedthreshold-
based
Richard Wettel and Michele
CodeCity
Mappings compared
14
identit
y
linear
boxplot-
basedthreshold-
based
Richard Wettel and Michele
CodeCity
Mappings compared
14
identit
y
linear
boxplot-
basedthreshold-
based
Richard Wettel and Michele
CodeCity
Mappings compared
14
identit
y
linear
boxplot-
basedthreshold-
based
Understanding programs
Richard Wettel and Michele
CodeCity
Reverse-engineering ArgoUML
16
Richard Wettel and Michele
CodeCity
Reverse-engineering ArgoUML
16
Richard Wettel and Michele
CodeCity
Reverse-engineering ArgoUML
16
Richard Wettel and Michele
CodeCity
The twin towers
17
Richard Wettel and Michele
CodeCity
Facade
1 attribute
337
methods
The twin towers
17
Richard Wettel and Michele
CodeCity
Facade
1 attribute
337
methods
The twin towers
17
FacadeMDRI
mpl
3 attribute
349 methods
Richard Wettel and Michele
CodeCity
Facade
1 attribute
337
methods
The twin towers
17
Is there
anybody
out
FacadeMDRI
mpl
3 attribute
349 methods
Richard Wettel and Michele
CodeCity
Facade
1 attribute
337
methods
The twin towers
17
FacadeMDRI
mpl
3 attribute
349 methods
Richard Wettel and Michele
CodeCity
Hotels, parking lots, duplication
18
Richard Wettel and Michele
CodeCity
Hotels, parking lots, duplication
18
org.argouml.language.
java.generator
JavaTokenType
s146 attributes
0 methods
JavaRecognizer
24 attributes
91 methods
Richard Wettel and Michele
CodeCity
Hotels, parking lots, duplication
18
org.argouml.language.
java.generator
JavaTokenType
s146 attributes
0 methods
JavaRecognizer
24 attributes
91 methods
STDCTokenTy
pes152 attributes
0 methods
CPPParser
85 attributes
204 methods
org.argouml.uml.reveng.class
file
Richard Wettel and Michele
CodeCity
Hotels, parking lots, duplication
18
org.argouml.language.
java.generator
JavaTokenType
s146 attributes
0 methods
JavaRecognizer
24 attributes
91 methods
STDCTokenTy
pes152 attributes
0 methods
CPPParser
85 attributes
204 methods
JavaTokenTyp
es173
attributes0 methods
JavaRecogniz
er79 attributes
176 methods
org.argouml.uml.reveng.java
org.argouml.uml.reveng.class
file
Richard Wettel and Michele
CodeCity
Hotels, parking lots, duplication
18
org.argouml.language.
java.generator
JavaTokenType
s146 attributes
0 methods
JavaRecognizer
24 attributes
91 methods
STDCTokenTy
pes152 attributes
0 methods
CPPParser
85 attributes
204 methods
JavaTokenTyp
es173
attributes0 methods
JavaRecogniz
er79 attributes
176 methods
org.argouml.uml.reveng.java
org.argouml.uml.reveng.class
file
JavaTokenType
s145 attributes
0 methods
Richard Wettel and Michele
CodeCity
Hotels, parking lots, duplication
18
org.argouml.language.
java.generator
JavaTokenType
s146 attributes
0 methods
JavaRecognizer
24 attributes
91 methods
STDCTokenTy
pes152 attributes
0 methods
CPPParser
85 attributes
204 methods
JavaTokenTyp
es173
attributes0 methods
JavaRecogniz
er79 attributes
176 methods
org.argouml.uml.reveng.java
org.argouml.uml.reveng.class
file
JavaTokenType
s145 attributes
0 methods
JavaRecognizer
22 attributes
88 methods
Looking at the design
Richard Wettel and Michele
CodeCity
On software design...
20
Richard Wettel and Michele
CodeCity
On software design...
Definitions
bad smells [Beck & Fowler 1998], design flaws
heuristics [Riel 2000], principles [Martin 2002],
patterns [GoF 1995]
20
Richard Wettel and Michele
CodeCity
On software design...
Definitions
bad smells [Beck & Fowler 1998], design flaws
heuristics [Riel 2000], principles [Martin 2002],
patterns [GoF 1995]
Techniques
detection strategies for the design flaws
20
Richard Wettel and Michele
CodeCity
On software design...
Definitions
bad smells [Beck & Fowler 1998], design flaws
heuristics [Riel 2000], principles [Martin 2002],
patterns [GoF 1995]
Techniques
detection strategies for the design flaws
Visualization
?
20
Richard Wettel and Michele
CodeCity
The God Class detection strategy
21
Richard Wettel and Michele
CodeCity
God classes of JDK 1.5 in Moose
22
Richard Wettel and Michele
CodeCity
God classes of JDK in CodeCity
23
Richard Wettel and Michele
CodeCity
Class-level disharmony maps
24
KeyEvent
(NOA 205, NOM 18) java.awt.event
InputEvent
(NOA 21, NOM 14)
Frame
(NOA 33, NOM 38)
java.awt.geom
Container
(NOA 21, NOM 127)
Component
(NOA 88, NOM 280)
java.util.concurrent.locks
AbstractQueuedSynchronizer
(NOA 9, NOM 54)
String
(NOA 7, NOM 81)
Event
(NOA 84, NOM 14)
Class
(NOA 27, NOM 107)
BigInteger
(NOA 28, NOM 103)
BigDecimal
(NOA 18, NOM 96)
Security
(NOA 3, NOM 30)
java.util.regex
Pattern
(NOA 29, NOM 66)
Matcher
(NOA 17, NOM 38)
LogRecord
(NOA 17, NOM 28)
Logger
(NOA 18, NOM 53)
Font
(NOA 34, NOM 78)
KeyboardFocusManager
(NOA 33, NOM 94)
Frame
(NOA 33, NOM 38)
Calendar
(NOA 81, NOM 71)
java.util.logging
JDK 1.5
Richard Wettel and Michele
CodeCity
Class-level disharmony ma
25
org.argouml.reveng.java
Modeller
(NOA 15, NOM 52)
JavaRecognizer
(NOA 79, NOM 176)
org.argouml.reveng.classfile
SimpleByteLexer$GeneratorCPP
(NOA 34, NOM 100)
SimpleByteLexer$CPPParser
(NOA 85, NOM 204)
SimpleByteLexer$GeneratorPHP4
(NOA 4, NOM 33)
org.argouml.diagram.ui
FigNodeModelElement
(NOA 39, NOM 98)
FigEdgeModelElement
(NOA 13, NOM 76)
FigAssociation
(NOA 8, NOM 17)
JavaRecognizer
(NOA 24, NOM 91)
GeneratorJava
(NOA 11, NOM 66)
JavaLexer
(NOA 9, NOM 72)
org.argouml.language.java.generator
org.argouml.uml.notation.uml
org.argouml.model.mdr
FacadeMDRImpl
(NOA 3, NOM 349)
CoreHelperMDRImpl
(NOA 3, NOM 349)
Facade
(NOA 1, NOM 337)
JavaTokenTypes
(NOA 173, NOM 0)
UmlFactoryMDRImpl
(NOA 9, NOM 22)
ArgoUML
Richard Wettel and Michele
CodeCity
Granularity of representation
26
NOM=7
NOA
=
2
NOA = 2
class C
coarse
Richard Wettel and Michele
CodeCity
Granularity of representation
26
NOM=7
NOA
=
2
NOA = 2
class C
coarse fine-grained
Richard Wettel and Michele
CodeCity
Granularity of representation
26
NOM=7
NOA
=
2
NOA = 2
class C
class C
coarse fine-grained
Richard Wettel and Michele
CodeCity
Granularity of representation
26
NOM=7
NOA
=
2
NOA = 2
class C
class C
m4
m1
m3
m5 m7
m6
m2
coarse fine-grained
Richard Wettel and Michele
CodeCity 27
Feature envy map
Jmol
Richard Wettel and Michele
CodeCity 27
1,500 methods
(25 %)
Feature envy map
Jmol
Richard Wettel and Michele
CodeCity
Shotgun surgery map
28
ArgoUM
L
Richard Wettel and Michele
CodeCity
Shotgun surgery map
28
ArgoUM
L
Richard Wettel and Michele
CodeCity
Shotgun surgery map
28
ArgoUM
L
Exploring the history
Richard Wettel and Michele
CodeCity
Modeling history: Hismo
30
Class
Richard Wettel and Michele
CodeCity
Modeling history: Hismo
30
Class
time
Richard Wettel and Michele
CodeCity
Modeling history: Hismo
30
Class
Class
Version
timetimestamp N
Richard Wettel and Michele
CodeCity
Modeling history: Hismo
30
Class
Class
Version
...
timetimestamp N
Class
Version
Class
timestamp 2
Richard Wettel and Michele
CodeCity
Modeling history: Hismo
30
Class
Class
Version
...
timetimestamp N
Class
Version
Class
timestamp 1
Class
Version
Class
timestamp 2
Richard Wettel and Michele
CodeCity
Modeling history: Hismo
30
Class
Class
Version
Class History
...
timetimestamp N
Class
Version
Class
timestamp 1
Class
Version
Class
timestamp 2
Richard Wettel and Michele
CodeCity
Visualizing evolution
31
Time travel
Age map
Timeline
fine
Richard Wettel and Michele
CodeCity
Visualizing evolution
31
Time travel
Age map
Timeline
fine
Richard Wettel and Michele
CodeCity
Visualizing evolution
31
Time travel
Age map
Timeline
fine
Richard Wettel and Michele
CodeCity
Consistent locality
32
A
BarFoo
Blueprint for the city,
based on the maximal
expansion of each artifact
(building, district).
Richard Wettel and Michele
CodeCity
Consistent locality
32
A
BarFoo
Blueprint for the city,
based on the maximal
expansion of each artifact
(building, district).
Fo
version 1
Bar
Richard Wettel and Michele
CodeCity
Consistent locality
32
A
BarFoo
Blueprint for the city,
based on the maximal
expansion of each artifact
(building, district).
Fo
version 1
Bar
A
Foo Ba
version 2
Richard Wettel and Michele
CodeCity
Consistent locality
32
A
BarFoo
Blueprint for the city,
based on the maximal
expansion of each artifact
(building, district).
Fo
version 1
Bar
A
Foo Ba
version 2
Foo
A
version 3
Richard Wettel and Michele
CodeCity
Age map
33
Bricks position is
chronological
neighbors are contemporary class C
Richard Wettel and Michele
CodeCity
Superficial glimpse in the past.
color layer according to age (number of versions)
Age map
33
Bricks position is
chronological
neighbors are contemporary class C
Richard Wettel and Michele
CodeCity
Superficial glimpse in the past.
color layer according to age (number of versions)
Age map
33
1N
Bricks position is
chronological
neighbors are contemporary class C
Richard Wettel and Michele
CodeCity
Superficial glimpse in the past.
color layer according to age (number of versions)
Age map
33
1N
Bricks position is
chronological
neighbors are contemporary class C
Richard Wettel and Michele
CodeCity
Superficial glimpse in the past.
color layer according to age (number of versions)
Age map
33
1N
Bricks position is
chronological
neighbors are contemporary class C
m4
m1
m3
m5
m7
m6
m2
Richard Wettel and Michele
CodeCity
Age map interpretation
34
age: 1 2 3 4 5 6 7 8
Richard Wettel and Michele
CodeCity
Age map interpretation
34
age: 1 2 3 4 5 6 7 8
stable
very old
Richard Wettel and Michele
CodeCity
Age map interpretation
34
age: 1 2 3 4 5 6 7 8
stable
oldvery old
rarely updated
Richard Wettel and Michele
CodeCity
Age map interpretation
34
age: 1 2 3 4 5 6 7 8
stable
youngoldvery old
rarely updated
highly unstable
Richard Wettel and Michele
CodeCity
Age map interpretation
34
age: 1 2 3 4 5 6 7 8
stable
youngoldvery old
rarely updated
highly unstable
very old
updated
often,
rather
unstable
Richard Wettel and Michele
CodeCity
Age map, fine-grained
35
library packages:
java
javax
junit
org.w3c.dom
(classes) AllTests
CH.ifa.draw.standard
CH.ifa.draw.framework
CH.ifa.draw.figures
CH.ifa.draw.test
class DrawApplication
in CH.ifa.draw.application
class StandardDrawingView
in CH.ifa.draw.standard.
Richard Wettel and Michele
CodeCity
Time travel, coarse-grained
36
ArgoUML
Richard Wettel and Michele
CodeCity
Time travel, coarse-grained
36
ArgoUML
Richard Wettel and Michele
CodeCity
Time travel, fine-grained
37
JHotDraw
Richard Wettel and Michele
CodeCity
Time travel, fine-grained
37
JHotDraw
Richard Wettel and Michele
CodeCity
Timeline
38
History of class C
Richard Wettel and Michele
CodeCity
Timeline
38
time
(versions)
m3
m5
History of class C
V1
Richard Wettel and Michele
CodeCity
Timeline
38
time
(versions)
m3
m5 m8
m12
m3
History of class C
V1
V2
Richard Wettel and Michele
CodeCity
Timeline
38
time
(versions)
m3
m5 m8
m12
m3
History of class C
V1
V2
Richard Wettel and Michele
CodeCity
Timeline
38
time
(versions)
m3
m5 m8
m12
m3
m12
m18
History of class C
V1
V2
V3
Richard Wettel and Michele
CodeCity
Timeline
38
time
(versions)
m3
m5 m8
m12
m3
m12
m18
History of class C
V1
V2
V3
Richard Wettel and Michele
CodeCity
Examples of timelines
39
Richard Wettel and Michele
CodeCity
Examples of timelines
39
Richard Wettel and Michele
CodeCity
Scripting cities
40
Richard Wettel and Michele
CodeCity
On relationships
41
The tool
Richard Wettel and Michele
CodeCity
Tool chain
43
iPlasma
Moose
CodeCity
model
exchange
parsing &
metric computation
Jun
rendering
VisualWorks 7.6
Richard Wettel and Michele
CodeCity
Cityscapes
44
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
Richard Wettel and Michele
CodeCity
Cityscapes
44
System Languag
e
NOP NOC kLO
C
Azureus Java 457 4734 274
ArgoUML Java 144 2542 137
JHotDraw Java 72 998 30
iText Java 149 1250 80
Jmol Java 105 1032 85
JDK 1.5
core
Java 137 4715 160
Moose Smalltal
k
278 961 32
Jun Smalltal
k
288 2236 351
CodeCity Smalltal
k
129 291 18
ScumVM C++ 18 1331 105
1.25 million
LOC
http://www.inf.unisi.ch/phd/wettel/
codecity.html
http://www.inf.unisi.ch/phd/wettel/
codecity.html
over
1100
downloads
since March
2008
!
http://www.inf.unisi.ch/phd/wettel/
codecity.html
over
1100
downloads
since March
2008
!
http://www.inf.unisi.ch/phd/wettel/
codecity.html
^ Smalltalk
over
1100
downloads
since March
2008
!

More Related Content

PDF
Konfigurasi VLAN di SwitchOS MikroTik
PDF
Cellular architecture
DOCX
KERANGKA DASAR-DASAR TEKNIK JARINGAN KOMPUTER DAN TELEKOMUNIKASI.docx
PPT
A brief history of Telecommunications By Tavo92
PDF
Pengenalan Datacenter
DOC
Laporan 5 routing static
PPTX
3G vs 4G and Cellular Networks
PPTX
Persistencia-NoSQL-y-MongoDB-v-2018.02-Prof.-L.-Straccia.pptx
Konfigurasi VLAN di SwitchOS MikroTik
Cellular architecture
KERANGKA DASAR-DASAR TEKNIK JARINGAN KOMPUTER DAN TELEKOMUNIKASI.docx
A brief history of Telecommunications By Tavo92
Pengenalan Datacenter
Laporan 5 routing static
3G vs 4G and Cellular Networks
Persistencia-NoSQL-y-MongoDB-v-2018.02-Prof.-L.-Straccia.pptx

What's hot (20)

PDF
Modern Telecommunications_ Basic Principles and Practices ( PDFDrive ).pdf
PDF
HIVIDEO PRICE LIST New@Trust SecuritiesBD.pdf
PDF
De-risking Life and Annuity Policy Admin System Conversions
PPTX
Standar komunikasi data
PPTX
Teknologi layanan jaringan 01
PPT
Presentasi Pengenalan Jurusan TKJ SMK Darut Taqwa pada MOS 2013
PPTX
2.Perkembangan Teknologi TJKT.pptx
DOCX
ATP DASAR-DASAR TJKT REFERENSI 2 OK.docx
PPT
9.kompresi teks
PDF
802.11ac Technology Introduction
PPTX
Media Ajar Dasar TJKT.pptx
PPTX
Prinsip ATM
PPT
Pengetahuan Dasar Switching ( Circuit Switching dan Packet Switching )
PPT
Perawatan jaringan.ppt
PDF
Fire Fighting System
PDF
Ptc creo manikin sales presentation
PDF
OOP - Inheritance
PPT
Materi application layer
PDF
SCRUM: How to implements
PDF
Fire Extinguisher and Cabinets Catalog
Modern Telecommunications_ Basic Principles and Practices ( PDFDrive ).pdf
HIVIDEO PRICE LIST New@Trust SecuritiesBD.pdf
De-risking Life and Annuity Policy Admin System Conversions
Standar komunikasi data
Teknologi layanan jaringan 01
Presentasi Pengenalan Jurusan TKJ SMK Darut Taqwa pada MOS 2013
2.Perkembangan Teknologi TJKT.pptx
ATP DASAR-DASAR TJKT REFERENSI 2 OK.docx
9.kompresi teks
802.11ac Technology Introduction
Media Ajar Dasar TJKT.pptx
Prinsip ATM
Pengetahuan Dasar Switching ( Circuit Switching dan Packet Switching )
Perawatan jaringan.ppt
Fire Fighting System
Ptc creo manikin sales presentation
OOP - Inheritance
Materi application layer
SCRUM: How to implements
Fire Extinguisher and Cabinets Catalog
Ad

Similar to Code City (20)

PDF
Servi sMART - Servi.ca - Smart Market Platform for Microservices
PDF
LaWzer, a still image codec designed by L. Guillemot
PDF
Smart Markets of Services / ATG meetup Toronto
PDF
3XN BIM Environment, A case study of Architecture firm
PDF
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...
PPTX
Ibrahim Naeem BIM Projects Portfolio
PPTX
Digital-Logic-Design-Project-16-bit-and-32-bit-Decoder.pptx
PDF
Algebraic Number Theory And Code Design For Rayleigh Fading Channels Foundati...
PPT
rapid prototyping, used in engineering field.ppt
PPT
Analysis of software architectures
PDF
Evolutionary Machine Intelligence in Smart Markets of microservices
PPTX
Semantic-Aware Code Model: Elevating the Future of Software Development
PPT
Cs 1023 lec 11 dsse (week 4)
PDF
Joseph Yoder : Being Agile about Architecture
PDF
From Copycat Codelets to an AI Market Internet Protocol
PDF
Een andere kijk op Microservices
PDF
Open-source Observability for Your LLM Applications... Tracing your chains!.pdf
PDF
VLSI lab manual Part A, VTU 7the sem KIT-tiptur
PDF
Monitoring Challenges - Monitorama 2016 - Monitoringless
PDF
Hatii seminar 2014 - The emerging needs and the long standing issues curating...
Servi sMART - Servi.ca - Smart Market Platform for Microservices
LaWzer, a still image codec designed by L. Guillemot
Smart Markets of Services / ATG meetup Toronto
3XN BIM Environment, A case study of Architecture firm
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...
Ibrahim Naeem BIM Projects Portfolio
Digital-Logic-Design-Project-16-bit-and-32-bit-Decoder.pptx
Algebraic Number Theory And Code Design For Rayleigh Fading Channels Foundati...
rapid prototyping, used in engineering field.ppt
Analysis of software architectures
Evolutionary Machine Intelligence in Smart Markets of microservices
Semantic-Aware Code Model: Elevating the Future of Software Development
Cs 1023 lec 11 dsse (week 4)
Joseph Yoder : Being Agile about Architecture
From Copycat Codelets to an AI Market Internet Protocol
Een andere kijk op Microservices
Open-source Observability for Your LLM Applications... Tracing your chains!.pdf
VLSI lab manual Part A, VTU 7the sem KIT-tiptur
Monitoring Challenges - Monitorama 2016 - Monitoringless
Hatii seminar 2014 - The emerging needs and the long standing issues curating...
Ad

More from ESUG (20)

PDF
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
PDF
Micromaid: A simple Mermaid-like chart generator for Pharo
PDF
Directing Generative AI for Pharo Documentation
PDF
Even Lighter Than Lightweiht: Augmenting Type Inference with Primitive Heuris...
PDF
Composing and Performing Electronic Music on-the-Fly with Pharo and Coypu
PDF
Gamifying Agent-Based Models in Cormas: Towards the Playable Architecture for...
PDF
Analysing Python Machine Learning Notebooks with Moose
PDF
FASTTypeScript metamodel generation using FAST traits and TreeSitter project
PDF
Migrating Katalon Studio Tests to Playwright with Model Driven Engineering
PDF
Package-Aware Approach for Repository-Level Code Completion in Pharo
PDF
Evaluating Benchmark Quality: a Mutation-Testing- Based Methodology
PDF
An Analysis of Inline Method Refactoring
PDF
Identification of unnecessary object allocations using static escape analysis
PDF
Control flow-sensitive optimizations In the Druid Meta-Compiler
PDF
Clean Blocks (IWST 2025, Gdansk, Poland)
PDF
Encoding for Objects Matters (IWST 2025)
PDF
Challenges of Transpiling Smalltalk to JavaScript
PDF
Immersive experiences: what Pharo users do!
PDF
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
PDF
Cavrois - an Organic Window Management (ESUG 2025)
ShowUs: Pharo Stream Deck (ESUG 2025, Gdansk)
Micromaid: A simple Mermaid-like chart generator for Pharo
Directing Generative AI for Pharo Documentation
Even Lighter Than Lightweiht: Augmenting Type Inference with Primitive Heuris...
Composing and Performing Electronic Music on-the-Fly with Pharo and Coypu
Gamifying Agent-Based Models in Cormas: Towards the Playable Architecture for...
Analysing Python Machine Learning Notebooks with Moose
FASTTypeScript metamodel generation using FAST traits and TreeSitter project
Migrating Katalon Studio Tests to Playwright with Model Driven Engineering
Package-Aware Approach for Repository-Level Code Completion in Pharo
Evaluating Benchmark Quality: a Mutation-Testing- Based Methodology
An Analysis of Inline Method Refactoring
Identification of unnecessary object allocations using static escape analysis
Control flow-sensitive optimizations In the Druid Meta-Compiler
Clean Blocks (IWST 2025, Gdansk, Poland)
Encoding for Objects Matters (IWST 2025)
Challenges of Transpiling Smalltalk to JavaScript
Immersive experiences: what Pharo users do!
ChatPharo: an Open Architecture for Understanding How to Talk Live to LLMs
Cavrois - an Organic Window Management (ESUG 2025)

Recently uploaded (20)

PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Getting Started with Data Integration: FME Form 101
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PPTX
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Encapsulation theory and applications.pdf
PDF
Mushroom cultivation and it's methods.pdf
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPT
Teaching material agriculture food technology
PPTX
Machine Learning_overview_presentation.pptx
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
MIND Revenue Release Quarter 2 2025 Press Release
cloud_computing_Infrastucture_as_cloud_p
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Getting Started with Data Integration: FME Form 101
Reach Out and Touch Someone: Haptics and Empathic Computing
Assigned Numbers - 2025 - Bluetooth® Document
Advanced methodologies resolving dimensionality complications for autism neur...
TechTalks-8-2019-Service-Management-ITIL-Refresh-ITIL-4-Framework-Supports-Ou...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Encapsulation theory and applications.pdf
Mushroom cultivation and it's methods.pdf
Univ-Connecticut-ChatGPT-Presentaion.pdf
Teaching material agriculture food technology
Machine Learning_overview_presentation.pptx
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Diabetes mellitus diagnosis method based random forest with bat algorithm
Building Integrated photovoltaic BIPV_UPV.pdf
Group 1 Presentation -Planning and Decision Making .pptx
Network Security Unit 5.pdf for BCA BBA.
MIND Revenue Release Quarter 2 2025 Press Release

Code City

  • 1. Richard Wettel and Michele Lanza University of Lugano, CH Code City
  • 3. Richard Wettel and Michele CodeCity The city metaphor 3
  • 4. Richard Wettel and Michele CodeCity The city metaphor 3 domain mapping classes buildings package s districts system city
  • 5. Richard Wettel and Michele CodeCity The city metaphor 3 domain mapping classes buildings package s districts system city
  • 6. Richard Wettel and Michele CodeCity The city metaphor 3 domain mapping classes buildings package s districts system city
  • 7. Richard Wettel and Michele CodeCity The city metaphor 3 domain mapping classes buildings package s districts system city
  • 8. Richard Wettel and Michele CodeCity The city metaphor 3 domain mapping classes buildings package s districts system city class metric building propertynumber of methods (NOM) height number of attributes (NOA) width, length
  • 9. Richard Wettel and Michele CodeCity The city metaphor 3 domain mapping classes buildings package s districts system city package metric district propertynesting level color class metric building propertynumber of methods (NOM) height number of attributes (NOA) width, length
  • 10. Richard Wettel and Michele CodeCity “Reading” a code city 4
  • 11. Richard Wettel and Michele CodeCity “Reading” a code city 4 skyscrapers (NOM, NOA)
  • 12. Richard Wettel and Michele CodeCity “Reading” a code city 4 skyscrapers (NOM, NOA) parking lots (NOM, NOA)
  • 13. Richard Wettel and Michele CodeCity “Reading” a code city 4 skyscrapers (NOM, NOA) parking lots (NOM, NOA) office buildings (NOM, NOA)
  • 15. Richard Wettel and Michele CodeCity 1. Identity mapping 6 NOM heightf(x) = x
  • 16. Richard Wettel and Michele CodeCity 1. Identity mapping 6 NOM heightf(x) = x
  • 17. Richard Wettel and Michele CodeCity 1. Identity mapping 6 NOM heightf(x) = x
  • 18. Richard Wettel and Michele CodeCity Identity mapping applied 7
  • 19. Richard Wettel and Michele CodeCity 2. Linear mapping 8 NOM heightf(x) = ax + b
  • 20. Richard Wettel and Michele CodeCity 2. Linear mapping 8 NOM heightf(x) = ax + b
  • 21. Richard Wettel and Michele CodeCity 2. Linear mapping 8 NOM heightf(x) = ax + b
  • 22. Richard Wettel and Michele CodeCity 2. Linear mapping 8 NOM heightf(x) = ax + b
  • 23. Richard Wettel and Michele CodeCity Linear mapping applied 9
  • 24. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering
  • 25. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering very high high average low very low
  • 26. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering very high high average low very low
  • 27. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering very high high average low very low upper quartile lower quartile median lower whisker upper whisker
  • 28. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering very high high average low very low upper quartile lower quartile median lower whisker upper whisker
  • 29. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering very high high average low very low
  • 30. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering very high high average low very low
  • 31. Richard Wettel and Michele CodeCity 3. Boxplot-based mapping 10 NOM heightclustering very high high average low very low
  • 32. Richard Wettel and Michele CodeCity Boxplot-based mapping applied 11
  • 33. Richard Wettel and Michele CodeCity 4. Threshold-based mapping 12 NOM heightclustering
  • 34. Richard Wettel and Michele CodeCity 4. Threshold-based mapping 12 NOM heightclustering very high high average low very low
  • 35. Richard Wettel and Michele CodeCity 4. Threshold-based mapping 12 NOM heightclustering very high high average low very low
  • 36. Richard Wettel and Michele CodeCity 4. Threshold-based mapping 12 NOM heightclustering very high high average low very low
  • 37. Richard Wettel and Michele CodeCity 4. Threshold-based mapping 12 NOM heightclustering very high high average low very low
  • 38. Richard Wettel and Michele CodeCity 4. Threshold-based mapping 12 NOM heightclustering very high high average low very low
  • 39. Richard Wettel and Michele CodeCity 4. Threshold-based mapping 12 NOM heightclustering very high high average low very low
  • 40. Richard Wettel and Michele CodeCity Threshold-based mapping applied 13
  • 41. Richard Wettel and Michele CodeCity Mappings compared 14 identit y linear boxplot- basedthreshold- based
  • 42. Richard Wettel and Michele CodeCity Mappings compared 14 identit y linear boxplot- basedthreshold- based
  • 43. Richard Wettel and Michele CodeCity Mappings compared 14 identit y linear boxplot- basedthreshold- based
  • 44. Richard Wettel and Michele CodeCity Mappings compared 14 identit y linear boxplot- basedthreshold- based
  • 45. Richard Wettel and Michele CodeCity Mappings compared 14 identit y linear boxplot- basedthreshold- based
  • 47. Richard Wettel and Michele CodeCity Reverse-engineering ArgoUML 16
  • 48. Richard Wettel and Michele CodeCity Reverse-engineering ArgoUML 16
  • 49. Richard Wettel and Michele CodeCity Reverse-engineering ArgoUML 16
  • 50. Richard Wettel and Michele CodeCity The twin towers 17
  • 51. Richard Wettel and Michele CodeCity Facade 1 attribute 337 methods The twin towers 17
  • 52. Richard Wettel and Michele CodeCity Facade 1 attribute 337 methods The twin towers 17 FacadeMDRI mpl 3 attribute 349 methods
  • 53. Richard Wettel and Michele CodeCity Facade 1 attribute 337 methods The twin towers 17 Is there anybody out FacadeMDRI mpl 3 attribute 349 methods
  • 54. Richard Wettel and Michele CodeCity Facade 1 attribute 337 methods The twin towers 17 FacadeMDRI mpl 3 attribute 349 methods
  • 55. Richard Wettel and Michele CodeCity Hotels, parking lots, duplication 18
  • 56. Richard Wettel and Michele CodeCity Hotels, parking lots, duplication 18 org.argouml.language. java.generator JavaTokenType s146 attributes 0 methods JavaRecognizer 24 attributes 91 methods
  • 57. Richard Wettel and Michele CodeCity Hotels, parking lots, duplication 18 org.argouml.language. java.generator JavaTokenType s146 attributes 0 methods JavaRecognizer 24 attributes 91 methods STDCTokenTy pes152 attributes 0 methods CPPParser 85 attributes 204 methods org.argouml.uml.reveng.class file
  • 58. Richard Wettel and Michele CodeCity Hotels, parking lots, duplication 18 org.argouml.language. java.generator JavaTokenType s146 attributes 0 methods JavaRecognizer 24 attributes 91 methods STDCTokenTy pes152 attributes 0 methods CPPParser 85 attributes 204 methods JavaTokenTyp es173 attributes0 methods JavaRecogniz er79 attributes 176 methods org.argouml.uml.reveng.java org.argouml.uml.reveng.class file
  • 59. Richard Wettel and Michele CodeCity Hotels, parking lots, duplication 18 org.argouml.language. java.generator JavaTokenType s146 attributes 0 methods JavaRecognizer 24 attributes 91 methods STDCTokenTy pes152 attributes 0 methods CPPParser 85 attributes 204 methods JavaTokenTyp es173 attributes0 methods JavaRecogniz er79 attributes 176 methods org.argouml.uml.reveng.java org.argouml.uml.reveng.class file JavaTokenType s145 attributes 0 methods
  • 60. Richard Wettel and Michele CodeCity Hotels, parking lots, duplication 18 org.argouml.language. java.generator JavaTokenType s146 attributes 0 methods JavaRecognizer 24 attributes 91 methods STDCTokenTy pes152 attributes 0 methods CPPParser 85 attributes 204 methods JavaTokenTyp es173 attributes0 methods JavaRecogniz er79 attributes 176 methods org.argouml.uml.reveng.java org.argouml.uml.reveng.class file JavaTokenType s145 attributes 0 methods JavaRecognizer 22 attributes 88 methods
  • 61. Looking at the design
  • 62. Richard Wettel and Michele CodeCity On software design... 20
  • 63. Richard Wettel and Michele CodeCity On software design... Definitions bad smells [Beck & Fowler 1998], design flaws heuristics [Riel 2000], principles [Martin 2002], patterns [GoF 1995] 20
  • 64. Richard Wettel and Michele CodeCity On software design... Definitions bad smells [Beck & Fowler 1998], design flaws heuristics [Riel 2000], principles [Martin 2002], patterns [GoF 1995] Techniques detection strategies for the design flaws 20
  • 65. Richard Wettel and Michele CodeCity On software design... Definitions bad smells [Beck & Fowler 1998], design flaws heuristics [Riel 2000], principles [Martin 2002], patterns [GoF 1995] Techniques detection strategies for the design flaws Visualization ? 20
  • 66. Richard Wettel and Michele CodeCity The God Class detection strategy 21
  • 67. Richard Wettel and Michele CodeCity God classes of JDK 1.5 in Moose 22
  • 68. Richard Wettel and Michele CodeCity God classes of JDK in CodeCity 23
  • 69. Richard Wettel and Michele CodeCity Class-level disharmony maps 24 KeyEvent (NOA 205, NOM 18) java.awt.event InputEvent (NOA 21, NOM 14) Frame (NOA 33, NOM 38) java.awt.geom Container (NOA 21, NOM 127) Component (NOA 88, NOM 280) java.util.concurrent.locks AbstractQueuedSynchronizer (NOA 9, NOM 54) String (NOA 7, NOM 81) Event (NOA 84, NOM 14) Class (NOA 27, NOM 107) BigInteger (NOA 28, NOM 103) BigDecimal (NOA 18, NOM 96) Security (NOA 3, NOM 30) java.util.regex Pattern (NOA 29, NOM 66) Matcher (NOA 17, NOM 38) LogRecord (NOA 17, NOM 28) Logger (NOA 18, NOM 53) Font (NOA 34, NOM 78) KeyboardFocusManager (NOA 33, NOM 94) Frame (NOA 33, NOM 38) Calendar (NOA 81, NOM 71) java.util.logging JDK 1.5
  • 70. Richard Wettel and Michele CodeCity Class-level disharmony ma 25 org.argouml.reveng.java Modeller (NOA 15, NOM 52) JavaRecognizer (NOA 79, NOM 176) org.argouml.reveng.classfile SimpleByteLexer$GeneratorCPP (NOA 34, NOM 100) SimpleByteLexer$CPPParser (NOA 85, NOM 204) SimpleByteLexer$GeneratorPHP4 (NOA 4, NOM 33) org.argouml.diagram.ui FigNodeModelElement (NOA 39, NOM 98) FigEdgeModelElement (NOA 13, NOM 76) FigAssociation (NOA 8, NOM 17) JavaRecognizer (NOA 24, NOM 91) GeneratorJava (NOA 11, NOM 66) JavaLexer (NOA 9, NOM 72) org.argouml.language.java.generator org.argouml.uml.notation.uml org.argouml.model.mdr FacadeMDRImpl (NOA 3, NOM 349) CoreHelperMDRImpl (NOA 3, NOM 349) Facade (NOA 1, NOM 337) JavaTokenTypes (NOA 173, NOM 0) UmlFactoryMDRImpl (NOA 9, NOM 22) ArgoUML
  • 71. Richard Wettel and Michele CodeCity Granularity of representation 26 NOM=7 NOA = 2 NOA = 2 class C coarse
  • 72. Richard Wettel and Michele CodeCity Granularity of representation 26 NOM=7 NOA = 2 NOA = 2 class C coarse fine-grained
  • 73. Richard Wettel and Michele CodeCity Granularity of representation 26 NOM=7 NOA = 2 NOA = 2 class C class C coarse fine-grained
  • 74. Richard Wettel and Michele CodeCity Granularity of representation 26 NOM=7 NOA = 2 NOA = 2 class C class C m4 m1 m3 m5 m7 m6 m2 coarse fine-grained
  • 75. Richard Wettel and Michele CodeCity 27 Feature envy map Jmol
  • 76. Richard Wettel and Michele CodeCity 27 1,500 methods (25 %) Feature envy map Jmol
  • 77. Richard Wettel and Michele CodeCity Shotgun surgery map 28 ArgoUM L
  • 78. Richard Wettel and Michele CodeCity Shotgun surgery map 28 ArgoUM L
  • 79. Richard Wettel and Michele CodeCity Shotgun surgery map 28 ArgoUM L
  • 81. Richard Wettel and Michele CodeCity Modeling history: Hismo 30 Class
  • 82. Richard Wettel and Michele CodeCity Modeling history: Hismo 30 Class time
  • 83. Richard Wettel and Michele CodeCity Modeling history: Hismo 30 Class Class Version timetimestamp N
  • 84. Richard Wettel and Michele CodeCity Modeling history: Hismo 30 Class Class Version ... timetimestamp N Class Version Class timestamp 2
  • 85. Richard Wettel and Michele CodeCity Modeling history: Hismo 30 Class Class Version ... timetimestamp N Class Version Class timestamp 1 Class Version Class timestamp 2
  • 86. Richard Wettel and Michele CodeCity Modeling history: Hismo 30 Class Class Version Class History ... timetimestamp N Class Version Class timestamp 1 Class Version Class timestamp 2
  • 87. Richard Wettel and Michele CodeCity Visualizing evolution 31 Time travel Age map Timeline fine
  • 88. Richard Wettel and Michele CodeCity Visualizing evolution 31 Time travel Age map Timeline fine
  • 89. Richard Wettel and Michele CodeCity Visualizing evolution 31 Time travel Age map Timeline fine
  • 90. Richard Wettel and Michele CodeCity Consistent locality 32 A BarFoo Blueprint for the city, based on the maximal expansion of each artifact (building, district).
  • 91. Richard Wettel and Michele CodeCity Consistent locality 32 A BarFoo Blueprint for the city, based on the maximal expansion of each artifact (building, district). Fo version 1 Bar
  • 92. Richard Wettel and Michele CodeCity Consistent locality 32 A BarFoo Blueprint for the city, based on the maximal expansion of each artifact (building, district). Fo version 1 Bar A Foo Ba version 2
  • 93. Richard Wettel and Michele CodeCity Consistent locality 32 A BarFoo Blueprint for the city, based on the maximal expansion of each artifact (building, district). Fo version 1 Bar A Foo Ba version 2 Foo A version 3
  • 94. Richard Wettel and Michele CodeCity Age map 33 Bricks position is chronological neighbors are contemporary class C
  • 95. Richard Wettel and Michele CodeCity Superficial glimpse in the past. color layer according to age (number of versions) Age map 33 Bricks position is chronological neighbors are contemporary class C
  • 96. Richard Wettel and Michele CodeCity Superficial glimpse in the past. color layer according to age (number of versions) Age map 33 1N Bricks position is chronological neighbors are contemporary class C
  • 97. Richard Wettel and Michele CodeCity Superficial glimpse in the past. color layer according to age (number of versions) Age map 33 1N Bricks position is chronological neighbors are contemporary class C
  • 98. Richard Wettel and Michele CodeCity Superficial glimpse in the past. color layer according to age (number of versions) Age map 33 1N Bricks position is chronological neighbors are contemporary class C m4 m1 m3 m5 m7 m6 m2
  • 99. Richard Wettel and Michele CodeCity Age map interpretation 34 age: 1 2 3 4 5 6 7 8
  • 100. Richard Wettel and Michele CodeCity Age map interpretation 34 age: 1 2 3 4 5 6 7 8 stable very old
  • 101. Richard Wettel and Michele CodeCity Age map interpretation 34 age: 1 2 3 4 5 6 7 8 stable oldvery old rarely updated
  • 102. Richard Wettel and Michele CodeCity Age map interpretation 34 age: 1 2 3 4 5 6 7 8 stable youngoldvery old rarely updated highly unstable
  • 103. Richard Wettel and Michele CodeCity Age map interpretation 34 age: 1 2 3 4 5 6 7 8 stable youngoldvery old rarely updated highly unstable very old updated often, rather unstable
  • 104. Richard Wettel and Michele CodeCity Age map, fine-grained 35 library packages: java javax junit org.w3c.dom (classes) AllTests CH.ifa.draw.standard CH.ifa.draw.framework CH.ifa.draw.figures CH.ifa.draw.test class DrawApplication in CH.ifa.draw.application class StandardDrawingView in CH.ifa.draw.standard.
  • 105. Richard Wettel and Michele CodeCity Time travel, coarse-grained 36 ArgoUML
  • 106. Richard Wettel and Michele CodeCity Time travel, coarse-grained 36 ArgoUML
  • 107. Richard Wettel and Michele CodeCity Time travel, fine-grained 37 JHotDraw
  • 108. Richard Wettel and Michele CodeCity Time travel, fine-grained 37 JHotDraw
  • 109. Richard Wettel and Michele CodeCity Timeline 38 History of class C
  • 110. Richard Wettel and Michele CodeCity Timeline 38 time (versions) m3 m5 History of class C V1
  • 111. Richard Wettel and Michele CodeCity Timeline 38 time (versions) m3 m5 m8 m12 m3 History of class C V1 V2
  • 112. Richard Wettel and Michele CodeCity Timeline 38 time (versions) m3 m5 m8 m12 m3 History of class C V1 V2
  • 113. Richard Wettel and Michele CodeCity Timeline 38 time (versions) m3 m5 m8 m12 m3 m12 m18 History of class C V1 V2 V3
  • 114. Richard Wettel and Michele CodeCity Timeline 38 time (versions) m3 m5 m8 m12 m3 m12 m18 History of class C V1 V2 V3
  • 115. Richard Wettel and Michele CodeCity Examples of timelines 39
  • 116. Richard Wettel and Michele CodeCity Examples of timelines 39
  • 117. Richard Wettel and Michele CodeCity Scripting cities 40
  • 118. Richard Wettel and Michele CodeCity On relationships 41
  • 120. Richard Wettel and Michele CodeCity Tool chain 43 iPlasma Moose CodeCity model exchange parsing & metric computation Jun rendering VisualWorks 7.6
  • 121. Richard Wettel and Michele CodeCity Cityscapes 44
  • 122. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 123. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 124. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 125. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 126. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 127. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 128. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 129. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 130. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 131. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 132. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 133. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105
  • 134. Richard Wettel and Michele CodeCity Cityscapes 44 System Languag e NOP NOC kLO C Azureus Java 457 4734 274 ArgoUML Java 144 2542 137 JHotDraw Java 72 998 30 iText Java 149 1250 80 Jmol Java 105 1032 85 JDK 1.5 core Java 137 4715 160 Moose Smalltal k 278 961 32 Jun Smalltal k 288 2236 351 CodeCity Smalltal k 129 291 18 ScumVM C++ 18 1331 105 1.25 million LOC