极限编程概述
极限编程(Extreme Programming,简称XP)是目前讨论最多、实践最多、争议也是最多的一种敏捷开发方法。XP是一套能够快速开发高质量软件所需的价值观、原则和活动的集合,使软件能以尽可能快的速度开发出来并向客户提供最高效益。
XP是很多Java开源软件使用的软件开发方法,也是许多实干派大师倍加推崇的一种方法,同时也有很多使用传统软件开发方法的大师和大公司倍加批评的一种软件开发方法。可以说,认同者,对它是相见恨晚!批评者,认为它是离经叛道,胡说八道!接触XP 之前,我也曾认为它的思想和实践都是胡扯。但是,经过深入学习之后,才发现XP是句句箴言,十分有道理。而之前的我,却是白走了很多冤枉路!我相信,所有的软件开发都应该使用极限编程来实施!
极限编程的力量源泉
XP的极限就在于它将12个众所周知的软件开发“最佳实践”都发挥到了极限“10分”。
下面是Kent Beck提出的12个最佳实践:
1,计划游戏—通过结合使用业务优先级和技术评估来快速确定下一个版本的范围。当计划赶不上实
际变化时就应更新计划。
2,小版本—将一个简单系统迅速投入生产,然后以很短的周期发布新版本。
3,隐喻—用有关整个系统如何运行的简单、众所周
知的故事来指导所有的开发。
4,简单设计—任何时候都应当将系统设计的尽可能简单。不必要的复杂性一旦被发现就马上去掉。5,测试—程序员不断地编写单元测试,在这些测试能够准确无误地运行的情况下,开发才可以继续。
客户编写测试来证明各功能已经完成。
6,重构—程序员重新构造系统(而不更改其行为)以去除重复、改善沟通、简化或提高柔性。
7,结对编程—所有的生产代码都是由两个程序员在通一台机器上编写的。
8,集体所有权—任何人在任何时候都可以在系统中的任何位置更改任何代码。
9,持续集成—每天多次集成和生成系统,每次都完成一项任务。
10,每周工作40小时—一般情况下,一周工作不超过40小时。不要连续两个星期都加班。
11,现场客户—在团队中加入一位真正的、起作用的用户,他将全职负责回答问题。
12,编码标准—程序员依照强调通过代码沟通的规则来编写所有代码。[1]
XP依靠这些简单得可笑的最佳实践(就是那些几十年前常常被视为不切实际或天真而遭摒弃的实践)之间的协作,高效地完成软件开发的重任。“实践互相支持。一种实践的弱点可以由其他实践的优点来弥补。”[2]
Java开源社区的软件成指数形式增长,已经超过了C和C++的开源软件项目的数量,位居开源领域第一位。可以说,这其中很大的功劳是因为诞生于Java 社区的极限编程,在Java社区获得了广泛的认同,众
多的开源项目应用极限编程的实践,取得了巨大的成功。Rod Johnson主持开发的著名开源项目Spring框架,就是使用极限编程开发的。其他许多著名的Java 开源软件项目也都是使用极限编程开发的。
极限编程的真谛
但是,尽管许多采用极限编程的软件项目取得了成功,但是仍有为数众多的项目最后失败了。失败者往往认为,是XP本身不切实际造成了他们的失败,或者是认为XP不能够适用于他们项目的特殊情况。
我认为,事实并非如此,XP是迄今为止最完美的一种软件开发方法,也是一种普遍适用的软件开发方
法。失败的原因,是因为项目实施者没有能够真正的领悟XP的真谛。
极限编程的假设
极限编程的假设:平滑成本曲线—变化的成本不会随时间的推移而急剧上升。极限编程的12个最佳实践中,很多实践都是在几十年前结构化编程和瀑布模型时代被毙掉的“最差实践”。为什么到了极限编程这里,它们就能够起死回生呢?这就是因为今天使用了适当的软件开发技术后,成本曲线已经改变,已经变得平滑,而非“变化的成本随时间的推移而以指数方式上升”[3]。
极限编程的技术基石是OO面向对象技术,而且是高超的面向对象技术。不是说,你使用面向对象的编程语言开发软件,开发出的软件就是面向对象的。
Kent Beck,Ward Cunningham,Martin Fowler,Robert C. Martin,Rod Johnson等XP的领军人物无一不是面向对象软件开发的顶尖高手。面向对象技术为软件模块高度解耦提供了可能,只有这样的软件,“平滑成本曲线”这一假设才能够成立,应用XP才能够取得辉煌的胜利。
记得有一位大师曾经说过“教会一个人使用C++的唯一途径,就是使其成为高手”。对于极限编程来说也是如此,教会一个人使用极限编程的唯一途径,就是使其成为软件开发的高手!
Kent Beck等极限编程的开拓者提出了12个软件开发的最佳实践。这些实践涵盖了软件开发的各个阶段,
可以说为极限编程提出了简单有效的实施方式。但是,不能不说,这12个最佳实践过于宽泛。XP实践者在实际的项目开发过程中,常常不知道该怎样实施这些实践。为此,我在本论文中将深入阐述一些上述12个经典最佳实践中的几个,也会另外提出一些更有实际意义的最佳实践和原则。
Kent Beck说:“XP也反映了我不担心的事情:
1,编码。
2,改变想法。
3,对未来一无所知而能不断前进。
4,依赖别人。
5,更改运行中的系统地分析和设计。
6,编写测试。
”[8]
Kent Beck并不害怕这些,但是很多程序员却害怕这些。正是这些能力上的不足,让很多XP项目夭折
了。本文就是希望对帮助你克服这些恐惧有所帮助。
极限编程的真谛
一、极限编程的哲学思想是实证主义的哲学思想:“任何不能度量的事物都是不存在的”[4]。极限编程反对传统开发方法重视过程和文档的做法,主张快速的开发、构建、测试和部署软件。认为,一切决策都应该基于软件的实际运行结果,而不是无端的猜测。经常“问问电脑”[5expert one-on-one J2EE Development without EJB 中文版第9页],而不是基于一种毫无证据的信念,这是XP人的基本编程原则。XP人首先就需要是一个皈依实证主义哲学的信徒。
二、极限编程的假设:平滑成本曲线—变化的成本不会随时间的推移而急剧上升。这就是说,采用极限编程方法开发的软件,必须容易修改。随着时间的推移,修改软件的成本不会急剧上升。不论这个修改是对于单个类的小修小改,还是对于业务功能的修改,甚至是修改软件的架构,其成本都不应该急剧上升。
怎样写代码 自己做编程这就需要,首先,软件在概念上是简单清晰、易于理解的。“简单设计”是XP方法的核心思想和第一要求!12个经典的最佳实践中,可以说,每一个都是在力求开发出的软件简单清晰、易于理解。XP不欢迎所谓的高手,不欢迎高效而复杂的设计。XP只需要简单清晰、而又满足最基本的性能要求的设计。最佳设计,就是能运行所有测试用例的最简单的设计。
XP的软件,其简单性,不仅仅反映在软件概念上。而且,其整个的开发流程也是简单、灵活、可迭代的。倾听、设计、测试、编码就是一个完整的软件开发的过程。这个开发过程的所有工作,都由一个或者一对结对的程序员完成。管理人员只是分发任务和跟踪项目进展情况,并不干涉程序员们怎样完成他们的工作。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论