在软件工程这样一个快节奏的环境中,传统的项目管理方法不再可行。这意味着IT从业者必须找到新的方法来处理经常变化的开发任务。
2001年,17位软件专家都认为必须找到新的方法来应对不断变化的开发任务,他们着眼于现有的增量式开发技术,提出了”敏捷项目管理”的概念。《敏捷宣言》中概述了灵活、快速和以协作为中心的软件开发原则。
极限编程(XP)是IT公司应用的众多敏捷框架之一。但它着重于软件开发的技术方面,这一关键特征将XP与其他敏捷方法论区别开来。
软件工程师Ken Beck在90年代引入XP,其目的是找到快速编写高质量软件的方法,并能够适应客户不断变化的需求。1999年,他在《解析极限编程:拥抱变化》一书中对XP方法进行了完善。
XP是一组工程实践。开发人员在执行这些实践时必须超越自己的能力在执行这些实践时。这就是其名字中的“极限”的来源。为了更好地理解这些实践,我们将首先讨论XP的价值和原则。
一、极限编程的价值和原则
XP有5个价值点。
- 沟通:团队中的每个人都互通工作。
- 简单性:开发人员努力编写简单的代码,为产品带来更多价值,因为这样可以节省时间和精力。
- 反馈:团队成员经常交付软件,获取有关软件的反馈,并根据新的需求改进产品。
- 尊重:每个被分配到项目中的人都为一个共同的目标做出贡献。
- 勇气:成员客观地评估自己的失误造成的后果而不是找借口,并且随时准备应对变化。
这些价值观代表了积极进取的团队成员的一种特定心态:他们在实现共同目标的道路上竭尽全力。XP原则源自这些价值,并通过更具体的方式将它们反映出来。
大多数研究者将5条XP原则描述为:
- 快速反馈:团队成员理解客户在开发过程中给出的反馈,并能够迅速做出反应。
- 假设简单:开发人员需要专注于当前重要的工作,遵循所有问题都可以简单地解决原则。
- 增量变化:对产品一小步一小步的改变比一次性的大改变效果更好。
- 拥抱变化:如果客户认为产品需要改变,作为程序员,他们应该支持这个决定,并拟定如何实现新需求的计划。
- 高质量的工作:一个工作出色的团队,他们能够创造出有价值的产品,并为此感到自豪。
现在是时候学习如何将软件开发团队转变为理想团队了。
二、极限编程实践
XP建议在开发软件时使用12种实践。由于XP是由价值和原则定义的,所以它的实践也代表了这些价值和原则,实践可以分为四类。
1.反馈
1)测试驱动开发
是否可以快速编写清晰的代码?根据XP实践者的说法,答案是肯定的。软件的质量源于较短的开发周期,而开发周期反过来又允许接收频繁的反馈,有价值的反馈来自于良好的测试。XP团队采用测试驱动开发技术(TTD),该技术要求在代码完成之前编写一个自动的单元测试。根据这种方法,每一段代码都必须通过测试才能发布。因此,软件工程师只需要专注于编写能够完成所需功能的代码。这就是TDD允许程序员使用即时反馈来生成可靠软件的方式。
2)规划游戏
这是发生在迭代周期开始的会议。开发团队和客户聚在一起讨论并批准产品的特性。在计划游戏的最后,开发人员计划即将到来的迭代和发布,为每个迭代和发布分配任务。
3)客户参与
根据XP的说法,客户应该参与进开发的全过程。客户应该不断地回答团队提出的问题,以便团队更好地设定任务的设定优先级,并在必要时解决争议。
4)结对编程
这种做法需要两个程序员共同处理同一代码。当第一个开发人员专注于编写代码时,另一个则在整个过程中检查代码,提出改进建议并修正过程中的错误。这样的团队合作产生了高质量的软件,加快了知识共享,但使要多花费15%到60%的时间。在这方面,尝试对长期项目进行结对编程更合理。
2.持续过程
1)代码重构
为了在每个短迭代中使用精心设计的软件交付业务价值,XP团队还使用了重构。这种技术的目标是持续改进代码。重构就是消除冗余,消除不必要的函数,增加代码的一致性,同时解耦元素。保持代码简洁明了,以便任何XP团队成员都可以根据需要轻松理解的修改代码。
2)持续集成
不同于开发人员始终保持系统完全集成的形式,XP团队将迭代开发提高到了另一个层次,他们每天会提交多次代码,因此这也被称为连续交付。XP实践者理解沟通的重要性,成员之间会相互讨论代码的哪些部分可以重用或共享。通过这种方式,他们能够明确地知道他们需要开发什么功能。共享代码的策略有助于消除集成问题,此外,自动化测试允许开发人员在部署之前及早发现并修复错误。
3)小版本迭代
这种做法建议快速发布第一个版本,并通过进行小型增量更新来进一步开发产品。小版本迭代使开发人员可以经常收到反馈,能够及早发现错误,并监视产品在生产中的工作方式。实现这一点的方法之一是我们前面提到过的持续集成实践(CI)。
3.代码解读
1)简单设计
最好的软件设计就是最简单的可行的设计。如果发现任何复杂性,就应该删除它。正确的设计应该通过所有测试,没有重复的代码,并且包含尽可能少的方法和类。它还应该清楚地反映程序员的意图。
XP的实践者强调,在产品投入生产一段时间后,简化设计的机会会更高。Don Wells建议为那些你打算马上实现的特性编写代码,不要为其他未来的特性提前编写代码。最好的方法是,在搜索足够的知识来实现最简单的设计的同时,只为自己正在实现的特性创建代码,然后逐步重构以实现新的理解和设计。
2)编码标准
团队必须有通用的编码实践集,并使用相同的格式和样式来编写代码。标准的应用允许所有团队成员轻松地阅读、共享和重构代码,跟踪某位成员在某些代码片段上所做的工作,以及能使其他程序员更快地学习这些代码。XP鼓励让按照相同规则编写的代码实现集体所有权。
3)代码集体所有权
这种做法表明了整个团队对系统设计的责任。每个团队成员都可以检查和更新代码。有权访问代码的开发人员不会陷入他们不知道在哪里添加新功能的情况,这种做法有助于避免代码重复。代码集体所有权的实现鼓励团队更多地合作,并随时提出新想法。
4)系统的隐喻
系统隐喻代表具有一组特定特性的简单设计。首先,一个设计和它的结构必须使新人们可以理解的。他们应该能够在不花费太多时间检查规范的情况下开始工作。其次,类和方法的命名应该一致。开发人员应该将对象命名为已经存在的对象,这样可以使整个系统设计易于理解。
4.程序员的工作条件
每周工作40小时。XP项目要求开发人员快速、高效地工作,同时保持产品的质量。为了达到这些要求,他们应该自我调整并休息好。保持工作与生活的平衡可以防止职场人士过度劳累。在XP中,每周工作时间的最佳数量不得超过45小时。只有在下一周没有加班的情况下,每周才可能加班一次。
三、何时使用XP
确保公司的规模、结构、专业知识以及员工的知识库能够应用XP实践非常重要,这些都是使用XP时需要考虑的因素。
- 高度自适应发展:XP旨在帮助开发团队适应快速变化的需求。
- 有风险的项目:应用XP实践的团队更应该避免在新系统上地工作相关的问题,特别是当产品负责人为项目设定严格的最后期限时。
- 小团队:XP实践对于不超过12人的团队非常有效。
- 自动化测试:影响XP选择的另一个因素是开发人员创建和运行单元测试的能力。
- 客户参与:由于XP要求客户、开发人员和管理人员并肩工作,所以要确保客户能够在项目结束前能够一直参与进开发过程中。
四、结论
极限编程是一种基于简单、沟通、反馈和勇气的价值观的软件开发方法。
在XP原则和价值观地基础上建立工作流程的公司能够在团队内部和团队之间创造出一种相互竞争而又激励人心的氛围。成员之间都投入到项目中,可以快速交付软件。这是因为他们可以将相关任务与不必要任务区分开。他们能够很快对反馈做出反应,使产品变得更好。
XP团队并不会将每一个技术挑战都看作一个问题,而是将其看作培养成员能力、技能的一种方式。