[软件工程]第三章 结构化方法————(2020.6.11学习笔记)

2023-05-16

目录

1,第一节 结构化需求分析
2,第二节 结构化设计

第一节 结构化需求分析

  1. 需求分析面临的挑战
    (1) 问题空间理解
    (2) 人与人之间的通信,“有效沟通”
    (3) 需求的变化性
  2. 结构化分析中的基本术语及表示方法
    (1) 数据流
    (2) 加工
    (3) 数据存储
    (4) 数据源和数据潭
  3. 数据流图DFD图 ★
    用于建立系统功能模型。
    是一种描述数据变换的图形化工具,其中包含的元素可以是数据流、数据存储、加工、数据源和数据潭等。
  4. 建模过程(绘制流程图的过程)
    自顶向下、功能分解
    (1) 建立系统环境图
    (2) 0层图:从0层图开始对流程图中的要素编号
    (3) 1层图
    (4) ……
  5. 数据字典
    定义数据流程图中所有数据流和数据存储的数据结构。
    顺序结构:+
    选择结构:|
    重复结构:{ }
    子界:m…n
  6. 加工的描述 ★
    (1) 判定表
    判断表(Decision Table)也称为决策表,是一个二维表,它说明了每一种条件组合所产生的结果。
    该表分为四个象限(quadrants)。
    a) 左上限代表所有的条件
    b) 左下限代表可能的结果
    c) 右上限代表每一种条件的取值(用Y和N来表示)
    d) 右下限用X表示所对应的条件组合所产生的结果
  7. 需求验证
    (1) 验证每一个需求满足5个性质
    (2) 验证需求规格说明书满足4个性质

第二节 结构化设计

分为总体设计和详细设计

  1. 总体设计的任务
    把系统的功能需求分配到一个特定的软件体系结构中。
  2. 表达软件体系结构的工具
    (1)模块结构图
    (2)层次图
    (3)HIPO图
  3. 模块结构图 ★
    结构图(Structure Chart)是对软件总体结构的一种图形描述,它显示了软件的层次结构、组织和通讯。也就是说,在结构图中,显示了软件是由哪些模块组成的,这些模块按照什么样的层次结构组织在一起以及模块之间通过什么接口联系在一起。
    结构图也称之为控制结构图、模块结构图或系统结构图。

(1) 模块符号
(2) 模块调用关系
(3) 模块间的数据传递
(4) 模块间的控制信息传递
(5) 循环调用结构
(6) 选择调用结构
(7) 数据存储
4. 层次图
层次图中一个矩形框代表一个模块,框间的连线表示调用关系(位于上方的矩形框所代表的模块调用位于下方的矩形框所代表的模块)。

  1. HIPO图
    HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。为了使HIPO图具有可追踪性,在H图(即层次图)里除了顶层的方框之外,每个方框都加了编号。
    H图+IPO图

  2. 总体设计步骤
    将DFD图映射为设计层面的模块及模块调用。
    (1) 变换流(Transform Flow)。基于变换流的数据流程图是一个线性的顺序结构,由输入臂、输出臂和变换中心三部分组成。其中变换中心使系统数据发生本质的变化,输入臂将物理输入变换成逻辑输入,而输出臂则将逻辑输出变换成物理输出。

(2) 事务流(Transaction Flow)。事务流的数据流程图中有一个事务处理中心,它将输入分为许多相互平行的加工路径,然后根据输入的属性,选择某一加工路径。如下图所示。
业务中心完成以下任务:
⑴接收事务(即输入数据);
⑵分析每个事务并确定它的类型;
⑶根据事务的类型选取一条活动通路。

