Diagrams of software are used in a variety of situations. In the simplest case, it’s just a question of communicating a few ideas via an informal sketch. In contrast to an ad hoc boxology, the UML provides a way to interpret a diagram with a minimum of ambiguity. In my experience and research I have however noted that UML can sometimes be perceived as “heavyweight”: basically a formal method that requires dedicated training and sophisticated tooling. It doesn’t have to be so, and indeed according to a 2014 survey of software sketches and diagrams in practice, 48% of surveyed diagrams contained only “some” UML elements, with remarks from respondents indicating that “if UML is used, it is often not used strictly as defined in the standard.” In this article, I introduce a tool to support precisely this kind of informal and lightweight UML sketching.
JetUML‘s goal is to crush the UML learning curve and promote no-fuss diagramming. It supports making useful diagrams in mere seconds and requires near-zero prior knowledge of UML. Thus, its target audience includes developers who just want to sketch ideas quickly and software engineering educators who teach topics other than model-driven development.
There’s not much to do with JetUML besides selecting elements from a toolbar and drawing boxes and arrows. So initially the tool can be used as a quick interactive way to sketch basic elements and relations with minimal UML semantics.
Once there’s a need for a more precise diagram, it’s possible to enable features that provide more information about the notation. This selective disclosure allows one to become more familiar with the notation on an as-needed basis.
The original motivation for JetUML was that I needed a UML tool that would allow me to sketch diagrams in live lectures on software design. After trying many tools I had settled on the Classic Violet. It had precisely the user-interface paradigm I was looking for. Unfortunately, it was lacking some usability features (like undo/redo) and its reincarnated version was moving towards a more comprehensive modeling tool. In January 2015 I started the JetUML project based on a modernized version of Violet 0.16. JetUML supports class diagrams, sequence diagrams, use case diagrams, state diagrams and object diagrams.
Five years later JetUML is still in active development and I use it almost on a daily basis. One of my favorite feature is the ability to copy the diagram to the system clipboard with a shortcut key and dump the image in slide presentation tools, in GitHub issues, etc. The “Duplicate” feature to clone a diagram is especially useful to explore various design alternatives. It’s also possible to save diagrams in an interoperable JSON representation. Naturally, JetUML’s own documentation uses itself, for example to document the design of its custom properties framework. I also used JetUML to create the hundreds of diagrams in the book Introduction to Software Design with Java and its companion website. The vast majority of these diagrams took less than two minutes to create.
The short term plan for JetUML includes an overhaul of the layout algorithms for class diagrams, to support cleaner visualizations with fewer edge crossings and more strategically placed labels. Stay tuned!
Martin Robillard is a Professor of Computer Science at McGill University. His current research focuses on problems related to software evolution, architecture and design, and software reuse. He served as the Program Co-Chair for the 20th ACM SIGSOFT International Symposium on the Foundations of Software Engineering (FSE 2012) and the 39th ACM/IEEE International Conference on Software Engineering (ICSE 2017). He received his Ph.D. and M.Sc. in Computer Science from the University of British Columbia and a B.Eng. from École Polytechnique de Montréal.
Full of high spirits I just took the JSON output converted it to XML, ran a little XSLT transformation on it and tried to read the reconverted JSON file. Unfortunately failed.
JSON import seems quite sensitive to formatting.
Finally, this was too much for me ;o)