用例是最简单的UML元素,用例图是最简单的UML图,但它也可能是UML中最有用的元素之一。尽管我们用包将工作分解为工作包、团队任务或单项任务,也就是说包是组织UML中的各种图及元素的工具。但是用例图可以帮助我们确定任务,以及应当如何将它们分组并确定工作范围。

每个用例都代表用户希望系统帮助实现的一个目的或目标。例如,对于银行ATM机,客户希望使用它来取款、存款、转账或者修改密码等,而银行则希望使用它可以获得存取款明细等。

要使系统具有实用性,它就必须为用户带来价值。例如银行ATM机,对于客户而言,可以省去或节约人工柜台排队等候的时间,对于银行而言可以降低人力资源成本。在用例的术语中,对于所有与系统产生交互的对象我们统称为“参与者(Actor)”。参与者涵盖了所有与系统产生交互的用户,例如客户、工作人员、管理人员、维护人员等。任何可以使用系统(主动或者被动)的人都可以被视为参与者。

对于图书馆系统,参与者包括读者、图书管理员、编目人员、出入库人员等;对于打车APP,参与者包含乘客、司机、管理人员、客服等;对于银行ATM,参与者包含客户、款箱管理员、运维人员等。

此外,与当前系统相关联的其他系统、设备、传感器等都可以视为参与者。

回到用例本身,用例必须为参与者提供价值。许多程序员对“用例为参与者提供价值”感到困惑,经常与函数或子程序返回一个值混淆。所谓提供价值意味着实现了某种期望的结果,它是比函数或子程序返回值更高层次的结果。例如对于银行ATM,“取款”是一个用例,它的价值在于实现了客户获得现金的目标,而为了实现这个目标,银行ATM识别卡片、客户输入密码及ATM判断密码是否正确等只是“取款”这个用例实现的步骤,它们都有返回值,但是这些并非客户的目标,它没有为客户带来价值或让客户受益,因此它们不是用例。

用例是行为模型的一部分。一个业务用例通常描述一个完整的业务,一个系统用例通常描述一个完整的系统功能。一个用例描述一个场景,它也可以表示一组具有相似目标的相关场景。通常使用结构化文本(用例规约)、故事板、序列图、状态机或活动图来详细描述这些场景。

在UML中使用椭圆表示用例,用例的名称写在椭圆内部,如下图所示。用例的名称表示参与者的目标。通常,用例名称应当使用“动宾”结构,例如存款、取款、修改密码等,而这个动宾结构的主语就是对应的参与者,即客户存款、客户取款、客户修改密码等。



关于用例命名,有一个简单实用的技巧,即在参与者目标前加上“系统,请帮我……”或类似的变体。例如:

  • 系统,请帮我取款。
  • 系统,请帮我修改密码。
  • ……

遵循上述形式获得的用例名称通常是正确的,并且很容易理解。然而有些特殊的用例不适用这种命名的方法。例如,在系统或参与者具备自主能力的场景下,一个机器人系统会自行进入休眠状态,一个时钟会自动计时,此时没有具有传统目标的传统参与者。

用例图简单易懂,几乎不需要经过专业训练就可以阅读和开发,而用例图又是描述需求的手段,故而通常它由需求分析人员与参与者的代表共同开发,或者由需求分析人员开发后,与参与者讨论修改而成。最终形成的用例图还须交给各参与者代表进行审查。参与者代表审查用例图非常有必要且有价值,因为参与者可以明确知道用例图是否包含了他们自己所有的目标,或者是否存在跟他们不相关的目标。也正是基于此,在为用例命名时应当使用参与者的术语,而避免使用IT术语或者实现时的概念,同时力求简单、明确,确保每个人都能理解。

系统开发人员倾向于围绕用例来组织项目,因为这样可以使项目更易于相关各方理解。通常一个项目应当生成需求或设计文档,可以考虑先按参与者再按用例来组织文档结构(如下图所示),同时也可以通过创建相关用例的包来构建包结构。



本文简单讨论了用例的概念及如何发现用例,关于用例与参与者更深入的概念与知识,请参阅博客下UML合集中的其他相关文章。

