用例图显示谁是相关的用户,用户希望系统提供什么样的服务(用例),用例之间的关系图,用例图主要的作用是获取需求、指导测试。所以,用例图是站在用户的角度来画的图,应该体现的是用户想要的功能,并不需要体现如何实现等具体细节。用例可以用两种图来体现,即顺序图(Sequence Diagram)和协作图(Collaboration Diagram)。
用例图主要由四部分组成,即
参与者(Actor)、用例(use case)、子系统(subsystem)(这个我没画)、关系(relation)
参与者:整个软件外部使用软件的人或者环境。
用例:可以提供的功能,并不需要了解具体实现的细节,虽然与接口很类似,但是用例不等于接口。
关系:参与者与用例,用例与用例等的之间的关系。
用例图中主要有以下几种关系:
A.关联(Association)
主要表示参与者与用例之间的通信,任何一方都可以发送或接收消息,它使箭头指向消息接收方。
B.泛化(Inheritance)
主要表示参与者之间或用例之间的关系。泛化关系是一种继承关系,子用例包含父用例所有的结构、行为和关系,同时,子用例还有各自不同的部分,泛化类似于继承、多态。泛化关系在用例图中使用空心的箭头表示,箭头方向从子用例指向基用例。
C.包含(include)
主要表示用例之间的关系,当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。例如我们在教育考试院查询报名,可以将报名拆分成填写报名信息和缴费。include关系在用例图中使用带箭头的虚线表示,包含箭头从基用例指向子用例。
D.扩展(extend )
主要表示用例之间的关系。扩展是对基用例的扩展,基用例本身是一个完整的用例,而子用例对基用例的一个扩展点进行扩展,子用例对基用例来说并不是必须的。就像去超市买东西,有的时候有赠品,有的时候没有赠品,赠品对于要买的东西来说没有影响。extend关系在用例图中使用带箭头的虚线表示(在线上标注<<extend>>),箭头从子用例指向基用例。
用例图应该出现在需求文档里,用例图是设计者+用户的模式来表达需求的,所以用例图的用例的命名应该符合用户的需求,把握好用例图中的各种关系,才能画出好的用例图来。