传统序列式软件开发方法的缺点,以及迭代开发方法的选择
程读书笔记
大部分公司仍使用传统瀑布模型(或序列式开发方法)进行开发
我所工作过的公司,以及我身边的朋友工作所在的公司,再加上招聘时从求职者那里所了解到的其他一些公 司的开发过程,
基本上都是使用传统的软件开发 模式 ,类拟或者就是瀑布开发模式,这种模式有如下特点:
1) 将项目的生命周期明确地划分为几个阶段,完 成一个阶段才进入下一个阶段。
2) 在项目初期希望细化所有的需求,并希望在一个阶段将需求固定后不再改变。
3) 在需求定义完毕后,在编码之前进行较详细的预 先设计,完成所有或者大部分的设计工作才开始编码。
4) 每一个阶段需要产出大量的文档作为下一阶段的输入。
传统瀑布开发 模式有哪些缺点?
由于现代软件系统的功能和设计越来越复杂,市场需求变化较快,所以 瀑布开发模式所要求的严格地完成一个阶段再进入下一个阶段被认为是太过理想化,原因有如下一些:
1) 现代大部分项目,寄望于在某一个阶段将需求固定是不现实的,太多的诱因会引起需求的变化了,例如:
1a) 没有真正的用户参与需求定义过程,定义的需求可能很难符合最终用户 的工作习惯。
1b) 就算把需求定义好给到最 终用户,让最终用户去确认,需求也有改变的风险,原因是用户在看到可运行的系统之前,一切都是假想,有不合理的地方他也不能完全看出来,我就假设这个用户 很认真地配合需求的确认,并假设大部分需求能在这个阶段确认了,但一些非功能性的需求用户是没有办法体现到的,例如性能、操作的流畅度等。 这就像给你一本iPhone的手机说明书,再给你一本其它智能手机的说明书,让你去评价哪一个手机更优秀,除了iPhone外观、 界面漂亮点外,你可能真的看不出iPhone到底有什么突出的优点值得这么多年轻人追棒,直到你真正拿在手上用时,体会了iPhone操作流畅的爽快感, 以及爽心悦目的窗口动态效果时,你才能体会它的与众不同之处。
1c) 竞争者、市场需求在不断变化,用户的需求也在跟着市场进行变化,特 别是研发性的项目,“用户”与研发部之间,不像一些非研发性质的项目需求的变更有合同来约束。
2) 接下来的设计阶段假设需求已经确定,但如果需求在项目后期还会有较大变化的风险,那么早期就做较详细和较完整的设计工作可能是不适当的。
3) 那么,假设需求能够确定,设计是否能够确定呢?我的理解是,只有在我们对所在的技术领域非常熟悉的情况下才有可能,怎样才算对技术领域非常熟悉呢?
我的理解是就像一些做信息化项目的小企业,他们为A企业开发了OA办公系统,再为B企业开发相拟的 系统时,所用的技术几乎是一样的,只是业务有一些异同而以。
但如果是研发性质的公司,常常需要涉足一些陌生的技术领域,你在投入人力进入这些功能的预研之前,你很难去细化这一部分的设计,但这 些技术的预研工作通常又需要很长的工作时程,可能需要经历较长的项目周期,所以说,要在项目初期就细化好完整的设计可能会事与愿违。
4) 当使用瀑布模型(或序列开发模式)时,如果需求与用户的设想出现了偏离,这 种错误将会贯穿整个项目周期,设计受需求的影响,代码受设计的影响,直到项目接近完成,将产品交付给用户使用测试时,错误才被用户提出,这时项目已处于尾 声,为迟已晚。
如何解决传统瀑布开发模式存在的问题?
针对传统瀑布开发模式 所存在的问题, 业界提出的解决方法就是应用迭代开发方式,而敏捷开发更是在迭代开发的基础上,作了进一步的改进,敏捷开发方法由于它应用迭代和增量的开发模式,所以可以 看作是经过改进的迭代开发方法。
敏捷开发提出了以下的一些原则:
1) 假设需求总是会变化的,并欢迎需求的变化,因为需求的变化可能意味着可以提升产品的商业价值。
2) 设计是演进式的,并要保持简单设计和弹性设计,以便能快速响应需求的变化,而需求变化总是会引起设计的腐化,因此,经常性的对代码进行重构是必须的。
3) 短期持续交付可运行的系统给用户,目的是尽早取得用户的反馈。
4) 更多原则可参考书籍:<<敏捷软件开发:原则、模式与实践>>。
近年来,随着敏捷开发思想的提出,以及UP(Unified Process,统一流程) 、敏捷UP、Scrum 和XP(极限编程实践) 等一系列的实践方法得到应用,迭代、增量的开发模式得到了更多的赞誉声音,目前,最为热门的是以Scrum和XP进行组合的敏捷开发方式,已经被腾讯、华 为、上海贝尔等一些大公司所采用。
迭代、增量的开发模式 是如何进行的?
迭代开发模式会将项目周期分为多个迭代来完成,每一个迭代只实现一小部分功能, 完成一次迭代时就将系统给到用户进行演示或测试,进而及早得到用户的反馈来改进需求和设计,每一次迭代也需要经历需求分析、设计和编码和测试等多个活动, 但通常是轻量级的,项目的整个周期可能要进行十多次或更多这样的迭代。
那么,迭代和增量开发模式又是如何进行的呢?下面作一下简述:
1) 项目初期和我们现用的方法一样,会定义好产品设想以及功能列表,并对产品功能排好优先级,但与传统的开发模式不同的是,这个阶段不会去细化所有需求。
2) 根据优先级,挑选一小部分需求进行细化,项目初始阶段通常挑选高风险的、决定核心架构的、业务性质重要的功能需求来细化。
3) 针对细化的一部分需求进行设计和编码,得到可运行的软件然后交付给用户,或给用户演示并收集反馈。
4) 根据用户的反馈修改需求,并提交新版本的软件给用户,直到用户满意。
5) 重复 2~4,直到完成所有的功能。2~4 被称为一次迭代,每次迭代大约需要数周,不宜太长,越短越好,每个项目可能要经历十多次迭代。
6) 其它活动略
转载:https://blog.csdn.net/kwiner/article/details/5447647
传统序列式软件开发方法的缺点,以及迭代开发方法的选择相关推荐
- 软件开发方法与需求分析
软件开发方法 1.结构化开发方法特点:用户至上,严格区分工作阶段,每阶段有任务和结果, 强调系统开发过程的整体性和全局性,系统开发过程工程化,文档资料标准化, 自顶向下,逐步分解(求精). 2.原型开 ...
- 插件体系结构软件开发方法研究
插件体系结构软件开发方法研究 计算机软件与理论专业 研究生 一觉亮天 随着计算机技术的发展,软件体系结构和开发方法也在发生着重大变化.为了高效率地进行软件开发,并且开发出高质量的产品,人们一直在寻求更 ...
- 立体视觉入门指南(3):相机标定之张式标定法【超详细值得收藏】
亲爱的同学们,我们的世界是3D世界,我们的双眼能够观测三维信息,帮助我们感知距离,导航避障,从而翱翔于天地之间.而当今世界是智能化的世界,我们的科学家们探索各种机器智能技术,让机器能够拥有人类的三维感 ...
- 软件工程总结——传统软件开发方法与面向对象开发方法的比较
软件开发是一门技术,它需要相应的理论.技术.方法.手段和工具来支持.就软件开发技术的发展而言,主要经过了结构化开发方法和面向对象的软件开发方法. 传统软件开发: 结构化开发方法: 结构化开发方法是最早 ...
- 几种软件开发方法对比
综述 软件开发方法是一种使用早已定义好的技术集及符号表示习惯来组织软件生产的过程. 本文对净室方法.结构化方法.面向对象方法.原型法.逆向工程等方法进行梳理,并对各种开发方法特点.优点进行对比. 净室 ...
- 第四章 序列式容器(sequence containers)
序列式容器(sequence containers) 1.容器的概观与分类 2.vector 3.list 4.deque 5.stack 6.queue 7.heap(隐私表述,implicit r ...
- 敏捷软件开发方法综述
敏捷软件开发方法 敏捷,顾名思义,就是轻巧.机敏.迅捷.灵活.活力.高效....,敏捷过程很容易适应变化并迅速做出自我调整,在保证质量的前提下,做到文档.度量适度.敏捷开发是一种以人为核心.迭代.循序 ...
- 【C++ STL学习笔记】C++ STL序列式容器(array,vector,deque,list)
文章目录 C++ STL容器是什么? 迭代器是什么,C++ STL迭代器(iterator)用法详解 迭代器类别 迭代器的定义方式 C++序列式容器(STL序列式容器)是什么 容器中常见的函数成员 C ...
- atitit.软件开发方法总结O6
atitit.软件开发方法总结O6 #--cmm/cmmi 都晓得这个. #--IPD集成产品开发 结构化的流程 IPD工具:包括业务及技术上的共工具. 5.考评:包括团队和个人绩效考核两个方面:首 ...
最新文章
- android游戏boss坐标,热血江湖手游boss刷新点坐标 boss刷新时间 _图文攻略_高分攻略_百度攻略...
- 怎么将jenkins打包后的war自动部署到jetty上? 1
- SQL删除重复的记录(只保留一条)
- 在VS2003中以ClassLibrary工程的方式管理Web工程.
- 用python 登录 ssh 与 sftp 通过证书登录系统
- onRetainNonConfigurationInstance和getLastNonConfigurationInstance
- P1943-LocalMaxima_NOI导刊2009提高(1)【数论】
- windows系统挂载存储阵列的iscsi映射虚拟磁盘
- 固定资产管理模式的演变历程
- 简单工厂模式、工厂模式以及抽象工厂模式(具体)
- fan4801开关电源原理图_全面解析开关电源各功能电路(附原理图)
- Altera内部结构(一):Cyclone IV内部资源特点
- 飞机实时动态查询接口代码调用服务
- Docker快速搭建EKL
- 马一篇知乎大佬的诠释
- 房产管理系统平台平台管理分析
- 字节数组与String类型的转换
- python实现梯度下降算法
- mysql - database/数据库
- 原生js遍历 json数组对象