ImageVerifierCode 换一换
格式:DOC , 页数:20 ,大小:113KB ,
资源ID:7830642      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/7830642.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(Extremeprogramming.doc)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

Extremeprogramming.doc

1、Extreme Programming(极限编程,简称XP)是由Kent Beck在1996年提出的。Kent Beck在九十年代初 期与Ward Cunningham共事时,就一直共同探索着新的软件开发方法,希望能使软件开发更加简单而有 效。Kent仔细地观察和分析了各种简化软件开发的前提条件、可能行以及面临的困难。1996年三月, Kent终于在为DaimlerChrysler所做的一个项目中引入了新的软件开发观念——XP。 XP是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法。它的基础和价值观 是交流、朴素、反馈和勇气;即,任何一个软件项目都

2、可以从四个方面入手进行改善:加强交流;从简 单做起;寻求反馈;勇于实事求是。XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个 相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚 开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。 什么是软件开发 软件开发的内容是:需求、设计、编程和测试! 需求:不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是为了解 决什么问题;测试案例中应该输入什么数据……为了清楚地知道这些需求,你经常要和客户、项目经理

3、 等交流。 设计:编码前,肯定有个计划告诉你要做什么,结构是怎样等等。你一定要按照这个来做,否则可能会 一团糟。 编程:如果在项目截止日,你的程序不能跑起来或达不到客户的要求,你就拿不到钱。 测试:目的是让你知道,什么时候算是完成了。如果你聪明,你就应该先写测试,这样可以及时知道你 是否真地完成了。否则,你经常会不知道,到底有哪些功能是真正完成了,离预期目标还差多远。 软件开发中,客户和开发人员都有自己的基本权利和义务。 客户:  • 定义每个用户需求的商业优先级;  • 制订总体计划,包括用多少投资、经过多长时间、达到什么目的;  • 在项目开发过

4、程中的每个工作周,都能让投资获得最大的收益;  • 通过重复运行你所指定的功能测试,准确地掌握项目进展情况;  • 能随时改变需求、功能或优先级,同时避免昂贵的再投资;能够根据各种变化及时调整项目计划;  • 能够随时取消项目;项目取消时,以前的开发工作不是一堆垃圾,已开发完的功能是合乎要求的, 正在进行或未完成的的工作则应该是不难接手的。 开发人员:  • 知道要做什么,以及要优先做什么;  • 工作有效率;  • 有问题或困难时,能得到客户、同事、上级的回答或帮助;  • 对工作做评估,并根据周围情况的变化及时重新评估;  • 积极承担工作,而不是消

5、极接受分配;  • 一周40小时工作制,不加班。 这就是软件开发,除此之外再还有其它要关心的问题! 灵巧的轻量级软件开发方法 一套软件开发方法是由一系列与开发相关的规则、规范和惯例。重量级的开发方法严格定义了许多的规 则、流程和相关的文档工作。灵巧的轻量级开发方法,其规则和文档相对较少,流程更加灵活,实施起 来相对较容易。 在软件工程概念出现以前,程序员们按照自己喜欢的方式开发软件。程序的质量很难控制,调试程序很 繁琐,程序员之间也很难读懂对方写的代码。1968年,Edsger Dijkstra给CACM写了一封题为GOTO  Sta

6、tement Considered Harmful 的信,软件工程的概念由此诞生。程序员们开始摒弃以前的做法,转 而使用更系统、更严格的开发方法。为了使控制软件开发和控制其它产品生产一样严格,人们陆续制定 了很多规则和做法,发明了很多软件工程方法,软件质量开始得到大幅度提高。随着遇到的问题更多, 规则和流程也越来越精细和复杂。 到了今天,在实际开发过程中,很多规则已经难于遵循,很多流程复杂而难于理解,很多项目中文档的 制作过程正在失去控制。人们试图提出更全面更好的一揽子方案,或者寄希望于更复杂的、功能更强大 的辅助开发工具(Case Tools),但总是不能成功,而

