In my job, I go through a Software Design phase for every task I'm given. That includes drawing a class diagram and a sequence diagram in more-or-less standard UML.
Now, I've drawn my diagrams in a variety of tools in the past, ranging from the highly specialized to the wildly simplistic (like PowerPoint). I've come to understand the shortcomings of UML modeling tools in general. And as a good geek, I'm going to write them down.
Rather than being negative, I'm going to write down what I want from a modeling tool. Then I can use that wishlist as criteria for evaluating the available tools, until I find a good one. If any such thing exists.
The following are absolutely required for any UML modeling tool:
- Supports Class and Sequence Diagrams
More would be nice, but these are the two I really require. - Configurable Display
I should be allowed to choose whether parameters are included in the messages on sequence diagrams. I should also be able to choose not to display some operations of a class in a class diagram, since they're probably not all important to my design. - Group Selection and Movement
This is particularly important on sequence diagrams, where I move groups of messages up or down to make room for steps I forgot. Doing so shouldn't mess up my alignment, my lifelines, or any other portion of the diagram. - Infinite Undo
Seriously. We all make mistakes. Every operation should be subject to Control-Z. - Supports Synchronous, Asynchronous, and Reflexive Messages
Again, seriously. Why are there tools that don't support reflexive (call myself) messages? - Dynamic Document Size
I'm creating software design here, not a pretty drawing. I don't care how big it gets; it's as big as it needs to be. Don't restrict me to some printing size or other. And on a related note... - Scrolling
When these diagrams get complicated, I may need to draw a line all the way from one end to the other. Don't make me zoom out so far I can't tell what I'm doing. Just keep scrolling when I drag a line off the visible area. And keep a marker or tooltip so I can tell which line I'm connecting to. - Shared Data Model
When I change a class on the class diagram, the method should become available on the sequence diagram. If I add a new method on the sequence diagram, it should show up on the class diagram. All these drawings are descriptions of a single system; they should all be connected. - Supports Large Projects
I'm dealing with thousands of classes, sometimes. My tools should be able to deal with them, too. Without crashing or even slowing down.
These things would be nice to have, but they are not required:
- Import Existing Code
I can make everything myself, but importing the aforementioned thousands of classes would be nice. I don't necessarily need a class diagram, but the tool should know who's derived from who. Bonus points for automatically drawing the relationship when I put related classes on the diagram. - Code Generation
I can write my own code. Really. I do it all the time. As long as we've got all this UML, though, why don't you kick things off for me and save me some typing? - Design Patterns
This would be useful for experts and learners alike. Save me a little time and effort, give me a button that produces a Factory pattern from a few simple inputs. - Alignment and Spacing
Okay, I'm not just making pretty pictures. I want to be able to align the classes with their tops together, or align two asynchronous message interactions. I want all those classes that implement one interface to look like I've drawn a single dotted line with lots of branches. I want my classes spread out evenly. Is this too much to ask? - Standard Format Import and Export
I may switch tools someday. I don't want to be locked into a single format. Give me a way to save for other editors, and a way to import old projects.
Anybody else want to add something? Leave it in the comments, and I'll consider it. Got a tool that does all that, and brings me a warm lunch? I'd love to review it. Just leave a comment, and I'll get to it as soon as time allows. $DEITY knows I've got enough to model.
The Results So Far
- BOUML - Unsatisfactory, but it's still the best thing I can find. Unfortunately, the project lead has taken down all downloads due to a copyright battle Wikipedia. I am now actively looking for another editor... again.
- Umbrello - Unsatisfactory, mostly because of its failure when rearranging sequence diagram actions, but also because it has trouble importing classes. At least it's got a data model, though.
- Open ModelSphere - Poor, because it's so limited and can't import my codebase.
- Dia - Poor, because it's just a drawing program, not a modeling program. But at least it draws diagrams pretty well.
- Gaphor - Fail, because its lack of a model leaves it just a drawing program, and even then its missing some of the tools you need.
- ArgoUML - Fail, because it's a pain to work with and it has NO UNDO.
Some Other UML Modeling Programs
- UMLGraph - Although it's kept up-to-date, it can't do sequence diagrams.
- Papyrus for UML - An Eclipse plugin that looks intriguing, but apparently hasn't been updated since 2008.
- Violet - Even though it's from 2007, I installed it because it offered Eclipse integration, with drag-and-drop class import. Unfortunately, it didn't automatically detect inheritance, it couldn't customize the class appearance, and it crashed Eclipse while trying to update a line. Sigh.
- XUG - Looks like it's specifically designed for reverse engineering, may not support editing. Since it's based on UMLGraph, it probably can't do sequence diagrams. Oh, and it's from 2005.
- UMLet - An even older UML modeling program with no class import.
- LightUML - a 2006 Eclipse plug-in.
- NClass - No class import from Java.
- Poseidon for UML - Spend $200 to import from Java? Thanks, but no.