软件工程知识点总结(2):需求分析(一)——用例建模

news2024/12/24 21:14:10

1 软件项目开发流程:

       需求分析→概要设计→详细设计→编码实施→测试→产品提 交→维护

2 系统必须做什么?

       获取用户需求,从用户角度考虑,用户需要系统必须完成哪些工作,也就是对目 标系统提出完整、准确、清晰、具体的要求。

       提交的主要文档:软件需求规格说明书:以书面形式准确地描述软件需求。

         ( 结构化需求模型:数据流图、数据字典、状态图)

       (面向对象需求模型:用例图、类图、顺序图等)

3 软件需求管理的过程:

       (1) 需求确认:需求获取→需求分析→需求规格编写→需求验证

       (2) 需求变更

4 需求的五个基本性质:必要的、无歧义的、可测试的、可测量的、可跟踪的

5 需求获取方式:自悟、访谈、小组会、快速建立软件原型

       自悟特点:不用与用户交流,但对需求人员的要求太高,一般不现实。

       访谈:(1) 正式访谈: 系统分析员将提出一些事先准备好的具体问题。

                  (2)非正式访谈:分析员将提出一些用户可以自由回答的开放性问题,以 鼓励被访问人员说出自己的想法。

                  (3)调查表:注意对客户分类:经过仔细考虑写出的书面回答可能比被访 者对问题的口头回答更准确。

                  (4)现场观察:用一段时间,完整旁观原始系统的使用情况,使用人员,在 此基础上与客户做进一步交流。

       条件:(1)系统分析员能够正确提出问题;(2)被访谈人能够准确表达出需 求并被分析员准确捕捉。(3)谨防“完美蠕型”

       小组会的优点:开发者与用户不分彼此,齐心协力,密切合作;及时讨论并求精; 有能导出规格说明的具体步骤。

6 快速建立软件原型是最准确、最有效、最强大的需求分析技术。快速原型就是快 速建立起来的旨在演示目标系统主要功能的可运行的程序;构建原型的要点是, 它应该实现用户看得见的功能,省略目标系统的“隐含”功能。

       建模: 就是建立模型,通过对客观事物建立一种抽象的方法,用来表征事物并获 得对事物本身的理解,是对事物的一种无歧义的书面描述。

       建模原则:现实世界能够映射到模型;模型能够描述现实世界;模型行为能够正 确反映现实世界方法。

       最杰出的建模: 地图

7 UML (Unified Modeling Language 统一建模语言)为面向对象软件设计提供统 一的、标准的、可视化的建模语言。适用于描述以用例为驱动的软件设计的全过 程。

       RUP(统一过程)是用例驱动的软件开发方法。

       UML 不是一种程序设计语言,而是一种可视化的建模语言,比 C++、Java 这样 的程序设计语言抽象层次更高,适用于任何面向对象的程序设计语言。UML 不 是工具或知识库的规格说明,而是一种建模语言规格说明,是一种模型表示的标 准。UML 不是过程,也不是方法,但允许任何一种过程和方法使用它。

       UML 视图分类分为三个视图域:结构分类、动态行为、模型管理。

面向对象分析(OOA)构造模型:

8 用例图是外部参与者所能观察到的系统功能的模型图。用例是参与者要实现的最 终目标。用例图还是软件测试人员进行测试的指导。

       用例图的组成:参与者(活动者,Actor)、用例(Use Case)、关系(Relationship)

       用例图是指由参与者(Actor)、用例(Use Case)以及它们之间的关系构成的 用于描述系统功能的静态视图

       (1)用例间关系-泛化(继承) ——参与者之间的泛化:便于权限设置

                                                          ——用例之间的泛化:子用例和父用例相似,但表现出更特别的行为;子用例将 继承父用例的所有结构、行为和关系。子用例可以使用父用例的一段行为,也可 以重载它。

        父用例通常是抽象的。目的:支持系统的可扩展性、代码复用。

       (2)用例间关系-包含(Include)

       【箭头指向】:指向分解出来的功能用例。箭头出发的用例为基用例。包含用例 是必选的,如果缺少包含用例,基用例就不完整。

       包含关系的代码表现:B 类的对象作为 A 类的数据成员存在——对象的组合

      代码复用

       包含的两种使用场景:(1)使用包含用例来封装一组跨越多个用例的相似动作, 以便被多个基用例复用。包含关系最典型的应用就是复用。(2)当某用例的事件 流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成一个被 包含的用例。

       (3)用例间关系-扩展 extend

       【箭头指向】:指向基础用例。扩展用例是可选的,如果缺少扩展用例,不会影 响到基用例的完整性;扩展用例在一定条件下才会执行,并且其执行不会改变基 用例的行为。

       用例图补充:“系统”。系统被看作是一个提供用例的黑盒子。描述该系统功能的 用例置于方框内,代表外部实体的行为置于方框外。

       [有/无]条件条件:泛化:( 无 )条件发生、包含:( 无 )条件发生、 扩展:( 有 )条件发生

       为 Actor 提供【直接/间接】服务:泛化中的子用例: 提供的是(直接)服务。 扩展用例: 提供的是(直接)服务。包含中的被包含用例: 提供的是(间接) 服务。

