SlideShare a Scribd company logo
1 of 116
Download to read offline
CodeCity
Visual Exploration of
Large-Scale Evolving Software
                     Richard Wettel
                     University of Lugano, Switzerland
                            Supervisor: Michele Lanza
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 seconds/hours     = 560 hours
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
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
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
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
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
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 code (LOC) color




    class building
 package district
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
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 building
                                                   CPPParser
                                                   NOM: 204
                                                   NOA:    85
                                                   LOC: 9’111
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
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
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
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
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
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
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
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
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
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
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
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
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
real scale
    Eclipse




                                ScummVM   CodeCity

JDK 1.5

                     JHotDraw                jEdit



                                 iText



              Jmol                        ArgoUML
application 2:   software evolution
consistent locality
city blueprint, based on the maximal
expansion of each artifact (building, district).         Bar
                                                   Foo

                                                         A
consistent locality
city blueprint, based on the maximal
expansion of each artifact (building, district).         Bar
                                                   Foo

                                                         A


     version 1

              Bar
   Foo
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
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
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
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
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
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
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
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
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
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
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
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
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
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
             A
           NO




  NO
    A
coarse vs fine-grained granularity

 class C
                                     m6
                 NOM = 7



                                m5
                                          m7
                                     m2

                           m1
                                          m3
                                     m4

                                     c las sC
             A
           NO




  NO
    A
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
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


                rarely updated




  very old             old           young
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
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
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
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
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
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
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
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
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
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. 1
        c lass
code city timelines



   m7
                 m6
        m5
  m3                                           ti me
                  m2
        m1
                                     isto ry
                 ve r s. 1        sh
        c lass               c las
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
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
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
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
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
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
class timeline examples




StandardDrawingView
     8 versions

     JHotDraw
class timeline examples




StandardDrawingView   GeneratorJava
     8 versions        9 versions

     JHotDraw          ArgoUML
class timeline examples




StandardDrawingView   GeneratorJava      Eval
     8 versions        9 versions     19 versions

     JHotDraw          ArgoUML           Jmol
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               65 God classes
of   JDK 1.5                 109 Data classes
coarse-grained disharmony map
 Brain classes          8
 God classes           30
 Brain & God classes    6
 Data classes          17




ArgoUML
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 available at:         codecity.inf.usi.ch
                       http://
tool demo
Richard Wettel
http://www.inf.usi.ch/phd/wettel




 http://creativecommons.org/licenses/by/3.0/

More Related Content

What's hot

M I C R O P R O C E S S O R S A N D I N T E R F A C I N G J N T U M O D E...
M I C R O P R O C E S S O R S  A N D  I N T E R F A C I N G  J N T U  M O D E...M I C R O P R O C E S S O R S  A N D  I N T E R F A C I N G  J N T U  M O D E...
M I C R O P R O C E S S O R S A N D I N T E R F A C I N G J N T U M O D E...guest3f9c6b
 
LOD2 Webinar: The 2nd release of the LOD2 stack
LOD2 Webinar: The 2nd release of the LOD2 stackLOD2 Webinar: The 2nd release of the LOD2 stack
LOD2 Webinar: The 2nd release of the LOD2 stackSemantic Web Company
 
Captura de pacotes no KernelSpace
Captura de pacotes no KernelSpaceCaptura de pacotes no KernelSpace
Captura de pacotes no KernelSpacePeslPinguim
 
A Better Python for the JVM
A Better Python for the JVMA Better Python for the JVM
A Better Python for the JVMTobias Lindaaker
 
Thesis L Leyssenne - November 27th 2009 - Part1
Thesis L Leyssenne - November 27th 2009 - Part1Thesis L Leyssenne - November 27th 2009 - Part1
Thesis L Leyssenne - November 27th 2009 - Part1Laurent Leyssenne
 
Software Defined Data Centers - June 2012
Software Defined Data Centers - June 2012Software Defined Data Centers - June 2012
Software Defined Data Centers - June 2012Brent Salisbury
 
Android Radio Layer Interface
Android Radio Layer InterfaceAndroid Radio Layer Interface
Android Radio Layer InterfaceChun-Yu Wang
 

