在完成对软件系统的需求分析之后,接下来需要进行的是软件系统的概要设计。一般说来,对于较大规模的软件项目,软件设计往往被分成两个阶段进行。首先是前期概要设计,用于确定软件系统的基本框架;然后是在概要设计基础上的后期详细设计,用于确定软件系统的内部实现细节。
概要设计也称总体设计,其基本目标是能够针对软件需求分析中提出的一系列软件问题,概要地回答如何解决。例如,软件系统将采用什么样的体系构架、需要创建哪些功能模块、模块之间的关系如何、数据结构如何?软件系统需要什么样的网络环境提供支持、需要采用什么类型的后台数据库等。
应该说,软件概要设计是软件开发过程中一个非常重要的阶段。如果软件系统没有经过认真细致的概要设计,就直接考虑它的算法或直接编写源程序,这个系统的质量就很难保证。许多软件就是因为结构上的问题,使得它经常发生故障,而且很难维护。
设计过程
概要设计基本过程如下图所示,它主要包括三个方面的设计。首先是系统构架设计,用于定义组成系统的子系统,以及对子系统的控制、子系统之间的通信和数据环境等;然后是软件结构和数据结构的设计,用于定义构造子系统的功能模块、模块接口、模块之间的调用与返回关系,以及数据结构、数据库结构等。
概要设计要求建立在需求分析基础之上,软件需求文档是软件概要设计的前提条件。只有这样,才能使得开发出来的软件系统最大限度地满足用户的应用需要。
实际上,概要设计的过程也就是将需求分析之中产生的功能模型、数据模型和行为模型等分析结论进行转换,由此产生设计结论的过程。在从分析向设计的转换过程中,概要设计能够产生出有关软件的系统构架、软件结构和数据结构等设计模型来。这些结论将被写进概要设计文档中,作为后期详细设计的基本依据,能够为后面的详细设计、程序编码提供技术定位。
需要注意的是,概要设计所能够获得的还只是有关软件系统的抽象表达式,需要专心考虑的是软件系统的基本结构,至于软件系统的内部实现细节如何,则被放到以后详细设计中去解决。例如模块,概要设计中的模块只是一个外壳,虽然它有确定的功能边界,并提供了通信的接口定义,但模块内部还基本上是空的,诸多具体的功能加工细节则必须等到详细设计完成以后才能确定下来。因此,在有关软件设计的全部工作中,概要设计所提供的并不是最终设计蓝图,而只是一份具有设计价值的具体实施方案与策略,用于把握系统的整体布局。尽管概要设计并不涉及系统内部实现细节,但它所产生的实施方案与策略将会最终影响软件实现的成功与否,并影响到今后软件系统维护的难易程度。
设计任务
概要设计阶段的任务主要有以下几个方面:
1.制定规范
具有一定规模的软件项目总是需要通过团队形式实施开发,为了适应团队式开发的需要,在进入软件开发阶段之后,首先应该为软件开发团队制定在设计时应该共同遵守的规范,以便协调与规范团队内各成员的工作。
概要设计时需要制定的规范主要有:
(1)设计文档的编制标准,包括文档体系、文档格式、图表样式等。
(2)信息编码形式,硬件、操作系统的接口规约,命名规则等。
(3)设计目标、设计原则。
2.系统构架设计
系统构架设计就是根据系统的需求框架,确定系统的基本结构,以获得有关系统创建的总体方案。其主要设计内容包括:
(1)根据系统业务需求,将系统分解成诸多具有独立任务的子系统。
(2)分析子系统之间的通信,确定子系统的外部接口。
(3)分析系统的应用特点、技术特点以及项目资金情况,确定系统的硬件环境、软件环境、网络环境和数据环境等。
(4)根据系统整体逻辑构造与应用需要,对系统进行整体物理部署与优化。
很显然,当系统构架被设计完成之后,软件项目就可按每个具有独立工作特征的子系统为单位进行任务分解了,由此可以将一个大的软件项目分解成许多小的软件子项目。
3.软件结构设计
软件结构设计是在系统构架确定以后,对组成系统的各个子系统的结构设计。例如,将子系统进一步分解为诸多功能模块,并考虑如何通过这些模块来构造软件。
软件结构设计主要内容包括:
(1)确定构造子系统的模块元素。
(2)根据软件需求定义每个模块的功能。
(3)定义模块接口与设计模块接口数据结构。
(4)确定模块之间的调用与返回关系。
(5)评估软件结构质量,进行结构优化。
4.公共数据结构设计
概要设计中还需要确定那些将被许多模块共同使用的公共数据的构造。例如,公共变量、
数据文件以及数据库中数据等,可以将这些数据看作为系统的公共数据环境。
对公共数据的设计包括:
(1)公共数据变量的数据结构与作用范围。
(2)输入、输出文件的结构。
(3)数据库中的表结构、视图结构以及数据完整性等。
5.安全性设计
系统安全性设计包括:操作权限管理设计、操作日志管理设计、文件与数据加密设计以及特定功能的操作校验设计等。概要设计需要对以上方面的问题作出专门的说明,并制定出相应的处理规则。
例如操作权限,假如应用系统需要具有权限分级管理的功能,则概要设计就必须对权限分级管理中所涉及的分级层数、权限范围、授权步骤以及用户账号存储方式等,从技术角度作出专门的安排。
6.故障处理设计
软件系统工作过程中难免出现故障,概要设计时需要对各种可能出现的来自于软件、硬件以及网络通信方面的故障作出专门考虑。例如,提供备用设备、设置出错处理模块、设置数据备份模块等。
7.可维护性设计
软件系统在投入使用以后必将面临维护,如改正软件错误、扩充软件功能等。对此,概要设计需要作出专门安排,以方便日后的维护。例如,在软件中设置用于系统检测维护的专用模块;预计今后需要进行功能扩充的模块,并对这些接口进行专门定义。
8.编写文档
概要设计阶段需要编写的文档包括:概要设计说明书、数据库设计说明书、用户操作手册。此外,还应该制定出有关测试的初步计划。
上述文档中,概要设计说明书是概要设计阶段必须产生的基本文档,涉及系统目标、系统构架、软件结构、数据结构、运行控制、出错处理、安全机制等诸多方面的设计说明。
9.概要设计评审
在诸多概要设计任务完成之后,应当组织对概要设计的评审。
概要设计评审内容主要包括:
(1)需求确认:确认所设计的软件是否已覆盖了所有已确定的软件需求。
(2)接口确认:确认该软件的内部接口与外部接口是否已经明确定义。
(3)模块确认:确认所设计的模块是否满足高内聚、低耦合的要求,模块的作用范围是否在其控制范围之内。
(4)风险性:该设计在现有技术条件下和预算范围内是否能按时实现。
(5)实用性:该设计对于需求的解决是否实用。
(6)可维护性:该设计是否考虑了今后的维护。
(7)质量:该设计是否表现出了良好的质量特征。