软件方法笔记

250 阅读8分钟

一、建模和uml

利润 = 需求 - 设计

需求:解决“提升销售”的问题

设计:解决“降低成本”的问题

从需求直接映射设计,会得到大量重复代码;

从设计出发来定义需求,会得到一堆伪需求。

需求设计
解决“提升销售”的问题解决“降低成本”的问题
卖的视角做的视角
具体抽象
产品当做项目项目当产品做
设计源于需求,高于需求

建模工作流

建模工作流功能
业务建模描述组织内部各系统如何协作,使得可以为其他组织提供有价值的服务。
需求描述为了解决组织的问题,系统必须具有的表现——功能和性能。
分析提炼为了满足功能需求,系统需要封装的核心域机制。
设计为了满足质量需求和设计约束,核心域机制如何映射到选定平台上实现。

不同工作流产出的工件之间的区别不在于形式,而在于内容,也就是思考的边界。如果清楚了这点,及时使用C,照样可以表达需求,用word也可以“编码”

image.png

UML应用于建模工作流

image.png

(●表示优先使用,√表示可以使用)

二、业务建模和愿景

定义:一个东西的愿景就是:东西最应该卖给谁,对他有什么好处?

爆炸法

假设投资人在你身上绑了炸弹,要你在几分钟内把当前研究的系统推销出去,且只能找一个人推销。假设这个炸弹可以感应脑电波,推销完毕后,如果炸弹感应到被推销的人对这个系统不感兴趣,就会爆炸。这种情况下,你会向谁推销,推销时选择说什么话?这个问题的答案就是老大和愿景。

定位目标组织和老大

目标组织:待引入系统将改进其流程的组织。可以是一个机构,也可以是一个人群。

老大:目标组织的代表。

思考几个问题:

  • 用户满意就是好产品吗?
  • 谁是用户?
  • 凭什么人家就满意?

例子:可乐想要卖给谁?

正确而无用的废话:卖家消费者、卖给想喝可乐的人。

三、业务建模之业务用例图

3.1 识别业务执行者

定义:在组织之外和组织交互的对象就是该组织的执行者。

例如,以某国税局为研究对象,可以观察到企业财务人员到国税报税,但是业务执行者不是企业财务人员,而是企业。

image.png

3.2 识别业务用例

定义:业务用例指业务执行者希望通过和所研究组织交互获得的价值。

image.png

以上图为例,业务用例就是存款、取款、转账。

业务用例应该是稳定的,很难变化。业务用例代表组织的本质价值,很难变化,变化的是业务用例的实现——业务流程。

我们把业务流程看做是业务用例的实现。

先归纳出组织对外提供什么价值,再思考如何更好地优化组织内部流程来实现这些价值。

用好用例:关键在于理解“价值”。价值是期望和承偌的平衡点、买卖的平衡点。

image.png

患者到医院的目的应该是看病,而不是挂号。

业务用例是组织对组织的服务,相对于系统为系统提供的服务(系统用例)来说,所需要的时间是比较长的,不能把用例实现过程中的某个交互片段当成用例。

image.png

一些带有“系统”味道的词汇: 新增、查看、录入、查询、修改、配置……

识别业务用例的思路:

  1. 从业务执行者开始,思考业务执行者和组织交互的目的;(主要的)
  2. 通过观察组织的内部活动,一直问为什么,向外推导出组织外部的某个业务执行者。(补漏)

常见的错误:

  1. 把业务工人的行为当做业务用例 image.png
  2. 业务用例随带引入系统伸缩

image.png

从组织的价值来推导系统应该具备什么价值才会对组织有帮助。

  1. 把害怕漏掉的扩展路径片段提升为业务用例

image.png 4. 管理型业务用例,这样的“业务用例”不可取。没有特定组织的味道,哪家盈利机构不是为了赚钱?

image.png

四、业务序列图

业务序列图要点:

  • 消息代表责任分配而不是数据流动

image.png

正确的应该是员工使用财务主管的“审批报销单”的服务。

  • 抽象级别是系统之间的协作