9 用例模型建模:

       任务:获取需求,建立需求模型(用例模型:绘制用例图和编写用例文档)。

       步骤:①确定系统的参与者②确定场景③确定系统用例④确定用例之间的关系⑤ 编写用例描述文档

       ①确定系统的参与者:参与者是指直接和系统交互的一类事物,参与者主要有 如下三类:

(1) 直接使用系统的人,如 图书管理员,普通读者等(角色);

(2) 与该系统相关的其他系统,如邮件系统;

(3) 自动发生的事件,如时间、温度等自动事件,如:库存管理系统要求每晚零 点执行一个数据汇总操作,此时时间就成为该操作的执行者。

       ②确定场景:考虑参与者用系统做什么?进一步描述场景。在系统中,按照某 个顺序执行了一系列相关的动作后,即可实现某种功能,把完成这一功能操作的 集合称为场景。一个场景就是描述软件使用者与系统之间的一系列交互活动,系 统具体执行的行为路径,即一次完成的事件流。从个体角度考虑

       场景的获取方法:开发者与用户、客户进行交流来获取。

       ③确定系统用例:用例是对一组场景共同行为的抽象,是参与者最终要实现的 目的。重点在于参与者与系统之间的交互而不是系统内部的活动。

       方法:从场景描述,理解系统需求,分析获取系统用例。

       用例要点分析:

(1)可观测:用例是参与者与系统的交互,不是系统内部的活动,且一定是参与者主动发起的,最后结果一定要反馈给参与者。习惯说用例止于边界。

(2)结果值:每个用例都会对外界参与者产生一个有价值的结果。

(3)系统执行:结果值由系统所生成

(4)由参与者执行:用例的识别和定义都是从参与者角度出发,要以参与者的 视角获取和定义。

       “由参与者执行”的两层含义:

①用例命名使用业务语言而非技术语言

②用例表达用户观点,而不是系统能提供的功能

       补充:用例的粒度

       用例定义原则:“用例是参与者所要实现的最终目标,并为参与者产生所需要的 价值”。

       用例的粒度(用例的大小)可大可小,一般一个系统易控制在 20 个用例左右。 对复杂的系统可以划分为若干个子系统处理。用例是系统级的、抽象的描述,不 是细化的(是做什么,非怎样做)

       ④确定用例之间的关系:过于复杂的用例需要适当分解,以便分解功能、提高复 用性、可扩展性等。

       包含:从多个用例中提取公共部分的功能,单独放到一个用例中,提高复用性。

       扩展:将一个基用例中在某种特定情况下才激发的功能单独成为一个用例,以保 持基用例的完整(即一般情况都能处理)。

       泛化:用例泛化一般作为抽象用例而存在,为了复用或者扩展而使用。

       ⑤根据需要可以细化用例

       用例文档又称为用例规约或用例描述。用例文档是用于描述用例的文档,每一个 用例对应于一个用例文档。在用例文档中需要用文字的方式描述用例的执行过程, 即执行者与系统的交互过程 。

       用例建模包括用例图的绘制和用例文档的编写。用例建模是软件需求分析到最终 实现的第一步,它从用户的角度来描述软件系统的功能,描述人们如何使用软件 系统。

       用例描述组成内容:

用例名称:与用例图同,并写相应编号

简要说明/描述:简要描述功能

优先级:标识软件客户对该用例实现状况的期许(一般用 1~5 表示),数字越大, 优先级越高。

参与者(执行者):使用该用例的人或系统等。

前置条件:在用例启动时参与者和系统应置于什么状态。这个状态必须是系统可 以识别到的。如“参与者已成功登录”,不能是“参与者已打开电脑”。

