软件工程(应试版)图形工具总结(二)

news2025/5/14 3:43:56

遇到的问题,都有解决方案,希望我的博客能为你提供一点帮助。

教材参考《软件工程导论(第六版)》

七、 层次图(H图)与HIPO图

1、概述 

1.1、层次图(Hierarchy Chart / H图)

核心定义
  • 目的:描述软件系统的层次结构,体现模块的从属关系。
  • 适用阶段:自顶向下设计(Top-Down Design)的核心工具。
  • 形态特征
    • 树状结构,根节点为系统顶层模块。
    • 每个父模块分解为多个子模块。
    • 不展示模块间数据流或控制流。

1.2、HIPO图(Hierarchy + Input-Process-Output)

核心组成
  • H图(层次图)​:模块分解结构,附加追踪编号。
  • IPO图:为每个模块定义输入、处理逻辑、输出三要素。
关键特征
  • 可追踪性:模块编号体系(如1.2.3)明确层级关系。
  • 设计完整性:H图描述结构,IPO图补充行为。
  • IBM标准格式:常用于传统结构化方法,与数据字典配合使用。

1.3、层次图 vs. HIPO图对比

维度层次图HIPO图
核心目标模块结构分解模块结构+行为设计
信息维度仅层次关系层次+输入/处理/输出细节
可追溯性无编号体系严格编号支持模块追踪
设计深度宏观架构宏观到微观的完整设计
适用阶段初步设计详细设计阶段

2、符号 

H图

 

HIPO图 

3、例子

H图

HIOP图 

 

八、 结构图

1、概述

步骤1:确定系统边界。步骤2:构建模块层次树。步骤3:定义调用关系。步骤4:标注数据流。步骤5:处理特殊逻辑。步骤6:连接数据存储。步骤7:验证与优化

2、符号

图形符号名称含义说明应用场景示例
模块框表示独立功能单元,通常以"动词+名词"命名用户管理模块
订单处理模块
────调用关系线表示模块间的单向调用关系订单模块 → 支付模块
⭯──→ (空心圆箭头)数据流箭头表示模块间传递数据结构,通常伴随数据元素说明传递订单数据:
{订单ID, 金额, 商品列表}
●──→ (实心圆箭头)控制信息箭头表示传递控制标志或状态码,影响程序执行流程传递支付验证状态:
{状态码: 200, 错误信息: null}

3、例子 

 

九、面向数据流的设计方法

 面向数据流的设计(Data Flow-Oriented Design)是一种基于数据流图(DFD)的结构化设计方法,旨在将系统的数据流程转换为模块化的软件结构。

1、步骤

1.1.绘制数据流图(DFD)

使用加工(Process)数据流(Data Flow)数据存储(Data Store)和外部实体(External Entity)表示系统的逻辑模型。

1.2.识别数据流类型

变换流(Transform Flow):数据经历“输入→核心处理→输出”的线性流程(如计算账单)。

事务流(Transaction Flow):数据根据类型触发不同处理分支(如订单处理)。

1.3.映射到结构图(Structure Chart)

变换分析:针对变换流,识别核心处理(变换中心),将DFD转换为分层模块结构。

事务分析:针对事务流,设计主模块调度不同事务处理分支。

1.4.优化与细化

合并冗余模块、简化接口、调整模块层次,确保高内聚低耦合。

补充模块的详细逻辑(如伪代码或流程图)。

2、变换分析步骤

2.1、第一级分解​
  • ​顶层结构​​:
    • ​Cm(主控模块)​​:协调输入、变换中心、输出。
    • ​Ca(输入控制模块)​​:管理数据接收。
    • ​Ct(变换中心控制模块)​​:处理核心逻辑。
    • ​Ce(输出控制模块)​​:管理结果输出(如生成报告)。

 


​2.2、第二级分解​
  • ​输入通路​​:将输入流中的每个处理映射为Ca下的模块(如“验证数据”→“格式化数据”)。
  • ​变换中心​​:将核心处理映射为Ct下的模块(如“计算总价”→“检查库存”)。
  • ​输出通路​​:将输出流中的处理映射为Ce下的模块(如“生成确认”→“发送邮件”)。

 C_{a}模块

第二级分解结果:

 3.事务分析步骤

步骤1:复查基本系统模型与数据流图​

  • 确保数据流图中存在​​明确的事务中心(N)​​,并识别:

    • ​接收通路​​(输入流):L、M。

    • ​发送通路​​(分支流):A、B、C三条通路。

 

​步骤2:确定事务中心与边界​

  • ​事务中心​​:图中 ​​N节点,负责接收输入并决定分支路径(如根据输入数据选择A、B、C通路)。

  • ​接收分支边界​​:从外部输入到事务中心的路径(如L→M)。

  • ​发送分支边界​​:从事务中心到各分支模块的路径(如J→K)。

