CodeCity
Visual Exploration of
Large-Scale Evolving Software
                     Richard Wettel
                     Univ...
understanding software is




                    expensive
read to understand
read to understand

system of 1   million lines of source code
read to understand

system of 1   million lines of source code
* 2 lines/second         = 2 million seconds
read to understand

system of 1   million lines of source code
* 2 lines/second         = 2 million seconds

/ 3600 second...
read to understand

system of 1   million lines of source code
* 2 lines/second         = 2 million seconds

/ 3600 second...
read to understand

system of 1   million lines of source code
* 2 lines/second         = 2 million seconds

/ 3600 second...
read != understand

system of 1   million lines of source code
* 2 lines/second         = 2 million seconds

/ 3600 second...
read != understand




                                                       MLOC
system of 1   million lines of source c...
read != understand




                                                         MLOC
                                     ...
software systems are
software systems are

        large
software systems are

        large
 complex
software systems are

        large
 complex
                ev     l g
                   o vin
“Software is intangible,
having no physical
shape or size”.
      [Ball & Eick, IEEE Computer 1996]
seeing
is understanding
vision: software systems as cities
the city metaphor
the city metaphor
the city metaphor




    class building
 package district
the city metaphor




    class building
 package district
the city metaphor
      number of methods (NOM) height

      number of attributes (NOA) base size

    number of lines of...
the city metaphor
      number of methods (NOM) height

      number of attributes (NOA) base size

    number of lines of...
application roadmap
application roadmap

  Program
Comprehension
application roadmap

  Program       Software
Comprehension   Evolution
application roadmap

  Program       Software    Software
Comprehension   Evolution    Design
application 1:   program comprehension
ArgoUML v. 0.23.4
1’800 classes, 100 packages   decoding a code city
ArgoUML v. 0.23.4
1’800 classes, 100 packages   decoding a code city

                                         massive bui...
ArgoUML v. 0.23.4
1’800 classes, 100 packages      decoding a code city
                                      FacadeMDRImp...
ArgoUML v. 0.23.4
 1’800 classes, 100 packages      decoding a code city
                                       FacadeMDRI...
ArgoUML v. 0.23.4
 1’800 classes, 100 packages      decoding a code city
                                       FacadeMDRI...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
code cities
System     Language NOP NOC kLOC
CodeCity   Smalltalk     34    173     29
ScummVM C++              16    981 ...
real scale
    Eclipse




                                ScummVM   CodeCity

JDK 1.5

                     JHotDraw     ...
application 2:   software evolution
consistent locality
city blueprint, based on the maximal
expansion of each artifact (building, district).         Bar
    ...
consistent locality
city blueprint, based on the maximal
expansion of each artifact (building, district).         Bar
    ...
consistent locality
city blueprint, based on the maximal
expansion of each artifact (building, district).         Bar
    ...
consistent locality
city blueprint, based on the maximal
expansion of each artifact (building, district).           Bar
  ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
time traveling example                                                      ArgoUML
                                      ...
coarse vs fine-grained granularity

 class C
                 NOM = 7
             A
           NO




  NO
    A
coarse vs fine-grained granularity

 class C
                 NOM = 7




                           c las sC
             ...
coarse vs fine-grained granularity

 class C
                                     m6
                 NOM = 7



          ...
coarse vs fine-grained granularity

 class C                                        new
                                   ...
age map example        JHotDraw
                       8 samples, 3 years




age: 1 2 3 4 5 6 7 8
age map patterns
age: 1 2 3 4 5 6 7 8
age map patterns
age: 1 2 3 4 5 6 7 8



   stable




  very old
age map patterns
age: 1 2 3 4 5 6 7 8



   stable




                rarely updated




  very old             old
age map patterns
age: 1 2 3 4 5 6 7 8



   stable
                                 highly unstable


                rare...
updated often,
age map patterns                      rather unstable


age: 1 2 3 4 5 6 7 8



   stable
                 ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
time travel + age maps   JHotDraw
                         8 samples, 3 years




  October 2000
    March 2001
September ...
timeline by example
timeline by example




1887 Sep.   1887 Dec.   1888 Mar.   1888 Jun.   1888 Sep.   1888 Dec.   1889 Mar.
code city timelines




               ve r s. 1
      c lass
code city timelines



   m7
                 m6
        m5
  m3
                  m2
        m1
                 ve r s. ...
code city timelines



   m7
                 m6
        m5
  m3                                           ti me
         ...
