极限编程XP(Extreme Programming)

极限编程简介

      极限编程(Extreme Programming,简称XP)是敏捷软件开发方法的代表。2000年,美国软件工程专家Kent Beck对极限编程这一创新软件过程方法论进行了解释:“XP是一种轻量、高效、低风险、柔性、可预测、科学而充满乐趣的软件开发方法。”Kent Beck建议XP应用于规模小、进度紧、需求变化大、质量要求严格的项目。它是价值而非实践驱动的高度迭代的开发过程,其价值体现在以下几个方面:

第一,沟通(Communication):即追求有效的沟通。XP强调项目开发人员、设计人员、客户之间等有效地、及时地沟通,确保各种信息的畅通。

第二,简单(Simplicity):即实现最简单的可行方案。XP认为应该尽量保持代码的简单,只要能够满足工作需要就行,这样有利于代码的重构和优化。

第三,反馈(Feedback):即快速有效的反馈。要求不断对当前系统状态进行反馈,通过反馈,达到迅速沟通、编码、测试、发布的目的。

第四,勇气(Courage):即勇于放弃和重构。对于用户的反馈,XP程序员要勇于对自己的代码进行修改,即使有些修改可能会使得原来已经通过的测试又出现错误,但是经过团队的共同攻关,最终必然会取得满意的效果。

极限过程的开发过程

       与传统的开发过程不同,极限编程的核心活动体现在需求→测试→编码→设计过程中,因此对工作环境、需求分析、设计、编程、测试、发布等提出了新的思路和要求。

1.工作环境

XP要求每个参加项目开发的人都担任一个角色(项目经理、项目监督人等),并履行相应的权利和义务。所有的人都在一个开放式的开发环境中工作,最好是在同一个大房间中工作,随时讨论问题,强调每周工作40小时工作制,不加班。

2.需求分析

客户被纳入开发队伍。由于客户不具备计算机专业知识,无法用专业语言明确描述需求,所以开发人员和客户一起,用讲故事的方式把需求表达出来,这种故事被称为user story,即用user story表示需求。开发人员根据经验讲许多user story组合起来,或将其进行分解,最终记录在story card的小卡片上,这些user story将陆续被程序员在各个小的周期内,按照商业价值、开发风险的优先顺序逐个开发。

3.设计

XP强调简单设计(simple design),即用最简单的办法实现每个小需求。在XP中,没有那种传统开发模式中一次性的、针对所有需求的总体设计,这些设计只要能够满足系统客户在当前的需求就可以了,不需要考虑将来可能的变化,整个设计过程包括在整个螺旋式的项目中。

4.编程

成对编程(pair programming)是极限编程的一大特色,即两个人一起使用同一屏幕,同一个键盘,共同完成一段程序的编码。成对编程的好处是,可以提高纪律性,更容易写出优质的代码,同时保证编程的流畅进行,更重要的是,能够使得整个团队更方便地分享编程经验,有利于新手的快速成长。

5.测试

在极限编程中,测试是非常重要的一个环节,它首先要求在开始写程序之前先写好测试,其目的是为了提高软件的可测试性。XP要求开发人员经常把开发好的模块整合到一起,每次整合后都要运行单元测试;做任何的代码复核和修改,都要运行单元测试;发现了漏洞,就要增加相应的测试。除了单元测试之外,还要进行整合测试、功能测试、负荷测试和系统测试等。所有这些测试是极限编程开发过程中最重要的文档之一,也是最终交付给用户的内容之一。

6.发布

XP要求按照开发计划,每经过一个开发周期,软件就发布一次,而不是像传统的开发方法那样,整个软件开发完成后才发布。在一个开发周期内,开发人员要求客户选择最有价值的user story作为未来一两个星期的开发内容,一个开发周期完成后,提交给客户的系统虽然不是最终的产品,但它已经实现了几个客户认为最重要的story,开发人员将逐步在其基础上增加新的模块,而且在发布前软件都经过单元测试和集成测试,因此,虽然软件并不完备,但是发布的软件客户还是可以真正使用的。

极限过程的价值标准

极限编程技术以沟通、简单、回馈、勇气和尊重为价值标准。

1.沟通

