本文用书:《软件工程导论》 第六版 清华大学出版社
1、在设计过程中,总体设计一般有哪两个主要阶段组成?
2、什么模块化?模块独立性包含哪些内容?度量准则是什么?
3、启发规则有哪些?
4、描绘软件结构的图形工具
5、面向数据流的设计方法
第五章 总体设计
5.1 设计过程
1.两个主要阶段:
(1)系统设计阶段;
(2)结构设计阶段。
2.九个步骤:
(1)设想供选择的方案。需求阶段的数据流图是总体设计的极好出发点。
(2) 选取合理的方案。
(3)推荐最佳方案。
(4)功能分解。(结构设计和过程设计)
(5)设计软件结构。
(6)设计数据库。
(7)制定测试计划。
(8)书写文档。
(9)审查和复查。
5.2 设计原理
1.模块化
(1)模块:一个拥有明确定义的输入、输出和特性的程序实体。
(2)模块化:将系统划分为若干个模块,每个模块完成一个子功能。
(3)并非模块分得越小越好,因为模块之间接口的复杂度和工作量增加。显然,每个软件系统都有一个最佳模块数M。注意选择分解的最佳模块数。下图描述了模块化与软件成本的关系。
2.抽象:抽出事物的本质特性而暂时不考虑它们的细节。
3.逐步求精:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
4.信息隐藏和局部化:
信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
局部化是指把一些关系密切的软件元素物理地放得彼此靠近。
5.模块独立(高内聚低耦合)
(1)三个基本属性:
⑴功能 即指该模块实现什么功能,做什么事情。必须注意:模块功能,应是该模块本身的功能加上它所调用的所有子模块的功能。
⑵逻辑 即描述模块内部怎么做。
⑶状态 即该模块使用时的环境和条件。
(2)定性准则:
耦合性:用于描述模块之间联系的紧密程度;
1.类型:
<1>数据耦合:若两个模块之间仅通过模块参数交换信息,且交换的信息全部为简单数据。
<2>复合耦合:
<3>控制耦合:若模块之间交换的信息中包含有控制信息(尽管有时控制信息是以数据的形式出现的)。
void output(flag) {
if (flag) printf("OK! ");
else printf("NO! ");
}
main() {
int flag; output(flag);
}/*主函数与output函数之间即为控制耦合关系*/
<4>公共耦合:若两个或多个模块通过引用公共数据相互联系。
<5>内容耦合:
一个模块直接访问另一模块的内部数据。
一个模块不通过正常入口转到另一模块的内部。
一个模块有多个入口。
两个模块有部分代码重迭。
内聚性:用于描述模块内部联系的紧密程度。
1.类型:
<1>偶然内聚:若一个模块由多个完成不同任务的语句段组成,各语句段之间的联系十分松散或根本没有任何联系,则称此模块的内聚为偶然内聚。
<2>逻辑内聚:若一个模块可实现多个逻辑上相同或相似的一类功能
<3>瞬时内聚:若一个模块包含了需要在同一时间段中执行的多个任务
<4>过程内聚:若一个模块中的各个部分相关,并且必须按特定的次序执行
<5>通信内聚:若一个模块中的各个部分使用同一个输入数据或产生同一个输出数据
<6>顺序内聚:若一个模块中的各个部分都与同一个功能密切相关,并且必须按照先后顺序执行(通常前一个部分的输出数据就是后一个部分的输入数据)
<7>功能内聚:若一个模块中各个组成部分构成一个整体并共同完成一个单一的功能
模块独立性比较强的模块应该是具有高内聚性和的低耦合度。
5.3 启发规则
1.改进软件结构提高模块独立性。(高内聚低耦合)
2.模块规模应该适中。(一页内<60行)
3.深度、宽度、扇出和扇入都应适中。
有关指标:
⑴深度:表示软件结构中从顶层模块到最底层模块的层数。
⑵宽度:表示控制的总分布。
⑶扇出数:指一个模块直接控制下属的模块个数。
⑷扇入数:指一个模块的直接上属模块个数。
模块的扇入扇出数不宜太多 一个模块调用其他模块的个数,称为该模块的扇出。模块的扇出不宜过大,一般认为不要超出7个。 一个模块被其他模块调用的个数,称为该模块的扇入。扇入越大,除服务性模块外,模块的扇入扇出数不宜太多。否则块间联系增加。
4.模块的作用域应该在控制域之内。
5.力争降低模块接口的复杂程度。
6.设计单入口单出口模块。
7.模块功能应该可以预测。
5.4 描绘软件结构的图形工具(略)
5.5 面向数据流的设计方法
1.两种数据流
2.变换分析设计
(1)复查基本系统模型
(2)复查并精化数据流图
(3)确定数据流图具有变换特性还是事务特性
(4)确定输入流和输出流的的边界,从而孤立出变换中心
左边输入流(I)、中间变换中心(O)、右边输出流(P)
(5)完成第一级分解
(6)完成第二级分解
(7)使用设计度量和启发规则对第一次分割得到的软件结构进一步精化
3.事务分析设计
与变换分析设计类似,不同的点在于孤立出的是事务中心(只有一个)