软件开发流程(转载)
1. 产品需求定义
产品需求定义的目标是:“清楚地描述要做的产品是什么样的?不涉及具体实现方法。”,其定义过程如下图所示。
此产品需求定义包括:软件+硬件。
2. 结构化设计方法的基本思路
按照需求,将软件逐级细化,分解为不必再分解的的模块,每个模块完成一定的功能,为一个或多个父模块服务(即接受调用),也接受一个或多个子模块的服务(即调用子模块)。模块的概念,和编程语言中的子程序或函数是对应的。
3. 架构设计/概要设计
架构设计或概要设计的目标是:“为系统需求或产品需求提供解决方案”。
概要设计:把软件按照一定的原则分解为模块层次,赋予每个模块一定的任务,并确定模块间调用关系和接口。通常输出的为:“软件结构图”。
在架构设计或概要设计,设计者会大致考虑并照顾模块的内部实现,但不过多纠缠于此。主要集中于:
(1)划分模块
(2)分配任务
(3)定义调用关系
模块间的接口与传参在这个阶段要定得十分细致明确,应编写严谨的数据字典,避免后续设计产生不解或误解。概要设计一般不是一次就能做到位,而是反复地进行结构调整。典型的调整是合并功能重复的模块,或者进一步分解出可以复用的模块。在概要设计阶段,应最大限度地提取可以重用的模块,建立合理的结构体系,节省后续环节的工作量。
概要设计文档最重要的部分是:
(1)分层数据流图
(2)结构图
(3)数据字典
(4)相应的文字说明
以概要设计文档为依据,各个模块的详细设计就可以并行展开了。
4.详细设计
详细设计的目标是:“提供编码的依据(数据结构+流程)”。
详细设计:依据概要设计阶段的分解,设计每个模块内的算法、流程等。通常采用“流程图”进行描述。
在详细设计阶段,各个模块可以分给不同的人去并行设计。在详细设计阶段,设计者的工作对象是一个模块,根据概要设计赋予的局部任务和对外接口,设计并表达出模块的以下内容:
(1)算法
(2)流程
(3)状态转换(状态机)
注意:如果发现有结构调整(如分解出子模块等)的必要,必须返回到概要设计阶段,将调整反应到概要设计文档中,而不能就地解决,不打招呼。
详细设计文档最重要的部分是模块的以下内容:
(1)流程图
(2)状态图
(3)局部变量及相应的文字说明。
一个模块一篇详细设计文档。
概要设计文档相当于机械设计中的装配图,而详细设计文档相当于机械设计中的零件图。概要设计中较顶层的部分便是所谓的方案。方案文档的作用是在宏观的角度上保持设计的合理性。
有的项目采用面向对象的分析、设计方法。可能在概要设计、详细设计的分工上疑问更多。其实,面向对象的分析、设计方法并没有强调结构化方法那样的阶段性,因此一般不引入概要、详细设计的概念。如果按照公司的文档体系,非要有这种分工的话,可以将包的划分、类及对象间的关系、类的对外属性、方法及协作设计看做概要设计;类属性、方法的内部实现看做详细设计。
5. 需要分析&概要设计&详细设计
1)需求分析:产生软件功能规格说明书,需要确定用户对软件的需求,要作到明确、无歧义。不涉及具体实现方法。用户能看得明白,开发人员也可据此进行下面的工作(概要设计)。
2)概要设计:产生软件概要设计说明书,说明系统模块划分、选择的技术路线等,整体说明软件的实现思路。并且需要指出关键技术难点等。
3)详细设计:产生软件详细设计说明书,对概要设计的进一步细化,一般由各部分的担当人员依据概要设计分别完成,然后在集成,是具体的实现细节。理论上要求可以照此编码。
6. 瀑布模型
瀑布模型如下图所示:
1)可靠性研究与计划:做还是不做
2)需求分析:都有什么功能
3)概要设计:共有多少子功能
4)详细设计:子功能怎么实现
5)编码:子功能实现了吗?
6)测试:功能完备吗?
7)部署:需要多少设备和软件的支持
8)维护:软件运动得正常吗?