`

如何写好最外围用例

    博客分类:
  • UML
阅读更多

http://www.uml.org.cn/oobject/200509075.htm

如何写好最外围用例
来源:www.zhangxun.com 作者:张恂 
 

 2003 年,我曾经在网上看到一篇技术文章《 没头没尾—项目开发笔记:如何编写最外层用例 ?! 》,这篇文章写得很好,真实记述、反映了用例写作中的一些常见现象和误区。 然而,该文的前后两个用例实际上都不是针对客户的真正的“最外层用例”,尽管作者作了些改进,但这些用例在具体的内容和写法上还存在一些问题。

 1.引言

 “本系统的目标是制作出一个跨企业的信息平台,为目标公司的客户进行服务。这些服务分成很多的方面,比如提供给银行的公司财务情况查询,提供给生产厂商销售情况的报告。提供给销售的商场以及店铺货源的情况,提供给物流,安装服务公司送货以及安排信息。从中赚取提高销售效率,减少运输损耗的费用。设定目标公司为 A公司,信息平台名称B系统。”

 从上面介绍的内容来看,我猜 B 系统是 一个 类似于供应链 应用 的 企业 门户 系统,这里所说的 A 公司好像是一家从事商品分销的企业。通过该门户, A 公司可以有效地联系上家—生产商(供货商),下家—商场、店铺以及银行、物流公司、安装服务公司等客户或合作伙伴。

 在讨论这个案例前,首先让我们重温一下什么是最外围用例( the outermost use cases ,根据 Cockburn 的定义改写) :

 对于每一个用例找到它仍能适用的最外圈的设计范围,针对该范围为它编写一个概要用例; 对于一个将要设计的系统, 我们 通常可以找到一个更广的设计范围,而使主用角( PA , Primary Actor )仍然处于该范围之外,如果不断扩大该范围,可以找到一个临界点,主用角就会被包含在当前的范围之内,这个临界点就是最外圈的范围; 最外围用例是通过把同一个范围内具有相似目标的主用角合并到一起而创建出来的,它们把与这些用角有关的所有低层用例都汇聚到了一起。

 如何获取最外围用例呢? Cockburn 给了一些步骤建议 :

   (1) 从一个用户目标开始。
   (2) 问“这个目标对主用角 AA (最好在组织外部)提供什么服务?”,用角 AA 是我们想要收集用例的最终主用角。
   (3) 找出最外圈的设计范围 S ,使得 AA 仍然在 S 之外,给 S 命名。
   (4) 找出最终主用角 AA 在设计范围 S 中的所有用户目标。
   (5) 找出 AA 对系统 S 的概要目标 GG 。
   (6) 为 GG 编写出概要用例。这个用例就是我们要找的最外围用例,它将一些海平面(用户目标层)的用例维系在一起。

 值得注意的是,这里 Cockburn 所说的“系统” S 不一定都是指软件,它可能是软件系统(如 B 系统),也可能是业务系统(如 A 公司、企业、部门等)。 在下面第 2 、第 3 小节中我将按照 Cockburn 的最外围用例 定义 来考察 原文中的两个最外围用例 ,逐个分析存在的错误。用第 1 个例子说明以“操作人员”为 主用角 、最外圈范围为软件系统( B 系统)的正确写法,用第 2 个例子说明以“客户”为主用角 、最外圈范围为业务系统( A 公司)的正确写法。

 2.软件用例 - 业务管理

 用例名称: 最外围用例

 错误分析: 显然这不是一个正确的用例名称。建议改为“业务管理”,解释如下文。

 简要说明:

A 公司决定让其业务合作伙伴以及最终的用户通过互联网访问 B 系统以达到减少 A 公司本地人员的工作量以及提升工作效率的目的。 B 系统负责完成进销存业务、其它业务处理以及报表管理。一些系统维护人员还负责管理基础信息的认定与实现。包括四个用例:基础设置子系统,进销存子系统,其它业务处理子系统,报表子系统。

 错误分析: 首先,用例的名称、内容中不应该出现“子系统”这个术语, subsystem 属于系统设计范畴。

 从业务介绍来看,操作人员主要进行“进销存、报表和其他业务”的处理,系统维护人员主要进行基础信息管理,所以这 4 个概要用例(风筝层)分属不同的 PA 。这两种角色在概要白云层似乎没有必要严格区分,所以我们把系统维护人员和操作人员合并成“操作维护人员”,并且把这 4 个用例合并成 1 个最外围用例“业务管理”,并在此处描述。

 用例范围: 跨企业信息平台
 主执行者( PA ): 客户

 错误分析: 从用例范围和基本流的内容看, 这里的 PA 应该是“操作维护人员”(客户作为 PA 的最外围用例见第 3 小节)。

 用例层次: 白云(最高层次)
 触发事件: 客户有购货的需求

 错误分析: 这里应该描述可以检测到的事件(动作、状态的改变等),我们怎么知道客户有购货的需求呢?正确的说法可能是:客户以各种方式请求服务。

 主成功场景(基本流)
  
· 系统维护人员操作基础设置子系统维护基础设置的数据。
  · 操作人员操作进销存子系统完成进销存业务。
  · 操作人员通过报表系统分析查询业务结果。
  · 操作人员通过其它的业务子系统完成对系统中的其它业务处理。(注,其它业务子系统包括财务资金等等子系统,将会子用例描述中强调)

 小结:

 从以上分析看,原用例存在着基本的概念错误,用例的主用角( PA) 、范围和基本流的内容相互之间存在不一致的现象。这 个最外围用例可以改写如下:

用例名称:

业务管理

范围:

B 系统

层次:

概要 / 白云

主用角:

系统操作维护人员

触发事件:

客户通过电话、邮件等方式向操作维护人员提出服务请求(如购货)。

基本流:

操作维护人员通过 B 系统可完成以下任务:
1. 基础信息管理。
2. 处理进销存业务。
3. 进行报表管理,查询、分析业务结果。
4. 处理其他业务(如财务资金管理)。
[ 用例结束 ]


 3.业务用例 - 客户服务

 用例名称: 最外围用例

 错误分析: 显然这不是一个正确的用例名称,建议改为“客户服务”。

 简要说明:

A 公司决定让其业务合作伙伴以及最终的用户通过互联网访问 B 系统以达到减少 A 公司本地人员的工作量以及提升工作效率。 B 系统负责完成销售业务以及报告销售情况。一些系统维护人员还必须为客户和职员设置安全存取级别。包括四个用例:增加服务( A 公司本地),增加服务(客户),报告业务情况,管理安全存取权限。

 错误分析: 这段话其实不太像用例简述。最外围用例应该从 A 公司向客户提供服务的角度来叙述,比方说,可以请求服务,查询业务销售报表等。在本例中我们进行黑盒业务建模,涉及到 B 系统和系统维护人员的内容,比如安全级别设置,不应在此处反映。

 用例范围: 跨企业平台

 错误分析: 我们选定了 A 公司的客户作为 PA ,那么按照最外围用例的定义,最大范围边界应为 A 公司而不是 B 系统。实际上这是一个业务用例( Business Use Case )。虽然客户也可以直接访问 B 系统,但是对于客户而言,B 系统 不是最大的范围 。

 用例层次: 白云(最高层次)
 主执行者( PA ): 客户
 主成功场景(基本流):
   ·客户通过电话,邮件联系 A 公司操作人员,请求一个新的服务。 A 公司的操作人员通过 B 系统处理服务请求。
   ·客户直接通过 B 系统的客户端,请求与处理新的服务。
   ·客户通过 B 的系统可以查询出销售情况以及其它相关情况的报表。
   ·B 的系统维护人员将要对客户以及操作人员进行安全存取权限的设置。

 错误分析: 在最外围业务用例的基本流中,主要包含一些用户目标层或概要层的用例,所以此处不应该出现与 B 系统、操作人员、系统维护人员相关的内容,它们在我们定义的范围边界( A 公司)之内。 根据以上分析,我将该 最外围用例改写如下:

用例名称:

客户服务

范围:

A 公司 / 业务

层次:

概要 / 白云

主用角 :

客户

触发事件:

客户提出服务请求

基本流:

客户可以下列 2 种方式获得服务:
1. 服务请求处理:客户通过电话、邮件、客户端软件等方式请求服务, A 公司接收请求后进行相应处理,并把处理结果以恰当的方式返回给客户。
2. 销售查询:客户通过客户端软件直接查询销售情况及相关报表。
[ 用例结束 ]

 4.总结

 有人认为:“ 也许针对一个项目可以有很多‘正确的'最外层用例的设计方法。上面两种划分方式应该说只从最外层用例的角度来说都是正确的 ” 。我不同意这种开脱的说法,针对 1 个项目抽取最外围用例实际上只有 1 种“最优解”。为什么?道理很简单,因为最外围用例是 Cockburn 提出的,他给出了找到最外围用例的步骤和方法,而这种方法是明确的、无二义性的。人们找错了最外围用例,多半是因为没有理解和掌握这套方法。

 概括一下,原文主要存在以下错误:

 1 )由于用例的主用角 、范围与基本流的内容不一致,导致那两个用例都不是真正的最外围用例。实际上,针对“客户”的最外圈范围是 A 公司,而针对“操作维护人员”的最外圈范围是 B 系统。

 2 )在用例的功能描述中出现了软件内部设计的内容,不符合需求提取、分析的要求。

 最终,由于原作者对于为什么要编写用例,用例与传统结构化方法的功能总体描述究竟有何实质上的不同,用例有哪些特点,缺乏准确而深入的理解,导致编写用例的时候思路凌乱,把几种内容混杂在一起,做成了一碗“杂烩面”。 这个案例给我们的重要启迪是,抽取用例最关键的一步是首先明确 SuD ( System Under Discussion or Design )范围的定义 以 及针对这个范围的主用角 。 如果用 传统 “结构化”的老思路来套用例的格式,换汤不换药,那对 IT/软件项目开发将起不到真正的效果,甚至可能产生负作用,如果那样还不如不写用例。 最外围用例便于我们将关注的焦点转向用户真正需要什么,从而真正地从用户的角度出发来考虑问题

分享到:
评论

相关推荐

    手机外围器件测试用例

    一套完整的手机外围器件的测试用例!

    USB 2.0版规范的移动和嵌入式主机补充

    通用串行总线(USB)最初被设计为PC机和外围设备之间的接口,现已成为计算史上最成功的通用PC机接口。 1.嵌入式主机:嵌入式主机(EH)产品在一个主机上提供目标主机功能或更多标准A或微型AB插座。嵌入式主机产品也...

    SAP PI配置流程完整版(ecc端发布RFC服务供外部系统调用)

    本文档详细介绍了RFC如何在PI创建配置并导出wsdl供外部系统调用,本篇进介绍服务提供方是erp,供外围系统调用的用例,外围发布服务erp为消费方的PI配置请见PI开发手册02。由于所用实例使用的是项目实例。在此声明,...

    一体化的通用半实物仿真测试产品.docx

     提供涵盖测试资源管理、测试环境描述、接口协议定义、测试用例设计、测试执行监控、测试任务管理等功能为一体的测试软件集成开发环境;  提供各类控制总线和仪器接口API,支持的I/O类型包括:RS232/422/485、...

    appcelerator.ble:通过蓝牙LE与BLE兼容设备连接和通信的API集合

    该模块解决的主要用例是数据交换以及与支持蓝牙低功耗的中央和外围设备进行通信。 入门 安卓 在tiapp.xml文件的Android清单部分中,使用以下uses-permission元素编辑清单。 < android xmlns : android = " ...

    常用嵌入式系统软件仿真自动化黑盒测试平台.docx

    支持对待测系统及其外围环境、接口情况等进行可视化仿真建模设计; 提供接口协议描述语言(DPD语言)及其编辑编译环境; 可通过表格、仪表、曲线图、状态灯等虚拟仪表实时监测接口数据; 可按二进制、十进制...

    实时级嵌入式系统半实物仿真测试平台.docx

     支持对待测系统及其外围环境、接口情况等进行可视化仿真建模设计;  提供通讯协议描述语言(DPD语言)及其编译编辑环境;  支持自定义可视化数据监控界面以及实时数据监控;  具有测试用例脚本编辑、开发与...

    用于各行业装备软件研发、测试部门测试的综合测试设备。.docx

     提供涵盖测试资源管理、测试环境描述、接口协议定义、测试用例设计、测试执行监控、测试任务管理等功能为一体的测试软件集成开发环境;  提供各类控制总线和仪器接口API,支持的I/O类型包括:RS232/422/485、...

    通用嵌入式测试平台.pptx

     提供涵盖测试资源管理、测试环境描述、接口协议定义、测试用例设计、测试执行监控、测试任务管理等功能为一体的测试软件集成开发环境;  提供各类控制总线和仪器接口API,支持的I/O类型包括:RS232/422/485、...

    测试任务管理等功能为一体的测试软件集成开发环境;

     提供涵盖测试资源管理、测试环境描述、接口协议定义、测试用例设计、测试执行监控、测试任务管理等功能为一体的测试软件集成开发环境;  提供各类控制总线和仪器接口API,支持的I/O类型包括:RS232/422/485、...

    嵌入式系统测试平台集成开发环境.docx

    支持对待测系统及其外围环境、接口情况等进行可视化仿真建模设计; 提供接口协议描述语言(DPD语言)及其编辑编译环境; 可通过表格、仪表、曲线图、状态灯等虚拟仪表实时监测接口数据; 可按二进制、十进制...

    装备软件半实物仿真测试产品.docx

    支持对待测系统及其外围环境、接口情况等进行可视化仿真建模设计; 提供接口协议描述语言(DPD语言)及其编辑编译环境; 可通过表格、仪表、曲线图、状态灯等虚拟仪表实时监测接口数据; 可按二进制、十进制...

    Clean-Architecture-with-MVVM:在本文中,我们将了解如何使用DDD,TDD和MVVM为iOS应用程序实现Clean体系结构,特别是

    MVVM清洁架构在本文中,我们将看到我们如何特别使用DDD,TDD和MVVM为iOS应用程序实现Clean体系结构。...清洁架构的好处: 灵活的可测容易明白高可维护性可以与DDD这样的最佳做法很好地配合尖叫–用例在项目结构中清晰可

    半实物仿真测试平台集成开发环境白皮书.doc

    HIL系统对UUT测试时,并不单是信号的激励产生和信号的测量,还需要对与UUT相连的外围系统的特性进行仿真,才能确保在尽力能逼真的场景下模拟仿真UUT的运行环境。面向具体UUT应用的HIL系统,仿真模型可以开发完成后做...

    wearableD:一个 Swift 项目,用于在 iOS 设备和 Apple Watch 之间实现可穿戴数据传输

    实际用例是使用外围模式启动 OAuth 流程并通过蓝牙 LE 发送 OAuth2 访问令牌,同时利用中心模式从附近的外围设备发现、连接和接收数据,还使用令牌对外围设备的行为进行 API 调用。 总的来说,该项目允许同一应用...

    ETest技术白皮书.doc

    HIL系统对UUT测试时,并不单是信号的激励产生和信号的测量,还需要对与UUT相连的外围系统的特性进行仿真,才能确保在尽力能逼真的场景下模拟仿真UUT的运行环境。面向具体UUT应用的HIL系统,仿真模型可以开发完成后做...

    bluetooth-web-api

    获取BLE外围设备或运行模拟器: : 快速介绍 这就是我得出的结论:针对BTE设备(例如心率传感器等)。 可能的用例: 心率监测器页面 Fitbit集成而无需安装应用程序 通过Web应用程序连接到信标 有一个音符: 最初...

    GSUChat:在现实世界中使用网络套接字和外围设备进行的实验

    GSUChat 使用websockets和ASP.NET 5创建聊天客户端的实验。 稍后将提供潜在的用例和扩展。 GSU学生发展工作坊参与者 项目 用。

    详细设计说明书

    数据ETL采用C++编程技术,经过FtpMain从外围系统抽取数据,Transfer_Main对数据进行清洗,load_data对清洗后的数据进行加载,完成ETL处理过程;前台流程配置界面采用JAVA编程技术,流程调度通过调度控件完成调度控制...

    [详细完整版]4软件工程.doc

    其中简单名仅包含一个简单的名称,路径名是以包处于的外围包的" "名字作为前缀 " " " "2、拥有的元素 " " 包可以拥有其他元素,比如类、接口、组件、节点、协作、用例和图 " ",甚至可以是其他包。 " "3、可见性 " ...

Global site tag (gtag.js) - Google Analytics