对于概要设计一般有两种方法,一种是面向对象的设计方法,成为oob,另外一种则是面向procedure的结构化设计方法,在面向对象方法出现以前,结构化的设计方法使用得最为广泛,其自身也有一套成熟的解决方案,即完成DFD图和软件体系结构的映射,进而将设计转化为程序实现。 软件体系结构的任务包括下面几个方面:(1)采用某种设计方法,将一个复杂的系统按功能划分为模块的层次结构;(2)确定模块之间的调用关系;(3)确定每个模块的功能,建立与已确定的软件需求的对应关系;(4)确定模块之间的接口,即模块间传递的信息,并设计模块接口的信息结构;(5)评估模块划分的质量及导出模块结构的规则。而该任务本身也有一些原则,比如争取低耦合、高内聚。模块规模适中,适当控制深度和宽度,降低接口的复杂程度,单出单入,避免内容耦合,模块功能可预测,相同输入必产生相同输出。
软件体系结构的任务包括下面几个方面:(1)采用某种设计方法,将一个复杂的系统按功能划分为模块的层次结构;(2)确定模块之间的调用关系;(3)确定每个模块的功能,建立与已确定的软件需求的对应关系;(4)确定模块之间的接口,即模块间传递的信息,并设计模块接口的信息结构;(5)评估模块划分的质量及导出模块结构的规则。而该任务本身也有一些原则,比如争取低耦合、高内聚。模块规模适中,适当控制深度和宽度,降低接口的复杂程度,单出单入,避免内容耦合,模块功能可预测,相同输入必产生相同输出。
在软件体系结构设计当中,需要用到的最广泛的为sc(structure chart)图,它描述软件系统的层次和分块结构关系,体现模块与模块之间的联系与通讯,从而表达软件的体系结构。体系结构设计的基础是分析模型,在面向数据流的方法中,分析模型主要表现为DFD,因此体系结构的设计过程就是由DFD产生SC的过程。其中对于一些图的规则介绍如下:
* 结构图的图示符号以用矩形表示的模块;
* 用模块间带箭头的连线表示的调用关系;
* 在调用关系边上用短箭头表示的模块间信息传递关系;
* 扇出(fan-out) = 一个模块直接调用/控制的模块数 3 <= fan-out <= 9;
* 扇入(fan-in) = 直接调用该模块的模块数,在不破坏独立性的前提下,fan-in 大的比较好;
* 如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。
为每一个成分(模块或数据)适当地命名使人们能直观理解,一个模块在结构图中只能出现一次。尽可能将整个画在一张纸上以便于整体理解。输入模块在左,输出模块在右,变换模块居中。程序有层次性和过程性两方面的特点,通常应该先考虑层次特性,再考虑过程特性。结构图描述的是程序的层次特性,即某个模块负责管理哪些模块,这些模块又依次管理什么模块等。
体系结构风格是对某个体系结构的一组约束,定义了能满足要求的一组或一族体系结构,它也可以看作是提供软件系统高层组织的元模型。与目前很热的设计模式对应,体系结构风格可以看作是软件高层的设计模式,即宏体系结构模式。对于当前比较常用的体系结构风格可以大致分类如下:
* 通常结构:层次结构、管道和过滤器、黑板;
* 分布式系统:客户/服务器、三层、中介;
* 交互式系统:模型—视图—控制器、表示—抽象—控制;
* 可适配系统:微内核,反映式;
* 其它:批处理、解释器、进程控制、基于规则。
http://esf.sz.soufun.com/zt/201103/djllk06.html