让技术人员看得懂的流程(2)——用例模型

本文解析了用例模型在软件开发中的应用,强调了其在需求分析阶段的重要性,并通过POS机的例子详细阐述了如何正确地使用用例模型。同时,文章还讨论了用例模型与系统功能的区别以及系统顺序图(SSD)的作用。

                    让技术人员看得懂的流程(2

                         ——用例模型

一般的管理流程都将软件项目划分为“需求->分析->设计->实现->维护”,对应的技术流程中首先也肯定是要将需求明确,而“用例模型”就是用于获得和分析需求的。

简单来说,用例模型就是要将客户的需求写下来。“需求”不是很好理解,更加通俗的讲法是“故事(story)”。我觉得“故事”这个词非常好,非常形象,非常容易理解!我们看看为什么“故事”更加容易适合说明客户要求:

1)故事中有很多角色,而需求中也有很多角色;

2)故事有具体的经过,有开始、进行、结束;而需求也是一个完整的流程,有输入、处理、输出。

3)故事必须有意义,而需求对客户来说,也是必须有意义的;

 

具体的用例格式等这里就不详细描述了,大家上网搜索一下就知道了,如何更好的把握需求可以参考我的博文需求分析的故事——如何练就需求分析的火眼金晴?,下面我把用例模型阶段容易犯的错误重点说明一下。

1)“需求”和“功能”混淆

很多朋友在分析需求的时候,将“功能”和“需求”混淆起来,导致了需求的粒度不合理,或者把握不住重点的需求,我总结出一个很简单的区分办法:“需求是对客户有价值的东西,功能是为了实现需求而作的东西”。

POS机为例:对于客户来说,“买单”是一个有价值的东西,因为客户买完单就可以把商品拿走了;而买单过程中的“读商品条形码”、“计算商品总额”、“打印购物清单”等都是功能,因为它们当中任何一个独立的功能对客户没有价值(你不会跑到超市“读商品条形码”玩吧:-P),只是为了实现“买单”而做的。

2)在用例模型阶段进行系统分解

除了容易将“功能”和“需求”混淆外,用例模型阶段还有一个常见的错误就是在用例模型阶段对系统进行分解。

POS机为例,有的人将需求描写为:扫描机扫描商品条形码信息,然后将信息发给库存系统,库存系统返回详细的商品信息给交易系统……在用例模型阶段这样做是不对的,因为这样转移了我们的注意力:从关注用户需求转到了系统分析了。

记住:用例模型关注的是用户需求,不需要进行系统分解,把系统当做一个黑盒看待就可以了

 

下面我们给出POS机一个简单的用例片段,有兴趣的可以自己写一个完整的(这个完整的可不简单哦,至少可以写3页):

1)顾客携带商品到收银台;

2)收银员扫描商品条形码;

3)系统根据条形码获取并显示商品信息;

4)收银员重复2~3步,直到所有商品扫描完毕;

5)系统计算商品总额;

。。。。。。。。。。。。。。。。。。。。

n)系统打出商品清单,完成交易。 

===================2010.03.20补充==================

