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

[软件工程导论(第六版)]第6章 详细设计(复习笔记)

文章目录

    • 6.1 结构程序设计
    • 6.2 人机界面设计
    • 6.3 过程设计的工具
      • 6.3.1 程序流程图(程序框图)
      • 6.3.2 盒图(N-S图)
      • 6.3.3 PAD图(问题分析图)
      • 6.3.4 判定表
      • 6.3.5 判断树
      • 6.3.6 过程设计语言
    • 6.4 面向数据结构的设计方法
      • 6.4.1 Jackson图
      • 6.4.2 改进的Jackson图
    • 6.5 程序复杂程度的定量度量
      • 6.5.1 McCabe方法
      • 6.5.2 Halstead方法


  • 详细设计阶段的根本目标:确定应该怎样具体地实现所要求的系统
  • 详细设计阶段的任务不是具体地编写程序
  • 详细设计不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。
  • 结构程序设计技术是实现详细设计目标的关键技术,也是详细设计的逻辑基础。

6.1 结构程序设计

  1. 经典定义
    • 如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。
  2. 程序设计新定义:
    • 结构程序设计方法是尽可能少用GO TO语句的程序设计方法。
  3. 控制结构
    • (1)基本控制结构
      • 三种基本的控制结构是“顺序”“选择”和“循环”,它们的流程图分别为
      • 在这里插入图片描述
      • 【注意】牢记三种基本控制结构,此为常考内容。
      • 3种基本控制结构保证每个代码块单入口和单出口,结构程序设计是详细设计的逻辑基础。
    • (2)扩展的控制结构
      • DO UNTIL和DO CASE的流程图分别是
      • 在这里插入图片描述
  • 如果只允许使用顺序、IF_THEN_ELSE型分支、DO_WHILE型循环这三种基本控制结构,为经典结构程序设计
  • 还允许使用DO_CASE型多分支结构和DO_UNTIL型循环结构,为扩展的结构程序设计
  • 如果还允许使用LEAVE(或BREAK)结构,为修正的结构程序设计

6.2 人机界面设计

  • 重要性
    • 人机界面设计是接口设计的重要组成部分
    • 对于交互式系统来说,人机界面设计和数据设计、体系结构设计及过程设计一样重要。
    • 人机界面的质量直接影响用户对软件产品的接受程度。
  • 设计问题
    • (1)系统响应时间;
    • (2)用户帮助设施;
    • (3)出错信息处理;
    • (4)命令交互。
  • 设计过程
    • 用户界面设计是一个迭代的过程,也就是说,通常先创建设计模型,再用原型实现这个设计模型,并由用户试用和评估,然后根据用户意见进行修改。
  • 人机界面设计指南
    • 有助于设计者设计出友好、高效的人机界面
    • 一般交互指南
    • 信息显示指南
    • 数据输入指南

6.3 过程设计的工具

  • 过程设计的工具,描述程序处理过程的工具,可以分为图形、表格、语言三类

6.3.1 程序流程图(程序框图)

  • (1)符号表示
    • 程序流程图中使用的符号表示如图所示。
    • 在这里插入图片描述
  • (2)优点
    • 对控制流程的描绘很直观,便于初学者掌握。
  • (3)缺点
    • ① 没遵循逐步求精的原则,它诱使程序员过早地考虑程序的控制流程, 而不去考虑程序的全局结构。
    • ② 程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以随意转移控制。
    • ③ 程序流程图不易表示数据结构。

6.3.2 盒图(N-S图)

  • (1)特点
    • ① 功能域明确;
    • ② 不可能任意转移控制;
    • ③ 很容易确定局部和全程数据的作用域;
    • ④ 很容易表示嵌套关系,也可以表示模块的层次结构。
  • (2)表示
    • 下图给出了结构化控制结构的盒图表示,也给出了调用子程序的盒图表示方法。
    • 在这里插入图片描述
  • (3)优点
    • ① 盒图没有箭头,因此不允许随意转移控制。
    • ② 盒图可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。

6.3.3 PAD图(问题分析图)

  • (1)符号表示
    • PAD图用二维树形结构的图来表示程序的控制流,下图给出PAD图的基本符号。
    • 在这里插入图片描述
  • (2)优点
    • ① 使用PAD符号所设计出来的程序必然是结构化程序。
    • ② PAD图所描绘的程序结构十分清晰。
    • ③ 用PAD图表现程序逻辑,易读、易懂、易记。
    • ④ 容易使用软件工具将PAD图自动转换成高级语言源程序,提高了软件可靠性和软件生产率。
    • ⑤ 即可用于表示程序逻辑,也可用于描绘数据结构。
    • ⑥ PAD图的符号支持自顶向下、逐步求精方法的使用。
  • 【注意】PAD图中竖线的总条数就是程序的层次数。
  • 在这里插入图片描述
  • PAD图是面向高级程序设计语言的,为每种常用的高级程序设计语言提供了一整套相应的图形符号

