[软件工程导论(第六版)]第5章 总体设计(复习笔记)

news2024/9/23 9:33:28

文章目录

    • 5.1 设计过程
    • 5.2 设计原理
      • 5.2.1 模块化
      • 5.2.2 抽象
      • 5.2.3 逐步求精
      • 5.2.4 信息隐藏和局部化
      • 5.2.5 模块独立
    • 5.3 启发规则
    • 5.4 描绘软件结构的图形工具
      • 5.4.1 层次图
      • 5.4.2 HIPO图
      • 5.4.3 结构图
    • 5.5 面向数据流的设计方法


  • 目的
    • 总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题。
  • 总体设计又称为概要设计或初步设计
  • 主要任务
    • (1)划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等。
    • (2)确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
    • 【注意】每个物理元素的具体实现是详细阶段的任务。
  • 必要性
    • 可以站在全局高度上,以较少的成本选出最佳方案和最合理的软件结构并开发出较高质量的软件系统。

5.1 设计过程

  • 设计过程的两个主要组成阶段
    • (1)系统设计阶段,确定系统的具体实现方案。
    • (2)结构设计阶段,确定软件结构。
  • 典型的总体设计过程
    • ①设想供选择的方案;
    • ②选取合理的方案
    • ③推荐最佳方案
    • ④功能分解
    • ⑤设计软件结构
    • ⑥设计数据库
    • ⑦制定测试计划
    • ⑧书写文档
      • 系统说明
      • 用户手册
      • 测试计划
      • 详细的实现计划
      • 数据库设计结果
    • ⑨审查和复查。

5.2 设计原理

5.2.1 模块化

  • (1)定义
    • 模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
  • (2)优点
    • ① 使软件结构清晰,不仅容易设计也容易阅读和理解。
    • ② 使软件容易测试和调试,有助于提高软件的可靠性。
    • ③ 提高软件的可修改性。
    • ④ 有助于软件开发工程的组织管理。
  • 【注意】模块是构成程序的基本构件。

5.2.2 抽象

  • (1)定义
    • 抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
  • (2)优点
    • ① 简化了软件的设计和实现;
    • ② 提高了软件的可理解性和可测试性;
    • ③ 使得软件更容易维护。
  • 软件工程过程的每一步都是对软件解法的抽象层次的一次精化

5.2.3 逐步求精

  • (1)定义
    • 定义为:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
  • (2)原理
    • ① 逐步求精是一种自顶向下的设计策略。
    • ② 求精实际上是细化过程。
  • 逐步求精如此重要?
    • 因为人类的认知过程遵循Miller法则,一个人在任何时候都只能把注意力集中在(7+2)个知识块上
  • 抽象与求精是一对互补概念

5.2.4 信息隐藏和局部化

  • (1)局部化定义
    • 指把一些关系密切的软件元素物理地放得彼此靠近。
  • (2)信息隐藏原理
    • 使得一个模块内包含的信息(主要是实现细节)对于不需要这些信息的模块来说,是不能访问的。
  • 局部化有助于信息隐藏

5.2.5 模块独立

  • (1)定义
    • 开发的模块具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。
    • 模块独立的概念是模块化、抽象、信息隐藏和局部化的直接结果。
  • (2)模块的独立程度由两个定性标准衡量:耦合和内聚。
  • (3)耦合
    • ① 定义
      • 耦合是对一个软件结构内不同模块之间互连程度的度量。
    • ② 分类
      • a. 完全独立,模块间没有任何连接;
      • b. 数据耦合,模块之间仅通过交换数据来交换信息;
      • c.控制耦合,模块之间传递的信息有控制信息;
      • d.特征耦合,传递的数据为整个数据结构,但只使用其中的一部分数据元素;
      • e.公共环境耦合,模块之间通过公共数据环境相互作用;
      • f.内容耦合
        • 模块访问模块内部数据
        • 模块进入另一个模块没有通过正常入口
        • 模块之间部分程序代码重叠
        • 一个模块有多个入口
      • 数据耦合<公共环境耦合<特征耦合<控制耦合<内容耦合(越低越好)
  • (4)内聚
    • ① 定义
      • 内聚衡量一个模块内部各个元素彼此结合的紧密程度。
    • ② 分类
      • 偶然内聚,模块内任务的关系松散
      • 逻辑内聚,模块完成的任务逻辑上属于相同或类似的一类
      • 时间内聚,模块的任务必须在同一时间段执行
      • 过程内聚,模块内处理元素相关且按一定的次序
      • 通信内聚,模块中所有元素使用同一个输入或产生同一个的输出
      • 顺序内聚,模块中的功能必须顺序执行
      • 功能内聚,模块中所有处理元素属于一个整体,完成一个单一的功能
      • 在这里插入图片描述
      • 低内聚(偶然内聚<逻辑内聚<时间内聚)
      • 中内聚(过程内聚<通信内聚)
      • 高内聚(顺序内聚<功能内聚)
  • 【注意】考生牢记:设计的软件尽量满足“高内聚、低耦合”和“高扇入、低扇出”原则。
  • 模块独立性比较强的模块应该是具有高内聚性和低耦合度。
  • 在进行软件结构设计时应该遵循的最主要的原理是模块独立原理;
  • 自顶向下逐步求精是进行软件结构设计的常用途径;
  • 抽象和逐步求精是互补的。

