1. 极限编程简介
极限编程(Extreme Programming,XP)是一种敏捷开发方法,供中小型团队用于开发需求快速变化的软件。
美国软件工程专家Kent Beck对极限编程进行了解释:
XP是一种轻质量、高效、低风险、柔性、可预测、科学而充满乐趣的软件开发方法。
极限编程是价值而非实践驱动的高度迭代的开发过程。其价值体现在以下几个方面:
-
简单
在XP中,简单被定义为“在管用的前提下,做简单的事情”即实现最简单的可行方案。XP认为应该尽量保持代码的简单,只要能够满足工作需要就行,这样有利于代码重构和优化。
-
交流
所有的方法都包含在交流过程中,而在XP中,这是其核心价值观。它侧重于口头交流,XP追求有效的交流,而且强调项目开发人员、设计人员、客户之间的有效的、及时的交流,确保各种信息的畅通。
-
反馈
反馈对于任何项目的成功都是生死攸关的,在XP中,有关软件状态的问题是通过持续的、明确的反馈来回答的。通过反馈,达到迅速交流、编码、测试、发布项目的目的。
-
勇气
即勇于放弃和重构,对于用户的反馈,XP程序员要勇于对自己的代码进行修改,即使有些修改可能会使得原来已经通过的测试又出现错误,但是经过团队的共同攻关,最终必然会取得满意的效果。
2. 极限编程的开发过程及特点
与传统的开发过程不同,极限编程的核心活动体现在需求——测试——编码——设计
过程中,因此对工作环境、需求分析、设计、编程、测试、发布等提出了新的思路和需求。
-
工作环境
XP要求每个参加项目开发的人都担任一个角色,并履行相应的权利和义务。所有的人都在一个开放式的开发环境中工作,最好是在同一个大房间中工作,随时讨论问题,强调每周40小时工作制度,不加班。
-
需求分析
客户被纳入开发队伍。由于客户不具备计算机专业知识,无法用专业术语明确的描述需求,所以开发人员和客户在一起,用讲故事的方式把需求表达出来,开发人员根据经验将许多故事组合起来,或将其进行分解,最终记录在小卡片上,这些故事将陆续被研发团队在各个周期内,按照商业价值、开发风险优先顺序逐个开发。
-
设计
XP强调简单设计,即用最简单的办法实现每个小需求。在XP中,没有哪种传统开发模式中一次性的、针对所有需求的总体设计,这些设计只要能够满足客户在当前的需求就可以了,不需要考虑将来可能的变化,整个设计过程包括在整个螺旋式发展的项目中。
-
测试
XP开发人员在编写代码之前进行测试,而不是在开发完成后再进行测试。开发人员编写单元测试,对方法以及可能出现问题的每个地方进行测试。编写好对针对组件的所有测试后,开发人员只编写刚好能够通过测试的代码。编写这样的测试将为系统提供一套完整的测试,而我们只编写最简单的,能够管用的代码。仅当类通过了所有的测试,编写工作才算完成。所有这些测试是极限编程开发过程中最重要的文档之一,也是最终交付给用户的内容之一。
-
编程
结对编程是极限编程的一大特色,即两个人一起使用同一个屏幕,同一个键盘,共同完成一段程序的编码。结对编程的好处是,可以提高纪律性,更容易写出优质代码,同时保证编程的流畅进行,更重要的是,能够使得整个团队更方便的分享编程经验,有利于新手快速成长。
-
发布
XP要求按照开发计划,每经过一个开发周期,软件就发布一次,而不是像传统的开发方法那样,整个软件开发完后才发布。在一个开发周期内,开发人员要求客户选择最有价值的user story作为未来一两个星期的开发内容,一个开发周期完成后,提交给客户的系统虽然不是最终的产品,但是已经实现了几个客户认为是最重要的story ,因此,虽然软件并不完备但是,发布的软件客户还是可以真正使用的。
3. 极限编程的优点
- 对公司的开发者而言,XP可以让开发者专注于编写代码,避免了不必要的文案工作及会议。它营造了更好的工作氛围,更多学习新技术的机会,并令你的员工有成就感。
- 相比于传统开发方式,通过XP开发的软件缺陷更少。它令公司对其商业需求的变化做出更快速的反应,而且价格低廉,开发者也少有怨言。
- 从公司管理的角度来看,这种方法可以减少你对牛人的依赖。同时它也提升了员工满意度。
- 在XP下,你无需设计未来。你设计今天。整个理念就是,写简单代码,以及在需求改变的时候相应的改变你的设计。
- 你的开发人员是两人结队编程,从头到尾都在一起工作。代码有着统一的规范性和可读性,大家都能够理解代码并按照需求改善代码。而且,结队编程在一定时间内是最有效率的。
- XP项目与传统软件开发的最大区别在于,XP是以测试推动开发。在XP下可以在编写代码之前开始测试。每一个环节的代码都要100%通过单元测试。没有unit-level bug和回归bug也意味着开发者能够专注他们自己的工作。你的客户确立自动验收测试以确认该软件的每一个功能的运行质量。
- 在XP下,每一个测试阶段之后都可以发布一个小体积软件。最重要的是,每一阶段完成时都有些东西能够拿给客户看。
- 在传统流水线方式下,如果项目计划变更,之后要赶上档期就会需要很大投入。XP的方法可以令你提前判断进程。
- 极限编程从最简单的解决方案入手。你可以在之后添加其他功能。这个概念的目的在于为今天做计划,设计及编码,而不是为了明天。
- 来自系统、客户和团队的反馈是极限编程成功的关键。在这个概念的指导下,系统的漏洞在前期就被发现,客户可以反复进行验收测试,从而最大限度的降低你产品中的错误。
4.极限编程的缺点
- 以代码为中心,忽略了设计;
- 缺乏设计文档,局限于小规模项目;
- 对已完成工作的检查步骤缺乏清晰的结构;
- 质量保证依赖于测试;
- 缺乏质量规划;
- 没有提供数据的收集和使用的指导;
- 开发过程不详细;
- 全新的管理手法带来的认同度问题;
- 缺乏过渡时的必要支持。
5. 极限编程的运用
XP适用于规模小、进度紧、需求变化大、质量要求严的项目。它希望以最高的效率和质量来解决用户目前的问题,以最大的灵活性和最小的代价来满足用户未来的需求,XP在平衡短期和长期之间做了巧妙的安排。
国内的软件开发过程经常存在一些问题,如:客户需求变化频繁、系统交付时间一推再推、交付系统错误层出不穷、因程序员半途跳槽而导致工作不能顺利完成、需求估计不足、因程序员之间交流少而导致代码重复开发、文档不能真实地反映实际情况等等。为了有效地克服上述问题,软件机构在项目开发时,有意识地采用XP方法,并且取得了一定效果。通过对这些应用的总结,可以概括出,XP应用确实具有一定的适用范围,而应用成功的关键在于,充分认识XP应用过程中的优缺点,在保持组织既有的开发过程和生命周期模型的前提下,结合应用类型、项目特点和组织文化,借鉴、汲取个别项目有效的XP方法,在领会其精神实质的基础上灵活运用,而不是全部照搬硬套。另外以下几个问题也是在应用中需要注意的:
- 不同方法的目标对象和适用环境各不相同,学习和运用流行的过程方法论是实施过程改进的好办法,但在具体应用过程中,应整合其最佳元素,设计出适合具体实际项目的过程体系。
- 在软件工程实践中要充分把握好开发技能、软件过程和组织管理各个要素的平衡,不能偏重某一方面,轻视另一方面;
- 在应用XP时,应该首先从基本实践入手,逐渐深入到扩展性实践,因为基本实践彼此独立,互不影响,而扩展性实践则是建立在某些基本实践的基础上的,而且要采取循序渐进、迂回反复(迭代)的策略,而不是一步到位,这样容易取得成功。
网友评论