使用Graphviz绘制用例图

Technorati 标签: Graphviz,UML

摘要

Graphviz是一个非常强大的,描述式的图形绘制工具。使用Graphviz绘制关系图形非常的容易和简便,修改起来也十分容易。通常我们都使用Visio或者一些Case工具绘制用例图,但是这些工具修改用例图的时候都比较麻烦。今天,我将给大家介绍如何使用Graphviz绘制用例图,以及使用Graphviz绘制用例图的优势。

下面是维基百科中对于Graphviz的介绍:

Graphviz (short for Graph Visualization Software) is a package of open source tools initiated by AT&T Research Labs for drawing graphs specified in DOT language scripts. It also provides libraries for software applications to use the tools. Graphviz is free software licensed under the Common Public License.

效果

废话不多说,首先上效果图:

结果

有继承,有扩展,有包含,是一个比较全面的用例图。

代码

Graphviz是使用Dot脚本描述图形的,我们来看看上面那幅用例图的代码:

digraph G {
	graph [rankdir=LR];

	subgraph cluster_Actor2 {
		a2;
		label = "Actor2";
		labelloc = b;
		color = white;
	}
	a2 [color=white, label="", shape=box, image="stick.png"];

	a2 -> Case2;
	Case2 -> { Case21 Case22 } [style=dashed, label="<<extends>>", dir=back];

	subgraph cluster_Actor1 {
		a1;
		label = "Actor1";
		labelloc = b;
		color = white;
	}
	a1 [color=white, label="", shape=box, shapefile="stick.png"];

	a1 -> Case1;

	Case1 -> Case11 [style=dashed, label="<<include>>"];
	Case1 -> { Case12 Case13 } [style=dashed, label="<<extends>>", dir=back];

	a1 -> a2[arrowtail = empty, dir=back];

	{ rank = same; a1; a2; }
}

代码比较少,看起来也比较显然,但是我们还是一步一步分析一下。

首先diagraph G{}表示将绘制一个有向图;graph [rankdir=LR]表示图中元素的排列方式是按照从左向右排列的(默认从左到右,从上到下,即LD)。

由于Graphviz中没有内置Actor的图形,所以我们需要自己绘制一个Actor。这里我给提供一个:

stick

Graphviz中对于图片上的标记默认会显示在图片正中,为了让Actor的Label显示在小人的下方,我们不得不做一个trick:

subgraph cluster_Actor2 {
	a2;
	label = "Actor2";
	labelloc = b;
	color = white;
}
a2 [color=white, label="", shape=box, image="stick.png"];

除了这一点比较讨厌以外,其他的地方就非常优雅了。比如说,a2如果有两个用例:Case1和Case2的话,那么使用如下语句即可描述:

a2 -> { Case1, Case2 };

注释的形式和C++语言是相同的。如果不想要箭头的话,可以使用如下语句:

a2 -- { Case1, Case2 };

也可以连续的进行描述:

a2 -- Case3 -> { Case31, Case32 };

总之就是你怎么想的,就可以怎么画:)根本不需要你考虑他们都画到了什么位置,Graphviz会自动为你调整的。

唯一需要注意的是,A –> B这种情况会对A和B产生一种关系,这种关系决定了A和B在布局时的位置,如果A是B的上一级,而又需要产生一个由B指向A的箭头,则需要使用下面这样的语句:

A -> B [dir=back];

而最后一句

{ rank = same; a1; a2; }

只是为了将Actor对齐。

优势

使用Graphviz绘制关系图,只需要描述图中个元素之间的关系即可,而不需要考虑其他问题,可谓“所想即所得”,与使用Visio进行绘图相比较要优雅、快速的多。

题外话

使用Graphviz绘制类图和时序图的话,可以使用UMLGraph。如果用例图不仅仅是团队交流用,还用于Case工具的其他应用,最好还是使用Case套件进行绘图,比如说Rose。

参考资料

http://martin.elwin.com/blog/2008/05/uml-use-case-diagrams-graphviz/

http://wiki.woodpecker.org.cn/moin/GraphViz

http://wiki.woodpecker.org.cn/moin/GraphVizForMoin

posted @ 2010-08-01 10:02  HCOONa  阅读(3246)  评论(3编辑  收藏  举报