5.3 启发规则

  • 改进软件结构提高模块独立性
  • 模块规模应该适中
  • 深度、宽度、扇出和扇入都应适当
    • (1)深度
      • 深度表示软件结构中控制的层数。
    • (2)宽度
      • 宽度是软件结构内同一个层次上的模块总数的最大值。宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。
    • (3)扇出
      • 扇出是一个模块直接控制的模块数目。
    • (4)扇入
      • 扇入表明有多少个上级模块直接调用它。
  • 模块的作用域应该在控制域之内
    • (1)定义
      • ① 模块的作用域定义为受该模块内一个判定影响的所有模块的集合。
      • ② 模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合。
  • 力争降低模块接口的复杂程度
  • 设计单入口单出口的模块
  • 模块功能应该可以预测

5.4 描绘软件结构的图形工具

5.4.1 层次图

  • (1)作用
    • 层次图用来描绘软件的层次结构。
  • (2)符号
    • ① 矩形框代表一个模块。
    • ② 方框间的连线表示调用关系。
  • 在这里插入图片描述

5.4.2 HIPO图

  • HIPO图是“层次图加输入/处理/输出图”的缩写。
  • 在层次图里除了最顶层的方框外,每个方框都加了编号。
  • 在这里插入图片描述

5.4.3 结构图

  • 结构图的符号表示分为两类:
  • (1)基本符号
    • ① 方框代表一个模块,框内注明模块的名字或主要功能;
    • ② 方框之间的箭头(或直线)表示模块的调用关系;
    • ③ 尾部是空心圆的箭头表示传递的是数据,实心圆的箭头表示传递的是控制信息。
    • 在这里插入图片描述
  • (2)特殊符号
    • ① 表示当模块M中某个判定为真时调用模块A,为假时调用模块B,如图所示;
    • 在这里插入图片描述
    • ② 表示模块M循环调用模块A、B和C,如图所示。
    • 在这里插入图片描述

5.5 面向数据流的设计方法

  • 面向数据流的设计方法的目标:给出设计软件结构的一个系统化的途径
  • 通常使用数据流图描绘信息在系统中加工和流动的情况
  • 结构化设计方法是基于数据流的设计方法
  • 信息流的类型
    • (1)变换流
      • 变换流具有如下特征:
        • ① 信息沿输入通路进入系统,同时由外部形式变换成内部形式;
        • ② 进入系统的信息通过变换中心,经加工处理后沿输出通路变成外部形式离开软件系。
      • 在这里插入图片描述
    • (2)事务流
      • 事务流是“以事务为中心”的数据流,即数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。
      • 事务流完成接收输入数据、分析每个事务确定事务类型、根据事务选择活动通路的任务
      • 在这里插入图片描述
  • 设计过程
    • 下图说明了使用面向数据流方法逐步设计的过程。
    • 在这里插入图片描述
    • 【注意】任何设计过程都不是机械的一成不变的。
  • 变换分析
    • 变换分析是一系列设计步骤的总称,经过这些步骤把具有变换流特点的数据流图按预先确定的模式映射成软件结构
    • (1)适用性
      • 一般说来,如果数据流不具有显著的事务特点,最好使用变换分析。
    • (2)设计步骤
      • ① 复查基本系统模型;
      • ② 复查并精化数据流图;
      • ③ 确定数据流图具有变换特性还是事务特性;
      • ④ 确定输入流和输出流的边界,从而孤立出变换中心;
      • ⑤ 第一级分解;
      • ⑥ 第二级分解;
      • ⑦ 使用设计度量和启发式规则对第一次分割得到的软件结构进一步精化。
  • 事务分析
    • (1)适用性
      • 在数据流具有明显的事务特点时,即有一个明显的事务中心时,采用事务分析方法为宜。
    • (2)设计
      • 事务分析的映射方法如图所示。
      • 在这里插入图片描述
  • 设计优化
    • (1)设计优化时应遵循的原则。
      • ① 应该开发能够满足所有功能和性能要求,而且按照设计原理和启发式设计规则衡量是值得接收的软件。
      • ② 应该在设计的早期阶段尽量对软件结构进行精化。
      • ③ 结构简单通常既表示设计风格优雅,又表明效率高。
      • ④ 对于时间是决定性因素的应用场合,可能需要在详细设计阶段或在编写程序的过程中进行优化。
    • (2)可以采用以下几种方法对时间起决定性作用的软件进行优化。
      • ① 在不考虑时间因素的前提下开发并精化软件结构。
      • ② 在详细设计阶段选出最耗费时间的那些模块,仔细地设计它们的处理过程(算法),以求提高效率。
      • ③ 使用高级程序设计语言编写程序。
      • ④ 在软件中孤立出那些大量占用处理机资源的模块。
      • ⑤ 必要时重新设计或用依赖于机器的语言重写上述大量占用资源的模块的代码,以求提高效率。

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

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

