许多UML建模工具可以自动生成文档,让需求人员、开发人员专心于需求、设计的建模。当然为了能够生成符合自己要求的模板,需对建模时的目录结构(模型和包)有所规划和要求,否则很难生成相应的文档。这要求提前了解相应的建模工具如何生成文档以及如何配置文档模板。不同的建模工具配置文档模板的方式和要求,如StarUML使用Word中的批注命令对元素模型进行遍历,而EA则通过RTF标注以及模型目录,
相比之下EA的文档生成和模型的目录结构绑定的更紧,如果没有事先规划,更难生成文档。这里简单记录StarUML配置生成Word文档的模板方法和注意事项,作为StarUML帮助的一些补充。EA的文档生成,另外记述。详细的StarUML文档配置方法,详见:http://staruml.sourceforge.net/docs/developer-guide(en)/ch11.html
StarUML文档生成功能菜单在“[Tool]->StarUML Generator”,如下图所示:
创建文档模板
由于StarUML的中文支持不好,如果直接按Help中的方式创建以中文命名的文档模板会出错。可以简单的到StarUML的安装路径下,找到模板所做路径,如:D:\Program Files (x86)\StarUML\modules\staruml-generator\templates。直接复制一份已有的Word模板目录(安装后默认有一份usecase specification),然后将目录改名为所希望的名称。接着将该目录下的“Template.doc”更换为自己的文档模板,作为后续添加命令的基础文档。然后,启动“[Tool]->StarUML Generator”在界面中更改,模板的注册名称。其详细做法,见下面各图所示。
1)复制已有的Wor的模板目录,并改名为所希望的名称,如“需求规格说明书”
2)在文档生成功能界面([Tool]->StarUML Generator)中,更改模板的注册名称
如何在Word文档中通过批注添加StarUML命令
StarUML是通过Word文档中的“批注”来标识如何将UML模型中的内容插入到文档的指定位置。其指示生成内容的语法主要是“命令+参数”的形式。如下图所示:
其中,命令只有4个,其中IF和SCRIPT很少用,分别是:
- REPEAT ~ ENDREPEAT (如果是在表格中自动插入多条数据,需用 ENDREPTR 结尾)
- IF ~ ENDIF (如果是在表格中自动插入多条数据,需用 ENDIFTR 结尾)
- DISPLAY
- SCRIPT
由于命令部分是通过“批注”中的作者来表示的,而Word又不能随便更改作者,所以需要下载StarUML提供的默认模板(其中提供了所有命令的批注,模板下载地址:http://staruml.sourceforge.net/files/template-word.zip),从其中拷贝批注来添加命令。在Word中拷贝批注,最好将批注的显示方式改为嵌入方式,见下图:
在嵌入批注的显示方式下,点击“审阅窗格”按钮,可编辑批注内容,输入参数:
命令用法
命令:REPEAT ~ ENDREPEAT
用途:遍历满足输入参数条件的模型元素,并执行REPEAT和ENDREPEAT之间的其它命令。注意,如果是在表格中增加多条数据,结尾应用ENDREPTR。注意,该命令可以嵌套,即REPEAT中嵌套REPEAT。
参数:PathName;FilterType;CollectionName;Condition
参数都是可选的,彼此之间使用“;”分隔,如果不指定某个参数空着即可,如::Use Case View;UMLClass;;,表示遍历目录::Use Case View中的类型为UMLClass的元素。
PathName:路径名指的是模型(Model)和包(Package)的名称,可以在StarUML中选择元素后在状态栏中查看,如下图所示:
在路径前加上“{R}”表示递归该路径下的所有子模型/子包,如“{R}::Use Case View;UMLActor;;”表示递归模型Use Case View下所有的Actor。
FilterType:UML模型中元素,如Class、Actor、UseCase。其也可以在StarUML中的状态栏中查看选定元素的类型,见前图。
CollectionName:指的是选中元素后右键菜单里(见下图)的“Constraints”和“Collection Editor”中的Attributes/Operations等,其名字和界面中显示的一样,如“;;Constraints;”。
Condition:指定条件,如“current().Documentation != “””
命令:DISPLAY
用途:显示元素指定的属性或者显示图形
参数:Pathname;Expression
Pathname:见REPEAT命令
Expression:指定元素的属性,使用current()表示当前遍历到的元素,current().Name表示当前元素的名称,其它属性类似。常用的有:
显示元素名称:current().Name;I
显示元素文档内容:current().Documentation
显示Tag内容:;trim(current().GetTaggedValueAsString(“UMLStandard”, “UseCaseSpecification”, “Preconditions”));
显示约束内容,属性、操作等类似:
REPEAT ;;Contraints;
DISPLAY ;current().Name
DISPLAY ;current().Body
ENDREPEAT
显示图形:
REPEAT {R};UMLActivityDiagram;;
DISPLAY ;; (只要在REPEAT中选定图形,此处参数默认为空即可)
ENDREPEAT
命令:SCRIPT
用途:简单的JScript脚本
用的不多,可以简单的添加文本前缀,如在用例名称加上“UC_”的前缀
SCRIPT new_name = “UC_” + current().Name
DISPLAY ;new_name;
更复杂一点的,比如为Use Case View模型下的每个包里的用例进行编号,其中每个用例通过添加Tag“ID”指明序号(如何添加新的Tag另外记录)。比如,包“需求管理”下的用例“创建需求申请单”,其ID为“001”,则自动生成用例编号“UC_需求管理_001”。代码如下:
REPEAT ::Use Case View;UMLPackage;;
SCRIPT package_name = current().Name
REPEAT ;UMLUseCase;;
SCRIPT uc_id = “UC_”+ package_name+”_” + current().GetTaggedValueAsString(“UMLStandard”, “UseCaseSpecification”, “ID”)
DISPLAY ;uc_id;
ENDPEAT
ENDPEAT
命令:IF ~ ENDIF
我很少用,不介绍了
示例模板(需求规格说明书)
供参考:下载地址:http://www.kuaipan.cn/file/id_14930590516188149.htm?source=1