What's hot (7)

M I C R O P R O C E S S O R S A N D I N T E R F A C I N G J N T U M O D E...
M I C R O P R O C E S S O R S  A N D  I N T E R F A C I N G  J N T U  M O D E...M I C R O P R O C E S S O R S  A N D  I N T E R F A C I N G  J N T U  M O D E...
M I C R O P R O C E S S O R S A N D I N T E R F A C I N G J N T U M O D E...
 
LOD2 Webinar: The 2nd release of the LOD2 stack
LOD2 Webinar: The 2nd release of the LOD2 stackLOD2 Webinar: The 2nd release of the LOD2 stack
LOD2 Webinar: The 2nd release of the LOD2 stack
 
Captura de pacotes no KernelSpace
Captura de pacotes no KernelSpaceCaptura de pacotes no KernelSpace
Captura de pacotes no KernelSpace
 
A Better Python for the JVM
A Better Python for the JVMA Better Python for the JVM
A Better Python for the JVM
 
Thesis L Leyssenne - November 27th 2009 - Part1
Thesis L Leyssenne - November 27th 2009 - Part1Thesis L Leyssenne - November 27th 2009 - Part1
Thesis L Leyssenne - November 27th 2009 - Part1
 
Software Defined Data Centers - June 2012
Software Defined Data Centers - June 2012Software Defined Data Centers - June 2012
Software Defined Data Centers - June 2012
 
Android Radio Layer Interface
Android Radio Layer InterfaceAndroid Radio Layer Interface
Android Radio Layer Interface
 

Similar to CodeCity: Visual Exploration of Large-Scale Evolving Software

Grow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM StackGrow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM StackKeitaSugiyama1
 
Networking interview questions
Networking interview questionsNetworking interview questions
Networking interview questionszahadath
 
Hard IP Core design | Convolution Encoder
Hard IP Core design | Convolution EncoderHard IP Core design | Convolution Encoder
Hard IP Core design | Convolution EncoderArchit Vora
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...AMD Developer Central
 
EvoSpaces - Multi-dimensional Navigation Spaces for Software Evolution
EvoSpaces - Multi-dimensional Navigation Spaces for Software EvolutionEvoSpaces - Multi-dimensional Navigation Spaces for Software Evolution
EvoSpaces - Multi-dimensional Navigation Spaces for Software EvolutionMichele Lanza
 
SAST, CWE, SEI CERT and other smart words from the information security world
SAST, CWE, SEI CERT and other smart words from the information security worldSAST, CWE, SEI CERT and other smart words from the information security world
SAST, CWE, SEI CERT and other smart words from the information security worldAndrey Karpov
 
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft..."Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...Dataconomy Media
 
Creating a Fibonacci Generator in Assembly - by Willem van Ketwich
Creating a Fibonacci Generator in Assembly - by Willem van KetwichCreating a Fibonacci Generator in Assembly - by Willem van Ketwich
Creating a Fibonacci Generator in Assembly - by Willem van KetwichWillem van Ketwich
 
.NET Fest 2019. Łukasz Pyrzyk. Daily Performance Fuckups
.NET Fest 2019. Łukasz Pyrzyk. Daily Performance Fuckups.NET Fest 2019. Łukasz Pyrzyk. Daily Performance Fuckups
.NET Fest 2019. Łukasz Pyrzyk. Daily Performance FuckupsNETFest
 
How Triton can help to reverse virtual machine based software protections
How Triton can help to reverse virtual machine based software protectionsHow Triton can help to reverse virtual machine based software protections
How Triton can help to reverse virtual machine based software protectionsJonathan Salwan
 
iBeacons - the new low-powered way of location awareness
iBeacons - the new low-powered way of location awarenessiBeacons - the new low-powered way of location awareness
iBeacons - the new low-powered way of location awarenessStefano Zanetti
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVMJohn Lee
 
Dragonflow 01 2016 TLV meetup
Dragonflow 01 2016 TLV meetup  Dragonflow 01 2016 TLV meetup
Dragonflow 01 2016 TLV meetup Eran Gampel
 
Report on hacking blind
Report on hacking blindReport on hacking blind
Report on hacking blindNikitaAndhale
 