7、且开发规范和流程变得越来越复杂和难以实施。 为了赶进度,程序员们经常跳过一些指定的流程,很少人能全面遵循那些重量级开发方法。 失败的原因很简单,这个世界没有万能药。因此,一些人提出,将重量级开发方法中的规则和流程进行 删减、重整和优化,这样就产生了很多适应不同需要的轻量级流程。在这些流程中,合乎实际需要的规 则被保留下来,不必要的复杂化开发的规被抛弃。而且,和传统的开发方法相比,轻量级流程不再象流 水生产线,而是更加灵活。 Extreme Programming(XP)就是这样一种灵巧的轻量级软件开发方法。 为什么称为“Extreme”(极限) 

8、 “Extreme”(极限) 是指,对比传统的项目开发方式,XP强调把它列出的每个方法和思想做到极限、 做到最好;其它XP所不提倡的,则一概忽略(如开发前期的整体设计等)。一个严格实施XP的项目,其 开发过程应该是平稳的、高效的和快速的,能够做到一周40小时工作制而不拖延项目进度。  XP的软件开发是什么样 1 极限的工作环境 为了在软件开发过程中最大程度地实现和满足客户和开发人员的基本权利和义务,XP要求把工作环境也 做得最好。每个参加项目开发的人都将担任一个角色(项目经理、项目监督人等等)并履行相应的权利 和义务。所有的人都在同一个开

9、放的开发环境中工作,最好是所有人在同一个大房子中工作,还有茶点 供应;每周40小时,不提倡加班;每天早晨,所有人一起站着开个短会;墙上有一些大白板,所有的 Story卡、CRC卡等都贴在上面,讨论问题的时候可以在上面写写画画;下班后大家可以一起玩电脑游 戏……。 2 极限的需求 客户应该是项目开发队伍中的一员,而不是和开发人员分开的;因为从项目的计划到最后验收,客户一 直起着很重要的作用。开发人员和客户一起,把各种需求变成一个个小的需求模块(User Story),例 如“计算年级的总人数,就是把该年级所有班的人数累加。”;这些模块又会根据实际情况被组合在一

10、 起或者被分解成更小的模块;它们都被记录在一些小卡片(Story Card)上,之后分别被程序员们在各 个小的周期开发中(Iteration,通常不超过3个星期)实现;客户根据每个模块的商业价值来指定它们 的优先级;开发人员要做的是确定每个需求模块的开发风险,风险高的(通常是因为缺乏类似的经验) 需求模块将被优先研究、探索和开发;经过开发人员和客户分别从不同的角度评估每个模块后,它们被 安排在不同的开发周期里,客户将得到一个尽可能准确的开发计划;客户为每个需求模块指定验收测试 (功能测试)。 每发布一次开发的软件(经过一个开发周期),用户都能得到一个可以开始使用

11、的系统,这个系统全面 实现了相应的计划中的所有需求。而在一些传统的开发模式中,无论什么功能,用户都要等到所有开发 完成后才能开始使用。  3 极限的设计  从具体开发的角度来看,XP内层的过程是一个个基于测试驱动的开发(Test Driven Development)周 期,诸如计划和设计等外层的过程都是围绕这些展开的。每个开发周期都有很多相应的单元测试 (Unit Test)。刚开始,因为什么都没有实现,所以所有的单元测试都是失败的;随着一个个小的需 求模块的完成,通过的单元测试也越来越多。通过这种方式,客户和开发人员都很容易检验,是否履行 了对客户的

12、承诺。XP提倡对于简单的设计(Simple Design),就是用最简单的方式,使得为每个简单 的需求写出来的程序可以通过所有相关的单元测试。XP强调抛弃那种一揽子详细设计方式(Big  Design Up Front),因为这种设计中有很多内容是你现在或最近都根本不需要的。XP还大力提倡设计 复核(Review)、代码复核以及重整和优化(Refectory),所有的这些过程其实也是优化设计的过 程;在这些过程中不断运行单元测试和功能测试,可以保证经过重整和优化后的系统仍然符合所有需 求。  4 极限的编程  既然编程很重要,XP就提倡两个人一起写同一段程序

