SlideShare a Scribd company logo
1 of 187
the visual
terminator
Michele Lanza
Honor
Horror
Terror
Resolve
the visual
terminator
Michele Lanza
The visual
Terminator
Michele Lanza
The visual
terminator
Michele Lanza

REVEAL @ Faculty of Informatics
University of Lugano, Switzerland
Terminator I           Terminator II
the terminator         judgment day




Terminator III         Terminator IV
rise of the machines   salvation
my self
change-centric                   immersive
software evolution                    software
                                   visualization

synchronous                  next-gen visual
  development                programming


           software ecosystems

          bug analysis/prediction

             holistic evolution
romain robbes     mircea lungu     marco d’ambros




richard wettel    lile hattori   fernando olivero   alberto bacchelli
scripta
manent
173
Terminator I
the terminator
nullius in verba
of making insects
with cheese
of killing frogs, by
touching their
skin, with vinegar,
pitch, or mercury
of spiders not
being inchanted by
a circle of
unicorns-horn, or
Irish earth, laid
round about it
“Unless I see in his
hands the print of
the nails [..], and
put my hands into
his side: I will not
believe.”
John 20: 24 - 29
Software: The
intangible objects inside
     the computer.
                  Soft?
Programming is a kind of writing.

            Gerald M. Weinberg


    Psychology of Computer
              Programming

                 Dorset House, 1971
programming ~ writing
programming ~ writing

software ~ text
/***************************************************************************/              if(p<3&y==E)H=y^16;                    /* shift capt.sqr. H if e.p.*/
/*                               micro-Max,                                */              t=b[H];if(t&k|p<3&!(r&7)!=!t)break;    /* capt. own, bad pawn mode */
/* A chess program smaller than 2KB (of non-blank source), by H.G. Muller */               i=99*w[t&7];                           /* value of capt. piece t   */
/***************************************************************************/              if(i<0||E-S&&b[E]&&y-E<2&E-y<2)m=I;    /* K capt. or bad castling */
/* version 3.2 (2000 characters) features:                                 */              if(m>=l)goto C;                        /* abort on fail high       */
/* - recursive negamax search                                              */              if(h=d-(y!=z))                         /* remaining depth(-recapt.)*/
/* - quiescence search with recaptures                                     */              {v=p<6?b[x+8]-b[y+8]:0;                /* center positional pts.   */
/* - recapture extensions                                                  */                b[G]=b[H]=b[x]=0;b[y]=u&31;          /* do move, strip virgin-bit*/
/* - (internal) iterative deepening                                        */                if(!(G&M)){b[F]=k+6;v+=30;}          /* castling: put R & score */
/* - best-move-first 'sorting'                                             */                if(p<3)                              /* pawns:                   */
/* - a hash table storing score and best move                              */                {v-=9*(((x-2)&M||b[x-2]!=u)+         /* structure, undefended    */
/* - full FIDE rules (expt minor ptomotion) and move-legality checking     */                         ((x+2)&M||b[x+2]!=u)-1);    /*        squares plus bias */
                                                                                               if(y+r+1&S){b[y]|=7;i+=C;}         /* promote p to Q, add score*/
#define   F(I,S,N) for(I=S;I<N;I++)                                                          }
#define   W(A) while(A)                                                                      v=-D(24-k,-l-(l>e),m>q?-m:-q,-e-v-i, /* recursive eval. of reply */
#define   K(A,B) *(int*)(T+A+(B&8)+S*(B&7))                                                         J+J(0),Z+J(8)+G-S,F,y,h);     /* J,Z: hash keys           */
#define   J(A) K(y+A,b[y])-K(x+A,u)-K(H+A,t)                                                 v-=v>e;                              /* delayed-gain penalty     */
                                                                                             if(z==9)                             /* called as move-legality */
#define U 16777224                                                                           {if(v!=-I&x==K&y==L)                 /*   checker: if move found */
struct _ {int K,V;char X,Y,D;} A[U];            /* hash table, 16M+8 entries*/                 {Q=-e-i;O=F;return l;}             /*   & not in check, signal */
                                                                                               v=m;                               /* (prevent fail-lows on    */
int V=112,M=136,S=128,I=8e4,C=799,Q,N,i;        /* V=0x70=rank mask, M=0x88 */               }                                    /*   K-capt. replies)       */
                                                                                             b[G]=k+38;b[F]=b[y]=0;b[x]=u;b[H]=t; /* undo move,G can be dummy */
char O,K,L,                                                                                  if(Y&8){m=v;Y&=~8;goto A;}           /* best=1st done,redo normal*/
w[]={0,1,1,3,-1,3,5,9},                        /* relative piece values    */                if(v>m){m=v;X=x;Y=y|S&G;}            /* update max, mark with S */
o[]={-16,-15,-17,0,1,16,0,1,16,15,17,0,14,18,31,33,0, /* step-vector lists */              }                                      /*          if non castling */
     7,-1,11,6,8,3,6,                          /* 1st dir. in o[] per piece*/              t+=p<5;                                /* fake capt. for nonsliding*/
     6,3,5,7,4,5,3,6},                         /* initial piece setup      */              if(p<3&6*k+(y&V)==S                    /* pawn on 3rd/6th, or      */
b[129],                                        /* board: half of 16x8+dummy*/                    ||(u&~24)==36&j==7&&             /* virgin K moving sideways,*/
T[1035],                                       /* hash translation table   */                    G&M&&b[G=(x|7)-(r>>1&7)]&32      /* 1st, virgin R in corner G*/
                                                                                                 &&!(b[G^1]|b[G^2])               /* 2 empty sqrs. next to R */
n[]=".?+nkbrq?*?NKBRQ";                         /* piece symbols on printout*/             ){F=y;t--;}                            /* unfake capt., enable e.p.*/
                                                                                          }W(!t);                                 /* if not capt. continue ray*/
