极限编程 - 价值观与原则


XP 致力于通过引入基本价值观、原则和实践来降低变革成本。通过应用 XP,系统开发项目对于变化应该更加灵活。

极限编程价值观

极限编程(XP)基于五个值 -

  • 沟通

  • 简单

  • 反馈

  • 勇气

  • 尊重

沟通

沟通对于项目的成功起着重要作用。项目的问题常常是由于缺乏沟通而出现的。许多情况都可能导致沟通中断。一些常见问题是 -

  • 开发人员可能不会告诉其他人设计中的重大变化。

  • 开发人员可能不会向客户提出正确的问题,因此关键的领域决策就会失败。

  • 经理可能没有向开发人员提出正确的问题,项目进度也会被误报。

  • 开发人员可能会忽略客户传达的一些重要信息。

极限编程强调团队成员、经理和客户之间持续不断的沟通。单元测试、结对编程、简单设计、通用隐喻、集体所有权和客户反馈等极限编程实践注重沟通的价值。

XP 聘请了一位教练,他的工作是注意人们何时不沟通并重新介绍他们。首选面对面沟通,通过结对编程实现,并且客户代表始终在场。

简单

极限编程相信“今天做一件简单的事情,明天多花一点钱来改变它”比“今天做一件可能永远不会被使用的更复杂的事情”要好。

  • 做需要和要求的事情,但仅此而已。

    • “做可能有效的最简单的事情”DTSTTCPW 原则。

    • 以最简单的方式实施新功能。也称为 KISS 原则“保持简单,愚蠢!”。

    • 当教练看到极限编程开发人员做一些不必要的复杂事情时,他可能会说 DTSTTCPW。

    • 将系统重构为具有当前功能集的最简单的代码。这将使迄今为止的投资创造的价值最大化。

  • 采取简单的小步骤来实现您的目标,并在失败发生时减少失败的发生。

  • 创造令您引以为豪的东西,并以合理的成本长期维护它。

  • 永远不要实现您现在不需要的功能,即“您不会需要它”(YAGNI) 原则。

沟通和简单是相辅相成的。

你沟通得越多,你就越能清楚地看到需要做什么,并且你对真正不需要做的事情更有信心。

您的系统越简单,您需要的开发人员就越少,沟通的次数就越少。这会带来更好的沟通。

反馈

通过交付可工作的软件,我们认真对待每一次迭代承诺。该软件会尽早交付给客户并获取反馈,以便在需要时进行必要的更改。关于系统当前状态的具体反馈是无价的。反馈的价值在于一个持续运行的系统,能够以可靠的方式传递有关自身的信息。

在极限编程中,确保在不同时间尺度的各个级别提供反馈 -

  • 客户告诉开发人员他们感兴趣的功能,以便开发人员可以只关注这些功能。

  • 单元测试告诉开发人员系统的状态。

  • 系统和代码向管理者、利益相关者和客户提供有关开发状态的反馈。

  • 频繁的发布使客户能够执行验收测试并提供反馈,并且开发人员可以根据该反馈进行工作。

  • 当客户编写新功能/用户故事时,开发人员会估计交付更改所需的时间,以便与客户和经理设定期望。

因此,在极限编程中,反馈 -

  • 充当变革的催化剂

  • 表示进展

  • 让开发人员相信他们走在正确的轨道上

勇气

极限编程通过以下方式为开发人员提供勇气 -

  • 只关注需要的内容

  • 沟通并接受反馈

  • 真实地讲述进度和估计

  • 重构代码

  • 随时适应变化

  • 扔掉代码(原型)

这是可能的,因为没有人单独工作,教练不断指导球队。

尊重

尊重是一种深刻的价值观,它低于其他四种价值观的表面。在极限编程中,

  • 每个人都互相尊重,视为有价值的团队成员。

  • 每个人都贡献热情等价值。

  • 开发人员尊重客户的专业知识,反之亦然。

  • 管理层尊重开发人员接受责任并接受其工作权力的权利。

与沟通、简单和具体的反馈相结合,勇气变得极其宝贵。

  • 沟通支持勇气,因为它为更多高风险、高回报的实验提供了可能性。

  • 简单性支持勇气,因为使用简单的系统你可以变得更加勇敢。您在不知不觉中破坏它的可能性要小得多。

  • 勇气支持简单性,因为一旦你看到简化系统的可能性,你就会尝试它。

  • 具体的反馈支持勇气,因为如果你能看到测试最后变成绿色,你会觉得尝试对代码进行彻底修改会更安全。如果任何测试没有变绿,您就知道可以扔掉代码。

极限编程原理

这些价值观很重要,但它们很模糊,因为可能无法确定某物是否有价值。例如,从某人的角度来看很简单的事情从其他人的角度来看可能很复杂。

因此,在极限编程中,基本原则是从价值观中衍生出来的,以便可以根据这些原则来检查开发实践。每条原则都体现了价值观并且更加具体,即快速反馈——您要么拥有它,要么没有。

极限编程的基本原则是 -

  • 快速反馈

  • 假设简单

  • 渐进式改变

  • 拥抱变化

  • 优质工作

快速反馈

快速反馈就是获取反馈、理解反馈,并尽快将学到的知识放回到系统中。

  • 开发人员设计、实施和测试系统,并在几秒钟或几分钟内使用反馈,而不是几天、几周或几个月。

  • 客户审查系统以检查它可以如何最好地做出贡献,并在几天或几周内而不是几个月或几年内提供反馈。

假设简单

假设简单性就是将每个问题视为可以通过简单性解决。

传统上,你被告知要为未来做计划,为重用而设计。这种方法的结果可能会变成“客户今天的要求没有得到满足,最终交付的可能已经过时且难以改变”。

“假设简单”意味着“今天做好解决今天的工作,并相信你有能力在未来需要的地方增加复杂性。” 在极限编程中,你被告知要做好工作(测试、重构和沟通),专注于当前重要的事情。

  • 通过良好的单元测试,您可以轻松重构代码以执行其他测试。

  • 关注 YAGNI(你不需要它)。

  • 遵循 DRY(不要重复自己)原则。例如,

    • 不要拥有相同(或非常相似)代码的多个副本。

    • 不要有冗余的信息副本。

    • 不会在不必要的事情上浪费时间和资源。

渐进式改变

在任何情况下,一次性做出重大改变都是行不通的。任何问题都可以通过一系列产生影响的最小改变来解决。

在极限编程中,增量变更有多种应用方式。

  • 设计每次都会改变一点。

  • 计划每次都会改变一点。

  • 团队每次都会发生一些变化。

即使采用极限编程也必须分步进行。

拥抱变革

最好的策略是在实际解决最紧迫问题的同时保留最多选择的策略。

优质工作

每个人都喜欢做好工作。他们努力生产令他们引以为豪的品质。团队

  • 效果很好

  • 享受工作

  • 生产有价值的产品感觉良好