【UML用户指南】-19-对基本行为建模-用例图

目录

1、组成结构

2、表示法

3、一般用法

3.1、对主题的语境建模

3.2、对主题的需求建模

4、常用建模技术

4.1、对系统的语境建模

4.1.1、设计过程

4.2、对系统的需求建模

4.2.1、设计过程:

5、正向工程


        UML 中的用例图是对系统的动态方面建模的 5 种图之一(对系统的动态方面建模的其他 4种图是活动图、状态图、顺序图和通信图) 。用例图是对系统、子系统或类的行为进行建模的核心。每张图都显示一组用例、参与者以及它们之间的关系

        用例图对可视化、详述和文档化一个元素的行为是很重要的,它们通过呈现元素在语境中如何被使用的外部视图,使系统、子系统和类易于探讨和理解。另外,用例图对通过正向工程来测试可执行的系统和通过逆向工程来理解可执行的系统也是很重要的。

        
        

1、组成结构

主题、用况、参与者;

依赖、泛化以及关联关系;

与所有其他图一样,用况图可以包含注解和约束;

用况图还可以含有包,用来将模型中的元素组合成更大的组块。

偶尔,尤其是要把一个特殊的执行系统可视化时,还可以把用况的实例放到图中。

2、表示法

把主题表示为一个矩形(用例边界),其中包含一组表示用况的椭圆,主题的名字标在矩形内。

用人形图表示参与者,放在矩形外面,名字放在其图符的下方。

从参与者图符到与之通信的用况椭圆之间用线条连接。

用况之间的关系(如延伸和包含)画在矩形之内。

3、一般用法

3.1、对主题的语境建模

对一个主题的语境建模,包括围绕整个系统画一个框,并声明有哪些参与者位于系统之外并与它进行交互。在这里,用况图说明了参与者以及他们所扮演的角色的含义

3.2、对主题的需求建模

对一个主题的需求进行建模,包括说明这个主题应该做什么(从主题外部的视点来看),而不考虑主题应该怎样做。在这里,用况图说明了主题所希望的行为。在这种方式下,用况图使我们把整个主题看作一个黑盒子;可以观察到主题外部有什么,主题对那些外部事物的反应,但却看不到主题内部是如何工作的。

4、常用建模技术

4.1、对系统的语境建模

        所强调的是围绕在系统周围的参与者。决定什么作为参与者是重要的,因为这样做说明了与系统进行交互的一类事物。决定什么不作为参与者也同样重要,甚至更为重要,因为它限定了系统的环境,使之只包含那些在系统的生命周期中所必需的参与者 

4.1.1、设计过程

  1. 决定哪些行为是系统的一部分以及哪些行为是由外部实体所执行的,以此识别系统边界。这也同时定义了主题。
  2. 考虑以下几组事物来识别系统周围的参与者:需要从系统中得到帮助以完成其任务的组;执行系统的功能时所需要的组;与外部硬件或其他软件系统进行交互的组;为了管理和维护而执行某些辅助功能的组。
  3. 将彼此类似的参与者组织成一般——特殊层次结构。
  4. 在需要加深理解的地方,为每个参与者提供一个衍型。
  5. 将这些参与者放入用况图中,并说明从每个参与者到系统的用况之间的通信路径。
     

上图显示了一个信用卡验证系统的语境,它强调围绕在系统周围的参与者。其中有顾客(Customer),分为两类:个人顾客(Individual customer)和团体顾客(Corporate customer)。这些参与者是人与系统交互时所扮演的角色。在这个语境中,还有表示其他机构的参与者,如零售机构(Retail institution)(顾客通过该机构刷卡,购买商品或服务)、主办财务机构(Sponsoring financial institution)(负责信用卡账户的结算服务)。在现实世界中,后两个参与者本身就可能是一个软件密集型系统。

4.2、对系统的需求建模

        需求是系统的设计特征、特性或行为。陈述系统的需求,相当于陈述系统外部的事物与系统之间建立的一份合约,该合约声明了希望系统做什么事。

        可以用各种形式表达需求,从非结构化的文字到形式语言的表达式,以及介于二者之间的其他任意形式皆可。大多数(如果不是全部的话)系统的功能需求都可以表示成用况,UML 的用况图对管理这些需求是不可缺少的。

4.2.1、设计过程:

  1. 通过识别系统周围的参与者来建立系统的语境。
  2. 对于每个参与者,考虑它期望的或需要系统提供的行为。
  3. 把这些公共的行为命名为用况。
  4. 分解公共行为,放入新的用况中以供其他的用况使用;分解异常行为,放入新的用况中以延伸较为主要的控制流。
  5. 在用况图中对这些用况、参与者以及它们的关系进行建模。
  6. 用陈述非功能需求的注解或约束来修饰这些用况,可能还要把其中的一些附加到整个系统。

