SlideShare a Scribd company logo
1 of 138
Download to read offline
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

What's hot

Neo4j - Cas d'usages pour votre métier
Neo4j - Cas d'usages pour votre métierNeo4j - Cas d'usages pour votre métier
Neo4j - Cas d'usages pour votre métierNeo4j
 
Poster - DevOps Habits @ Microsoft
Poster - DevOps Habits @ MicrosoftPoster - DevOps Habits @ Microsoft
Poster - DevOps Habits @ MicrosoftVSTS Community MSFT
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017Docker, Inc.
 
DBpedia Tutorial - Feb 2015, Dublin
DBpedia Tutorial - Feb 2015, DublinDBpedia Tutorial - Feb 2015, Dublin
DBpedia Tutorial - Feb 2015, Dublinm_ackermann
 
IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X
IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X
IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X Kai Wähner
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice ArchitectureNguyen Tung
 
Life as a SRE at Instana
Life as a SRE at InstanaLife as a SRE at Instana
Life as a SRE at InstanaMarcel Birkner
 
Dev ops, from theory to practice, by vahid rahimian
Dev ops, from theory to practice, by vahid rahimianDev ops, from theory to practice, by vahid rahimian
Dev ops, from theory to practice, by vahid rahimianVahid Rahimian
 
JSON-LD, Schema.org, and Structured data
JSON-LD, Schema.org, and Structured dataJSON-LD, Schema.org, and Structured data
JSON-LD, Schema.org, and Structured dataSante J. Achille
 
Async API and Solace: Enabling the Event-Driven Future
Async API and Solace: Enabling the Event-Driven FutureAsync API and Solace: Enabling the Event-Driven Future
Async API and Solace: Enabling the Event-Driven FutureSolace
 
Graph Analytics with ArangoDB
Graph Analytics with ArangoDBGraph Analytics with ArangoDB
Graph Analytics with ArangoDBArangoDB Database
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)Tom Kocjan
 
Big data بزرگ داده ها
Big data بزرگ داده هاBig data بزرگ داده ها
Big data بزرگ داده هاOmid Sohrabi
 
Service Oriented Architecture
Service Oriented ArchitectureService Oriented Architecture
Service Oriented ArchitectureLuqman Shareef
 

What's hot (20)

Neo4j - Cas d'usages pour votre métier
Neo4j - Cas d'usages pour votre métierNeo4j - Cas d'usages pour votre métier
Neo4j - Cas d'usages pour votre métier
 
Microservices, Containers and Docker
Microservices, Containers and DockerMicroservices, Containers and Docker
Microservices, Containers and Docker
 
Poster - DevOps Habits @ Microsoft
Poster - DevOps Habits @ MicrosoftPoster - DevOps Habits @ Microsoft
Poster - DevOps Habits @ Microsoft
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Introduction to Docker - 2017
Introduction to Docker - 2017Introduction to Docker - 2017
Introduction to Docker - 2017
 
DBpedia Tutorial - Feb 2015, Dublin
DBpedia Tutorial - Feb 2015, DublinDBpedia Tutorial - Feb 2015, Dublin
DBpedia Tutorial - Feb 2015, Dublin
 
IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X
IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X
IIoT / Industry 4.0 with Apache Kafka, Connect, KSQL, Apache PLC4X
 
Microservice Architecture
Microservice ArchitectureMicroservice Architecture
Microservice Architecture
 
Life as a SRE at Instana
Life as a SRE at InstanaLife as a SRE at Instana
Life as a SRE at Instana
 
Dev ops, from theory to practice, by vahid rahimian
Dev ops, from theory to practice, by vahid rahimianDev ops, from theory to practice, by vahid rahimian
Dev ops, from theory to practice, by vahid rahimian
 
DevSecOps Jenkins Pipeline -Security
DevSecOps Jenkins Pipeline -SecurityDevSecOps Jenkins Pipeline -Security
DevSecOps Jenkins Pipeline -Security
 
JSON-LD, Schema.org, and Structured data
JSON-LD, Schema.org, and Structured dataJSON-LD, Schema.org, and Structured data
JSON-LD, Schema.org, and Structured data
 
Async API and Solace: Enabling the Event-Driven Future
Async API and Solace: Enabling the Event-Driven FutureAsync API and Solace: Enabling the Event-Driven Future
Async API and Solace: Enabling the Event-Driven Future
 
