极限编程是敏捷开发方法中最显著的一个。
因为大家都叫 XP,对吧?我觉得这个一说 XP,经常跟 Windows XP 相当于搞混。
但是 这个里面它实际上这个 XP 它是由一系列简单而相互依赖的实践来组成的。
那我采用了一段话,如果你的组织准备好了要改变开发软件的方式,
有缓慢的增量方法,你可以一个一个地去解决问题。
那么同样呢,也有快速的途径,也就是说那你就跳进 XP 里来吧。
那么但是你不要被这个 XP 这个名字吓到, 因为 XP 根本就不是那么极限。
大多数它是积累的一些老的处方和常识, 而是被很好地整合起来。
那么这个整合的过程中呢去掉了 这些年来积累的多余的一些脂肪,认为一些对于软件开发来说
累赘的、 无用的一些思想。
所以这一点大家就可以看到 所谓的极限,对吧?不是我们说的这个要多么多么地快,
它实际上更多强调了一些这个敏捷开发方法这样的一个理念
通过一系列的实践去来去落实的这样的一个过程。
这个极限编程首先它也是,因为它作为敏捷软件开发 方法里最经典的一类,它也是推崇,一个是客户作为团队的成员,
所以这个我觉得还是很好理解的,也就是说客户要开发,人员一起来紧密地工作。
那么在这里客户起什么作用呢?也就是说客户他主要就是来定义产品的特征,
那么并且对这些特征进行优先的排序,
实际上在这个过程中,它帮助开发组织确定地说我应该从哪些
特征入手,对吧?以及按照什么样的特征集来逐步地开展我这个开发的过程。
所以这个过程中就可以看到客户的非常重要的一个作用。
那注意一点就是说,有的时候呢,客户不能跟 这个开发团队一起工作,那他就应该也找一个他的
这个叫做 broker 对吧?这个他的代理人相当于,来代替他行驶相应的这样的一些权利和指责。
那也就是说跟那个开发团队一起来进行开发的这样的一个工作。
那第二个就叫用户的素材,这个极限编程里面它强调了一点就是说,
为了了解与项目需求有关的内容, 那么它采用用户素材,实际上它是一种规划的工具,
作为就是软件开发的这个团队 去理解需求的这样的一个,记录需求的这样的一个过程。
那这样的一个工具实际上是在客户和开发团队,整个相当于,开发人员之间相当于来建立- 起来的。
那也就是说,在客户的索引卡,客户相当于会给出来说我要
这个未来的这个软件希望实现哪些的特征,这个特征之间的关系是什么样的,前后关系。
那同时它在索引卡上记录下来一些 比如说它可能代表它特征的这样的一些词语,包括
这些词语你去,开发人员去理解它对这个特征的一些内涵。
实际上就是一些需求的体现,另一个开发 人员呢要在这个卡片上,相当于去评估一下
这样的一个需求需要多少的时间,包括它可能 处理的一些,比如说开发的这样的一些这个成本的这样一个估算。
所以 这是对于完成需求的这样的一个估算,也写在卡片上,另一个就是说短的交付的周期
因为在极限编程里面,它强调了就是说 每隔两周就交付一次可工作的这个软件,
那也就是说,每两周交付的这样的软件它实现了这个 stake holder 涉众的这一些需求。
那在这个迭代 结束的时候,就要给这个涉众去演示这样的一个需求是不是他们想要的需求。
那么再进一步聆听这些人的反馈,所以这个里面大家可以看到,就是说
短的这个交付周期是保障这个客户尽快地看到
这个软件产品来确定这是不是他想要的一些特征,以及他是不是需要增加一些新的特征的
这样一个很重要的一个环节。
XP 里面还强调了一个验收测试 作用就是通过验收测试来捕获用户素材的有关细节,
所谓的验收测试它希望的是通过 脚本语言,能够反复地去自动地去执行的这样的一个验收。
也就是说 对于用户的素材而言,他看一看,是否相当于就能够实现用户素材中的所有这样一些环节呢?
这就是验收测试要达到的一个目的,实际上对于用户素材的细节的进一步的肯定。
还有一个就是结对编程。
结对编程大家因为经常会跟 XP 编程混淆起来,
实际上结对编程是极限编程中的 一个实践的原则,这个实践的这样的一个原则里面它强调了说
两个人配对,进行共同的设计、 共同的编写,
功劳均等,同时相当于要促进整个的这样的知识在全队的 这样的一个传播。
什么叫做知识?也就是说他们编写的这样的一些东西都可以称为知识,也就是说 帮助团队其他人员认知他们所实现各个方面的工作。
那这里面他强调了一点,结对编程里面的 两个人要具有很好的沟通交流的这样的一个关系。
另一个, 结对编程要去根据这个
不同的他们的文化背景,确定他们个人工作的这样的一个空间。
那另一个就是说测试驱动的开发。
首先对产品的某一功能编写一个单元测试,那如果这个功能还不存在的时候呢,
就说是它可能是运行失败的,所以 编写这一功能的代码,使得该测试得以通过,也就
意味着这个代码编写的是正确的。
所以大家看,它的含义就是说 通过测试用例的这样的一个书写,我能够把我的代码 也完成了。
所以当我测试用例通过的时候,整个相当于,说明我编写的代码也会完善的。
所以这个过程就是说强调了就是这个,为了测试通过而编写代码,这样的代码呢
具有高质量的代码,也称为可测试的代码。
优点就是说,要独立对它进行测试。
这样的话,就是激励解除模块之间的耦合。
那么第七点就是 叫做集体所有权。
因为极限变成里面,它强调了说 编程中的每一结对,都具有检出任何模块的
权力,所以大家看,对于整个的这个团队所参与的所有的 这样的一个模块,它实际上都有什么?都有这个权力去进行相应的这个检查。
另一个就是说,没有程序员对一个特定的模块和技术单独来负责,所以是有集体所有制,对吧?
那么还有一个持续的集成,这个含义是什么呢?
因为在极限编程里面强调了程序员每天可以多次检入 它们的模块进行的集成。
那么最重要的就是确保所有的测试都能通过, 第一个就是要把新的一些代码集成到这个代码库中,这是已有的代码库。
就是说是,那么一个新的代码跟已有的代码进行合并,这是一点。
第二点就是说必要的时候可以和检入的程序员进行协商。
他们之间要来看说,可能有的时候检入的时候发现你可能那个地方有问题,所以有的时候,
就是在这个协商的过程中实际上是帮助了整个系统的进一步的完善和更新。
所以应用极限变成实践中呢应该注意两个问题。
应该将这组简单的实践融为一体,相互地去依赖。
另一个, 可以增加一些实践,对其中的一些实践进行修改,所以这个十四个实践指的含义就是说
它是一个比较地这个相当于指导性的东西,但是那些细则你可以根据你的理解进一步地什么?- 扩展它。
讲了这么多 XP,到底 XP 它的过程是什么样子的?我也希望通过这一讲解
大家能够学会,如果你将来应用这个极限编程的话,至少你知道我应该怎么去做。
那么极限编程一般情况下是使用面向对象方法作为推荐的开发范型,
它包含了策划,包含了设计, 包含了编码,还包含了测试这四个阶段。
第一个阶段,对吧?策划,是要形成用户的故事,同时对用户的故事
进行排序,对吧?看一下他用户故事里面优先级的这个高低,所以这时权值给出。
另一个要对这个用户故事来给出验收测试的标准,我要来去说
它怎么样才能通过我这个测试,所以验收的标准包括我这个迭代计划,
我根据用户的故事,我的迭代的计划是什么样子的,这个初步地确定。
所以这是指的策划。
进而呢,这个开发人员跟客户一起来设计简单的这个 CRC,
那也就是说用户的故事会相当于编写一个卡片,同时呢,和这个开发人员呢
根据这样的一个卡片相当于去来给出所完成这样的一个工作的代价,它的这个,对于它的
完成的工作量啊,成本等等进行估算。
那在这里面要,同时要给出相应的这样的一个解决方案,因为我每次迭代实际上就要解决一个- 特征的这样的一个迭代。
所以要给出它相应的解决方案,这个解决方案最终相当于要给出相应的这样的一个圆型的这样- 的一个设计。
所以,到这个编码的阶段,我们希望呢是推崇的是结对编程, 来进行编码。
但是这个编码的过程中,不是说一下子我编码就形成了。
这个过程中允许不断地对编码这个代码这个相当于框架进行重构,
让这个编码相当于尽可能地什么?简单, 相当于明了。
那么这个代码的这个机构呢相当于非常地清晰为准, 那么同时要在这个过程中要不断地进行集成,把我新
编写的代码集成到什么?已有的代码中,形成一个可运行的版本。
那在这个过程测试阶段,主要是经过单元测试、 验收
测试,对我已经形成的这样的一些软件的这个成分呢, 或者软件单元提高它的这样的一个质量。
这个过程希望的是最终发布出去,用户去使用,
用户来给出相应的反馈意见,也就是我们的客户给出反馈意见,我进而呢来调整
我的用户的故事权值,形成下一次的验收的这样的一个标准。
之后再这样去做,所以大家它是一个什么? 它是一个迭代的过程,但每一次迭代都包括这四个阶段。