Code Red Security
Code Red SecurityCode Red Security
Code Red SecurityAmr Ali
 
Make ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEKMake ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEKSaumil Shah
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)Андрей Новиков
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdlArshit Rai
 

Similar to CodeCity: Visual Exploration of Large-Scale Evolving Software (20)

Assembler (2)
Assembler (2)Assembler (2)
Assembler (2)
 
Grow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM StackGrow and Shrink - Dynamically Extending the Ruby VM Stack
Grow and Shrink - Dynamically Extending the Ruby VM Stack
 
Networking interview questions
Networking interview questionsNetworking interview questions
Networking interview questions
 
Hard IP Core design | Convolution Encoder
Hard IP Core design | Convolution EncoderHard IP Core design | Convolution Encoder
Hard IP Core design | Convolution Encoder
 
2020 icldla-updated
2020 icldla-updated2020 icldla-updated
2020 icldla-updated
 
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
Keynote (Mike Muller) - Is There Anything New in Heterogeneous Computing - by...
 
EvoSpaces - Multi-dimensional Navigation Spaces for Software Evolution
EvoSpaces - Multi-dimensional Navigation Spaces for Software EvolutionEvoSpaces - Multi-dimensional Navigation Spaces for Software Evolution
EvoSpaces - Multi-dimensional Navigation Spaces for Software Evolution
 
SAST, CWE, SEI CERT and other smart words from the information security world
SAST, CWE, SEI CERT and other smart words from the information security worldSAST, CWE, SEI CERT and other smart words from the information security world
SAST, CWE, SEI CERT and other smart words from the information security world
 
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft..."Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
"Source Code Abstracts Classification Using CNN", Vadim Markovtsev, Lead Soft...
 
Creating a Fibonacci Generator in Assembly - by Willem van Ketwich
Creating a Fibonacci Generator in Assembly - by Willem van KetwichCreating a Fibonacci Generator in Assembly - by Willem van Ketwich
Creating a Fibonacci Generator in Assembly - by Willem van Ketwich
 
.NET Fest 2019. Łukasz Pyrzyk. Daily Performance Fuckups
.NET Fest 2019. Łukasz Pyrzyk. Daily Performance Fuckups.NET Fest 2019. Łukasz Pyrzyk. Daily Performance Fuckups
.NET Fest 2019. Łukasz Pyrzyk. Daily Performance Fuckups
 
How Triton can help to reverse virtual machine based software protections
How Triton can help to reverse virtual machine based software protectionsHow Triton can help to reverse virtual machine based software protections
How Triton can help to reverse virtual machine based software protections
 
iBeacons - the new low-powered way of location awareness
iBeacons - the new low-powered way of location awarenessiBeacons - the new low-powered way of location awareness
iBeacons - the new low-powered way of location awareness
 
Android RenderScript on LLVM
Android RenderScript on LLVMAndroid RenderScript on LLVM
Android RenderScript on LLVM
 
Dragonflow 01 2016 TLV meetup
Dragonflow 01 2016 TLV meetup  Dragonflow 01 2016 TLV meetup
Dragonflow 01 2016 TLV meetup
 
Report on hacking blind
Report on hacking blindReport on hacking blind
Report on hacking blind
 
Code Red Security
Code Red SecurityCode Red Security
Code Red Security
 
Make ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEKMake ARM Shellcode Great Again - HITB2018PEK
Make ARM Shellcode Great Again - HITB2018PEK
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
 
Summer training vhdl
Summer training vhdlSummer training vhdl
Summer training vhdl
 

Recently uploaded

Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesBernd Ruecker
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsYoss Cohen
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfAarwolf Industries LLC
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...Karmanjay Verma
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024TopCSSGallery
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 

Recently uploaded (20)

Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
QCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architecturesQCon London: Mastering long-running processes in modern architectures
QCon London: Mastering long-running processes in modern architectures
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Infrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platformsInfrared simulation and processing on Nvidia platforms
Infrared simulation and processing on Nvidia platforms
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
Landscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdfLandscape Catalogue 2024 Australia-1.pdf
Landscape Catalogue 2024 Australia-1.pdf
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...React JS; all concepts. Contains React Features, JSX, functional & Class comp...
React JS; all concepts. Contains React Features, JSX, functional & Class comp...
 
Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024Top 10 Hubspot Development Companies in 2024
Top 10 Hubspot Development Companies in 2024
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 

