当前位置: 首页 > article >正文

软考笔记6——结构化开发方法

第六章节——结构化开发方法

结构化开发方法

  • 第六章节——结构化开发方法
  • 一、系统分析与设计概述
    • 1. 系统分析概述
    • 2. 系统设计的基本原理
    • 3. 系统总体结构设计
  • 二、结构化分析方法
    • 1. 结构化分析方法概述
    • 2. 数据流图(DFD)
    • 3. 数据字典
  • 三、结构化设计方法(了解)
  • 四、WebApp分析与设计(了解)
  • 五、用户界面设计(了解)

一、系统分析与设计概述

1. 系统分析概述

结构化方法包括结构化分析、结构化设计、结构化程序设计,它是一种面向数据流的开发方法。结构化方法总的指导思想自顶向下、逐层分解,它的基本原则是功能的分解与抽象

(1) 系统分析目的和任务
系统分析的目的和任务是形成书面材料:系统分析包括,即系统方案说明书
系统分析的主要步骤:

  1. 对当前系统进行详细的检查,收集数据。
  2. 建立当前系统的逻辑模型。
  3. 对现状进行分析,提出改进意见和新系统应达到的目标
  4. 建立新系统的逻辑模型
  5. 编写系统方案说明书

(2) 系统分析的主要步骤
系统开发的目的是把现有系统的物理模型转化为目标系统的物理模型。系统分析阶段的结构是得到目标系统的逻辑模型。逻辑模型反映了系统的功能和性质,而物理模型反映的是系统的某一种具体的实现方案。

在这里插入图片描述

2. 系统设计的基本原理

(1) 抽象
抽象·是·一种重要的工具,用来将复杂的现场简化到可以分析、实验或者可以理解的程度。

(2) 模块化
模块化是指将一个待开发的软件分解成若干个小的简单部分–模块,每个模块可以独立地开发、测试,最后组装成完整的程序。

(3) 信息隐蔽
信息隐蔽是将每个程序的成分隐藏或封装在一个单一的设计模块种,在定义每一个模块时尽可能少地显露其内部的处理,对提高软件的可修改性、可测试性和可移植性都有着重要的作用。

(4) 模块独立
模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系简单

衡量模块独立程度的标准有两个:耦合性和内聚性(高内聚,低耦合)

  • 耦合模块之间的相对独立(互相连接的紧密程度)的度量
耦合类型描述
无直接耦合两模块无直接关系,分属不同模块的控制与调用,独立性最高
数据耦合模块之间通过值传递完成调用关系
标记耦合模块之间传递的是数据结构
控制耦合模块之间传递的是控制变量
外部耦合模块之间通过外部环境联结
公共耦合访问同一个公共数据环境(如全局数据结构,共享通信,公共内存)
内容耦合直接使用另一个模块的内部数据,或者非正常入口转入另一个模块
  • 内聚 是对一个模块内部各个元素彼此结合的紧密程度的度量
内聚类型描述
功能内聚完成单一功能,各部分协同工作,缺一不可,是最强的内聚
顺序内聚模块内的处理元素都密切相关且按顺序执行
通信内聚模块内的所有处理元素集中在一个数据结构的区域
过程内聚模块内按指定的过程完成多个任务
时间内聚模块内的组合动作需要同时执行
逻辑内聚模块内通过参数确定完成哪一个逻辑上相似的功能
偶然内聚也称巧合内聚,模块内的处理元素之间没有任何联系,是最弱的内聚

3. 系统总体结构设计

(1) 系统结构设计原则
①分解一协调②自顶向下③信息隐蔽、抽象④一致性原则⑤明确性原则⑥模块间松耦合、模块内高内聚⑦模块的扇入系数(一个模块直接上级模块的个数)和扇出系数(一个模块所拥有的直属下级模块的个数)要合理⑧模块规模适当。

(2) 子系统划分
子系统划分的原则: ①子系统相对独立②子系统间的依赖小③数据冗余小④考虑扩展性⑤便于系统分析阶段实现⑥考虑到各资源的利用情况。
子系统结构设计: ①各个子系统划分成多个模块②子系统、模块之前的数据及调用关系③评价并改进模块结构的质量④从数据流图导出模块结构图。

(3) 系统模块结构设计

  1. 模块四要素:输入输出、处理功能、内部数据、程序代码
  2. 模块结构图。

