软件开发常见的几种模式

虽然自己一身从事着软件开发的工作,但是对于平时采用何种开式模式 却很少思考过,今天特地花了点时间看了一些文档,感觉自己以前的开发模式采用瀑布模式 的比较多,如果是相对大一点的项目,采用这种开发模式风险大一点,如果采用迭代模式 ,则风险相对小一点。如果某家公司是做软件外包 的业务,则适合于采用迭代模式进行开发(如果是小项目而且工期又短就另说了,一般软件外包的项目不会太小 ),如果是小项目且需求比较清楚,如开发一个新闻发布系统,不到一个月就可以完工,则采用瀑布模式会比较合理。

1.瀑布模式
我们开发一个产品,如果不太复杂,会采用瀑布模型,简单的说就是先需求定义,然后构建框架,然后写代码,然后测试,最后发布一个产品。

这样,几个月过去了,直到最后一天发布时,大家才能见到一个产品。

  这样的方式有明显的缺点,假如我们对用户的需求判断的不是很准确时——这是很常见的问题,一点也不少见——你工作了几个月甚至是几年,当你把产品拿给客户看时,客户往往会大吃一惊,这就是我要的东西吗? Via :

2.迭代模式
迭 代的方式就有所不同,假如这个产品要求6个月交货,我在第一个月就会拿出一个产品来,当然,这个产品会很不完善,会有很多功能还没有添加进去,bug很 多,还不稳定,但客户看了以后,会提出更详细的修改意见,这样,你就知道自己距离客户的需求有多远,我回家以后,再花一个月,在上个月所作的需求分析、框 架设计、代码、测试等等的基础上,进一步改进,又拿出一个更完善的产品来,给客户看,让他们提意见。
  就这样,我的产品在功能上、质量上都能够逐渐逼近客户的要求,不会出现我花了大量心血后,直到最后发布之时才发现根本不是客户要的东西 。
  这样的方法很不错,但他也有自己的缺陷,那就是周期长、成本很高。在应付大项目、高风险项目——就比如是航天飞机的控制系统时,迭代的成本比项目失败的风险成本低得多,用这种方式明显有优势 。
  如果你是给自己的单位开发一个小MIS,自己也比较清楚需求,工期上也不过花上个把月的时间,用迭代就有点杀鸡用了牛刀,那还是瀑布模型更管用,即使是做得不对,顶多再花一个月重来,没什么了不起 。 Via

3.敏捷开发
人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重要的方面。
  -- Tom DeMacro和Timothy Lister
  敏捷软件开发宣言:
  n 个体和交互 胜过 过程和工具
  n 可以工作的软件 胜过 面面俱到的文档
  n 客户合作 胜过 合同谈判
  n 响应变化 胜过 遵循计划
  虽然右项也有价值,但是我们认为左项具有更大的价值。
  敏捷宣言遵循的原则:
  n 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意 。
  n 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势 。
  n 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好 。
  n 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
  n 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
  n 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
  n 工作的软件是首要的进度度量标准。
  n 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度 。
  n 不断地关注优秀的技能和好的设计会增强敏捷能力。
  n 简单是最根本的。
  n 最好的构架、需求和设计出于自组织团队。
  n 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
  当软件开发需求的变化而变化时,软件设计会出现坏味道,当软件中出现下面任何一种气味时,表明软件正在腐化。
  n 僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。
  n 脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。
  n 牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。
  n 粘滞性: 做正确的事情比做错误的事情要困难。
  n 不必要的复杂性: 设计中包含有不具任何直接好处的基础结构。
  n 不必要的重复性: 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。
  n 晦涩性: 很难阅读、理解。没有很好地表现出意图。
  敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援 。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计。

参考:
RUP: http://baike.baidu.com/view/491030.html
产品的加减法:敏捷开发与快速迭代: http://liujie.blog.sohu.com/54611489.html
UML: http://baike.baidu.com/view/23396.htm
ERWin: http://www.cnblogs.com/luqingfei/articles/448819.html

相关推荐