Graph Analytics with ArangoDB
Graph Analytics with ArangoDBGraph Analytics with ArangoDB
Graph Analytics with ArangoDB
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Fleet and elastic agent
Fleet and elastic agentFleet and elastic agent
Fleet and elastic agent
 
Big data بزرگ داده ها
Big data بزرگ داده هاBig data بزرگ داده ها
Big data بزرگ داده ها
 
DEVSECOPS.pptx
DEVSECOPS.pptxDEVSECOPS.pptx
DEVSECOPS.pptx
 
Event storming
Event storming Event storming
Event storming
 
Service Oriented Architecture
Service Oriented ArchitectureService Oriented Architecture
Service Oriented Architecture
 

Similar to Code City

Servi sMART - Servi.ca - Smart Market Platform for Microservices
Servi sMART - Servi.ca - Smart Market Platform for MicroservicesServi sMART - Servi.ca - Smart Market Platform for Microservices
Servi sMART - Servi.ca - Smart Market Platform for MicroservicesStefan Ianta
 
LaWzer, a still image codec designed by L. Guillemot
LaWzer, a still image codec designed by L. GuillemotLaWzer, a still image codec designed by L. Guillemot
LaWzer, a still image codec designed by L. GuillemotLudovic Guillemot
 
Smart Markets of Services / ATG meetup Toronto
Smart Markets of Services / ATG meetup TorontoSmart Markets of Services / ATG meetup Toronto
Smart Markets of Services / ATG meetup TorontoStefan Ianta
 
3XN BIM Environment, A case study of Architecture firm
3XN BIM Environment, A case study of Architecture firm3XN BIM Environment, A case study of Architecture firm
3XN BIM Environment, A case study of Architecture firmDuong Binh
 
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...HbBazan
 
Ibrahim Naeem BIM Projects Portfolio
Ibrahim Naeem BIM Projects Portfolio Ibrahim Naeem BIM Projects Portfolio
Ibrahim Naeem BIM Projects Portfolio Ibrahem Naeem
 
Analysis of software architectures
Analysis of software architecturesAnalysis of software architectures
Analysis of software architecturesHoria Constantin
 
Evolutionary Machine Intelligence in Smart Markets of microservices
Evolutionary Machine Intelligence in Smart Markets of microservicesEvolutionary Machine Intelligence in Smart Markets of microservices
Evolutionary Machine Intelligence in Smart Markets of microservicesStefan Ianta
 
Cs 1023 lec 11 dsse (week 4)
Cs 1023 lec 11 dsse (week 4)Cs 1023 lec 11 dsse (week 4)
Cs 1023 lec 11 dsse (week 4)stanbridge
 
Joseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureJoseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureHironori Washizaki
 
From Copycat Codelets to an AI Market Internet Protocol
From Copycat Codelets to an AI Market Internet ProtocolFrom Copycat Codelets to an AI Market Internet Protocol
From Copycat Codelets to an AI Market Internet ProtocolStefan Ianta
 
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...Amazon Web Services
 
VLSI lab manual Part A, VTU 7the sem KIT-tiptur
VLSI lab manual Part A, VTU 7the sem KIT-tipturVLSI lab manual Part A, VTU 7the sem KIT-tiptur
VLSI lab manual Part A, VTU 7the sem KIT-tipturPramod Kumar S
 
Monitoring Challenges - Monitorama 2016 - Monitoringless
Monitoring Challenges - Monitorama 2016 - MonitoringlessMonitoring Challenges - Monitorama 2016 - Monitoringless
Monitoring Challenges - Monitorama 2016 - MonitoringlessAdrian Cockcroft
 
Hatii seminar 2014 - The emerging needs and the long standing issues curating...
Hatii seminar 2014 - The emerging needs and the long standing issues curating...Hatii seminar 2014 - The emerging needs and the long standing issues curating...
Hatii seminar 2014 - The emerging needs and the long standing issues curating...Ruggero Lancia
 
fyp presentation of group 43011 final.pptx
fyp presentation of group 43011 final.pptxfyp presentation of group 43011 final.pptx
fyp presentation of group 43011 final.pptxIIEE - NEDUET
 
Cytoscape CI Chapter 2
Cytoscape CI Chapter 2Cytoscape CI Chapter 2
Cytoscape CI Chapter 2bdemchak
 
Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...
Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...
Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...Daniel Krook
 
