??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品午夜,亚洲综合图片,色哟哟国产精品免费观看http://www.aygfsteel.com/joeyeezhang/category/11480.htmlzh-cnSat, 23 Jul 2011 13:39:36 GMTSat, 23 Jul 2011 13:39:36 GMT60极限~程(xp~程)ȝ http://www.aygfsteel.com/joeyeezhang/archive/2007/01/05/91894.htmljoeyeezhangjoeyeezhangFri, 05 Jan 2007 01:33:00 GMThttp://www.aygfsteel.com/joeyeezhang/archive/2007/01/05/91894.htmlhttp://www.aygfsteel.com/joeyeezhang/comments/91894.htmlhttp://www.aygfsteel.com/joeyeezhang/archive/2007/01/05/91894.html#Feedback0http://www.aygfsteel.com/joeyeezhang/comments/commentRss/91894.htmlhttp://www.aygfsteel.com/joeyeezhang/services/trackbacks/91894.html1.什么是xp~程(极限~程):

XP是勇气,交流Q反馈和单?br />XP是Y件开发过E中的纪律,它规定你Q必d~程前些试Q必M个h一LE,必须遵守~程规范……?br />XP是把最好的实践l验提取出来QŞ成了一个崭新的开发方法?/p>

2. XP适用范围:

极限~程Q也被叫做XPQ适用于中型团队在需求不明确或者迅速变化的情况下进行Y件开发的轻量U方法学?br />推荐使用范围?0人左右的团队

3.XP工作模式体现:

一、工作环?br />二、立式晨?br />三、结对编E?br />四、测试驱动开?br />五、重?br />六、持l集?br />七、频J地发布版?/p>

4.l对~程:

开发Q务会l化分解为很多TaskQ一个Task的开发周期一般不过2天?br />每个Task的Owner会寻找一个Partnerq行l对开发?br />Task开发的ơ序q序员们自己协商。他可以先作为Partner和其他Owner一起开发某个TaskQ然后再扑֏一个程序员作ؓPartner来共同开发自己承担的Task?br />l对开发时QTask的Owner主要负责~码Q?Partner负责在一旁看Owner~程q在其编写有错误提出自己的意见,当其遇到困难时一赯论、互相帮助完成Q?/p>

5.试驱动开?

在动手编码之前,必须先写功能试脚本、单元测试脚本?br />写好试脚本后,开始编码、重构、运行单元测试、集成、运行功能测试,以此循环

6.重构:

减少重复设计Q优化设计结构,提高技术上的重用性和可扩展性?br />XP提倡毫不留情的重构?br />M人可以重构Q何代码,前提是重构后的代码一定要通过100%试单元试后才能被Check-in

7.持箋集成:

试先行是持l集成的一个重要前提?br />持箋集成指不断地把完成的功能模块整合在一赗目的在于不断获得客户反馈以及尽早发现BUG?br />随时整合Q越频繁好Q集成及试q程的自动化E度高好?br />每次只有一个新增加部分在整合,而且必须q行功能试

8.频繁地发布小版本:

发布q程应该可能地自动化、规范化?br />不断地发布可用的pȝ可以告诉客户你在做正的事情?br />客户使用发布的系l,可以保证频繁地反馈和交流?br />保证客户有够的依据调控开发过E?增加、删除或改变需??br />降低开发风险?br />随着开发的推进Q发布越来越频繁?br />所有的发布都要l过功能试?/p>

9.XP的关键词:

试优先原则
l对~程
持箋集成
频繁版?br />不断重构
立式晨会
交流和沟通,“只有没有沟通不够的目Q没有沟通过度的目”
分解d、制定计划是关键一?/p>

10.XP作用:

一、^E的工作效率

q稳的工作效率指团队和个人在很长的时期内保持一定的开发效率?br />保证了项目速度和计划过E的有效性和准确性;
保证了程序员可以持箋地完成Q务,团队可以持箋地向客户交付可运行的pȝQ?br />l对~程已经加大了工作强度,q且和其它XP的规则一h高了工作效率Qɞ加班和l持q稳的工作效率可能而且可行?br />提倡^E的工作效率Q体CXP以h为本的hD?br />二、高质量

试优先、ƈ坚持单元试、每个版本进行功能测试的原则是保证了高质量的一个关键;
充分的沟通交进一步减了写低质量代码的风险;
l对开发模式在互相学习中会产出高质量的代码
三、Open

