【软件工程】需求分析

目录

  • 前言
    • 需求分析
    • 需求获取
    • UML概述
    • 用例图
      • 用例图的组成
      • 用例图中的符号和含义
        • 包含的两种使用场景
      • 用例图补充:“系统”
      • 用例模型建模
        • 确定系统参与者
        • 确定系统用例
    • 用例文档
      • 用例文档组成部分
    • 活动图
      • 组成元素
        • 初始节点和终点
        • 活动节点
        • 转换
        • 决策与分支、合并
        • 分岔与汇合
    • 类图
      • 类的表示
        • 类的命名
        • 类的属性
        • 类的方法的命名规范
        • 类的职责
      • 类图中的关系
        • 关联
        • 聚集
          • 聚合和组合的区别
        • 依赖
        • 泛化
        • 实现
    • 顺序图
      • 顺序图组成元素
        • 对象
        • 生命线
        • 控制焦点(激活期)
        • 消息
        • 顺序图补充-----1.消息编号
        • 分析类
          • 边界类(Boundaryclass)
          • 控制类Control
          • 实体类(Entityclass)
    • OOA动态模型-状态图(未完)

前言

软件工程生命周期分为八个阶段:
问题定义—>可行性研究—>需求分析
—>概要设计—>详细设计—>编码与单元测试
—>综合测试—>软件维护

这节我们讲的是软件开发流程中的一个阶段,需求分析。


需求分析

任务:系统必须做什么?

  • 获取用户需求,从用户角度考虑,用户需要系统完成哪些工作,也就是对目标系统提出完整、准确、清晰、具体的要求
  • 提交的主要文档:
    软件需求规格说明书:以书面形式准确地描述软件需求。

需求获取

  • 自悟
  • 访谈
  • 小组会
  • 快速建立软件原型

UML概述

UML (Unified Modeling Language-----统一建模语言)为面向对象软件设计提供统一的、标准的、可视化的建模语言。
UML是一种可视化的建模语言。

  • 建模:
    建立模型,通过对客观事物建立一种抽象的方法,用来表征事物并获得对事物本身的理解,是对事物的一种无歧义的书面描述。
  • 建模是一种常用的、深入理解并解决问题的方法
  • 建模原则:
    现实世界能够映射到模型
    模型能够描述现实世界;
    模型行为能够正确反映现实世界方法

用例图

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

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

用例图示例:
请添加图片描述

用例图的组成

  • 参与者(Actor)
  • 用例(Use Case)
  • 关系(Relationship)

用例图中的符号和含义

请添加图片描述

  1. 参与者与用例之间如果有明显的使用关系,可以加箭头
  2. 由于一个用例代表一个系统功能,扩展是指在用例上扩展一个功能,这个功能不一定被执行,扩展用例在一定条件下才执行。扩展用例是可选的,如果缺少扩展用例,不会影响到基用例的完整性。
  3. 包含用例是属于从基用例分解出来的用例,包含用例一定会被执行,如果缺少包含用例,基用例就不完整。
    请添加图片描述
包含的两种使用场景
  1. 使用包含用例来封装一组跨越多个用例的相似动作,以便被多个基用例复用。包含关系最典型的应用就是复用。
  2. 当某用例的事件流过于复杂时,为了简化用例的描述,我们也可以把某一段事件流抽象成一个被包含的用例

用例图补充:“系统”

  1. 系统被看作是一个提供用例的黑盒子
  2. 描述该系统功能的用例置于方框内,代表外部实体的行为置于方框外
    请添加图片描述

用例模型建模

任务:获取需求,建立需求模型

  1. 确定系统参与者
  2. 确定场景
  3. 确定系统用例
  4. 确定用例之间关系
  5. 用例文档的编写。
确定系统参与者

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

  • 直接使用系统的人,如 图书管理员,普通读者等(角色)
  • 与该系统相关的其他系统,如支付系统、邮件系统
  • 自动发生的事件,如时间,温度等自动驱动用例功能的事件。
