刚接触UML建模时,我总被各种图形搞得头晕眼花——直到发现用例图是最友好的入门选择。这个看似简单的图形,其实是开发者和业务人员沟通的通用语言。想象一下,你要给朋友描述"在线点外卖"的过程:用户打开APP、浏览餐厅、选择菜品、支付订单。这些动作就是最原始的用例雏形。
用例图的核心价值在于可视化系统边界。去年我参与一个电商项目时,产品经理拿着密密麻麻的需求文档和开发团队争论不休。当我们把主要功能画成用例图后,所有人突然就理解了"用户到底能在系统里做什么"。椭圆形的用例和火柴人状的参与者,比文字描述直观十倍。
这里有个新手容易混淆的概念:用例(Use Case)不是功能列表。比如"用户登录"是个功能,而"通过第三方账号快速登录"才是一个合格的用例——因为它描述了完整的交互场景和可观测结果。记住这个区别能少走很多弯路。
现在我们来实战演练"在线商城系统"的参与者识别。很多教程一上来就教画图工具,但根据我的踩坑经验,前期分析比绘图技巧重要十倍。拿张白纸回答三个问题:
在我们的商城系统中:
这里有个实用技巧:给每个参与者写用户故事。比如:
"作为注册会员,我希望收藏商品以便后续购买"
"作为物流系统,我需要接收订单配送信息"
这种描述能帮你发现隐藏参与者。我曾漏掉"客服人员"这个角色,导致售后流程在用例图中完全缺失,后来不得不返工重画。
识别出参与者后,就该定义用例了。新手常犯两个错误:要么把用例拆得太细(比如"点击按钮"),要么合并得太粗(比如"完成购物")。我的经验法则是:一个用例应该对应一个完整的业务价值。
以"提交订单"为例,完整的用例应该包括:
注意这里没有"用户登录"——因为提交订单本身已经预设了登录状态。如果拆开反而破坏用例的完整性。
对于商城系统,我建议先列出这些核心用例:
用「角色+动词+目标」的格式命名用例,比如"顾客支付订单"就比简单的"支付"更明确。在EA或StarUML等工具中创建时,记得给每个用例添加简要说明,这对后续开发至关重要。
这是最让初学者头疼的部分。去年我带实习生时,他们总把包含(include)和扩展(extend)关系用反。其实有个傻瓜判断法:
商城系统的典型包含关系:
而扩展关系的案例:
画图时特别注意箭头方向:
工具操作小技巧:在EA中按住Ctrl键拖动用例,会自动弹出关系选择菜单。用「<
第一次画商城用例图时,我掉进了这些坑,希望你能避开:
雷区一:把系统功能当用例
错误案例:将"数据库存储"作为用例
正确做法:这是技术实现细节,应该隐藏在用例背后
雷区二:忽略异常流程
错误案例:只画"支付成功"路径
正确做法:增加"支付失败"的扩展用例,并关联到"重试支付"或"取消订单"
雷区三:过度使用泛化
错误案例:为"黄金会员"和"铂金会员"分别创建子用例
正确做法:用扩展关系处理特权差异,避免用例爆炸
还有个实用建议:先用便签纸做低保真原型。把参与者和用例写在便签上,在白板上调整关系,确认无误再用工具绘制。这比直接上软件效率高得多,团队协作也更方便。
虽然EA功能强大,但我更推荐新手用StarUML——它免费且界面更简洁。以下是快速上手指南:
有个少有人知的功能:选中用例后按F2可以添加用例规约。详细填写前置条件、后置条件、基本流程和替代流程,这些内容会自动生成文档。
导出时建议同时保存为图片和PDF。图片用于评审,PDF保留可编辑的元数据。我曾因为只导出了jpg,修改时不得不重画整个图。
优秀的用例图应该能直接转化为需求文档。我的工作流是这样的:
对于复杂系统,可以创建用例包。比如把商城分为"前台购物"、"后台管理"、"第三方集成"三个包,每个包包含一组相关用例。在StarUML中右键Model → Add Package即可实现。
最后检查清单: