极限编程与敏捷开发

敏捷开发系列之旅 第二站(走近XP极限编程) 上篇文章,我们探讨了什么是敏捷开发,以及敏捷开发的方法学。在这篇文章中,我们将继续讨论敏捷开发中的问题——XP极限编程。 在讨论之前,先让我们来了解一下XP极限编程产生的背景,软件业所具有的共同的问题。 背景 软件越来越复杂需求越来越多变过程越来越规范 了解了背景之后,那么就会想问,到底什么是极限编程呢?下面我们就做一个简单的介绍。 XP概述 阅读详情



  在按照我的理解方式审查了软件开发的生命周期后,我得出一个结论:实际上满足工程设计标准的惟一软件文档,就是源代码清单。

-- Jack Reeves
简介
  2001年,为了解决许多公司的软件团队陷入不断增长的过程泥潭,一批业界专家一起概括出了一些可以让软件开发团队具有快速工作、响应变化能力的价值观和原则,他们称自己为敏捷联盟。敏捷开发过程的方法很多,主要有:SCRUM,Crystal,特征驱动软件开发(Feature Driven Development,简称FDD),自适应软件开发(Adaptive Software Development,简称ASD),以及最重要的极限编程(eXtreme Programming,简称XP)。极限编程(XP)是于1998年由Smalltalk社群中的大师级人物Kent Beck首先倡导的。

极限编程

  设计和编程都是人的活动。忘记这一点,将会失去一切。
-- Bjarne Stroustrup

  极限编程(XP)是敏捷方法中最著名的一个。它是由一系列简单却互相依赖的实践组成。这些实践结合在一起形成了一个胜于部分结合的整体。

