【软件工程】期末复习-第5章 总体设计

【软件工程】期末复习

第1章 软件工程学概述
第2章 可行性研究
第3章 需求分析
第5章 总体设计
第6章 详细设计
第7章 实现



前言

教材:《软件工程导论(第6版)》(张海藩、牟永敏)
软件工程导论教材
教材目录
软件工程导论目录
期末速成,主要针对考点总结,可能缺少部分章节内容,持续更新。督促自己快快复习。


总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题,因此,总体设计又称为概要设计或初步设计。

总体设计过程首先寻找实现目标系统的各种不同的方案,需求分析阶段得到的数据流图是设想各种可能方案的基础。

一、设计过程

总体设计过程通常由两个主要阶段组成:
系统设计阶段,确定系统的具体实现方案;
结构设计阶段,确定软件结构。

典型的总体设计过程包括下述9个步骤

1.系统设计阶段

(1)设想供选择的方案
(2)选取合理的方案
对每个合理的方案,分析员都应该准备下列4份资料。
① 系统流程图。
② 组成系统的物理元素清单。
③ 成本/效益分析。
④ 实现这个系统的进度计划。
(3)推荐最佳方案

2.结构设计阶段

(4)功能分解
(5)设计软件结构
软件结构(即由模块组成的层次系统)可以用层次图或结构图来描绘。
(6)设计数据库
(7)制定测试计划
(8)书写文档
文档通常有下述几种:
① 系统说明
② 用户手册
③ 测试计划
④ 详细的实现计划
⑤ 数据库设计结果
(9)审查和复审
最后对总体设计的结果进行严格的技术审查,再由客户从管理角度进行复审。

二、设计原理

1.模块化

(1)模块是由边界元素限定的相邻程序元素(例如,数据说明,可执行的语句)的序列,而且有一个总体标识符代表它。模块是构成程序的基本构件。
(2)模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
(3)模块化的作用
① 模块化可以使软件结构清晰,不仅容易设计也容易阅读和理解。
② 模块化使软件容易测试和调试,因而有助于提高软件的可靠性。
③ 模块化能够提高软件的可修改性。
④ 模块化也有助于软件开发工程的组织管理。

2.抽象

抽象就是抽出事物的本质特性而暂时不考虑它们的细节

3.逐步求精

逐步求精定义为:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
Miller法则:一个人在任何时候都只能把注意力集中在(7 ± 2)个知识块上。

4.信息隐藏和局部化

(1)信息隐藏:设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。也就是“看”不见的。
(2)局部化:把一些关系密切的软件元素物理地放得彼此靠近。

5.模块独立

(1)模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。
(2)模块独立性重要的理由:
① 有效的模块化(即具有独立的模块)的软件比较容易开发出来。
② 独立的模块比较容易测试和维护。
(3)模块的独立程度两个定性标准度量,内聚和耦合:
① 耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;
② 内聚衡量一个模块内部各个元素彼此结合的紧密程度。

追求低耦合高内聚
低耦合高内聚
耦合

  • 耦合是对一个软件结构内不同模块之间互连程度的度量。
  • 耦合强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。
  • 在软件设计中应该追求尽可能松散耦合的系统。(低耦合)

1.数据耦合:如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据。

  • 数据耦合是低耦合。
  • 系统中至少必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。
  • 一般说来,一个系统内可以只包含数据耦合。

2.控制耦合:如果传递的信息中有控制信息(尽管有时这种控制信息以数据的形式出现)。

  • 控制耦合是中等程度的耦合,它增加了系统的复杂程度。
  • 控制耦合往往是多余的,在把模块适当分解之后通常可以用数据耦合代替它。

3.特征耦合:当把整个数据结构作为参数传递而被调用的模块只需要使用其中一部分数据元素。

  • 被调用的模块可以使用的数据多于它确实需要的数据,这将导致对数据的访问失去控制,从而给计算机犯罪提供了机会。

4.公共环境耦合:两个或多个模块通过一个公共数据环境相互作用。

  • 公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等。
  • 公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。
  • 如果两个模块共享的数据很多,都通过参数传递可能很不方便,这时可以利用公共环境耦合。

5.内容耦合:如果出现下列情况之一,两个模块间就发生了内容耦合。

  • a.一个模块访问另一个模块的内部数据。
    b.一个模块不通过正常入口而转到另一个模块的内部。
    c.两个模块有一部分程序代码重叠(只可能出现在汇编程序中)。
    d.一个模块有多个入口(这意味着一个模块有几种功能)。