l对开发、每一处修攚w需要测试等{规则得实现集体拥有代码, “我们”的代码,而不?#8220;?#8221;的代码;
充分的沟通交可以将每个人的知识、思想׃nQ?br />让每个h都知道项目的设计、计划、进展情늭信息Q?br />大家都知道每个h都在做什么和怎么做;
四、对人的挑战
暴露自己的缺点,人的本?br />懒惰
自尊

……

克服自己的缺?br />高效?br />不怕告诉别׃会,乐于问h
懂得重别hQ乐于帮助别?br />……

11.受益于XP:

一个曾l在XP模式下工作过的hQ回Cl开发模式下才深M会到XPl他带来的胦富?br />在传l开发模式下他坚持每天有计划、ȝQ坚持测试驱动开?#8230;…
发现他L按时下班甚至提前下班Q可是同事们来多且越来越晚下班,是自׃认真Q是同事们爱表现Q?#8230;…
都不是!Q?br />是XPl他带来的受益终w的开发方式,他的同事bug量远q比他多Q他只有不多的几?同事们Q务L延时Q而自己都是轻松按时完?#8230;…


卖艺|提?/a>

joeyeezhang 2007-01-05 09:33 发表评论
]]>
q代开发介l?/title><link>http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91790.html</link><dc:creator>joeyeezhang</dc:creator><author>joeyeezhang</author><pubDate>Thu, 04 Jan 2007 08:49:00 GMT</pubDate><guid>http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91790.html</guid><wfw:comment>http://www.aygfsteel.com/joeyeezhang/comments/91790.html</wfw:comment><comments>http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/joeyeezhang/comments/commentRss/91790.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/joeyeezhang/services/trackbacks/91790.html</trackback:ping><description><![CDATA[<table style="table-layout: fixed;"> <tbody> <tr> <td> <div id="wmqeeuq" class="cnt">l你一个标准的定义Q?br />在RUP中,q代被定义ؓQP代包括生品发布(E_、可执行的品版本)的全部开发活动和要用该发布必需的所有其他外围元素?br /><br />q个定义太学I气Q半天看不明白。这栯释可能更Ҏ理解Q?br />我们开发一个品,如果不太复杂Q会采用瀑布模型Q简单的说就是先需求定义,然后构徏框架Q然后写代码Q然后测试,最后发布一个品?br />q样Q几个月q去了,直到最后一天发布时Q大家才能见C个品?br /><br />q样的方式有明显的缺点,假如我们对用L需求判断的不是很准时——q是很常见的问题Q一点也不少?#8212;—你工作了几个月甚x几年Q当你把产品拿给客户看时Q客户往往会大吃一惊,q就是我要的东西吗?<br /><br />q代的方式就有所不同Q假如这个品要?个月交货Q我在第一个月׃拿出一个品来Q当Ӟq个产品会很不完善,会有很多功能q没有添加进去,bug很多Q还不稳定,但客L了以后,会提出更详细的修Ҏ见,q样Q你q道自pdL需求有多远Q我回家以后Q再׃个月Q在上个月所作的需求分析、框架设计、代码、测试等{的基础上,q一步改q,又拿Z个更完善的品来Q给客户看,让他们提意见?br />pP我的产品在功能上、质量上都能够逐渐D客户的要求,不会出现我花了大量心血后,直到最后发布之时才发现Ҏ不是客户要的东西?br /><br />q样的方法很不错Q但他也有自q~陷Q那是周期ѝ成本很高。在应付大项目、高风险目——比如是航天飞机的控制系l时QP代的成本比项目失败的风险成本低得多,用这U方式明显有优势?br />如果你是l自q单位开发一个小MISQ自׃比较清楚需求,工期上也不过׃个把月的旉Q用q代有Ҏ鸡用了牛刀Q那q是瀑布模型更管用,即是做得不对,多再花一个月重来Q没什么了不v<br /><a >卖艺|?/a></div> </td> </tr> </tbody> </table><img src ="http://www.aygfsteel.com/joeyeezhang/aggbug/91790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/joeyeezhang/" target="_blank">joeyeezhang</a> 2007-01-04 16:49 <a href="http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>极限~程介绍http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91782.htmljoeyeezhangjoeyeezhangThu, 04 Jan 2007 08:25:00 GMThttp://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91782.htmlhttp://www.aygfsteel.com/joeyeezhang/comments/91782.htmlhttp://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91782.html#Feedback0http://www.aygfsteel.com/joeyeezhang/comments/commentRss/91782.htmlhttp://www.aygfsteel.com/joeyeezhang/services/trackbacks/91782.htmlXP是一个轻量的、灵巧的软g开发方法;同时它也是一个非怸谨和周密的方法。它的基和hD是交、朴素、反馈和勇气Q即QQ何一个Y仉目都可以从四个方面入手进行改善:加强交流Q从单做PL反馈Q勇于实事求是。XP是一U近螺旋式的开发方法,它将复杂的开发过E分解ؓ一个个相对比较单的周期;通过U极的交、反馈以及其它一pd的方法,开发h员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困隄QƈҎ实际情况及时地调整开发过E?
什么是软g开?

软g开发的内容是:需求、设计、编E和试Q?

需求:不仅仅是用户需求,应该是开发中遇到的所有的需求。比如,你首先要知道做这个项目是Z解决什么问题;试案例中应该输入什么数?#8230;…Z清楚地知道这些需求,你经常要和客戗项目经理等交流?

