软件设计从概念上分为结构设计和详细设计两个阶段。
结构设计又称总体设计,主要任务是制订系统实施方案和设计规范并合理确定软件系统的整体模块结构及接口关系。
详细设计又称模块设计,主要任务是详细规定每个模块功能的具体实现算法。
软件设计的主要过程:将软件需求阶段产生的系统模型转化为软件设计模型。
概念:软件结构设计就是确定软件系统中每个过程是由哪些模块组成的,以及这些模块之间的关系
(1)从工程管理角度划分:
①总体设计:即概要设计,将软件需求转化为数据结构和软件的系统结构;确定系统接口、全局数据结构和数据库模式。
②详细设计:即过程设计,通过对结构表示进行细化,得到软件的详细的数据结构和算法;并用适当方式表示算法和数据结构的细节。
(
2)从技术角度划分:
①数据设计:将信息域分析模型变换成软件实现所需要的数据结构。
②体系结构设计:体系结构设计定义了软件的整体结构。
③接口设计:接口设计描述了软件内部、软件和写作系统之间以及软件同人之间如何通信。
④部件级设计:部件级设计将软件体系结构的结构性元素变换为对软件部件的过程性描述。
目标:综合采用各种技术手段,将系统需求转换为数据结构、模块结构(或对象/类结构)的表达形式,并实现系统的性能、安全性、可靠性要求,取得最佳方案。
系统应该如何实现
(1)最佳的方案设计
(2)制订设计规范、标准及约定原则
(3)软件结构设计
内容:
①采用某种设计方法,按照模块结构的原则,通过分解细化将一个复杂的系统划分为若干模块,逐步、逐层的设计软件的模块层次结构。
②确定每个模块功能,建立与已确定的软件需求的对应关系。
③确定模块之间的层次调用关系,模块之间的接口,评价模块结构的质量。
(4)数据结构及数据库设计
(5)网络系统设计
(6)系统安全性设计
(7)系统性能、可靠性设计
(8)设计文档编写
(9)评审
(1)结构化设计方法
与结构化分析方法相配合的设计方法
内容:根据系统的数据流进行设计,称为面向数据流的设计或者过程驱动的设计,遵循自顶向下的系统化分解的思想,应用一组转换规则讲软件的数据流图逐步转换为功能相对独立、执行相互协调、数据相互交换的一组模块的层次结构,并综合质量评价因素进行结构优化。
(2)数据结构驱动的设计方法
根据系统的数据结构进行设计,称为面向数据结构的设计或者数据驱动设计。
内容:首先用表达工具描述数据结构的格式,然后应用一组规则将数据结构格式转换为程序的控制结构格式,最后在细化定义。
(3)面向对象的设计方法
与面向对象分析方法相匹配的设计方法。
内容:依据面向对象分析建立的对象/类的分析模型,进一步分解和改进这个对象的层次模型,再通过确定对象的构造以及对象之间的动态关系,最后实现对象中提供的方法的过程设计。
结构化设计的核心思想:如何应用抽象的原则,将系统功能逐层分解为层次化的模块结构。。
(1)抽象手段
① 过程抽象
② 数据抽象
(2)细化
在原始说明的基础上进行详细说明,随着不断细化给出更多的细节。
(1)模块
概念:指具有相对独立性的,由数据说明、执行语句等程序对象构成的集合。模块可以被单独命名,而且可通过名字来访问,例如,过程、函数、子程序、宏等都可以作为模块。
属性:
① 接口:指模块的输入与输出
② 功能:指模块实现什么功能
③ 逻辑:描述内部如何实现要求的功能及所需的数据,即描述模块内部该怎么做。
④ 状态:指该模块的运行环境和条件,即模块的调用与被调用关系。
(2)模块化
概念:按照规定原则,把软件划分成若干个模块,每个模块完成一个子功能,把这些模块集中起来组成一个整体,可以完成指定的功能,实现问题的求解,实际上是系统分解和抽象的过程。
(1)耦合
概念:指模块间互相连接的紧密程度的度量。
划分:
①非直接耦合
②数据耦合
③标记耦合
④控制耦合
⑤外部耦合
⑥公共耦合
⑦内容耦合
(2)内聚
内聚性:是对一个模块内部各个组成元素之间相互结合的紧密程度的度量指标。
划分:
①功能内聚
②顺序内聚
③通信内聚
④过程内聚
⑤时间内聚
⑥逻辑内聚
⑦偶然内聚
(1)降低模块的耦合性,提高模块的内聚性
(2)模块规模应该适中
(3)选择适当的深度、宽度、扇出和扇入
(4)模块的作用域应处于其控制域范围之内
(5)尽量降低模块的接口复杂度
(6)设计单入口单出口的模块
(7)模块功能应该可以预测
(1)变换型数据流图
(2)事务型数据流图
(1)分析并进一步精化系统的数据流图
(2)确定数据流的结构特征
(3)采用变换型设计方法或者事务型设计方法将数据流图逐步地转换为系统的模块结构
(4)根据模块独立性原则和设计质量评价标准,进一步精化模块结构。
由变换型数据流图映射为软件结构的过程,称为变换分析。
步骤:
(1)确定输入、输出、变换的加工集合
(2)完成第一级分解,确定系统顶层模块
(3)继续下层分解
由变换型数据流图映射为软件结构的过程,称为变换分析。
步骤:
(1)确定输入、事物变换、输出路径的集合
(2)完成第一层分解,确定系统顶层模块
(3)继续下层分解