6.3.4 判定表

  • (1)适用性
    • 算法中包含多重嵌套的条件选择时使用判定表。
    • 判定表能够清晰地表示复杂的条件组合与应做的动作之间的对应关系
  • (2)组成
    • ① 左上部列出所有条件;
    • ② 左下部是所有可能做的动作;
    • ③ 右上部是表示各种条件组合的一个矩阵;
    • ④ 右下部是和每种条件组合相对应的动作。
    • 在这里插入图片描述
    • 在这里插入图片描述
    • 在这里插入图片描述
  • 【注意】判定表右半部的每一列实质上是一条规则,规定了与特定的条件组合相对应的动作。

6.3.5 判断树

  • 判定树是判定表的变种,能够清晰地表示复杂的条件组合与应做的动作之间的对应关系
  • 在这里插入图片描述

6.3.6 过程设计语言

  • (1)定义
    • 过程设计语言(PDL),即伪码,它是用正文形式表示数据和处理过程的设计工具。
  • (2)优点
    • ① 可作为注释直接插在源程序中,有助于保持文档和程序的一致性,提高文档的质量。
    • ② 可以使用普通的正文编辑程序或文字处理系统,很方便地完成PDL的书写和编辑工作。
    • ③ 已经有自动处理PDL的程序存在,且可以自动由PDL生成程序代码。
  • (3)缺点
    • 不如图形工具形象直观,不如判定表清晰简单。

6.4 面向数据结构的设计方法

6.4.1 Jackson图

  • (1)分类
    • Jackson图根据程序中数据元素彼此间的逻辑关系可分为顺序结构、选择结构和重复结构3类,具体如下:
    • ① 顺序结构
      • 在这里插入图片描述
      • 【注意】图中每个元素只出现一次,出现的次序依次是B、C和D。
    • ② 选择结构
      • 在这里插入图片描述
      • 【注意】在B、C和D的右上角有小圆圈做标记。
    • ③ 重复结构
      • 在这里插入图片描述
      • 【注意】在B的右上角有星号标记。
  • (2)优点
    • ① 便于表示层次结构,而且是对结构进行自顶向下分解的有力工具。
    • ② 形象直观可读性好。
    • ③ 既能表示数据结构也能表示程序结构。
  • (3)缺点
    • ① 图中无法表示选择条件或循环结束条件,影响了图的表达能力,也不易直接把图翻译成程序。
    • ② 框间连线为斜线,不易在行式打印机上输出。

6.4.2 改进的Jackson图

  • (1)表示
    • 改进的Jackson图。
    • 在这里插入图片描述
    • (a)顺序结构:B、C、D中任一个都不能是选择出现或重复出现的数据元素。
    • (b)选择结构:S右面括号中的数字i是分支条件的编号。
    • (c)可选结构:A或者是元素B或者不出现。
    • (d)重复结构:循环结束条件的编号为i。
  • (2)与层次图的比较
    • ① 层次图中的一个方框代表一个模块;而Jackson图中一个方框并不代表一个模块。
    • ② 层次图表现的是调用关系;而Jackson图表现的是组成关系。

6.5 程序复杂程度的定量度量

6.5.1 McCabe方法

  • (1)流图
    • ① 定义
      • 流图实质上是“退化了的”程序流程图,它仅仅描绘程序的控制流程,完全不表现对数据具体操作以及分支或循环的具体条件。
    • ② 程序流程图映射成流图
      • 下图说明了把程序流程图映射成流图的方法。
      • 在这里插入图片描述
      • a.流图中用圆表示结点,一个圆代表一条或多条语句。程序流程图中的一个顺序的处理框序列和一个菱形判定框,可以映射成流图中的一个结点。
      • b.流图中的箭头线称为边,代表控制流。流图中一条边必须终止于一个结点,即使这个结点并不代表任何语句。
      • c.由边和结点围成的面积称为区域,计算区域数时应包括图外部未被围起来的区域。
    • ③ PDL翻译成流图
      • a.基本情况
        • 下图是用PDL表示的处理过程及与之对应的流图。
        • 在这里插入图片描述
      • b.包含复合条件
        • 复合条件,就是在条件中包含了一个或多个布尔运算符。下图是由包含复合条件的PDL片段翻译成的流图。
        • 在这里插入图片描述
  • (2)环形复杂度
    • ① 定义
      • McCabe方法根据程序控制流的复杂程度定量度量程序的复杂程度,度量出的结果称为程序的环形复杂度。
    • ② 计算方法
      • 环形复杂度定量度量程序的逻辑复杂度,可以用下述3种方法中的任何一种来计算环形复杂度:
        • a.流图中线性无关的区域数等于环形复杂度。
        • b.流图G的环形复杂度V(G)=E-N+2,其中,E是流图中边的条数,N是结点数。
        • c.流图G的环形复杂度V(G)=P+1,其中,P是流图中判定结点的数目。
  • 环形复杂度V(G)=10是模块规模的合理上限。

