A few months ago I posted about a tool I wrote (and called Berta) for feeding runtime-collected data into static analysis tool. I wrote that it works and I was happy about it. It has been a while and some of my (admittedly few) readers may wonder why there are no updates.
The truth is that I never intended to build a full suite of static code analysis software. That is a daunting task to even think about. My goal was to find an open source suite and write a plugin or a pull request to it to get the data Berta gathered. I was hoping to piggy back on an existing suite for all the visualization and interactivity bits that a developer would expect from a good tool.
For the past three months I was searching for such a suite. And I must say: java static code analysis is in a sorry state. There are various LINT-like tools and suits that would micro-inspect your code and flag problems with it - Sonar, FindBugs, PMD, etc (the list is quite long). There are tools and Eclipse plugins that were meant to examine your application at high level and provide insight into it, but they are all - really all - unmaintained and unsupported. Even peeking out of the open source world does not bear much fruit. There is JArchitect, which is up-to-date and sort of works. It is a tool for Java developers written in Mono (.Net). It is extremely sensitive to execution environment and makes one to revisit 90x. It works, but it does not really offer anything in terms of visualiztion. It can plot a dependency graph or matrix and... that is it.
The best tool I came around was MOOSE. It is language agnostic and has decent visualization capabilities. I liked it a lot. But... It is still hard to work with. It is written in SmallTalk, which I have not touched since 2003. It is largely undocumented. It develops fast without much regard for backward compatibility. It is very powerful and once you get hold of it you can do anything in it. I really loved it. But it is not user friendly. I do not expect users of my tool to spend months learning SmallTalk, Pharo and MOOSE.
I am back to square one. I have a way to gather useful data but I have no nice way to present it to the user.
I spent last week contemplating my options. And here it is - the only options I see to move forward. I am going to write a visualization tool. I will focus on just one particular visualization though:
It will be based on Code City idea. Packages are blocks, classes are buildings, size is the number of methods by number of fields, height is the lines of code count and color is cyclomatic complexity.
Unlike original Code City (and its more modern re-implementations, such as incubating Eclipse plugin "CodeCity") I want to make that visualization interactive. It should not be hard to export generated landscape as a map for a Unity-based game. Would not it be cool to walk through the application? And smash or shoot some of those ugly classes.
That is my goal. If somebody beats me to it, I will be happy. This endeavour was never my intent and I will be glad to be relieved of it.
If you want to comment on this particular article, feel free to drop me a line at voronaam on gmail.com.