确定系统用例

用例是对一组场景共同行为的抽象。
重点在于参与者与系统之间的交互而不是系统内部的活动。

  • 可观测:
    用例是参与者与系统的交互,不是系统内部的活动,且一定是参与者主动发起的,最后结果一定要反馈给参与者。习惯说用例止于边界。
  • 结果值:
    每个用例都会对外界参与者产生一个有价值的结果。
  • 系统执行:结果值由系统所生成
  • 由参与者执行:用例的识别和定义都是从参与者角度出发,要以参与者的视角获取和定义

用例文档

  • 用例文档是用于描述用例的文档,每一个用例对应于一个用例文档。
  • 在用例文档中需要用文字的方式描述用例的执行过程,即执行者与系统的交互过程。
  • 用例建模包括用例图的绘制和用例文档的编写。

用例文档组成部分

  • 用例名称
  • 用例描述
  • 参与者
  • 前置条件
  • 后置条件
  • 基本事件流
  • 异常事件流
  • 其他事件流
  • 扩展点
    请添加图片描述
    请添加图片描述

活动图

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

组成元素

  • 初始节点和终点
  • 活动节点
  • 转换
  • 决策与分支,合并
  • 分岔与汇合
初始节点和终点
  • 初始节点表示活动的起点,用一个实心圆表示
  • 终点表示活动的终结点,用一个圆圈内加一个实心圆来表示活动终点.
  • 在活动图中,可能包含多个活动终点

请添加图片描述

活动节点

表示一个活动,一个活动表示一个或多个动作的集合。

转换
  • 当一个活动结束时,活动控制流就会传递给下一个活动节点,在活动图中称之为“转换”.
  • 用一条带箭头的直线(或折线)来表示转换。
决策与分支、合并
  • 决策与分支:
    用菱形表示的一个或多个离开转换。
    • 每个离开转换上都会有一个监护条件,
    • 用来表示满足什么条件的时候执行该转换。
  • 合并:
    指两条或多条控制路径汇合的情况
    • 用菱形符号表示。
      在这里插入图片描述
分岔与汇合

分岔:
表示一个控制流被两个或多个控制流代替,经过分岔后,这些控制流是并发进行的。
汇合与分岔相反,表示两个或多个控制流被一个控制流代替。
在这里插入图片描述

类图

  • 类(Class)、对象(Object)和它们之间的关系是面向对象技术中最基本的元素。

类的表示

请添加图片描述

类的命名

在这里插入图片描述

类的属性

请添加图片描述
请添加图片描述

类的方法的命名规范

请添加图片描述

类的职责

职责指的是类所担任的任务:即类要完成什么样的功能,要承担什么样的义务。

类图中的关系

  • 关联
  • 聚集:包括聚合和组合
  • 依赖
  • 泛化
  • 实现
关联

关联表示两个类的对象之间存在某种语义上的联系。
长期的,稳定的。
表现在代码实现中,一个对象会作为另一个对象的属性关联关系。
某个类的对象可以和其他类的多个对象联系。

举例:
购物功能:管理员查询用户的订单情况。用户和订单之间的关系就是关联。
请添加图片描述
请添加图片描述

聚集
  • 聚集是关联的一种特殊情况。
  • 聚集表示类与类之间的关系是整体与部分的关系。
    请添加图片描述
    聚集分为聚合和组合:
  • 聚合
    请添加图片描述
    重点:
    课题组没了,不会导致人的消失。
    即“整体不存在了,部分还存在”。

    设计中:
    • 人的数组作为课题组的一个属性。
    • 课题组集合作为人的一个属性。

数据库操作中,课题组的删除,不涉及到人员删除。

  • 组合
    如果部分类完全隶属于整体类,部分与整体共存,整体不存在了部分也会随之消失,则该聚集称为组合。

在这里插入图片描述
请添加图片描述

聚合和组合的区别

在这里插入图片描述
请添加图片描述

依赖