上图是对上一个用况图的扩充。尽管没有画出参与者与用况之间的关系,但加入了额外的用况,这些用况对于一般的顾客不可见,但仍是系统的基本行为。这张图是有价值的,因为它为最终用户、领域专家以及开发者提供了一个共同的起点,以便可视化、详述、构造和文档化他们关于系统的功能需求的决策。例如,检测信用卡欺诈(Detect card fraud)对于零售机构(Retail institution)和主办财务机构(Sponsoring financial institution)都是很重要的行为。类似地,报告账户的状态(Report on account status)是系统语境中不同机构所需要的另一个行为。

一旦确定了用况的结构,就必须描述每个用况的行为。

通常要为每个主线情况绘制一个或多个顺序图,然后要为每种变体情况绘制顺序图。

最后,为了说明对各种错误和异常情况的处理,至少还要绘制一个顺序图;对错误的处理是用况的一部分,要和正常行为一起考虑。

5、正向工程

 (forward engineering)是通过映射到一个实现语言而把模型转换为代码的过程。

用况图可通过正向工程,形成对它所应用的元素的测试。

用况图中的每个用况说明了一个事件流(或这些流的变体),这些流说明了元素被期望如何行动——这正是值得测试的。

一个结构良好的用况甚至说明了前置条件和后置条件,来定义一个测试的初态和它的成功判定标准。对于用况图中的每个用况,都可以创建一个测试用例,每当发布这个元素的新版本时都可以运行它,从而在其他元素使用它之前就保证它能像要求的那样工作。
 

  1. 识别与系统交互的对象。尝试找出每个外部对象可能扮演的各种角色。
  2. 设立参与者,以表示每一种不同的交互角色。
  3. 对于图中的每个用况,识别它的事件流和异常事件流。
  4. 根据选择的测试深度,为每个流产生一个测试脚本,把流的前置条件作为测试的初态,把流的后置条件作为测试的成功判定标准。
  5. 必要时生成一个测试支架来表示每个与用况交互的参与者。把信息传给元素或者是通过元素来执行的参与者都可以被现实世界的等价物模拟或替换。
  6. 每次发布用况图描绘的元素时,都用工具来运行相应的测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/30510.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

进入docker容器内部操作mysql数据库

文章目录 1、查询docker容器2、进入mysql容器内部3、连接mysql数据库4、查询mysql所有的数据库5、使用某个数据库6、展示数据库中所有的表7、查询某张表8、断开mysql9、退出mysql容器 1、查询docker容器 [rootlocalhost ~]# docker ps CONTAINER ID IMAGE …

Java 序列化与反序列化

Java 序列化是一种将对象的状态转换为字节流的机制,以便可以将该对象的状态保存到文件、数据库或通过网络传输。在反序列化过程中,这些字节流可以被重新转换为对象。序列化主要用于以下几种情况: 持久化存储:将对象的状态保存到文…

商城小程序:颠覆传统电商,打造全新商业生态

在数字化浪潮的推动下,网购行业呈现多元化繁荣发展态势,出现了琳琅满目的商品应用小程序,但市面上的商城小程序基本属于通用型,无论是商城界面展示和基本功能,都不能满足个性化和商品推广需求,阻碍了商品的…

测试cudaStream队列的深度

测试cudaStream队列的深度 一.代码二.编译运行[得出队列深度为512] 以下代码片段用于测试cudaStream队列的深度 方法: 主线程一直发任务,启一个线程cudaEventQuery查询已完成的任务,二个计数器的值相减 一.代码 #include <iostream> #include <thread> #include …

linux下cuda安装-ubuntu22.04安装cuda11.8(cuda+cudnn)

原文链接&#xff1a;linux下cuda安装-ubuntu22.04安装cuda11.8(cudacudnn) 导言 cuda是nvidia提供在N卡上实现并行计算的工具包&#xff0c;cudnn是cuda的运行时库&#xff0c;通过cuda提供的内核函数能够高效的在N卡上跑密集计算程序。 本文在N卡机器上安装好了相应的驱动后…

Building wheels for collected packages: mmcv, mmcv-full 卡住

安装 anime-face-detector 的时候遇到一个问题&#xff1a;Installation takes forever #1386&#xff1a;在构建mmcv-full时卡住&#xff0c;这里分享下解决方法&#xff08;安装 mmcv 同理&#xff0c;将下面命令中的 mmcv-full 替换成 mmcv&#xff09; 具体表现如下&#x…

学习笔记——交通安全分析06

目录 前言 当天学习笔记整理 交通行为、心理与安全 结束语 前言 #随着上一轮SPSS学习完成之后&#xff0c;本人又开始了新教材《交通安全分析》的学习 #整理过程不易&#xff0c;喜欢UP就点个免费的关注趴 #本期内容接上一期05笔记 当天学习笔记整理 交通行为、心理与…

基于Java技术的家乡特色推荐系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;SpringBoot框架 工具&#xff1a;Eclipse&#xff0c;Navi…

强大的多数据库客户端工具:DataGrip【送源码】