总结:任何处理都可以划分为两种转换类型之一:以转换为中心的分解和以业务为中心结构的分解。
7. 模块
执行一个特殊任务的一个过程以及相关的数据结构。模块通常由两部分组成:模块接口和模块体。
8. 模块化
“分而治之”和“抽象”。
把一个待开发的软件分解成若干个简单的、具有高内聚低耦合的模块,这一过程称为模块化。
模块化是系统设计基本原理/原则之一。

  1. 内聚(Cohesion)
    是指一个模块内部个成分之间相互关联程度的度量。也就是说,凝聚是对模块内各处理动作组合强度的一种度量。很显然,一个模块的内聚越大越好。
    (1)偶然凝聚 可维护性最差
    (2)逻辑凝聚
    (3) 时间凝聚
    (4)过程内聚
    (5)通信内聚
    (6)顺序凝聚
    (7)功能凝聚 可维护性最好
  2. 模块耦合
    耦合(coupling)是对两个模块之间联接程度的一种度量。模块间的依赖程度越大,则其耦合程度也就越大;反之,模块间的依赖程度越小,则其耦合程度也就越小。
    很显然,为了使软件具有较好的可维护性和可修改性,模块间的关联程度即耦合程度应越小越好。因为耦合程度越小,表明模块间的独立程度越大,这样在修改一个模块时,对其它模块的影响程度就越小,从而使模块的修改工作局限于一个最小范围之内。
    (1) 内容耦合
    (2) 公共耦合
    (3) 数据耦合
    (4) 控制耦合
    (5) 标记耦合
    原则是:尽量用数据耦合,少用控制耦合,限制公共耦合的范围,避免使用内容耦合。
  3. 启发式规则
    高内聚、低耦合。
    (1) 改进软件结构,提高软件独立性。模块分解
    (2) 模块规模适中
    (3) 力求深度、宽度、扇出、扇入适中。
    深度:表示其控制的层数。
    宽度:同一层次上模块总数的最大值。
    扇出:一个模块直接控制的下级模块的数目。
    扇入:有多少个上级模块直接调用它。
    原则:顶层模块扇出比较大,中间层模块扇出较小,底层模块具有较大的扇入。
    (4) 尽量使模块的作用域在其控制域内。
    模块的控制域:这个模块本身以及所有直接或间接从属它的模块的集合。
    模块的作用域:受该模块内一个判断所影响的所有模块的集合。
    (5) 尽力降低模块接口的复杂度
    (6) 力求模块功能可以预测
  4. 详细设计
    具体描述模块结构图中的每一模块,即给出实现模块功能的实施机制,包括一组例程和数据结构。
  5. 结构化程序设计方法
    一种基于结构的编程方法,即采用顺序结构、选择结构和重复结构进行编程,其中每一结构只允许一个入口和一个出口。

三种基本的控制结构:
(a) 顺序结构,先执行A再执行B;
(b) IF-THEN-ELSE型选择(分支)结构;
©DO-WHILE型循环结构

  1. 详细设计工具
    (1) 程序流程图
    程序流程图:程序流程图又称为程序框图,它是历史最悠久使用最广泛的描述过程设计的方法,然而它也是用得最混乱的一种方法。
    (2) 盒图(N-S图)
    出于要有一种不允许违背结构程序设计精神的图形工具的考虑,Nassi和Shneiderman提出了盒图,又称为N-S图。

(a) 顺序;(b) IF-THEN-ELSE型分支;© CASE型多分支;
(d) 循环;(e) 调用子程序A
(3) PAD图
PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1973年由日本日立公司发明以后,已得到一定程度的推广。它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。下图给出PAD图的基本符号。