13、Pair Programming),而且代码所有权是归于整 个开发队伍(Collective Code Ownership)。程序员在写程序和重整优化程序的时候,都要严格遵守 编程规范。任何人都可以修改其他人写的程序,修改后要确定新程序能通过单元测试。  5 极限的测试  既然测试很重要,XP就提倡在开始写程序之前先写单元测试。开发人员应该经常把开发好的模块整合到 一起(Continuous Integration),每次整合后都要运行单元测试;做任何的代码复核和修改,都要运 行单元测试;发现了BUG,就要增加相应的测试(因此XP方法不需要BUG数据库)。除了

14、单元测试之外, 还有整合测试,功能测试、负荷测试和系统测试等。所有这些测试,是XP开发过程中最重要的文档之 一,也是最终交付给用户的内容之一。  XP中的重要惯例和规则 1 项目开发小组(Team) 在XP中,每个对项目做贡献的人都应该是项目开发小组中的一员。而且,这个小组中必须至少有一个人 对用户需求非常清晰,能够提出需求、决定各个需求的商业价值(优先级)、根据需求等的变化调整项 目计划等。这个人扮演的是“客户”这个角色,当然最好就是实际的最终用户,因为整个项目就是围绕 最终用户的需求而展开的。程序员是项目开发小组中必不可少的成员。小组中可以有测

15、试员,他们帮助 客户制订验收测试;有分析员,帮助客户确定需求;通常还有个Coach(教练),负责跟踪开发进度、 解决开发中遇到的一些问题、推动项目进行;还可以又一个项目经理,负责调配资源、协助项目内外的 交流沟通等等。项目小组中有这么多角色,但并不是说,每个人做的工作是别人不能插手或干预的,XP 鼓励每个人尽可能地为项目多做贡献。平等相处,取长补短;这就是最好的XP开发小组。 2 计划项目(Planning Game)、验收测试、小规模发布(Small Releases) XP开发小组使用简单的方式进行项目计划和开发跟踪,并以次预测项目进展情况和决定未来的步骤。

16、根 据需求的商业价值,开发小组针对一组组的需求进行一系列的开发和整合,每次开发都会产生一个通过 测试的、可以使用的系统。 •  计划项目 XP的计划过程主要针对软件开发中的两个问题:预测在交付日期前可以完成多少工作;现在和下一步该 做些什么。不断的回答这两个问题,就是直接服务于如何实施及调整开发过程;与此相比,希望一开始 就精确定义整个开发过程要做什么事情以及每件事情要花多少时间,则事倍功半。针对这两个问题,XP 中又两个主要的相应过程: 软件发布计划(Release Planning)。客户阐述需求,开发人员估算开发成本和风险。客户根据开发成

17、本、风险和每个需求的重要性,制订一个大致的项目计划。最初的项目计划没有必要(也没有可能)非 常准确,因为每个需求的开发成本、风险及其重要性都不是一成不变的。而且,这个计划会在实施过程 中被不断地调整以趋精确。 周期开发计划(Iteration Planning)。开发过程中,应该有很多阶段计划(比如每三个星期一个计 划)。开发人员可能在某个周期对系统进行内部的重整和优化(代码和设计),而在某个周期增加了新 功能,或者会在一个周期内同时做两方面的工作。但是,经过每个开发周期,用户都应该能得到一个已 经实现了一些功能的系统。而且,每经过一个周期,客户就会再提出确定下一个

18、周期要完成的需求。在 每个开发周期中,开发人员会把需求分解成一个个很小的任务,然后估计每个任务的开发成本和风险。 这些估算是基于实际开发经验的,项目做得多了,估算自然更加准确和精确;在同一个项目中,每经过 一个开发周期,下一次的估算都会有更过的经验、参照和依据,从而更加准确。 这些简单的步骤对客户提供了丰富的、足够的信息,使之能灵活有效地调控开发进程。每过两三个星 期,客户总能够实实在在地看到开发人员已经完成的需求。在XP里,没有什么“快要完成了”、“完成 了90%”的模糊说法,要不是完成了,要不就是没完成。这种做法看起来好象有利有弊:好处是客户可以 马上知道完成了

