极限编程 - 价值观和原则

XP 旨在通过引入基本价值观、原则和实践来降低变更成本。通过应用 XP,系统开发项目应该能够更灵活地应对变更。

极限编程价值观

极限编程 (XP) 基于五个价值观 −

  • 沟通

  • 简单

  • 反馈

  • 勇气

  • 尊重

沟通

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

  • 开发人员可能不会将设计中的关键更改告知其他人。

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

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

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

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

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

简单

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

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

    • "做最简单的可能有用的事情"DTSTTCPW 原则。

    • 以最简单的方式实现新功能。也称为 KISS 原则"保持简单,傻瓜!"。

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

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

  • 采取简单的小步骤实现目标,并在发生故障时减轻故障。

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

  • 永远不要实现你现在不需要的功能,即"你不需要它"(YAGNI)原则。

沟通和简单相互支持。

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

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

反馈

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

在极限编程中,确保在不同时间尺度的各个层面都有反馈 −

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

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

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

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

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

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

  • 充当变革的催化剂

  • 指示进度

  • 让开发人员相信他们做对了track

勇气

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

  • 只关注需要的内容

  • 沟通和接受反馈

  • 如实说明进度和估计

  • 重构代码

  • 随时适应变化

  • 丢弃代码(原型)

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

尊重

尊重是一种深层价值观,隐藏在其他四个价值观的表面之下。在极限编程中,

  • 每个人都尊重彼此,视对方为宝贵的团队成员。

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

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

  • 管理层尊重开发人员承担责任和获得自身工作权力的权利。

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

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

  • 简单支持勇气,因为有了简单的系统,您就可以更加勇敢。您不太可能在不知情的情况下破坏它。

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

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

极限编程原则

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

因此,在极限编程中,基本原则源自价值观,以便可以根据这些原则检查开发实践。每项原则都体现了价值观,而且更加具体,即快速反馈——你要么拥有它,要么没有。

极限编程的基本原则是 −

  • 快速反馈

  • 假设简单

  • 渐进式变化

  • 拥抱变化

  • 高质量工作

快速反馈

快速反馈是尽快获得反馈、理解反馈并将学习成果重新投入到系统中。

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

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

假设简单

假设简单就是将每个问题都视为可以用简单。

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

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

  • 有了好的单元测试,你可以轻松地重构代码以进行额外的测试。

  • 遵循 YAGNI(你不需要它)。

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

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

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

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

增量更改

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

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

  • 设计每次改变一点。

  • 计划每次改变一点。

  • 团队每次改变一点。

即使采用极限编程也必须循序渐进。

拥抱变化

最好的策略是保留最多的选项,同时真正解决最紧迫的问题。

高质量工作

每个人都喜欢做好工作。他们努力创造令自己引以为豪的高质量。团队

  • 工作顺利

  • 享受工作

  • 生产出有价值的产品感觉很好