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.

Code Canvas Example

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
Linux kernel in PFFF view 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.

 

6 Comments

  1. LazyFan says:

    For UML:

    Try BOUML it is a Generator and Reverser. But the key element on reversing is that its very very very fast.
    It used to be FOSS but the develop did not get any money so, he has started charging for it but its still cheap. Link: http://www.bouml.fr/

    For a FOSS UML tool why not try ArgoUML. anotehr great tool. Link: http://argouml-stats.tigris.org

    For general diagrams like Visio alternatives then there is:
    Dia – http://projects.gnome.org/dia/ and http://dia-installer.de/
    Inkscape – http://inkscape.org/
    LIbreDraw part of Libre Office – http://www.libreoffice.org/features/draw/

    And plenty of others I am sure.

  2. Prad says:

    The Yed Editor is quite handy, and free too, not open source though. Not code aware, but apparently can generate some graphs from csv files.

    http://www.yworks.com/en/products_yed_about.html

  3. AProviste says:

    Modelio is a FOSS UML tool. It is a handy and extendable tool so, for example, it is possible to reverse Java code with a dedicated module. It supports all UML2 diagrams (except timing diagram) and also BPMN2.
    Some tools listed here are not diagramming tools but just drawing tools (like Inkscape).
    ArgoUML is also a good tool but unfortunately it only supports UML 1.4 diagrams. UML 1.4 is a little outdated.
    MagicDraw is other great tool but commercial.

  4. Jimmy says:

    I’m surprised you haven’t included the new generation of architectural control tools. For example the Dependency Structure Matrix (DSM http://en.wikipedia.org/wiki/Design_structure_matrix) as used by Lattix, IntelliJ and Structure101, or the Levelized Structure Map (LSM http://structure101.com/blog/2011/03/introducing-levelized-structure-maps-lsm) used by Restructure101. SonarJ is also widely used. It is true that these tools are more than “just” comprehension tools, i.e. they let you manipulate and define architecture also, but visualization is key to these capabilities, so they definitely belong to any survey of diagramming techniques.

    • Chris says:

      Jimmy,

      You are right on that those tools should be covered. Perhaps that comparison will be the subject of a future post.

  5. Padhu Ramalingam says:

    I’m using TopCased now to reverse engineer a large Java project I joined, to understand the code. However Architexa looks lot more powerful and give that a try.
    -Padhu

Leave a Reply