概要设计和详细设计
概要设计和详细设计
在软件设计中,大家经常问到的一个问题是:概要设计应该怎样一个概要法,详细设计应该怎样一个详细法?
一般公司的研发流程是瀑布型的,这个模型中的分析、设计阶段是基于经典的结构化方法。
结构化设计方法的基本思路是:按照问题域,将软件逐级细化,分解为不必再分解的的模块,每个模块完成一定的功能,为一个或多个父模块服务(即接受调用),也接受一个或多个子模块的服务(即调用子模块)。模块的概念,和编程语言中的子程序或函数是对应的。
这样一来,设计可以明显地划分成两个阶段:
- 概要(结构)设计阶段:把软件按照一定的原则分解为模块层次,赋予每个模块一定的任务,并确定模块间调用关系和接口。
- 详细设计阶段:依据概要设计阶段的分解,设计每个模块内的算法、流程等。
一、概要设计阶段
在这个阶段,设计者会大致考虑并照顾模块的内部实现,但不过多纠缠于此。
- 主要集中于划分模块、分配任务、定义调用关系。
- 模块间的接口与传参在这个阶段要定得十分细致明确,应编写严谨的数据字典,避免后续设计产生不解或误解。
- 概要设计一般不是一次就能做到位,而是反复地进行结构调整。
- 典型的调整是合并功能重复的模块,或者进一步分解出可以复用的模块。
- 在概要设计阶段,应最大限度地提取可以重用的模块,建立合理的结构体系,节省后续环节的工作量。
概要设计文档最重要的部分是分层数据流图、结构图、数据字典以及相应的文字说明等。以概要设计文档为依据,各个模块的详细设计就可以并行展开了。
二、详细设计阶段
- 在这个阶段,各个模块可以分给不同的人去并行设计。
在详细设计阶段,设计者的工作对象是一个模块,根据概要设计赋予的局部任务和对外接口,设计并表达出模块的算法、流程、状态转换等内容。这里要注意,如果发现有结构调整(如分解出子模块等)的必要,必须返回到概要设计阶段,将调整反应到概要设计文档中,而不能就地解决,不打招呼。
- 详细设计文档最重要的部分是模块的流程图、状态图、局部变量及相应的文字说明等。一个模块一篇详细设计文档。
- 概要设计文档相当于机械设计中的装配图,而详细设计文档相当于机械设计中的零件图。文档的编排、装订方式也可以参考机械图纸的方法。
- 概要设计中较顶层的部分便是所谓的方案。方案文档的作用是在宏观的角度上保持设计的合理性。
有的项目采用面向对象的分析、设计方法。可能在概要设计、详细设计的分工上疑问更多。其实,面向对象的分析、设计方法并没有强调结构化方法那样的阶段性,因此一般不引入概要、详细设计的概念。如果按照公司的文档体系,非要有这种分工的话,可以将包的划分、类及对象间的关系、类的对外属性、方法及协作设计看做
- 概要设计;类属性、方法的内部实现看做详细设计。
- 需求分析--产生软件功能规格说明书,需要确定用户对软件的需求,要作到明确、无歧义。不涉及具体实现方法。用户能看得明白,开发人员也可据此进行下面的工作(概要设计)。
- 概要设计--产生软件概要设计说明书,说明系统模块划分、选择的技术路线等,整体说明软件的实现思路。并且需要指出关键技术难点等。
- 详细设计--产生软件详细设计说明书,对概要设计的进一步细化,一般由各部分的担当人员依据概要设计分别完成,然后在集成,是具体的实现细节。理论上要求可以照此编码。
三、概要设计和详细设计的区别与联系
概要设计 | 详细设计 | |
---|---|---|
定义 | 设计软件的结构,包括组成模块,模块的层次结构,模块的调用关系,每个模块的功能等等。同时,还要设计该项目的应用系统的总体数据结构和数据库结构,即应用系统要存储什么数据,这些数据是什么样的结构,它们之间有什么关系。 | 为每个模块完成的功能进行具体的描述,要把功能描述转变为精确的、结构化的过程描述。 |
描述方式 | 通常得到软件结构图 | 流程图、N-S图、PAD图、伪代码等 |
采用方法 | 实现软件的总体设计、模块划分、用户界面设计、数据库设计等等 | 根据概要设计所做的模块划分,实现各模块的算法设计,实现用户界面设计、数据结构设计的细化等等 |
数据库设计 | 里面的数据库设计应该重点在描述数据关系上,说明数据的来龙去脉,在这里应该结合我们的一下结果数据,说明这些结果数据的源点,我们这样设计的目的和原因 | 应该是一份完善的数据结构文档,就是一个包括类型、命名、精度、字段说明、表说明等内容的数据字典。 |
功能 | 重点在功能描述,对需求的解释和整合,整体划分功能模块,并对各功能模块进行详细的图文描述,应该让读者大致了解系统作完后大体的结构和操作模式 | 说明实现功能所需的类及具体的方法函数,包括涉及到的sql语句等 |
关系 | 是详细设计的基础,必须在详细设计之前完成,概要设计经复查确认后才可以开始详细设计。概要设计,必须完成概要设计文档,包括系统的总体设计文档、以及各个模块的概要设计文档。每个模块的设计文档都应该独立成册。 | 必须遵循概要设计来进行。详细设计方案的更改,不得影响到概要设计方案;如果需要更改概要设计,必须经过项目经理的同意。详细设计,应该完成详细设计文档,主要是模块的详细设计方案说明。和概要设计一样,每个模块的详细设计文档都应该独立成册。 |
- 软件设计采用自顶向下、逐次功能展开的设计方法,首先完成总体设计,然后完成各有机组成部分的设计。根据工作性质和内容的不同,软件设计分为概要设计和详细设计。
四、软件设计的过程
1、制定规范
在软件开发组设计标准,规定编码的信息格式,命名规则
2、软件系统结构的总体设计
基于功能层次,划分模块,采用抽象、分层、模块分解
3、处理方式设计
确定为实现功能的需求所必须的算法,评估算法的性能。
4、数据结构设计
确定数据的模式,子模式,安全性,整体性,输入输出文件的结构和模式
5、可靠性设计(质量设计)
运行期间为了使用要求,保证可靠的运行
6、编写概要设计阶段的文档
概要设计说明书,数据库的说明书,进一步完善用户手册,制定初步的测试计划
7、概要设计评审
概要设计说明书,评审的要点:可追溯性、接口、
模块的内部,高内聚、低耦合
模块的作用于是否在控制范围内,实用性,技术清晰性
其他的选择方案,
8、详细设计阶段
确定软件各个组成部分的算法,
选定某种过程的表达形式,
进行详细设计的评审,
五、软件设计的基础
自顶向下,逐步细化
将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化
软件结构
软件的结构包括两部分。程序的模块结构和数据的结构。
程序结构
树状结构、网状结构、
结构图
反应程序中模块中模块之间的层次调用关系和联系
模块
模块的调用关系和接口
模块之间的信息传递
表示模块A有条件地调用另一个模块
模块化
能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。
抽象化
软件系统进行模块设计时,可以有不同的抽象层次。
功能抽象:
抽象层次1(高层次的抽象):用问题所处环境的术语来描述这个软件。
抽象层次2:任务需求的描述。
抽象层次3:程序过程表示。
数据抽象:在不同层次上描述数据对象的细节,定义与该数据对象相关的操作。
模块独立性:
模块:一般具有如下三个基本属性:功能、逻辑、状态、模块的独立性、采用耦合和内聚
六、概要设计说明书:
1、引言
1.1编写目的
1.2项目背景
1.3定义
1.4参考资料
2、任务概述
2.1目标
2.2运行环境
2.3需求概述
2.4条件与限制
3、总体设计
3.1处理流程
3.2总体结构和模块外部设计
3.3功能分配
4、接口设计
4.1外部接口
4.2内部接口
5、数据结构设计
5.1逻辑结构设计
5.2物理结构设计
5.3数据结构与程序的关系
6、运行设计
6.1运行模块的组合
6.2运行控制
6.3运行时间
7、出错处理设计
7.1出错输出信息
7.2出错处理对策
8、安全保密设计
9、维护设计
详细设计说明书
1、引言
1.1编写目的
1.2项目背景
1.3定义
1.4参考资料
2、总体设计
2.1需求概述
2.2软件结构
3、程序描述
3.1功能
3.2性能
3.3输入项目
3.4输出项目
3.5算法
3.6程序逻辑
3.7接口
3.8存储分配
3.9限制条件
3.10测试要点