依赖关系描述两个类之间的使用关系:

  • 两个类之间是没有关系的
  • 但是一个类的实现需要另一个类的协助,这就产生了依赖。

依赖关系的代码表现:
方法的局部变量、方法参数、对静态方法的调用
注意:依赖关系不会增加属性

泛化

UML中的泛化关系就是通常所说的继承关系,它是通用元素和具体元素之间的一种分类关系。具体元素完全拥有通用元素的信息,并且还可以附加一些其他信息。

在UML中,用一端为空心三角形的连线表示泛化关系,三角形的顶角紧挨着通用元素。
在这里插入图片描述
抽象类或者抽象操作的名字用斜体表示
请添加图片描述

实现

对应于类和接口之间的关系。

  • 接口:
    接口通常是指一组方法的抽象集合,它们定义了类或结构体应该实现的行为。
  • 接口中只包含方法的名字而不包含方法的具体实现。(多态)
    在这里插入图片描述

顺序图

  • 顺序图是动态交互图,用于显示对象间的交互活动,它关注对象之间消息传送的时间顺序。
  • 目的:通过顺序图来对执行者和系统的交互过程进行建模,方便用户更好地理解系统的工作流程

顺序图组成元素

  • 对象-----Object
  • 生命线-----Lifeline
  • 控制焦点(激活期)-----Activation
  • 消息-----Message
对象

一般命名方式:

对象名:类名
在这里插入图片描述

生命线
  • 表示对象存在的时间
  • 如果对象生命期结束,则用注销符号表示
    在这里插入图片描述
控制焦点(激活期)
  • 对象执行某个动作的时期
    在这里插入图片描述
消息
  • 对象间交互信息的方式,表示为从一条生命线到另一条生命线的箭头
  • 箭头指向详细的接收者,表示对其操作的调用。
  • 每种消息的箭头不一样
    同步消息:
    发送者把消息发送后,等待,直到接收者返回控制,即必须得到回应才能进行下一项操作。
    在这里插入图片描述
    异步消息:
    消息可以是一个信号或一次操作调用,收到消息即为事件。
  • 可以有两种异步消息:
    • 一种是发送者向接收者发送信号
    • 另一种是由调用者调用接收者的操作

在这里插入图片描述
返回消息(虚线表示):
表示消息的返回。一般同步的返回不需画出,直接隐含,也可使用返回消息强调返回结果值。
在这里插入图片描述

顺序图补充-----1.消息编号
  • 顺序编号——在每个消息的前面加上一个用冒号隔开的顺序号来表示其顺序。
    在这里插入图片描述
  • 嵌套编号——把属于同一个对象发送和接收的消息放
    在同一层进行编号。
    在这里插入图片描述
分析类

对象系统中所有功能都是由类来实现,这些类是从用例文档中找出,并将其所描述的系统行为分配到这些类中,在面向对象分析阶段所定义的这些类通称为分析类。

  • 分析类对应MVC架构的三个层次:Boundary,Control,Entity。
边界类(Boundaryclass)

位于系统与外界的交界处,处于系统最上层,处理系统环境和系统内部间的通信。
边界类分为两类:

  • 用户界面类:系统与外部进行交互的类,在分析阶段关注于为用户提供哪些操作,如用户输入数据,展示数据给用户。
  • 系统/设备接口类:系统与外部系统或设备之间交互的接口类,在分析阶段关注交互的协议。

UML中边界类的表示:
在这里插入图片描述

控制类Control
  • 处于中间层,封装上层的边界类和下层的实体类之间的交互行为,是整个用例行为的协调器
  • 控制类可以有效的将边界对象和实体对象分开
    • 将用例所特有的行为与实体对象分开,使实体对象有更高的复用性。
    • 更适应系统边界对象的变更;

特点:

  • 独立于外部环境,不依赖于环境的变更
  • 定义控制逻辑和事务逻辑
  • 实体类内部结构或行为发生变更时控制类不会有大的变更。

UML中控制类的表示:
在这里插入图片描述