二、结构化分析方法

1. 结构化分析方法概述

结构化分析与设计方法是一种面向数据流的传统软件开发方法,它以数据流为中心构建软件的分析模型和设计模型。

结构化方法采用自顶向下逐层分解的思想进行分析建模。自顶向下逐层分解充分体现了分解和抽象的原则。

2. 数据流图(DFD)

(1)数据流图中的基本图形元素

在这里插入图片描述
数据流图中的基本图形元素包括数据流、加工、数据存储和外部实体

  • 数据流:数据的流向。在DFD中,数据流的流向可以有以下几种:从一个加工流向另一个加工;从加工流向数据存储(写);从数据存储流向加工(读);从外部实体流向加工(输入);从加工流向外部实体(输出)。数据流必须与加工有关。除了流向数据存储或从数据存储流出的数据流不必命名外,每个数据流都必须有一个明确的名字。
  • 加工:描述了输入数据流到输出数据流之间的变换,也就是输入数据流经过什么处理后变成了输出数据流。一个加工可以有多个输入数据流和多个输出数据流,但至少有一个输入数据流和一个输出数据流。“黑洞”:加工有输入但没输出。“奇迹”:加工没输入但有输出;“灰洞”:加工输入不足以产生输出。
  • 数据存储:用来存储数据。DFD中的数据存储在具体实现时可以用文件系统实现,也可以用数据库系统实现。数据存储的存储介质可以是磁盘、磁带或其他存储介质。
  • 外部实体:外部实体是指存在于软件系统之外的人员或组织,它指出系统所需数据的发源地和系统所产生的数据的归宿地。例如,对于一个考务处理系统而言,考生向系统提供报名单(输入数据流),所以考生是考务处理系统的一个数据发源地;而考务处理系统要将考试成绩的统计分析表(输出数据流)传递给考试中心,所以考试中心是该系统的一个数据归宿地。

(2)数据流图的层次结构
一个复杂的软件系统可能涉及上百个加工或数据流,太复杂,也不易理解。于是根据自贝问卜逐层分解的思想,将数据流图进行分层。

  • 顶层图
    顶层图也称上下文数据流图,只有一个加工,代表整个软件系统,该加工描述了软件系统与外界之间(外部实体)的数据流。
  • 0层图
    顶层图中的加工(即系统)经分解后的图称为o层图。

DFD的分层图
在这里插入图片描述

在这里插入图片描述

(3)分层数据流图的审查
一致性:父图与子图平衡、数据守恒、局部数据存储、输出不能与输入同名
父图与子图: 如果某图(记为A)中的某一个加工分解成一张子图(记为B),则称A是B的父图,B是A的子图。父图与子图平衡: 是指任何一张DFD子图边界上的输入/输出数据流必须与其父图中对应加工的输入/输出数据流保持一致。
数据守恒: 通常是指一个加工的所有输出数据流中的数据必须能从该加工的输入数据流中直接获得,或者能通过该加工的处理而产生。
局部数据存储: 一个数据存储应该画在哪些DFD中,不应该画在哪些DFD中。
完整性

  1. 黑洞:是指只有数据输入、没有数据输出的数据加工;
  2. 奇迹:是指没有数据输入只有数据输出的数据加工;
  3. 灰洞:是指输入不足以产生输出的数据加工。

3. 数据字典

数据字典就是为数据流图中的每个数据流、文件、加工,以及组成数据流或文件的数据项做出说明。
(1) 数据字典的内容
数据字典的4类条目:数据流、数据项、数据存储、基本加工。

(2) 加工逻辑描述(加工规格说明)
在数据流图的分解中,位于层次树最低层的加工也称为基本加工或原子加工,每一个基本加工都需要进一步说明,这称为加工规格说明。
在编写基本加工的规格说明时,主要目的是表达“做什么”而不是“怎么做”。