最高程度的耦合是内容耦合。应该坚决避免使用内容耦合。

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

内聚

  • 内聚标志着一个模块内各个元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
  • 设计时应该力求做到高内聚,通常中等程度的内聚也是可以采用的,而且效果和高内聚相差不多。
  • 内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。

低内聚
1.偶然内聚:如果一个模块完成一组任务,这些任务彼此间即使有关系,关系也是很松散的,就叫做偶然内聚。

  • 在偶然内聚的模块中,各种元素之间没有实质性联系,很可能在一种应用场合需要修改这个模块,而在另一种应用场合又不允许这种修改,从而陷入困境。
  • 偶然内聚的模块出现修改错误的概率比其他类型的模块高得多。

2.逻辑内聚:如果一个模块完成的任务在逻辑上属于相同或相似的一类(例如一个模块产生各种类型的全部输出),则称为逻辑内聚。

  • 在逻辑内聚的模块中,不同功能混在一起,合用部分程序代码,即使局部功能的修改有时也会影响全局。
  • 这类模块的修改也比较困难。

3.时间内聚:如果一个模块包含的任务必须在同一段时间内执行(例如,模块完成各种初始化工作),就叫时间内聚。

  • 时间关系在一定程度上反映了程序的某些实质,时间内聚比逻辑内聚好一些。

中内聚
4.过程内聚:如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。

  • 使用程序流程图作为工具设计软件时,常常通过研究流程图确定模块的划分,这样得到的往往是过程内聚的模块。

5.通信内聚:如果模块中所有元素都使用同一个输入数据和(或)产生同一个输出数据,则称为通信内聚。

高内聚
6.顺序内聚:如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。

  • 根据数据流图划分模块时,通常得到顺序内聚的模块,这种模块彼此间的连接往往比较简单。

7.功能内聚:如果模块内所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。

三、启发式规则

1.改进软件结构提高模块独立性

2.模块规模应该适中

3.深度、宽度、扇出和扇入都应适当

(1)深度表示软件结构中控制的层数,它往往能粗略地标志一个系统的大小和复杂程度。

  • 如果层数过多则应该考虑是否有许多管理模块过分简单了,能否适当合并。

(2)宽度是软件结构内同一个层次上的模块总数的最大值。

  • 一般说来,宽度越大系统越复杂。对宽度影响最大的因素是模块的扇出。

(3)扇出是一个模块直接控制(调用)的模块数目。

  • 扇出过大意味着模块过分复杂,需要控制和协调过多的下级模块,扇出太大一般是因为缺乏中间层次,应该适当增加中间层次的控制模块。
  • 扇出过小(例如总是1)也不好。扇出太小时可以把下级模块进一步分解成若干个子功能模块,或者合并到它的上级模块中去。当然分解模块或合并模块必须符合问题结构,不能违背模块独立原理。
  • 经验表明,一个设计得好的典型系统的平均扇出通常是3或4(扇出的上限通常是5、9)。

(4)扇入表明有多少个上级模块直接调用它。

  • 扇入越大则共享该模块的上级模块数目越多,这是有好处的,但是,不能违背模块独立原理单纯追求高扇入。
  • 设计得很好的软件结构通常顶层扇出比较高,中层扇出较少,底层扇入到公共的实用模块中去(底层模块有高扇入)。

4.模块的作用域应该在控制域之内

(1)模块的作用域定义为受该模块内一个判定影响的所有模块的集合。
(2)模块的控制域是这个模块本身以及所有直接或间接从属于它的模块的集合。

5.力争降低模块接口的复杂程度

6.设计单入口单出口的模块

7.模块功能应该可以预测

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

面向数据流的设计方法的目标是给出设计软件结构的一个系统化的途径。
面向数据流的设计方法把信息流映射成软件结构,信息流的类型决定了映射的方法。

信息流有下述两种类型。

1.变换流

信息沿输入通路进入系统,同时由外部形式变换成内部形式,进入系统的信息通过变换中心,经加工处理以后再沿输出通路变换成外部形式离开软件系统。当数据流图具有这些特征时,这种信息流就叫作变换流。
变换流

2.事务流

数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行。这类数据流应该划为一类特殊的数据流,称为事务流。
事务流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值