(经过garrodran99的提醒,补充SSD(系统顺序图)的内容,在此感谢garrodran99

SSD即系统顺序图,目的就是站在系统的角度,以UML的顺序图来描述系统与“外部实体”(包括人、其它系统、输入输出设备)的交互过程,简单来说就是“图形化的用例”。

那为什么有了文字化的用例文档,还要图形化的SSD呢?其实很简单:字不如表,表不如图,因为图可以一目了然的看出交互过程。

可能有的朋友又要问了:既然图那么好,还要文字描述的用例做什么呢?有两个原因:第一个是客户不会用UML给你描述需求,客户只会用自然语言描述需求;第二个就是图形的优点是简洁、一目了然,但图形的缺点就是不能承载太多信息,详细和丰富的信息还是要文字来承载。

用一句话总结就是:交互用图形,说明用文字!

那么,是否一个用例就要写一个SSD呢?基本上不需要,因为SSD重点在描述系统的交互过程,如果用例本身没有什么交互、或者交互很少或者很简单,就不需要SSD。只有主要的、复杂的用例才需要SSD。

<think>嗯,用户的问题是关于用和模块的定义,看起来是软件工程和测试领域的术语。用户之前问过SOA模块划分,现在转向更基础的软件设计概念,可能是想系统学习架构设计知识。 从对话历史看,用户应该是个技术人员,可能是测试工程师或软件架构师。ta关注点很细致,从宏观架构(SOA)突然切换到微观设计(),这种跳跃说明ta在构建完整的知识体系。不过用户提供的引用[1][2][4]都是测试用相关,和架构设计的模块概念略有偏差,需要帮ta区分清楚。 关于用的定义,引用[1]提到用是功能行为的描述,引用[2]强调测试用的颗粒度原则——这其实是两个维度:前者是需求分析工具(UML),后者是测试执行单元。需要帮用户理清这个易混淆点。模块的定义虽然没直接出现在引用里,但根据SOA讨论可以归纳为:高内聚的功能单元集合。 用户深层需求可能是想理解如何把业务需求()转化为系统模块。ta的提问方式很专业,引用了测试用规范,说明重视实践落地。不过测试用和需求用容易混淆,需要特别强调二者的区别: - 需求用:描述系统该做什么(如“用户登录”) - 测试用:验证系统做得对不对(如“输入错误密码应报错”) 回复结构可以这样组织: 1. 先说模块定义(结合SOA经验说明本质是功能封装) 2. 再说用定义(区分需求用和测试用) 3. 重点解释二者的关系:需求用驱动模块划分(如登录用对应安全模块) 4. 补充测试用如何验证模块 用户提供的测试用规范(引用[2])很有价值,特别是颗粒度原则,能帮助说明模块接口设计——模块的原子性直接影响测试用编写难度。比如把“用户登录”和“密码重置”放在同一模块,测试用就得覆盖多个异常流,违反引用[2]的“一个功能多个异常分开编写”原则。 最后生成的问题要引导用户思考实践场景:“如何避免用划分导致的模块过细”可能比理论定义更贴近ta的实际工作。 </think>以下是关于**用**和**模块**的清晰定义及关系说明,结合软件工程与测试实践进行解析: --- ### 一、用(Use Case)的定义 **用**是描述系统功能的交互场景,核心是**用户与系统的动态行为**。分为两种类型: #### 1. **需求用(业务视角)** - **定义**:描述用户为达成特定目标与系统的交互流程,关注“做什么”。 - **特征**: - 用**用图**表示(如UML中的椭圆符号)[^1]。 - 支持泛化关系:父用抽象通用流程,子用继承并扩展细节(如“登录”可泛化为“邮箱登录”和“手机登录”)[^1]。 - 颗粒度较大,覆盖完整业务场景(如“用户登录系统”)。 - **示**: ```plaintext 用:邮箱登录 参与者:用户 前置条件:用户已注册 主流程: 1. 用户输入邮箱和密码 2. 系统验证信息 3. 跳转至主页 异常流: 密码错误 → 提示重试 邮箱未注册 → 引导注册 ``` #### 2. **测试用(质量保障视角)** - **定义**:验证功能正确性的最小执行单元,关注“如何测”。 - **设计原则**(引用[^2]): - **最小颗粒度**:一个正常流程一个用(如“正确密码登录成功”); - **异常分离**:不同异常分开设计(如“错误密码”、“空密码”各为一个用); - **数据驱动**:不同输入数据分开测试(如“邮箱格式验证”需覆盖合法/非法格式)。 - **实现示**(引用[^4]模型): ```python class Testcases(models.Model): name = models.CharField('用名称', max_length=50) # 如"测试邮箱登录-密码错误" request = models.TextField('请求信息') # 包含测试数据:{"email":"test@demo","password":"wrong"} ``` --- ### 二、模块(Module)的定义 **模块**是系统功能的静态划分单元,体现**高内聚、低耦合**的设计原则: #### 1. **核心特征** - **功能内聚性**:模块内元素紧密相关(如“登录模块”仅含认证逻辑); - **接口标准化**:通过明确定义的接口与其他模块交互(如登录模块提供`authenticate(email, password)`方法); - **独立可复用**:可单独开发、测试和部署(如支付模块被订单模块调用)。 #### 2. **与用的关系** | 维度 | 用(Use Case) | 模块(Module) | |------------|--------------------------------------|-----------------------------------| | **范畴** | 动态行为(用户-系统交互) | 静态结构(代码/组件组织) | | **目的** | 描述“如何完成目标” | 实现“功能如何封装” | | **层级** | 业务场景 → 测试场景 | 系统 → 子系统 → 组件 | | **依赖** | 用驱动模块设计(如登录用需登录模块支持) | 模块实现用需求 | #### 3. **实践示** - **用驱动模块设计**: “邮箱登录”用 → 需设计**认证模块**(包含密码验证、会话管理)。 - **模块支撑测试用**: 认证模块的接口 → 被拆分为多个测试用(正常流、异常流等)[^2][^4]。 --- ### 三、关键区别与联系 | **对比项** | 用 | 模块 | |------------------|-------------------------------------------|-------------------------------------------| | **本质** | 行为描述(动态) | 代码单元(静态) | | **输出物** | 用图/测试用文档 | 代码包/API接口 | | **生命周期阶段** | 需求分析 → 测试设计 | 架构设计 → 开发实现 | | **覆盖范围** | 单场景(如“登录”) | 多功能集合(如“用户管理模块”含登录、注册)| > ✅ **总结**: > - **用**是需求的动态表达,指导“系统应如何行为”; > - **模块**是架构的静态封装,实现“功能如何组织”; > - 二者通过**接口**衔接:用需求定义模块功能边界,模块实现验证用场景[^4][^2]。 --- ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值