19、哪些、做出来的东西是否合用、下面还要做些什么或改进什么等等;坏处是客户看到做 出来的东西,可能会很不满意甚至中止合同。实际上,XP的这种做法是为了及早发现问题、解决问题, 而不是等到过了几个月,用户终于看到开发完的系统了,然后才告诉你这个不行、那个变了、还要增加 哪个内容等等。 •  验收测试 客户对每个需求都定义了一些验收测试。通过运行验收测试,开发人员和客户可以知道开发出来的软件 是否符合要求。XP开发人员把这些验收测试看得和单元测试一样重要。为了不浪费宝贵的时间,最好能 将这些测试过程自动化。 •  频繁地小规模发布软件(Small Relea

20、ses) 每个周期(Iteration)开发的需求都是用户最需要的东西。在XP中,对于每个周期完成时发布的系 统,用户都应该可以很容易地进行评估,或者已经能够投入实际使用。这样,软件开发对于客户来说, 不再是看不见摸不着的东西,而是实实在在的。XP要求频繁地发布软件,如果有可能,应该每天都发布 一个新版本;而且在完成任何一个改动、整合或者新需求后,就应该立即发布一个新版本。这些版本的 一致性和可靠性,是靠验收测试和测试驱动的开发来保证的。 3 简单设计,Pair Programming,测试驱动开发,重整和优化 XP程序员不但做为一个开发小组共同工作,还

21、以两个人为一个小开发单元编写同一个程序。开发人员们 进行简单的设计,编写单元测试后再编写符合测试要求的代码,并在满足需求的前提下不断地优化设 计。 •  简单设计 XP中让初学者感到最困惑的就是这点。XP要求用最简单的办法实现每个小需求,前提是按照这些简单设 计开发出来的软件必须通过测试。这些设计只要能满足系统和客户在当下的需求就可以了,不需要任何 画蛇添足的设计,而且所有这些设计都将在后续的开发过程中就被不断地重整和优化。 在XP中,没有那种传统开发模式中一次性的、针对所有需求的总体设计。在XP中,设计过程几乎一直贯 穿着整个项目开发:从制订项目的

22、计划,到制订每个开发周期(Iteration)的计划,到针对每个需求 模块的简捷设计,到设计的复核,以及一直不间断的设计重整和优化。整个设计过程是个螺旋式的、不 断前进和发展的过程。从这个角度看,XP是把设计做到了极致。 •  Pair Programming XP中,所有的代码都是由两个程序员在同一台机器上一起写的——这是XP中让人争议最多、也是最难实 施的一点。这保证了所有的代码、设计和单元测试至少被另一个人复核过,代码、设计和测试的质量因 此得到提高。看起来这样象是在浪费人力资源,但是各种研究表明事实恰恰相反。—— 这种工作方式 极大地提高了工作强度和

23、工作效率。 很多程序员一开始是被迫尝试这点的(XP也需要行政命令的支持)。开始时总是不习惯的,而且两个人 的效率不会比一个人的效率高。这种做法的效果往往要坚持几个星期或一两个月后才能很显著。据统 计,在所有刚开始Pair Programming的程序员中,90%的人在两个月以后都很认为这种工作方式更加高 效。 项目开发中,每个人会不断地更换合作编程的伙伴。因此,Pair Programming不但提高了软件质量,还 增强了相互之间的知识交流和更新,增强了相互之间的沟通和理解。这不但有利于个人,也有利于整个 项目、开发队伍和公司。从这点看,Pair Progr

24、amming不仅仅适用于XP,也适用于所有其它的软件开发 方法。 •  测试驱动开发 反馈是XP的四个基本的价值观之一——在软件开发中,只有通过充分的测试才能获得充分的反馈。XP中 提出的测试,在其它软件开发方法中都可以见到,比如功能测试、单元测试、系统测试和负荷测试等; 与众不同的是,XP将测试结合到它独特的螺旋式增量型开发过程中,测试随着项目的进展而不断积累。 另外,由于强调整个开发小组拥有代码,测试也是由大家共同维护的。即,任何人在往代码库中放程序 (Check In)前,都应该运行一遍所有的测试;任何人如果发现了一个BUG,都应该立即为这个BUG增加

