
I'm still rating UML editors. Last time, BOUML failed to impress me. This time, I'm trying Gaphor.
I thought Gaphor would be terrific, since it's a Python/GTK project, and therefore native to my system (Ubuntu/Gnome). Should be easy to modify, too. And the home page looks good!
But Gaphor failed miserably for my purposes. Let's see why.
Supports Class and Sequence Diagrams: Poor. Technically, Gaphor "supports" any diagram. In fact, it makes no restriction about what kind of elements you put on a diagram. Mix your classes with your lifelines, go right ahead!
But that's not why I rated Gaphor "Poor" for diagram support. Rather, it's because there's no aggregation indicator for class diagrams. That's right, you can say "is-a" but not "has-a". On its website, Gaphor has a tutorial for adding your own elements... but why should I have to add an aggregation diamond?
Configurable Display: Fair. Gaphor didn't allow me to change colors -- perhaps that's hidden somewhere, but after the aggregation debacle I wasn't willing to look for too long. It also wouldn't let me move the labels for the message lines on my sequence diagrams, which means they're going to get crowded or overlap other elements in inconvenient ways. However, it supports UML syntax for everything. You can also use non-UML labels for your message lines, so that's REALLY configurable.
Unfortunately, you have to do everything by hand. It doesn't give you a dialog to enter attributes, or auto-complete types that are already in your data model. That's still the ultimate in configurability, but it's not a big help to usability.
Group Selection and Movement: Poor. While this works with classes and their associations, it doesn't work on calls. When I suddenly realize I've left out the initialization call, I can't move everything down and insert the new call. That's annoying.
Infinite Undo: Perfect! It even separates the undo actions by diagram. Of course, with the poor selection support, you're going to need this feature. A lot.
Supports Synchronous, Asynchronous, and Reflexive Messages: Poor. You have to bend the reflexive line around on your own. There's no support for orthogonality, so it gets crooked. The asynchronous line is represented a little differently than I'm accustomed to, but that's a minor detail. I'm an old geezer (in software reference frame), so there's probably a newer UML specification that I haven't upgraded to. As long as I can get my thoughts across, I'm good.
Dynamic Document Size: Poor. I didn't have to play around with page sizes, but the document only resizes when you place something that overlaps the edges. Then you have to use the scrollbars, move it over the edge, and set it down again. It can take a while to expand the document to the dimensions you need.
Scrolling: Poor. When stretching a sequence line from one end to the other, the view doesn't automatically scroll. However, you can set the end down, use the scrollbars, and move the end where you need to go. (Repeat if you still haven't scrolled all the way to your destination.)
Shared Data Model: Fail. Although any classes you define are shown in the sidebar, there's no way to reuse those same classes in the sequence diagram. This is not "shared". The message line wouldn't auto-complete the message name, and the only way to add a new operation from the sequence diagram was to open a class diagram! This is the essence of UML modeling, in my opinion; without a shared data model, all you've got is just a structured drawing program with some useful primitives.
Supports Large Projects: Sure, why not? Fail. The only import available is from Python, and I don't have a large Python codebase to test it on. But without a shared data model, all you're doing is drawing pictures; make 'em as big as you want!
Gaphor didn't even support any extras to recommend it. There was no support for alignment, spacing, or distribution of elements; the only import was from Python; and it doesn't do code generation.
Perhaps if you're doing something in Python, Gaphor will work for you. But it's severely crippled for my uses.
did you give open modelsphere a try ? It looks quite good.
cheers
chris
Pitty your a bit disappointed in Gaphor. A lot of your complaints are about sequence diagrams. This is a relatively young feature and therefore it needs some polishing still (fair).
It doesn't give you a dialog to enter attributes, ...
We've omitted dialogs on purpose as they have a tendency to provide all sorts of configuration that doesn't show up in the diagram. That's nice if you want to do code (java/python/basic) generation. (see my opinion on code generation below).
... but why should I have to add an aggregation diamond?
The diamond shows the kind of aggregation on the end (none, shared or composite). They're not special
association types, but rather properties of the association ends. And yes, Gaphor allows you to have diamonds on both sides (not very useful
Your point on the shared data model is totally right. There is far less sharing than I'd like to see.
And as far as code generation goes: I think generating code from UML models is not very useful. You can generate some boilerplate, yes, but in the end you want to do some roundtrip development. My personal opinion is that Gaphor (or model driven design in general) works best when the tooling (in this case Gaphor) is used to configure your application (e.g. create models to wire Spring classes or generate some sort of XML as configuration for a state engine).
Regards,
Arjan
I'm not too happy with code generation, either. If you've got a good design, the code tends to flow naturally. Besides, diagrams shouldn't be complete enough to generate code; they should be just enough for the coders to understand what's needed.
On the other hand, import is important to me. I'm dealing with a large project, and I don't want to hand-craft diagram objects for every core class I need to use.
My problem with aggregation diamonds isn't what they represent; it's that I couldn't create one at all! I tried to model aggregation but couldn't. It sounds like Gaphor actually supports them, but I couldn't figure out how. If you can tell me, I'll be happy to revise the review.
/ Regards Kjell