实体类(Entityclass)

代表系统的核心概念,来自对业务中的实体对象的抽象,用于记录系统所需要维护的数据和对这些数据的处理行为。
UML中实体类的表示:
在这里插入图片描述

在这里插入图片描述

OOA动态模型-状态图(未完)

  • 一个UML状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。
  • 状态图作用:
    • 描述一个特定对象的所有可能状态及其引起状态转移的事件。
    • 描述业务领域的业务流程:在什么状态下,有什么事件发生,导致了什么后果。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript:Web APIs(三)

本篇文章的内容包括: 一,事件流 二,移除事件监听 三,其他事件 四,元素尺寸与位置 一,事件流 事件流是什么呢? 事件流是指事件执行过程中的流动路径。 我们发现,一个完整的事件执行…

MySQL技能树学习——数据库组成

数据库组成: 数据库是一个组织和存储数据的系统,它由多个组件组成,这些组件共同工作以确保数据的安全、可靠和高效的存储和访问。数据库的主要组成部分包括: 数据库管理系统(DBMS): 数据库管理系…

围绕伦理困境进行深入讨论伦理困境分析与解决方案提出及个人反思

遵循一般咨询伦理的六原则(自主、有益、无害、公正、诚信、诚实)对五个选项(A 评估,B 收益,C 后果,D 责任,E 教育)进行评估,可以得出以下结论: A. 评估&…

数据结构与算法-单向环形链表与约瑟夫问题

1.简介 单向环形链表&#xff0c;闭合的形成一个环。 单向环形链表的一个应用场景是约瑟夫问题。 约瑟夫问题为&#xff1a;设编号为1&#xff0c;2&#xff0c;…&#xff0c;n的n个人围坐一圈&#xff0c;约定编号为k(1<k<n)的人从1开始报数&#xff0c;数到m的那个人…

C语言-------实现贪吃蛇小游戏

目录 一、预备知识 1.1 Win32 API介绍 Windows 这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外&#xff0c; 它同时也是一个很大的服务中心&#xff0c;调用这个服务中心的各种服务&#xff08;每一种服务就是一个函数&#xff09;&#xff0c;可以帮应用程…

如何在latex中使用第三方字体

最近想到一个问题&#xff1a;如何在 LaTeX \LaTeX LATE​X中使用第三方字体。 这个问题其实挺基础的&#xff0c;但是因为小白的 LaTeX \LaTeX LATE​X水平&#xff0c;应该说五六年了&#xff0c;毫无进步。 所以确实还是需要解决一下这个基础的问题。 小白最近使用的是TeXs…

Python | Leetcode Python题解之第65题有效数字

题目&#xff1a; 题解&#xff1a; from enum import Enumclass Solution:def isNumber(self, s: str) -> bool:State Enum("State", ["STATE_INITIAL","STATE_INT_SIGN","STATE_INTEGER","STATE_POINT","STATE_…

基于 Spring Boot 博客系统开发(五)

基于 Spring Boot 博客系统开发&#xff08;五&#xff09; 本系统是简易的个人博客系统开发&#xff0c;为了更加熟练地掌握 SprIng Boot 框架及相关技术的使用。&#x1f33f;&#x1f33f;&#x1f33f; 基于 Spring Boot 博客系统开发&#xff08;四&#xff09;&#x1f…

408数据结构-二叉树的概念、性质与存储结构 自学知识点整理

前置知识&#xff1a;树的基本概念与性质 二叉树的定义 二叉树是一种特殊的树形结构&#xff0c;其特点是每个结点至多只有两棵子树&#xff08;即二叉树中不存在度大于 2 2 2的结点&#xff09;&#xff0c;并且二叉树是有序树&#xff0c;左右子树不能互换。 与树类似&#…

fastdfs安装

fastdfs安装步骤 一 、原理 FastDFS是一个开源的轻量级分布式文件系统&#xff0c;由跟踪服务器&#xff08;tracker server&#xff09;、存储服务器&#xff08;storage server&#xff09;和客户端&#xff08;client&#xff09;三个部分组成&#xff0c;主要解决了海量数…