(4) 类程序设计语言PDL
PDL也称为伪码,它是用正文形式表示数据和处理过程的设计工具。
PDL具有严格的关键字外部语法,用于定义控制结构和数据结构;另一方面,PDL表示实际操作和条件的内部语法通常又是灵活自由的,以便可以适应各种工程项目的需要。因此,一般说来PDL是一种“混杂”语言,它使用一种语言(通常是某种自然语言)的词汇,同时却使用另一种语言(某种结构化的程序设计语言)的语法。
可以作为注释工具直接插在源程序中间。

  1. 设计规约
    完整准确地描述满足需求规约所要求的所有功能模块,以及伴随功能模块而出现的非功能机制。
    设计规约包括概要设计规约和详细设计规约。
    (1) 概要设计规约
    指明高层软件体系结构。
    系统环境
    软件模块的结构
    模块描述
    文件结构和全局数据文件的逻辑结构
    测试需求
    (2) 详细设计规约
    各处理过程的算法
    算法所涉及的全部数据结构的描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[软件工程]第三章 结构化方法————(2020.6.11学习笔记) 的相关文章

  • c++ 两数之和

    c 43 43 两数之和 题目 xff1a 给定一个整数数组 nums 和一个目标值 target xff0c 请你在该数组中找出和为目标值的那两个整数 xff0c 并返回他们的数组下标 你可以假设每种输入只会对应一个答案 但是 xff0c
  • Kubernetes学习笔记

    文章目录 基本概念 xff08 图解 xff09 问题汇总小坑记录node节点加入后 xff0c 网络插件问题connect connection refused 基本概念 xff08 图解 xff09 问题汇总 非常全的一篇 小坑记录 n
  • 解决方法:ChatGPT-OpenAI‘s services are not available in your country

    简单方法 xff1a 代理设置成全局代理 xff0c 并且使用可以访问OpenAI的国家节点 xff01 在浏览器中地址栏输入以下代码后回车 javascript window localStorage removeItem Object
  • Nacos2.2.0适配Oracle12C-建表ddl语句

    span class token keyword create span span class token keyword table span CONFIG INFO span class token punctuation span I
  • Docker快速入门

    1 基本概念 用途 核心思想 docker应用广泛 docker是一个用来装程序及其环境的容器 xff0c 属于linux容器的封装 xff0c 提供简单易用的容器使用接口 解决了环境配置的难题 xff0c 每台电脑环境都不一样 xff0c
  • Kettle-数据同步、将表数据导入到另一张表、不同数据库表数据导入

    Kettle 数据同步 将表数据导入到另一张表 不同数据库表数据导入 选择转换选择表输入双击表输入组件 xff0c 打开编辑框 xff0c 双击数据连接新建按钮添加对应数据库驱动输入源数据查询sql新增输出端表输出 xff08 全量新增 x
  • Oracle-ORA-01461:can bind a LONG value only for insert into a LONG column解决办法之二!

    ORA 01461解决办法 问题场景1 xff1a sql中使用from dual分析解决 场景2 xff1a 字符串超长解决 问题 在客户现场执行写入逻辑时遇到异常 ORA 01461 xff1a can bind a LONG valu
  • Kettle-excel数据同步

    Kettle excel数据同步 Excel输入组件编辑文件选择选择工作表内容字段预览记录 Excel输入组件 编辑 文件选择 选择工作表 内容 字段 若String类型不设置长度 xff08 或设置为 1 xff09 xff0c 则默认长
  • oracle中数据类型number(9,2)的意思

    9表示这个数据的有效位数 xff08 精度 xff09 xff0c 2表示两个小数位 xff08 刻度 xff09 例如 xff1a 1234567 89
  • mybatis-忽略实体对象的某个属性

    方法一 xff1a 在需要忽略的属性上增加 64 transient注解 javax persistence Transient transient是类型修饰符 xff0c 只能用来修饰字段 在对象序列化过程中 xff0c 被transie
  • Elasticsearch -删除索引(index)

    删除单个 DELETE index curl XDELETE 39 http 192 169 1 666 9200 index 你也可以这样删除多个索引 xff1a DELETE index one index two curl XDELE
  • STM32F103ZET6程序移植为C8T6+C8T6下载程序flash timeout的解决方案

    文章目录 一 程序移植 xff1a 程序移植还是蛮简单的二 程序下载 会出现问题 xff08 一 xff09 BOOT0和BOOT1 xff08 二 xff09 程序下载1 代码通用2 状况不断3 解决办法 xff08 三 xff09 ST
  • Android-Studio-Chipmunk版本解决gradle报错connection-refuse的问题

    Android Studio Chipmunk版本解决gradle报错connection refuse的问题 文章目录 Android Studio Chipmunk版本解决gradle报错connection refuse的问题一 问题
  • MapReduce编程-join算法实现

    假设有订单表t order和t product两张数据库表 xff0c 现在需要进行关联查询 这样的sql语句很容易写 select a span class hljs preprocessor id span a span class h
  • 《将博客搬至CSDN》

    将博客搬至CSDN
  • 3D打印Gcode文件命令详解

    目录 3D打印Gcode文件命令详解Gcode文件作用 常用命令 命令 注释G28命令 复位G90和G91命令 设置定位模式M82和M83命令 设定挤丝模式G1命令 运动命令G92命令 设置当前位置M104和M109命令 加热喷嘴M140和
  • 机器学习系统安全

    Abstract 机器学习 已经成为当前计算机领域研究和应用最广泛的技术之一 xff0c 在图像处理 自然语言处理 网络安全等领域被广泛应用 然而 xff0c 一些机器学习算法和训练数据本身还面临着诸多安全威胁 xff0c 进而影响到基于机
  • 汇编语言测试

    汇编测试
  • 汇编语言-DosBox环境搭建

    汇编语言 王爽 问题 xff1a debug 不是内部或外部命令 原因 xff1a 现在windows下不集成了 xff0c 我们可以利用DosBox工具帮助我们学习汇编 汇编语言环境搭建 参考帖子 xff1a https www cnbl
  • 矩阵快速幂详解

    矩阵快速幂 在讲矩阵快速幂之前 xff0c 先引入整数快速幂的概念 整数快速幂 为了引出矩阵快速幂 xff0c 以及说明快速幂算法的好处 xff0c 我们可以先求整数的幂 如果现在要算X 8 则X X X X X X X X X 按照寻常思