构建一个软件系统的基本任务之一就是与系统的开发者交流以明确系统的具体需求。在一些正式的软件开发方法中,这一任务是通过文档来完成的。极限编程技术可以被看成是开发小组的成员之间迅速构建与传播制度上的认识的一种方法。它的目标是向所有开发人员提供一个对于系统的共享的视角,而这一视角又是与系统的最终用户的视角相吻合的。为了达到这一目标,极限编程支持设计、抽象、还有用户-程序员间交流的简单化,鼓励经常性的口头交流与回馈。

2.简单

极限编程鼓励从最简单的解决方式入手再通过不断重构达到更好的结果。这种方法与传统系统开发方式的不同之处在于,它只关注于对当前的需求来进行设计、编码,而不去理会明天、下周或者下个月会出现的需求。极限编程的拥护者承认这样的考虑是有缺陷的,即有时候在修改现有的系统以满足未来的需求时不得不付出更多的努力。然而他们主张“不对将来可能的需求上投入精力”所得到的好处可以弥补这一点,因为将来的需求在他们还没提出之前是很可能发生变化的。为了将来不确定的需求进行设计以及编码意味着在一些可能并不需要的方面浪费资源。而与之前提到的“交流”这一价值相关联来看,设计与代码上的简化可以提高交流的质量。一个由简单的编码实现的简单的设计可以更加容易得被小组中的每个程序员所理解。

3.反馈

在极限编程中,“反馈”是和系统开发的很多不同方面相关联的:

(1)来自系统的反馈:通过编写单元测试,程序员能够很直观的得到经过修改后系统的状态。

(2)来自客户的反馈:功能性测试是由客户还有测试人员来编写的。他们能由此得知当前系统的状态。这样的评审一般计划2、3个礼拜进行一次,这样客户可以非常容易的了解、掌控开发的进度。

(3)来自小组的反馈:当客户带着新需求来参加项目计划会议时,小组可以直接对于实现新需求所需要的时间进行评估然后反馈给客户。

反馈是与“交流”、“简单”这两条价值紧密联系的。为了沟通系统中的缺陷,可以通过编写单元测试,简单的证明某一段代码存在问题。来自系统的直接反馈信息将提醒程序员注意这一部分。用户可以以定义好的功能需求为依据,对系统进行周期性的测试。

4.勇气

极限编程理论中的“系统开发中的勇气”最好用一组实践来诠释。其中之一就是“只为今天的需求设计以及编码,不要考虑明天”这条戒律。这是努力避免陷入设计的泥潭、而在其他问题上花费了太多不必要的精力。勇气使得开发人员在需要重构他们的代码时能感到舒适。这意味着重新审查现有系统并完善它会使得以后出现的变化需求更容易被实现。另一个勇气的例子是了解什么时候应该完全丢弃现有的代码。每个程序员都有这样的经历:他们花了一整天的时间纠缠于自己设计和代码中的一个复杂的难题却无所得,而第二天回来以一个全新而清醒的角度来考虑,在半小时内就轻松解决了问题。

5.尊重

尊重的价值体现在很多方面。在极限编程中,团队成员间的互相尊重体现在每个人保证提交的任何改变不会导致编译无法通过、或者导致现有的测试案例失败、或者以其他方式导致工作延期。团队成员对于他们工作的尊重体现在他们总是坚持追求高质量,坚持通过重构的手段来为手头的工作找到最好的解决设计方案。

时间: 2024-10-01 23:55:14

极限编程XP(Extreme Programming)的相关文章

XP的极限编程(eXtreme Programming)

XP的极限编程(eXtreme Programming) XP由价值观.原则.实践和行为四个部分组成,它们彼此相互依赖.关联, 并通过行为贯穿于整个生命期. 四大价值观:沟通(Communication).简单(Simplicity).反馈(Feedback).勇气(Courage) 五大原则:快速反馈.简单性假设.逐步修改.提倡更改.优质工作 极限编程最佳实践 极限编程13个最佳实现 现场客户( Customer Tests):客户长期与开发人员在同一间办公室办公,随时解决开发人员关于需求的问

敏捷方法之极限编程(XP)和 Scrum区别