UML之发现用例的更多相关文章

  1. nose在python2与python3中的包的自动发现用例的区别

    最近在使用python3,同样装了nose,发现自动发现用例总是有问题,如下面的代码结婚 testcase |------ __init__.py |------ test_bb.py test_bb ...

  2. UML中的用例(Use Case)概念分析及StarUML实例

    在UML中use case似 乎最簡單的,用例建模的最主要功能就是用来表达系统的功能性需求或行为,依我的理解用例建模可分为用例图和用例描述.用例图由参与者(Actor).用例 (Use Case).系 ...

  3. UML核心元素--用例

    定义:用例定义了一组用例实例,其中每个实例都是系统所执行的一些列操作,这些操作生成特定主角可以观测的值.一个完整的用例定义由参与者.前置条件.场景.后置条件构成. 1.理解用例:用例就是参与者希望通过 ...

  4. unittest 出报告 并配合 jenkins,发现有用例错误,但是构建没出现红点 的解决方法

    加了个 判断 测试用例总数 和 测试运行成功数 是否一致的判断,不一致 就断言失败,jenkins哪里是红点

  5. <四>面向对象分析之UML核心元素之用例

    一:基本概念        --->用例定义了一组用例实例,其中每个实例都是系统所执行一系列操作,这些操作生成特定主角可以观测的值.        --->所谓用例,就是一件事情,要完成这 ...

  6. UML 有关用例图知识及用例关系

    原文链接:https://blog.csdn.net/mj_ww/article/details/53020080 1. 如何识别用例 任何用例都不能在缺少参与者的情况下独立存在.同样,任何参与者也必 ...

  7. python nose测试框架全面介绍十一---用例的发现

    nose是怎么发现用例的??网上一大把说函数以test开头的都会自动发现,真的是这样吗???还是自己来试验下吧 首先,我们还是来看看官方文档怎么说的吧: If it looks like a test ...

  8. UML和模式应用4:初始阶段(5)--用例编写的准则

    1.前言 本文主要介绍用例编写时所遵循的几条基本准则. 2.用例编写的准则 2.1 以本质的风格编写用例 如系统认证,而不要说 需要输入ID进行认证等 2.2 编写简洁的用例 如系统认证,不要说 这个 ...

  9. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

  10. UML和模式应用

    引言 Applying UML and Patterns,以一个商店POS系统NextGen和一个掷骰子游戏Monopoly为例,围绕OOA/D的基本原则GRASP,以迭代作为基本方法.以UML为表达 ...

随机推荐

  1. Ubuntu 22.04 解决和 Windows 共享蓝牙设备的问题

    我有一个 Airpods,连接到 WIndows 可以正常工作,但连接到 ubuntu 后会无法连接,只能删除设备选择重联,但是这又会导致 Windows 不能连接到耳机,只能也删除重新连接,费神费力 ...

  2. ESP8266 + MQTT (platformio 开发环境)加用户名和密码

    ESP8266 + MQTT git 地址: https://gitee.com/zhudachangs/esp8266-mqtt.git (如果无法打开说明在审核) 引用库 include < ...

  3. games101_Homework2

    完成函数static bool insideTriangle(): 测试点是否在三角形内. 一段优雅的easy代码,没什么好说的.(但是需要修改这里传入的xy的类型为float,默认为int是想让我通 ...

  4. div跟随浏览器大小而改变

    <head> <style> .main { position: absolute; left: 0px; right: 0px; top: 0px; bottom: 0px; ...

  5. Mac 中 NSTrackingArea 鼠标移动事件捕获

    在Mac系统中处理View的鼠标进入,退出以及移动事件时,需要把捕获的区域设置为view的bounds 不能设置为frame. 1 self.trackingArea = [[[NSTrackingA ...

  6. 低功耗4G模组:LCD应用示例

    ​ 今天我们学习合宙Air780E开发板LCD应用示例,文末[阅读原文]获取最新资料. 本文档适用于Air780E开发板 关联文档和使用工具 lcd-demo: https://gitee.com/o ...

  7. java三次大作业的全面总结

    一:前言 知识点总结: 数据结构:题目涉及到了字典或哈希表用于存储题目信息.试卷信息和学生信息:列表用于存储多个题目.试卷和学生的集合:对象用于封装题目.试卷.学生和答案的具体属性. 字符串解析:题目 ...

  8. lua获取请求参数以及在nginx.conf中使用

    -- 获取请求路径 local request_uri = ngx.var.request_uri -- 从 header中取值 local token = ngx.req.get_headers() ...

  9. Codeforces Round 856 (Div2)

    Counting Factorizations 任何一个正整数 \(m\) 都可以被唯一的分解为 \(p_1^{e_1} \cdot p_2^{e_2} \ldots p_k^{e_k}\) 的形式. ...

  10. JDBC基础知识

    常见连接数据库工具: 图形化工具:点击.拖拽就可以操作数据库,对用户友好,简单对数据操作,复杂数据库操作爱莫能助 JDBC(驱动程序):调用jar包接口 窗口(命令行):输入完整SQL语句对复杂数据库 ...