软工导论知识框架(二)结构化的需求分析
本章节涉及很多重要图表的制作,如ER图、数据流图、状态转换图、数据字典的书写等,对初学者来说比较生僻,本贴只介绍基础的轮廓,后面会有单独的帖子详解各图表如何绘制。

一.结构化的软件开发方法:结构化的分析、设计、实现
二.需求分析的重要性:
1.开发软件系统最困难的部分就是准确说明开发什么,最困难的概念性工作是编写出详细需求,包括所有面向用户、面向机器和其它软件系统的接口。此工作一旦做错,将会给系统带来极大损害,并且以后对它修改也极为困难。
2.结构化的分析方法,又被称为面向数据流的分析方法。
三.核心思想
- 分解化简问题
- 将物理与逻辑表示分开 (先考虑逻辑问题,最后再考虑加上物理的实现细节)
- 进行数据与逻辑抽象
四.分析步骤
1.发现需求
发现需求方法(试图在较短的时间内获取软件系统大部分的需求):
- 与用户交谈,向用户提问题;
- 参观用户的工作流程,观察用户的操作;
- 向用户群体发调查问卷——向更多的用户群体获取需求;
- 与同行、专家交谈,听取他们的意见;
- 分析已经存在的同类软件产品,提取需求;
- 从行业标准、规则中提取需求;
- 从Internet上搜查相关资料等。
2.求精 :对初步需求反复求精多次细化。
3.建模 :建立模型,用图形符号和组织规则书面描述事物。(避免文字表达的二义性)

结构化软件开发方法所要求的3种开发模型。
- 数据模型:实体关系图and数据对象描述
- 功能模型:数据流图and处理规格说明
- 行为模型:状态转换图and控制规格说明
数据字典:系统的相关数据,结构化分析方法的核心, 描述软件使用和产生的所有数据对象。
数据模型:
E-R图(实体联系图)表达 描述数据对象间关系 图中数据对象属性用“数据对象描述”表达。
功能模型(描述功能):
DFD(数据流图)表达 描绘数据在软件中移动、变换及相应功能 图中功能用“处理规格说明”表达。
行为模型(系统中有哪些状态):
状态转换图 :描绘系统状态和在不同状态间转换方式。 图中软件控制附加信息用“控制规格说明”表达。
4.规格说明 :书写软件需求规格说明,作为分析阶段最终成果。(非常重要的文档!)
5.复审
五.数据模型
1.组成:数据对象、数据对象间关系、属性
- 数据对象:软件必须理解的复合信息表示,复合信息是具有一系列不同性质或属性的事物。(可以理解为一种包含多种属性的结构体变量),例如:事务(报表)、地点(仓库)、角色(教师、学生)单位(会计科)、行为(打电话)等
- 属性: 定义数据对象性质。 例如,数据对象学生的属性可为学号、姓名、班级等。(结构体变量所包含的多种属性)
- 关系: 对象彼此间相互连接方式,也称联系。例如,教师和学生间存在“教”的联系。
关系分三类,1:1 、 1:N 、 M:N。
2.表达方式:实体-关系图

E-R图用简单符号表达分析员对问题域理解,作为用户与分析员有效交流工具。

(注意:属性同样可以属于实体与实体之间的关系,比如上图中的“成绩”。)
E-R图如果建设良好,可以直接转化为数据库中的表结构~(在搭建数据库时,实体和关系各需要对应一张表)
六.功能模型
1.数据流图仅仅用来描述系统中的功能模型——只考虑信息在系统中,流动和处理的情况。
2.数据流图(DFD)描绘系统逻辑模型,图中没具体的物理元素,只描绘信息在系统中流动处理情况,是非常好通信工具和软件设计出发点。
3.符号:
- 正方形(或立方体):表示数据的源点或终点(数据最开始从哪里来,要到哪里去)。(人员、部门、计算机外部设备或传感器装置)
- 圆角矩形(圆形):代表变换数据的处理。(一系列程序、单个程序或程序一个模块;人工处理过程。)
- 开口矩形(两条平行横线):代表数据存储(文件、文件一部分、数据库元素或记录一部分,可存在磁盘、磁带、磁鼓、主存、微缩胶片任何介质上。)
- 箭头:表示数据流,即特定数据的流动方向。(在处理之间有向流动的数据项或数据集合。)
相关附加符号:

4.绘制方法:
- 从问题描述提取数据流图四种成分:先考虑源点和终点,再考虑处理,最后考虑数据流和数据存储
- 着手画数据流图的基本系统模型。(通常不会绘制较为完整的数据流图)
- 把基本系统模型细化,描绘系统主要功能。
- 主要功能进一步细化。
- 结束、进一步分解涉及如何具体实现功能时,不应再分解。(当内容细化到How而不是what时,就立刻停止进一步细化)
5.分层数据流图:为表达数据加工情况,需采用层次结构数据流图。
- 顶层数据流图包含一个加工项;
- 底层流图指加工项不再分解的数据流图;
- 中间层流图只在顶层和底层之间,对其上层父图的细化。

