软件开发生命周期模型
瀑布模型瀑布模型/ /改进的瀑布模型改进的瀑布模型 虽然瀑布模型仍然存在很多的问题有待解决,但瀑布模型仍然是最基本的和最效的一种可 供选择的软件开发生命周期模型.瀑布模型要求软件开发严格按照需求 -分析-设计-编码 -测试的阶段进行,每一个阶段都可以定义明确的产出物和验证准则.瀑布模型在每一个阶段 完成后都可以 组织相关的评审和验证,只有在评审通过后才能够进入到下一个阶段. 由于需要对每一个阶段进行验证,瀑布模型要求每一个阶段都有明确的文档产出,对于严格 的瀑布模型每一个阶段都不应该重叠,而应该是在评审通过,相关的产出物都已经基线后才能 够进入到下一个阶段. 瀑布模型的优点是可以保证整个软件产品较高的质量,保证缺陷能够提前的被发现和解决. 采用瀑布模型可以保证系统在整体上的充分把握,使系统具备良好的扩展性和可维护性.但对 于前期需求不明确前期需求不明确, ,而又很难短时间明确清楚的项目则很难很好的利用瀑布模型而又很难短时间明确清楚的项目则很难很好的利用瀑布模型 .另外对于 中小型的项目,需求设计和开发人员往往在项目开始后就会全部投入到项目中,而不是分阶段 投入,因此采用瀑布模型会导致项目人力资源过多的闲置的情况,这也是必须要考虑的问题. 很多人往往会以进度约束而不选择瀑布模型,这往往是一个错误的观点.导致这种情况的一 个关键因素往往是概念需求阶段人力不足.因此在概念需求阶段人力能够得到充分保证的情 况下,瀑布模型和迭代模型在开发周期上并不会存在太大的差别.反而是很多项目对于迭代或 敏捷模型用不好,为了赶进度在前期需求不明确, 没有经过一个总体的架构设计情况下就开 始编码,后期出现大量的返工而严重影响进度. 架构设计是软件开发中一个重要的关注点.因此在RUP中也提及到软件开发要以架构为核心. 因 此在架构设计完成后系统会被分为相关的子系统和功能模块 .每个功能模块间的接口都 可以定义清楚.在这种情况下,当模块B的详细设计做完成后往往就没有必要等到其它模块的 详细设计都要完全作完才开始编码,因此在架构设计完成后可以将系统分为多个模块并行开 发,每个模块仍然遵循先设计和编码测试的瀑布模型思路.这是瀑布模型的一种最重要的改进 思路,也可以说这是一种增量开发的模型。 当一个新系统的开发存在多个完全不相关的独立需求的功能开发的时候,也可以选择将整个 开发过程按独立的需求来分为多个小瀑布进行操作.这种方式的最大问题就是没有一个完全 总体的设计,架构设计人员无法在洞悉了所有需求后从系统的可扩展性 ,复用等方面总体规 划. 在项目管理中有一种压缩进度的方法叫赶工,因此瀑布模型的另外改进处就在适当的重叠 各个阶段过程,达到资源的有效利用.比如我们通过讨论,会议确定的实现方式就可以开始执 导下一个阶段的工作而不一定完全等到相关的交付物文档化出来. 螺旋模型螺旋模型 首先螺旋模型是遵从瀑布模型的.即需求-架构-设计-开发-测试的路线.螺旋模型最大 的价值在于整个开发过程是迭代和风险驱动的.通过将瀑布模型的多个阶段转化到多个迭代 过程中,以减少项目的风险. 螺旋模型的每一次迭代都包含了以下六个步骤 1.决定目标,替代方案和约束 2.识别和解决项目的风险 3.评估技术方案和替代解决方案 4.开发本次迭代的交付物和验证迭代产出的正确性. 5.计划下一次迭代 6.提交下一次迭代的步骤和方案. 螺旋模型实现了随着项目成本投入不断增加,风险逐渐减小.以帮我我们加强项目的管理和 跟踪,在每次迭代结束后都需要对产出物进行评估和验证,当发现无法继续进行下去时可以及 早的终止项目. 螺旋模型复杂的地方在于尽责,专心和知识渊博的管理.因为对于每一次迭代我们要制定出 清晰的目标,分析出相关的关键风险和计划中可以验证和测试的交付物并不是一件容易的事 情. 螺旋模型的每一次迭代只包含了瀑布模型的某一个或两个阶段.如第二次迭代重点是需求, 第三次迭代是总体设计和后续设计开发计划等.因此这是和 RUP 提倡 的迭代模型是有区别 的,RUP 的每一次迭代都会包含需求,设计,开发和测试等各个阶段的活动.RUP 迭代的目的在 于逐步求精而不是仅仅完成瀑布模型某一阶 段的工作. 增量和迭代模型 增量迭代是RUP统一过程常采用的软件开发生命周期模型.增量和迭代有区别但两者又经 常一起使用.所以这里要先解释下增量和迭代的概念.假设现在要开发 A,B,C,D 四个大的业 务功能,每个功能都需要开发两周的时间.则对于增量方法而言可以将四个功能分为两次增量 来完成,第一个增量完成 A,B 功能,第二个增量完成 C,D 功能;而对于迭代开发来讲则是分两 次迭代来开发,第一次迭代完成 A,B,C,D 四个基本业务功能但不含复杂的业务逻辑,而第二个 功能再逐渐细化补充完整相关的业务逻辑.在第一个月过去后采用增量开始时候 A,B 全部开 发完成而 C,D 还一点都没有动;而采用迭代开发的时候A,B,C,D 四个基础功能都已经完成. RUP 强调的每次迭代都包含了需求,设计和开发,测试等各个过程,而且每次迭代完成后都是 一个可以交付的原型。 迭代不是并行,在每次迭代过程中仍然要遵循需求-设计-开发的瀑布 过程。迭代周期的长度跟项目的周期和规模有很大的关系。小型项目可以一周一次迭代,而 对于大型项目则可以 2-4 周一次迭代。如果项目没有一个很好的架构师, 很难规划出每次迭 代的内容和要到达的目标, 验证相关的交付和产出。 因此迭代模型虽然能够很好的满足与用 户的交付,需求的变化,但确是一个很难真正用好的模型. 就对风险的消除上,增量和迭代模型都能够很好的控制前期的风险并解决.但迭代模型在这方 面更有优势.迭代模型更多的可以从总体方面去系统的思考问题,从最早就可以给出相对完善 的框架或原型,后期的每次迭代都是针对上次迭代的逐步精化. 业界比较标准的增量模型往往要求在软件需求规格说明书全部出来后后续的设计开发再 进行增量.同时每个增量也可以是独立发布的小版本.由于系统的总体设计 往往对一个系统 的架构和可扩展性有重大的影响,因此我们推荐的增量最好是在架构设计完成后再开始进行 增量,这样可以更好的保证系统的健壮性和可扩展性. 原型法原型法 原型一般都不是单独采用的一种生命周期模型,往往会结合瀑布和增量迭代等方法一起使 用.对于螺旋模型就可以理解为瀑布 +迭代+原型+风险的一种生命周期 模型.对于迭代开发 来讲,每一个迭代周期的产出都可以看做是下个阶段要精化的原型.而对于瀑布模型开发来讲, 我们在需求阶段也可以进行界面和操作建模,形 成 DEMO 后和用户做进一部的需求沟通和 确认. 当你的用户没有信息系统的使用经验,你的系统分析员也没有过多的需求分析和挖掘经验 的时候,需求分析和调研过程则更需要是一个启发式的过程.而原型则是 这种很好的启发式 方法,可以快速的挖掘用户需求并达成需求理解上的一致.否则即使双方都签字认可的需求往 往仍然不是客户真正想要的东西. 原型可以分为抛弃型的和不抛弃型的.如果原型仅仅是需求阶段方面和用户沟通画的 DEMO,则这种原型一般都建议抛弃掉.而对于迭代开发来将,每次迭代的 产出都是可以独立 运行和包含基础功能的系统,是后续细化的基础,这类原型一般都