code city timelines



   m7
                 m6
        m5                                s. 2
  m3                      ...
code city timelines
                                     m12
                             m11
                            ...
code city timelines
                                     m12
                             m11
                            ...
code city timelines
                                     m12
                             m11
                            ...
code city timelines                                           m17
                                                        ...
code city timelines                                           m17
                                                        ...
class timeline examples




StandardDrawingView
     8 versions

     JHotDraw
class timeline examples




StandardDrawingView   GeneratorJava
     8 versions        9 versions

     JHotDraw          ...
class timeline examples




StandardDrawingView   GeneratorJava      Eval
     8 versions        9 versions     19 version...
timeline correlation       Eval
         Jmol      Viewer



TransformManager




 JmolViewer
timeline correlation       Eval
         Jmol      Viewer



TransformManager




 JmolViewer
application 3:   design analysis
detecting design problems
detecting design problems

  access to
foreign data
detecting design problems

   access to
 foreign data


  weighted
method count
detecting design problems

   access to
 foreign data


  weighted
method count


      tight
class cohesion
design problems in numbers
disharmony map: focus + context




65 God classes


java namespace
 of   JDK 1.5
map of multiple disharmonies




                             12 Brain classes
                        16
java namespace  ...
coarse-grained disharmony map
 Brain classes          8
 God classes           30
 Brain & God classes    6
 Data classes ...
fine-grained disharmony map
     Shotgun surgery 210




        package
org.argouml.model

of   ArgoUML
fine-grained design assessment
 Feature envy   1500




    Jmol
tool support
able to visualize Java, C/C++, C#, Smalltalk systems
able to visualize Java, C/C++, C#, Smalltalk systems
able to visualize Java, C/C++, C#, Smalltalk systems


portable
able to visualize Java, C/C++, C#, Smalltalk systems


portable


3’500 downloads (March 2008 - January 2010)
able to visualize Java, C/C++, C#, Smalltalk systems


portable


3’500 downloads (March 2008 - January 2010)


freely ava...
tool demo
Richard Wettel
http://www.inf.usi.ch/phd/wettel




 http://creativecommons.org/licenses/by/3.0/
CodeCity: Visual Exploration of Large-Scale Evolving Software
CodeCity: Visual Exploration of Large-Scale Evolving Software
Upcoming SlideShare
Loading in …5
×

CodeCity: Visual Exploration of Large-Scale Evolving Software

2,750 views

Published on