25、 一个测试,而不是等待写那个程序的人来完成;任何人接手其他人的任务,或者修改其他人的代码和设 计,改动完以后如果能通过所有测试,就证明他的工作没有破坏愿系统。这样,测试才能真正起到帮助 获得反馈的作用;而且,通过不断地优先编写和累积,测试应该可以基本覆盖全部的客户和开发需求, 因此开发人员和客户可以得到尽可能充足的反馈。 •  重整和优化 (Refactoring) XP强调简单的设计,但简单的设计并不是没有设计的流水帐式的程序,也不是没有结构、缺乏重用性的 程序设计。开发人员虽然对每个USER STORY都进行简单设计,但同时也在不断地对设计进行改进,这个

26、 过程叫设计的重整和优化(Refactoring)。这个名字最早出现在Martin Fowler写的《Refactoring:  Improving the Design of Existing Code》这本书中。 Refactoring主要是努力减少程序和设计中重复出现的部分,增强程序和设计的可重用性。Refactoring 的概念并不是XP首创的,它已经被提出了近30年了,而且一直被认为是高质量的代码的特点之一。但XP 强调,把Refactoring做到极致,应该随时随地、尽可能地进行Refactoring,只要有可能,程序员都不 应该心疼以前写的程序,而要毫

27、不留情地改进程序。当然,每次改动后,程序员都应该运行测试程序, 保证新系统仍然符合预定的要求。 4 频繁地整合,集体拥有代码(Collective Code Ownership),编程规范 XP开发小组经常整合不同的模块。为了提高软件质量,除了测试驱动开发和Pair Programming以外,XP 要求每个人的代码都要遵守编程规范,任何人都可以修改其他人写的代码,而且所有人都应该主动检查 其他人写的代码。 •  频繁地整合 (Integration ) 在很多项目中,开发人员往往很迟才把各个模块整合在一起。在这些项目中,开发人员经常在整合过程

28、中发现很多问题,但不能肯定到底是谁的程序出了问题;而且,只有整合完成后,开发人员才开始稍稍 使用整个系统,然后就马上交付给客户验收。对于客户来说,即使这些系统能够通过终验收测试,因为 使用时间短,客户门心里并没有多少把握。 为了解决这些问题,XP提出,整个项目过程中,应该频繁地,尽可能地整合已经开发完的USER STORY (每次整合一个新的USER STORY)。每次整合,都要运行相应的单元测试和验收测试,保证符合客户和 开发的要求。整合后,就发布一个新的应用系统。这样,整个项目开发过程中,几乎每隔一两天,都会 发布一个新系统,有时甚至会一天发布好几个版本。通过这

29、个过程,客户能非常清楚地掌握已经完成的 功能和开发进度,并基于这些情况和开发人员进行有效地、及时地交流,以确保项目顺利完成。 •  集体拥有代码(Collective Code Ownership) 在很多项目开发过程中,开发人员只维护自己的代码,而且很多人不喜欢其他人随意修改自己的代码。 因此,即使可能有相应的比较详细的开发文档,但一个程序员却很少、也不太愿意去读其他程序员的代 码;而且,因为不清楚其他人的程序到底实现了什么功能,一个程序员一般也不敢随便改动其他人的代 码。同时,因为是自己维护自己的代码,可能因为时间紧张或技术水平的局限性,某些问题一直不能被

30、 发现或得到比较好的解决。针对这点,XP提倡大家共同拥有代码,每个人都有权利和义务阅读其他代 码,发现和纠正错误,重整和优化代码。这样,这些代码就不仅仅是一两个人写的,而是由整个项目开 发队伍共同完成的,错误会减少很多,重用性会尽可能地得到提高,代码质量是非常好。 为了防止修改其他人的代码而引起系统崩溃,每个人在修改后都应该运行测试程序。(从这点,我们可 以再次看到,XP的各个惯例和规则是怎样有机地结合在一起的。) •  编程规范 XP开发小组中的所有人都遵循一个统一的编程标准,因此,所有的代码看起来好像是一个人写的。因为 有了统一的编程规范,每个程序