6.注意事项:
A. 编号的设置 :子图的编号是父图相应的处理逻辑的编号。 子图中处理逻辑编号由子图号、小数点与局部号组成。
B. 父图与子图的平衡 :子图详细地描述父图中处理逻辑 子图的输入、输出数据流应同父图处理逻辑的输入、输出数据流相一致。(无论怎么细化都要和父图输入输出保持一致)。

C. 局部数据存贮:在子图中出现的数据存贮,可以不出现在父图中,画父图时只需画出处理逻辑之间的联系,不必画出各个处理逻辑内部的细节。
7.命名规则:
数据流(数据存储)命名 :
(1)用名词,区别于控制流。
(2)代表整个数据流(数据存储)内容,不仅仅反映某些成分。
(3)不用缺乏具体含义名字,如“数据”、“信息”。
处理命名:
(1)用动宾词组,避免使用“加工”、“处理”等笼统动词。
(2)应反映整个处理的功能,不是一部分功能。
(3)通常仅包括一个动词,否则分解。
数据源点/终点命名:
不属于数据流图的核心内容,可能是人员、计算机外部设备或传感器装置。采用它们在问题域中习惯使用的名字(如“采购员”、“仓库管理员’等)。
8.用途(用户和系统分析员进行交流的良好工具):
- 作为交流信息的工具
- 作为分析和设计的工具
用数据流图辅助物理系统设计时,可在数据流图上画出许多组自动化边界,每组自动化边界可能意味着不同的物理系统。
(数据流图的绘制对初学者很困难,后期会出总结各种图形的绘制,此处先不作为重点展开讲解)
七.行为模型——状态转换图:
软件的行为模型:状态、事件,行为。
- 状态:被观察到的系统行为模式。
- 事件:引起状态转换的外界事件抽象。
箭头表示,箭头上标事件名。后跟〔条件〕,表状态转换条件。
- 行为:进入某状态所作动作。
状态框内do:行为名。
八.数据字典:对系统使用的所有数据元素定义的集合,半形式化方法表达。
数据字典对四类元素定义:数据流,数据元素,数据存储,处理
1.数据流的描述:
- 数据流名
- 说明:简要介绍作用即它产生的原因和结果。
- 数据流来源:即该数据流来自何方。
- 数据流去向:去向何处。
- 数据流组成:数据结构。
- 每个数据量流通量:数据量、流通量。
2.数据元素的描述:
- 数据元素名
- 类型:数字(离散值、连续值),文字(编码类型)
- 长度
- 取值范围
- 相关的数据元素及数据结构
3.数据存储的描述:
- 数据存储名
- 简述:存放的是什么数据。
- 输入数据
- 输出数据
- 数据文件组成:数据结构。
- 存储方式:顺序,直接,关键码。
- 存取频率
4.数据处理:
- 处理名:
- 处理编号:反映该处理的层次
- 简要描述:加工逻辑及功能简述
- 输入数据流:
- 输出数据流:
- 加工逻辑: 简述加工程序、加工顺序 … …
5.定义数据的方法:对数据自顶向下分解,由数据元素组成数据的方式来定义。
- 顺序: 以确定次序连接两个或多个数据元素;
- 选择: 从两个或多个可能元素中选一个;
- 重复: 把指定数据元素重复零次或多次;
- 可选: 一个数据元素可有可无的。

如下是一个例题 :


