📋 PM | 用例/领域建模

这里来探讨一下有关软件的本质与软件工程科学的一些概念

这次主要关注面向对象分析与设计中的用例建模

绘制用例图

https://sysu-swsad.github.io/swad-guide/06-usecase-modeling

用例的概念

用例是一种通过用户的使用场景来获取需求的技术,描述了在软件工程中系统如何反应外界请求。用例说明了系统在每个场景中是如何和最终用户或其他系统互动,从而获得一个明确的业务目标

用例和场景的关系?什么是主场景或 happy path

每个用例可以包含一个或多个场景。因此用例和场景是包含关系。

每个用例都有一个主场景,主场景也被称为理想路径,通常描述了系统主要的功能和实现目标。

用例有哪些形式

用例可以以不同的细度来编写,因此存在以下形式:

  • 摘要 (brief)
    • 使用简短的句子来总结用例,通常描述主要的成功场景。用于早期的需求分析,以快速了解主题和范围,创建时间短。
  • 简便格式 (casual)
    • 由文本段落组成,用总结或者故事的形式详细地描述用例,涵盖各种场景。
  • 完整正式 (fully)
    • 详细说明了所有的步骤和变化,还包括了前提条件和成功保证等支持部分。相对其他形式具有重要架构特征和一些创新用例。

对于复杂业务,为什么编制完整用例非常难

对于复杂业务,通常包括很多使用场景和功能,而每个场景和功能之间也存在很多联系。因此,对复杂业务编制完整用例需要对于整个系统有一个很深入的了解,每个模块之间的联系必须清晰明了。由于大型的复杂业务通常由不同的人负责不同部分的细节,因此很难编制完整用例覆盖所有的细节。

什么是用例图

用例图是用户与系统交互的最简表示形式,用于展现用户和与其相关用例之间的关系,表达了系统中不同种类的用户和用例。是由参与者、用例、边界以及它们之间的关系构成的用于描述系统功能的视图。

用例图的基本符号与元素

  • 参与者

    • 指系统以外的,在使用系统或与系统交互中扮演的角色

    1557982320368

  • 用例

    • 包括变量在内的一组动作序列的描述

    1557982594908

  • 系统边界

    • 标识建模系统的边界,系统所包含的范围

1557982635323

  • 箭头
    • 用于表示用例/参与者/外部系统等组件之间的关系

1557982673312

用例图的画法与步骤

  • 确定系统边界

    • 画一个 System 边界框
  • 确定 Actors

    • 确定使用系统的主要参与者和角色
    • 使用 actor 符号在用例图中表示,通常放在系统的左边
  • 确定用例

    • 以主要参与者为目标驱动,收集主要参与者的业务事件
  • 确定系统依赖的外部系统

    • 使用 Neighbor system 框表示用例依赖的外部系统、服务、设备等
    • 使用构造形 (Stereotype) 识别外部系统
  • 确定用例和 Actors 之间、用例和用例之间、用例和外部系统之间的关系

    • 使用无方向连线表示双向交互的协议
    • 使用<<include>>表示子用例是父用例的一部分
    • 使用<<extend>>表示子用例是父用例的可选场景或技术特征

用例图给利益相关人与开发者的价值有哪些

  • 可以让人在一个更高的层次概览整个系统
  • 使用平白的语言让项目参与者理解系统
  • 明确了整个系统的业务目标和范围
  • 可以更有效地评估项目的复杂度
  • 可以更有效地评估各个需求之间的优先级
  • 使得开发者对于模块之间的联系更加地清晰

选择 2-3 个你熟悉的类似业务的在线服务系统(或移动 APP),如定旅馆(携程、去哪儿等)、定电影票、背单词 APP 等,分别绘制它们用例图

  • 请使用用户的视角,描述用户目标或系统提供的服务
  • 粒度达到子用例级别,并用 include 和 exclude 关联它们
  • 请用色彩标注出你认为创新(区别于竞争对手的)用例或子用例
  • 尽可能识别外部系统和服务

这里选择了定电影票在线服务:猫眼电影、淘票票和糯米电影

淘票票

1558407954424

猫眼电影

1558408005169

百度糯米

1558408040272

  • 为什么相似系统的用例图是相似的?

因为相似的系统都具有相同的功能和需求,以上面三个在线订电影票的在线服务系统为例,他们都是为用户提供一个核心功能 在线选座订票 , 其流程都是按照 登陆 - 选择电影 - 选择电影院 - 选择场次 - 选择座位 - 支付 这个形式,这个流程也是用户认知中最直观的流程。因此他们在核心用例上几乎都是一样的,只有在一些细节部分可以加入自己的创新元素,因此,相似系统的用例图都是相似的。

  • 简述如何利用不同时代、不同地区产品的用例图,展现、突出创新业务和技术

不同的时代和不同地区都存在某些时代特色或者地区特色。比如当今时代,一般的互联网产品都会接入在线支付、扫码支付等 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 用户管理已支付或者未支付订单
用例 业务 计算 原因 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

绘制用例图模型

1558450911179

Make reservation 用例的活动图

1558452151981

投递员使用投递箱给收件人快递包裹

  1. x 科技公司发明了投递柜,它们自建了投递柜以及远程控制系统。注册的投递员在推广期免费使用投递柜。由于缺乏资源,仅能使用 y 移动平台向客户发送短信通知。
  2. 随着产品推广,x 公司与各大快递 z 公司达成协议。x 公司在快递柜上添加了二维码扫描装置,z 公司的快递员不仅可在快递柜上登陆(由 z 公司提供认证服务),且可扫描快递单号,投递入柜后自动由 z 公司发短信给客户。客户取件后,自动发送给 z 公司投递完成。
  3. x 公司进一步优化服务,开发了微信小程序实现扫码取快递。如果用户关注了该公司公众号,直接通过过公众号推送给用户取件码等信息。不再发送短信。

备注: 关于 z 公司投递员认证过程。一般采用用户登陆 z 公司,z 公司用私钥签名的 token(二维码包含公司名,用户 ID,有效期等);x 公司扫描该二维码,用对应公钥验证该 token。

根据以上业务场景

分别用多泳道图建模三个场景的业务过程

  • 第一个场景

1558453480954

  • 第二个场景

1558453710622

  • 第三个场景

1558454143727

快递柜系统最终的用例图模型

  • 用正常色彩表示第一个业务流程反映的用例
  • 用绿色背景表述第二个业务场景添加或修改的用例,以及支持 Actor
  • 用黄色背景表述第三个业务场景添加或修改的用例,以及支持 Actor

1558455070954

领域建模

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_3

数据建模

  • 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 用例

领域建模

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 对象建模。
  • 建模要求: 参考练习不能提供足够信息帮助你对订单对象建模,请参考现在 定旅馆 的旅游网站,尽可能分析围绕订单发生的各种情况,直到订单通过销售事件(柜台销售)结束订单。

生命周期建模

流程图

土豪通道
0%