31、员更加容易读懂其他人写的代码,这是是实现Collective Code  Ownership的重要前提之一。 5 Metaphor(系统比喻),不加班 XP过程通过使用一些形象的比喻让所有人对系统有个共同的、简洁的认识。XP认为加班是不正常的,因 为这说明关于项目进度的估计和安排有问题。  •  Metaphor(系统比喻) 为了帮助每个人一致清楚地理解要完成的客户需求、要开发的系统功能,XP开发小组用很多形象的比喻 来描述系统或功能模块是怎样工作的。比如,对于一个搜索引擎,它的Metaphor可能就是“一大群蜘 蛛,在网上四处寻找要捕捉的东西,

32、然后把东西带回巢穴。” •  不加班 大量的加班意味着原来的计划是不准确的,或者是程序远不清楚自己到底什么时候能完成什么工作。而 且,开发管理人员和客户也因此无法准确掌握开发速度;开发人员也因此非常疲劳。XP认为,如果出现 大量的加班现象,开发管理人员(比如Coach)应该和客户一起确定加班的原因,并及时调整项目计 划、进度和资源。 XP中一些基本概念的简介 User Story:开发人员要求客户把所有的需求写成一个个独立的小故事,每个只需要几天时间就可以完 成。开发过程中,客户可以随时提出新的User Story,或者更改以前的User Stor

33、y。 Story Estimates和开发速度:开发小组对每个User Story进行估算,并根据每个开发周期 (Iteration)中的实际情况反复计算开发速度。这样,开发人员和客户能知道每个星期到底能开发多 少User Story。 Release Plan和Release Scope:整个开发过程中,开发人员将不断地发布新版本。开发人员和客户一 起确定每个发布所包含的User Story。 Iteration(开发周期)和Iteration Plan:在一个Release过程中,开发人员要求客户选择最有价值的 User Story作为未来一两个星期

34、的开发内容。 The Seed:第一个开发周期(Iteration)完成后,提交给客户的系统。虽然这不是最终的产品,但它 已经实现了几个客户认为是最重要的Story,开发人员将逐步在其基础上增加新的模块。 Continuous Integration(整合):把开发完的User Story的模块一个个拼装起来,一步步接近乃至最 终完成最终产品。 验收测试(功能测试):对于每个User Story,客户将定义一些测试案例,开发人员将使运行这些测试 案例的过程自动化。 Unit Test(单元测试):在开始写程序前,程序员针对大部分类的方法,先写出相应的

35、测试程序。 Refactoring (重整和优化) :去掉代码中的冗余部分,增加代码的可重用性和伸缩性。  小结 XP的一个成功因素是重视客户的反馈——开发的目的就是为了满足客户的需要。XP方法使开发人员始终 都能自信地面对客户需求的变化。XP强调团队合作,经理、客户和开发人员都是开发团队中的一员。团 队通过相互之间的充分交流和合作,使用XP这种简单但有效的方式,努力开发出高质量的软件。XP的设 计简单而高效;程序员们通过测试获得客户反馈,并根据变化修改代码和设计,他们总是争取尽可能早 地将软件交付给客户。XP程序员能够勇于面对需求和技术上的变化

36、 XP很象一个由很多小块拼起来的智力拼图,单独看每一小块都没有什么意义,但拼装好后,一幅美丽的 图画就会呈现在你面前。  Extreme programming还要挑人,还有种族歧视?      答案是“对” 也 “不对”。Extreme programming当然没有歧视任何人的,任何人都可以去尝试  和使用XP。可不幸的是,使用XP确实不是所有人都可以做的到,它对实施的和参与的程序员都提出了更 高的要求。这种要求不是技术水平,也不是学历水平,水平不高的程序员一样可以XP,甚至可以是一很 好的XP programmer。这种要求是对一个人的心智,道德,修养

37、的更高要求(有点儿修道的样子哦)。      一个XP programmer应该具备这样一些基本素质:诚实,公正,坦诚,open-minded,勇敢。  在这些素质的基础上,才是对技术水平,能力和天分等的要求。      让我们一起来看一下为什么XP要要求这些基本素质。      诚实:诚实其实是一个Programmeer的最基本要求,不管是XP还是传统或其他方法。在XP的项目计  划阶段,要求程序员能准确的估计一个Task的开发时间(小时为单位),在开发阶段,则要求程序员能 根据自己的开发进度估计剩余的时间并汇报给Tracker。所有这些估计都是很主观的东西。而恰恰这