后置条件:用例结束时系统应置于什么状态。即用例结束时的系统状态或持久数 据情况。

事件流:(文档中最重要的部分!!)描述如何通过交互传递由用例所承诺的价 值; 它是一个被严格流程化规范化的故事:用例开始(入口)——{用户发起请求—系 统校验请求—系统处理—系统反馈}——用例结束

事件流:

(1)基本流(没有异常/分支):做 835 汽车,胜利桥东下车;确认 615 汽车还 运营,坐 615 汽车到轨道交通 2 号线大北门站;从地铁出来后在门口吃点东西。  

(2)扩展流(用户做出了另外的选择):如果不饿不想吃东西,也可以旁边星 巴克做一会儿。

(3)异常流(系统没有像预期那样反馈用户数据):如果 615 路汽车停运了, 就直接打车

基本事件流:没有任何分支、没有如果,只有顺序描述,预期会成功的路线。

①基本流必须完整,不能引用其他扩展流;

②使用主动语句,以执行者或者系统为主语;

③不涉及到界面细节;

④不使用专业术语,而是用业务语言

事件流描述示例:

1、在文本框中输入账号                                                    管理员输入账号

2、用户点击提交按钮                                                        用户向系统请求提交表单

3、系统将销售记录生成 SQL 并执行,写入数据库           系统记录销售

10 活动图是动态行为图,用于描述系统的工作流程或一个用例的内部行为。

       活动图的作用:(1)描述系统业务工作过程(涉及多个用例) (2)对用例规约 建模(一个用例)(3) 对复杂算法建模

        活动图的组成元素:1、初始节点和终点 2、活动节点 3、转换 4、决策与分支、 合并 5、分岔与汇合

1、初始节点和终点:初始节点表示活动的起点,用一个实心圆表示;终点表示 活动的终结点,用一个圆圈内加一个实心圆来表示活动终点.在活动图中,可能 包含多个活动终点。

2、活动节点:用来表示一个活动,一个活动表示一个或多个动作的集合。

       活动:活动可分解,不是原子的,工作的完成需要一定的时间。 动作是原子的,不能被分解。如上“表达式”。

3、转换:当一个活动结束时,活动控制流就会传递给下一个活动节点,在活动 图中称之为“转换”,用一条带箭头的直线(或折线)来表示转换。

4、决策与分支、合并(类似程序流程图的判断框)

       决策与分支:用菱形表示的,一个或多个离开转换。每个离开转换上都会有一个 监护条件,用来表示满足什么条件的时候执行该转换。

       合并:指两条或多条控制路径汇合的情况。用菱形符号表示。

5、分岔与汇合 分岔:表示一个控制流被两个或多个控制流代替,经过分岔后,这些控制流是并 发进行的。

       汇合与分岔相反,表示两个或多个控制流被一个控制流代替。

       合并的各路分支选择哪条由决策条件决定,不同的条件会选择不同的决策分支, 分支之间是互斥的;

       汇合的两个分支相当是两个线程,线程都要完成才能汇合,其所有分支必须完成 才行,没有条件。

       活动图的其他组成元素:

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

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

相关文章

算法day22|组合总和 (含剪枝)、40.组合总和II、131.分割回文串

算法day22|组合总和 (含剪枝)、40.组合总和II、131.分割回文串 39. 组合总和 (含剪枝)40.组合总和II131.分割回文串 39. 组合总和 (含剪枝) 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 ta…

使用Node-API实现跨语言交互开发流程

一、前言 使用Node-API实现跨语言交互,首先需要按照Node-API的机制实现模块的注册和加载等相关动作。 ArkTS/JS侧:实现C方法的调用。代码比较简单,import一个对应的so库后,即可调用C方法。 Native侧:.cpp文件&#xf…

【C语言】十六进制、二进制、字节、位、指针、数组

【C语言】十六进制、二进制、字节、位 文章目录 [TOC](文章目录) 前言一、十六进制、二进制、字节、位二、变量、指针、指针变量三、数组与指针四、指针自加运算五、二维数组与指针六、指向指针的指针七、指针变量作为函数形参八、函数指针九、函数指针数组十、参考文献总结 前…

JVM面试(六)垃圾收集器

目录 概述STW收集器的并发和并行 Serial收集器ParNew收集器Parallel Scavenge收集器Serial Old收集器Parallel Old收集器CMS收集器Garbage First(G1)收集器 概述 上一章我们分析了垃圾收集算法,那这一章我们来认识一下这些垃圾收集器是如何运…