相关文章

2.19 索引和事务

一.联合查询面试问题:聚合查询与联合查询的区别聚合查询是行与行之间的数据加工聚合函数 :count,sum,avg...group by 进行分组,指定列的值,相同的记录合并到同一个组,每个组又可以分别进行聚合查询分组还可以指定条件筛选,如果分组之前指定条件 用where,如果对分组之后指定条件…

< CSDN周赛解析:第 28 期 >

CSDN周赛解析&#xff1a;第 27 期&#x1f449; 第一题&#xff1a; 小Q的鲜榨柠檬汁> 题目解析> 解决方案&#x1f449; 第二题&#xff1a; 三而竭> 解析> 解决方案> 拓展知识&#x1f449; 第三题&#xff1a; 隧道逃生> 解析> 解决方案&#x1f449;…

【人工智能AI】四、NoSQL进阶《NoSQL 企业级基础入门与进阶实战》

帮我写一篇介绍NoSQL的技术文章&#xff0c;文章的标题是《四、NoSQL进阶》&#xff0c;不少于3000字。帮我细化到三级目录&#xff0c;使用markdown格式。这篇文章的目录是&#xff1a; 四、NoSQL 进阶 4.1 NoSQL 高可用 4.2 NoSQL 数据安全 4.3 NoSQL 性能优化 4.4 总结 四、…

Vue:extends继承组件复用性

提到extends继承&#xff0c;最先想到的可能是ES6中的class、TS中的interface、面向对象编程语言中中的类和接口概念等等&#xff0c;但是我们今天的关注点在于&#xff1a;如何在Vue中使用extends继承特性。 目录 Vue&#xff1a;创建Vue实例的方式 构造函数方式&#xff1…

3D点云处理:点云聚类--FEC: Fast Euclidean Clustering for Point Cloud Segmentation

文章目录 聚类结果一、论文内容1.1 Ground Surface Removal1.2 Fast Euclidean Clustering题外:欧几里得聚类Fast Euclidean Clustering二、参考聚类结果 原始代码中采用的是pcl中的搜索方式,替换为另外第三方库,速度得到进一步提升。 一、论文内容 论文中给出的结论:该…

java基础学习 day42(继承中构造方法的访问特点,this、super的使用总结)

继承中&#xff0c;构造方法的访问特点 父类的构造方法不会被子类继承&#xff0c;但可以通过super()调用父类的构造方法&#xff0c;且只能在子类调用&#xff0c;在测试类中是不能手动单写构造方法的。子类中所有的构造方法默认先调用父类的无参构造&#xff0c;再执行自己构…

vue3+ts+node个人博客系统(三)

一.主页顶部和中心面板布局 &#xff08;1&#xff09; 首先先去element-plus选择合适的布局el-container (2)在头部处编写相应的菜单栏el-menu,在这里要注意动态绑定路由的问题:default-active"$route.path"。将default-active设置为$route.path&#xff0c;el-me…