今天给大家带来的工具是&#xff1a;DataGrip 介绍 DataGrip是jetbrains开发的一款关系数据库和 NoSQL 数据库的多数据库客户端工具&#xff0c;可以30天免费试用&#xff0c;后续使用需要购买。 DataGrip还是一款强大的跨平台工具&#xff0c;支持多种操作系统&#xff0c;比…

这个方法在Arcmap10.8里打得开adf文件

ArcMap如何打开.adf图层文件并将其文件转换为shp文件_adf文件怎么在arcmap里打开-CSDN博客像adf和它的info应该放在C盘&#xff0c;然后路径命名应该符合要求。 adf科普&#xff1a;ArcMap如何打开.adf图层文件并将其文件转换为shp文件_adf文件怎么在arcmap里打开-CSDN博客

鸿蒙开发组件:【DataAbility的生命周期】

DataAbility的生命周期 应用开发者可以根据业务场景实现data.js/data.ets中的生命周期相关接口。DataAbility生命周期接口说明见下表。 表1 DataAbility相关生命周期API功能介绍 接口名描述onInitialized?(info: AbilityInfo): void在Ability初始化调用&#xff0c;通过此回…

优化Java代码中的多层if...else结构

在软件开发中&#xff0c;尤其是处理各种逻辑判断时&#xff0c;多层嵌套的if...else语句几乎是无法避免的。然而&#xff0c;随着业务逻辑的复杂度增加&#xff0c;过度使用if...else会导致代码难以阅读、维护困难且容易出错。本文将探讨几种有效的方法来优化Java代码中的这类…

英伟达市值飙升,超越苹果微软并超过英国股市总市值

原标题&#xff1a;英伟达超越苹果微软市值&#xff0c;成为全球市值最高的企业 易采游戏网6月19日消息&#xff1a;近日&#xff0c;美国科技巨头英伟达市值的迅速增长引起了市场广泛关注。据最新数据显示&#xff0c;截至本周二收盘&#xff0c;英伟达的市场资本化已达到3.34…

基于Redis提高查询性能(保持数据一致性)

Redis实战篇 | Kyles Blog (cyborg2077.github.io) 目录 背景 商户查询缓存(根据ID查询&#xff09; 根据店铺类型查询&#xff08;List型&#xff09; 缓存更新策略&#xff08;保证数据一致性&#xff09; 案例&#xff08;利用缓存更新策略&#xff09; 背景 起初客户端…

【pytorch01】简单回归问题

1.梯度下降&#xff08;Gradient Descent&#xff09; y x 2 ∗ s i n ( x ) yx^{2}*sin(x) yx2∗sin(x) y ′ 2 ∗ x ∗ s i n ( x ) x 2 ∗ c o s ( x ) y2*x*sin(x) x^{2}*cos(x) y′2∗x∗sin(x)x2∗cos(x) 求最小值要求导 梯度下降定义&#xff1a;梯度下降要迭代计…

互联网广告相关概念

互联网广告概念涉及多个关键指标和定价模式&#xff0c;它们帮助广告主和广告平台衡量广告效果、优化广告投放策略&#xff0c;并计算广告成本。以下是互联网广告中一些核心概念的简要概述&#xff1a; 1.ROI (投资回报率) 衡量广告投资的效益&#xff0c;计算公式为&#xff…

【决战欧洲杯巅峰】AI模型预测[走地数据]初步准备工作

数据准备 首先&#xff0c;我们需要收集一些与欧洲杯比赛相关的历史数据。这些数据可能包括球队的历史战绩、球员的能力评分、比赛场地信息、历史交锋记录等。这些数据可以从公开来源获取&#xff0c;并进行适当的预处理和清洗。 特征提取 接下来&#xff0c;我们需要从收集…

vue3+ts+vite集成eslint

项目中安装eslint yarn add eslint -Deslint初始化 npx eslint --init按照下方操作即可 安装typescript-eslint/parser yarn add typescript-eslint/parser -D安装vite-plugin-eslint2 yarn add vite-plugin-eslint2 -D配置vite-plugin-eslint2 // vite.config.ts import …

Flask新手入门(一)

前言 Flask是一个用Python编写的轻量级Web应用框架。它最初由Armin Ronacher作为Werkzeug的一个子项目在2010年开发出来。Werkzeug是一个综合工具包&#xff0c;提供了各种用于Web应用开发的工具和函数。自发布以来&#xff0c;Flask因其简洁和灵活性而迅速受到开发者的欢迎。…

【计算机网络仿真实验-实验2.7】单臂路由

实验2.7 单臂路由 1. 实验拓扑图 2. 测试连通性 测试PC1 PC2 PC3 之间的连通性 无法ping通&#xff0c;因为它们处在不同的网段&#xff0c;而二层交换机不具备路由功能&#xff0c;因此没办法接通 3. 在交换机上创建vlan10&#xff0c;并将端口0/2划分到vlan10中 Switch>…