瀑布模型:运用于需求固定的软件开发
特点:自上而下
缺点一:各个阶段的划分完全固定,阶段之间产生大量的文档,极大地增加了工作量
缺点二:由于开发模型是线性的,用户只有等到整个过程的末期才能见到开发成果,从而增加了开发的风险
缺点三:早期的错误可能要等到开发后期的测试阶段才能发现,进而带来严重的后果
软件开发流程:
1、可行性分析
目的:
软件可行性研究的目的就是用最小代价在尽可能短的时候内确定该软件项目是否能够开发,是否值得去开发。
任务:
- 技术可行性-确定现有资源(软件/硬件/技术人员)是否支持开发
- 经济可行性-确定项目的成本和经济效益是否值得投入开发
- 社会可行性-确定项目内容是否存在侵权等违规、违法行为
结果:
最终输出《可行性分析报告》文档
2、项目分析
目的:
项目开发计划是一个软件项目进入系统实施的启动阶段,主要进行的工作包括:确定详细的项目实施范围、定义递交的工作成果、评估实施过程中主要的风险、制定项目实施的时间计划、成本和预选计算、人力资源计划等。
任务:
- 范围-确定项目的综合描述,定义所要做得软件开发工作
- 资源-确定项目投入的人力资源、硬件资源、软件资源和其他相关资源
- 进度-确定项目阶段性进展和最终交付期限
- 成本-确定估算项目投入的总成本
- 风险-确定项目开发中存在的各种可控和不可控风险
结果:
最终输出《项目开发计划书》文档
3、需求分析
目的:
需求分析是指开发人员准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈述转化为完整的需求定义,再由需求定义转换到相应形式的功能规约(需要规格说明书)的过程。
任务:
- 识别功能需求-确定所开发的软件必须具备什么样的功能(最重要)
- 识别性能需求-确定所开发的软件有哪些技术性能指标识别
- 识别环境需求-确定所开发的软件运行时所需要的软、硬件要求
- 识别用户界面需求-界面风格以及人机交互方式等
结果:
最终输出《需求规格说明书》文档
4、系统概要设计
目的:
概要设计是把软件”做什么”的逻辑模型变换为”怎么做”的物理模型,把软件需求转换为软件表示,描述软件的总的体系结构。
任务:
- 设计软件系统架构-确定所开发的软件的系统架构和框架
- 设计数据结构-确定所开发的软件的数据结构
- 设计数据库-确定所开发的软件存储数据的数据库表以及表与表关系
- 设计界面模型-确定所开发的软件的界面原型图
目的:
最终输出《概要设计说明书》《数据库设计说明书》《界面原型》文档
5、系统详细设计
目的:
详细设计是把概要设计划分的模块进行细化,就是详细设计每个模块的实现方法、类结构图等。
任务:
- 为每个类进行详细的算法设计,将每个模块处理过程的详细算法描述出来
- 为模块内部的数据结构进行设计,对于需求分析、概要设计确定的概念性的数据类型进行确切的定义
结果:
最终输出《详细设计说明书》文档
6、编码
目的:
编码即”编写程序”,它是在前一阶段详细设计的基础上进行的,它是详细设计得到的处理过程的描述转换为基于某种计算机语言的程序,即源程序语言
任务:
- 遵守设计原则
- 遵守编码规范(编写编码注解)
- 合理使用设计模式
- 编写调试日志信息
- 代码具有可阅读性、可测试性、可扩展性和可维护性
结果:
最终输出《API帮助文档》文档
7、测试
目的:
测试阶段的基本任务是根据软件开发各阶段的文档资料和程序内部结构,精心设计一组测试用例,找出软件中潜在的各种错误和缺陷。
任务:
- 黑盒测试(测试人员) 单元测试(开发人员)
- 白盒测试(开发人员) 集成测试(开发人员)
- 灰盒测试(开发/测试人员) 系统测试(测试人员)
结果:
最终输出《软件测试用例》《软件测试报告》文档
8、维护
目的:
软件投入使用后就进入软件维护阶段,是软件生存周期中时间最长的一个阶段。
任务:
- 校正性维护-修改开发过程中为发现而发布后暴露出来的BUG(主要)
- 完善性维护-根据用户的需求增加新的功能和性能要求(主要)
- 适应性维护-根据市场的变化升级软硬件环境
- 预防性维护-为提高软件的可维护性的和可靠性而对软件进行的修改
结果:
最终输出《程序维护手册》文档