Object Detection with Transformers
Object Detection with TransformersObject Detection with Transformers
Object Detection with TransformersDatabricks
 

Similar to Code City (20)

Servi sMART - Servi.ca - Smart Market Platform for Microservices
Servi sMART - Servi.ca - Smart Market Platform for MicroservicesServi sMART - Servi.ca - Smart Market Platform for Microservices
Servi sMART - Servi.ca - Smart Market Platform for Microservices
 
LaWzer, a still image codec designed by L. Guillemot
LaWzer, a still image codec designed by L. GuillemotLaWzer, a still image codec designed by L. Guillemot
LaWzer, a still image codec designed by L. Guillemot
 
Smart Markets of Services / ATG meetup Toronto
Smart Markets of Services / ATG meetup TorontoSmart Markets of Services / ATG meetup Toronto
Smart Markets of Services / ATG meetup Toronto
 
3XN BIM Environment, A case study of Architecture firm
3XN BIM Environment, A case study of Architecture firm3XN BIM Environment, A case study of Architecture firm
3XN BIM Environment, A case study of Architecture firm
 
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...
Clean Architecture A Craftsman’s Guide to Software Structure and Design by Ro...
 
Ibrahim Naeem BIM Projects Portfolio
Ibrahim Naeem BIM Projects Portfolio Ibrahim Naeem BIM Projects Portfolio
Ibrahim Naeem BIM Projects Portfolio
 
Analysis of software architectures
Analysis of software architecturesAnalysis of software architectures
Analysis of software architectures
 
Evolutionary Machine Intelligence in Smart Markets of microservices
Evolutionary Machine Intelligence in Smart Markets of microservicesEvolutionary Machine Intelligence in Smart Markets of microservices
Evolutionary Machine Intelligence in Smart Markets of microservices
 
Cs 1023 lec 11 dsse (week 4)
Cs 1023 lec 11 dsse (week 4)Cs 1023 lec 11 dsse (week 4)
Cs 1023 lec 11 dsse (week 4)
 
Joseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about ArchitectureJoseph Yoder : Being Agile about Architecture
Joseph Yoder : Being Agile about Architecture
 
From Copycat Codelets to an AI Market Internet Protocol
From Copycat Codelets to an AI Market Internet ProtocolFrom Copycat Codelets to an AI Market Internet Protocol
From Copycat Codelets to an AI Market Internet Protocol
 
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
ABD322_Implementing a Flight Simulator Interface Using AI, Virtual Reality, a...
 
Een andere kijk op Microservices
Een andere kijk op MicroservicesEen andere kijk op Microservices
Een andere kijk op Microservices
 
VLSI lab manual Part A, VTU 7the sem KIT-tiptur
VLSI lab manual Part A, VTU 7the sem KIT-tipturVLSI lab manual Part A, VTU 7the sem KIT-tiptur
VLSI lab manual Part A, VTU 7the sem KIT-tiptur
 
Monitoring Challenges - Monitorama 2016 - Monitoringless
Monitoring Challenges - Monitorama 2016 - MonitoringlessMonitoring Challenges - Monitorama 2016 - Monitoringless
Monitoring Challenges - Monitorama 2016 - Monitoringless
 
Hatii seminar 2014 - The emerging needs and the long standing issues curating...
Hatii seminar 2014 - The emerging needs and the long standing issues curating...Hatii seminar 2014 - The emerging needs and the long standing issues curating...
Hatii seminar 2014 - The emerging needs and the long standing issues curating...
 
fyp presentation of group 43011 final.pptx
fyp presentation of group 43011 final.pptxfyp presentation of group 43011 final.pptx
fyp presentation of group 43011 final.pptx
 
Cytoscape CI Chapter 2
Cytoscape CI Chapter 2Cytoscape CI Chapter 2
Cytoscape CI Chapter 2
 
Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...
Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...
Commit to the Cause, Push for Change: Contributing to Call for Code Open Sour...
 
Object Detection with Transformers
Object Detection with TransformersObject Detection with Transformers
Object Detection with Transformers
 

More from ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingESUG
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in PharoESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapESUG
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsESUG
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector TuningESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FutureESUG
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the DebuggerESUG
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing ScoreESUG
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptESUG
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsESUG
 

More from ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Recently uploaded

Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 

Recently uploaded (20)

Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 

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