软件工程--总体设计
总体设计的任务
根据用户需求分析阶段得到的目标系统的逻辑模型确定一个合理的软件系统的体系结构.包括划分组成系统的模块,模块间的调用关系及模块间的接口关系,软件系统所用的数据结构或者数据库结构.
软件结构和过程
软件结构是软件元素(模块)间的关系表示,而软件元素间的关系是多种多样的,如调用关系,包含关系,从属关系和嵌套关系等,这些关系都可以表示为层次形式.层次结构是软件结构广泛应用的一种表示形式,因为它结构清晰,可理解性好,从而使可靠性,可维护性和可读性都得到提高.以模块为软件元素的层次结构是一种静态层次结构,它是在对"问题"的逐步定义过程中得到的,当问题的每一部分都能够由模块来实现时则软件的层次结构也就得到了.因为问题定义过程实际上是一种分解过程,隐含地表示了模块间的关系.
软件结构提供了软件模块间的组成关系,而软件过程是用以描述每个模块的操作细节,当然包括一个模块对下一层模块的操作细节.实际上,过程的描述就是关于某个模块算法的详细描述.
模块设计
模块设计有几个主要的概念,如图:
下面我为大家介绍一下这几个概念
模块化
在软件开发过程中,大型软件由于其控制路径多,涉及范围广而且变量数目多,总体复杂.模块化是为了使一个复杂的大型程序能被人的智力所管理,理想模块的特点如下:
抽象
面向对象中对象即是一种抽象,结构化分析方法中也涉及到抽象.抽象是一种思维方法,而模块设计中的抽象方法是指在认识事物时,忽略事物的细节,通过事物本质的共同特性来认识事物.软件工程的每一步都是对软件解法的抽象层次的一次细化.在可行性分析阶段,软件被看做是一个完整的系统部分;在需求分析期间,用在问题环境中的熟悉的术语来描述软件的解法;由总体设计阶段转入详细设计阶段,抽象的程度进一步减少;最后,当源程序写出来时,也就达到了抽象的最底层.
信息隐蔽
信息隐蔽是指在设计和确定模块时,使得一个模块内包含的信息(过程和数据),对于不需要这些信息的其他模块来说是不能访问的或者说是不可见的.信息隐蔽对于软件的测试与维护有很大的好处.这样,在修改期间,由于疏忽而引入的错误所造成的影响就可以局限在一个活几个模块内部,不至影响到软件的其他部分.
模块独立性
模块独立性是指软件系统中每个模块只涉及软件要求的具体子功能,而和软件系统中的其他的模块接口是简单的.模块的独立程度可由两个定性标准度量,即耦合和内聚.耦合衡量不同模块彼此间互相依赖(连接)的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度.
模块的耦合
耦合是对一个软件结构各个模块之间互连程度的度量.耦合强弱取决于模块间接口的复杂程度,调用模块的方式以及通过接口的信息.在软件设计中应该尽可能采用松散耦合的系统.在这样的系统中可以研究,测试或维护任何一个模块,而不需要对系统的其他模块有很多了解和影响.区分模块间耦合程度强弱的标准有:
我们应该采取的原则是:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合.
模块的内聚
模块的内聚是标识一个模块内各个元素彼此结合的紧凑程度,其处理动作的组合强度,设计时应力求做到高内聚.内聚和耦合是密切相关的,模块的高内聚往往意味着模块间的松耦合.内聚和耦合都是进行模块化设计的有力工具.区分模块内聚程度强弱的标准有:
总而言之,模块化,抽象,信息隐蔽和局部化概念的直接结果就是模块独立,高内聚低耦合才能获得较高的模块独立性.
结构设计
软件结构也可以有多种形式和风格,如:
在进行软件设计时,选择什么样的设计风格的一个重要因素是分析该软件应用的范围,每种设计风格各有所长,我们应根据具体应用进行选择.
总体设计的准则