软工导论知识框架(二)结构化的需求分析

本章节涉及很多重要图表的制作,如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.定义数据的方法:对数据自顶向下分解,由数据元素组成数据的方式来定义。

  • 顺序: 以确定次序连接两个或多个数据元素;
  • 选择: 从两个或多个可能元素中选一个;
  • 重复: 把指定数据元素重复零次或多次;
  • 可选: 一个数据元素可有可无的。

如下是一个例题 :

 

 

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

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

相关文章

Node.js学习笔记-02

三、node的异步I/O 四、异步编程 1、函数式编程 高阶函数 函数可以作为参数或者返回值。 偏函数用法 偏函数用法是指创建一个调用另外一个部分——参数或变量已经预置的函数——的函数的用法。 举个例子:在JavaScrip中进行类型判断时,我们通常会进…

企业网络安全与数据保护合规建设 ——从合规运营到香港上市

序言 《企业网络安全与数据保护合规建设 ——从合规运营到香港上市(一)》梳理了我国网络安全与数据保护领域近期主要立法情况,本文将着重分析拟赴港上市企业运营阶段的数据合规要点以期为拟赴港上市的相关企业提供有益的参考。 二 企业运营…

PatchMatchNet运行eth3d数据集重建 实操教程(图文并茂、超详细)、bash eval.sh脚本文件解释说明

文章目录 1 准备工作1.1 下载源码1.2 测试集下载1.2 配置环境2 eth3d 数据集 重建演示2.1 重建效果查看3 补充 测试列表定义4 Meshlab查看三维点云时 ,使用技巧总结1 Meshlab查看三维点云时 ,换背景颜色2 Meshlab查看三维点云时,点云颜色很暗淡,怎么调亮3 Meshlab和CloudCo…

Jenkins 还可以支持钉钉消息通知?一个插件带你搞定!

Jenkins 作为最流行的开源持续集成平台,其强大的拓展功能一直备受测试人员及开发人员的青睐。大家都知道我们可以在 Jenkins 中安装 Email 插件支持构建之后通过邮件将结果及时通知到相关人员。 但其实 Jenkins 还可以支持钉钉消息通知,其主要通过 Ding…

Log4j源码解析

Log4j源码解析 主要流程 Logger logger Logger.getLogger(Main.class); 1、通过Logger.getLogger(Class clazz) 或 Logger.getLogger(String name)进入。 2、加载LogManager进jvm, 执行静态代码块执行初始化, 创建出RepositorySelector实例及LoggerRepository实例(Hierarchy…

vue3响应式最大的特点

趋于面向对象编程,和Java很像,以前v-model可以使用,但是现在不是了。 let postsreactive({attrs:[],name:列表}) 任何东西,都先扔到一个对象里面 页面使用也不需要posts.name这样一堆点,直接{{name}}可以使用一个很方便的方法甩…

如何提高自动化测试覆盖率

实施自动化测试最重要的就是要保证其可用性,而不少同学写了不少自动化测试用例,但感觉到其可用性不高。究其原因,不是自动化测试本身的问题,是实施自动化测试的时候没有考虑周全。 第一,不合事宜地引入自动化测试 在公…

C语言实现扫雷

今天用C语言写一个扫雷的代码 扫雷其实和我们之前写的三子棋有点相似,首先是打印菜单,进行选择 我们还是像之前一样有三个文件,一个是game.h game.c test.c test.c实现我们的扫雷逻辑 gam.c实现我们的游戏需要的函数 game.h来声明 那么我们首…

轻量级Web报表工具ActiveReportsJS全新发布v4.0,支持集成更多前端框架!

ActiveReportsJS 是一款基于 JavaScript 和 HTML5 的轻量级Web报表工具,采用拖拽式设计模式,不需任何服务器和组件支持,即可在 Mac、Linux 和 Windows 操作系统中,设计多种类型的报表。ActiveReportsJS 同时提供跨平台报表设计、纯…

将Python远控隐藏在文档图片中的行动分析

1、概述 ** **近日,安天CERT通过网络安全监测发现了一起恶意文档释放Python编写的远控木马事件。通过文档内容中涉及的组织信息和其中攻击者设置的诱导提示,安天CERT判断该事件是一起针对阿塞拜疆共和国国家石油公司进行的定向攻击活动。此次事件中&…

godot引擎c++源码深度解析系列二

记录每次研究源码的突破,今天已经将打字练习的功能完成了一个基本模型,先来看下运行效果。 godot源码增加打字练习的demo 这个里面需要研究以下c的控件页面的开发和熟悉,毕竟好久没有使用c了,先来看以下代码吧。 //第一排 显示文本…

13、ffmpeg使用nvidia显卡对OAK深度相机进行解码和编码

基本思想:简单使用nvidia的硬件解码进行oak相机的编码和解码学习 一、在本机rtx3060配置好显卡驱动和cuda之后进行下面操作50、ubuntu18.04&20.04CUDA11.1cudnn11.3TensorRT7.2/8.6Deepsteam5.1vulkan环境搭建和YOLO5部署_ubuntu18.04安装vulkan_sxj731533730的…

README.md 文档使用 treer 生成树形项目结构

一、前言 前后端编写 README.md 文档的时候,常常需要描写项目的结构,使用 tree 命令生成的目录又不能忽略某个目录,不方便。后来我找到了可以忽略某些目录的 treer命令 ,特此记录一下: 二、使用 treer 生成项目结构 全局安装tr…

Redis 基础知识和核心概念解析:探索 Redis 的数据结构与存储方式

🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~&#x1f33…

攻略|如何成为Moonbeam收集人

Moonbeam与其他PoS机制EVM公链类似,仰赖节点的运营保持网络的顺利运行以及安全。Moonbeam作为同时兼容Substrate和以太坊API的开发平台,同以太坊主网相比仍存在差异。 在Moonbeam的生态中,节点运营者被称为收集人,负责收集来自Mo…

SQLite的应用

2023年7月27日 据我所知,使用了SQLite数据库的软件有: 火狐浏览器Joplin 火狐浏览器 火狐浏览器用SQLite数据库来存储历史记录、访问过的网址等。 Joplin Joplin是GitHub上一个很火的开源记事本软件, Joplin用SQLite来存储笔记里面的文…

Python-Go python模块与包 - GO问题 - GO容量测试

目录 go 模块与包复习(Init函数 - go mod) init函数有什么用?init函数是什么? go.mod文件是什么?有什么作用? python的模块与包 python中包的分类 1、内置模块:不需要安装,直接…

前端工作中常用 CSS 知识点整理

1.1文字溢出省略号 文字单行溢出: overflow: hidden; // 溢出隐藏 text-overflow: ellipsis; // 溢出用省略号显示 white-space: nowrap; // 规定段落中的文本不进行换行 多行文字溢出: overflow: hidden; // 溢出隐藏 text-overflow: …

C# 反汇编 dnSpy

反汇编工具&#xff1a;dnSpy 常见问题&#xff1a; 1、遇到反汇编结果为<PrivateImplementationDetails>&#xff0c;报错不能有尖括号。解决方法&#xff0c;在dnSpy中复制出这个类&#xff0c;就可以去掉尖括号去使用了。 2、componentResourceManager&#xff0c;…

Java电子招投标采购系统源码-适合于招标代理、政府采购、企业采购

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…