软件工程(九)

总体设计

这里写图片描述

概要设计任务

1.制定规范
2.系统构架设计
3.软件结构设计
4.公共数据结构设计
5.安全性设计
6.故障处理设计
7.可维护性设计
8.编写文档
9.概要设计评审

设计原理
模块化
如果一个大型程序仅由一个模块组成,很难被人理解。
设函数C(x)定义问题x的复杂程度,函数E(x)定义解决问题x需要的工作量(时间)。对于两个问题P1和P2,如果:
C(P1)>C(P2)
那么 E(P1)>E(P2)
根据解决问题的经验,有一个规律是:
C(P1+P2)>C(P1)+C(P2)
于是有 E(P1+P2)>E(P1)+E(P2)

这里写图片描述

抽象
逐步求精
信息隐蔽和局部化
模块独立
模块的独立性很重要,因为:
1)有效的模块化的软件比较容易开发出来;
2)独立的模块比较容易测试和维护。
模块独立程度可以由两个定性标准度量:耦合与内聚。

高内聚低耦合 高内聚低耦合 高内聚低耦合

一、耦合
耦合:指软件结构内不同模块彼此之间相互依赖(连接)的紧密程度。
模块的偶合分四类:

1)数据耦合
两个模块之间只是通过参数交换信息,而且交换的信息仅仅是数据。
数据耦合是最低程度的耦合。
2)控制耦合
两个模块之间所交换的信息包含控制信息。
控制耦合是中等程度的耦合。
3)公用耦合
两个或多个模块通过一个公共区相互作用时的耦合。
公共区可以是:全程数据区、共享通信区、内存公共覆盖区、任何介质上的文件、物理设备等。
软件结构中存在大量的公用耦合时会给诊断错误带来困难。
4)内容耦合
一个模块与另一个模块的内容直接发生联系。
内容耦合对维护会带来严重的困难。
程序中如果一个模块直接把程序转移到另一个模块中,或一个模块使用另一个模块内部的数据,都会产生内容耦合。内容耦合是最高程度的耦合,应该避免采用。

软件设计应追求尽可能松散耦合,避免强耦合,这样模块间的联系就越小,模块的独立性就越强,对模块的测试、维护就越容易。
因此建议:尽量使用数据耦合,少用控制耦合,限制公用耦合,完全不用内容偶合。

二、内聚
内聚标志着一个模块内各元素彼此结合的紧密程度,它是信息隐藏和局部化概念的自然扩展。
内聚:一个模块内部各个元素彼此结合的紧密程度。
它是衡量一个模块内部组成部分间整体统一性的度量。
内聚与耦合的关系:
内聚和耦合是密切相关,模块内的高内聚意味着模块间的松耦合。
开发的重点在内聚。

常见的内聚有七类。
1)功能内聚(Functional Cohesion)
如果一个模块内所有处理元素完成一个,而且仅完成一个功能,则称为功能内聚。
功能内聚是最高程度的内聚。但在软件结构中,并不是每个模块都能设计成一个功能内聚模块。
2)顺序内聚(Sequential Cohesion)
如果一个模块内处理元素和同一个功能密切相关,而且这些处理元素必须顺序执行,则称为顺序内聚。
3)通信内聚(Communicational Cohesion)
如果一个模块中所有处理元素都使用同一个输入数据和(或)产生同一个输出数据,称为通信内聚。
4)过程内聚(Procedural Cohesion)
如果一个模块内的处理元素是相关的,而且必须以特定的次序执行,称为过程内聚。
过程内聚与顺序内聚的区别是:
顺序内聚中是数据流从一个处理单元流到另一个处理单元,而过程内聚是控制流从一个动作流向另一个动作。
5)时间内聚(Temporal Cohesion)
如果一个模块包含的任务必须在同一段时间内执行,称为时间内聚。也称为瞬时内聚。
6)逻辑内聚(Logical Cohesion)
如果模块完成的任务在逻辑上属于相同或相似的一类,称为逻辑内聚。
对逻辑内聚模块的调用,常常需要有一个功能开关,由上层调用模块向它发出一个控制信号,在多个关联性功能中选择执行某一个功能。
这种内聚较差,增加了模块之间的联系,不易修改。
7)偶然内聚(Coincidental Cohesion)
如果一个模块由完成若干毫无关系的功能处理元素偶然组合在一起的,就叫偶然内聚。
偶然内聚是最差的一种内聚。
常犯这种错误的一种情况是:有时在写完程序后,发现一组语句在多处出现,于是为了节省空间而将这些语句作为一个模块设计,就出现偶然内聚。

软件设计中应该:力求做到高内聚,尽量少用中内聚,不用低内聚。

最后再说三次:

高内聚低耦合 高内聚低耦合 高内聚低耦合

**高内聚低耦合 高内聚低耦合 高内聚低耦合**

高内聚低耦合 高内聚低耦合 高内聚低耦合


欢迎关注我的微信个人订阅号
这里写图片描述
每天多学一点0.0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值