📅  最后修改于: 2021-01-07 06:09:16             🧑  作者: Mango
极限编程中有四个基本活动。他们是-
编码
测试中
倾听
设计中
这四个基本活动需要根据“极限编程”原则进行结构设计。为此,定义了极限编程实践。
这12种极限编程实践达到了极限编程目标,只要其中一种实践薄弱,其他实践的优势便可以弥补。
肯特·贝克(Kent Beck)是《极限编程说明》的作者,他定义了以下12种极限编程实践-
规划游戏
短片
隐喻
简单设计
测试中
重构
配对编程
集体所有权
持续集成
每周40小时
现场客户
编码标准
极限编程实践可以分为四个区域-
快速,精细的反馈-
测试中
现场客户
配对编程
连续过程-
持续集成
重构
短片
共同的理解-
规划游戏
简单设计
隐喻
集体所有权
编码标准
开发者福利-
四十周
在本章中,您将详细了解极限编程实践以及每种实践的优点。
下图显示了如何围绕极限编程实践编织极限编程-
极限编程中的主要计划过程称为计划游戏。游戏是一次会议,每次迭代一次,通常每周一次。规划游戏可以通过结合业务优先级和技术估算来快速确定下一版本的范围。当现实超越了计划时,请更新计划。
业务与发展需要同时做出决策。业务决策和开发的技术决策必须相互协调。
商界人士需要决定-
范围-要使系统在生产中有价值,必须解决多少问题?商人可以理解多少还不够,多少就太多。
优先级-如果给您一个选择,您要哪个?与开发人员从客户那里获得的投入相比,业务人员能够确定这一点。
发布的组成-使用该软件要比没有使用该软件要好得多,企业需要完成多少工作?开发人员对这个问题的直觉可能是完全错误的。
发布日期-软件(或某些软件)的出现会在哪些重要日期上发挥重要作用?
技术人员需要决定-
估计-功能需要多长时间才能实现?
后果-只有在获悉技术后果后才能做出战略性业务决策。发展需要解释后果。
流程-如何组织工作和团队?团队需要适应将要运作的文化。该软件必须写得好而不是保留封闭文化的不合理性。
详细计划-在发行版中,应该首先完成哪些故事?开发人员需要自由地先安排最危险的开发部分,以降低项目的总体风险。在这种限制下,他们仍然倾向于在开发的早期阶段转移业务优先级,从而减少了由于时间限制而必须在发布的开发结束时删除重要故事的机会。
因此,计划是客户,商人和开发人员之间协作的结果。
规划游戏具有以下优势-
减少时间,浪费在无用的功能上
客户对功能成本的认可度更高
减少计划中的猜测
您应该将一个简单的系统快速投入生产,然后在很短的时间内发布新版本。每个发行版都应尽可能小,以便-
可在短周期内实现
包含最有价值和最直接的业务需求
工作系统
短周期的持续时间可能会因需要构建的软件而异。但是,需要确保选择了最小可能的持续时间。
短版的优点是-
经常反馈
追踪
减少整体项目滑倒的机会
根据剑桥在线词典,“隐喻”是一种表达,通常在文学中发现,它通过提及被认为具有与该人或物体相似特征的事物来描述该人或物体。例如,“思想是海洋”和“城市是丛林”都是隐喻。
您应该通过一个简单的共享故事来指导整个开发,该故事讲述了整个系统的工作方式。您可以将隐喻视为要构建的系统体系结构,以使参与开发的每个人都易于理解。
隐喻由特定领域的元素组成,并显示出它们的相互联系。使用的语言是领域语言。为了识别技术实体,隐喻中使用的词语必须保持一致。
随着开发的进行和隐喻的成熟,整个团队将从研究隐喻中获得新的灵感。
一个好的架构的目标是给每个人一个连贯的故事,在这个故事中工作,这个故事可以被企业和技术人员轻松地共享。因此,在极限编程中,通过寻求一个隐喻,我们很可能会获得易于沟通和阐述的架构。
隐喻的优点是-
鼓励系统使用一组通用术语
减少流行语和行话
快速简单的方法来解释系统
在任何给定时刻,系统都应设计得尽可能简单。一经发现,便消除了额外的复杂性。
在任何给定时间,软件的正确设计就是:
运行所有测试
没有类似并行类层次结构的重复逻辑
说明对开发人员重要的每一个意图
具有最少的类和方法
为了获得简单的设计,请在不违反前三个规则的情况下,消除所有设计元素。这与“今天实施,明天设计”的建议相反。如果您认为未来是不确定的,并且可以快速改进设计,则不要在猜测上放任何功能。
简单设计的优点是-
不浪费时间添加多余的功能
更容易理解发生了什么
重构和集体所有权成为可能
帮助程序员保持正轨
开发人员不断编写单元测试,需要通过这些测试才能继续进行开发。客户编写测试以验证功能是否已实现。测试是自动化的,因此它们成为系统的一部分,可以连续运行以确保系统正常工作。结果是一个能够接受变更的系统。
测试的优点是-
单元测试可提高测试的完整性
测试优先给开发人员一个目标
自动化提供了一套回归测试
在实现功能时,开发人员总是会询问是否有更改现有代码的方法,以使添加功能变得简单。在添加了功能之后,开发人员会询问他们现在是否可以在仍然运行所有测试的同时,看到如何简化代码。他们在不改变行为的前提下重组了系统,以消除重复,改善沟通,简化或增加灵活性。这称为重构。
重构的优点是-
促使开发人员积极改善产品整体
增加开发人员对系统的了解
在结对编程中,整个代码是由两名开发人员在一台计算机上编写的,其中包括一个键盘和一个鼠标。
每对都有两个角色-
第一位开发人员(使用键盘和鼠标的开发人员)在这里考虑了实现此方法的最佳方法。
另一位开发商则更具策略性
这整个方法行得通吗?
还有哪些其他可能无法使用的测试用例?
有什么方法可以简化整个系统,从而使当前的问题消失吗?
配对是动态的。这意味着两个角色A和B可以交换位置,或者可以与其他团队成员配对。通常,团队中的任何人都将成为合作伙伴。例如,如果您负责不熟悉的区域中的任务,则可以请具有近期经验的人与您配对。
结对编程的优点是-
三个臭皮匠顶个诸葛亮
焦点
两个人更有可能回答以下问题-
这整个方法行得通吗?
有哪些测试用例可能无法使用?
有没有一种方法可以简化?
在极限编程中,整个团队负责整个系统。尽管每个人都对每个部分有所了解,但并不是每个人都同样了解。
如果一对在工作,并且他们看到了改进代码的机会,那么他们会继续进行改进。
集体所有权的优点是-
帮助减轻正在离开的团队成员的损失。
促使开发人员对整个系统而不是系统的一部分负责。
一天中多次集成和测试代码,一次进行一组更改。一种简单的方法是拥有一台专用于集成的计算机。一对已准备好集成的代码-
在机器空闲时坐下。
加载当前版本。
加载更改(检查并解决所有冲突)。
运行测试,直到测试通过(100%正确)。
一次集成一组更改有助于了解谁应该修复失败的测试。答案是当前对,因为最后一对以100%离开测试。他们可能不得不放弃所做的一切并重新开始,因为他们可能尚不足够了解该功能。
持续集成的优势是-
减少持续时间,否则会很长。
启用短发布实践,因为发布前所需的时间最少。
极限编程强调基于团队成员的可持续性,每个团队每周有限的工作时间,最多每周45小时。如果某人的工作时间超过该时间,则被视为加班。加班最多允许一个星期。这种做法是为了确保每个团队成员都新鲜,富有创造力,谨慎和自信。
每周40小时的优势是-
大多数开发人员会在40个小时后失去效力。
价值放在开发商的福祉上。
管理层被迫寻找真正的解决方案。
在团队中包括一个真正的实时用户,可以专职回答问题,解决争端并设定小规模的优先级。该用户可能不必只花40个小时来担任这个角色,也可以专注于其他工作。
拥有现场客户的优势是-
可以对实际的开发问题给出快速而又知识丰富的答案。
确保开发的是所需的。
功能正确地确定了优先级。
开发人员根据强调以下要求的规则编写所有代码:
通过代码进行通信。
最少的工作量。
符合“仅一次”规则(无重复代码)。
整个团队自愿采用。
这些规则在极限编程中是必需的,因为所有开发人员-
可以从系统的一部分更改为系统的另一部分。
每天交换合作伙伴几次。
不断重构彼此的代码。
如果不遵守规则,则开发人员将倾向于使用不同的编码实践集,随着时间的推移,代码变得不一致,并且无法说出团队中的谁编写了什么代码。
编码标准的优点是-
减少开发人员重新格式化他人代码所花费的时间。
减少内部注释的需要。
要求提供清晰,明确的代码。