Slide support for a talk I gave in several occasions to developers in both Bologna (including XPUG) and Lugano (at the JUG meeting).

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,750
On SlideShare
0
From Embeds
0
Number of Embeds
146
Actions
Shares
0
Downloads
204
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide
  • I sistemi software diventano sempre grandi e piu complessi, perche sono sottoposti al processo d’evoluzione. In piu se dovessemo imparare come e arrivato un sistema al suo stato attuale, dobbiamo aggiungere anche la dimensione temporale, e questo rende ancora piu difficile la comprensione del sistema.
  • I sistemi software diventano sempre grandi e piu complessi, perche sono sottoposti al processo d’evoluzione. In piu se dovessemo imparare come e arrivato un sistema al suo stato attuale, dobbiamo aggiungere anche la dimensione temporale, e questo rende ancora piu difficile la comprensione del sistema.
  • I sistemi software diventano sempre grandi e piu complessi, perche sono sottoposti al processo d’evoluzione. In piu se dovessemo imparare come e arrivato un sistema al suo stato attuale, dobbiamo aggiungere anche la dimensione temporale, e questo rende ancora piu difficile la comprensione del sistema.
  • Uno dei problemi maggiori per noi e il fatto che il software non ha una forma o una dimensione fisica, e questo e un problema perche...
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • La mia visione e dunque di visualizzare i sistemi software rapresentandoli tramitte una metafora della cita: la citta del codice
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • Questa metafora le classi sono rappresentati dai edifici della città, mentre i mo`duli del sistema sono i quartieri della cita. Le proprietà visibile dei artefatti della città dimostrano le proprietà delle entità software, le cosiddette metriche software: la altezza di un edificio esprima il numero di metodi della classe in cause, mentre la larghezza della sua base esprima il numero di attributi della classe. I colori dei edifici ci mostrano il numero di righe di codice sorgente (grigio - poche, blue intenso - tante), mentre i colori dei quartieri variano secondo la profondità nella gerarchia di mo`duli.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • ... noi, come esseri umani, ci basiamo tanto sulla visione per capire il mondo intorno a loro, sin dall’inizio della vita. Per questa raggione, io credo che una rappresentazione toccabile dei sistemi software ci offre una modalita di raggionare su di loro e un punto in comune condiviso dai sviluppatori.
  • Ottenere una vista generale del sistema e un grande vantaggio. E noi abbiamo iniziato con la visualisazione di una singola versione di un sistema: la versione corrente.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ecco una prima cita del codice, quella del sistema ArgoUML. E gia possiamo identificare un paio di tipologie degli edifici, formate dalle diverse combinazioni dei valori delle metriche. Ci sono edifici d’impresa, grattacieli, posteggi, o delle case picole.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Ed ecco solo un piccolo “sample” sistemi che abbiamo visualizzato, sistemi scritti in diversi linguaggi di programmazione. Vi invito a osservare come e unica la struttura di ogni cita del codice, perche rifletta la struttura e le caratteristiche del sistema rappresentato. Ecco anche un sistema C++, abbastanza massicio. E da qui comminciano i sistemi Java, di quale probabilmente riconoscerete un paio.
  • Se dovessemo prendere in calcolo le proporzioni reali tra le dimensioni di questi sistemi, la vista generale e un po diversa...
  • Anche se la versione corrente e la piu importante, analizando il passato del sistema, la sua evoluzione, ci fa capire meglio come e arrivato alla forma in quale si trova oggi.
  • Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  • Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  • Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  • Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  • Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • CodeCity ha anche una machina del tempo, che ci permette di viaggiare nella evoluzione del sistema e vedere come si cambia la citta del codice.
  • Dipendendo al nostro interesso, possiamo aumentare il livello di detaglio (la granularità) in CodeCity, per poter vedere anche i metodi delle classi.
  • Dipendendo al nostro interesso, possiamo aumentare il livello di detaglio (la granularità) in CodeCity, per poter vedere anche i metodi delle classi.
  • Dipendendo al nostro interesso, possiamo aumentare il livello di detaglio (la granularità) in CodeCity, per poter vedere anche i metodi delle classi.
  • Le mappe della eta mostrano l’eta degli elementi del sistema, tramite il colore. La scala cromatica varia tra giallo chiaro (per elementi appena creati) e blu scurro (per elementi vecchi come il sistema stesso).
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • Utilizando sempre la granularità fine, si puo anche vedere in una vista tutta la evoluzione di una parte del sistema, come una classe o un intero pacheto.
  • CodeCity: Visual Exploration of Large-Scale Evolving Software

    1. 1. CodeCity Visual Exploration of Large-Scale Evolving Software Richard Wettel University of Lugano, Switzerland Supervisor: Michele Lanza
    2. 2. understanding software is expensive
    3. 3. read to understand
    4. 4. read to understand system of 1 million lines of source code
    5. 5. read to understand system of 1 million lines of source code * 2 lines/second = 2 million seconds
    6. 6. read to understand system of 1 million lines of source code * 2 lines/second = 2 million seconds / 3600 seconds/hours = 560 hours
    7. 7. read to understand system of 1 million lines of source code * 2 lines/second = 2 million seconds / 3600 seconds/hours = 560 hours / 8 working hours/day = 70 days
    8. 8. read to understand system of 1 million lines of source code * 2 lines/second = 2 million seconds / 3600 seconds/hours = 560 hours / 8 working hours/day = 70 days / 20 working days/month = 3+ months
    9. 9. read != understand system of 1 million lines of source code * 2 lines/second = 2 million seconds / 3600 seconds/hours = 560 hours / 8 working hours/day = 70 days / 20 working days/month = 3+ months
    10. 10. read != understand MLOC system of 1 million lines of source code * 2 lines/second = 2 million seconds / 3600 seconds/hours = 560 hours / 8 working hours/day = 70 days / 20 working days/month = 3+ months 1 million
    11. 11. read != understand MLOC 17 million system of 1 million lines of source code * 2 lines/second = 2 million seconds / 3600 seconds/hours = 560 hours / 8 working hours/day = 70 days / 20 working days/month = 3+ months 2.5 million 1 million
    12. 12. software systems are
    13. 13. software systems are large
    14. 14. software systems are large complex
    15. 15. software systems are large complex ev l g o vin
    16. 16. “Software is intangible, having no physical shape or size”. [Ball & Eick, IEEE Computer 1996]
    17. 17. seeing is understanding
    18. 18. vision: software systems as cities
    19. 19. the city metaphor
    20. 20. the city metaphor
    21. 21. the city metaphor class building package district
    22. 22. the city metaphor class building package district
    23. 23. the city metaphor number of methods (NOM) height number of attributes (NOA) base size number of lines of code (LOC) color class building package district
    24. 24. the city metaphor number of methods (NOM) height number of attributes (NOA) base size number of lines of code (LOC) color class building package district nesting level color
    25. 25. application roadmap
    26. 26. application roadmap Program Comprehension
    27. 27. application roadmap Program Software Comprehension Evolution
    28. 28. application roadmap Program Software Software Comprehension Evolution Design
    29. 29. application 1: program comprehension
    30. 30. ArgoUML v. 0.23.4 1’800 classes, 100 packages decoding a code city
    31. 31. ArgoUML v. 0.23.4 1’800 classes, 100 packages decoding a code city massive building CPPParser NOM: 204 NOA: 85 LOC: 9’111
    32. 32. ArgoUML v. 0.23.4 1’800 classes, 100 packages decoding a code city FacadeMDRImpl skyscraper NOM: 349 massive building NOA: 3 LOC: 3’413 CPPParser NOM: 204 NOA: 85 LOC: 9’111
    33. 33. ArgoUML v. 0.23.4 1’800 classes, 100 packages decoding a code city FacadeMDRImpl skyscraper NOM: 349 massive building NOA: 3 LOC: 3’413 CPPParser NOM: 204 NOA: 85 LOC: 9’111 parking lot JavaTokenTypes NOM: 0 NOA: 173 LOC: 0
    34. 34. ArgoUML v. 0.23.4 1’800 classes, 100 packages decoding a code city FacadeMDRImpl skyscraper NOM: 349 massive building NOA: 3 LOC: 3’413 CPPParser NOM: 204 NOA: 85 LOC: 9’111 parking lot JavaTokenTypes PropPanelEvent NOM: 0 NOA: 173 LOC: 0 house NOM: 3 NOA: 2 LOC: 37
    35. 35. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    36. 36. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    37. 37. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    38. 38. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    39. 39. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    40. 40. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    41. 41. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    42. 42. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    43. 43. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    44. 44. code cities System Language NOP NOC kLOC CodeCity Smalltalk 34 173 29 ScummVM C++ 16 981 80 JHotDraw Java 37 600 30 iText Java 101 923 87 jEdit Java 59 966 98 Jmol Java 55 618 114 ArgoUML Java 96 1’768 136 JDK 1.5 Java 664 12’888 1’085 Eclipse Java 1’800 27’900 2’871 ... by example
    45. 45. real scale Eclipse ScummVM CodeCity JDK 1.5 JHotDraw jEdit iText Jmol ArgoUML
    46. 46. application 2: software evolution
    47. 47. consistent locality city blueprint, based on the maximal expansion of each artifact (building, district). Bar Foo A
    48. 48. consistent locality city blueprint, based on the maximal expansion of each artifact (building, district). Bar Foo A version 1 Bar Foo
    49. 49. consistent locality city blueprint, based on the maximal expansion of each artifact (building, district). Bar Foo A version 1 version 2 Bar Bar Foo Foo A
    50. 50. consistent locality city blueprint, based on the maximal expansion of each artifact (building, district). Bar Foo A version 1 version 2 version 3 Bar Bar Foo Foo Foo A A
    51. 51. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    52. 52. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    53. 53. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    54. 54. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    55. 55. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    56. 56. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    57. 57. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    58. 58. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    59. 59. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    60. 60. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    61. 61. time traveling example ArgoUML 10 releases, 7 years 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.24 0.26 0.28 2002 2003 2004 2005 2006 2007 2008 2009
    62. 62. coarse vs fine-grained granularity class C NOM = 7 A NO NO A
    63. 63. coarse vs fine-grained granularity class C NOM = 7 c las sC A NO NO A
    64. 64. coarse vs fine-grained granularity class C m6 NOM = 7 m5 m7 m2 m1 m3 m4 c las sC A NO NO A
    65. 65. coarse vs fine-grained granularity class C new m6 NOM = 7 m5 m7 m2 m1 m3 m4 old c las sC A NO NO A
    66. 66. age map example JHotDraw 8 samples, 3 years age: 1 2 3 4 5 6 7 8
    67. 67. age map patterns age: 1 2 3 4 5 6 7 8
    68. 68. age map patterns age: 1 2 3 4 5 6 7 8 stable very old
    69. 69. age map patterns age: 1 2 3 4 5 6 7 8 stable rarely updated very old old
    70. 70. age map patterns age: 1 2 3 4 5 6 7 8 stable highly unstable rarely updated very old old young
    71. 71. updated often, age map patterns rather unstable age: 1 2 3 4 5 6 7 8 stable highly unstable rarely updated very old old young very old
    72. 72. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    73. 73. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    74. 74. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    75. 75. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    76. 76. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    77. 77. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    78. 78. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    79. 79. time travel + age maps JHotDraw 8 samples, 3 years October 2000 March 2001 September 2001 March 2002 August 2002 January 2003 July 2003 January 2004
    80. 80. timeline by example
    81. 81. timeline by example 1887 Sep. 1887 Dec. 1888 Mar. 1888 Jun. 1888 Sep. 1888 Dec. 1889 Mar.
    82. 82. code city timelines ve r s. 1 c lass
    83. 83. code city timelines m7 m6 m5 m3 m2 m1 ve r s. 1 c lass
    84. 84. code city timelines m7 m6 m5 m3 ti me m2 m1 isto ry ve r s. 1 sh c lass c las
    85. 85. code city timelines m7 m6 m5 s. 2 m3 c lass ver ti me m2 m1 isto ry ve r s. 1 sh c lass c las
    86. 86. code city timelines m12 m11 m10 m9 m7 m6 m5 s. 2 m3 c lass ver ti me m2 m1 isto ry ve r s. 1 sh c lass c las
    87. 87. code city timelines m12 m11 m10 m9 m7 m6 m5 s. 2 m3 c lass ver ti me m2 m1 isto ry ve r s. 1 sh c lass c las
    88. 88. code city timelines m12 m11 m10 m9 m7 ve r s. 3 c lass m6 m5 s. 2 m3 c lass ver ti me m2 m1 isto ry ve r s. 1 sh c lass c las
    89. 89. code city timelines m17 m18 m15 m14 m13 m12 m11 m10 m9 m7 ve r s. 3 c lass m6 m5 s. 2 m3 c lass ver ti me m2 m1 isto ry ve r s. 1 sh c lass c las
    90. 90. code city timelines m17 m18 m15 m14 m13 m12 m11 m10 m9 m7 ve r s. 3 m2 c lass m6 m5 s. 2 m3 c lass ver ti me m2 m1 isto ry ve r s. 1 sh c lass c las
    91. 91. class timeline examples StandardDrawingView 8 versions JHotDraw
    92. 92. class timeline examples StandardDrawingView GeneratorJava 8 versions 9 versions JHotDraw ArgoUML
    93. 93. class timeline examples StandardDrawingView GeneratorJava Eval 8 versions 9 versions 19 versions JHotDraw ArgoUML Jmol
    94. 94. timeline correlation Eval Jmol Viewer TransformManager JmolViewer
    95. 95. timeline correlation Eval Jmol Viewer TransformManager JmolViewer
    96. 96. application 3: design analysis
    97. 97. detecting design problems
    98. 98. detecting design problems access to foreign data
    99. 99. detecting design problems access to foreign data weighted method count
    100. 100. detecting design problems access to foreign data weighted method count tight class cohesion
    101. 101. design problems in numbers
    102. 102. disharmony map: focus + context 65 God classes java namespace of JDK 1.5
    103. 103. map of multiple disharmonies 12 Brain classes 16 java namespace 65 God classes of JDK 1.5 109 Data classes
    104. 104. coarse-grained disharmony map Brain classes 8 God classes 30 Brain & God classes 6 Data classes 17 ArgoUML
    105. 105. fine-grained disharmony map Shotgun surgery 210 package org.argouml.model of ArgoUML
    106. 106. fine-grained design assessment Feature envy 1500 Jmol
    107. 107. tool support
    108. 108. able to visualize Java, C/C++, C#, Smalltalk systems
    109. 109. able to visualize Java, C/C++, C#, Smalltalk systems
    110. 110. able to visualize Java, C/C++, C#, Smalltalk systems portable
    111. 111. able to visualize Java, C/C++, C#, Smalltalk systems portable 3’500 downloads (March 2008 - January 2010)
    112. 112. able to visualize Java, C/C++, C#, Smalltalk systems portable 3’500 downloads (March 2008 - January 2010) freely available at: codecity.inf.usi.ch http://
    113. 113. tool demo
    114. 114. Richard Wettel http://www.inf.usi.ch/phd/wettel http://creativecommons.org/licenses/by/3.0/

    ×