敏捷(Agile)作为一种开发流程, 目前为各大公司所采用, 敏捷流程的具体实践有XP 和Scrum, 似乎很少有文章介绍这两者的区别, 发现一篇外文, 见解非常深刻, 特将其翻译一把. 原文(DIFFERENCES BETWEEN SCRUM AND EXTREME PROGRAMMING )在此: http://blog.mountaingoatsoftware.com/differences-between-scrum-and-extreme-programming 作者总结的大致区别如下

极限编程XP的核心实践是什么?

XP的核心实践:整个团队.规划游戏.小规模发布.客户测试.收集代码所有权.编码标准.一致的节奏.隐喻.持续集成.测试驱动开发.重构.简单设计.结对编程. 原文地址:http://blog.51cto.com/13554215/2096604

互联网企业的敏捷开发之道

版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/236 来源:腾云阁 https://www.qcloud.com/community 作者介绍:韩伟,1999年大学实习期加入初创期的网易,成为第30号员工,8年间从程序员开始,历任项目经理.产品总监.2007年后创业4年,开发过视频直播社区,及多款页游产品.2011年后就职于腾讯游戏研发部公共技术中心架构规划组,专注于通用游戏技术底层的研发. 在互联

研发团队管理

刚接手了一个团队,接到通知需要在公司领导面前说一下自己的研发和管理思路,总结了这几年的思想,写了如下的记录:已经在公司领导前讲过了,得到了还不错的反馈. 1 做软件 原则: 模块原则:使用简洁的接口拼合简单的部件: 清晰原则:清晰胜于技巧: 简洁原则:设计要简洁,复杂度能低则低: 透明性原则:设计要可见,以便审查和调试: 健壮原则:健壮源于透明和简洁: (摘自<The art of UNIX programming> 第1章哲学) 单一职责原则:单一职责:就是一个对象只做一件事. OCP :开

敏捷开发和极限编程

敏捷软件开发(Agile software development): 它是一种用来应对软件需求的不断变更的新的软件开发技术. 强调整个开发过程中业务人员和开发人员紧密协作在一起,面对面交流,频繁性的交付软件,随时应对需求的变更.追求在尽可能短的时间内交付较小的可用的功能,并在整个项目周期中持续改善和增强. 极限编程(Extreme programming,简XP): 极限编程是敏捷开发中最富有成效的几种方法学之一. XP是一种近螺旋式开发方法,它将复杂的开发过程分解成一个个小的开发周期,对需求

关于RUP、XP及敏捷过程

什么是RUP? RUP即Rational 统一过程(Rational Unified Process),是一种完整且完美的软件过程.采用佚代开发,在开发过程中能允许在每次佚代过程中有变化的需求,能使用户可以不断的介入和提出反对意见,并且开发人员也因为随时有一个可以交付的版本而提高士气.在管理需求上,RUP描述了如何提取.组织系统的功能性需求和约束条件并把它们规范化.RUP使用基于构件的体系结构,并提供了使用现有的或新开发的构件定义体系结构的系统化方法,从而有助于降低软件开发的复杂性,提高软件重用

9.12作业(RUP,XP,敏捷过程)

1.RUP(Rational Unified Process,统一软件过程是一个面向对象且基于网络的程序开发方法论.根据Rational(Rational Rose和统一建模语言的开发者)的说法,好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针,模版以及事例支持. RUP和类似的产品--例如面向对象的软件过程(OOSP),以及OPEN Process都是理解性的软件工程工具--把开发中面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等等

补9.12号:rup,xp,敏捷过程

RUP:RUP中文名叫统一软件开发过程,是一个面向对象且基于网络的程序开发方法论.通俗地讲,RUP好像一个在线的指导者,它可以为所有方面和层次的程序开发提供指导方针.模板以及事例支持.RUP和类似的产品把面向过程的方面(例如定义的阶段,技术和实践)和其他开发的组件(例如文档,模型,手册以及代码等)整合在一个统一的框架内.RUP中的软件生命周期在时间上被分解为四个顺序的阶段.初始阶段:初始阶段的目的是为系统建立商业案例并确定项目的边界.细化阶段:细化阶段的目标是分析问题领域,建立健全的体系结构基础