业务建模的研究对象是组织,出现在业务序列图生命线上的对象,其最小颗粒是系统

image.png

image.png

  1. 只画核心域相关的系统

image.png

如果描述的是采购流程,应该画成左边这样。如果描述的是工作人员制作文档,可能是要画成右边这样,还要具体分析。

  1. 把时间看做特殊的业务实体

image.png 6. 为业务对象分配合适的责任

image.png

阿布思考法:

  1. 假设有充足的资源去解决问题,得到一个完美方案;
  2. 用手上现有的资源去山寨这个完美方案。

五、系统用例图

系统用例的定义:系统能够为执行者提供的、涉众可以接受的价值。和业务用例图相比较,研究对象从组织变成了系统。

系统执行者要点

系统执行者的定义:在所研究系统外,与该系统发生功能性交互其他系统

  • 系统是能独立对外提供服务的整体

image.png

image.png

  • 系统边界是责任的边界,而不是物理边界
  • 系统执行者和系统有交互
  • 交互是功能性交互

image.png

  • 系统执行者可以是人或非人系统

识别系统执行者

业务序列图上,和所研究系统有实线相连的对象映射为所研究系统的执行者。

image.png

image.png

系统用例要点

  • 价值是买卖的平衡点
  • 价值不等于“可以这样做”
  • 增删改查用例的根源是从设计映射需求
  • 从设计映射需求的错误二:“复用”用例

image.png

  • 系统用例不存在层次问题
  • 用例的命名是动宾结构(如果“名词+动词”已经成为行业中的一个术语,也未必要严格的动宾结构)

六、用例规约

  • 前置条件和后置条件
    • 前置条件:用例开始前,系统需要满足的约束
    • 后置条件:用例结束后,系统需要满足的约束
    • 前置条件和后置条件必须是系统能检测

image.png

image.png - 前置后置是状态,不是动作 - 前置后置条件要用核心域词汇描述

  • 涉众利益
    • 业务规则
    • 设计约束
  • 基本路径
    • 按照交互四部曲书写:(请求、验证、改变、回应)
    • 只写系统能感知和承偌的内容
    • 使用主动语句理清责任
    • 主语只能是主执行者或系统
    • 使用核心域属于描述
    • 不要涉及界面细节
    • 不要涉及交互细节
    • 需求是“不这样不行”
  • 扩展路径:基本路径每一步都可能发生意外,其中某些意外是系统要负责处理的,处理意外的路径就是扩展路径。
  • 补充约束
    • 字段列表
    • 业务规则
    • 质量需求
      • 性能、可靠性、可支持性
    • 设计约束

七、需求启发

  • 需求启发要点
    1. 和涉众交流的形式应该采用视图,而不是模型
    2. 和涉众交流的内容应该聚焦涉众利益,而不是需求
  • 需求启发手段
    • 研究资料
    • 问卷调查
    • 访谈
    • 观察
    • 研究竞争对手
  • 需求人员培养
    • 好奇心
    • 搜索力
    • 沟通力
    • 表达力
    • 热情

八、分析

本书使用类图状态机图、和 序列图三种UML图形来表达面向对象的分析模型。

  • UML类图表达分析类模型
  • UML状态机图表达分析状态机模型
  • UML序列图表达分析交互模型

识别类和属性

分析类

  • 边界类
    • 责任:接收输入、提供输出以及做简单的过滤
  • 控制类
    • 责任:相当于用例在系统中的“代理”,控制用例流,为实体类分配责任。如果在分配责任时发现控制类只起到传递的作用,没有起到分解和分配的作用,也可以把控制类去掉。
  • 实体类
    • 使用严谨的领域属于命名领域模型中的元素

image.png

image.png

构造型责任和需求的关系命名
边界类输入、输出以及简单的过滤每个有接口的外系统映射一个边界类外系统名称 + 接口
控制类控制用例流,为实体类分配责任每个用例映射一个控制类用例名称 + 控制
实体类系统的核心,封装核心域逻辑和数据用例和实体类的关系是多对多的领域概念名称

image.png