zoukankan      html  css  js  c++  java
  • 极限编程(Extreme Programming, XP)


    注:本文节选自Kent Beck和Cynthia Andres所著的《解析极限编程--拥抱变化(原书第2版)》(原书名Extreme Programming Explained: Embrace Change, Second Edition)。

    --------------------------------------

    极限编程定义

    极限编程(Extreme Programming,XP)和社会性的变革(social change)相关。过去适用的一些习惯和模式在今天可能会妨碍我们做到最好,XP要求我们放弃这些习惯和模式,放弃那些妨碍生产率但保护我们自己的防御 行为。虽然这可能会使我们感觉到自己失去了掩蔽。

    XP要求我们坦承自己有能力做什么,然后去做这些能力所及的事情。同时允许并希望其他人也这样做。放弃我们不成熟的自负——“我比其他人都懂得多, 我需要的就是让我独立行事,成为最棒的。”XP要求我们在更大的范围内,在包括商业/工作领域的团体中找到我们正确的位置;XP是关于每个人是如何成为最 好的自己,如何成为自己所能成为的最好的开发者的过程。XP探讨了如何才能写出伟大的、对业务真正有益的代码。

    好的合作关系是做好事情的保证。除了编码和其他活动,我们在工作场所的人际关系也会影响到生产率和自信心。成功既需要技术又需要好的合作关系,极限编程致力于同时解决这两个问题。

    为成功做好准备。不要因为踌躇退缩而与成功失之交臂。尽力而为,然后处理其结果,这就是极限(Extreme)的含义。暴露自己,对有些人来说,这不可思议,而对其他人却习以为常。这就是为什么人们对极限编程的反应会两极分化。

    XP是一种软件开发的风格,专注于编程技术、清晰沟通还有团队协作的精彩实践,这些将帮助我们完成以前几乎不可想象的事情。XP包括:
    • 一种软件开发的哲学,基于沟通、反馈、简约、勇气和尊重的价值观。
    • 一整套被证明在软件开发中有用的实践。这些实践相辅相成,相互增强。我们将它们作为以上价值观的表达形式。
    • 一系列用来将以上价值观投入实践的、辅助的原则和智能技术。当缺乏对应你的独特难题的现成实践时,它会起作用。
    • 一个共享这些价值观和实践的社区。

    XP是一条可以使得一起开发软件的人们共同进步直至卓越的途径。它和其他方法的区别有:

    • 开发周期短,提供及早的、具体的、持续的反馈。
    • 增量计划方法。迅速地提出一个总体计划,并在项目生命周期中不断演化。
    • 能够灵活安排功能的实现,以对变化的业务需求做出反应。
    • 使用由程序员、客户和测试人员编写的自动测试来监控开发进度,支持系统的演化,并尽早发现缺陷。
    • 通过口头沟通、测试和源代码沟通系统结构和意图。
    • 演化的设计过程贯穿整个系统生命周期。
    • 依赖于能力普通但能积极参与的程序员之间的紧密协作。
    • 各种实践兼顾项目成员的短期直觉以及项目的长期利益。

    《解析极限编程:拥抱变化(Extreme Programming Explained:Embrace Change)》第1版中对XP有一个清楚的定义:“XP 是一种轻量级方法论,适用于中小规模团队在开发软件过程中面对模糊或者快速变化的需求的时候。”这个定义介绍了XP的起源和目的,但它并不完整。第1版出 版五年来,XP比初始定义增加了很多内容。现在,XP可以表述为:

    • 在XP中你只需要做能够为客户创造价值的事情,带着很多包袱是不可能快速前进的。但同时,没有什么软件过程是一成不变的,成为一个杰出的开发团队,需要大量的技术知识,并且需要不断学习新的知识。
    • XP是一种方法论,它建立于解决软件开发方法中的约束之上。它不解决项目投资管理、财务、执行、市场和销售的问题。XP在所有这些领域都有潜 在作用,但并不直接解决这些领域中的问题。方法论常常解释为“一组用来确保成功的规则。”方法论不像程序那样工作,人也不是计算机。不同的团队应用XP是 不同的,成功程度也各不相同。
    • XP对任何规模的团队都起作用。5年前,我不想宣称太多。那以后,其他人已经在很多项目中应用了XP,在大规模和小规模的项目和团队中都取得了成功。XP背后的价值观和原则在任何尺度都是可行的,其实践则需要在人员增加后做相应的增强或改变。
    • XP适合模糊或者快速变化的需求。幸运的是,XP现在仍然适合这种情形,因为需求需要改变来适应现代商业世界中的快速变迁。然而,很多团队同样已经在需求不太变化的情形(比如项目移植)中应用XP并取得了成功。

    XP是我在自己的软件开发实践中协调人性和生产率并共享这个协调的一个尝试。我已经开始注意到,我越是有人情味地对待我自己和别人,我们大家的生产率就越高。成功的关键不在于自我禁欲,而在于承认我们是人,我们生活在人与人之间交往的环境中。

    技术同样重要。我们是工作于技术领域的技术人员。工作方式有好坏之分,对卓越技术的追求在开发型组织中是非常重要的。技术支持信任关系的建立。如果你能准确地评估你的工作,第一时间提交有质量的工作,建立快速的反馈循环,你就能成为一个可以信赖的搭档。XP需要参与者学会高层次的技术,为团队的目标 服务。

    XP意味着放弃过去的工作习惯而采用适合现实的新方法。我们过去的习惯、态度和价值观曾经有效,但可能不是我们在当前环境下团队软件开发的最好选择。良好的、安全的社会交往和优秀的技术技能对成功的XP开发都是必不可少的。

    一个例子是“不设防才是真正的安全”的观念。隐瞒一些事情来保持安全的旧习惯并不能真正起作用。隐瞒20%工作量并不能保护我,当项目失败的时候, 没有尽全力的事实并不会真的让我感觉好一点,也无法消除不能让项目运作所带来的失败感。如果我尽了全力写程序而人们不喜欢,我仍然可以自我感觉很好,因为我尽力了。这种态度才让我感到安全,不管在什么环境下。如果我感觉如何的基础在于我是否尽力,我就能够通过尽全力而使自己感觉良好。

    XP团队竭尽全力去取胜而且勇于承担后果。如果自尊没有跟项目联系起来,在任何情况下我们都会尽全力做到最好。在XP中我们不为失败作准备。在人际关系上保持一点距离、通过偷懒或加班来隐瞒工作量、拖延反馈导致又一次责任扩散,所有这些行为在XP团队中都没有存在的空间。

    你可能有足够的时间、资金或团队技能,也可能没有。但不论如何,如果你认为自己将会有足够的资源,在这种状态下就会有最好的表现。人类学家 Colin Turnbull在《山里人(The Mountain People)》和《丛林中的人们(The Forest People)》两书中对这种“满足心理”有动人的描述。他对比了两种社会:资源紧张而导致的撒谎者、欺骗害人者的部落和资源富足产生的协作互爱的部落。 我经常问处于窘境中的开发人员一个问题:“如果有足够的时间,你会怎么做?”即使受到某些条件的约束,你也可以做到最好。对这些约束的过分忧虑会使你偏离 目标。不论这些约束是什么,你自己都可以做到最好。

    如果你有6周时间去完成一个项目,你唯一能够控制的是你自己的行为。你会完成6周的活还是少干一点呢?你不能控制别人的期望,但你可以告诉他们你所 知道的关于项目的所有事情,这样他们的期望才有跟现实匹配的可能性。当我知道了这一点,我对最后期限的恐惧就消失了。“管理”其他人的期望不是我的工作, 而是他们自己需要操心的,我要做的就是尽可能沟通清楚。

    XP是一个致力于解决软件开发过程中所有层次上的风险的软件开发学科。同时XP也高效产出高质量的软件,并且在XP的执行中也有许多乐趣。那么,XP如何解决开发过程中的风险呢?

    • 进度延迟——XP提倡短发布周期。一个发布周期最多几个月,这样,任何延迟的范围都是有限的。在一个发布周期内,XP使用客户要求的功能的每 周迭代来形成关于进度的详细反馈。在一个迭代内,XP计划许多小的任务以保证团队可以在该周期内解决问题。最后,XP还提倡优先实现高优先级的功能,这样 可以保证在发布版本中错过的功能的价值比较低。
    • 项目取消——XP中的最小发布必须是满足最大商业意义的部分,这些功能的选择工作由团队中面向商业的成员来承担。这样,在部署之前出错的可能就会较少,同时也保证了软件的价值最大。
    • 系统恶化——XP中创建并维护一整套自动测试,每次系统发生改变后都要运行(一天好几次)这些测试,以确保质量基线。XP总是保证系统处于可部署的状态,而不允许出现问题的积累。
    • 缺陷率——XP中既包括了程序员书写的每个函数(function)的测试,也包括了客户书写的对每个程序特性(program-feature)的测试。
    • 业务误解——XP提倡业务人员成为团队成员。项目规约(specification)在开发过程中不断改进,因此客户和团队的知识都能反映在软件中。
    • 业务变更——XP缩短了发布周期,因此在一个单独的发布周期中几乎没什么变化。在一个发布周期中,客户可以随意用新的功能替代没有完成的功能。开发团队甚至不会注意到他们是在开发一个新发现的功能还是几年前就定义的特性。
    • 错误特性太多——XP坚持只解决最高优先级的任务。
    • 人员流动——XP要求程序员估算自己工作所需时间并完成工作。同时XP也将这些工作的实际完成时间返馈给程序员,帮助他们改善估算的精确性, 从而使估算的结果得到尊重。在XP中,谁能做出估算,谁能改变估算都很清楚,因此程序员几乎不会因为被要求去完成明显不可能完成的任务而感到沮丧。XP同 样鼓励团队中的相互沟通,来减少孤独感,因为这常常是工作不满的主要原因。最后,XP中有一个关于人员流动的清晰模型。鼓励新成员逐渐承担越来越多的责 任,新成员之间互相帮助,同时老成员也为新成员提供帮助。

    XP假设你把自己看成团队的一部分,一个具有清晰目标和执行计划的理想个体。XP假设你想与别人一起工作。XP假设可以经济地应付变化。XP假设你希望成长、改善自己的技能,改善人际关系。XP假设你愿意做出改变来达成这些目标。

    现在我准备回答本章提出的问题:什么是XP?

    • XP是放弃旧的、低效的技术和习惯而采用新的有效的技术和习惯。
    • XP是因为你今天的竭尽全力而充分欣赏自己。
    • XP是努力在明天做得更好。
    • XP是要你按照对团队共同目标做出的贡献来评价自己。
    • XP是让你的一些人性需求在软件开发中得到满足。

    《解析极限编程--拥抱变化(原书第2版)》的其余部分探讨了实现这些改变需要做的事情,从个人和经济角度思考了为什么它们会起作用。本书分为两部分。第一部分是实践,描述了从事和思考软件开发的一种方式,这种方式假设并满足人性需要,包括对人际关系的需要。第二部分涵盖了XP的哲学和历史根源并将 XP放在今天的时代背景下。

    阅读《解析极限编程--拥抱变化(原书第2版)》以及应用XP有许多种方式,就像在大热天进入一个清凉的水池一样,你可以小心翼翼地入水,也可以沿台阶稳步走下去,还可以像炮弹一样冲下去,或者像跳水比赛那样跳下去。总之,它们都达到了入水这个目的。你的选择也许基于风格、速度、效率或者恐惧。只有你能决定哪个是适合你的。我希望在阅读和应用这本书时,你能逐渐深入理解为什么你会参与软件开发以及如何从这个工作中找到成就感。

  • 相关阅读:
    Time Zone 【模拟时区转换】(HDU暑假2018多校第一场)
    HDU 1281 棋盘游戏 【二分图最大匹配】
    Codeforces Round #527 (Div. 3) F. Tree with Maximum Cost 【DFS换根 || 树形dp】
    Codeforces Round #527 (Div. 3) D2. Great Vova Wall (Version 2) 【思维】
    Codeforces Round #527 (Div. 3) D1. Great Vova Wall (Version 1) 【思维】
    Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】
    Avito Cool Challenge 2018 E. Missing Numbers 【枚举】
    Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】
    005 如何分析问题框架
    004 如何定义和澄清问题
  • 原文地址:https://www.cnblogs.com/hzbook/p/2172327.html
Copyright © 2011-2022 走看看