软件工程开发模型以及在软件工程中的作用:
传统模型:
瀑布模型(water fall model):
规定了各项软件工程活动,包括制定开发计划、需求分析说明、软件设计、程序编码、测试和运行维护,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级落下。它具有以下特征:
1. 从上一项活动接受本项活动的工作对象作为输入
2. 利用这一输入实施本项活动应完成的工作
3. 给出本项活动的工作结果,作为输出传递给下一项活动
4. 对本项活动实施的工作进行评审,若工作得到确认则继续进行下一项活动,否则返回前一项活动,甚至更前项工作进行返工
快速原型模型(rapid prototype model)
瀑布模型的却显示软件开发阶段的推进是线性的,只有当分析员做出准确的需求分析时,才能得到预期的正确结果。为了克服这个缺点提出了快速原型模型,它的思想是:软件开发人员根据用户提出的软件基本需求快速开发一个原型,以便想客户展示软件系统应有的部分或全部的功能和性能,在征求用户对原型的评价意见后,进一步使需求精确化、完全化,并据此改进完善原型,如此迭代,知道软件开发人员和用户都确认软件系统的需求并达成一致的理解为止。原型主要是为了完成需求分析阶段的任务而构建的,需求确定后就可以进行设计、编码、测试等以后的各个开发步骤了。
螺旋模型(spiral model)
螺旋模型将瀑布模型和原型模型结合起来,不仅体现了两个模型的有点,而且还增加了两个模型都忽略了的风险分析,弥补了两者的不足。沿螺旋线向外每旋出一圈便开发一个更为晚上的新的软件版本,并且进行风险评估。
增量模型(incremental model)
规定软件的开发过程是依次开发产品的一个部分,首先应该开发产品的基本部分,然后逐步开发产品的附加部分。为了是所开发的产品的各个部分最后能有机地组合起来,首先应该有一个同一的体系结构设计。增量模型是在么个阶段都交付一个可操作的产品,但是它仅仅满足客户需求的一个自己。完整的产品划分成一个个构建,产品是以一次一个构件的方式开发的。在每个阶段之后,客户都能得到一个产品,从第一个构件交付开始,客户就能做有用的工作。一个难点就是,后来开发的构件必须能够继承到先前已经开发的产品中而不毁坏已开发的功能。
喷泉模型:
这个是近几年提出来的软件生存后期模型,它是以面向对象的软件开发方法为基础,以用户的需求为动力,以对象来驱动的模型。它的特点如下:
1. 整个开发过程包括:需求分析、设计、实现、测试和维护五个阶段,因此使软件的可维护性较好;
2. 各个阶段相互重叠,表明了面向对象开发方法各个阶段间的交叉和无缝过渡;
3. 整个模型是一个迭代的过程,包括一个阶段内部的迭代和跨阶段的迭代;
4. 模型具有增量开发特性,既能做到边分析,边设计;边实现,边测试,使相关功能随之加入到演化的系统中;
5. 模型是对象驱动的,对象是各阶段活动的主题,也是项目管理的基本内容;
6. 该模型自然地支持软件部件的重用。
形式化方法模型:
形式化方法模型包含了一组活动,它们带来了计算机软件用数学描述的方法,形式化方法使得软件开发人员能够通过采用一个严格的、数学的并表示体系来说明、开发和验证基于计算机的系统。用于形式化开发的模型有两种:变换模型和软件过程模型。
最新模型:
RAD(rap application development)又称v模型(v model):
http://blog.sina.com.cn/s/blog_5544469d010007do.html
是软件开发过程中一个重要模型,成为快速应用开发模型,其模型结构图形类似于字母V,素以又称v模型。它通过开发和测试同时进行的方式来缩短开发周期,提高开发效率,可以说v模型是软件开发测试中最重要的一种模型。主要包括用户需求—需求分析—概要设计—详细设计—-系统编码—-单元测试—集成测试—系统测试—验收测试;在系统设计和实现的各个环节都有相应的测试与之相对应。这样来说,就是当一个软件在开发的时候,研发人员和测试人员就会同时工作,这样软件开发的周期就会缩短,而因为测试在软件做需求分析的同时就会有测试用例的跟踪,这样就可以尽快找出程序错误从而更高效地提高程序质量,最大可能地减少成本。
RUP(Rational Unified Process)统一开发过程:
RUP包括初始阶段、细化阶段、构造阶段和交付阶段。每个阶段都由一个或多个连续的迭代组成,每个迭代都是一个完整的开发过程,是一个具体的迭代工作流从头到尾的执行,每个阶段结束于一个主要的里程碑,每个阶段本质上是两个里程碑之间的时间跨度,在每个阶段的结尾执行一次评估以去顶这个阶段的目标是否已经满足,如果评估结果令人满意则允许项目进入下一个阶段。迭代开发模型(iterationmodel)贯穿于RUP的每一个阶段。
Agile(敏捷开发):
http://exploitsun.blog.sohu.com/64188294.html
是一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备继承和可运行的特征。简言之就是把一个大项目分为多个相互联系但也可以杜有利运行的小项目,并分别完成,在此过程中软件一直处于可使用的状态。一般的特点是:个体和交互胜过过程和工具;可以工作的软件胜过面面俱到的文档;客户合作胜过合同谈判;相应变化胜过遵循计划。敏捷开发的原则就是“刚刚好”。XP(极限编程)就是敏捷开发的一种模式。
各种开发模型在软件工程中的位置:
http://www.ltesting.net/ceshi/ruanjianzhiliangbaozheng/zlmx/mjkf/2008/0707/155935.html
所谓软件工程就是将软件开发、部署和维护的过程工程化,其目标就是保证进度、降低成本、提高质量。由于软件的开发、部署和维护是一项高度智力密集型的工作,保证进度、降低成本、提高质量的工作最终还是要落实到参与的个人。而对于个人而言,影响效率和质量的就是:方法、流程、工具和热情。
如果把加入Rational当成入行软件工程的开始的话,那么在我入行的十年中,可以看到软件工程的热点在上述几个要素之间反复切换:
方法:98年-02年,面向对象方法风行
流程:02年-06年,RUP/CMM(I)大行其道
热情:06年-08年,敏捷气候小成
如前一篇博文所述,敏捷的贡献主要在于 会工程,它第一次将注意力聚焦到人的工作热情上。然而,在热点切换的过程中,有几个现象值得注意:
1. 对新热点,期望太高、失望太快:人们往往将新的热点当成银弹,希望能够立竿见影;稍有挫折,就另寻热点了。其实时至今日,有多少项目真正能把面向对象建模作的很好呢/span>
2. 对原有热点的成果,付之一炬:新热点的引入往往会分散对旧有热点的痴迷,这有它积极的意义,但要避免矫枉过正,全盘否定旧有热点的积极成果;
Ivar最近在谈“Be Smart”,其实我觉得这里Smart应该被翻译成“明智”,其核心就是在针对各要素的改进当中达成一个平衡。其实这暗合了中国的中庸之道:「不偏之谓中;不易之谓庸。」中者,天下之正道。庸者,天下之定理。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!