《软件工程导论》第5章-总体设计-重点总结

不要问我为什么没有第4章,因为它不配。QAQ

这一章重点的问题有这么几个:
1.总体设计过程的两个阶段是什么?
2.软件在设计过程中应该遵循的几个基本原理。(就是几个小标题)
3.简述总体设计原理(模块化 抽象 逐步求精 信息隐藏 局部化);
4.简述度量模块独立性的标准(简述耦合和内聚的概念)
5.根据自己的理解 解释什么是数据耦合、控制耦合、特征耦合、公共环境耦合、内容耦合;
6.耦合是影响软件复杂程度的一个重要因素,简述应该采取什么设计原则;
7.简述功能内聚、顺序内聚、通信内聚、过程内聚、偶然内聚、逻辑内聚、时间内聚的概念;并分类(哪些属于高内聚,哪些属于中等内聚,哪些属于低内聚)

目录

  • 第5章 总体设计
    • 5.1 设计过程
      • ① 设想供选择的方案
      • ② 选取合理的方案
      • ③ 推荐最佳方案
      • ④ 功能分解
      • ⑤ 设计软件结构
      • ⑥ 设计数据库
      • ⑦ 制定测试计划(主要是功能测试计划)
      • ⑧ 书写文档
      • ⑨ 审查和复审
    • 5.2 设计原理
      • 5.2.1 模块化
      • 5.2.2 抽象
      • 5.2.3 逐步求精
      • 5.2.4 信息隐藏和局部化
      • 5.2.5 模块独立
        • 1)耦合
        • 2)内聚
    • 5.3 启发规则
    • 5.4 描绘软件结构的图形工具
    • 5.5 面向数据流的设计方法

在这里插入图片描述

第5章 总体设计

总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题,因此,总体设计又称为概要设计或初步设计。
总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。

在这里插入图片描述

5.1 设计过程

总体设计过程的两个阶段:
系统设计阶段:确定系统的具体实现方案;
结构设计阶段:确定软件结构。
《软件工程导论》第5章-总体设计-重点总结_第1张图片
典型的总体设计过程包括下述九个步骤:
1.设想供选择的方案
2.选取合理的方案
3.推荐最佳方案
4.功能分解
5.设计软件结构
6.设计数据库
7.制定测试计划
8.书写文档
9.审查和复审
《软件工程导论》第5章-总体设计-重点总结_第2张图片

① 设想供选择的方案

在总体设计阶段分析员应该考虑各种可能的实现方案,并且力求从中选出最佳方案。
需求分析阶段得出的数据流图是总体设计的极好的出发点。
设想供选择的方案的一种常用的方法是,设想把数据流图中的处理分组的各种可能的方法,抛弃在技术上行不通的分组方法,余下的分组方法代表可能的实现策略,并且可以启示供选择的物理系统。

② 选取合理的方案

应该从前一步得到的一系列供选择的方案中选取若干个合理的方案,通常至少选取低成本、中等成本和高成本的3种方案。在判断哪些方案合理时应该考虑在问题定义和可行性研究阶段确定的工程规模和目标,有时可能还需要进一步征求用户的意见。
对每个合理的方案,分析员都应该准备下列4份资料。
(1) 系统流程图。
(2) 组成系统的物理元素清单。
(3) 成本/效益分析。
(4) 实现这个系统的进度计划。

③ 推荐最佳方案

用户和有关的技术专家应该认真审查分析员所推荐的最佳系统,如果该系统确实符合用户的需要,并且是在现有条件下完全能够实现的,则应该提请使用部门负责人进一步审批。在使用部门的负责人也接受了分析员所推荐的方案之后,将进入总体设计过程的下一个重要阶段——结构设计。

④ 功能分解

为了最终实现目标系统,必须设计出组成这个系统的所有程序和文件(或数据库)。
对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成:首先进行结构设计,然后进行过程设计。
为确定软件结构,首先需要从实现角度把复杂的功能进一步分解。分析员结合算法描述仔细分析数据流图中的每个处理,如果一个处理的功能过分复杂,必须把它的功能适当地分解成一系列比较简单的功能。

⑤ 设计软件结构

**通常程序中的一个模块完成一个适当的子功能。**应该把模块组织成良好的层次系统,顶层模块调用它的下层模块以实现程序的完整功能,每个下层模块再调用更下层的模块,完成程序的一个子功能,最下层的模块完成最具体的功能。

⑥ 设计数据库

对于需要使用数据库的那些应用系统, 软件工程师应该在需求分析阶段所确定的系统数据需求的基础上,进一步设计数据库。

⑦ 制定测试计划(主要是功能测试计划)

在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。

⑧ 书写文档

应该用正式的文档记录总体设计的结果,在这个阶段应该完成的文档通常有下述几种。

  1. 系统说明
  2. 用户手册
  3. 测试计划包括测试策略,测试方案,预期的测试结果,测试进度计划等
  4. 详细的实现计划
  5. 数据库设计结果

⑨ 审查和复审

最后应该对总体设计的结果进行严格的技术审查,在技术审查通过之后再由客户从管理角度进行复审

在这里插入图片描述

5.2 设计原理

在软件设计过程中应该遵循的基本原理和相关概念。

5.2.1 模块化

模块是由边界元素限定的相邻程序元素的序列;
模块是构成程序的基本构件。
模块化就是把程序划分成独立命名且可独立访问的模块, 每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
模块化设计:按适当原则把软件划分成一个个较小的,相关而又相对独立的模块;

