总体设计 - 设计过程
软件设计的本质
软件设计曾被狭隘地认为是“编程序”或“写代码”,但这种观点忽视了软件设计在软件开发过程中的重要作用。软件设计是软件开发过程中承前启后的工作,它依据软件需求规格说明书建立软件设计方案,作为下一步程序编码的依据。设计阶段是形成软件质量的关键,提供了可用于质量评估的软件表示,并且是将需求准确转换为完整的软件产品或系统的唯一办法。
软件设计过程
概要设计
将软件需求转化为数据结构和软件的系统结构,即系统的模块划分。
详细设计
通过对系统的结构表示(每个模块的内部工作)进行细化,得到软件的详细的数据结构和算法。
总体设计过程
总体设计过程通常由两个主要阶段组成:
- 系统设计阶段:确定系统的具体实现方案;
- 结构设计阶段:确定软件结构。
典型的总体设计过程包括以下9个步骤:
1.设想供选择的方案:需求分析阶段得出的数据流图是总体设计的极好的出发点。
2. 选取合理的方案:从一系列方案中选取若干个合理的方案,通常至少选取低成本、中等成本和高成本的3种方案。
3. 推荐最佳方案:分析员应该综合分析对比各种合理方案的利弊,推荐一个最佳的方案,并且为推荐的方案制定详细的实现计划。
4. 功能分解:对程序(特别是复杂的大型程序)的设计,通常分为两个阶段完成。
5. 设计软件结构:通常程序中的一个模块完成一个适当的子功能。应该把模块组织成良好的层次系统。
6. 设计数据库:在需求分析阶段所确定的系统数据需求的基础上,设计数据库。
7. 制定测试计划:在软件开发的早期阶段考虑测试问题,能促使软件设计人员在设计时注意提高软件的可测试性。
8. 书写文档:包括系统说明、用户手册、测试计划、详细的实现计划和数据库设计结果。
9. 审查和复审:涉及可维护性、质量、各种选择方案、限制、可追溯性、接口、风险、实用性和技术清晰度等方面。
总体设计 - 设计原理
模块化
模块是可单独命名和可编址的部分,如procedure, function, subroutine, block, Macro。模块化是程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,集成这些模块构成一个整体。
模块化原理的好处
- 软件结构清晰,容易设计、阅读和理解;
- 软件容易测试和调试,提高可靠性;
- 提高软件的可修改性;
- 有助于软件开发工程的组织管理。
模块化的限制
随着模块数目增加,设计模块间接口所需要的工作量也将增加。
抽象
抽象是抽出事物的本质特性而暂时不考虑它们的细节。软件设计过程应当是在不同抽象级别考虑和处理问题的过程。
过程抽象与数据抽象
- 过程抽象:把完成特定功能的动作序列抽象为一个过程名和参数表。
- 数据抽象:把一个数据对象的定义抽象为一个数据类型名。
抽象举例
以开发一个CAD软件的三层抽象为例,从用问题所处环境的术语描述软件,到任务需求的描述,再到程序过程表示。
逐步求精
逐步求精是一种自顶向下的设计策略,通过逐步分解对功能的宏观陈述而开发出层次结构。
信息隐藏和局部化
信息隐藏原理指出模块应该设计成其中包含的信息对不需要这些信息的其他模块来说是不可访问的。局部化指把一些关系密切的软件元素物理地放得彼此靠近。
模块独立性
模块独立性是模块化、抽象、信息隐藏和局部化概念的直接结果。模块的独立程度可以由耦合和内聚两个定性标准度量。
- 耦合(Coupling):衡量不同模块彼此间互相依赖的紧密程度;
- 内聚(Cohesion):衡量一个模块内部各个元素彼此结合的紧密程度。