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