CodeCity: Visual Exploration of Large-Scale Evolving Software

  • 1. CodeCity Visual Exploration of Large-Scale Evolving Software Richard Wettel University of Lugano, Switzerland Supervisor: Michele Lanza
  • 3.
  • 5. read to understand system of 1 million lines of source code
  • 6. read to understand system of 1 million lines of source code * 2 lines/second = 2 million seconds
  • 7. read to understand system of 1 million lines of source code * 2 lines/second = 2 million seconds / 3600 seconds/hours = 560 hours
  • 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 15. software systems are large complex
  • 16. software systems are large complex ev l g o vin
  • 17. “Software is intangible, having no physical shape or size”. [Ball & Eick, IEEE Computer 1996]
  • 22. the city metaphor class building package district
  • 23. the city metaphor class building package district
  • 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
  • 25. 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
  • 27. application roadmap Program Comprehension
  • 28. application roadmap Program Software Comprehension Evolution
  • 29. application roadmap Program Software Software Comprehension Evolution Design
  • 30. application 1: program comprehension
  • 31. ArgoUML v. 0.23.4 1’800 classes, 100 packages decoding a code city
  • 32. ArgoUML v. 0.23.4 1’800 classes, 100 packages decoding a code city massive building CPPParser NOM: 204 NOA: 85 LOC: 9’111
  • 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
  • 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 NOM: 0 NOA: 173 LOC: 0
  • 35. 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 46. real scale Eclipse ScummVM CodeCity JDK 1.5 JHotDraw jEdit iText Jmol ArgoUML
  • 47. application 2: software evolution
  • 48. consistent locality city blueprint, based on the maximal expansion of each artifact (building, district). Bar Foo A
  • 49. consistent locality city blueprint, based on the maximal expansion of each artifact (building, district). Bar Foo A version 1 Bar Foo
  • 50. 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
  • 51. 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
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  • 63. coarse vs fine-grained granularity class C NOM = 7 A NO NO A
  • 64. coarse vs fine-grained granularity class C NOM = 7 c las sC A NO NO A
  • 65. coarse vs fine-grained granularity class C m6 NOM = 7 m5 m7 m2 m1 m3 m4 c las sC A NO NO A
  • 66. 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
  • 67. age map example JHotDraw 8 samples, 3 years age: 1 2 3 4 5 6 7 8
  • 68. age map patterns age: 1 2 3 4 5 6 7 8
  • 69. age map patterns age: 1 2 3 4 5 6 7 8 stable very old
  • 70. age map patterns age: 1 2 3 4 5 6 7 8 stable rarely updated very old old
  • 71. age map patterns age: 1 2 3 4 5 6 7 8 stable highly unstable rarely updated very old old young
  • 72. 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
  • 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. 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. 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. 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. 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. 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. 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. 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
  • 82. timeline by example 1887 Sep. 1887 Dec. 1888 Mar. 1888 Jun. 1888 Sep. 1888 Dec. 1889 Mar.
  • 83. code city timelines ve r s. 1 c lass
  • 84. code city timelines m7 m6 m5 m3 m2 m1 ve r s. 1 c lass
  • 85. code city timelines m7 m6 m5 m3 ti me m2 m1 isto ry ve r s. 1 sh c lass c las
  • 86. 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
  • 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. 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
  • 89. 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
  • 90. 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
  • 91. 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
  • 93. class timeline examples StandardDrawingView GeneratorJava 8 versions 9 versions JHotDraw ArgoUML
  • 94. class timeline examples StandardDrawingView GeneratorJava Eval 8 versions 9 versions 19 versions JHotDraw ArgoUML Jmol
  • 95. timeline correlation Eval Jmol Viewer TransformManager JmolViewer
  • 96. timeline correlation Eval Jmol Viewer TransformManager JmolViewer
  • 97. application 3: design analysis
  • 99. detecting design problems access to foreign data
  • 100. detecting design problems access to foreign data weighted method count
  • 101. detecting design problems access to foreign data weighted method count tight class cohesion
  • 102. design problems in numbers
  • 103. disharmony map: focus + context 65 God classes java namespace of JDK 1.5
  • 104. map of multiple disharmonies 12 Brain classes 16 java namespace 65 God classes of JDK 1.5 109 Data classes
  • 105. coarse-grained disharmony map Brain classes 8 God classes 30 Brain & God classes 6 Data classes 17 ArgoUML
  • 106. fine-grained disharmony map Shotgun surgery 210 package org.argouml.model of ArgoUML
  • 107. fine-grained design assessment Feature envy 1500 Jmol
  • 109.
  • 110. able to visualize Java, C/C++, C#, Smalltalk systems
  • 111. able to visualize Java, C/C++, C#, Smalltalk systems
  • 112. able to visualize Java, C/C++, C#, Smalltalk systems portable
  • 113. able to visualize Java, C/C++, C#, Smalltalk systems portable 3’500 downloads (March 2008 - January 2010)
  • 114. 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://