随机推荐

  • ubuntu 20.04安装ROS noetic添加秘钥失败 gpg: no valid OpenPGP data found.

    在安装ROS noetic时 xff0c 可能会遇到以下错误 当运行以下命令时 curl s https raw githubusercontent com ros rosdistro master ros asc sudo apt key
  • 【CentOS7 Samba服务器配置】

    第四章 Samba服务器配置 文章目录 第四章 Samba服务器配置前言一 Samba是什么 xff1f 二 使用步骤1 安装软件包2 配置Samba服务器3 创建文件夹4 添加 Samba 用户5 开启服务6 测试 总结 前言 本章学习S
  • ArgumentError: Could not parse rfc1738 URL from string

    使用flask sqlacodegen遇到如上问题时 xff0c 引号要用双引号 xff0c 并且要mysql xff08 如果你使用的是其他的数据库这里应该填你使用的数据库 xff09 注意 注意 注意要加上数据库驱动 xff0c 向下面
  • 多任务学习为什么有效?

    前言 多任务学习 xff08 Multi task Learning MTL xff09 在机器学习领域应用广泛 xff0c 比如自然语言处理和计算机视觉等领域 xff0c 这也侧面反映了 MTL 的有效性 本文将从 MTL 的概念 使用动
  • 简单绕过chrome(谷歌游览器) 查看已保存的密码

    利用场景 xff1a 同事或朋友外出有事 xff0c 电脑未锁屏离开座位 可以利用这一间隙 xff0c 查看Ta在Chrome浏览器上保存的账号密码 查看逻辑 xff1a 当我们要查看Chrome浏览器上保存的密码时 xff0c 点击显示
  • 根据数据库表生成 model 类

    根据数据库表生成 model 类 创建一个Django项目 code django admin startproject xxxx code 修改setting文件 xff0c 在setting里面设置你要连接的数据库类型和连接名称 xff
  • STM32基础(4)使用SysTick滴答定时器实验精准延时

    原理 SysTick 定时器也叫 SysTick 滴答定时器 xff0c 它是 Cortex M3 内核的一个外设 xff0c 被嵌入在 NVIC 中 它是一个 24 位向下递减的定时器 xff0c 每计数一次所需时间为 1 SYSTICK
  • 在px4,gazebo环境中添加激光雷达,双目相机和下视摄像头

    在搭建好px4的仿真环境后 xff0c gazebo中仅为一架裸机 xff0c 不含其他传感器 本文将在该环境下把激光雷达 xff0c 双目相机 xff0c 下视摄像头集成到飞机上 xff0c 方便后续的算法测试 修改仿真启动文件 找到 F
  • Oauth2.0的四种模式

    1 授权码模式 xff08 1 xff09 资源拥有者打开客户端 xff0c 客户端要求资源拥有者给予授权 xff0c 它将浏览器被重定向到授权服务器 xff0c 重定向时会 附加客户端的身份信息 如 xff1a uaa oauth aut
  • nvidia-smi报错:NVIDIA-SMI has failed because it couldn‘t communicate with the NVIDIA driver

    输入nvidia smi显示 NVIDIA SMI has failed because it couldn t communicate with the NVIDIA driver 但是torch cuda is available 还能
  • RunnerGo开源版的安装教程(Windows)

    文章目录 一 启动Hyper V服务二 安装docker三 准备 docker 和 docker compose 环境四 cd runnergo 进入到目录五 配置文件 config env 修改 默认基本可以不用改六 修改应用暴露的端口号
  • Docker Desktop requires a newer WSL kernel version.

    问题描述 xff1a Docker Desktop requires a newer WSL kernel version 问题截图 xff1a 问题原因 xff1a WSL不是最新版 解决方案 xff1a 适用于 Linux 的 Wind
  • 傅里叶变换(一)——认识傅里叶变换

    注 xff1a 本文为博主参考书籍和他人文章并加上自己的理解所编 xff0c 作为学习笔记使用并将其分享出去供大家学习 若涉及到引用您的文章内容请评论区告知 xff01 如有错误欢迎指正 xff01 参考文章 xff1a https zhu
  • 解决笔记本装linux后触摸板无法用的问题

    困扰好久 xff0c 好像没多少人遇到类似的问题 xff1f 仅把我的解决办法分享出来提供一个思路 那就是 把内核版本升级到4 17以上 至于更换内核教程 xff0c 参考这里安装和使用新的内核 要比教程里多下载一个 linux modul
  • 快速幂和矩阵快速幂

    快速幂 快速幂是数论中最简单的几种算法之一 xff0c 顾名思义 xff0c 就是快速计算某个数的多少次幂 相较于传统循环pow的计算方法 xff0c 快速幂的复杂度为 O l o g 2
  • ucosii中消息队列、消息邮箱、信号量的区别

    1 用信号量进行行为同步时 xff0c 只能提供同步的时刻信息 xff0c 不能提供内容信息 若被控制方要求得到控制方的内容信息时 xff0c 可以使用消息邮箱或消息队列 2 但由于消息邮箱里只能存放一条消息 xff0c 所以使用消息邮箱进
  • 项目时间管理的几种方法

    随着项目活动分解的深入和细化 xff0c 工作分解结构 WBS 可能会需要修改 xff0c 这也会影响项目的其他部分 例如成本估算 xff0c 在更详尽地考虑了活动后 xff0c 成本可能会有所增加 xff0c 因此完成活动定义后 xff0
  • 【内网学习笔记】25、Exchange 邮件服务器

    1 Exchange 的基本操作 在 Exchange 服务器上的 PowerShell 里进行以下操作 将 Exchange 管理单元添加到当前会话中 add pssnapin microsoft exchange 查看邮件数据库 Get
  • cuda.tensor转为numpy, 以及numpy与tensor互相转换

    1 cuda tensor转为numpy 解决 TypeError can 39 t convert cuda 0 device type tensor to numpy Use Tensor cpu to copy the tensor
  • [软件工程]第三章 结构化方法————(2020.6.11学习笔记)

    目录 1 xff0c 第一节 结构化需求分析 2 xff0c 第二节 结构化设计 第一节 结构化需求分析 需求分析面临的挑战 xff08 1 xff09 问题空间理解 xff08 2 xff09 人与人之间的通信 xff0c 有效沟通 xf