Java File类、IO流、Properties属性类

文章目录一、补充二、File类File类的含义创建多级文件File类的常见方法三、IO流IO流分类输入输出流FileOutputStreamInputStreamInputStream与OutputStream的实例ReaderWriterFileReader和FileWriter的实例缓冲流转换流序列化与ObjectInputStream、ObjectOutputStream打印流Pro…

MySQL 10:MySQL事务

MySQL 中的事务是由存储引擎实现的。在 MySQL 中&#xff0c;只有 InnoDB 存储引擎支持事务。事务处理可用于维护数据库的完整性&#xff0c;确保批处理的 SQL 语句要么执行要么根本不执行。事务用于管理 DDL、DML 和 DCL 操作&#xff0c;例如插入、更新和删除语句&#xff0c…

JVM10垃圾回收算法

1.什么是垃圾&#xff1f; 垃圾是指在运行程序中没有任何指针指向的对象&#xff0c;这个对象就是需要被回收的垃圾。 如果不及时对内存中的垃圾进行清理&#xff0c;那么&#xff0c;这些垃圾对象所占的内存空间会一直保留到应用程序的结束&#xff0c;被保留的空间无法被其…

XLink 和 XPointer 简介

XLink 定义了一套标准的在 XML 文档中创建超级链接的方法。 XPointer 使超级链接可以指向 XML 文档中更多具体的部分&#xff08;片断&#xff09;。 您应当具备的基础知识 学习本教程前您应当具备的基础知识: HTML / XHTMLXML / XML 命名空间XPath 如果您希望首先学习这些项…

.NET7的AOT的使用

背景其实&#xff0c;规划这篇文章有一段时间了&#xff0c;但是比较懒&#xff0c;所以一直拖着没写。最近时总更新太快了&#xff0c;太卷了&#xff0c;所以借着 .NET 7 正式版发布&#xff0c;熬夜写完这篇文章&#xff0c;希望能够追上时总的一点距离。本文主要介绍如何在…

九龙证券|重大利好!期货公司打新再“解绑”:可直接参与首发网下配售!

时隔近7年&#xff0c;期货公司及其财物办理子公司参加首发证券网下询价和配售事务再次“解绑”。 2月17日&#xff0c;为适应全面实行股票发行注册制变革需求&#xff0c;中国证券业协会&#xff08;以下简称中证协&#xff09;发布《初次公开发行证券网下出资者办理规矩》&am…

NO.1嵌入式入门笔记:常用命令记录

一、前言 Linux文件目录&#xff1a; Linux Shell&#xff1a; 它负责接收用户的输入&#xff0c;根据用户的输入找到其它程序并运行。比如我们输入“ls”并回车时&#xff0c;shell 程序找到“ls”程序并运行&#xff0c;把结果打印出来。Shell有多种实现&#xff0c;我们常用…

Linux常用命令之find命令详解

简介 find命令主要用于&#xff1a;用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。 如果使用该命令时&#xff0c;不设置任何参数&#xff0c;则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。 是我们在…

在Linux和Windows上安装seata-1.6.0

记录&#xff1a;381场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;安装seata-1.6.0。在Windows上操作系统上&#xff0c;安装seata-1.6.0。Seata&#xff0c;一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。版本&#xff1a;JDK…

【java基础】Java常用类———包装类

包装类 wrapper 装箱与拆箱 装箱&#xff1a;基本类型->包装类&#xff1b; 拆箱&#xff1a; 包装类->基本类型 public class Integer01 {public static void main(String[] args) {//演示int <--> Integer 的装箱和拆箱//jdk5前是手动装箱和拆箱//手动装箱 in…

学海记录项目测试报告

⭐️前言⭐️ 本篇文章是博主基于学海记录的个人项目所做的测试报告&#xff0c;用于总结运用自动化测试技术&#xff0c;应用于自己的项目。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f4dd;私信必回哟&#x1f601; &#x1f349;博主将持续更新学习记录…

【查找算法】解析学习四大常用的计算机查找算法 | C++

第二十二章 四大查找算法 目录 第二十二章 四大查找算法 ●前言 ●查找算法 ●一、顺序查找法 1.什么是顺序查找法&#xff1f; 2.案例实现 ●二、二分查找法 1.什么是二分查找法&#xff1f; 2.案例实现 ●三、插值查找法 1.什么是插值查找法&#xff1f; 2…