下面是极限编程的有效实践:
  1. 完整团队 XP项目的所有参与者(开发人员、客户、测试人员等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。
  2. 计划游戏计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。
  3. 客户测试作为选择每个所期望的特性的一部分,客户可以根据脚本语言来定义出自动验收测试来表明该特性可以工作。
  4. 简单设计团队保持设计恰好和当前的系统功能相匹配。它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包含尽可能少的代码。
  5. 结对编程所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。
  6. 测试驱动开发编写单元测试是一个验证行为,更是一个设计行为。同样,它更是一种编写文档的行为。编写单元测试避免了相当数量的反馈循环,尤其是功功能能验证方面的反馈循环。程序员以非常短的循环周期工作,他们先增加一个失败的测试,然后使之通过。
  7. 改进设计随时利用重构方法改进已经腐化的代码,保持代码尽可能的干净、具有表达力。
  8. 持续集成团队总是使系统完整地被集成。一个人拆入(Check in)后,其它所有人责任代码集成。
  9. 集体代码所有权任何结对的程序员都可以在任何时候改进任何代码。没有程序员对任何一个特定的模块或技术单独负责,每个人都可以参与任何其它方面的开发。
  10. 编码标准 系统中所有的代码看起来就好像是被单独一人编写的。
  11. 隐喻 将整个系统联系在一起的全局视图;它是系统的未来影像,是它使得所有单独模块的位置和外观变得明显直观。如果模块的外观与整个隐喻不符,那么你就知道该模块是错误的。
  12. 可持续的速度 团队只有持久才有获胜的希望。他们以能够长期维持的速度努力工作,他们保存精力,他们把项目看作是马拉松长跑,而不是全速短跑。 极限编程是一组简单、具体的实践,这些实践结合在形成了一个敏捷开发过程。极限编程是一种优良的、通用的软件开发方法,项目团队可以拿来直接采用,也可以增加一些实践,或者对其中的一些实践进行修改后再采用。
敏捷开发
  人与人之间的交互是复杂的,并且其效果从来都是难以预期的,但却是工作中最重要的方面。
-- Tom DeMacro和Timothy Lister

敏捷软件开发宣言:
  • 个体和交互     胜过 过程和工具
  • 可以工作的软件 胜过 面面俱到的文档
  • 客户合作       胜过 合同谈判
  • 响应变化       胜过 遵循计划
虽然右项也有价值,但是我们认为左项具有更大的价值。
  • 我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。
  • 即使到了开发的后期,也欢迎改变需求。敏捷过程利用变化来为客户创造竞争优势。
  • 经常性地交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付的时间间隔越短越好。
  • 在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。
  • 围绕被激励起来的个体来构建项目。给他们提供所需的环境和支持,并且信任他们能够完成工作。
  • 在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面的交谈。
  • 工作的软件是首要的进度度量标准。
  • 敏捷过程提倡可持续的开发速度。责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度。
  • 不断地关注优秀的技能和好的设计会增强敏捷能力。
  • 简单是最根本的。
  • 最好的构架、需求和设计出于自组织团队。
  • 每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。
当软件开发需求的变化而变化时,软件设计会出现坏味道,当软件中出现下面任何一种气味时,表明软件正在腐化。
  • 僵化性: 很难对系统进行改动,因为每个改动都会迫使许多对系统其他部分的其它改动。
  • 脆弱性: 对系统的改动会导致系统中和改动的地方在概念上无关的许多地方出现问题。
  • 牢固性: 很难解开系统的纠结,使之成为一些可在其他系统中重用的组件。
  • 粘滞性: 做正确的事情比做错误的事情要困难。
  • 不必要的复杂性: 设计中包含有不具任何直接好处的基础结构。
  • 不必要的重复性: 设计中包含有重复的结构,而该重复的结构本可以使用单一的抽象进行统一。
  • 晦涩性: 很难阅读、理解。没有很好地表现出意图。
敏捷团队依靠变化来获取活力。团队几乎不进行预先设计,因此,不需要一个成熟的初始设计。他们更愿意保持设计尽可能的干净、简单,并使用许多单元测试和验收测试作为支援。这保持了设计的灵活性、易于理解性。团队利用这种灵活性,持续地改进设计,以便于每次迭代结束生成的系统都具有最适合于那次迭代中需求的设计。为了改变上面软件设计中的腐化味,敏捷开发采取了以下面向对象的设计原则来加以避免,这些原则如下:
  • 单一职责原则(SRP)
    就一个类而言,应该仅有一个引起它变化的原因。
  • 开放-封闭原则(OCP)
    软件实体应该是可以扩展的,但是不可修改。
  • Liskov替换原则(LSP)
    子类型必须能够替换掉它们的基类型。
  • 依赖倒置原则(DIP)
    抽象不应该依赖于细节。细节应该依赖于抽象。
  • 接口隔离原则(ISP)
    不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。
  • 重用发布等价原则(REP)
    重用的粒度就是发布的粒度。
  • 共同封闭原则(CCP)
    包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中的所有类产生影响,而对于其他的包不造成任何影响。
  • 共同重用原则(CRP)
    一个包中的所有类应该是共同重用的。如果重用了包中的一个类,那么就要重用包中的所有类。
  • 无环依赖原则(ADP)
    在包的依赖关系图中不允许存在环。
  • 稳定依赖原则(SDP)
    朝着稳定的方向进行依赖。
  • 稳定抽象原则(SAP)
    包的抽象程度应该和其稳定程度一致。
  上述中的包的概念是:包可以用作包容一组类的容器,通过把类组织成包,我们可以在更高层次的抽象上来理解设计,我们也可以通过包来管理软件的开发和发布。目的就是根据一些原则对应用程序中的类进行划分,然后把那些划分后的类分配到包中。

下面举一个简单的设计问题方面的模式与原则应用的示例:

问题:
  选择设计运行在简易台灯中的软件,台灯由一个开关和一盏灯组成。你可以询问开关开着还是关着,也可以让灯打开或关闭。

解决方案一:
  下面图1是一种最简单的解决方案,Switch对象可以轮询真实开关的状态,并且可以发送相应的turnOn和turnOff消息给Light。


解决方案二:
  上面这个设计违反了两个设计原则:依赖倒置原则(DIP)和开放封闭原则(OCP),DIP原则告诉我们要优先依赖于抽象类,而Switch依赖了具体类Light,对OCP的违反是在任何需要Switch的地方都要带上Light,这样就不能容易扩展Switch去管理除Light外的其他对象。为了解决这个方案,可以采用ABSTRACT SERVER模式,在Switch和Light之间引入一个接口,这样就使得Switch能够控制任何实现了这个接口的东西,这也就满足了DIP和OCP原则。如下面图2所示:



解决方案三:
  上面图2所示解决方案,违返了单一职责原则(SRP),它把Switch和Light绑定在一起,而它们可能会因为不同的原因而改变。这种问题可以采用ADAPTER模式来解决,适配器从Switchable 派生并委托给Light,问题就被优美的解决了,现在,Switch就可以控制任何能够被打开或者关闭的对象。但是这也需要会出时间和空间上的代价来换取。如下面图3所示:



  敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。它致力于保持系统设计在任何时间都尽可能得简单、干净和富有表现力。
31、敏捷开发之极限编程(XP)全面解析 本文全面解析了极限编程(XP),一种以客户为中心、强调团队协作和快速响应变化的敏捷开发方法。文章详细介绍了敏捷开发的核心原则、XP的价值观与实践,以及团队结构和需求管理方法。通过用户故事、测试驱动开发、结对编程等实践,XP帮助团队提升效率和代码质量。同时,文章也探讨了XP的优势与挑战,并提供了应对策略。 阅读详情

相关推荐

Agile -Scrum and XP

硝烟中的scrum 和 xp —— 我们如何实现scrum 李剑译 本书由InfoQ中文站免费发放。

敏捷(agile)开发与极限编程(XP)(转载)

  在按照我的理解方式审查了软件开发的生命周期后,我得出一个结论:实际上满足工程设计标准的惟一软件文档,就是源代码清单。 -- Jack Reeves 简介  2001年,为了解决许多公司的软件团队陷入不断增长的过程泥潭,一批业界专家一起概括出了一些可以让软件开发团队具有快速工作、响应变化能力的价值观和原则,他们称自己为敏捷联盟。敏捷开发过程的方法很多,主要有:SCRUM,Cryst

cxzhq2002的杂记 2011

Agile(Scrum&XP)实践-中文版

讲Scrum和XP最好的书了,中文版 讲Scrum和XP最好的书了,中文版 讲Scrum和XP最好的书了,中文版 讲Scrum和XP最好的书了,中文版

CMMI与Agile,XP的比较

一位同志的心得: CMMI是重量型的开发方法,内容繁多,覆盖软件开发的方方面面。培训并不能让我对CMMI整体有一个很清晰的认识,但对CMMI强调的一些思想和方法,我觉得还是有收获。 这里谈几点: 1. CMMI强调过程标准化及最佳实践,认为最佳实践就是经验教训的积累,而我们经常想当然不加实践的认为某个最佳实践不适合我们,就随意修改,显示是违背了CMMI思想的。 ...

weixin_34301132的博客 294

敏捷软件开发和极限编程介绍

先让我们看看一般的产品生产:例一,汽车生产。原材料、配件等采购完毕(我这里说到了采购配件,这相当于把部分功能的生产转交给其他职能公司。对应到软件生产的(子)项目外包。这个话题在本文就不扩展了),进入生产、组装、测试车间,进行一系列规定的工作流程。正常情况下,如果不发生不可抗拒的事件,那么可以按时完成合同规定的交付。这中间不会有什么变动性和不可预测性。例二,再来看一个例子,比如某人想盖一栋房子,他想使用环保材料,当开发商给出房子的草图、价格预算,交给他时,他可能会改变主意。在建造房子的过程中,他的一些想法会逐渐明朗化。当房子盖好之后,实物呈现在他眼前时,原先他的那套装修想法也可能根据房子的实

Accelstepper 库中的参数计算公式

要完全调试电机的各个参数,例如最大速度,加速度等,就需要了解其计算公式和原理。 以下是代码注释: /// This code uses speed calculations as described in /// "Generate stepper-motor speed profiles in real time" by David Austin/// http://fab.cba.mi...

wenguitao的博客 4456

敏捷开发与极限编程

 敏捷开发与极限编程作者: 陈沛 (系摘编) 软件设计方法可以区别为重量级的方法和轻量级的方法。重量级的方法中产生大量的正式文档。 著名的重量级开发方法包括ISO9000,CMM,和统一软体开发过程(RUP)。轻量级的开发过过程没有对大量正式文档的要求。着名的轻量级开发方法包括敏捷开发(Agile Management)与极限编程(XP)。重量级方法呈现的是一种防御型的姿态

huanggang982的专栏 1585

机器视觉:9点标定的原理与实现

标定就是将机器视觉处理得到的像素坐标转换成实际项目中使用到的毫米坐标。简单说即使看看实际单位距离内有几个像素,如下图所示,10mm的距离内有222个像素,那像素坐标和实际的毫米坐标就有个比例关系了。

m0_49968063的博客 1万+

软考考点之敏捷开发之极限编程

小小的一个XP(极限编程)成了一个考点。其实自己常常混淆的是,敏捷开发与XP的关系? 其实,极限编程是敏捷开发的一个主流开发方法。和传统方法学的本质不同在于它更强调可适应性而不是可预测性。他们相信,和传统的在项目起始阶段定义好所有需求再费尽心思的控制变化的方法相比,有能力在项目周期的任何阶段去适应变化,将是更加现实更加有效的方法。 4大价值 沟通,XP方法论认为,如果小组成员之间无法做到持续...

guangod的博客 1067

CASIA数据集解析:图像篡改检测的黄金标准与实践指南

本文深入解析了CASIA数据集在图像篡改检测领域的核心价值与应用实践。作为中科院自动化所打造的黄金标准,CASIA数据集通过模拟真实篡改场景(如拼接和复制移动)为研究者提供全面支持。文章详细对比了v1.0与v2.0版本差异,分享数据预处理和模型训练的最佳实践,并探讨了未来研究方向,是图像篡改检测领域的重要参考指南。

kappa的博客 785

深入解析SAP F4帮助函数F4IF_INT_TABLE_VALUE_REQUEST的回调机制

本文深入解析了SAP ABAP开发中F4IF_INT_TABLE_VALUE_REQUEST函数的回调机制。通过剖析其工作原理与核心参数,详细阐述了如何利用回调函数实现F4帮助的多值返回、动态数据过滤及选择后校验等高级定制功能,并提供了实用的代码示例与调试技巧,帮助开发者高效应对复杂的屏幕交互需求。

weixin_29213827的博客 199

敏捷开发之极限编程(XP)概念

1.极限编程(Extreme programming,缩写为XP),是敏捷软件开发中应用最为广泛和最富有成效的几种方法学之一。极限编程鼓励管理人员和开发人员接受并使用某些特别的有价值的方法。 2.极限编程的创始者是肯特·贝克、沃德·坎宁安和罗恩·杰弗里斯。 3.极限编程的目标:降低因需求变更而带来的成本。极限编程通过引入基本价值、原则、方法等概念来达到降低变更成本的目的。一个应用了极限编程方法的系...

weixin_44850444的博客 2346

第零章 序 Chisel教程汇总

笔者目前西安交通大学微电子硕士在读,研究方向为数字集成电路设计与体系结构。鉴于目前RISC-V的火热程度,笔者参与了课题组的RISC-V项目,并了解、学习了颇受关注的新型硬件构建语言——Chisel,当前参与的神经网络加速器设计便是使用Chisel开发的。这是一门敏捷开发语言,据称要比传统的Verilog语言快很多。在亲身使用过后,笔者发现确实快了不少。这主要得益于Scala作为高级语言的简洁风格...

qq_34291505的博客 7万+

敏捷开发与极限编程(XP)讨论会

转自:http://www.cnblogs.com/azurebz/archive/2007/05/31/766256.html通常程序员给人留下的印象就是机械,内向,不善言谈。 其实一个好的程序员最需要具备的能力就是沟通的能力。 只有良好的沟通才能知道客户需要什么,也只有良好的沟通,才能与团队成员合作无间 本次讨论希望带领大家进入一个以沟通为基本原则的软件开发领域,它就是——敏捷开发 一、敏

woshiqq的专栏 1263

STRING数据库的蛋白质相互作用(PPI)网络分析

在转录调控相关的文献中,我们经常能够看到这样的蛋白质相互作用网络(protein protein interaction network,PPI network)。具体而言,这些相关的文献中首先通过RNA-seq、表达谱芯片或者蛋白质组分析等,找到了在不同分组样本间一系列的差异表达基因或蛋白。

weixin_43029125的博客 9458

PCL Trimmed ICP实现点云精配准【2025最新版】

博客长期更新,本文最新更新时间为:2025年6月25日。抄袭狗记得来抄最新代码哦,抄都抄成错的,不够丢人钱。

点云侠的博客 37万+

(转)敏捷开发与极限编程(XP)讨论会总结

http://hi.baidu.com/xingweilu/blog/item/4e50cbc46f822ac939db49fd.html 按照大家的要求进行了整理,内容如下,但是建议大家还是看看讨论内容,那样更容易理解。 *************************************************** 通常程序员给人留下的印象就是机械,内向,不善言谈。 其...

脚踏实地 228

基于Transformer模型实现交通流量时序预测(PyTorch版)

Transformer模型,作为一种基于自注意力机制的深度学习模型,最初在自然语言处理领域取得了突破性进展,其出色的长距离依赖关系捕捉能力使其在处理时序数据时也表现出色。将Transformer模型应用于交通流量时序预测,可以充分利用其优势,实现对交通流量更加精准、高效的预测。

时序笔记 2574

敏捷开发之XP极限编程

敏捷方法论有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法。正是因为“轻量级”感觉没有什么力量,不但不能够有效体现灵活性,反而显得是不解决问题的方法论似的。因此,就有了一次划时代的会议,创建了敏捷联盟。 在敏捷方法论领域中,比较知名的、有影响力的,是拥有与Microsoft的操作系统相同缩写语——XP...

lik_lik的博客 1525

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

XP 与 敏捷开发的关系

    敏捷开发,一直是我所关注的开发方法,但对其没有系统的了解,始终对它有一种神秘感。今天,找到了一篇文章,讲述的敏捷开发和XP编程,才让我明白了以前所不知道的东西。原来XP编程(极限编程)是敏捷开发的一种,而且敏捷开发的思想对于现在大多数的软件开发,都很适合。下面我就把这篇文章贴出来,与大家分享 。    在按照我的理解方式审查了软件开发的生命周期后,我得出一个结论:实际上满足工程设计标准

多看、多听、多学习 1877

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

敏捷开发,TDD,极限编程XP

TDD,Test-driven development,测试驱动开发TDD产生远敏捷开发运动,特别是极限编程(extreme programming , XP),而TDD正是XP的一个核心原则。TDD人认为,不应该完成开发之后再写测试,这通常只是“马后炮”,而应当在写代码之前先写测试。测试本质上相当于设计文档,而不是花大量时间去摆弄一个复杂的图形化工具,你要直接在代码中“拟画”一个类。 ...

weixin_34376562的博客 206

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

敏捷开发方法之XP

转载 敏捷开发之XP </div> &...

不甘平凡的码农 1553
上一篇: 征询系统多语种的切换方案
下一篇: Agile User Interface Development
minigpsnet
博客等级 码龄22年 62粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值