6.5.2 Halstead方法

  • (1)定义
    • Halstead方法是根据程序中运算符和操作数的总数来度量程序的复杂程度。
  • (2)方法
    • ① 程序长度N定义(N1为程序中运算符出现的总次数,N2为操作数出现的总次数):N=N1+N2;
    • ② 预测程序长度的公式(使用的不同运算符的个数n1,不同操作数的个数n2):H=n1log2(n1)+n2log2(n2);
    • ③ 预测程序中包含错误的个数的公式:E=Nlog2(n1+n2)/3000。

相关文章:

[软件工程导论(第六版)]第6章 详细设计(复习笔记)

文章目录6.1 结构程序设计6.2 人机界面设计6.3 过程设计的工具6.3.1 程序流程图(程序框图)6.3.2 盒图(N-S图)6.3.3 PAD图(问题分析图)6.3.4 判定表6.3.5 判断树6.3.6 过程设计语言6.4 面向数据结构的设计方…...

RabbitMQ核心内容:实战教程(java)

文章目录一、安装二、入门1.分类2.核心概念3.工作原理4.六大模式三、模式一:"Hello World!"1.依赖2.生产者代码3.消费者代码四、模式二:Work Queues1.工作原理2.工具类代码:连接工厂3.消费者代码4.生产者代码5.分发策略不公平分发预…...

RK356x U-Boot研究所(命令篇)3.7 pci与nvme命令的用法

平台U-Boot 版本Linux SDK 版本RK356x2017.09v1.2.3文章目录 一、设备树与config配置二、pci命令的定义三、nvme命令的定义四、pci与nvme命令的用法3.1 pci总线扫描3.2 nvme设备信息3.3 nvme设备读写一、设备树与config配置 RK3568支持PCIe接口,例如ROC-RK3568-PC: 原理图如…...

微信头像昵称获取能力的变化导致了我半年没更新小程序

背景 2022年9月份,微信更改了获取头像昵称的规则,回收了原有 wx.getUserProfile 中的部分能力,为了减小对【微点记账】小程序的影响,长达半年未做任何更新,今天为了增加这个聊天机器人的功能,不得不重新查…...

【深度学习编译器系列】1. 为什么需要深度学习编译器?

本系列是自学深度学习编译器过程中的一些笔记和总结,参考文献在文末。 1. 概述 深度学习(DL)编译器的产生有两方面的因素:深度学习模型的广泛应用,以及深度学习芯片的层出不穷。 一方面,我们现在有非常多…...

数据结构与算法总结整理(超级全的哦!)

