第5章 总体设计(软件工程导论 第6版)

1、总体设计的基本目的:回答“概括地说,系统应该如何实现”这个问题

2、总体设计的任务

(1)划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等

(2)设计软件的结构——确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系

3、总体设计的必要性:可以站在全局高度上,花较少成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低成本开发出较高质量的软件系统

4、设计过程

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

(2)典型的总体设计过程包括9个步骤

      1)设想供选择的方案

      2)选取合理的方案

      3)推荐最佳方案

      4)功能分解

      5)设计软件结构

      6)设计数据库

      7)制定测试计划

      8)书写文档(系统说明、用户手册、测试计划、详细的实现计划、数据库设计结果)

      9)审查和复审

5、设计原理

软件设计过程中应该遵循的基本原理:模块化、抽象、逐步求精、信息隐藏和局部化、模块独立

1.模块化

(1)模块:由边界元素限定的相邻程序元素的序列,且有一个总体标识符代表它。模块是构成程序的基本构件

(2)模块化:把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求

(3)模块化的根据:把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了

(4)模块化的后果:随着模块数目增加,设计模块间接口所需要的工作量也将增加

(5)模块化优点

    ①使软件结构清晰,容易设计也容易阅读和理解

    ②使软件容易测试和调试,提高软件的可靠性

    ③提高软件的可修改性

    ④有助于软件开发工程的组织管理

2.抽象

(1)抽象:把事物相似的方面集中和概括起来,暂时忽略他们之间的差异。抽象就是抽出事物的本质特性而暂时不考虑它们的细节

(2)优点

    ①简化软件的设计和实现

    ②提高软件的可理解性和可测试性

    ③使软件更容易维护

3.逐步求精

(1)逐步求精是人类解决复杂问题时采用的基本方法,实质上是自顶向下的细化过程

(2)逐步求精定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑

(3)作用:帮助软件工程师把精力集中在与当前开发阶段最相关的那些方面上,忽略那些对整体解决方案来说虽然是必要的,然而目前还不需要考虑的细节,这些细节留到以后再考虑

(4)抽象与求精是一对互补的概念

①抽象使得设计者能够说明过程和数据,同时却忽略低层细节

②求精则帮助设计者在设计过程中逐步揭示出低层细节

4.信息隐藏和局部化

(1)信息隐藏:一个模块内包含的信息对于不需要这些信息的模块来说,是不能访问的

(2)局部化:把一些关系密切的软件元素物理地放的彼此靠近

(3)局部化有助于实现信息隐藏

(4)优点:在修改期间由于疏忽而引入的错误很少可能传播到软件的其他部分

5.模块独立

(1)模块独立:是模块化、抽象、信息隐藏和局部化概念的直接结果。是具有独立功能而且和其它模块之间没有过多的相互作用的模块

(2)模块独立的重要性

    ①有效的模块化的软件比较容易开发

    ②独立的模块比较容易测试和维护

(3)模块独立程度的两个定性度量标准:高内聚&低耦合

     ①耦合:衡量不同模块间互相依赖的紧密程度,是对一个软件结构内不同模块之间互连程度的度量

     ②内聚:衡量一个模块内部各个元素彼此结合的紧密程度,标志着一个模块内各个元素彼此结合的紧密程度

(4)耦合

①影响耦合强弱的因素:模块间接口的复杂程度、进入或访问一个模块的点、以及通过接口的数据

②耦合的类型

●数据耦合(低耦合):两个模块彼此间通过参数交换信息,且交换的信息仅仅是数据

●控制耦合(中等程度耦合):两个模块彼此间通过参数交换信息,且传递信息中有控制信息

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

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

●内容耦合(最高程度的耦合)

③内容耦合出现的情况

●一个模块访问另一个模块的内部数据

●一个模块不通过正常入口而转到另一个模块的内部

●两个模块有一部分程序代码重叠(只可能出现在汇编程序中)

●一个模块有多个入口(这意味着一个模块有几种功能)

④耦合的设计规则:尽量使用数据耦合,少用控制耦合和特征耦合,限制公共环境耦合的范围,完全不用内容耦合

(5)内聚

★偶然内聚(低内聚):一个模块完成的任务间的关系很松散

★逻辑内聚(低内聚):一个模块完成的任务在逻辑上属于相同或相似的一类

★时间内聚(低内聚):一个模块包含的任务必须在同一段时间内执行

✱过程内聚(中内聚):一个模块内的处理元素是相关的,且必须以特定的次序执行

✱通信内聚(中内聚):一个模块的所有元素都使用同一个输入数据和(或)产生同一个输出数据

✸顺序内聚(高内聚):一个模块内的处理元素和同一个功能密切相关,且这些处理必须顺序执行

✸功能内聚(最高程度的内聚):模块的所有处理元素属于一个整体,完成一个单一的功能

6、启发规则

(1)改进软件结构提高模块独立性(降低耦合、提高内聚)

(2)模块规模应该适中

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

深度:软件结构中控制的层数,能粗略标志一个系统的大小和复杂程度

宽度:软件结构内同一个层次上的模块总数的最大值

扇出:一个模块直接控制(调用)的模块数量

扇入:有多少个上级模块直接调用它

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

作用域:受该模块内一个判定影响的所有模块的集合

控制域:模块本身以及所有直接或间接从属于它的模块的集合

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

(6)设计单入口单出口的模块

(7)模块功能应该可以预测

7、描绘软件结构的图形工具

(1)层次图(H图):描绘软件的层次结构,适用于自顶向下设计软件的过程

(2)HIPO图(H图+IPO图):“层次图+输入/处理/输出图”,具有可追踪性

(3)结构图:描绘软件结构的图形工具

结构图基本符号:

①模块:方框,框内注明模块的名字或主要功能

②模块调用关系:方框间连线(上方的模块调用下方的模块)

③模块间传递的信息:带注释的箭头

④数据信息:箭头尾部空心圆

⑤控制信息:箭头尾部实心圆

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

1、面向数据流的设计方法:把信息流映射成软件结构,信息流的类型决定了映射的方法

2、信息流的类型

(1)变换流

信息沿输入通路进入系统,同时由外部形式转换成内部形式,进入系统的信息流通过变换中心,经加工处理后沿输出通路变换成外部形式离开软件系统。具有较明显的输入、变换和输出叫做变换流

(2)事务流

①事务流:数据沿输入通路到达一个处理T,这个处理根据输入数据的类型在若干个动作序列中选出一个来执行

②事务中心(处理T)的任务:

   A.接收输入数据(输入数据又称为事务)

   B.分析每个事务以确定它的类型

   C.根据事务类型选取一条活动通路

猜你喜欢

转载自blog.csdn.net/weixin_65213208/article/details/127105157