极限编程 - 价值观与原则
XP 致力于通过引入基本价值观、原则和实践来降低变革成本。通过应用 XP,系统开发项目对于变化应该更加灵活。
极限编程价值观
极限编程(XP)基于五个值 -
沟通
简单
反馈
勇气
尊重
沟通
沟通对于项目的成功起着重要作用。项目的问题常常是由于缺乏沟通而出现的。许多情况都可能导致沟通中断。一些常见问题是 -
开发人员可能不会告诉其他人设计中的重大变化。
开发人员可能不会向客户提出正确的问题,因此关键的领域决策就会失败。
经理可能没有向开发人员提出正确的问题,项目进度也会被误报。
开发人员可能会忽略客户传达的一些重要信息。
极限编程强调团队成员、经理和客户之间持续不断的沟通。单元测试、结对编程、简单设计、通用隐喻、集体所有权和客户反馈等极限编程实践注重沟通的价值。
XP 聘请了一位教练,他的工作是注意人们何时不沟通并重新介绍他们。首选面对面沟通,通过结对编程实现,并且客户代表始终在场。
简单
极限编程相信“今天做一件简单的事情,明天多花一点钱来改变它”比“今天做一件可能永远不会被使用的更复杂的事情”要好。
做需要和要求的事情,但仅此而已。
“做可能有效的最简单的事情”DTSTTCPW 原则。
以最简单的方式实施新功能。也称为 KISS 原则“保持简单,愚蠢!”。
当教练看到极限编程开发人员做一些不必要的复杂事情时,他可能会说 DTSTTCPW。
将系统重构为具有当前功能集的最简单的代码。这将使迄今为止的投资创造的价值最大化。
采取简单的小步骤来实现您的目标,并在失败发生时减少失败的发生。
创造令您引以为豪的东西,并以合理的成本长期维护它。
永远不要实现您现在不需要的功能,即“您不会需要它”(YAGNI) 原则。
沟通和简单是相辅相成的。
你沟通得越多,你就越能清楚地看到需要做什么,并且你对真正不需要做的事情更有信心。
您的系统越简单,您需要的开发人员就越少,沟通的次数就越少。这会带来更好的沟通。
反馈
通过交付可工作的软件,我们认真对待每一次迭代承诺。该软件会尽早交付给客户并获取反馈,以便在需要时进行必要的更改。关于系统当前状态的具体反馈是无价的。反馈的价值在于一个持续运行的系统,能够以可靠的方式传递有关自身的信息。
在极限编程中,确保在不同时间尺度的各个级别提供反馈 -
客户告诉开发人员他们感兴趣的功能,以便开发人员可以只关注这些功能。
单元测试告诉开发人员系统的状态。
系统和代码向管理者、利益相关者和客户提供有关开发状态的反馈。
频繁的发布使客户能够执行验收测试并提供反馈,并且开发人员可以根据该反馈进行工作。
当客户编写新功能/用户故事时,开发人员会估计交付更改所需的时间,以便与客户和经理设定期望。
因此,在极限编程中,反馈 -
充当变革的催化剂
表示进展
让开发人员相信他们走在正确的轨道上
勇气
极限编程通过以下方式为开发人员提供勇气 -
只关注需要的内容
沟通并接受反馈
真实地讲述进度和估计
重构代码
随时适应变化
扔掉代码(原型)
这是可能的,因为没有人单独工作,教练不断指导球队。
尊重
尊重是一种深刻的价值观,它低于其他四种价值观的表面。在极限编程中,
每个人都互相尊重,视为有价值的团队成员。
每个人都贡献热情等价值。
开发人员尊重客户的专业知识,反之亦然。
管理层尊重开发人员接受责任并接受其工作权力的权利。
与沟通、简单和具体的反馈相结合,勇气变得极其宝贵。
沟通支持勇气,因为它为更多高风险、高回报的实验提供了可能性。
简单性支持勇气,因为使用简单的系统你可以变得更加勇敢。您在不知不觉中破坏它的可能性要小得多。
勇气支持简单性,因为一旦你看到简化系统的可能性,你就会尝试它。
具体的反馈支持勇气,因为如果你能看到测试最后变成绿色,你会觉得尝试对代码进行彻底修改会更安全。如果任何测试没有变绿,您就知道可以扔掉代码。
极限编程原理
这些价值观很重要,但它们很模糊,因为可能无法确定某物是否有价值。例如,从某人的角度来看很简单的事情从其他人的角度来看可能很复杂。
因此,在极限编程中,基本原则是从价值观中衍生出来的,以便可以根据这些原则来检查开发实践。每条原则都体现了价值观并且更加具体,即快速反馈——您要么拥有它,要么没有。
极限编程的基本原则是 -
快速反馈
假设简单
渐进式改变
拥抱变化
优质工作
快速反馈
快速反馈就是获取反馈、理解反馈,并尽快将学到的知识放回到系统中。
开发人员设计、实施和测试系统,并在几秒钟或几分钟内使用反馈,而不是几天、几周或几个月。
客户审查系统以检查它可以如何最好地做出贡献,并在几天或几周内而不是几个月或几年内提供反馈。
假设简单
假设简单性就是将每个问题视为可以通过简单性解决。
传统上,你被告知要为未来做计划,为重用而设计。这种方法的结果可能会变成“客户今天的要求没有得到满足,最终交付的可能已经过时且难以改变”。
“假设简单”意味着“今天做好解决今天的工作,并相信你有能力在未来需要的地方增加复杂性。” 在极限编程中,你被告知要做好工作(测试、重构和沟通),专注于当前重要的事情。
通过良好的单元测试,您可以轻松重构代码以执行其他测试。
关注 YAGNI(你不需要它)。
遵循 DRY(不要重复自己)原则。例如,
不要拥有相同(或非常相似)代码的多个副本。
不要有冗余的信息副本。
不会在不必要的事情上浪费时间和资源。
渐进式改变
在任何情况下,一次性做出重大改变都是行不通的。任何问题都可以通过一系列产生影响的最小改变来解决。
在极限编程中,增量变更有多种应用方式。
设计每次都会改变一点。
计划每次都会改变一点。
团队每次都会发生一些变化。
即使采用极限编程也必须分步进行。
拥抱变革
最好的策略是在实际解决最紧迫问题的同时保留最多选择的策略。
优质工作
每个人都喜欢做好工作。他们努力生产令他们引以为豪的品质。团队
效果很好
享受工作
生产有价值的产品感觉良好