Here is a cool “metrics” visualization tool that Thomas blogged about: Visualizing Code Aesthetics
For me, using city layout, while intriguing, might not generate immediate grokking by most people.
It is cool how it shows multiple dimensions by adding
- blocks:packages and
- building:classes have
- footprint based on #attributes and
- height based on LOC.
I am not sure that people have an automatic reaction to a cityscape that can equate “good code” to a good-looking city. For example, I think most people would say that a good-looking city has a nice skyline with tall buildings grouped in an aesthetically-pleasing manner. That might represent bad code, who knows?
Also, some bad code smells at the class level are
- All attributes — a data blob — would be big footprint, low height
- All methods — an overachiever — would be tall and skinny
I guess the code cityscape would lead you to see some obvious outliers. But does it tell you much more than that? Does it tell you anything about the “goodness” of the design? Does it tell you anything that a list of computed metrics doesn’t point out with less fanfare?
What is missing in the code city — and arguably of greater import IMHO — are indications of high coupling, low cohesion; and cyclomatic complexity values (i.e., how convoluted are your LOC).
Nonetheless, the Code City does get your attention as it is pretty cool looking at first glance 🙂
Thanks for sharing!
NOTE: Thomas pointed out that there are some different ways to view the metrics that address some of my metric faves:
Just so you know, there's a bunch of other metrics out of the box: Color buildings by: * Brain class * God class * Data class You can also break the classes down into methods (look like floors in the buildings) to study this: * Brain method * Feature envy * Intensive coupling * Dispersed coupling * Shotgun surgery