极限编程(Extreme Programming,XP)
目录
|
极限编程是由Kent Beck在1996年提出的。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能性以及面临的困难。1996年3月,Kent提出了新的软件开发观念——XP。
XP是一种轻量级的、灵巧的软件开发方法。同时,该方法具有严谨和周密的特征。XP的基础和价值观是交流、朴素、反馈和勇气,即任何一个软件项目都可以从四个方面入手进行改善:加强交流、从简单做起、寻求反馈和勇于实事求是。XP是一种近似螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期,通过积极的交流、反馈以及其他一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。
“Extreme(极限)”是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、做到最好。XP所不提倡的,则一概忽略(如开发前期的整体设计等)。一个严格实施XP的项目,其开发过程应该是平稳的、高效的和快速的,能够做到一周40小时工作制而不拖延项目进度。
极限编程要求有极限的工作环境、极限的需求、极限的设计、极限的编程和极限的测试。
1.极限的工作环境
为了在软件开发过程中最大程度地实现和满足客户和开发人员的基本权利和义务,XP要求把工作环境也做得最好。每个参加项目开发的人都将担任~个角色(项目经理、项目监督人等)并履行相应的权利和义务。所有的人都在同一个开放的开发环境中工作,每周40小时,不提倡加班。
2.极限的需求
客户应该是项目开发队伍中的一员,而不是和开发人员分开的。因为从项目的计划到最后验收整个过程客户一直起着很重要的作用。开发人员和客户一起,把各种需求分割为一个个小的需求模块,这些模块又会根据实际情况被组合在一起或者被再次分解成更小的模块。上述需求模块都被记录在一些小卡片(Story Card)上,之后将这些卡片分别分配给程序员们,并在一段时间内(通常不超过3个星期)实现。客户根据每个模块的商业价值进行排序,确定开发的优先级。开发人员要做的是确定每个需求模块的开发风险。风险高的(通常是因为缺乏类似的经验)需求模块将被优先研究、探索和开发。经过开发人员和客户分别从不同的角度评估每个模块后,它们被安排在不同的开发周期里,客户将得到一个尽可能准确的开发计划。
3.极限设计
从具体开发过程的角度来看,XP内部的过程是多个基于测试驱动的开发(Test Driven Development)周期。诸如计划和设计等外层的过程都是围绕这些测试展开的,每个开发周期都有很多相应的单元测试(Unit Test)。通过这种方式,客户和开发人员都很容易检验所开发的软件原型是否满足了用户的需求。XP提倡简单的设计(Simple Design),即针对每个简单的需求用最简单的方式进行设计和后续的编程工作。这样写出来的程序可以通过所有相关的单元测试。
XP强调抛弃那种一揽子详细设计方式(Big Design Up Front),因为在这种设计中有很多内容是现在或近期所不需要的。
XP还大力提倡设计复核(Review)、代码复核、重整和优化(Re{ectory)。所有的这些过程的目标,归根到底还是对设计的优化。在这些过程中不断运行单元测试和功能测试,可以保证经过优化后的系统仍然符合用户的需求。
4.极限编程
编程是程序员使用某种程序设计语言编写程序代码,并最终得到能够解决某个问题的程序的过程。XP极其重视编程,提倡配对编程(Pair Programming),即两个人一起写同一段程序,而且代码所有权是归于整个开发队伍(Collective Code Ownership)。程序员在写程序和优化程序的时候,都要严格遵守编程规范。任何人都可以修改其他人写的程序,修改后要确定新程序能通过单元测试。
5.极限测试
测试在XP中是很重要的。XP提倡开发人员经常把开发好的模块整合到一起(Continuous Integration),并且在每次整合后都进行单元测试。对代码进行的任何复核和修改,也都要进行单元测试。发现了错误,就要增加相应的测试,因此XP方法不需要错误数据库。
除了单元测试之外,XP还要进行整合测试、功能测试、负荷测试和系统测试等。这些测试是XP开发过程中最重要的活动之一,与之相对应的测试文档也是最终交付给用户的内容之一。
根据极限编程的价值观,可以总结出使用该方法进行项目开发的时候应该遵循的规则。
1、完整团队
XP项目的所有参与者(开发人员、客户和测试人员等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。
2、计划
在XP项目中,计划是持续的、循序渐进的。XP项目组只为下两周的开发活动估算开发成本,而客户则根据成本和商业价值来选择要实现的功能模块。
3、客户测试
客户测试已经开发好的模块是否符合客户的需求。
4、简单设计
XP项目团队应当保持设计方案恰好和当前的系统需求相匹配。它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包含尽可能少的代码。
5、配对编程
所有的产品软件都是由两个程序员并排坐在一起共同开发的。
6、测试驱动开发
编写单元测试是一个验证行为,更是~个设计行为。同样,它也是一种编写文档的行为。编写单元测试避免了相当数量的反馈循环,尤其是功能验证方面的反馈循环。
7、改进设计
随时利用重构方法改进已经过时的代码,保持代码尽可能的干净、具有表达力。
8、持续集成
XP团队总是对现有模块进行集成。
9、代码所有权归集体所有
任何配对的程序员都可以在任何时候改进任何代码。没有程序员对任何一个特定的模块或技术单独负责,每个人都可以参与任何其他方面的开发。
10、编码标准
制定编码标准,并且整个团队都必须遵守该编码标准。使系统中所有的代码看起来就好像是一个人编写的。
11、可持续的速度
XP团队成员以能够长期维持的速度努力工作,保存精力,把项目看做是马拉松长跑,而不是全速短跑。
李彤,王炜,郁湧编著,软件工程概论,科学出版社,2012.02,第186页