Diagramming Tools – A (Biased) Survey
Friday, September 21st, 2012 - By Christopher Deschenes
Diagramming tools can help you to quickly understand a new project, debug code, visualize and enforce usage patterns, and quickly generate high quality documentation. All good. However, not all tools are created equal and there are lots of legacy tools (UML has been around for a while). I wanted to take a look at what is out there to get a sense for how these tools are evolving.
Below is a slice if you will through what are some next generation offerings in software development, tools that are trying to do something different, and some well established old-guard tools that everyone has heard of and compares all comers too.
Debugger Canvas Debugger Canvas by Microsoft (see video) is based on Code Canvas which was developed at Microsoft Research in collaboration with the Code Bubbles folks from Brown. Debugger Canvas is available to premium Microsoft Visual Studio license holders. I love how you can view a GUI widget, its documentation, and implementation side by side in one clean view. The development metaphor is very different from a traditional IDE.
pfff pfff is an open source tool built by Facebook. It works on their primary language PHP. Here is a link to pfff on GitHub. In the author’s words “pfff is mainly an OCaml API to write static analysis, dynamic analysis, code visualizations, code navigations, or style-preserving source-to-source transformations such as refactorings on source code.”
It generates some interesting graphics that certainly help to conceptualize the software architecture of a code base. Here is a link to a code graph of linux.
LightTable I’m also throwing something very interesting into the mix; LightTable from Chris Granger. It is different. LightTable provides an awesome metaphor for writing Clojure. Python and other languages are supported. “light” mode provides a spatial representation of code relationships and layout.
Pretty amazing! This is a rather cool new IDE concept. I love the way you can see your code running in your workspace while you edit it. The image shows a game running.
Google Google surprisingly has nothing that I can find although there a lot of tools listed if you search under code.google.com for diagramming tools and java reverse engineering. Does someone know any diagramming tools that are developed by/used by the Google folks?
Gliffy and UMLet There are a number of tools out there, some web-based, some desktop-based, that provide the user with the ability to draw UML diagrams. Gliffy and UMLet are great in that they don’t try to do code generation from diagrams – something that often does not work. This way they have focused on building an easy to use (albeit limited) tool. These tools do not do reverse engineering. Gliffy and UMLet are very popular choices but they are not “code-aware” as I understand it. Their efficacy for understanding a code base and debugging are limited.
Rational Ah yes. The mighty Rational. A powerhouse for a long time. Perhaps too long. Very strong on upfront design using MDA and heavy software lifecycle processes. IMHO it is being disrupted significantly by agile and lean development methodologies. It is expense to acquire and the learning curve is not insignificant. The next generation of tools is not encumbered by having to meet the raft of requirements that have amassed around Rational over the years.
AgileJ/MaintainJ/ModelGoon Why these tools? They certainly deserve mention and perhaps a closer look. In some situations you want a commercially backed tool (so you have someone to yell at if something goes wrong). Aligning with Agile processes certainly makes sense especially if the tooling really enables and compliments that style of development.
Native IDE Capabilities – Yes – IntelliJ IntelliJ is a great IDE (Netbeans too!) and has pretty good support for integrated diagrams. Together with the rest of what makes IntelliJ strong makes for a really powerful combination – code-aware diagrams that don’t suck. One gap however is support for sequence diagrams.
UML-Lab from Yatta The German offering is quite impressive. Round-trip engineering between diagrams and code is a strong claim to make (because it is really hard to go each way with a high degree of reliability.) Reverse engineering is pretty nifty too. And it is for Java as well. UML-Lab doesn’t provide a high level overview of your code however.
Architexa That’s us. That’s where the “biased” comes from. I’m not going to review our tools here or compare them to the tools listed. Our philosophy though is that we love developers and want to make their lives better by helping them produce higher quality code and minimizing time spent on marginally valuable tasks.
Didn’t Include Your Favorite? Yes I know. I’ve neglected to mention Enterprise Architect. Let me know if there are other cool tools that should be mentioned here. I simply don’t have time to do an exhaustive comparison. No slight intended for tools not mentioned.
There are a lot of tools out there that target specific languages and versions of UML. Diagramming.org has a fairly extensive list of both proprietary and non-proprietary/open source diagramming tools.
Common Theme One popular use for diagramming tools is helping developers when they are trying to understand a new code base. Developers need ready access to the “architecture” though it may not be explicitly documented and not apparent from visual inspection of the code itself. Yeah, my code is “self-documenting” because I’m so good, but your’s most likely is not.
By “new” project I mean that it was inherited or the developer is new to the team. It could even be a new project. Experience as a developer certainly helps but for a complex code base that has had developer churn you just can’t figure it out by trolling through the code – at least not as efficiently as you could with the right tools.
The Bottom Line The tools included here are chosen to be more or less representative but to also include some innovative approaches. The bottom line is that being able to automatically or at least semi-automatically (guided) generate visual depictions of complex code design and interactions can greatly reduce time wasted manually generating diagrams (which are out of sync with the code almost immediately.)
Most of these tools have either free trial downloads or are free for open source or individual use. If you haven’t done so lately explore your code base with one of these tools. Try using some of the diagrams in code reviews and architecture enforcement. Let us know if you got bang for the buck for the time spent.