Flutter笔记:Widgets Easier组件库(10)快速处理承若型对话

Flutter笔记 使用Widgets Easier组件库快速处理承若型对话 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://…

光固化打印--问题记录

平面翘起 原因&#xff1a;角度平&#xff0c;缺支持 解决&#xff1a; 45度角度摆放底部平面起皮 原因&#xff1a;缺少支撑&#xff0c;原始结构支持无法支撑平面。 解决&#xff1a;增加支撑

【数学 排列组合】1643. 第 K 条最小指令

本文涉及知识点 数学 排列组合 LeetCode1643. 第 K 条最小指令 Bob 站在单元格 (0, 0) &#xff0c;想要前往目的地 destination &#xff1a;(row, column) 。他只能向 右 或向 下 走。你可以为 Bob 提供导航 指令 来帮助他到达目的地 destination 。 指令 用字符串表示&am…

Mybatis之Sqlsession、Connection和Transaction三者间的关系

前言 最近在看Mybatis的源码&#xff0c;搜到这篇文章Sqlsession、Connection和Transaction原理与三者间的关系&#xff0c;debug之后发现有不少疑惑&#xff0c;于是按照原文整理了一下&#xff0c;记录下debug中的一些困惑点。 对于我们开发来讲&#xff0c;不管跟任何关系…

2024五一数学建模C题完整论文讲解(含完整python代码及几十个特征表、处理表、结果表)

大家好呀&#xff0c;从发布赛题一直到现在&#xff0c;总算完成了2024五一数学建模C题煤矿深部开采冲击地压危险预测完整的成品论文。 本论文可以保证原创&#xff0c;保证高质量。绝不是随便引用一大堆模型和代码复制粘贴进来完全没有应用糊弄人的垃圾半成品论文。 C题论文…

【Docker学习】docker version查看版本信息

就像很多应用一样&#xff0c;docker也使用version来查看版本信息。但因为docker包含有不少独立组件&#xff0c;version的作用范围会更广一些。 用法1&#xff1a; docker --version 描述&#xff1a; 输出安装的Docker CLI 的版本号。关于Docker CLI&#xff0c;请访问。 实操…

数字电路-5路呼叫显示电路和8路抢答器电路

本内容涉及两个电路&#xff0c;分别为5路呼叫显示电路和8路抢答器电路&#xff0c;包含Multisim仿真原文件&#xff0c;为掌握FPGA做个铺垫。紫色文字是超链接&#xff0c;点击自动跳转至相关博文。持续更新&#xff0c;原创不易&#xff01; 目录&#xff1a; 一、5路呼叫显…

如何免费体验 gpt2-chatbot

如何免费体验 gpt2-chatbot 就在五一假期期间&#xff0c;一个神秘模型在没有任何官方文件的情况下突然发布。发布后不到 12 小时就立即引起人工智能爱好者和专家们的关注。这个名为“gpt2-chatbot”的神秘新模型凭借其令人印象深刻的能力轰动全球。有人猜测它可能是 OpenAI 的…

Python爬取豆瓣电影Top250数据

任务 爬取豆瓣电影top250中的影片名称、影片海报、年份、地区、类型、评分、评价人数、总体评价&#xff0c;并输出到douban_top250.xlsx文件中 环境 Python 3.8 requests bs4 openpyxl 源码 # 创建一个新的Excel工作簿 workbook openpyxl.Workbook() # 获取默认的工作表…

新版security demo(二)前端

写这篇博客&#xff0c;刚好换了台电脑&#xff0c;那就借着这个demo复习下VUE环境的搭建。 一、前端项目搭建 1、安装node 官网下载安装即可。 2、安装脚手架 npm install -g vue-cli 使用脚手架搭建一个demo前端项目 vue init webpack 项目名称 3、安装依赖 这里安装…