大家好,我是程序媛雪儿。
在聊今天的话题之前,我想讲一个我开发中的现象,因为我是独立开发者,也是第一次一个人接大项目,所以我很自然的选择了写需求分析,画原型设计,库表设计,写代码,测试这个普遍流程走,走到库表设计我就发现问题了,系统太大了,一次性上线所有功能我给不出具体能完成的时间,这么大的任务我没完全把握能做出来,没办法,我和我老板谈能不能先上一个主要的模块,用户先用着,其他模块看软件使用情况再慢慢上线,这样搞开发时间短,也能先试试水占个市场。因为任务变小,处理难度变低,所以项目目前进展还是比较顺利的。
我不了解软件开发过程模型,没有根据现实情况选用合适的方法,而是一上来就选择了最朴素的解决思路,花了很多冤枉时间,你瞅瞅,学点理论知识,是不是很重要呢?
所以,今天咱们来聊聊常用的软件过程模型有哪些。
一、瀑布模型
使用最早,应用最广
瀑布模型特点
-
具有顺序性和依赖性
前一阶段结束后一阶段开始,前一个阶段输出文档,后一个阶段才会输入文档
-
推迟实现观点
在编码前设置了系统分析、系统设计阶段,推迟了程序的物理实现,保证前期工作扎实
-
质量保证观点
每个阶段坚持两个重要做法
一是每个阶段都必须完成完整、准确的文档。软件开发时人员间通信、运行时期维护的重要依据
二是每阶段结束前对文档评审
实际瀑布模型
传统瀑布模型过于理想化,但人在工作过程中不可能不犯错误,所以实际瀑布模型带反馈环,也就是后一阶段发现问题,可以反馈给前一阶段,修改前一阶段。
瀑布模型优点
提高软件质量,降低维护成本,缓解软件危机
瀑布模型缺点
模型缺乏灵活性,无法解决需求不明确的问题,用户不经过实践提出完整准确需求不切实际
二、快速原型模型
是什么
快速建立反映用户主要需求的原型系统,反复由用户评价修正需求,开发出最终产品
优点:
-
确定需求上优于瀑布模型(通过原型和用户交互,用户就知道功能是不是他们想要的了)
-
对开发者和使用者了解系统有积极作用(提供学习手段)
-
有的软件原型可以成为最终产品的一部分
缺点:
-
快速建立的系统和连续的修改可能导致原型系统的内部结构不好(产品质量低下)
三、增量模型
又称渐增模型,开发软件时将软件产品作一系列增量构件设计、编码、集成和测试
和快速原型模型的区别:
快速:一次性把满足所有需求的产品提交给用户
增量:分批向用户提交产品
一个模块一个模块的提交,每个模块提交前都需要经过需求分析、规格说明、设计、维护这四个阶段。
优点:
-
较短时间向用户提交工作产品
-
相对来说风险较小
-
用户有充裕时间学习适应产品
-
软件结构必须开放,方便向现有产品加入新构件
缺点:
-
软件结构很难做到开放
风险更大但实现速度更快的模型:确定用户需求后,各构件集并行构建
四、螺旋模型
加入风险分析,常用来指导大型软件项目
软件风险:超期、超预算、行业竞争
笛卡尔坐标四象限表达四个方面的活动:
-
制定计划:确定目标、选定方案、设定约束条件
-
风险分析:评估方案,识别和消除风险
-
实施工程:软件开发
-
客户评估:评价开发工作,计划下一阶段工作
自内向外每旋转一圈都能开发出更完善新版本
优点:
大型软件开发项目有较好的风险控制
缺点:
需要风险评估的经验(提供的风险评估要是没意义或者未来压根不可能出现,那只是徒增了软件开发的麻烦)
契约开发通常需要事先指定过程模型和发布产品
普及不如前述模型
五、喷泉模型
顾名思义,一次性把每个阶段需要的都搞出来,每个阶段同步进行。面向对象生命周期模型,体现迭代和无缝特性
迭代:求精,系统某部分常被重复工作多次,相关功能在每次迭代中逐渐加入演进系统
无缝:分析、设计、编码各阶段间不存在明显边界
优点:
无缝,可同步开发,提高开发效率,节省开发时间,适应面向对象软件
缺点:
可能随时加各种信息、需求与资料,需严格管理文档,审核的难度加大
六、Rational统一过程
是Rational软件公司推出的一种软件过程,该过程强调以迭代和渐增方式开发软件
Rational统一过程是一个二维生命周期模型
9个核心工作流,包括6个核心过程工作流和三个支持工作流
核心工作流:业务建模、需求、分析与设计、实现、测试、部署、配置与变更管理、项目管理、环境
四个连续阶段,每个阶段都有明确目标,通过一次或多次迭代完成
四个连续阶段:初始、精华、构建、移交
优点:
-
不断地版本发布成为一种团队日常工作的真正驱动力
-
将发现问题、制定方案和解决过程集成到下一次迭代
-
迭代开发,降低风险
-
更好地安排产品开发的辅助过程
七、微软公司软件开发过程
规划阶段:开展市场调查研究,结合公司战略形成产品的远景目标
设计阶段:根据产品远景目标,完成软件功能规格说明和总体设计,确定产品开发的主要进度
开发阶段:完成产品中所有构件的开发工作
稳定阶段:实行全面的内部和外部测试,最终形成可发布的RTM版本
发布阶段:确定产品质量符合发布标准后,发布产品及相关消息
优点
解决问题的及时性、不确定和变更因素可控性、缩短产品上市周期
说了这么多,咱来总结一下。
总结
瀑布模型:自上而下,每个阶段顺序执行
快速原型模型:通过原型一次性提交需求和产品
增量模型:分批次一个模块一个模块提交需求和产品
螺旋模型:加入风险分析
喷泉模型:每个阶段同步执行,分析、设计、编码各阶段间不存在明显边界
Rational统一过程模型:通过工作流和阶段两个维度来描述开发,强调用迭代和渐增的方式开发软件
微软公司软件开发过程:分版本发布项目,每个版本快速完成五个阶段。
回到咱们最初的话题,我本质上刚开始使用的是瀑布模型,但是因为项目模块太多,周期太长,而且用户的需求也不一定明确,这种情况是最不适合个体开发者的,后来我选择分模块上线项目,实质上是用的增量模型,分批次提交给用户产品,相对来说风险小,用户也有充足的时间学习适应产品,我们也能根据用户的需求慢慢做调整,这是更合理的选择。
欢迎大家关注我的微信公众号,程序媛雪儿,雪儿会在上面发布编程的知识碎片,也有雪儿博客地址,上面有详细系统的笔记,雪儿是全栈,但是公众号目前主要还是发后端的技术,以后可能也会涉及到一些前端的知识,我们下期见,拜拜~