​步骤3:第一级分解​

  • ​顶层模块(Cm)​​:协调接收分支(ML)、事务中心(N)、发ABC)。

  • ​接收分支(Ca)​​:处理输入数据。

  • ​事务中心(Ct)​​:作为调度核心,不处理具体逻辑,仅决定调用哪个分支模块。

  • ​发送分支(Ce)​​:可能包含公共输出处理。

 

​步骤4:第二级分解(关键步骤)​

​(1) 接收分支的映射​

从事务中心(N)反向沿接收通路,将每个处理映射为 ​​接收分支的子模块

 

​(2) 发送分支的映射​

​调度模块(N)​​:不直接处理数据,而是调用下级活动模块。

​活动模块​​:每个分支路径映射为一个独立模块,

​(3) 输出分支的映射​

​步骤5:优化与验证​

  • ​高内聚​​:每个活动模块(如Q、R)仅处理单一功能。

  • ​低耦合​​:模块间通过事务中心(Ct)调度,避免直接依赖。

  • ​执行顺序​​:由Ct控制

完整例子:

 

十、程序流程图

 1、概述程序流程图

程序流程图(Program Flowchart)是一种用图形化方式描述算法或程序逻辑的工具,通过标准化的符号和箭头连接,直观展示程序的执行流程。以下是其核心要点:

​1.1.绘制规则​
  • ​自上而下​​:流程方向通常从顶部开始,向下延伸。

  • ​单一出口/入口​​:除判断框外,每个符号只有一个入口箭头;处理框只有一个出口,判断框有两个(分支)。

  • ​避免交叉​​:通过合理布局或连接点减少交叉线。

  • ​注释​​:可添加文字说明增强可读性。

2、符号

2.1.核心符号​解释
  • ​起止框​​(椭圆形):表示程序的开始或结束。

  • ​处理框​​(矩形):代表计算、赋值等操作(如 x = x + 1)。

  • ​输入/输出框​​(平行四边形):标注数据的输入或输出(如 打印结果)。

  • ​判断框​​(菱形):用于条件分支(如 x > 0?),出口标注“是/否”或“Y/N”。

  • ​流向箭头​​:指示程序执行的顺序方向。

  • ​连接点​​(圆形):简化复杂流程,标记跨页或远距离流程的衔接。

3.程序结构

 

4.例子(身份证号验证模块的流程图)

4.1基于描述画流程图 (旅客信息核验)

4.2基于伪码画流程图 
#include <stdio.h>
void main()
{
    int i, Sum;
    Sum = 0;
    for(i = 1; i <= 100; i++)
        Sum += i;
    printf("总和为 %d\n", Sum);
}

 

十一、盒图 (N-S图)

1、N-S图概述

盒图(N-S图,又称​​Nassi-Shneiderman图​​)是一种​​结构化程序设计​​的图形化工具,通过​​矩形框的嵌套​​严格表示程序的控制结构,避免传统流程图的随意跳转,确保逻辑清晰。

2、符号 

 

(a) 顺序;(b) 选择;(c) CASE 多分支;(d) 循环;(e) 调用子程序 A 

3.盒图绘制步骤​

​3.1. 确定程序的基本结构​

盒图的核心是​​顺序、分支、循环​​和调用四种基本结构,需先明确程序的逻辑类型:

  • ​顺序结构​​(图a):任务按步骤依次执行。
  • ​分支结构​​(图b/c):根据条件选择不同路径。
  • ​循环结构​​(图d):重复执行某段代码直到条件不满足。
  • 调用(图e)
 3.2.按顺序绘制盒图

如下:

 顺序:

 

分支:IF ELSE

循环:

 

调用:无

盒图绘制如下:

4.例子 

 

 

 十二、PAD图

 1、PAD图简述

PAD图以​​树形结构​​向右展开,通过​​纵向分层​​和​​横向分支​​表示逻辑关系:

  • ​纵向​​:表示顺序执行(如任务1→任务2→任务3)。
  • ​横向​​:表示条件分支或循环嵌套(如IF-THEN-ELSE、CASE分支)。

2.符号

3.PAD图绘制例子

4.例子

 

 

十三、判定表 

1.概述

组成部分说明
左上部列出所有条件
左下部所有可能做的动作
右上部表示各种条件组合的一个矩阵
右下部和每种条件组合相对应的动作

判定表的优点:

能清晰地表示复杂的条件组合与应做的动作之间的对应关系。

判定表的缺点:          

判定表的含义不是一眼就能看出来的,初次接触这种工具的人理解它需要有一个简短的学习过程。

当数据元素的值多于两个时,判定表的简洁程度也将下降。

 

 

 

2、例子

 

 判定表如下:

 

十四、判定树 

1、判定树概述