38、些  准确的估计构成了XP规划的基础。如果程序员不能根据自己的能力做出准确诚实的估计,不但会影响自 己,更重要是对整个Team和项目的损害。比如说如果一个程序员为了显示自己的能力,可能低估了Task 开发时间。或是在开发中为了面子而没能及时汇报Delay。当然XP的本身有针对的解决方法(Pair programming),但是对诚实的要求仍然是必须的。      公正:XP Team是一个紧密的团体,而group planning和pair programming都会有很多的意见的碰  撞。XP programmer必须能客观公正的看待问题。      坦诚和Ope

39、n-minded:XP的group planning,group design,pair programming, code review等都使 个人的知识水平的不足或失误暴露出来。如果别人当面指出你的设计失误或编码错误,XP程序员需要能 很坦率个开明的去看待别人的批评和自己的缺陷。我想我们在工作中也会遇到这种情况,一个人对别人 的批评最基本的反映就是防卫和反击。很多时候这种放应不是建立在对和错的基础上,而是个人自尊。 XP的解决方法是Colletive ownership,代码所有权共享。整个Team的所有程序员对所有的Code都有编  写和维护的权利和责任。尽管如此,坦

40、诚和开明还是Team work的基本之一。其实这也就人和人的相处  之道:就事论事。一个XP programmer应该也必须能做到这点。      勇敢:XP的开发是完全的Team work。在设计上和编码上采用的是也是team plannig 和 team   design。XP programmer因该主动勇敢的提出自己的意见,也需要能对Team lead或高级别程序员的设计 提出疑问。在以往的环境中,往往是高级人员作出决定由其他人执行。如果有人有意见通常也很难提出 不同意见,比如说你可能不会或不能够对System Architect的设计提出疑问因为他是高级人员和拥有

41、独 立的办公室。虽然很动公司提倡提意见,但是往往公司的氛围和文化或制度(系统设计师设计然后程序 员编码)已经建立起一个无形的屏障。  XP是一个完全以来Teamwork的管理方法。不仅仅是一种管理方法,也是一种文化。 在以往的开发环境中,我们最常见的环境是这样的:     一个个小小的间隔中程序员在安静的工作     程序员都埋头专注自己的程序编写     不少的开发会议用与协调程序员之间或各个Team之间的工作     每周一个例会汇报个人的工作进度     每周还可能会有一个会议进行Code Review和学习 以往的Teamwork,多为在

42、口头上表达强调的人与人之间要互相帮助和协作。其目的的正确的。问题是如 何确保人和人之间真的可以互相帮助和协作。开更多的会,口头在多的宣示或行政上的压力也无法保证 Teamwork的实现。一个很常见的例子。程序员A问程序员B的一个关于模块A问题,程序员B虽然也很乐于 助人,可当时正忙于自己模块的编写,所以他以没作个这个模块A,帮不了。这个回答是很合理的。B正 忙,他也真的没作过模块A。 相对来说,人总是愿意少干些活的。也总可以找到合理的借口给自己或别人。在人类进化 到无私之前,我们都无法保证自己能全心全一的去帮助别人。而人和人之间也总存在这样或那样的隔 阂。如何克服这

43、些私心和隔阂呢?在很多公司的中采取了各种团队活动和培训来增进员工之间的团队精 神,但工作以外的活动和培训中的合作和工作中的合作毕竟有很大的不同,比如说没有时间或甚至利益 上的冲突等,因此这种方法是一种辅助但不是一个直接的解决方法。     让我们来一起看一看在Extreme Programming中如何来建立Teamwork。     首先,对XP程序员素质的要求为有利于建立有效的团队精神。那种自命不凡,不能平等待人的程序 员不可能出现在XP的队伍中。     而从管理方式上,Team planning, Team design, collective code own

44、ership和pair  programming都是强调用团队的力量来高质量的设计和编码。可见,Extreme programming的所有环节都 是以Team为单位来进行的。这是Extreme programming和以往的方法很大的不同。     Team planning和Team design就是说整个Team一起来做项目计划和设计,所以所有的Team member 对整个项目和设计都有发言权,同时也是有整个Team来对项目进行负责。这里的负责是指所有人对项目 中的所有部分负责。而在以往的环境中,很多时候是一个Team中的各个人负责个人设计,这样就很容易 给破坏