某云彩SRM2.0任意文件下载漏洞

文章目录 免责申明搜索语法漏洞描述漏洞复现修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 搜索语法 fofa icon_hash"1665918155"漏洞描述 某云采 SRM2.0是一款先…

制作自己的游戏:打砖块

文章目录 🚀 前言🚀 前期准备🚀 玩法设计🚀 游戏场景🍓 什么是游戏场景🍓 绘制左上角积分🍓 绘制右上角生命值🍓 绘制砖块🍓 绘制小球🍓 绘制挡板&#x1f35…

场景是人工智能第四要素,是垂直领域人工智能的第一要素。

"场景是人工智能的第四要素,与数据、算力、算法同等重要。"拿着技术找场景,还是拿着场景找技术?这个锤子和钉子的问题,一直困扰着各家AI大厂。从近5年的实践来看,拿着场景找技术是更为稳健的,否则…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《面向电网调峰的聚合温控负荷多目标优化控制方法 》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

R901085689比例流量控制阀配置HE-SP1比例放大器

R901085689比例流量控制阀配置HE-SP1比例放大器的功能是将电信号转换成对应的流量变化,通过调整阀门开度来控制介质的流量。这种转换是通过比例电磁铁实现的,它将输入的电流信号转换成力或位移,从而驱动阀芯移动,实现流量的连续调…

html+css+js网页设计 珠宝首饰模版13个页面

htmlcssjs网页设计 珠宝首饰模版13个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&…

手机同时传输USB功能与充电的实现及LDR6500的作用

在智能设备日益普及的今天,用户对于手机的功能需求愈发多样化,其中同时实现USB数据传输与充电功能成为了许多用户的迫切需求。这一功能的实现离不开先进的硬件技术和创新的芯片解决方案,而LDR6500正是这样一款能够满足这一需求的USB PD&#…

uni-app 扫码优化:谈谈我是如何提升安卓 App 扫码准确率的

一. 前言 之前的一个项目遭到用户吐槽:“你们这个 App 扫码的正确率太低了,尤其是安卓的设备。经常性的扫码扫不出来,就算是扫出来了,也是错误的结果!” 由于之前是扫描二维码的需求,所以没有对扫描条形码…

yolov8-obb旋转目标检测onnxruntime和tensorrt推理

onnxruntime推理 导出onnx模型: from ultralytics import YOLO model YOLO("yolov8n-obb.pt") model.export(format"onnx") onnx模型结构如下: python推理代码: import cv2 import math import numpy as np impo…

全面提升管理效率的智慧园区可视化系统

通过图扑 HT 搭建智慧园区可视化,实时监测和展示园区内各设施的状态与能耗,优化资源配置,提升园区管理效率。

科普神文,一次性讲透AI大模型的核心概念

令牌,向量,嵌入,注意力,这些AI大模型名词是否一直让你感觉熟悉又陌生,如果答案肯定的话,那么朋友,今天这篇科普神文不容错过。我将结合大量示例及可视化的图形手段,为你由浅入深一次…

电脑怎么禁止软件联网?电脑怎么限制软件上网?方法很多,这三种最常用!

在日常使用电脑时,某些软件可能会自动联网,这不仅会消耗网络资源,还可能带来安全风险。此外企业老板考虑到公司员工可能会在工作期间访问无关软件,影响工作效率,因此,很多用户希望能够禁止某些软件联网&…

springboot学生社团管理系统—计算机毕业设计源码26281

目录 摘要 Abstract 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析…

C语言 10 数组

简单来说,数组就是存放数据的一个组,所有的数据都统一存放在这一个组中,一个数组可以同时存放多个数据。 一维数组 比如现在想保存 12 个月的天数,那么只需要创建一个 int 类型的数组就可以了,它可以保存很多个 int …

Linux网络编程IO管理

网络 IO 涉及到两个系统对象,一个是用户空间调用 IO 的进程或者线程,一个是内核空间的内核系统,比如发生 IO 操作 read 时,它会经历两个阶段: 等待内核协议栈的数据准备就绪;将内核中的数据拷贝到用户态的…

vue3 json格式化显示数据(vue3-json-viewer) 对比修改前后数据

需求:对比变更前后数据 npm包下载 npm install vue3-json-viewer --savemain.ts中全局引用 // json可视化 import JsonViewer from "vue3-json-viewer" import "vue3-json-viewer/dist/index.css";app.use(JsonViewer).mount("#app&quo…