判定树是一种​​树形结构模型​​,通过​​节点​​和​​分支​​表示条件判断与执行逻辑,广泛用于分类、决策和算法设计。图中展示了其核心组成:

  • ​根节点​​:起始判断条件(如“条件”框)。
  • ​内部节点​​:中间判断或操作(如“CASE条件”“循环条件”)。
  • ​叶节点​​:最终操作或结果(如“部分”“第三个任务”)。
  • ​分支​​:连接节点的路径,标注条件取值(如T/F值1~值n)。

2、例子

 

 

十五、McCabe环形复杂度方法​

​1. 基本概念​

​流图(Control Flow Graph)​

  • 简化的控制流模型,忽略具体操作细节,聚焦分支与循环结构:
  • ​结点​​:代码块或控制点,用圆表示,一个圆代表一条或多条语句。
  • ​边​​:无条件或有条件跳转路径,箭头线称为边,代表控制流。在流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句。
  • ​区域​​:边与结点围成的闭合区域(含图外部区域)

​复合条件分解​
若条件中含布尔运算符(如 if (A && B)),需拆分为多个简单条件结点:

// 原始复合条件 → 分解为多个简单条件
if (A && B) { ... }
// 分解后流图:
// 结点1: if (A)
// 结点2:   if (B) → 分支语句
// 结点3: else → 结束

 2.流图映射

对于顺序结构,一个顺序处理序列和下一个选择或循环的开始语句,可以映射成流图中的一个结点。

 

对于选择结构,开始语句映射成一个结点;两条分支至少各映射成一个结点;结束映射成一个结点。

 

对于循环结构,开始和结束语句各映射成一个结点。

复合条件映射
 

 

​3. 环形复杂度计算​

通过流图计算控制流复杂度(三种等效公式):

公式示例说明
​V(G) = 区域数​流图分为4个区域 → V(G)=4
​V(G) = E - N + 2​​(E边数,N结点数)E=11,N=8 → V(G)=11-8+2=5
​V(G) = P + 1​​(P判定节点数)判定节点数4 → V(G)=4+1=5

4.例子

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

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

相关文章

思维链、思维树、思维图与思维森林在医疗AI编程中的应用蓝图

在医疗AI编程中,思维链(Chain of Thought, CoT)、思维树(Tree of Thoughts, ToT)、思维图(可能指知识图谱或逻辑图)以及思维森林(Forest-of-Thought, FoT)等技术框架通过模拟人类认知和推理过程,显著提升了AI在复杂医疗场景中的决策能力和可解释性: 1. 思维链(CoT)…

1.Qt信号与槽

本篇主要介绍信号和槽&#xff0c;如何关联信号和槽以及用QPixmap在窗口中自适应显示图片 本文部分ppt、视频截图原链接&#xff1a;[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. 信号 一般不需要主动发送信号&#xff0c;只有自定义的一些控件才需要做信号的…

MySQL 基础入门

写在前面 关于MySQL的下载安装和其图形化软件Navicat的下载安装,网上已经有了很多的教程,这里就不再赘述了,本文主要是介绍了关于MySQL数据库的基础知识。 MySQL数据库 MySQL数据库基础 MySQL数据库概念 MySQL 数据库&#xff1a; 是一个关系型数据库管理系统 。 支持SQL语…

数据分析与知识发现 论文阅读【信息抽取】

文章目录 基于知识蒸馏的半监督古籍实体抽取数据集模型实验结果 基于大语言模型的专利命名实体识别方法研究数据集评估公式实验 基于数据增强和多任务学习的突发公共卫生事件谣言识别研究数据集实验结果 参考 基于知识蒸馏的半监督古籍实体抽取 数据集 本文在有监督数据集的基…

Compose组件转换XML布局

文章目录 学习JetPack Compose资源前言&#xff1a;预览界面的实现Compose组件的布局管理一、Row和Colum组件&#xff08;LinearLayout&#xff09;LinearLayout&#xff08;垂直方向 → Column&#xff09;LinearLayout&#xff08;水平方向 → Row&#xff09; 二、相对布局 …

Linux开发工具——vim

&#x1f4dd;前言&#xff1a; 上篇文章我们讲了Linux开发工具——apt&#xff0c;这篇文章我们来讲讲Linux开发工具——vim &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&a…

Vue3学习二

认识组件的嵌套 还可以将Main中内容再划分 scoped防止组件与组件之间的样式相互污染 组件的通信 父子组件之间通信的方式 父组件传递给子组件 给传过来的内容做限制 type为传的内容的属性类型&#xff0c;required为true表示该内容是必须传的&#xff0c;default为&#xff0c…

[ deepseek 指令篇章 ]300个领域和赛道喂饭级deepseek指令

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

2024第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

