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