相关文章:
软工导论知识框架(二)结构化的需求分析
本章节涉及很多重要图表的制作,如ER图、数据流图、状态转换图、数据字典的书写等,对初学者来说比较生僻,本贴只介绍基础的轮廓,后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法:结构化的分析、设计、…...
[SQL挖掘机] - 算术函数 - abs
介绍: 当谈到 SQL 中的 abs 函数时,它是一个用于计算数值的绝对值的函数。“abs” 代表 “absolute”(绝对),因此 abs 函数的作用是返回一个给定数值的非负值(即该数值的绝对值)。 abs 函数接受一个参数&a…...
vue拼接html点击事件不生效
vue使用ts,拼接html,点击事件不生效或者报 is not defined 点击事件要用onclick 不是click let data{name:测,id:123} let conHtml <div> "名称:" data.name "<br>" <p class"cursor blue&quo…...
【Spring】Spring之依赖注入源码解析
1 Spring注入方式 1.1 手动注入 xml中定义Bean,程序员手动给某个属性赋值。 set方式注入 <bean name"userService" class"com.firechou.service.UserService"><property name"orderService" ref"orderService"…...
【微软知识】微软相关技术知识分享
微软技术领域 一、微软操作系统: 微软的操作系统主要是 Windows 系列,包括 Windows 10、Windows Server 等。了解 Windows 操作系统的基本使用、配置和故障排除是非常重要的。微软操作系统(Microsoft System)是美国微软开发的Wi…...
12.python设计模式【观察者模式】
内容:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变的时候,所有依赖于它的对象得到通知并被自动更新。观者者模式又称为“发布-订阅”模式。比如天气预报,气象局分发气象数据。 角色: 抽象主题…...
重生之我要学C++第五天
这篇文章主要内容是构造函数的初始化列表以及运算符重载在顺序表中的简单应用,运算符重载实现自定义类型的流插入流提取。希望对大家有所帮助,点赞收藏评论,支持一下吧! 目录 构造函数进阶理解 1.内置类型成员在参数列表中的定义 …...
复习之linux高级存储管理
一、lvm----逻辑卷管理 1.lvm定义 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备…...
HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face
总述 HuggingGPT 让LLM发挥向路由器一样的作用,让LLM来选择调用那个专业的模型来执行任务。HuggingGPT搭建LLM和专业AI模型的桥梁。Language is a generic interface for LLMs to connect AI models 四个阶段 Task Planning: 将复杂的任务分解。但是这里…...
java工程重写jar包中class类覆盖问题
结论:直接在程序中复写jar中的类即可 原因:一般我java工程是运行在tomcat容器中,tomcat容易在加载我们工程类和jar包是的优先级为: 我们工程的class 先于 我们工程lib下的jar 重复的类只加载一次,加载我们复写后的类后…...
Mybatis基于注解与XML开发
文章目录 1 关于SpringBoot2 关于MyBatis2.1 MyBatis概述2.2 MyBatis核心思想2.3 MyBatis使用流程3 MyBatis配置SQL方式3.1 基于注解方式3.1.1 说明3.1.2 使用流程3.1.3 常用注解 3.2 基于XML方式3.2.1 相比注解优势3.2.2 使用流程3.2.3 常用标签 1 关于SpringBoot SpringBoot…...
数字化转型导师坚鹏:数字化时代扩大内需的8大具体建议
在日新月异的数字化时代、复杂多变的国际化环境下,扩大内需成为推动经济发展的国家战略,如何真正地扩大内需?结合本人15年的管理咨询经验及目前实际情况的深入研究,提出以下8大具体建议: 1、制定国民收入倍增计划。结…...
M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输
前言 最近新入了Macmini M2,但是以前的老电脑的虚拟机运行不起来了。😅,实际上用过K8S的时候,会发现部分镜像也跑不起来,X86的架构和ARM实际上还是有很多隐形兼容问题。所以只能重新安装ARM Win11,幸好微软…...
Linux中显示系统正在运行的进程的命令
2023年7月29日,周六上午 在Linux中,ps命令用于显示当前系统中正在运行的进程, ps应该是processes snapshot(进程快照)的缩写。 以下是ps命令的常见用法和示例: 显示当前用户的所有进程:ps 显示…...
vite中安装less
使用vite创建的项目,默认是没有安装less的 如果直接在style中书写less 会报下图错误: 解决方案: npm install --save less 在package.json中查看是否安装成功 安装完成刷新页面,问题解决...
Aduino中eps环境搭建
这里只记录Arduino2.0以后版本:如果有外网环境,那么可以轻松搜到ESP32开发板环境并安装,如果没有,那就见下面操作: 进入首选项,将esp8266的国内镜像地址填入,然后保存,在开发板中查…...
python——案例二 求两个数的和
#案例二 求两个数的和 num1input(请输入第一个数字:) num2input(请输入第二个数字:) sumfloat(num1)float(num2) #计算公式 print(sum) #显示结果 输入num11、num22得到结果sum3...
一文了解 Android 车机如何处理中控的旋钮输入?
前言 上篇文章《从实体按键看 Android 车载的自定义事件机制》带大家了解了 Android 车机支持自定义输入的机制 CustomInputService。事实上,除了支持自定义事件,对于中控上常见的音量控制、焦点控制的旋钮事件,Android 车机也是支持的。 那…...
小红书推广 方法总结
大家好,我是网媒智星,今天跟大家分享一下小红书的推广方法和经验。 一、平台简介 1、什么是小红书? 小红书是一个消费决策/生活方式平台,用户可以通过图片、文案、视频等方式分享美好生活。 2、用户画像 - 2亿月活跃…...
通讯录的实现(超详细)——C语言(进阶)
目录 一、创建联系人信息(结构体) 二、创建通讯录(结构体) 三、define定义常量 四、打印通讯录菜单 五、枚举菜单选项 六、初始化通讯录 七、实现通讯的的功能 7.1 增加加联系人 7.2 显示所有联系人的信息 7.3 单独查…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
echarts使用graphic强行给图增加一个边框(边框根据自己的图形大小设置)- 适用于无法使用dom的样式
pdf-lib https://blog.csdn.net/Shi_haoliu/article/details/148157624?spm1001.2014.3001.5501 为了完成在pdf中导出echarts图,如果边框加在dom上面,pdf-lib导出svg的时候并不会导出边框,所以只能在echarts图上面加边框 grid的边框是在图里…...

