软件概要设计是以需求分析所产生的文档为依据,着手解决实现“需求”的软件体系结构,简称软件结构。就像建筑工程中的盖大楼,需求分析主要是确定要盖满足什么样功能的大楼,而概要设计就是施工,盖起满足用户要求的大楼的框架。这一阶段确定软件结构的具体任务是将系统分解成模块,确定各模块的功能及调用关系,将用户的需求分配到适当的位置上去,得出系统的结构图。为了得到好的结构,需要一组标准化准则和工具,软件设计的基本原理、优化软件结构的准则及结构化设计方法在相应的软件工程化书籍中有详细的技术介绍。
软件详细设计就是要在概要设计的结果的基础上,考虑“怎样实现”这个软件系统,直到对系统中的每个模块给出足够详细的过程性描述。主要任务是:为每个模块确定采用的算法,选择某种适当的工具表达算法的过程,写出模块的详细过程性描述;确定每一模块使用的数据结构;确定模块接口的细节,包括对系统外部的接口和用户界面,对系统内部其他模块的接口,以及模块输入数据、输出数据及局部数据的全部细节;为每一个模块设计出一组测试用例,以便在编码阶段对模块代码(即程序)进行预定的测试,模块的测试用例是软件测试计划的重要组成部分,通常应包括输入数据,期望输出等内容。
概要设计确定了系统的体系结构,即划分了模块,将每个模块的功能及其相互间的联系确定了下来。详细设计是解决如何实现每个模块功能的问题,即设计处理过程,构造模块的实现算法,给出明确的表达,使之成为编程的依据。描述算法除了流程图外,还有一些别的工具,如PAD图、PDL语言(伪码)、HIPO图等。
软件设计的基础首先是深刻理解模块、模块化、分解与抽象、信息隐蔽、模块独立性及其定性标准这些基本概念,以及由这些概念形成的软件结构设计优化准则所起的作用。
实际上,软件设计过程的前后活动是彼此支持的,同时贯穿于软件需求和软件编码之间。软件设计在选择解决方案时,可以运用原形设计作为充分掌握情况的手段,要充分考虑候选解决方案及其优缺点,应该确定关键需求、设计问题和限制条件,以便在分析各种候选方案时使用。
软件设计要考虑软件体系结构,合理的软件体系结构是提高软件可维护性和可移植性的基础。在软件设计中,对于是否选择使用商业软件成品,要结合成本、进度、性能和风险来考虑。
软件设计方案的选择准则应该具备实质意义上的区别点,能指示达到某个平衡的生存周期解决方案。一般地,这些准则包括有成本、进度、性能和风险等的度量,也包括可维护性和可移植性的考虑。同时也受到那些影响开发活动和产品生存周期的需求驱动。
软件也和硬件一样,它的质量是设计出来的,生产出来的。其中,设计对软件质量具有关键性的影响。设计的重要性可从图22.1看出,(a)为经历了设计步骤后的效果,在软件使用和维修阶段,软件的问题少;反之,(b)为跳过设计步骤,到了使用和维修阶段,软件问题成堆,到了不可收拾的地步。基于这种情况,监理应强调:软件设计未完成,不得转入软件编码阶段。
良好的软件设计与所采用的软件设计方法、设计工具和设计准则有关。软件设计方法主要有面向数据流的设计和面向对象的设计。这些方法均有其优缺点和不同的应用领域。
软件设计监理的基本准则包括:审查提交的文档是否齐全,审查文档编制与描述工具是否符合规范。确定承办单位提出的软件总体结构设计是否实现了软件需求规格说明的要求,评价软件设计方案与数学模型的可行性,评价接口设计方案和运行环境的适应性,审查软件集成测试计划的合理性和完备性,审查数据库设计的完备性和一致性。并确定该阶段文档能否作为详细设计的依据,决定可否转入详细设计阶段。确认软件详细设计文档的内容符合软件编码的要求。
各省软考办 | ||||||||||