Editor's Notes

  1. 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.
  2. 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.
  3. 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.
  4. 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...
  5. ... 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.
  6. La mia visione e dunque di visualizzare i sistemi software rapresentandoli tramitte una metafora della cita: la citta del codice
  7. 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.
  8. 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.
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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.
  16. ... 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.
  17. ... 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.
  18. ... 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.
  19. ... 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.
  20. ... 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.
  21. ... 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.
  22. ... 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.
  23. ... 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.
  24. ... 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.
  25. ... 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.
  26. 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.
  27. 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.
  28. 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.
  29. 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.
  30. 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.
  31. 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.
  32. 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.
  33. 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.
  34. 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.
  35. 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.
  36. 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.
  37. 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.
  38. 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.
  39. 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.
  40. 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.
  41. 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.
  42. 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.
  43. 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.
  44. 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.
  45. 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.
  46. 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.
  47. 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.
  48. 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.
  49. 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.
  50. 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.
  51. 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.
  52. 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.
  53. 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.
  54. 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.
  55. 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.
  56. 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.
  57. 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.
  58. 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.
  59. 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.
  60. 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.
  61. 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.
  62. Se dovessemo prendere in calcolo le proporzioni reali tra le dimensioni di questi sistemi, la vista generale e un po diversa...
  63. 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.
  64. Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  65. Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  66. Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  67. Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  68. Per capire meglio cosa vedremo durante il viaggio nel tempo, ecco i principi.
  69. 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.
  70. 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.
  71. 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.
  72. 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.
  73. 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.
  74. 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.
  75. 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.
  76. 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.
  77. 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.
  78. 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.
  79. 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.
  80. 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.
  81. 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.
  82. 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.
  83. 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.
  84. 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.
  85. 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.
  86. 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.
  87. 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.
  88. 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.
  89. 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.
  90. 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.
  91. 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.
  92. 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.
  93. 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.
  94. 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.
  95. 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.
  96. 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.
  97. 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.
  98. Dipendendo al nostro interesso, possiamo aumentare il livello di detaglio (la granularità) in CodeCity, per poter vedere anche i metodi delle classi.
  99. Dipendendo al nostro interesso, possiamo aumentare il livello di detaglio (la granularità) in CodeCity, per poter vedere anche i metodi delle classi.
  100. Dipendendo al nostro interesso, possiamo aumentare il livello di detaglio (la granularità) in CodeCity, per poter vedere anche i metodi delle classi.
  101. 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).
  102. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  103. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  104. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  105. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  106. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  107. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  108. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  109. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  110. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  111. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  112. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  113. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  114. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  115. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  116. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  117. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  118. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  119. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  120. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  121. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  122. Combinando le due tecniche presentate prima, otteniamo una interessante visualizzazione che ci mostra come il sistema diventa vecchio
  123. 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.
  124. 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.
  125. 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.
  126. 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.
  127. 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.
  128. 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.
  129. 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.
  130. 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.
  131. 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.
  132. 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.
  133. 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.
  134. 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.
  135. 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.
  136. 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.
  137. 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.
  138. 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.
  139. 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.