记录刷题的过程、感悟、题解。 希望能帮到&#xff0c;那些与我一同前行的&#xff0c;来自远方的朋友&#x1f609; 大纲&#xff1a; 1、握手问题-&#xff08;解析&#xff09;-简单组合问题&#xff08;别人叫她 鸽巢定理&#xff09;&#x1f607;&#xff0c;感觉叫高级了…

C++ | C++11知识点

前言&#xff1a; 本篇内容讲述了C11中比较重要的内容为&#xff1a;右值引用、可变参数模板、lambda表达式和包装器。 ps&#xff1a;包装器博主在另一篇文章讲述的&#xff0c;本篇文章包装器板块为原文链接。 C11知识点目录 花括号初始化自定义类型的花括号初始化内…

LeetCode 1123.最深叶节点的最近公共祖先 题解

昨天写了三题&#xff0c;今天目前为止写了一题&#xff0c;玩了会游戏稍微休息了下 先来理解一下今天的题目&#xff0c;今天的题目类型是递归遍历找最深位置&#xff0c;先通过几个样例了解一下 输入&#xff1a;root [3,5,1,6,2,0,8,null,null,7,4] 输出&#xff1a;[2,7,…

工具介绍 | SafeLLMDeploy教程来了 保护本地LLM安全部署

SafeLLMDeploy&#xff1a;保护本地大语言模型安全部署的“守护者” 在AI技术飞速发展的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;如GPT、DeepSeek等正以前所未有的方式改变着我们的工作和生活。然而&#xff0c;本地部署这些强大的AI系统在带来便利的同时&…

机器学习-04-分类算法-03KNN算法案例

实验名称 K近邻算法实现葡萄酒分类 实验目的 通过未知品种的拥有13种成分的葡萄酒&#xff0c;应用KNN分类算法&#xff0c;完成葡萄酒分类&#xff1b; 熟悉K近邻算法应用的一般过程&#xff1b; 通过合理选择K值从而提高分类得到正确率&#xff1b; 实验背景 本例实验…

Java 搭建 MC 1.18.2 Forge 开发环境

推荐使用 IDEA 插件 Minecraft Development 进行创建项目 创建完成后即可进行 MOD 开发。 但是关于 1.18.2 的开发教程太少&#xff0c;因此自己研究了一套写法&#xff0c;写法并非是最优的但是是探索开发MOD中的一次笔记和记录 GITHUB: https://github.com/zimoyin/zhenfa…

计算机网络知识点汇总与复习——(三)数据链路层

Preface 计算机网络是考研408基础综合中的一门课程&#xff0c;它的重要性不言而喻。然而&#xff0c;计算机网络的知识体系庞大且复杂&#xff0c;各类概念、协议和技术相互关联&#xff0c;让人在学习时容易迷失方向。在进行复习时&#xff0c;面对庞杂的的知识点&#xff0c…

主机和虚拟机间的网络通信

参考&#xff1a;Vmware虚拟机三种网络模式详解 - 林加欣 - 博客园 (cnblogs.com) 虚拟机配置 一般额外配置有线和无线网络 桥接模式 虚拟机和主机之间是同一个网络&#xff0c;用一根线连接了虚拟机和物理机的网卡,可以选择桥接的位置&#xff0c;默认情况下是自动桥接&…

嵌入式Linux开发环境搭建,三种方式:虚拟机、物理机、WSL

目录 总结写前面一、Linux虚拟机1 安装VMware、ubuntu18.042 换源3 改中文4 中文输入法5 永不息屏6 设置 root 密码7 安装 terminator8 安装 htop&#xff08;升级版top&#xff09;9 安装 Vim10 静态IP-虚拟机ubuntu11 安装 ssh12 安装 MobaXterm &#xff08;SSH&#xff09;…

说清楚单元测试

在团队中推行单元测试的时候,总是会被成员问一些问题: 这种测试无法测试数据库的SQL(或者是ORM)是否执行正确?这种测试好像没什么作用?关联的对象要怎么处理呢?…借由本篇,来全面看一看单元测试。 单元测试是软件开发中一种重要的测试方法,其核心目的是验证代码的最小…

电商---part02 项目环境准备

1.虚拟机环境 可以通过VMWare来安装&#xff0c;但是通过VMWare安装大家经常会碰到网络ip连接问题&#xff0c;为了减少额外的环境因素影响&#xff0c;Docker内容会通过VirtualBox结合Vagrant来安装虚拟机。 VirtualBox官网&#xff1a;https://www.virtualbox.org/ Vagran…

LabVIEW提升程序响应速度

LabVIEW 程序在不同计算机上的响应速度可能存在较大差异&#xff0c;这通常由两方面因素决定&#xff1a;计算机硬件性能和程序本身的优化程度。本文将分别从硬件配置对程序运行的影响以及代码优化方法进行详细分析&#xff0c;帮助提升 LabVIEW 程序的执行效率。 一、计算机硬…