D(k,q,l,e,J,Z,E,z,n)      /* recursive minimax search, k=moving side, n=depth*/       }}}W((x=x+9&~M)-B);                         /* next sqr. of board, wrap */
int k,q,l,e,J,Z,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/      C:if(m>I/4|m<-I/4)d=99;                         /* mate is indep. of depth */
{                         /* e=score, z=prev.dest; J,Z=hashkeys; return score*/       m=m+I?m:-D(24-k,-I,I,0,J,Z,S,S,1)/2;        /* best loses K: (stale)mate*/
  int j,r,m,v,d,h,i=9,F,G;                                                            if(!a->K|(a->X&M)!=M|a->D<=d)               /* if new/better type/depth:*/
  char t,p,u,x,y,X,Y,H,B;                                                             {a->K=Z;a->V=m;a->D=d;A->K=0;               /* store in hash,dummy stays*/
  struct _*a=A;                                                                         a->X=X|8*(m>q)|S*(m<l);a->Y=Y;            /* empty, type (limit/exact)*/
                                                 /* lookup pos. in hash table*/       }                                           /*    encoded in X S,8 bits */
  j=(k*E^J)&U-9;                                 /* try 8 consec. locations */    /*if(z==8)printf("%2d ply, %9d searched, %6d by (%2x,%2x)n",d-1,N,m,X,Y&0x77);*/
  W((h=A[++j].K)&&h-Z&&--i);                     /* first empty or match     */     }
  a+=i?j:0;                                      /* dummy A[0] if miss & full*/     if(z&8){K=X;L=Y&~M;}
  if(a->K)                                       /* hit: pos. is in hash tab */     return m;
  {d=a->D;v=a->V;X=a->X;                         /* examine stored data      */   }
   if(d>=n)                                      /* if depth sufficient:     */
   {if(v>=l|X&S&&v<=q|X&8)return v;              /* use if window compatible */   main()
    d=n-1;                                       /* or use as iter. start    */   {
   }X&=~M;Y=a->Y;                                /*      with best-move hint */     int j,k=8,*p,c[9];
   Y=d?Y:0;                                      /* don't try best at d=0    */
  }else d=X=Y=0;                                 /* start iter., no best yet */       F(i,0,8)
  N++;                                           /* node count (for timing) */        {b[i]=(b[i+V]=o[i+24]+40)+8;b[i+16]=18;b[i+96]=9;     /* initial board setup*/
  W(d++<n|z==8&N<1e7&d<98)                       /* iterative deepening loop */         F(j,0,8)b[16*j+i+8]=(i-4)*(i-4)+(j-3.5)*(j-3.5);    /* center-pts table   */
  {x=B=X;                                        /* start scan at prev. best */       }                                                     /*(in unused half b[])*/
   Y|=8&Y>>4;                                    /* request try noncastl. 1st*/       F(i,M,1035)T[i]=random()>>9;
   m=d>1?-I:e;                                   /* unconsidered:static eval */
   do{u=b[x];                                    /* scan board looking for   */       W(1)                                                  /* play loop            */
    if(u&k)                                      /* own piece (inefficient!)*/        {F(i,0,121)printf(" %c",i&8&&(i+=7)?10:n[b[i]&15]);   /* print board          */
    {r=p=u&7;                                    /* p = piece type (set r>0) */         p=c;W((*p++=getchar())>10);                         /* read input line      */
     j=o[p+16];                                  /* first step vector f.piece*/         N=0;
     W(r=p>2&r<0?-r:-o[++j])                     /* loop over directions o[] */         if(*c-10){K=c[0]-16*c[1]+C;L=c[2]-16*c[3]+C;}else   /*   parse entered move */
     {A:                                         /* resume normal after best */          D(k,-I,I,Q,1,1,O,8,0);                             /*   or think up one    */
       y=x;F=G=S;                                /* (x,y)=move, (F,G)=castl.R*/         F(i,0,U)A[i].K=0;                                   /*   clear hash table   */
       do{H=y+=r;                                /* y traverses ray          */         if(D(k,-I,I,Q,1,1,O,9,2)==I)k^=24;                  /*   check legality & do*/
        if(Y&8)H=y=Y&~M;                         /* sneak in prev. best move */       }
        if(y&M)break;                            /* board edge hit           */   }
Deciduous shrub, glabrous or nearly so, with
weak, trailing sub-glaucous, often purple-
tinted stems, either decumbent and forming
low bushes 50 - 100 cm high, or climbing
over other shrubs, rarely more erect
and reaching 2 m. Prickles hooked,
all +- equal. L’flets 2-3 pairs, 1-3.5
cm, ovate or ovate-elliptic, simply,
rarely double serrate, glabrous on
both sides or pubescent on the
veins (rarely all over) beneath,
rather thin; petiole usually
with some stalked glands;
stipules narrow, auricles
straight. Flowers 1-6, white
3-5 cm diam.; pedicels 2-4 cm
with stalked glands, rarely
smooth; buds short... etc. etc.
Deciduous shrub, glabrous or nearly so, with
weak, trailing sub-glaucous, often purple-
tinted stems, either decumbent and forming
low bushes 50 - 100 cm high, or climbing
over other shrubs, rarely more erect
and reaching 2 m. Prickles hooked,
all +- equal. L’flets 2-3 pairs, 1-3.5
cm, ovate or ovate-elliptic, simply,
rarely double serrate, glabrous on
both sides or pubescent on the
veins (rarely all over) beneath,
rather thin; petiole usually
with some stalked glands;
stipules narrow, auricles
straight. Flowers 1-6, white
3-5 cm diam.; pedicels 2-4 cm
with stalked glands, rarely
smooth; buds short... etc. etc.
It would be a great mistake to suppose
         that the dominant role of visual
observation has now been overthrown by
              more ‘analytical’ methods.

                              John Ziman


                 Reliable Knowledge
         An Exploration of the Grounds
                  for Belief in Science

             Cambridge University Press, 1978
old habits
  die hard
free your mind
Software Visualization
     The use of the crafts of typography,
          graphic design, animation, and
   cinematography with modern human-
     computer interaction and computer
graphics technology to facilitate both the
human understanding and effective use of
                      computer software.


                           Stasko, 1998
Software Visualization
     The use of the crafts of typography,
          graphic design, animation, and
   cinematography with modern human-
     computer interaction and computer
graphics technology to facilitate both the
human understanding and effective use of
                      computer software.


                            Lanza, 2010
(software)
visualization myths
a picture is worth
a thousand words
n  g
a picture is worth
      ro words
   w
a thousand
UML is software
visualization
g
UML is software
         n
    r o
 w
visualization
visual programming is
software visualization
n g
visual programming is
        r o
     w
software visualization
static
       visualization




software visualization

         dynamic
       visualization
ng
 ro                        ng
w          static
       visualization
                        ro
                       w
software visualization

      ng
    o
         dynamic


  wr   visualization
about       software         of
software                   software
           visualization
about
software
             software         of
                           software
                                       information
           visualization
                                      visualization
William Playfair
       1759 - 1823
Jacques Bertin
Semiology of Graphics,1967
visualization ~ story
It was the twenty-eight of November. An
immense confused mass of men, horses,
vehicles besieged the narrow entrances to
the bridges and began to flow over them.
It was the twenty-eight of November. An
immense confused mass of men, horses,
vehicles besieged the narrow entrances to
the bridges and began to flow over them.

Those in front, pushed by the weight of those behind were
crushed, trampled on, or forced into the ice-filled water of the
Berezina.
The confusion was so great that when Napoleon himself wished
to cross, it was necessary to use force to clear a passage.
Some there were who, determined to pass at all costs, cut a
horrible way for themselves with their swords. Others opened
an even crueler road for their carriages, driving them pitilessly
through the helpless crowd, crushing men and women, in their
odious greed sacrificing their companions in misery.
seeing ~
understanding
We acquire more information
  through vision than through
all the other senses combined.

                  Colin Ware


Information Visualization
       Perception for Design

         Morgan Kaufmann, 2004
we see with
the brain
iconic
memory
short-term
memory
long-term
memory
Orientation
Length
Width
Position / Proximity
Enclosure
Shape / Similarity
Connectedness
about       software         of
software                   software
           visualization
Stephen Few                                                Edward Tufte
Show Me the Numbers     The Visual Display of Quantitative Information

Analytics Press, 2004                                Morgan Kaufmann, 2004
about       software         of
software
           visualization   software
Terminator II
judgment day
WCRE 1999, TSE 2003
visualization ~ interaction
visualization ~ interaction

interaction ~ tool
visualization ~ interaction

interaction ~ tool

tool ~ cool
CodeCrawler (1998 - 2005)
X-Ray Eclipse Plug-in   xray.inf.usi.ch
the class blueprint
Initialize   Interface   Internal   Accessor   Attribute
Initialize   Interface   Internal   Accessor   Attribute
Regular
Initialize     Interface     Internal   Accessor   Attribute

                                                               Overriding

                                                               Extending

                                                                 Abstract

                                                                Constant

                                                               Delegating

                                                                   Setter

                                                                   Getter


             OOPSLA 2001, TSE 2005
Regular

Overriding

Extending

  Abstract

 Constant

Delegating

    Setter

    Getter
Regular

Overriding

Extending

  Abstract

 Constant

Delegating

    Setter

    Getter
Regular

Overriding

Extending

  Abstract

 Constant

Delegating

    Setter

    Getter
the unbearable
lightness of being
visual
make weapons out of imperfections
Software is intangible,
having no physical shape or size.
                                    Thomas Ball, Stephen Eick

                                    Software Visualization in the
                                    Large

                                    In Computer, vol. 29, no. 4, pp.
                                    33-43, IEEE Computer Society
                                    Press, 1996
The programmer, like the poet, works
only slightly removed from thought-stuff.
 He builds his castles in the air, from air,
 creating by exertion of the imagination.

                 Frederick P. Brooks, Jr.


           The Mythical Man-Month

                        Addison-Wesley, 1975
metaphors..
Habitability is
  the characteristic of source code that
enables programmers [..] to understand
  its construction and intentions and to
 change it comfortably and confidently.

                     Richard P. Gabriel


               Patterns of Software

                Oxford University Press, 1998
software
   cities
VISSOFT 2007, ICPC 2007, Softvis 2008, WCRE 2008
ArgoUML
Apache Cocoon
version            Aug 27 2009
lines                 173,436
classes                   4,008
packages                   784
Frostwire
version                 r 1,223
lines                  275,910
classes                  5,798
packages                   391
Jitterbit
version                r 31,527
lines                  263,645
classes                 10,412
packages                   945
OpenSwing
version                  r 296
lines                  112,495
classes                  1,754
packages                  268
HSQLDB
version              r 3,154
lines               158,208
classes               1,209
packages                103
ScumVM
language                C++
lines               ~105,000
classes                1,331
packages                 18
Jun
language         Smalltalk
lines            ~351,000
classes             2,236
packages              288
10 systems
language       Java/Smalltalk/C++
lines                 ~1,272,000
classes                   17,090
packages                   1,777
Ver. 0.10.1                     Ver. 0.12                        Ver. 0.14          ModelFacade
9/10/2002                       18/08/2003                       5/12/2003




                 ModelFacade                                                        FacadeMDRImpl
                                             NSUMLModelFacade                     Facade
Ver. 0.16                                                              NSUMLModelFacade
19/07/2004                                                    Facade




                                                   Ver. 0.18.1                         Ver. 0.20
                       FacadeMDRImpl
                                                   30/04/2005                          9/02/2006
              Facade




               Ver. 0.22                        Ver. 0.23.4                         Ver. 0.24
               8/08/2006                        10/12/2006                          12/02/2007
org.argouml.language.cpp           STDCTokenTypes                                                 FacadeMDRImpl
                                                       NOA 152, NOM 0, AGE 4
                                                                                              Facade                  NOA 3, NOM 351, AGE 4
               org.argouml.language.php                                                       NOA 1, NOM 339, AGE 5
     org.argouml.language.csharp                                     CPPParser
                                                                     NOA 85, NOM 204, AGE 4
 org.argouml.language.java
                                                                                               org.argouml.model

  JavaRecognizer
  NOA 24, NOM 91, AGE 9

JavaTokenTypes
NOA 146, NOM 0, AGE 9




org.argouml.uml.reveng.java

                          JavaTokenTypes
                          NOA 175, NOM 0, AGE 9


                                            JavaRecognizer
                                            NOA 79, NOM 176, AGE 9
JHotDraw
Oct 2000
Mar 2001
Sep 2001
Mar 2002
Aug 2002
Jan 2003
Jul 2003
Jan 2004
JDK 1.5 god classes
JMol Feature Envy
CodeCity   codecity.inf.usi.ch
useful?
empirical
visualization..
get ready to rumble..
42 subjects
8



7



6



5



4



3



2


    Medium System (Findbugs, 93 kLOC)   Large System (Azureus, 454 kLOC)


          Correctness                      CodeCity           Eclipse
55m



50m



45m



40m



35m



30m



25m



20m


      Medium System (Findbugs, 93 kLOC)   Large System (Azureus, 454 kLOC)


                  Time                       CodeCity           Eclipse
significant!
significant..
significant
my a..!
in the
valley of
   Elah..
Courtesy of
Adrian Kuhn & Oscar Nierstrasz

    (Univ. of Bern, Switzerland)
Courtesy of
Claus Lewerentz & Frank Steinbrückner

               (TU Cottbus, Germany)
Eclipse
back to reality
Terminator III
rise of the machines
edit




run          compile
review                  diff
     rearchitect
                   edit          Facebook
version                          recommend
       tasks                        refactor
   design
                                    navigate
 reuse                              visualize
 RSS                                  blog
document
   run                            compile
         IRC                        e-mail
 Twitter                  test reengineer
           debug Skype
MSR
which way?
quality
quality
quality
(repeat with me)
quality
quality
quality
...
developers
developers
developers
software
ecosystems
it’s time..
Terminator IV
salvation
..time
to grow up
benchmark glasnost
..time
for new
IDEas
software > text..
..time
to rethink software
academic research
industrial reality
..time
to change
visualization
For we are like tree trunks in the
snow. In appearance they lie sleekly
and a little push should be enough to
set them rolling. No, it can't be done,
for they are firmly wedded to the
ground. But see, even that is only
appearance.


                     Franz Kafka, “Contemplation”, 1913
No bullet points
     were harmed
during this presentation

          ---
          tln
The visual
terminator
Michele Lanza

REVEAL @ Faculty of Informatics
University of Lugano, Switzerland

More Related Content

What's hot (18)

Minerva_lib - fuzzing tool
Minerva_lib - fuzzing toolMinerva_lib - fuzzing tool
Minerva_lib - fuzzing tool
 
MATHS SYMBOLS - EXPONENTIALS + LOGARITHMS and THEIR PROPERTIES
MATHS SYMBOLS - EXPONENTIALS + LOGARITHMS and THEIR PROPERTIESMATHS SYMBOLS - EXPONENTIALS + LOGARITHMS and THEIR PROPERTIES
MATHS SYMBOLS - EXPONENTIALS + LOGARITHMS and THEIR PROPERTIES
 
Ds 2 cycle
Ds 2 cycleDs 2 cycle
Ds 2 cycle
 
Fractal Rendering in Developer C++ - 2012-11-06
Fractal Rendering in Developer C++ - 2012-11-06Fractal Rendering in Developer C++ - 2012-11-06
Fractal Rendering in Developer C++ - 2012-11-06
 
Intro
IntroIntro
Intro
 
Short intro to the Rust language
Short intro to the Rust languageShort intro to the Rust language
Short intro to the Rust language
 
Página 115
Página 115Página 115
Página 115
 
(Appendix_Codes) Game Programming Portfolio - Soobum Lee
(Appendix_Codes) Game Programming Portfolio - Soobum Lee(Appendix_Codes) Game Programming Portfolio - Soobum Lee
(Appendix_Codes) Game Programming Portfolio - Soobum Lee
 
Py3k
Py3kPy3k
Py3k
 
Torturing the PHP interpreter
Torturing the PHP interpreterTorturing the PHP interpreter
Torturing the PHP interpreter
 
Drawing Figures
Drawing FiguresDrawing Figures
Drawing Figures
 
บทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Javaบทที่ 3 พื้นฐานภาษา Java
บทที่ 3 พื้นฐานภาษา Java
 
Metarhia KievJS 22-Feb-2018
Metarhia KievJS 22-Feb-2018Metarhia KievJS 22-Feb-2018
Metarhia KievJS 22-Feb-2018
 
Key pat1 1-53
Key pat1 1-53Key pat1 1-53
Key pat1 1-53
 
Node.js middleware: Never again!
Node.js middleware: Never again!Node.js middleware: Never again!
Node.js middleware: Never again!
 
Broken windows de práticas ágeis
Broken windows de práticas ágeisBroken windows de práticas ágeis
Broken windows de práticas ágeis
 
OOXX
OOXXOOXX
OOXX
 
Patterns and antipatterns
Patterns and antipatternsPatterns and antipatterns
Patterns and antipatterns
 

Viewers also liked

Beauty is in the Eye of the Beholder
Beauty is in the Eye of the BeholderBeauty is in the Eye of the Beholder
Beauty is in the Eye of the BeholderMichele Lanza
 
Of Code and Change: Beautiful Software
Of Code and Change: Beautiful SoftwareOf Code and Change: Beautiful Software
Of Code and Change: Beautiful SoftwareMichele Lanza
 
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...Michele Lanza
 
A Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software SystemsA Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software SystemsMichele Lanza
 
Object-Oriented Metrics in Practice
Object-Oriented Metrics in PracticeObject-Oriented Metrics in Practice
Object-Oriented Metrics in PracticeMichele Lanza
 
02 - Boolean algebra
02 - Boolean algebra02 - Boolean algebra
02 - Boolean algebraTudor Girba
 
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
 
Visualizing Gnome with the Small Project Observatory
Visualizing Gnome with the Small Project ObservatoryVisualizing Gnome with the Small Project Observatory
Visualizing Gnome with the Small Project ObservatoryMichele Lanza
 
Smalltalk In a Nutshell
Smalltalk In a NutshellSmalltalk In a Nutshell
Smalltalk In a NutshellMichele Lanza
 
Presenting with text
Presenting with textPresenting with text
Presenting with textTudor Girba
 

Viewers also liked (12)

Beauty is in the Eye of the Beholder
Beauty is in the Eye of the BeholderBeauty is in the Eye of the Beholder
Beauty is in the Eye of the Beholder
 
Of Code and Change: Beautiful Software
Of Code and Change: Beautiful SoftwareOf Code and Change: Beautiful Software
Of Code and Change: Beautiful Software
 
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
A Teamwork-based Approach to Programming Fundamentals with Scheme, Smalltalk ...
 
A Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software SystemsA Holistic Approach to Evolving Software Systems
A Holistic Approach to Evolving Software Systems
 
Object-Oriented Metrics in Practice
Object-Oriented Metrics in PracticeObject-Oriented Metrics in Practice
Object-Oriented Metrics in Practice
 
Software Evolution
Software EvolutionSoftware Evolution
Software Evolution
 
02 - Boolean algebra
02 - Boolean algebra02 - Boolean algebra
02 - Boolean algebra
 
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
 
Visualizing Gnome with the Small Project Observatory
Visualizing Gnome with the Small Project ObservatoryVisualizing Gnome with the Small Project Observatory
Visualizing Gnome with the Small Project Observatory
 
Seeing Software
Seeing SoftwareSeeing Software
Seeing Software
 
Smalltalk In a Nutshell
Smalltalk In a NutshellSmalltalk In a Nutshell
Smalltalk In a Nutshell
 
Presenting with text
Presenting with textPresenting with text
Presenting with text
 

Similar to Visual Terminator Michele Lanza REVEAL

Class Customization and Better Code
Class Customization and Better CodeClass Customization and Better Code
Class Customization and Better CodeStronnics
 
write the TODO part of the program.docx
write the TODO part of the program.docxwrite the TODO part of the program.docx
write the TODO part of the program.docxannetnash8266
 
2Part I1. Answer questions for the following graph, if .docx
2Part I1. Answer questions for the following graph, if .docx2Part I1. Answer questions for the following graph, if .docx
2Part I1. Answer questions for the following graph, if .docxgilbertkpeters11344
 
Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)Ray Buse
 
#include stdafx.h using namespace std; #include stdlib.h.docx
#include stdafx.h using namespace std; #include stdlib.h.docx#include stdafx.h using namespace std; #include stdlib.h.docx
#include stdafx.h using namespace std; #include stdlib.h.docxajoy21
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturialWayne Tsai
 
Junaid program assignment
Junaid program assignmentJunaid program assignment
Junaid program assignmentJunaid Ahmed
 
need help with code I wrote. This code is a maze gui, and i need hel.pdf
need help with code I wrote. This code is a maze gui, and i need hel.pdfneed help with code I wrote. This code is a maze gui, and i need hel.pdf
need help with code I wrote. This code is a maze gui, and i need hel.pdfarcotstarsports
 
COMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docx
COMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docxCOMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docx
COMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docxTashiBhutia12
 
-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docx
-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docx-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docx
-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docxAdamq0DJonese
 
Computer Graphics Lab File C Programs
Computer Graphics Lab File C ProgramsComputer Graphics Lab File C Programs
Computer Graphics Lab File C ProgramsKandarp Tiwari
 
java-introduction.pdf
java-introduction.pdfjava-introduction.pdf
java-introduction.pdfDngTin307322
 
TMUA 2021 Paper 1 Solutions (Handwritten).pdf
TMUA 2021 Paper 1 Solutions (Handwritten).pdfTMUA 2021 Paper 1 Solutions (Handwritten).pdf
TMUA 2021 Paper 1 Solutions (Handwritten).pdfssuser625c41
 
AI CHALLENGE ADMIN
AI CHALLENGE ADMINAI CHALLENGE ADMIN
AI CHALLENGE ADMINAnkit Gupta
 
Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語ikdysfm
 
Bab 6
Bab 6Bab 6
Bab 6Zinoa
 
Introduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdfIntroduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdffeelinggifts
 

Similar to Visual Terminator Michele Lanza REVEAL (20)

Class Customization and Better Code
Class Customization and Better CodeClass Customization and Better Code
Class Customization and Better Code
 
write the TODO part of the program.docx
write the TODO part of the program.docxwrite the TODO part of the program.docx
write the TODO part of the program.docx
 
2Part I1. Answer questions for the following graph, if .docx
2Part I1. Answer questions for the following graph, if .docx2Part I1. Answer questions for the following graph, if .docx
2Part I1. Answer questions for the following graph, if .docx
 
Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)Automatically Describing Program Structure and Behavior (PhD Defense)
Automatically Describing Program Structure and Behavior (PhD Defense)
 
Academy PRO: ES2015
Academy PRO: ES2015Academy PRO: ES2015
Academy PRO: ES2015
 
#include stdafx.h using namespace std; #include stdlib.h.docx
#include stdafx.h using namespace std; #include stdlib.h.docx#include stdafx.h using namespace std; #include stdlib.h.docx
#include stdafx.h using namespace std; #include stdlib.h.docx
 
Coscup2021-rust-toturial
Coscup2021-rust-toturialCoscup2021-rust-toturial
Coscup2021-rust-toturial
 
Junaid program assignment
Junaid program assignmentJunaid program assignment
Junaid program assignment
 
need help with code I wrote. This code is a maze gui, and i need hel.pdf
need help with code I wrote. This code is a maze gui, and i need hel.pdfneed help with code I wrote. This code is a maze gui, and i need hel.pdf
need help with code I wrote. This code is a maze gui, and i need hel.pdf
 
COMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docx
COMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docxCOMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docx
COMPAPPABCA49085rFunrAP__Practical Number 9 & 10.docx
 
-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docx
-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docx-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docx
-- Task 2- Debugging a program with stacks- queues- and doubly-linked.docx
 
Computer Graphics Lab File C Programs
Computer Graphics Lab File C ProgramsComputer Graphics Lab File C Programs
Computer Graphics Lab File C Programs
 
Java
JavaJava
Java
 
java-introduction.pdf
java-introduction.pdfjava-introduction.pdf
java-introduction.pdf
 
TMUA 2021 Paper 1 Solutions (Handwritten).pdf
TMUA 2021 Paper 1 Solutions (Handwritten).pdfTMUA 2021 Paper 1 Solutions (Handwritten).pdf
TMUA 2021 Paper 1 Solutions (Handwritten).pdf
 
AI CHALLENGE ADMIN
AI CHALLENGE ADMINAI CHALLENGE ADMIN
AI CHALLENGE ADMIN
 
Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語Haskellで学ぶ関数型言語
Haskellで学ぶ関数型言語
 
Bab 6
Bab 6Bab 6
Bab 6
 
Introduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdfIntroduction You implemented a Deck class in Activity 2. This cla.pdf
Introduction You implemented a Deck class in Activity 2. This cla.pdf
 
Python hmm
Python hmmPython hmm
Python hmm
 

Visual Terminator Michele Lanza REVEAL

  • 8. The visual terminator Michele Lanza REVEAL @ Faculty of Informatics University of Lugano, Switzerland
  • 9.
  • 10. Terminator I Terminator II the terminator judgment day Terminator III Terminator IV rise of the machines salvation
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18. change-centric immersive software evolution software visualization synchronous next-gen visual development programming software ecosystems bug analysis/prediction holistic evolution
  • 19. romain robbes mircea lungu marco d’ambros richard wettel lile hattori fernando olivero alberto bacchelli
  • 21. 173
  • 25. of killing frogs, by touching their skin, with vinegar, pitch, or mercury
  • 26. of spiders not being inchanted by a circle of unicorns-horn, or Irish earth, laid round about it
  • 27. “Unless I see in his hands the print of the nails [..], and put my hands into his side: I will not believe.” John 20: 24 - 29
  • 28. Software: The intangible objects inside the computer. Soft?
  • 29. Programming is a kind of writing. Gerald M. Weinberg Psychology of Computer Programming Dorset House, 1971
  • 32. /***************************************************************************/ if(p<3&y==E)H=y^16; /* shift capt.sqr. H if e.p.*/ /* micro-Max, */ t=b[H];if(t&k|p<3&!(r&7)!=!t)break; /* capt. own, bad pawn mode */ /* A chess program smaller than 2KB (of non-blank source), by H.G. Muller */ i=99*w[t&7]; /* value of capt. piece t */ /***************************************************************************/ if(i<0||E-S&&b[E]&&y-E<2&E-y<2)m=I; /* K capt. or bad castling */ /* version 3.2 (2000 characters) features: */ if(m>=l)goto C; /* abort on fail high */ /* - recursive negamax search */ if(h=d-(y!=z)) /* remaining depth(-recapt.)*/ /* - quiescence search with recaptures */ {v=p<6?b[x+8]-b[y+8]:0; /* center positional pts. */ /* - recapture extensions */ b[G]=b[H]=b[x]=0;b[y]=u&31; /* do move, strip virgin-bit*/ /* - (internal) iterative deepening */ if(!(G&M)){b[F]=k+6;v+=30;} /* castling: put R & score */ /* - best-move-first 'sorting' */ if(p<3) /* pawns: */ /* - a hash table storing score and best move */ {v-=9*(((x-2)&M||b[x-2]!=u)+ /* structure, undefended */ /* - full FIDE rules (expt minor ptomotion) and move-legality checking */ ((x+2)&M||b[x+2]!=u)-1); /* squares plus bias */ if(y+r+1&S){b[y]|=7;i+=C;} /* promote p to Q, add score*/ #define F(I,S,N) for(I=S;I<N;I++) } #define W(A) while(A) v=-D(24-k,-l-(l>e),m>q?-m:-q,-e-v-i, /* recursive eval. of reply */ #define K(A,B) *(int*)(T+A+(B&8)+S*(B&7)) J+J(0),Z+J(8)+G-S,F,y,h); /* J,Z: hash keys */ #define J(A) K(y+A,b[y])-K(x+A,u)-K(H+A,t) v-=v>e; /* delayed-gain penalty */ if(z==9) /* called as move-legality */ #define U 16777224 {if(v!=-I&x==K&y==L) /* checker: if move found */ struct _ {int K,V;char X,Y,D;} A[U]; /* hash table, 16M+8 entries*/ {Q=-e-i;O=F;return l;} /* & not in check, signal */ v=m; /* (prevent fail-lows on */ int V=112,M=136,S=128,I=8e4,C=799,Q,N,i; /* V=0x70=rank mask, M=0x88 */ } /* K-capt. replies) */ b[G]=k+38;b[F]=b[y]=0;b[x]=u;b[H]=t; /* undo move,G can be dummy */ char O,K,L, if(Y&8){m=v;Y&=~8;goto A;} /* best=1st done,redo normal*/ w[]={0,1,1,3,-1,3,5,9}, /* relative piece values */ if(v>m){m=v;X=x;Y=y|S&G;} /* update max, mark with S */ o[]={-16,-15,-17,0,1,16,0,1,16,15,17,0,14,18,31,33,0, /* step-vector lists */ } /* if non castling */ 7,-1,11,6,8,3,6, /* 1st dir. in o[] per piece*/ t+=p<5; /* fake capt. for nonsliding*/ 6,3,5,7,4,5,3,6}, /* initial piece setup */ if(p<3&6*k+(y&V)==S /* pawn on 3rd/6th, or */ b[129], /* board: half of 16x8+dummy*/ ||(u&~24)==36&j==7&& /* virgin K moving sideways,*/ T[1035], /* hash translation table */ G&M&&b[G=(x|7)-(r>>1&7)]&32 /* 1st, virgin R in corner G*/ &&!(b[G^1]|b[G^2]) /* 2 empty sqrs. next to R */ n[]=".?+nkbrq?*?NKBRQ"; /* piece symbols on printout*/ ){F=y;t--;} /* unfake capt., enable e.p.*/ }W(!t); /* if not capt. continue ray*/ D(k,q,l,e,J,Z,E,z,n) /* recursive minimax search, k=moving side, n=depth*/ }}}W((x=x+9&~M)-B); /* next sqr. of board, wrap */ int k,q,l,e,J,Z,E,z,n; /* (q,l)=window, e=current eval. score, E=e.p. sqr.*/ C:if(m>I/4|m<-I/4)d=99; /* mate is indep. of depth */ { /* e=score, z=prev.dest; J,Z=hashkeys; return score*/ m=m+I?m:-D(24-k,-I,I,0,J,Z,S,S,1)/2; /* best loses K: (stale)mate*/ int j,r,m,v,d,h,i=9,F,G; if(!a->K|(a->X&M)!=M|a->D<=d) /* if new/better type/depth:*/ char t,p,u,x,y,X,Y,H,B; {a->K=Z;a->V=m;a->D=d;A->K=0; /* store in hash,dummy stays*/ struct _*a=A; a->X=X|8*(m>q)|S*(m<l);a->Y=Y; /* empty, type (limit/exact)*/ /* lookup pos. in hash table*/ } /* encoded in X S,8 bits */ j=(k*E^J)&U-9; /* try 8 consec. locations */ /*if(z==8)printf("%2d ply, %9d searched, %6d by (%2x,%2x)n",d-1,N,m,X,Y&0x77);*/ W((h=A[++j].K)&&h-Z&&--i); /* first empty or match */ } a+=i?j:0; /* dummy A[0] if miss & full*/ if(z&8){K=X;L=Y&~M;} if(a->K) /* hit: pos. is in hash tab */ return m; {d=a->D;v=a->V;X=a->X; /* examine stored data */ } if(d>=n) /* if depth sufficient: */ {if(v>=l|X&S&&v<=q|X&8)return v; /* use if window compatible */ main() d=n-1; /* or use as iter. start */ { }X&=~M;Y=a->Y; /* with best-move hint */ int j,k=8,*p,c[9]; Y=d?Y:0; /* don't try best at d=0 */ }else d=X=Y=0; /* start iter., no best yet */ F(i,0,8) N++; /* node count (for timing) */ {b[i]=(b[i+V]=o[i+24]+40)+8;b[i+16]=18;b[i+96]=9; /* initial board setup*/ W(d++<n|z==8&N<1e7&d<98) /* iterative deepening loop */ F(j,0,8)b[16*j+i+8]=(i-4)*(i-4)+(j-3.5)*(j-3.5); /* center-pts table */ {x=B=X; /* start scan at prev. best */ } /*(in unused half b[])*/ Y|=8&Y>>4; /* request try noncastl. 1st*/ F(i,M,1035)T[i]=random()>>9; m=d>1?-I:e; /* unconsidered:static eval */ do{u=b[x]; /* scan board looking for */ W(1) /* play loop */ if(u&k) /* own piece (inefficient!)*/ {F(i,0,121)printf(" %c",i&8&&(i+=7)?10:n[b[i]&15]); /* print board */ {r=p=u&7; /* p = piece type (set r>0) */ p=c;W((*p++=getchar())>10); /* read input line */ j=o[p+16]; /* first step vector f.piece*/ N=0; W(r=p>2&r<0?-r:-o[++j]) /* loop over directions o[] */ if(*c-10){K=c[0]-16*c[1]+C;L=c[2]-16*c[3]+C;}else /* parse entered move */ {A: /* resume normal after best */ D(k,-I,I,Q,1,1,O,8,0); /* or think up one */ y=x;F=G=S; /* (x,y)=move, (F,G)=castl.R*/ F(i,0,U)A[i].K=0; /* clear hash table */ do{H=y+=r; /* y traverses ray */ if(D(k,-I,I,Q,1,1,O,9,2)==I)k^=24; /* check legality & do*/ if(Y&8)H=y=Y&~M; /* sneak in prev. best move */ } if(y&M)break; /* board edge hit */ }
  • 33.
  • 34. Deciduous shrub, glabrous or nearly so, with weak, trailing sub-glaucous, often purple- tinted stems, either decumbent and forming low bushes 50 - 100 cm high, or climbing over other shrubs, rarely more erect and reaching 2 m. Prickles hooked, all +- equal. L’flets 2-3 pairs, 1-3.5 cm, ovate or ovate-elliptic, simply, rarely double serrate, glabrous on both sides or pubescent on the veins (rarely all over) beneath, rather thin; petiole usually with some stalked glands; stipules narrow, auricles straight. Flowers 1-6, white 3-5 cm diam.; pedicels 2-4 cm with stalked glands, rarely smooth; buds short... etc. etc.
  • 35. Deciduous shrub, glabrous or nearly so, with weak, trailing sub-glaucous, often purple- tinted stems, either decumbent and forming low bushes 50 - 100 cm high, or climbing over other shrubs, rarely more erect and reaching 2 m. Prickles hooked, all +- equal. L’flets 2-3 pairs, 1-3.5 cm, ovate or ovate-elliptic, simply, rarely double serrate, glabrous on both sides or pubescent on the veins (rarely all over) beneath, rather thin; petiole usually with some stalked glands; stipules narrow, auricles straight. Flowers 1-6, white 3-5 cm diam.; pedicels 2-4 cm with stalked glands, rarely smooth; buds short... etc. etc.
  • 36. It would be a great mistake to suppose that the dominant role of visual observation has now been overthrown by more ‘analytical’ methods. John Ziman Reliable Knowledge An Exploration of the Grounds for Belief in Science Cambridge University Press, 1978
  • 37. old habits die hard
  • 39. Software Visualization The use of the crafts of typography, graphic design, animation, and cinematography with modern human- computer interaction and computer graphics technology to facilitate both the human understanding and effective use of computer software. Stasko, 1998
  • 40. Software Visualization The use of the crafts of typography, graphic design, animation, and cinematography with modern human- computer interaction and computer graphics technology to facilitate both the human understanding and effective use of computer software. Lanza, 2010
  • 42. a picture is worth a thousand words
  • 43. n g a picture is worth ro words w a thousand
  • 45. g UML is software n r o w visualization
  • 47. n g visual programming is r o w software visualization
  • 48. static visualization software visualization dynamic visualization
  • 49. ng ro ng w static visualization ro w software visualization ng o dynamic wr visualization
  • 50.
  • 51. about software of software software visualization
  • 52. about software software of software information visualization visualization
  • 53. William Playfair 1759 - 1823
  • 56.
  • 57.
  • 58. It was the twenty-eight of November. An immense confused mass of men, horses, vehicles besieged the narrow entrances to the bridges and began to flow over them.
  • 59. It was the twenty-eight of November. An immense confused mass of men, horses, vehicles besieged the narrow entrances to the bridges and began to flow over them. Those in front, pushed by the weight of those behind were crushed, trampled on, or forced into the ice-filled water of the Berezina. The confusion was so great that when Napoleon himself wished to cross, it was necessary to use force to clear a passage. Some there were who, determined to pass at all costs, cut a horrible way for themselves with their swords. Others opened an even crueler road for their carriages, driving them pitilessly through the helpless crowd, crushing men and women, in their odious greed sacrificing their companions in misery.
  • 61. We acquire more information through vision than through all the other senses combined. Colin Ware Information Visualization Perception for Design Morgan Kaufmann, 2004
  • 67.
  • 69.
  • 70. Width
  • 71.
  • 73.
  • 75.
  • 77.
  • 79.
  • 80. about software of software software visualization
  • 81. Stephen Few Edward Tufte Show Me the Numbers The Visual Display of Quantitative Information Analytics Press, 2004 Morgan Kaufmann, 2004
  • 82. about software of software visualization software
  • 83.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 91.
  • 96. X-Ray Eclipse Plug-in xray.inf.usi.ch
  • 98.
  • 99.
  • 100. Initialize Interface Internal Accessor Attribute
  • 101. Initialize Interface Internal Accessor Attribute
  • 102. Regular Initialize Interface Internal Accessor Attribute Overriding Extending Abstract Constant Delegating Setter Getter OOPSLA 2001, TSE 2005
  • 103. Regular Overriding Extending Abstract Constant Delegating Setter Getter
  • 104. Regular Overriding Extending Abstract Constant Delegating Setter Getter
  • 105. Regular Overriding Extending Abstract Constant Delegating Setter Getter
  • 107. make weapons out of imperfections
  • 108. Software is intangible, having no physical shape or size. Thomas Ball, Stephen Eick Software Visualization in the Large In Computer, vol. 29, no. 4, pp. 33-43, IEEE Computer Society Press, 1996
  • 109. The programmer, like the poet, works only slightly removed from thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Frederick P. Brooks, Jr. The Mythical Man-Month Addison-Wesley, 1975
  • 111. Habitability is the characteristic of source code that enables programmers [..] to understand its construction and intentions and to change it comfortably and confidently. Richard P. Gabriel Patterns of Software Oxford University Press, 1998
  • 112. software cities
  • 113.
  • 114.
  • 115. VISSOFT 2007, ICPC 2007, Softvis 2008, WCRE 2008
  • 117. Apache Cocoon version Aug 27 2009 lines 173,436 classes 4,008 packages 784
  • 118. Frostwire version r 1,223 lines 275,910 classes 5,798 packages 391
  • 119. Jitterbit version r 31,527 lines 263,645 classes 10,412 packages 945
  • 120. OpenSwing version r 296 lines 112,495 classes 1,754 packages 268
  • 121. HSQLDB version r 3,154 lines 158,208 classes 1,209 packages 103
  • 122. ScumVM language C++ lines ~105,000 classes 1,331 packages 18
  • 123. Jun language Smalltalk lines ~351,000 classes 2,236 packages 288
  • 124. 10 systems language Java/Smalltalk/C++ lines ~1,272,000 classes 17,090 packages 1,777
  • 125. Ver. 0.10.1 Ver. 0.12 Ver. 0.14 ModelFacade 9/10/2002 18/08/2003 5/12/2003 ModelFacade FacadeMDRImpl NSUMLModelFacade Facade Ver. 0.16 NSUMLModelFacade 19/07/2004 Facade Ver. 0.18.1 Ver. 0.20 FacadeMDRImpl 30/04/2005 9/02/2006 Facade Ver. 0.22 Ver. 0.23.4 Ver. 0.24 8/08/2006 10/12/2006 12/02/2007
  • 126.
  • 127.
  • 128. org.argouml.language.cpp STDCTokenTypes FacadeMDRImpl NOA 152, NOM 0, AGE 4 Facade NOA 3, NOM 351, AGE 4 org.argouml.language.php NOA 1, NOM 339, AGE 5 org.argouml.language.csharp CPPParser NOA 85, NOM 204, AGE 4 org.argouml.language.java org.argouml.model JavaRecognizer NOA 24, NOM 91, AGE 9 JavaTokenTypes NOA 146, NOM 0, AGE 9 org.argouml.uml.reveng.java JavaTokenTypes NOA 175, NOM 0, AGE 9 JavaRecognizer NOA 79, NOM 176, AGE 9
  • 138. JDK 1.5 god classes
  • 140. CodeCity codecity.inf.usi.ch
  • 142.
  • 144. get ready to rumble..
  • 146. 8 7 6 5 4 3 2 Medium System (Findbugs, 93 kLOC) Large System (Azureus, 454 kLOC) Correctness CodeCity Eclipse
  • 147. 55m 50m 45m 40m 35m 30m 25m 20m Medium System (Findbugs, 93 kLOC) Large System (Azureus, 454 kLOC) Time CodeCity Eclipse
  • 151. in the valley of Elah..
  • 152. Courtesy of Adrian Kuhn & Oscar Nierstrasz (Univ. of Bern, Switzerland)
  • 153. Courtesy of Claus Lewerentz & Frank Steinbrückner (TU Cottbus, Germany)
  • 155.
  • 157. Terminator III rise of the machines
  • 158. edit run compile
  • 159. review diff rearchitect edit Facebook version recommend tasks refactor design navigate reuse visualize RSS blog document run compile IRC e-mail Twitter test reengineer debug Skype
  • 160. MSR
  • 161.
  • 162.
  • 163.
  • 165.
  • 167.
  • 169.
  • 170.
  • 183. For we are like tree trunks in the snow. In appearance they lie sleekly and a little push should be enough to set them rolling. No, it can't be done, for they are firmly wedded to the ground. But see, even that is only appearance. Franz Kafka, “Contemplation”, 1913
  • 184.
  • 185.
  • 186. No bullet points were harmed during this presentation --- tln
  • 187. The visual terminator Michele Lanza REVEAL @ Faculty of Informatics University of Lugano, Switzerland