加工规格说明应满足以下要求:

  1. 对数据流图的每一个基本加工,必须有一个加工规格说明
  2. 加工规格说明必须描述基本加工如何把输入数据沉尖换为输出数掂沉的加上戏则加上风则的说明有三种方式:结构化语言、判定表、判定树)。
  3. 加工规格说明必须描述实现加工的策略而不是实现加工的细节
  4. 加工规格说明中包含的信息应是充足的,完备的,有用的,没有重复的多余信息。
    常用的加工逻辑描述方法(加工规格说明)有结构化语言、判定表(决策表)和判定树(决策树) 三种。
  • 结构化语言
    结构化语言(如结构化英语)是一种介于自然语言和形式化语言之间的半形式化语言,是自然语言的一个受限子集。
  • 判定表
    判定表能够清楚地表示复杂的条件组合与应做的动作之间的对应关系。由4个部分组成:左上部分是条件定义,在此区域列出了各种可能的单个条件;
    左下部分是动作定义,在此区域列出了可能采取的单个动作;
    右上部分是条件项,在此区域列出了针对各种条件的每一组条件取值的组合;
    右下部分是动作项,这些动作项与条件项紧密相关,它指出了在条件项的各组取值的组合情况下应采取的动作。

在这里插入图片描述

  • 判定树
    也是用来表达加工逻辑的一种工具,有时侯它比决策表更直观。

三、结构化设计方法(了解)

(1) 结构化设计(SD)
结构化设计(SD)是一种面向数据流的设计方法,与SA衔接,基本思想是将系统设计成相对独立、功能单一的模块组成的结构。
(2) 结构化设计步骤
①建立初始结构图。②对结构图进行改进。③书写设计文档。④设计评审。
(3) 数据流图到软件体系结构的映射
结构化设计是将结构化分析的结果(数据流图)映射成软件的体系结构(结构图)。根据信息流的特点,可将数据流图分为变换型数据流图和事务型数据流图 ,其对应的映射分别称为变换分析和事务分析。
①信息流的类型:交换流(主加工))、事物流。②变换分析(从受抉沉型的DFD寸出住厅阳图)。

四、WebApp分析与设计(了解)

WebApp是基于Web的系统和应用。大多数WebApp采用敏捷开发过程模型进行开发
(1) WebAPP的特性
网络密集性、并发性、无法预知的负载量、性能、可用性、数据驱动。
(2) WebApp需求模型
内容模型、交互模型、功能模型、导航模型、配置模型。
(3) WebApp设计
架构设计、构件设计、内容设计、导航设计。

五、用户界面设计(了解)

(1) 用户界面设计的黄金原则
Theo Mandel关于界面设计的著作中提出了3条“黄金原则”

  1. 用户操纵控制:不强迫、交互灵活、中断和撤销、定制、内部隔离、直接交互
  2. 减少用户的记忆负担
  3. 保持界面一致

(2) 用户界面的分析与设计

  1. 分析和设计模型:设计模型、用户模型、系统感觉、系统映像。
  2. 分析和设计过程:界面分析及建模、界面设计、界面构造、界面确认。
  3. 设计问题:系统响应、帮助设施、错误信息处理、菜单和命令标记。

相关文章:

软考笔记6——结构化开发方法

