这里来探讨一下有关软件的本质与软件工程科学的一些概念
这次主要关注面向对象分析与设计中的用例建模
绘制用例图
https://sysu-swsad.github.io/swad-guide/06-usecase-modeling
用例的概念
用例是一种通过用户的使用场景来获取需求的技术,描述了在软件工程中系统如何反应外界请求。用例说明了系统在每个场景中是如何和最终用户或其他系统互动,从而获得一个明确的业务目标
用例和场景的关系?什么是主场景或 happy path
每个用例可以包含一个或多个场景。因此用例和场景是包含关系。
每个用例都有一个主场景,主场景也被称为理想路径,通常描述了系统主要的功能和实现目标。
用例有哪些形式
用例可以以不同的细度来编写,因此存在以下形式:
- 摘要 (brief)
- 使用简短的句子来总结用例,通常描述主要的成功场景。用于早期的需求分析,以快速了解主题和范围,创建时间短。
- 简便格式 (casual)
- 由文本段落组成,用总结或者故事的形式详细地描述用例,涵盖各种场景。
- 完整正式 (fully)
- 详细说明了所有的步骤和变化,还包括了前提条件和成功保证等支持部分。相对其他形式具有重要架构特征和一些创新用例。
对于复杂业务,为什么编制完整用例非常难
对于复杂业务,通常包括很多使用场景和功能,而每个场景和功能之间也存在很多联系。因此,对复杂业务编制完整用例需要对于整个系统有一个很深入的了解,每个模块之间的联系必须清晰明了。由于大型的复杂业务通常由不同的人负责不同部分的细节,因此很难编制完整用例覆盖所有的细节。
什么是用例图
用例图是用户与系统交互的最简表示形式,用于展现用户和与其相关用例之间的关系,表达了系统中不同种类的用户和用例。是由参与者、用例、边界以及它们之间的关系构成的用于描述系统功能的视图。
用例图的基本符号与元素
参与者
- 指系统以外的,在使用系统或与系统交互中扮演的角色
用例
- 包括变量在内的一组动作序列的描述
系统边界
- 标识建模系统的边界,系统所包含的范围
- 箭头
- 用于表示用例/参与者/外部系统等组件之间的关系
用例图的画法与步骤
确定系统边界
- 画一个 System 边界框
确定 Actors
- 确定使用系统的主要参与者和角色
- 使用 actor 符号在用例图中表示,通常放在系统的左边
确定用例
- 以主要参与者为目标驱动,收集主要参与者的业务事件
确定系统依赖的外部系统
- 使用 Neighbor system 框表示用例依赖的外部系统、服务、设备等
- 使用构造形 (Stereotype) 识别外部系统
确定用例和 Actors 之间、用例和用例之间、用例和外部系统之间的关系
- 使用无方向连线表示双向交互的协议
- 使用
<<include>>
表示子用例是父用例的一部分 - 使用
<<extend>>
表示子用例是父用例的可选场景或技术特征
用例图给利益相关人与开发者的价值有哪些
- 可以让人在一个更高的层次概览整个系统
- 使用平白的语言让项目参与者理解系统
- 明确了整个系统的业务目标和范围
- 可以更有效地评估项目的复杂度
- 可以更有效地评估各个需求之间的优先级
- 使得开发者对于模块之间的联系更加地清晰
选择 2-3 个你熟悉的类似业务的在线服务系统(或移动 APP),如定旅馆(携程、去哪儿等)、定电影票、背单词 APP 等,分别绘制它们用例图
- 请使用用户的视角,描述用户目标或系统提供的服务
- 粒度达到子用例级别,并用 include 和 exclude 关联它们
- 请用色彩标注出你认为创新(区别于竞争对手的)用例或子用例
- 尽可能识别外部系统和服务
这里选择了定电影票在线服务:猫眼电影、淘票票和糯米电影
淘票票
猫眼电影
百度糯米
- 为什么相似系统的用例图是相似的?
因为相似的系统都具有相同的功能和需求,以上面三个在线订电影票的在线服务系统为例,他们都是为用户提供一个核心功能 在线选座订票 , 其流程都是按照 登陆 - 选择电影 - 选择电影院 - 选择场次 - 选择座位 - 支付 这个形式,这个流程也是用户认知中最直观的流程。因此他们在核心用例上几乎都是一样的,只有在一些细节部分可以加入自己的创新元素,因此,相似系统的用例图都是相似的。
- 简述如何利用不同时代、不同地区产品的用例图,展现、突出创新业务和技术
不同的时代和不同地区都存在某些时代特色或者地区特色。比如当今时代,一般的互联网产品都会接入在线支付、扫码支付等 API,给用户方便快捷的支付体验。通过对比不同时代的用例图,可以得出当今时代的创新点在于快捷的支付方式。
- 如何利用用例图定位创新思路(业务创新、或技术创新、或商业模式创新)在系统中的作用
通过在用例图中使用不同的颜色可以突出该产品的创新点。通过概览用例图,可以看到在基础的需求上哪里可以加入创新方式。同时通过创新点在用例图中的不同位置以及和其他用例的关系,可以体现出该创新点的重要性以及难度。
- 请使用 SCRUM 方法,选择一个用例图,编制某定旅馆开发的需求(backlog)开发计划表
ID | Name | Imp | Est | How to demo |
---|---|---|---|---|
1 | 账户管理 | 30 | 10 | 用户登陆/注册账号,管理用户信息 |
2 | 查找旅馆 | 80 | 30 | 根据城市、入住日期、时长、关键字等信息进行搜索 |
3 | 选择房间 | 60 | 20 | 选择房间的类型和数量 |
4 | 支付 | 50 | 25 | 用户选择支付方式,进行支付 |
5 | 订单管理 | 30 | 15 | 用户管理已支付或者未支付订单 |
- 根据任务 4,参考 使用用例点估算软件成本,给出项目用例点的估算
用例 | 业务 | 计算 | 原因 | UC 权重 |
---|---|---|---|---|
账户管理 | 5 | 2 | 用户登陆、注册账号,获取和管理账号上的信息 | 简单 |
查找旅馆 | 10 | 6 | 需用通过多种条件筛选旅馆,寻找用户想要的旅馆 | 平均 |
选择房间 | 4 | 3 | 根据旅馆提供的房间进行选择 | 简单 |
支付 | 8 | 3 | 使用不同方式对订单进行支付,并且交付给商家 | 平均 |
订单管理 | 3 | 3 | 管理用户订单 | 简单 |
业务建模
https://sysu-swsad.github.io/swad-guide/07-usecase-modeling
使用 UMLet 建模
根据订旅馆建模文档 Asg-RH.pdf:
绘制用例图模型
Make reservation 用例的活动图
投递员使用投递箱给收件人快递包裹
- x 科技公司发明了投递柜,它们自建了投递柜以及远程控制系统。注册的投递员在推广期免费使用投递柜。由于缺乏资源,仅能使用 y 移动平台向客户发送短信通知。
- 随着产品推广,x 公司与各大快递 z 公司达成协议。x 公司在快递柜上添加了二维码扫描装置,z 公司的快递员不仅可在快递柜上登陆(由 z 公司提供认证服务),且可扫描快递单号,投递入柜后自动由 z 公司发短信给客户。客户取件后,自动发送给 z 公司投递完成。
- x 公司进一步优化服务,开发了微信小程序实现扫码取快递。如果用户关注了该公司公众号,直接通过过公众号推送给用户取件码等信息。不再发送短信。
备注: 关于 z 公司投递员认证过程。一般采用用户登陆 z 公司,z 公司用私钥签名的 token(二维码包含公司名,用户 ID,有效期等);x 公司扫描该二维码,用对应公钥验证该 token。
根据以上业务场景
分别用多泳道图建模三个场景的业务过程
- 第一个场景
- 第二个场景
- 第三个场景
快递柜系统最终的用例图模型
- 用正常色彩表示第一个业务流程反映的用例
- 用绿色背景表述第二个业务场景添加或修改的用例,以及支持 Actor
- 用黄色背景表述第三个业务场景添加或修改的用例,以及支持 Actor
领域建模
https://sysu-swsad.github.io/swad-guide/09-domain-modeling
使用类图,分别对 Asg_RH 文档中 Make Reservation 用例以及 Payment 用例开展领域建模。然后,根据上述模型,给出建议的数据表以及主要字段,特别是主键和外键
- 注意事项:
- 对象必须是名词、特别是技术名词、报表、描述类的处理;
- 关联必须有多重性、部分有名称与导航方向
- 属性要注意计算字段
- 数据建模,为了简化描述仅需要给出表清单,例如:
- Hotel(ID/Key,Name,LoctionID/Fkey,Address…..)
Make Reservation 用例
领域建模
数据建模
- Hotel (ID/Key, Name, LoctionID/FKey, Star-rating, Info)
- Customer(ID/Key)
- Reservation(ID/Key, HotelID/FKey, CustomerID/FKey, ShoppingCartID/FKey, PaymentID/FKey, check-in-data, num-of-nights, customer-full-name, customer-smoking)
- ShoppingCart(ID/Key, ReservationID/FKey, CustomerID/FKey)
- Payment(ID/Key, ReservationID/FKey, IsPay)
- RoomItems(ID/Key, ReservationID/FKey, RoomID/FKey, num-of-adulits, num-of-children, children-age)
- Room(ID/Key, RoomDescID/FKey, date, num-of-available, num-of-reservate)
- RoomDesc(ID/Key, HotelID/FKey, RoomTypeID/FKey, list-price, info)
- RoomType(ID/Key, name)
- Location(ID/Key, name, RegionalID/FKey, CityID/FKey, TownID/FKey)
Payment 用例
领域建模
数据建模
- Reservation(ID/Key, CustomerID/FKey, PaymentID/FKey, check-in-data, num-of-nights, customer-full-name, customer-smoking)
- Customer(ID/Key, name, email)
- Payment(ID/Key, CreditCardID/FKey, date)
- CreditCard(ID/Key, CreditCardTypeID/FKey, cardNumber, securityCode, expiryDate)
- CreditCardType(ID/Key, type)
使用 UML State Model,对每个订单对象生命周期建模
- 建模对象: 参考 Asg_RH 文档, 对 Reservation/Order 对象建模。
- 建模要求: 参考练习不能提供足够信息帮助你对订单对象建模,请参考现在 定旅馆 的旅游网站,尽可能分析围绕订单发生的各种情况,直到订单通过销售事件(柜台销售)结束订单。