标签:
本文主要介绍和讨论什么是敏捷开发和传统软件开发,分析这两个软件开发方法的特点并作出对比。首先介绍什么是传统软件开发。
传统开发
传统软件开发主要指的是传统软件开发的模型。传统的软件开发模型包括瀑布模型、增量过程模型、原型模型、螺旋模型等。这里就主要说这四个模型。
瀑布模型
瀑布模型可以说是狭义上的传统开发模型。1970年温斯顿·罗伊斯(Winston Royce)提出了著名的“瀑布模型”,直到80年代早期,它一直是唯一被广泛采用的软件开发模型。瀑布模型由软件开发经典的四个过程组成——分析、设计、编码、测试。(也有分为不同的过程的,有分为制定计划、需求分析、软件设计、程序编写、软件测试和运行维护这六个过程(如图所示),在Roger S.Pressman的《软件工程:实践者的研究方法》中又是分为沟通、策划、建模、构建、部署,都大同小异,这里就分为核心的这四个部分)瀑布模型就是从头至尾顺序执行这四个过程。因为整个过程如流水般从上至下流过而不往回走,如同瀑布一般,因此将其形象地取名为瀑布模型。瀑布模型是传统软件开发模型中最典型的,也是其他传统软件开发的模型的基础。在下面的介绍中会看到其他模型都局部使用或者循环、迭代地使用了瀑布模型。
增量过程模型
瀑布模型是在整个软件开发过程中,分析、设计、编码、测试顺序执行一遍。二增量过程模型则是将整个工程分为不同的小部分,每个小部分比上一个小部分都有一定的增量(即多完成了一定的工作,或多开发了一些功能),然后每个小部分中都执行瀑布模型。
原型模型
原型模型就是在需求分析之后,快速构建一个简单的、不完善的模型,对原型进行部署,接着由利益相关者对这个原型进行评价。根据利益相关者对原型给出的反馈信息进一步细化需求,再进行开发。快速构建的模型一般都是临时的系统,在接下来的开发中会被废弃。
螺旋模型
螺旋模型则是结合了原型模型的迭代性质和瀑布模型可控性的特点,把软件开发为一系列的演进版本,螺旋向上地开发出新的原型,并在每次演进的时候进行风险评估。螺旋模型可以说就是迭代地使用原型模型(如图中每一个圈就是一次原型模型开发的过程)。
敏捷开发
敏捷开发概述
很难去定义什么是敏捷开发。不同于上面提到的传统软件开发模型,敏捷开发并不是规定了一系列规则或过程的模型,实际上敏捷开发的“敏捷”性质使得了敏捷开发并不能这么做。敏捷开发应该说是软件开发中的一种方法,一种思想。虽然说很难描述敏捷开发是什么,但是从下面的“敏捷软件开发宣言”中,我们可以看出敏捷开发的一些特点
2001年,17位软件开发者发表了“敏捷软件开发宣言”,宣言中声明:
? Individuals and interactions over processes and tools(个人和个人间的交互胜于开发过程和工具)
? Working software over comprehensive documentation(可用的软件胜于详尽的文档)
? Customer collaboration over contract negotiation(与客户的合作胜于合同和谈判)
? Responding to change over following a plan(响应变更胜于遵循计划)
“敏捷软件开发宣言”也算是敏捷开发比较“官方”一点的定义了。从宣言中我们可以看出,敏捷开发更注重于开发中人的重要性,注重于更多人与人之间的合作交流,偏好于代码、开发出软件而不是花时间在文档,希望能够更好的适应于开发过程中的变化。个人认为,敏捷软件开发(Agile software development)的核心就是Agile(敏捷)。“敏捷”是由Agile这个词翻译过来的,个人觉得有一点点的误导性。“敏捷”这个词让人更觉得是快速的意思,虽然的确敏捷开发提倡快速地开发出可用软件,但我觉得Agile的核心意思更应该是“灵活”,在软件开发过程中需要更灵活。从上面提到的敏捷开发的特点可用看到,敏捷开发以人为本,人是灵活的;偏好于交流,而不偏好于写死的文档,交流中可以更灵活的分析软件工程的需求;适应变更,这个本来就是要求软件开发要灵活可变的意思。
下面要介绍的敏捷开发中最常见的两个开发方法,极限编程(eXtreme Programming)和Scrum,其实也很难去定义是什么,这两者之间也并没有什么一定的区别或某种联系(要说联系的话他们都有一定程度遵循敏捷开发提出的思想),人们在使用这两个开发方法的时候也是各有不同。下面介绍的时候也是介绍人们在利用这两个方法时,比较共性的、重要的内容,也让我们对敏捷开发有更直观一点的认识。
极限编程(XP)
XP包含了类似于瀑布模型中的四个过程:需求分析、设计、编码和测试。虽然说过程类似,但过程中所用的思想与方法却与传统开发有所不同。下面简要介绍这四个关键活动。
Scrum
Scrum 是一个用于开发和维持复杂产品的框架 ,是一个增量的、迭代的开发过程。在这个框架中,整个开发过程由若干个短的迭代周期组成,一个短的迭代周期称为一个Sprint,每个Sprint的建议长度是2到4周(互联网产品研发可以使用1周的Sprint)。在Scrum中,使用产品Backlog来管理产品的需求,产品backlog是一个按照商业价值排序的需求列表,列表条目的体现形式通常为用户故事。Scrum团队总是先开发对客户具有较高价值的需求。在Sprint中,Scrum团队从产品Backlog中挑选最高优先级的需求进行开发。挑选的需求在Sprint计划会议上经过讨论、分析和估算得到相应的任务列表,我们称它为Sprint backlog。在每个迭代结束时,Scrum团队将递交潜在可交付的产品增量。
特点分析与对比
瀑布模型的出现使得一开始无序混乱的软件开发变得有序、结构化,为软件开发提供了一套规整的、系统的开发路线,其一开始的确为软件开发带来了很大的好处。但瀑布模型这种单一、线性的模式,其缺点也很快显现出来:
这些都是瀑布模型一些显而易见的缺点。针对其中一些瀑布模型不够灵活的缺点,对瀑布模型进行改进得到其他的传统开发模型。如增量模型、螺旋模型等。这些模型一定程度都改善了瀑布模型,降低了开发风险,增加了开发的灵活性。但在软件需求日益多变的今天,随着产品变更的变多,软件开发日程的增加,开发成本将指数增长。
在上面的介绍中,也讨论了敏捷开发的特点,从其特点可以看出,敏捷开发的方法可以很好地解决上面的问题。
这样看来敏捷开发似乎是如今软件开发的最佳选择。然而敏捷开发也有其缺点,其最显著的缺点包括以下几条:
以上等等都是敏捷开发的一些问题。因此我们可以看到敏捷开发也并不是一个万能的开发方法,传统的开发模式也有其适用的地方。在一些需求变化相对较小、规模相对较大、开发者与客户之间利益区分较明显的时候,传统开发还是有其优于敏捷开发的地方。
参考资料
1、《软件工程:实践者的研究方法(第七版)》Roger S.Pressman
2、维基百科:软件开发过程 https://en.wikipedia.org/wiki/Software_development_process
3、百度百科:瀑布模型 http://baike.baidu.com/view/551037.htm
4、维基百科:敏捷软件开发 https://en.wikipedia.org/wiki/Agile_software_development
5、百度百科:极限编程 http://baike.baidu.com/view/259207.htm
6、http://www.scrumcn.com/agile/scrum-knowledge-library/scrum.html
所有图片来源于网络
标签:
原文地址:http://www.cnblogs.com/liu-zheng/p/5965635.html