设计Q编码前Q肯定有个计划告诉你要做什么,l构是怎样{等。你一定要按照q个来做Q否则可能会一团糟?

~程Q如果在目截止日,你的E序不能跑v来或达不到客L要求Q你拿不到钱?

试Q目的是让你知道Q什么时候算是完成了。如果你聪明Q你应该先写测试,q样可以及时知道你是否真地完成了。否则,你经怼不知道,到底有哪些功能是真正完成了,预期目标还差多q?

软g开发中Q客户和开发h员都有自q基本权利和义务?
客户Q?
定义每个用户需求的商业优先U;
制订M计划Q包括用多少投资、经q多长时间、达C么目的;
在项目开发过E中的每个工作周Q都能让投资获得最大的收益Q?
通过重复q行你所指定的功能测试,准确地掌握项目进展情况;
能随时改变需求、功能或优先U,同时避免昂贵的再投资Q能够根据各U变化及时调整项目计划;
能够随时取消目Q项目取消时Q以前的开发工作不是一堆垃圾,已开发完的功能是合乎要求的,正在q行或未完成的的工作则应该是不难接手的?

开发h员:
知道要做什么,以及要优先做什么;
工作有效率;
有问题或困难Ӟ能得到客戗同事、上U的回答或帮助;
对工作做评估QƈҎ周围情况的变化及旉新评伎ͼ
U极承担工作Q而不是消极接受分配;
一?0时工作Ӟ不加班?

q就是Y件开发,除此之外再还有其它要兛_的问题!


灵y的轻量软g开发方?

一套Y件开发方法是׃pd与开发相关的规则、规范和惯例。重量的开发方法严格定义了许多的规则、流E和相关的文工作。灵巧的轻量U开发方法,其规则和文相对较少Q流E更加灵z,实施h相对较容易?

在Y件工E概念出C前,E序员们按照自己喜欢的方式开发Y件。程序的质量很难控制Q调试程序很J琐Q程序员之间也很难读懂对方写的代码?968q_EdsgerDijkstralCACM写了一题为GOTOStatementConsideredHarmful的信QY件工E的概念由此诞生。程序员们开始摒弃以前的做法Q{而用更pȝ、更严格的开发方法。ؓ了控制软g开发和控制其它产品生一样严|Z陆箋制定了很多规则和做法Q发明了很多软g工程ҎQY件质量开始得到大q度提高。随着遇到的问题更多,规则和流E也来精l和复杂?

C今天Q在实际开发过E中Q很多规则已l难于遵循,很多程复杂而难于理解,很多目中文档的制作q程正在失去控制。h们试图提出更全面更好的一揽子ҎQ或者寄希望于更复杂的、功能更强大的辅助开发工PCaseToolsQ,但L不能成功Q而且开发规范和程变得来复杂和难以实施?

Z赶进度,E序员们l常跌一些指定的程Q很h能全面遵循那些重量开发方法?

p|的原因很单,q个世界没有万能药。因此,一些h提出Q将重量U开发方法中的规则和程q行删减、重整和优化Q这样就产生了很多适应不同需要的轻量U流E。在q些程中,合乎实际需要的规则被保留下来,不必要的复杂化开发的规被抛弃。而且Q和传统的开发方法相比,轻量U流E不再象水生U,而是更加灉|?

ExtremeProgrammingQXPQ就是这样一U灵巧的轻量UY件开发方法?


Z么称?#8220;Extreme”Q极限)

“Extreme”Q极限)是指Q对比传l的目开发方式,XP把它列出的每个方法和思想做到极限、做到最好;其它XP所不提倡的Q则一概忽略(如开发前期的整体设计{)。一个严格实施XP的项目,其开发过E应该是q稳的、高效的和快速的Q能够做C?0时工作制而不拖g目q度?

XP的Y件开发是什么样

1极限的工作环?

Z在Y件开发过E中最大程度地实现和满_户和开发h员的基本权利和义务,XP要求把工作环境也做得最好。每个参加项目开发的人都担M个角Ԍ目l理、项目监督h{等Qƈ履行相应的权利和义务。所有的人都在同一个开攄开发环境中工作Q最好是所有h在同一个大房子中工作,q有茶点供应Q每?0时Q不提倡加班;每天早晨Q所有h一L着开个短会;墙上有一些大白板Q所有的Story卡、CRC卡等都脓在上面,讨论问题的时候可以在上面写写ȝQ下班后大家可以一L电脑游戏……?

2极限的需?

客户应该是项目开发队伍中的一员,而不是和开发h员分开的;因ؓ从项目的计划到最后验Ӟ客户一直v着很重要的作用。开发h员和客户一P把各U需求变成一个个的需求模块(UserStoryQ,例如“计算q的Mh敎ͼ是把该q所有班的h数篏加?#8221;Q这些模块又会根据实际情况被l合在一h者被分解成更的模块Q它们都被记录在一些小卡片QStoryCardQ上Q之后分别被E序员们在各个小的周期开发中QIterationQ通常不超q?个星期)实现Q客h据每个模块的商业价值来指定它们的优先Q开发h员要做的是确定每个需求模块的开发风险,风险高的Q通常是因为缺乏类似的l验Q需求模块将被优先研I、探索和开发;l过开发h员和客户分别从不同的角度评估每个模块后,它们被安排在不同的开发周期里Q客户将得到一个尽可能准确的开发计划;客户为每个需求模块指定验收测试(功能试Q?

每发布一ơ开发的软gQ经q一个开发周期)Q用户都能得C个可以开始用的pȝQ这个系l全面实C相应的计划中的所有需求。而在一些传l的开发模式中Q无Z么功能,用户都要{到所有开发完成后才能开始用?

3极限的设?

从具体开发的角度来看QXP内层的过E是一个个Z试驱动的开发(TestDrivenDevelopmentQ周期,诸如计划和设计等外层的过E都是围l这些展开的。每个开发周期都有很多相应的单元试QUnitTestQ。刚开始,因ؓ什么都没有实现Q所以所有的单元试都是p|的;随着一个个的需求模块的完成Q通过的单元测试也来多。通过q种方式Q客户和开发h员都很容易检验,是否履行了对客户的承诺。XP提倡对于简单的设计QSimpleDesignQ,是用最单的方式Q得ؓ每个单的需求写出来的程序可以通过所有相关的单元试。XP抛弃那种一揽子详细设计方式QBigDesignUpFrontQ,因ؓq种设计中有很多内容是你现在或最q都Ҏ不需要的。XPq大力提倡设计复核(ReviewQ、代码复总及重整和优化QRefectoryQ,所有的q些q程其实也是优化设计的过E;在这些过E中不断q行单元试和功能测试,可以保证l过重整和优化后的系l仍然符合所有需求?

4极限的编E?

既然~程很重要,XP提倡两个h一起写同一D늨序(PairProgrammingQ,而且代码所有权是归于整个开发队伍(CollectiveCodeOwnershipQ。程序员在写E序和重整优化程序的时候,都要严格遵守~程规范。Q何h都可以修改其他h写的E序Q修改后要确定新E序能通过单元试?

5极限的测?

既然试很重要,XP提倡在开始写E序之前先写单元试。开发h员应该经常把开发好的模块整合到一PContinuousIntegrationQ,每次整合后都要运行单元测试;做Q何的代码复核和修改,都要q行单元试Q发CBUGQ就要增加相应的试Q因此XPҎ不需要BUG数据库)。除了单元测试之外,q有整合试Q功能测试、负h试和pȝ试{。所有这些测试,是XP开发过E中最重要的文之一Q也是最l交付给用户的内容之一?


XP中的重要惯例和规?

1目开发小l(TeamQ?

在XP中,每个寚w目做贡献的h都应该是目开发小l中的一员。而且Q这个小l中必须臛_有一个h对用户需求非常清晎ͼ能够提出需求、决定各个需求的商业价|优先U)、根据需求等的变化调整项目计划等。这个h扮演的是“客户”q个角色Q当然最好就是实际的最l用P因ؓ整个目是围绕最l用L需求而展开的。程序员是项目开发小l中必不可少的成员。小l中可以有测试员Q他们帮助客户制订验收测试;有分析员Q帮助客L定需求;通常q有个CoachQ教l)Q负责跟t开发进度、解军_发中遇到的一些问题、推动项目进行;q可以又一个项目经理,负责调配资源、协助项目内外的交流沟通等{。项目小l中有这么多角色Q但q不是说Q每个h做的工作是别Z能插手或q预的,XP鼓励每个人尽可能Cؓ目多做贡献。^{相处,取长补短Q这是最好的XP开发小l?

2计划目QPlanningGameQ、验收测试、小规模发布QSmallReleasesQ?

XP开发小l用简单的方式q行目计划和开发跟t,q以ơ预项目进展情况和军_未来的步骤。根据需求的商业价|开发小l针对一l组的需求进行一pd的开发和整合Q每ơ开发都会生一个通过试的、可以用的pȝ?

计划目

XP的计划过E主要针对Y件开发中的两个问题:预测在交付日期前可以完成多少工作Q现在和下一步该做些什么。不断的回答q两个问题,是直接服务于如何实施及调整开发过E;与此相比Q希望一开始就_定义整个开发过E要做什么事情以及每件事情要花多时_则事倍功半。针对这两个问题QXP中又两个主要的相应过E:

软g发布计划QReleasePlanningQ。客户阐q需求,开发h员估开发成本和风险。客h据开发成本、风险和每个需求的重要性,制订一个大致的目计划。最初的目计划没有必要Q也没有可能Q非常准,因ؓ每个需求的开发成本、风险及光要性都不是一成不变的。而且Q这个计划会在实施过E中被不断地调整以趋_?

周期开发计划(IterationPlanningQ。开发过E中Q应该有很多阶段计划Q比如每三个星期一个计划)。开发h员可能在某个周期对系l进行内部的重整和优化(代码和设计)Q而在某个周期增加了新功能Q或者会在一个周期内同时做两斚w的工作。但是,l过每个开发周期,用户都应该能得到一个已l实C一些功能的pȝ。而且Q每l过一个周期,客户׃再提出确定下一个周期要完成的需求。在每个开发周期中Q开发h员会把需求分解成一个个很小的Q务,然后估计每个d的开发成本和风险。这些估是Z实际开发经验的Q项目做得多了,估算自然更加准确和精;在同一个项目中Q每l过一个开发周期,下一ơ的估算都会有更q的l验、参照和依据Q从而更加准。这些简单的步骤对客h供了丰富的、够的信息Q之能灉|有效地调控开发进E。每q两三个星期Q客h能够实实在在地看到开发h员已l完成的需求。在XP里,没有什?#8220;快要完成?#8221;?#8220;完成?0%”的模p说法,要不是完成了Q要不就是没完成。这U做法看h好象有利有弊Q好处是客户可以马上知道完成了哪些、做出来的东西是否合用、下面还要做些什么或改进什么等{;坏处是客L到做出来的东西,可能会很不满意甚至中止合同。实际上QXP的这U做法是Z及早发现问题、解决问题,而不是等到过了几个月Q用L于看到开发完的系l了Q然后才告诉你这个不行、那个变了、还要增?
哪个内容{等?

验收试

客户Ҏ个需求都定义了一些验收测试。通过q行验收试Q开发h员和客户可以知道开发出来的软g是否W合要求。XP开发h员把q些验收试看得和单元测试一样重要。ؓ了不费宝贵的时_最好能这些测试过E自动化?

频繁地小规模发布软gQSmallReleasesQ?

每个周期QIterationQ开发的需求都是用h需要的东西。在XP中,对于每个周期完成时发布的pȝQ用户都应该可以很容易地q行评估Q或者已l能够投入实际用。这P软g开发对于客h_不再是看不见怸着的东西,而是实实在在的。XP要求频繁地发布YӞ如果有可能,应该每天都发布一个新版本Q而且在完成Q何一个改动、整合或者新需求后Q就应该立即发布一个新版本。这些版本的一致性和可靠性,是靠验收试和测试驱动的开发来保证的?

3单设计,PairProgrammingQ测试驱动开发,重整和优?

XPE序员不但做Z个开发小l共同工作,q以两个Zؓ一个小开发单元编写同一个程序。开发h员们q行单的设计Q编写单元测试后再编写符合测试要求的代码Qƈ在满需求的前提下不断地优化设计?

单设?

XP中让初学者感到最困惑的就是这炏VXP要求用最单的办法实现每个需求,前提是按照这些简单设计开发出来的软g必须通过试。这些设计只要能满pȝ和客户在当下的需求就可以了,不需要Q何画蛇添的设计Q而且所有这些设计都在后箋的开发过E中p不断地重整和优化?

在XP中,没有那种传统开发模式中一ơ性的、针Ҏ有需求的M设计。在XP中,设计q程几乎一直诏I着整个目开发:从制订项目的计划Q到制订每个开发周期(IterationQ的计划Q到针对每个需求模块的捯计,到设计的复核Q以及一直不间断的设计重整和优化。整个设计过E是个螺旋式的、不断前q和发展的过E。从q个角度看,XP是把设计做到了极致?

PairProgramming

XP中,所有的代码都是׃个程序员在同一台机器上一起写?#8212;—q是XP中让Z议最多、也是最隑֮施的一炏V这保证了所有的代码、设计和单元试臛_被另一个h复核q,代码、设计和试的质量因此得到提高。看hq样象是在浪费h力资源,但是各种研究表明事实恰恰相反?#8212;—q种工作方式极大地提高了工作强度和工作效率?

很多E序员一开始是被迫试q点的(XP也需要行政命令的支持Q。开始时L不习惯的Q而且两个人的效率不会比一个h的效率高。这U做法的效果往往要坚持几个星期或一两个月后才能很显著。据l计Q在所有刚开始PairProgramming的程序员中,90%的h在两个月以后都很认ؓq种工作方式更加高效?

目开发中Q每个h会不断地更换合作~程的伙伴。因此,PairProgramming不但提高了Y件质量,q增Z怺之间的知识交和更新Q增Z怺之间的沟通和理解。这不但有利于个人,也有利于整个目、开发队伍和公司。从q点看,PairProgramming不仅仅适用于XPQ也适用于所有其它的软g开发方法?

试驱动开?

反馈是XP的四个基本的价D之一——在Y件开发中Q只有通过充分的测试才能获得充分的反馈。XP中提出的试Q在其它软g开发方法中都可以见刎ͼ比如功能试、单元测试、系l测试和负荷试{;与众不同的是QXP测试结合到它独特的螺旋式增量型开发过E中Q测试随着目的进展而不断积累。另外,׃整个开发小l拥有代码,试也是由大家共同维护的。即QQ何h在往代码库中攄序(CheckInQ前Q都应该q行一遍所有的试QQ何h如果发现了一个BUGQ都应该立即个BUG增加一个测试,而不是等待写那个E序的h来完成;M人接手其他h的Q务,或者修改其他h的代码和设计Q改动完以后如果能通过所有测试,p明他的工作没有破坏愿pȝ。这P试才能真正起到帮助获得反馈的作用;而且Q通过不断C先编写和累积Q测试应该可以基本覆盖全部的客户和开发需求,因此开发h员和客户可以得到可能充的反馈?

重整和优?Refactoring)

XP单的设计Q但单的设计q不是没有设计的水帐式的程序,也不是没有结构、缺乏重用性的E序设计。开发h员虽然对每个USERSTORY都进行简单设计,但同时也在不断地对设计进行改q,q个q程叫设计的重整和优化(RefactoringQ。这个名字最早出现在MartinFowler写的《Refactoring:ImprovingtheDesignofExistingCode》这本书中?

Refactoring主要是努力减程序和设计中重复出现的部分Q增强程序和设计的可重用性。Refactoring的概念ƈ不是XP首创的,它已l被提出了近30q了Q而且一直被认ؓ是高质量的代码的特点之一。但XPQ把Refactoring做到极致Q应该随旉地、尽可能地进行RefactoringQ只要有可能Q程序员都不应该心疼以前写的E序Q而要毫不留情地改q程序。当Ӟ每次改动后,E序员都应该q行试E序Q保证新pȝ仍然W合预定的要求?

4频繁地整合,集体拥有代码QCollectiveCodeOwnershipQ,~程规范

XP开发小l经常整合不同的模块。ؓ了提高Y件质量,除了试驱动开发和PairProgramming以外QXP要求每个人的代码都要遵守~程规范QQ何h都可以修改其他h写的代码Q而且所有h都应该主动检查其他h写的代码?

频繁地整合(IntegrationQ?

在很多项目中Q开发h员往往很迟才把各个模块整合在一赗在q些目中,开发h员经常在整合q程中发现很多问题,但不能肯定到底是谁的E序Z问题Q而且Q只有整合完成后Q开发h员才开始稍E用整个系l,然后马上交付给客户验收。对于客h_即ɘq些pȝ能够通过l验收测试,因ؓ使用旉短,客户门心里ƈ没有多少把握?

Z解决q些问题QXP提出Q整个项目过E中Q应该频J地Q尽可能地整合已l开发完的USERSTORYQ每ơ整合一个新的USERSTORYQ。每ơ整合,都要q行相应的单元测试和验收试Q保证符合客户和开发的要求。整合后Q就发布一个新的应用系l。这P整个目开发过E中Q几乎每隔一两天Q都会发布一个新pȝQ有时甚至会一天发布好几个版本。通过q个q程Q客戯非常清楚地掌握已l完成的功能和开发进度,q基于这些情况和开发h员进行有效地、及时地交流Q以保目利完成?

集体拥有代码QCollectiveCodeOwnershipQ?

在很多项目开发过E中Q开发h员只l护自己的代码,而且很多Z喜欢其他人随意修改自q代码。因此,即可能有相应的比较详细的开发文,但一个程序员却很、也不太愿意去读其他E序员的代码Q而且Q因Z清楚其他人的E序到底实现了什么功能,一个程序员一般也不敢随便改动其他人的代码。同Ӟ因ؓ是自q护自q代码Q可能因为时间紧张或技术水q的局限性,某些问题一直不能被发现或得到比较好的解冟뀂针对这点,XP提倡大家共同拥有代码,每个人都有权利和义务阅读其他代码Q发现和U正错误Q重整和优化代码。这Pq些代码׃仅仅是一两个人写的,而是由整个项目开发队伍共同完成的Q错误会减少很多Q重用性会可能地得到提高Q代码质量是非常好?

Z防止修改其他人的代码而引Ll崩溃,每个人在修改后都应该q行试E序。(从这点,我们可以再次看到QXP的各个惯例和规则是怎样有机地结合在一L。)

~程规范

XP开发小l中的所有h都遵循一个统一的编E标准,因此Q所有的代码看v来好像是一个h写的。因为有了统一的编E规范,每个E序员更加容易读懂其他h写的代码Q这是是实现CollectiveCodeOwnership的重要前提之一?

5MetaphorQ系l比喻)Q不加班

XPq程通过使用一些Ş象的比喻让所有h对系l有个共同的、简z的认识。XP认ؓ加班是不正常的,因ؓq说明关于项目进度的估计和安排有问题?

MetaphorQ系l比喻)

Z帮助每个Z致清楚地理解要完成的客户需求、要开发的pȝ功能QXP开发小l用很多形象的比L描述pȝ或功能模块是怎样工作的。比如,对于一个搜索引擎,它的Metaphor可能是“一大群蜘蛛Q在|上四处L要捕捉的东西Q然后把东西带回巢穴?#8221;

不加?

大量的加班意味着原来的计划是不准的Q或者是E序q不清楚自己到底什么时候能完成什么工作。而且Q开发管理h员和客户也因此无法准掌握开发速度Q开发h员也因此非常疲劳。XP认ؓQ如果出现大量的加班现象Q开发管理h员(比如CoachQ应该和客户一L定加班的原因Qƈ及时调整目计划、进度和资源?


XP中一些基本概늚?

UserStoryQ开发h员要求客h所有的需求写成一个个独立的小故事Q每个只需要几天时间就可以完成。开发过E中Q客户可以随时提出新的UserStoryQ或者更改以前的UserStory?

StoryEstimates和开发速度Q开发小l对每个UserStoryq行估算QƈҎ每个开发周期(IterationQ中的实际情况反复计开发速度。这P开发h员和客户能知道每个星期到底能开发多UserStory?

ReleasePlan和ReleaseScopeQ整个开发过E中Q开发h员将不断地发布新版本。开发h员和客户一L定每个发布所包含的UserStory?

IterationQ开发周期)和IterationPlanQ在一个Releaseq程中,开发h员要求客户选择最有h值的UserStory作ؓ未来一两个星期的开发内宏V?

TheSeedQ第一个开发周期(IterationQ完成后Q提交给客户的系l。虽然这不是最l的产品Q但它已l实C几个客户认ؓ是最重要的StoryQ开发h员将逐步在其基础上增加新的模块?

ContinuousIntegrationQ整合)Q把开发完的UserStory的模块一个个DhQ一步步接近乃至最l完成最l品?

验收试Q功能测试)Q对于每个UserStoryQ客户将定义一些测试案例,开发h员将使运行这些测试案例的q程自动化?

UnitTestQ单元测试)Q在开始写E序前,E序员针对大部分cȝҎQ先写出相应的测试程序?

Refactoring(重整和优?Q去掉代码中的冗余部分,增加代码的可重用性和伸羃性?




XP的一个成功因素是重视客户的反?#8212;—开发的目的是Z满客户的需要。XPҎ使开发h员始l都能自信地面对客户需求的变化。XP团队合作Q经理、客户和开发h员都是开发团队中的一员。团队通过怺之间的充分交和合作Q用XPq种单但有效的方式,努力开发出高质量的软g。XP的设计简单而高效;E序员们通过试获得客户反馈QƈҎ变化修改代码和设计,他们L争取可能早地将软g交付l客戗XPE序员能够勇于面寚w求和技术上的变化?

XP很象一个由很多块Dv来的智力拼图Q单独看每一块都没有什么意义,但拼装好后,一q美丽的囄׃呈现在你面前?br />卖艺|?/a>

joeyeezhang 2007-01-04 16:25 发表评论
]]>
软gq程QTSPQRUP和XPhttp://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91721.htmljoeyeezhangjoeyeezhangThu, 04 Jan 2007 03:54:00 GMThttp://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91721.htmlhttp://www.aygfsteel.com/joeyeezhang/comments/91721.htmlhttp://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91721.html#Feedback0http://www.aygfsteel.com/joeyeezhang/comments/commentRss/91721.htmlhttp://www.aygfsteel.com/joeyeezhang/services/trackbacks/91721.html说到Z么我喜欢在实验室推广XPQ我们先来看看几个Y件过E?

  首先是RUPQRUP有什么特点呢QP代性开发,用例驱动Q用UML对Y件徏模,提倡事先设计好以组件ؓ核心的体pȝ?以体pȝ构ؓ中心)Q不断的评估和测试Y件质量,Q用用例)控制软g的变化。在q些原则的基上,把Y件h员分成各U角?分析Q开发,理Q测试,工具支持Q配|?{等Q在软g开发过E中的各U品叫做工?Artifact)?/p>

  再看TSPQTSP把h员分成小l领D、开发经理、计划经理、质量/生l理Q以及技术支持经?注意q点和RUP的雷同),要求各个人员严格记录在Y件开发过E中的每一步,比如E序的Bug率,使用的时间等{?/p>

  最后一个是XPQXP的特点,双h~程Q简单用?User Story)QRefactoringQ以周ؓ基础的P代。持l集成,现场客户Q测试驱动,自动化测试,代码同步。同LQXP也把人员分成试Q交h员,设计师,技术作者,客户Q程序员{等?/p>

  OKQ说了这么多长篇大论Q是Z把几个Y件过E拿出来比较。所有的软gq程无非是ؓ了避免风险,保证目的成功?/p>

  拿交通工具做比方的话QTSP好比坐火RQ由于TSP是CMM那帮子h搞的Q所以TSP不强调P代性开发。TSP的是质量理和控Ӟ通过每个觉自愿的记录每天的行为,从而的得到严格的项目的数据Q缺乏了q种严格控制QTSP好比火车没有轨道,一点用处也没有。而在我们实验室一帮懒懒散散的学生中搞数据Q要他们每天填表Q从而知道项目消耗了多少人时QBug率ؓ多少Q不要做梦了吧,所以TSP那套方式肯定是行不通的?/p>

  再看XP和RUP的差别,q代性开发,两者都Q不q两者的含义不同Q在RUP中,每次q代Q强调生的是一个个工gQ比如完成了用例。而在XP中,产生的是可用的Y件。ؓ什么RUP的P代里面可能没有生可用的软g呢?因ؓRUP的是用例驱动和体pȝ构ؓ中心Q所以RUP花在设计体系l构和用例上的时间会比较多,q样带来的好处是软g的后期变更会比较。而XP本n的是拥抱变化Q不三七二十一Q先开发出来一个能用的再说Q如果客户不满意Q别忘了QXP是现场客PQRefactoring之。所以在XP的开头的时候,Ҏ׃提倡太复杂的用例(客户在现场嘛Q不懂客L意思,现场交流啊)Q也不提倡过多的设计Q测试驱动嘛Q通不q的话Refactoring之)?/p>

  然而RUP没有现场客户的概念,所以清晰的用例描述是RUP中很重要的一环。只有这些用例在客户和团队之间达成了pQ才能做下一步的工作Q同LQ需求的变更也必通过用例来体玎ͼRUP很强调变更管理,是q个意思?/p>

  而在我们实验室做现在q个目Q不是和客户交流的问题,而是没有客户Q!Q?/p>

  所以,在这U程度下Q我们的用例Q不是要让客L解,而是我们自己理解p够了。而体pȝ构,׃你们现在不用考虑分布式,q发Q事务等{一pd东西。这些东襉K由J2EE做了?br />
  此外RUP在我们实验室很难办的一件事情是对各个阶D生的工g的质量监控,同学们互相哈哈哈Q很隑֯一个文性的东西q行评h?br />
     那么要改善我们现在做的项目,最重要的是做什么呢Q第一是,P代,我们现在整个软g开发周期太长了Q应该羃短到2Q?周以内。第二,试Q我们现在的试很多都是手动的,需要自动化q个试q程。第三是Q快速构建,持箋集成。整个Y件的部v周期不能像现在这么长Q不能由同学们手工构建,而必L自动化的部v。这些都是在XP中强调的?br />
     RUP的不同就好比是做BUS和自己开汽车的不同Q尽细微,但是Q开汽车更需要小心翼的调整方向Q而公交R毕竟有线路?br />   
  如果在一个大公司做部门经理的话,我更愿意采用RUP那套方式Q辅之于XP的各U实践,然而在实验室,我只有退而求其次Q因地制宜,XP能推q多是多少Q一些很难推q的东西比如风险理QBUG理只能暂时攑ּ了?/p>

爱卖?/a>



joeyeezhang 2007-01-04 11:54 发表评论
]]>
软g目l理的基本职?/title><link>http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91713.html</link><dc:creator>joeyeezhang</dc:creator><author>joeyeezhang</author><pubDate>Thu, 04 Jan 2007 03:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91713.html</guid><wfw:comment>http://www.aygfsteel.com/joeyeezhang/comments/91713.html</wfw:comment><comments>http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/joeyeezhang/comments/commentRss/91713.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/joeyeezhang/services/trackbacks/91713.html</trackback:ping><description><![CDATA[<span id="wmqeeuq" class="javascript" id="text166232" style="font-size: 12px;"> <font face="Verdana">软g目l理的基本职? <br /><br />1. 制定目计划QƈҎ各种变化修改目计划 <br />2. 实施 目的管理、开发、质量保?q程Q确保客L成本、进度、W效和质量目标.<br />3. 制定有效的项目决{过E?br />4. 保在项目生命周期中遵@是实施公司的理和质量政{?br />5. 选择一个能够精衡量项目成本、进度、质量、W效的目距阵<br />6. 风险理<br />7. 招聘和培训必ȝ目成员 <br />8. 定目的h员组l结? <br />9. 定期举行目评估(review)会议 <br />10.为项目所有成员提供够的讑֤、有效的工具和项目开发过E?<br />11.有效理目资源<br /><a >爱卖?/a><br /></font> </span><img src ="http://www.aygfsteel.com/joeyeezhang/aggbug/91713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/joeyeezhang/" target="_blank">joeyeezhang</a> 2007-01-04 11:15 <a href="http://www.aygfsteel.com/joeyeezhang/archive/2007/01/04/91713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ء</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">пǰ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">Ǩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʱ</a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank">ͬ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank">⿪</a>| <a href="http://" target="_blank">ֺ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ֹ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ұ</a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank">봨</a>| <a href="http://" target="_blank">ȫ</a>| <a href="http://" target="_blank">ʯׯ</a>| <a href="http://" target="_blank">㰲</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>