第六章节——结构化开发方法 结构化开发方法 第六章节——结构化开发方法一、系统分析与设计概述1. 系统分析概述2. 系统设计的基本原理3. 系统总体结构设计 二、结构化分析方法1. 结构化分析方法概述2. 数据流图(DFD)3. 数据字典 三、结构化设计方法(了解&#xff…...

一种C# Winform的UI处理

效果 圆角 阴影 突出按钮 说明 这是一种另类的处理,不是多层窗口 也不是WPF 。这种方式的特点是比较简单,例如圆角、阴影、按钮等特别容易修改过。其实就是html css DirectXForm。 在VS中如下 圆角和阴影 然后编辑这个窗体的Html模板&#xff0c…...

java笔记02

运算符 1.隐式转换和强制转换 类型转换的分类 1.隐式转换: 取值范围小的数值 转换为 取值范围大的数值 2.强制转换: 取值范围大的数值 转换为 取值范围小的数值隐式转换的两种提升规则 取值范围小的,和取值范围大的进行运算,小的…...

为什么视频文件需要压缩?怎样压缩视频体积即小又清晰?

在日常生活中,无论是为了节省存储空间、便于分享还是提升上传速度,我们常常会遇到需要压缩视频的情况。本文将介绍为什么视频需要压缩,压缩视频的好处与坏处,并教你如何使用简鹿视频格式转换器轻松完成MP4视频文件的压缩。 为什么…...

Nginx — Nginx处理Web请求机制解析

一、Nginx请求默认页面资源 1、配置文件详解 修改端口号为8080并重启服务: 二、Nginx进程模型 1、nginx常用命令解析 master进程:主进程(只有一个) worker进程:工作进程(可以有多个,默认只有一…...

GPT Workspace体验

GPT Workspace是一款将强大的自然语言处理模型(如 ChatGPT 和 Gemini)集成到 Google Workspace 应用(如 Google Docs, Sheets, Slides, Gmail 和 Drive)中的工具或插件。它的目标是提升用户在日常办公中的效率和创造力。 以下是对…...

1.3 斐波那契数列模型:LeetCode 746. 使用最小花费爬楼梯

动态规划解最小花费爬楼梯问题:LeetCode 746. 使用最小花费爬楼梯 1. 题目链接 LeetCode 746. 使用最小花费爬楼梯 题目要求:给定一个整数数组 cost,其中 cost[i] 是从楼梯第 i 阶向上爬所需支付的费用。你可以从下标 0 或 1 的台阶开始爬&a…...

5.0 WPF的基础介绍1-Grid,Stack,button

WPF: Window Presentation Foundation. WPF与WinForms的对比如下: 特性WinFormsWPF技术基础基于传统的GDI(图形设备接口)基于DirectX,支持硬件加速的矢量渲染UI设计方式拖拽控件事件驱动代码(简单但局限)…...

Docker 端口映射原理

在 Docker 中,默认情况下容器无法直接与外部网络通信。 为了使外部网络能够访问容器内的服务,Docker 提供了端口映射功能,通过将宿主机的端口映射到容器内的端口,外部可以通过宿主机的IP和端口访问容器内的服务 以下通过动手演示…...

SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)

🔔 SDL/SDL2 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 效果 使用QWidget加载了SDL的窗口,渲染器使用硬件加速跑GPU的。支持Qt窗口缩放或显示隐藏均不影响SDL的图像刷新。   操作步骤 1、在创建C++空工程时加入SDL,引入头文件时需…...

算法每日一练 (23)

💢欢迎来到张翊尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 算法每日一练 (23)最大正方形题目描述解题思路解题代码…...

UE5学习笔记 FPS游戏制作28 显式玩家子弹数

文章目录 添加变量修改ShootOnce方法,设计时减少子弹,没有子弹不能开枪在UI上显示 添加变量 在Gun类中添加BulletNum和ClipSize两个参数 BulletNum是当前还有多少子弹,ClipSize是一个弹匣多少子弹 Rifle的ClipSzie设置为30,Laun…...

2025前端八股文终极指南:从高频考点到降维打击的面试突围战

2025前端八股文终极指南:从高频考点到降维打击的面试突围战 一、2025前端八股文核心考点重构 1.1 新型响应式系统三连问 Vue3信号式响应性: // 信号式响应性底层实现 const [count, setCount] createSignal(0) effect(() > {console.log("当…...

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》

《深入探索 Python 数据分析:用 Pandas 高效处理与可视化大型数据集》 引言:从零到分析高手 数据是当代社会最宝贵的资源,而数据分析技能是现代职业人不可或缺的一部分。在数据科学的领域中,Python 已成为当之无愧的“首选语言”,其强大的生态系统和简洁的语法让人如虎添…...

【实战】渗透测试下的文件操作

目录 Linux查找文件 Windows查找文件 查找可写目录 windows Linux 创建 Windows Linux 压缩 解压 远程解压文件 Linux查找文件 >find / -name index.php 查找木马文件 >find . -name *.php | xargs grep -n eval( >find . -name *.php | xargs grep -n ass…...

基于深度神经网络的图像防篡改检测方法研究

标题:基于深度神经网络的图像防篡改检测方法研究 内容:1.摘要 随着数字化时代的发展,图像篡改现象日益普遍,严重影响了图像信息的真实性和可靠性。本文旨在研究基于深度神经网络的图像防篡改检测方法,以有效识别被篡改的图像。通过收集大量真…...

vue如何实现前端控制动态路由

在 Vue.js 中,动态路由是一种根据不同用户权限或其他因素动态改变路由列表的功能。这种机制允许开发者根据后端提供的权限数据动态渲染前端路由,实现多用户权限系统,不同用户展示不同的导航菜单。 动态路由的配置 动态路由的配置涉及到前端…...

学成在线--day02

复习知识点 classPath: 类加载路径,也就是jvm找字节码文件的路径,我们自己写的类,以及依赖的包,都会放到这个路径下面用于加载。 跨域问题: 是由于浏览器的同源策略(协议,端口,ip…...

《构建有效的AI代理》学习笔记

原文链接:https://www.anthropic.com/engineering/building-effective-agents 《构建有效的AI代理》学习笔记 一、概述 核心结论 • 成功的AI代理系统往往基于简单、可组合的模式,而非复杂框架。 • 需在性能、成本与延迟之间权衡,仅在必要时增加复杂度…...

Go语言基础:数据类型

一、基础数据类型:Go语言的积木块 1.1 数字类型全家福 package mainimport ("fmt" )func main() {// 有符号整数类型var a int 42 // int 类型,自动选择32或64位var b int8 127 // int…...

数据处理专题(四)

目标 使用 Matplotlib 进行基本的数据可视化。‍ 学习内容 绘制折线图 绘制散点图 绘制柱状图‍ 代码示例 1. 导入必要的库 import matplotlib.pyplot as pltimport numpy as npimport pandas as pd 2. 创建示例数据集 # 创建示例数据集data { 月份: [1月, 2月, 3…...

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解

【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解 文章目录 【目标检测】【深度学习】【Pytorch版本】YOLOV1模型算法详解前言YOLOV1的模型结构YOLOV1模型的基本执行流程YOLOV1模型的网络参数YOLOV1模型的训练方式 YOLOV1的核心思想前向传播阶段网格单元(grid cell)…...

云钥科技多通道工业相机解决方案设计

项目应用场景分析与需求挑战 1. 应用场景 ‌目标领域‌:工业自动化检测(如精密零件尺寸测量、表面缺陷检测)、3D立体视觉(如物体建模、位姿识别)、动态运动追踪(如高速生产线监控)等。 ‌核心…...

从零到一:ESP32与豆包大模型的RTC连续对话实现指南

一、对话效果演示 ESP32与豆包大模型的RTC连续对话 二、ESP-ADF 介绍 乐鑫 ESP-ADF(Espressif Audio Development Framework)是乐鑫科技(Espressif Systems)专为 ESP32 系列芯片开发的一款音频开发框架。它旨在简化基于 ESP32 芯…...

【深度学习与实战】2.3、线性回归模型与梯度下降法先导案例--最小二乘法(向量形式求解)

为了求解损失函数 对 的导数,并利用最小二乘法向量形式求解 的值‌ 这是‌线性回归‌的平方误差损失函数,目标是最小化预测值 与真实值 之间的差距。 ‌损失函数‌: 考虑多个样本的情况,损失函数为所有样本的平方误差之和&a…...

【Django】教程-2-前端-目录结构介绍

【Django】教程-1-安装创建项目目录结构介绍 3. 前端文件配置 3.1 目录介绍 在app下创建static文件夹, 是根据setting中的配置来的 STATIC_URL ‘static/’ templates目录,编写HTML模板(含有模板语法,继承,{% static ‘xx’ …...

JS判断对象是否为空的方法

在 JavaScript 中,判断一个对象是否为空对象(即没有自身可枚举属性),可以通过以下方法实现: 方法 1:使用 Object.keys() javascript function isEmptyObject(obj) {// 确保是普通对象(排除 n…...

详解list容器

1.list的介绍 list的底层结构是双向带头循环链表,允许随机的插入和删除,但其内存空间不是连续的。随机访问空间能力差,需要从头到尾遍历节点,不像vector一样高效支持 2.list的使用 构造函数 1.默认构造函数:创建一个…...

leetcode_977. 有序数组的平方_java

977. 有序数组的平方https://leetcode.cn/problems/squares-of-a-sorted-array/ 1.题目 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1…...

Spring Boot 3.4.3 基于 SpringDoc 2 和 Swagger 3 实现项目接口文档管理

在现代企业级应用开发中,前后端分离已成为主流模式,前端负责界面呈现,后端专注提供 RESTful API 接口。然而,接口文档的编写和维护往往是开发过程中的痛点。Spring Boot 3.4.3 结合 SpringDoc 2 和 Swagger 3,为开发者…...