45、Teamwork造成合理的借口,也容易在开发人员之间造成隔阂和误会等不合作的现象。在各个环节 以Team为单位进行开发能够针对性的克服这些弊端。     既然是以Team为单位进行设计,就是让所有的人员对系统的设计有控制权和全面了解,如果项目设 计出现问题,也把以往可能完全针对个人的责任分给整个Team来分担。这样不单减轻了开发人员的压 力,而对整个Team的压力有进一步迫使开发人员必须全力合作来完成项目。从而进一不增强Teamwork。 于是在XP项目中,就不会有这样的对话:“这个模块不是我设计的,我不懂,帮不了你啊”。 Collective code ownersh

46、ip(代码所有权共享)。同样的,我们也很唱见这种情况。某个模块是A写 的,如果有Bug,A就需要负责修改和测试。其他人可能会出于不伤害A的面子而不去修改他的程序。当 然也可能是懒惰的一个借口咯。Collective code ownership的意义在于把以外个人对项目的责任有整 个Team来承担。所有的Team member必须对所有的Code付有责任。平等的,项目的任何成功都是所有 Team member的努力成果。代码所有权共享鼓励任何人都可以根据需要更改其他人的Code。所以不存在 这样的借口“这个模块不是我写的….”。更重要的是它避免了在程序员之间的不良竞争,并把

47、他们之 间的竞争引导到对整个项目有利的方向上。     除了这些开发管理方法外,XP还需要其他一些微小的方式来促进Teamwork。XP需要一个开发式的开 发环境。过去那种一人一个小间隔的环境不是一个很有生产力的环境。开放式的开发环境允许程序员之 间可以很容易的直接交谈,随时让所有人了解项目的进度和出现的问题。比如Pair A遇到问题,他们可 以马上和对面的Pair B商量解决方法。又或Pair A的两个程序员讨论问题,Pair C刚巧作过同样的问 题,于是Pair C就可以提供意见。总之,目的就是让所有的开发人员都第一时间知道项目的开发进度和 出现的各种问题。而对

48、项目管理者来说,他也可以随时掌握开发的状况。一个的开放式开发环境应该是 键盘声,程序员之间的讨论声,笑声交织在一起。活跃的气氛是激发创造力和提高生产力的有效方法。 出了在制度和环境上去建立Teamwork外,同样的,XP也需要各种辅助方法来促进Teamwork。在一些XP项 目中,电子游戏(如Delta Force,Half Life)即是一种很好,很有效和很便宜的团队合作训练。各种 需要合作的电子游戏都可以有效的提高队员之间的默契和友情。在我的经历中的一个项目中,整个Team 的程序员们每天都在午休和下班后一起玩30分钟的游戏。由此一群本不认识的年轻人很快就建立起信任

49、 和默契。Teamwork也自然由此产生罗。当然可要有节制哦,Teamwork可主要是用来工作的。     总之,XP努力去建立一个开放,有趣味的工作环境,一个合作高效的开发队伍,并允许和要求队伍 中的任何一员都可以去承担项目的任何一个模块。从程序员的角度来看,他们可以放心地去度假而不需 要担心公司的紧急电话。从项目经理的角度来看,一个程序员的离开也不会对项目有不利的影响。这不 是所有管理方法所追求的么? Communication很重要,对所有的活动。比如在军事上由于通信不畅而导致全军覆没的例子很多。 但在软件开发中呢?是的,commnication一样的非常重要

50、的一环。一个软件项目的开发中的 Communication很多,有Team和客户之间的Commnication, Team内部的Commnication, Team和 Management的Commuinication。这三个方面的沟通程度的好坏完全可以影响一个project的成败。     首先我们来看一看Team内部的Commnication。在以往的开发中,程序员被要求做很多事情,设计, 编程,测试,写文档。但很少程序员被要求在工作中要多说话吧。而在我们的传统思维中,安静的工作 似乎是认真高效的样子,就想在学校里,学生们安静的学习是不允许说话的。这种思维定势推而广

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服