数据结构与算法基础大O表示法时间复杂度大O表示法时间复杂度排序:最坏时间复杂度时间复杂度的几条基本计算规则内存工作原理什么是内存内存主要分为三种存储器随机存储器(RAM)只读存储器(ROM)高速缓存(Cach…...

DPDK — MALLOC 堆内存管理组件

目录 文章目录 目录MALLOC 堆内存管理组件rte_malloc() 接口malloc_heap 结构体malloc_elem 结构体内存初始化流程内存申请流程内存释放流程MALLOC 堆内存管理组件 MALLOC(堆内存管理组件)基于 hugetlbfs 内核文件系统来实现,能够从 HugePage 中分配一块连续的物理大页内存…...

分享113个HTML艺术时尚模板,总有一款适合您

分享113个HTML艺术时尚模板,总有一款适合您 113个HTML艺术时尚模板下载链接:https://pan.baidu.com/s/1ReoPNIRjkYov-SjsPo0vhg?pwdjk4a 提取码:jk4a Python采集代码下载链接:采集代码.zip - 蓝奏云 女性化妆用品网页模板 粉…...

2023年美赛C题Wordle预测问题一建模及Python代码详细讲解

相关链接 (1)2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 (2)2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 (3)2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解 &…...

小米12s ultra,索尼xperia1 iv,数码相机 拍照对比

首先说明所有的测试结果和拍摄数据我放到百度网盘了(地址在结尾) 为什么做这个测试 我一直想知道现在的手机和相机差距有多大,到底差在哪儿? 先说结论: 1.1英寸的手机cmos(2022年) 6年前(2016)的入门款相机(m43画幅) 2.手机 不能换镜头,只能在特定的拍摄距离才能发挥出全…...

C++笔记 模板的进阶知识

目录 1. 非类型模板参数 2.模板的特化 2.1 函数模板的特化 2.2 类模板的特化 2.2.1 全特化 2.2.2 偏特化 3.模板的分离编译 3.1 什么是分离编译? 3.2 模板的分离编译 4.模板的总结 模板的初阶内容:(594条消息) C模板的原理和使用_全貌的博客-CSD…...

基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像

基于 Debain11 构建 asp.net core 6.x 的基础运行时镜像Linux 环境说明Debian 简介Debian 发行版本关于 Debian 11Linux 常用基础工具Dockerfile 中 RUN 指令RUN 语法格式RUN 语义说明编写 Dockerfile 构建 Runtime 基础镜像ASP.NET Core Runtime 基础镜像Dockerfile 编写Windo…...

【无人机路径规划】基于IRM和RRTstar进行无人机路径规划(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Spring Boot中使用@Autowire装配接口是怎么回事?

在学习使用Spring Boot框架时候,发现了一个特别的现象UserMapper是一个接口,在另一个类中好像直接使用Autowired装配了一个UserMapper对象???我纳闷了一会儿,接口居然可以直接实例对象吗?根据我…...

23种设计模式介绍(Python示例讲解)

文章目录一、概述二、设计模式七种原则三、设计模式示例讲解1)创建型模式1、工厂模式(Factory Method)【1】简单工厂模式(不属于GOF设计模式之一)【2】工厂方法模式2、抽象工厂模式(AbstractFactory&#x…...

初识Hadoop,走进大数据世界

文章目录数据!数据!遇到的问题Hadoop的出现相较于其他系统的优势关系型数据库网格计算本文章属于Hadoop系列文章,分享Hadoop相关知识。后续文章中会继续分享Hadoop的组件、MapReduce、HDFS、Hbase、Flume、Pig、Spark、Hadoop集群管理系统以及…...

加油站会员管理小程序实战开发教程14 会员充值

我们上篇介绍了会员开卡的业务,开卡是为了创建会员卡的信息。有了会员卡信息后我们就可以给会员进行充值。当然了充值这个业务是由会员自主发起的。 按照我们的产品原型,我们在我的页面以轮播图的形式循环展示当前会员的所有卡信息。这个会员卡信息需要先用变量从数据源读取…...

leetcode 1792. 最大平均通过率

一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组 classes ,其中 classes[i] [passi, totali] ,表示你提前知道了第 i 个班级总共有 totali 个学生,其中只有 passi 个学…...

15-基础加强-2-xml(约束)枚举注解

文章目录1.xml1.1概述【理解】(不用看)1.2标签的规则【应用】1.3语法规则【应用】1.4xml解析【应用】1.5DTD约束【理解】1.5.1 引入DTD约束的三种方法1.5.2 DTD语法(会阅读,然后根据约束来写)1.6 schema约束【理解】1.6.1 编写schema约束1.6.…...

13:高级篇 - CTK 事件管理机制(signal/slot)

作者: 一去、二三里 个人微信号: iwaleon 微信公众号: 高效程序员 在《12:高级篇 - CTK 事件管理机制(sendEvent/postEvent)》一文中,我们介绍了如何进行插件间通信 - sendEvent()/postEvent() + ctkEventHandler。然而,除了这种方式之外,EventAdmin 还提供了另一种方…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

Linux --进程控制

本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例

目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

Spring Boot + MyBatis 集成支付宝支付流程

Spring Boot MyBatis 集成支付宝支付流程 核心流程 商户系统生成订单调用支付宝创建预支付订单用户跳转支付宝完成支付支付宝异步通知支付结果商户处理支付结果更新订单状态支付宝同步跳转回商户页面 代码实现示例&#xff08;电脑网站支付&#xff09; 1. 添加依赖 <!…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

如何写一篇基于Spring Boot + Vue + 微信小程序的软件的接口文档

如何写一篇基于Spring Boot Vue 微信小程序的软件的接口文档 下面是一个例子&#xff0c;仅供参考&#xff01; 基于Spring Boot Vue 微信小程序的博客系统接口文档 技术栈&#xff1a;Spring Boot 3.x Vue 3 Element Plus 微信小程序原生框架 文档版本&#xff1a;v1…...