软工导论知识框架(二)结构化的需求分析
本章节涉及很多重要图表的制作,如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.定义数据的方法:对数据自顶向下分解,由数据元素组成数据的方式来定义。
- 顺序: 以确定次序连接两个或多个数据元素;
- 选择: 从两个或多个可能元素中选一个;
- 重复: 把指定数据元素重复零次或多次;
- 可选: 一个数据元素可有可无的。
如下是一个例题 :
相关文章:
![](https://img-blog.csdnimg.cn/221634902fe24de286adb7360d4b90c4.png)
软工导论知识框架(二)结构化的需求分析
本章节涉及很多重要图表的制作,如ER图、数据流图、状态转换图、数据字典的书写等,对初学者来说比较生僻,本贴只介绍基础的轮廓,后面会有单独的帖子详解各图表如何绘制。 一.结构化的软件开发方法:结构化的分析、设计、…...
![](https://www.ngui.cc/images/no-images.jpg)
[SQL挖掘机] - 算术函数 - abs
介绍: 当谈到 SQL 中的 abs 函数时,它是一个用于计算数值的绝对值的函数。“abs” 代表 “absolute”(绝对),因此 abs 函数的作用是返回一个给定数值的非负值(即该数值的绝对值)。 abs 函数接受一个参数&a…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://www.ngui.cc/images/no-images.jpg)
【Spring】Spring之依赖注入源码解析
1 Spring注入方式 1.1 手动注入 xml中定义Bean,程序员手动给某个属性赋值。 set方式注入 <bean name"userService" class"com.firechou.service.UserService"><property name"orderService" ref"orderService"…...
![](https://img-blog.csdnimg.cn/1fa0db9e419045efa43314747e28ec93.png)
【微软知识】微软相关技术知识分享
微软技术领域 一、微软操作系统: 微软的操作系统主要是 Windows 系列,包括 Windows 10、Windows Server 等。了解 Windows 操作系统的基本使用、配置和故障排除是非常重要的。微软操作系统(Microsoft System)是美国微软开发的Wi…...
![](https://www.ngui.cc/images/no-images.jpg)
12.python设计模式【观察者模式】
内容:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变的时候,所有依赖于它的对象得到通知并被自动更新。观者者模式又称为“发布-订阅”模式。比如天气预报,气象局分发气象数据。 角色: 抽象主题…...
![](https://img-blog.csdnimg.cn/b56c463b171a4bdc91b52079f64d954e.png)
重生之我要学C++第五天
这篇文章主要内容是构造函数的初始化列表以及运算符重载在顺序表中的简单应用,运算符重载实现自定义类型的流插入流提取。希望对大家有所帮助,点赞收藏评论,支持一下吧! 目录 构造函数进阶理解 1.内置类型成员在参数列表中的定义 …...
![](https://img-blog.csdnimg.cn/9b03c8afdef54f4cbe622bc51aa6708c.png)
复习之linux高级存储管理
一、lvm----逻辑卷管理 1.lvm定义 LVM是 Logical Volume Manager(逻辑卷管理)的简写,它是Linux环境下对磁盘分区进行管理的一种机制。 逻辑卷管理器(LogicalVolumeManager)本质上是一个虚拟设备驱动,是在内核中块设备和物理设备…...
![](https://img-blog.csdnimg.cn/67a87e3d031843f08d306cbe693da372.png)
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: 将复杂的任务分解。但是这里…...
![](https://www.ngui.cc/images/no-images.jpg)
java工程重写jar包中class类覆盖问题
结论:直接在程序中复写jar中的类即可 原因:一般我java工程是运行在tomcat容器中,tomcat容易在加载我们工程类和jar包是的优先级为: 我们工程的class 先于 我们工程lib下的jar 重复的类只加载一次,加载我们复写后的类后…...
![](https://www.ngui.cc/images/no-images.jpg)
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…...
![](https://img-blog.csdnimg.cn/img_convert/ace1d5697b6a1e7ac748291ab22098dd.jpeg)
数字化转型导师坚鹏:数字化时代扩大内需的8大具体建议
在日新月异的数字化时代、复杂多变的国际化环境下,扩大内需成为推动经济发展的国家战略,如何真正地扩大内需?结合本人15年的管理咨询经验及目前实际情况的深入研究,提出以下8大具体建议: 1、制定国民收入倍增计划。结…...
![](https://img-blog.csdnimg.cn/84023e7db82946c4b9c48605b98719cc.png)
M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输
前言 最近新入了Macmini M2,但是以前的老电脑的虚拟机运行不起来了。😅,实际上用过K8S的时候,会发现部分镜像也跑不起来,X86的架构和ARM实际上还是有很多隐形兼容问题。所以只能重新安装ARM Win11,幸好微软…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux中显示系统正在运行的进程的命令
2023年7月29日,周六上午 在Linux中,ps命令用于显示当前系统中正在运行的进程, ps应该是processes snapshot(进程快照)的缩写。 以下是ps命令的常见用法和示例: 显示当前用户的所有进程:ps 显示…...
![](https://img-blog.csdnimg.cn/683bf56bb89446dc92989163534b93f3.png)
vite中安装less
使用vite创建的项目,默认是没有安装less的 如果直接在style中书写less 会报下图错误: 解决方案: npm install --save less 在package.json中查看是否安装成功 安装完成刷新页面,问题解决...
![](https://img-blog.csdnimg.cn/41241f00bf904b06aa1ae0e531693ae4.png)
Aduino中eps环境搭建
这里只记录Arduino2.0以后版本:如果有外网环境,那么可以轻松搜到ESP32开发板环境并安装,如果没有,那就见下面操作: 进入首选项,将esp8266的国内镜像地址填入,然后保存,在开发板中查…...
![](https://img-blog.csdnimg.cn/b79da7219d2a4cf285617994020806e0.png)
python——案例二 求两个数的和
#案例二 求两个数的和 num1input(请输入第一个数字:) num2input(请输入第二个数字:) sumfloat(num1)float(num2) #计算公式 print(sum) #显示结果 输入num11、num22得到结果sum3...
![](https://img-blog.csdnimg.cn/img_convert/074f8e6209effd644873ef202e13a5d2.png)
一文了解 Android 车机如何处理中控的旋钮输入?
前言 上篇文章《从实体按键看 Android 车载的自定义事件机制》带大家了解了 Android 车机支持自定义输入的机制 CustomInputService。事实上,除了支持自定义事件,对于中控上常见的音量控制、焦点控制的旋钮事件,Android 车机也是支持的。 那…...
![](https://img-blog.csdnimg.cn/11ae640cfaa84d67a995f5fe31e57343.jpeg)
小红书推广 方法总结
大家好,我是网媒智星,今天跟大家分享一下小红书的推广方法和经验。 一、平台简介 1、什么是小红书? 小红书是一个消费决策/生活方式平台,用户可以通过图片、文案、视频等方式分享美好生活。 2、用户画像 - 2亿月活跃…...
![](https://img-blog.csdnimg.cn/266cc1ed21ac4dce9e32a41cd2bae22a.jpeg)
通讯录的实现(超详细)——C语言(进阶)
目录 一、创建联系人信息(结构体) 二、创建通讯录(结构体) 三、define定义常量 四、打印通讯录菜单 五、枚举菜单选项 六、初始化通讯录 七、实现通讯的的功能 7.1 增加加联系人 7.2 显示所有联系人的信息 7.3 单独查…...
![](https://img-blog.csdnimg.cn/img_convert/b49db12e198d73dfa16a8bb70a06c447.jpeg)
3D 渲染技巧-如何创建高质量写实渲染?
掌握创建高质量建筑渲染和任何 3D 渲染的艺术是一项复杂且需要技巧的工作,通常需要多年的经验和实践。实现逼真的结果需要仔细考虑众多因素,并避免可能导致缺乏真实性的假渲染效果的常见错误。 避免常见错误 - 提升渲染游戏的技巧 在追求创建真正逼真的…...
![](https://www.ngui.cc/images/no-images.jpg)
fastadmin采坑之获取当前登录admin用户的信息
在controller层里想要获取当前登录admin用户的信息 print_r($this->auth->getUserInfo());但是有个问题 我在fa_admin表中添加了新的字段,这个方法获取不到新字段的数值,具体也没有去研究估计跟方法有关 然后我直接用模型去获取数据,简…...
![](https://img-blog.csdnimg.cn/59b4aa2214954a2493290a7cfb52995d.png)
【Spring AOP + 自定义注解 + 动态数据源 实现主从库切换读写分离】—— 案例实战
💧 S p r i n g A O P 主从数据源切换 读写分离 自定义注解案例实战! \color{#FF1493}{Spring AOP 主从数据源切换 读写分离 自定义注解 案例实战!} SpringAOP主从数据源切换读写分离自定义注解案例实战!💧 …...
![](https://img-blog.csdnimg.cn/fc650321b61141609d663721af752a84.png)
【LeetCode每日一题合集】2023.7.24-2023.7.30
文章目录 771. 宝石与石头代码1——暴力代码2——位运算集合⭐(英文字母的long集合表示) 2208. 将数组和减半的最少操作次数(贪心 优先队列)2569. 更新数组后处理求和查询⭐⭐⭐⭐⭐(线段树)TODO2500. 删除…...
![](https://img-blog.csdnimg.cn/a1d99cf7f4ca449aa36c83e7d17d9234.png)
《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(14)-Fiddler断点(breakpoints)实战,篡改或伪造数据
1.简介 上一篇主要就讲解和分享Fiddler断点的理论和操作,今天宏哥就用具体例子,将上一篇中的理论知识实践一下。而且在实际测试过程中,有时候需要修改请求或响应数据,或者直接模拟服务器响应,此时可以使用fiddler进行…...
![](https://img-blog.csdnimg.cn/a589dfb19edf42d98ab92428a30037c2.png)
ELK + Fliebeat + Kafka日志系统
参考: ELKFilebeatKafka分布式日志管理平台搭建_51CTO博客_elk 搭建 ELK 日志分析系统概述及部署(上)-阿里云开发者社区 ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。…...
![](https://img-blog.csdnimg.cn/9e3bb3c15cfd49569a884316737d1546.png)
Scaling Instruction-Finetuned Language Models
Paper name Scaling Instruction-Finetuned Language Models Paper Reading Note Paper URL: https://arxiv.org/pdf/2210.11416.pdf TL;DR 2022 年谷歌出的文章,对指令微调的影响因素进行分析,提出了一些提升指令微调效果的方案。与该文章一起出品…...
![](https://img-blog.csdnimg.cn/ea2a4f1a13494cf59bb56111af35dc73.png)
rust 闭包函数
函数有自己的类型,可以像使用基础类型一样使用函数,包括将函数保存在变量中、保存在 vec 中、声明在结构体成员字段中。闭包函数也是函数,也有自己的类型定义。不过,函数实际上是指针类型,在 rust 所有权中属于借用的关…...
![](https://img-blog.csdnimg.cn/37eb6d9d25d64caab1215f6924b5e154.png)
MySQL 实现分库和分表的备份 2023.7.29
1、分库备份 [rootlocalhost mysql-backup]# cat db_bak.sh #!/bin/bash k_userroot bak_password123456 bak_path/root/mysql-backup/ bak_cmd"-u$bak_user -p$bak_password" exc_db"Database|information_schema|mysql|performance_schema|sys" dbname…...
![](https://www.ngui.cc/images/no-images.jpg)
20230728----重返学习-跨域-模块化-webpack初步
day-122-one-hundred-and-twenty-two-20230728-跨域-模块化-webpack初步 跨域 跨域 为什么要跨域? 浏览器为了安全,不能让我们的html文件可以随意引用别的服务器中的文件,只允许我们的html或js文件中,请求我们自己服务器。这个…...
![](/images/no-images.jpg)
网站开发与维护专业前景/西安网站关键词优化费用
Java 7的主要变化Devoxx 大会结束在几天前结束了,一位与会者对此次大会的重要内容进行了总结,他提到Java 7的主要变化如下:1.对collections的支持Java代码List list new ArrayList();list.add("item");String item list.get(0);S…...
![](/images/no-images.jpg)
昆明网站建设推荐力鼎科技/地推平台
try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错误。 1. try/catch语句 catch语句用来捕获try代码块中的错误,并执行自定义的语句来处理它。 语法: try{//在这里运行代码} catch(err){//在这里处理错误} <!DOCTYPE html>…...
![](/images/no-images.jpg)
网站开发课程设计/推广引流软件
GridView嵌套GridView,对子GridView及父GridView级联删除的问题 http://blog.csdn.net/amandag/archive/2007/05/31/1633395.aspx 利用GridView显示主细表并添加删除、打开、关闭功能(续) http://dotnet.aspx.cc/article/f73eeaa9-2bdc-47fd-afd2-59f2fa…...
商务网站开发方式/网页设计用什么软件
GPU:Graphics Processing Unit,图像处理器,GPU上有成千上万核,这些核并行运行;CPU:Central Processing Unit,中央处理器,CPU通常有单核、双核、四核和八核,但这些核只能串…...
![](https://img-blog.csdnimg.cn/img_convert/aec8b095418ac0e804c9909be215ad8e.png)
做网站需要注意的/成人馆店精准引流怎么推广
1 引言高阶组件( higher-order component ,HOC )是 React 中复用组件逻辑的一种进阶技巧。它本身并不是 React 的 API,而是一种 React 组件的设计理念,众多的 React 库已经证明了它的价值,例如耳熟能详的 r…...
![](https://img2018.cnblogs.com/blog/1491217/201903/1491217-20190320234635696-1867311168.png)
网站制作公司 沈阳/昆明排名优化
admin是django提供的基于web的管理数据库的工具,它是django.contrib 的一部分,可以在项目的settings.py中的INSTALLED_APPS看到。 一、admin管理工具的使用方法如下: 1.在models.py中创建模型 class Students(models.Model):snamemodels.Char…...