5.2.2 抽象

在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来,暂时忽略它们之间的差异,这就是抽象。
抽象就是抽出事物的本质特性而暂时不考虑它们的细节。

软件工程过程的每一步都是对软件解法的抽象层次的一次精化:
(1)在可行性研究阶段,软件作为系统的一个完整部件;
(2)在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;
(3)当由总体设计向详细设计过渡时,抽象的程度也就随之减少了;
(4)最后,当源程序写出来以后,也就达到了抽象的最低层。

5.2.3 逐步求精

逐步求精定义为:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
逐步求精最初是由Niklaus Wirth提出的一种自顶向下的设计策略。按照这种设计策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功能的宏观陈述而开发出层次结构,直至最终得出用程序设计语言表达的程序。

  • 求精实际上是细化过程。
  • 抽象与求精是一对互补的概念。

抽象使得设计者能够说明过程和数据、同时却忽略底层细节;
求精帮助设计者在设计过程中揭示底层细节;

5.2.4 信息隐藏和局部化

信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。

局部化是指把一些关系密切的软件元素物理地放得彼此靠近。
《软件工程导论》第5章-总体设计-重点总结_第3张图片
如果在测试期间和以后的软件维护期间需要修改软件,使用信息隐藏原理作为模块化系统设计的标准就会带来极大好处。

5.2.5 模块独立

模块独立:具有独立功能且和其他模块没过多作用。
模块的独立性很重要, 两条理由:

  1. 具有独立的模块的软件比较容易开发出来。
  2. 独立的模块比较容易测试和维护,修改工作量较小,错误传播范围小,扩充功能容易。

模块的独立程度可以由两个定性标准度量:内聚耦合

1)耦合

耦合是对一个软件结构内不同模块之间互连程度的度量。
耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。

模块耦合分为数据耦合、控制耦合、特征耦合、公共环境耦合和内容耦合。
《软件工程导论》第5章-总体设计-重点总结_第4张图片

① 数据耦合
两个模块彼此间通过参数交换数据信息(交换的信息仅仅是数据),那么这种耦合称为数据耦合。
数据耦合是低耦合,比较松散的耦合。
《软件工程导论》第5章-总体设计-重点总结_第5张图片

② 控制耦合
两个模块通过参数交换控制信息(包括数字形式),则这种耦合称为控制耦合。
《软件工程导论》第5章-总体设计-重点总结_第6张图片
控制耦合是中等程度的耦合。

③ 特征耦合
当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素时,就出现了特征耦合。

④ 公共环境耦合
当两个或多个模块通过一个公共数据环境相互作用时,它们之间的耦合称为公共环境耦合。
公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。
公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。
《软件工程导论》第5章-总体设计-重点总结_第7张图片
只有两个模块有公共环境,耦合有下面两种可能。
(1) 一个模块往公共环境送数据,另一个模块从公共环境取数据。等价于数据耦合,是比较松散的耦合。
(2) 两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。
《软件工程导论》第5章-总体设计-重点总结_第8张图片
⑤ 内容耦合
最高程度的耦合是内容耦合。
如果出现下列情况之一,两个模块间就发生了内容耦合。
一个模块访问另一个模块的内部数据。
一个模块不通过正常入口而转到另一个模块的内部。
两个模块有一部分程序代码重叠(只可能出现在汇编程序中)。
一个模块有多个入口(这意味着一个模块有几种功能)。
《软件工程导论》第5章-总体设计-重点总结_第9张图片
应该坚决避免使用内容耦合。

小结:
耦合是影响软件复杂程度的一个重要因素。
应该采取下述设计原则:
尽量使用数据耦合,
少用控制耦合和特征耦合,
限制公共环境耦合的范围,
完全不用内容耦合。

2)内聚

内聚衡量一个模块内部各个元素彼此结合的紧密程度。
内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
简单地说,理想内聚的模块只做一件事情
内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。
内聚分为三大类低内聚、中内聚和高内聚

① 高内聚
一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。
例如修改学生基本信息模块:先查找学生信息,再修改
模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。
功能内聚是最高程度的内聚。如:矩阵乘法
② 中内聚
一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。
例如把流程图中循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块;
模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。

一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚
《软件工程导论》第5章-总体设计-重点总结_第10张图片
模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚
《软件工程导论》第5章-总体设计-重点总结_第11张图片

③ 低内聚
一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。
一个模块完成的任务在逻辑上属于相同或相似的一类,则称为逻辑内聚。
一个模块包含的任务必须在同一段时间内执行,就叫时间内聚。

时间内聚:初始化模块;紧急故障模块;

逻辑内聚:
《软件工程导论》第5章-总体设计-重点总结_第12张图片
偶然内聚:
《软件工程导论》第5章-总体设计-重点总结_第13张图片

耦合和内聚的概念是Constantine,Yourdon,Myers和Stevens等人提出来的。上述7种内聚的优劣评分,将得到如下结果:
《软件工程导论》第5章-总体设计-重点总结_第14张图片
事实上,没有必要精确确定内聚的级别。
重要的是设计时高内聚,并且能够辨认出低内聚的模块,有能力通过修改设计提高模块的内聚程度并且降低模块间的耦合程度,从而获得较高的模块独立性。

在这里插入图片描述

5.3 启发规则

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

5.5 面向数据流的设计方法

在这里插入图片描述

END.

你可能感兴趣的:(软件工程)