CodeCity Visualizzazione immersiva del software Richard Wettel Università della Svizzera italiana Il progetto EvoSpaces Richard Wettel CodeCity: Visualizzazione immersiva del software 2 Visione: Il software come una città La metafora della città corrispondenza tra domini classi edifici moduli quartieri sistema città Richard Wettel CodeCity: Visualizzazione immersiva del software 4 La metafora della città corrispondenza tra domini classi edifici moduli quartieri sistema città Richard Wettel CodeCity: Visualizzazione immersiva del software 4 La metafora della città corrispondenza tra domini classi edifici moduli quartieri sistema città Richard Wettel CodeCity: Visualizzazione immersiva del software 4 La metafora della città corrispondenza tra domini classi edifici moduli quartieri sistema città Richard Wettel CodeCity: Visualizzazione immersiva del software 4 La metafora della città corrispondenza tra domini classi edifici moduli quartieri sistema città Richard Wettel numero di metodi (NOM) altezza numero di attributi (NOA) larghezza CodeCity: Visualizzazione immersiva del software 4 La metafora della città corrispondenza tra domini classi edifici moduli quartieri sistema città profondità della gerarchia Richard Wettel colore numero di metodi (NOM) altezza numero di attributi (NOA) larghezza CodeCity: Visualizzazione immersiva del software 4 “Decifrare” una città ArgoUML 144 moduli 2’542 classi 137’000 righe Richard Wettel CodeCity: Visualizzazione immersiva del software 5 “Decifrare” una città grattacieli (NOM, NOA) Richard Wettel CodeCity: Visualizzazione immersiva del software ArgoUML 144 moduli 2’542 classi 137’000 righe 5 “Decifrare” una città grattacieli (NOM, NOA) ArgoUML 144 moduli 2’542 classi 137’000 righe posteggi (NOM, NOA) Richard Wettel CodeCity: Visualizzazione immersiva del software 5 “Decifrare” una città ArgoUML 144 moduli 2’542 classi 137’000 righe grattacieli (NOM, NOA) posteggi (NOM, NOA) Richard Wettel palazzi (NOM, NOA) CodeCity: Visualizzazione immersiva del software 5 Topologia del software Richard Wettel CodeCity: Visualizzazione immersiva del software Azureus 457 moduli 4’734 classi 274’000 righe 6 Topologia del software Richard Wettel CodeCity: Visualizzazione immersiva del software Azureus 457 moduli 4’734 classi 274’000 righe 6 Topologia del software Azureus 457 moduli 4’734 classi 274’000 righe quartieri bassi (moduli base) Richard Wettel CodeCity: Visualizzazione immersiva del software 6 Topologia del software quartieri bassi (moduli base) Richard Wettel Azureus 457 moduli 4’734 classi 274’000 righe quartieri alti (moduli specializzati) CodeCity: Visualizzazione immersiva del software 6 Campi d’applicazione Richard Wettel CodeCity: Visualizzazione immersiva del software 7 Campi d’applicazione Comprendere il software Richard Wettel CodeCity: Visualizzazione immersiva del software 7 Campi d’applicazione Comprendere Imparare il software dal passato Richard Wettel CodeCity: Visualizzazione immersiva del software 7 Campi d’applicazione Comprendere Imparare il software dal passato Richard Wettel CodeCity: Visualizzazione immersiva del software Localizzare i problemi 7 Comprendere il software Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ Richard Wettel 72 CodeCity: Visualizzazione immersiva del software 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 30’000 Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 ScumVM C++ CodeCity: Visualizzazione immersiva del software 998 iText CodeCity Smalltalk Richard Wettel 72 129 961 291 32’000 18’000 18 1’331 105’000 9 Esempi di città del codice Sistema linguaggio moduli classi righe Azureus Java 457 4’734 274’000 ArgoUML Java 144 2’542 137’000 JHotDraw Java 72 998 30’000 iText Java 149 1’250 80’000 Jmol Java 105 1’032 85’000 JDK 1.5 Java 137 4’715 160’000 Moose Smalltalk 278 Jun Smalltalk 288 2’236 351’000 CodeCity Smalltalk ScumVM C++ 129 961 291 32’000 18’000 18 1’331 105’000 1.25 milioni righe di codice sorgente Richard Wettel CodeCity: Visualizzazione immersiva del software 9 Imparare dal passato La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La macchina del tempo 0.10.1 0.12 0.14 0.16 0.18.1 0.20 0.22 0.23.4 0.24 Richard Wettel ArgoUML 9 versioni 5 anni CodeCity: Visualizzazione immersiva del software 11 La mappa dell'età di JHotDraw età: 1 2 3 4 5 6 7 8 Richard Wettel CodeCity: Visualizzazione immersiva del software 12 La mappa dell'età di JHotDraw modulo giovane età: 1 2 3 4 5 6 7 8 Richard Wettel CodeCity: Visualizzazione immersiva del software 12 La mappa dell'età di JHotDraw modulo giovane classe cambiata spesso età: 1 2 3 4 5 6 7 8 Richard Wettel CodeCity: Visualizzazione immersiva del software 12 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Macchina del tempo + mappa dell'età Ottobre. 2000 Marzo 2001 Settembre 2001 Marzo 2002 Agosto 2002 Gennaio 2003 Luglio 2003 Gennaio 2004 Richard Wettel JHotDraw 8 versioni 40 mesi CodeCity: Visualizzazione immersiva del software 13 Localizzare i problemi Anche il software industriale è afflitto 16 JDK 1.5 12 Brain classes 137 moduli 4’715 classi 160’000 righe 65 God classes 109 Data classes Richard Wettel CodeCity: Visualizzazione immersiva del software 15 Anche il software industriale è afflitto Component NOA 88, NOM 280 16 Security NOA 3, NOM 30 JDK 1.5 12 Brain classes 65 God classes 109 Data classes Richard Wettel InputEvent NOA 21, NOM 14 CodeCity: Visualizzazione immersiva del software 137 moduli 4’715 classi 160’000 righe 15 Un “piccolo” problema di Feature Envy Jmol 105 moduli 1’032 classi 85’000 righe Richard Wettel CodeCity: Visualizzazione immersiva del software 16 Un “piccolo” problema di Feature Envy Jmol 105 moduli 1’032 classi 85’000 righe 1,500 metodi (25 %) Richard Wettel CodeCity: Visualizzazione immersiva del software 16 Un approccio innovativo Rilevanza scientifica ICPC 2007 (15th IEEE International Conference on Program Comprehension), June 2007, Banff, Canada VISSOFT 2007 (4th IEEE International Workshop on Visualizing Software For Understanding and Analysis), June 2007, Banff, Canada ICSE 2008 (30th International Conference on Software Engineering), May 2008, Leipzig, Germany WASDeTT 2008 (1st International Workshop on Advanced Software Development Tools and Techniques), July 2008, Paphos, Cyprus ESUG 2008 (16th International Smalltalk Conference), August 2008, Amsterdam, The Netherlands Rilevanza industriale CodeCity libero release: 17.03.2008 1300+ downloads e continua... Reazioni molto positive da parte dell'industria SoftVis 2008 (4th International ACM Symposium on Software Visualization), September 2008, Herrsching, Germany WCRE 2008 (15th Working Conference on Reverse Engineering), October 2008, Antwerp, Belgium FAMOOSr 2008 (2nd Workshop on FAMIX and Moose in Reengineering), October 2008, Antwerp, Belgium Richard Wettel CodeCity: Visualizzazione immersiva del software 18 Rilevanza scientifica ICPC 2007 (15th IEEE International Conference on Program Comprehension), June 2007, Banff, Canada VISSOFT 2007 (4th IEEE International Workshop on Visualizing Software For Understanding and Analysis), June 2007, Banff, Canada ICSE 2008 (30th International Conference on Software Engineering), May 2008, Leipzig, Germany WASDeTT 2008 (1st International Workshop on Advanced Software Development Tools and Techniques), July 2008, Paphos, Cyprus ESUG 2008 (16th International Smalltalk Conference), August 2008, Amsterdam, The Netherlands Rilevanza industriale CodeCity libero release: 17.03.2008 1300+ downloads e continua... Reazioni molto positive da parte dell'industria SoftVis 2008 (4th International ACM Symposium on Software Visualization), September 2008, Herrsching, Germany WCRE 2008 (15th Working Conference on Reverse Engineering), October 2008, Antwerp, Belgium FAMOOSr 2008 (2nd Workshop on FAMIX and Moose in Reengineering), October 2008, Antwerp, Belgium Richard Wettel CodeCity: Visualizzazione immersiva del software 18 www.inf.unisi.ch/phd/wettel/codecity.html