它山之石可以攻玉!
//注:本BLOG中标注“原创”的文章为本人版权所有,未经许可不得擅自使用,如有引用请注明作者“谷雨霖”。msn: cabinhome@sohu.com
敏捷开发大家谈(四)
上一篇 / 下一篇 2008-05-15 12:55:55 / 个人分类:项目管理
(五) Extreme Programming
@cd|#Ao3Y0
Q6|&p)\7Ykl m PU&F0Extreme Programming(XP,极限编程) 是一种轻量级的软件开发方法,它使用快速的反馈,大量而迅速的交流,经过保证的测试来最大限度的满足用户的需求。XP强调用户满意,开发人员可以对需求的变化作出快速的反应。XP强调team work。项目管理者,用户,开发人员都处于同一个项目中,他们之间的关系不是对立的,而是互相协作的,具有共同的目标:提交正确的软件。XP强调4个因素:
`y"TY%Y W {R0交流(communication),XP要求程序员之间以及和用户之间有大量而迅速的交流ITPUB个人空间o(\0y7|$`C
简单(simplicity),XP要求设计和实现简单和干净
&Z O y| PYc,c0反馈(feedback)通过测试得到反馈,尽快提交软件并根据反馈修改
8G6kh+Wy!l0D0勇气(courage)。勇敢的面对需求和技术上的变化
AHP*~Lu9DK0
^&L@$Q _0XP特别适用于需求经常改变的领域,客户可能并系统的功能并没有清晰的认识,可能系统的需求经常需要变动。ITPUB个人空间kv)OYC-L
XP也适用于风险比较高的项目,当开发人员面对一个新的领域或技术时,XP可以帮助减低风险ITPUB个人空间X;ic5PI
XP适用于小的项目(人员上),人员在2-12人之间,XP不适用于人员太多的项目,事实上,在需求经常变化或风险比较高的项目中,少量而有效的XP开发人员效率要远远高于大量的开发人员。
G(s8]4b }&Gb/p0
4l U;Z6?)Y^h0下面是XP的开发流程
![,f Jg!c/w O0ITPUB个人空间%u2si8V;w'kA"x/TU
ITPUB个人空间S8oumDT
XP的原则和实践:ITPUB个人空间0dd$dxN d/T2|
ITPUB个人空间8{$}1F!@o[ K
1 Planning:
p-}*X0UNCn1x0
'Ss$u3c3a(`(C$kg01)user stories。
a&Y:ymewA7]S0User stories类似use case,描述用户所见的系统功能,但避免使用大量的文档,user stories由用户编写(不仅限于描述用户界面)。User stories使用用户的语言编写,不使用技术性的语言,每个user stories限于几句话。User stories用于在release plan会议上对开发时间进行评估,也用于产生验收测试(acceptance test),必须使用可以自动进行的验收测试保证软件的正确性。User stories与传统的用户需求的区别在于详细的程度,user stories并不会确定需求的每个细节,它只是用来简单的描述系统功能,供开发人员进行估计开发进度,ITPUB个人空间.d5t]Z Q'e
2Z&LE4K7RtDH{0在开发过程中开发人员和用户会不断的交流以讨论细节问题。User story应该专注于功能,不应该过分注重用户界面等细节。一般一个user storiy在1-3周的时间完成,如果估计超过3周,说明user story太大了,需要细分。ITPUB个人空间/Tp%yr t#Cr
!f]A+}(X02)release plan.
I[fZd;KR0Y0召开一个release plan会议,产生release plan。Release plan将用于指定每个iteration的计划。开发人员对每个user story估计开发时间(在不被打断,无其他工作情况下的开发时间,包括测试),用户对user stories给出优先级,release plan会议并不制订每个iteration的计划。Release plan要用户,开发人员和管理者都同意,在完成功能范围(scope),使用资源(resource),时间(time)和质量(quality)上达成一致(一般质量是不能改变的)ITPUB个人空间h6o;R2?;])D
t1[ M3Nf?;{6?d03) small releaseITPUB个人空间 sB ^)HDQ_y/v
often and small release是XP的一个原则,每个release完成一些用户有意义的功能集合,尽快的提交给用户以获得反馈,及时调整,提交的越晚,调整越困难。
^D/D U{04)project velocity
+h;K0dX%_avc0团队在开发过程中要收集数据,以便于对自己的开发速度进行评估,用于以后的releazse planITPUB个人空间*q e!v^OD-R"@
!Ti7d S8kwDqS05)iterationITPUB个人空间bAu{Gi
每个small release的周期称为iteration,每个iteration约为1-3周,在一个项目中保持每个iteration的时间相等,不要超前制定计划,每个iteration的计划在iteration的开始时制定。这样能够更灵活的应付变化。不要急于完成本次iteration没有包括的功能。要注重每个iteration的时间限制,当团队觉得不能按时完成iteration时,召开一次iteration plan会议,重新评估,减少一些user stories。ITPUB个人空间3T5p'A,H%P \N
ITPUB个人空间*n%z3K#oYE3M*{
下面是iteration的图示:
YO_,x\0ITPUB个人空间K)Gox}Bw;_~
ITPUB个人空间I'{h b"| @
ITPUB个人空间^0L9M3H'i| ~ QZ
6)iteration plan
&P5?F } M!A3s$cD({-c0在每个iteration开始的时候召开会议,从release plan中选择还没有实现的用户最迫切需要的user stories。上一个iteration中没有通过验收测试的功能也要在这个iteration中实现。可以根据上一个iteration的实践调整团队速度。User stories和失败的测试被分解成programming task,task使用技术语言编写,作为iteration plan的详细描述。程序员主动领取task并估计完成时间,每个task应该在1-3天内完成,超过3天的task应该被细分。如果整个团队需要的时间多于或少于规定的iteration时间,调整user stories。ITPUB个人空间.F C4W\6w;W|
W^1f#Up#r4j07)move people around
:a!TP4SS!X0不要使每个开发人员局限于一项工作,不要使某项工作依赖于一个开发人员,增加知识共享,减少信息孤岛,多进行交流和培训。当项目中的所有人对所有模块都了解并可以进行开发时是效率最高的,鼓励开发人员在不同iteration中开发不同的模块。ITPUB个人空间}P R|hJF
s"f fE$R5?l(~)b&_08) stand-up meetingITPUB个人空间%m"\ S/Ur x7N]9Voq
每天工作开始之前,开5-10分钟的stand-up会议(站立会议),站立的目的是为了强迫节省时间,会议的目的是交流,提出存在的问题,但不要在会议上解决问题。开一个所有人员参加的短会比多个个别人员参加的会议要高效。在会议上提出的问题可以由少数人讨论解决,这个少数人参加的会议如果涉及到代码,可以在计算机前讨论。
UOM$|Mj L0ITPUB个人空间_*Ob']|P)I(n
9) fix XP when it breaksITPUB个人空间 O&OjE6c\`n%^f q+e
XP并不是一成不变的,当团队觉得需要修改的时候,可以根据自己的情况进行修改,任何修改都要经过整个团队的讨论和达成一致
*N!n2_2|F} y0ITPUB个人空间 uV:m/n;HQl
2 DesigningITPUB个人空间9I$U'L;`!YD+LW
Zj5X y qc(?01) SimplicityITPUB个人空间,Z6~ O|$P!^
保持简单的设计,在完成同样的功能的情况下,选择简单的设计,不要急于设计没有计划的功能,应该认识到:keeping a design simple is hard workITPUB个人空间;V0E!MY9Zt
ITPUB个人空间` fq5t7A{0S
2)system metaphor
f,yS!nZq;~ w'[U0使用统一的术语描述系统,在用户,管理者和开发人员之间使用统一的术语。这将使交流清晰。
:}-H#p ef)xM6Y4`x0
o%}!~qkh,c$PaR03)CRC cardITPUB个人空间5gfHB}es0IR
使用CRC(Class, Responsibilities, and Collaboration) card进行系统设计,鼓励更多的人参加设计。每个CRC卡片表示系统中一个对象,写上对象的名字,责任和每个责任需要交互的其他对象。可以模拟对象之间的交互。CRC卡片是易于理解的,但是是非正式的,如果需要正式的文档,要将卡片转换为相应的文档。
{E5L,}o c0ITPUB个人空间 l1?$PjI[5c9e
4) spike solution
W)P$h0HI1?X2V0使用spike solution减低风险,当遇到技术难题或设计问题时,使用简单的程序进行测试,找出问题,在不同的解决方法之间进行评估。在早期进行实验可以有效的降低风险。
3C-Ge'X/L_0
'Wf0al1y4y05)never add function early
R@:Mv*s0不要过早的设计没有计划的功能,在一个需求经常变化的环境中,过早的设计经常是没有用的。ITPUB个人空间5r2l`M_(bcs O;`\
ITPUB个人空间Oi$[wq$nr"^
6)refactoringwhenever and whereverITPUB个人空间[(i&N4|M2O
XP鼓励对设计和代码经常进行重构(Refactoring),目的是去除冗余,提高质量,保持设计简单。重构必须以完全测试为检验条件
!FK/nEGX3l0
(exq-ox$G(T^o0ITPUB个人空间(d`qhf+QXo%Kn
3 Coding
3wovp4_"M'Z#@0ITPUB个人空间 @%T&n
@cd|#Ao3Y0
Q6|&p)\7Ykl m PU&F0Extreme Programming(XP,极限编程) 是一种轻量级的软件开发方法,它使用快速的反馈,大量而迅速的交流,经过保证的测试来最大限度的满足用户的需求。XP强调用户满意,开发人员可以对需求的变化作出快速的反应。XP强调team work。项目管理者,用户,开发人员都处于同一个项目中,他们之间的关系不是对立的,而是互相协作的,具有共同的目标:提交正确的软件。XP强调4个因素:
`y"TY%Y W {R0交流(communication),XP要求程序员之间以及和用户之间有大量而迅速的交流ITPUB个人空间o(\0y7|$`C
简单(simplicity),XP要求设计和实现简单和干净
&Z O y| PYc,c0反馈(feedback)通过测试得到反馈,尽快提交软件并根据反馈修改
8G6kh+Wy!l0D0勇气(courage)。勇敢的面对需求和技术上的变化
AHP*~Lu9DK0
^&L@$Q _0XP特别适用于需求经常改变的领域,客户可能并系统的功能并没有清晰的认识,可能系统的需求经常需要变动。ITPUB个人空间kv)OYC-L
XP也适用于风险比较高的项目,当开发人员面对一个新的领域或技术时,XP可以帮助减低风险ITPUB个人空间X;ic5PI
XP适用于小的项目(人员上),人员在2-12人之间,XP不适用于人员太多的项目,事实上,在需求经常变化或风险比较高的项目中,少量而有效的XP开发人员效率要远远高于大量的开发人员。
G(s8]4b }&Gb/p0
4l U;Z6?)Y^h0下面是XP的开发流程
![,f Jg!c/w O0ITPUB个人空间%u2si8V;w'kA"x/TU
ITPUB个人空间S8oumDT
XP的原则和实践:ITPUB个人空间0dd$dxN d/T2|
ITPUB个人空间8{$}1F!@o[ K
1 Planning:
p-}*X0UNCn1x0
'Ss$u3c3a(`(C$kg01)user stories。
a&Y:ymewA7]S0User stories类似use case,描述用户所见的系统功能,但避免使用大量的文档,user stories由用户编写(不仅限于描述用户界面)。User stories使用用户的语言编写,不使用技术性的语言,每个user stories限于几句话。User stories用于在release plan会议上对开发时间进行评估,也用于产生验收测试(acceptance test),必须使用可以自动进行的验收测试保证软件的正确性。User stories与传统的用户需求的区别在于详细的程度,user stories并不会确定需求的每个细节,它只是用来简单的描述系统功能,供开发人员进行估计开发进度,ITPUB个人空间.d5t]Z Q'e
2Z&LE4K7RtDH{0在开发过程中开发人员和用户会不断的交流以讨论细节问题。User story应该专注于功能,不应该过分注重用户界面等细节。一般一个user storiy在1-3周的时间完成,如果估计超过3周,说明user story太大了,需要细分。ITPUB个人空间/Tp%yr t#Cr
!f]A+}(X02)release plan.
I[fZd;KR0Y0召开一个release plan会议,产生release plan。Release plan将用于指定每个iteration的计划。开发人员对每个user story估计开发时间(在不被打断,无其他工作情况下的开发时间,包括测试),用户对user stories给出优先级,release plan会议并不制订每个iteration的计划。Release plan要用户,开发人员和管理者都同意,在完成功能范围(scope),使用资源(resource),时间(time)和质量(quality)上达成一致(一般质量是不能改变的)ITPUB个人空间h6o;R2?;])D
t1[ M3Nf?;{6?d03) small releaseITPUB个人空间 sB ^)HDQ_y/v
often and small release是XP的一个原则,每个release完成一些用户有意义的功能集合,尽快的提交给用户以获得反馈,及时调整,提交的越晚,调整越困难。
^D/D U{04)project velocity
+h;K0dX%_avc0团队在开发过程中要收集数据,以便于对自己的开发速度进行评估,用于以后的releazse planITPUB个人空间*q e!v^OD-R"@
!Ti7d S8kwDqS05)iterationITPUB个人空间bAu{Gi
每个small release的周期称为iteration,每个iteration约为1-3周,在一个项目中保持每个iteration的时间相等,不要超前制定计划,每个iteration的计划在iteration的开始时制定。这样能够更灵活的应付变化。不要急于完成本次iteration没有包括的功能。要注重每个iteration的时间限制,当团队觉得不能按时完成iteration时,召开一次iteration plan会议,重新评估,减少一些user stories。ITPUB个人空间3T5p'A,H%P \N
ITPUB个人空间*n%z3K#oYE3M*{
下面是iteration的图示:
YO_,x\0ITPUB个人空间K)Gox}Bw;_~
ITPUB个人空间I'{h b"| @
ITPUB个人空间^0L9M3H'i| ~ QZ
6)iteration plan
&P5?F } M!A3s$cD({-c0在每个iteration开始的时候召开会议,从release plan中选择还没有实现的用户最迫切需要的user stories。上一个iteration中没有通过验收测试的功能也要在这个iteration中实现。可以根据上一个iteration的实践调整团队速度。User stories和失败的测试被分解成programming task,task使用技术语言编写,作为iteration plan的详细描述。程序员主动领取task并估计完成时间,每个task应该在1-3天内完成,超过3天的task应该被细分。如果整个团队需要的时间多于或少于规定的iteration时间,调整user stories。ITPUB个人空间.F C4W\6w;W|
W^1f#Up#r4j07)move people around
:a!TP4SS!X0不要使每个开发人员局限于一项工作,不要使某项工作依赖于一个开发人员,增加知识共享,减少信息孤岛,多进行交流和培训。当项目中的所有人对所有模块都了解并可以进行开发时是效率最高的,鼓励开发人员在不同iteration中开发不同的模块。ITPUB个人空间}P R|hJF
s"f fE$R5?l(~)b&_08) stand-up meetingITPUB个人空间%m"\ S/Ur x7N]9Voq
每天工作开始之前,开5-10分钟的stand-up会议(站立会议),站立的目的是为了强迫节省时间,会议的目的是交流,提出存在的问题,但不要在会议上解决问题。开一个所有人员参加的短会比多个个别人员参加的会议要高效。在会议上提出的问题可以由少数人讨论解决,这个少数人参加的会议如果涉及到代码,可以在计算机前讨论。
UOM$|Mj L0ITPUB个人空间_*Ob']|P)I(n
9) fix XP when it breaksITPUB个人空间 O&OjE6c\`n%^f q+e
XP并不是一成不变的,当团队觉得需要修改的时候,可以根据自己的情况进行修改,任何修改都要经过整个团队的讨论和达成一致
*N!n2_2|F} y0ITPUB个人空间 uV:m/n;HQl
2 DesigningITPUB个人空间9I$U'L;`!YD+LW
Zj5X y qc(?01) SimplicityITPUB个人空间,Z6~ O|$P!^
保持简单的设计,在完成同样的功能的情况下,选择简单的设计,不要急于设计没有计划的功能,应该认识到:keeping a design simple is hard workITPUB个人空间;V0E!MY9Zt
ITPUB个人空间` fq5t7A{0S
2)system metaphor
f,yS!nZq;~ w'[U0使用统一的术语描述系统,在用户,管理者和开发人员之间使用统一的术语。这将使交流清晰。
:}-H#p ef)xM6Y4`x0
o%}!~qkh,c$PaR03)CRC cardITPUB个人空间5gfHB}es0IR
使用CRC(Class, Responsibilities, and Collaboration) card进行系统设计,鼓励更多的人参加设计。每个CRC卡片表示系统中一个对象,写上对象的名字,责任和每个责任需要交互的其他对象。可以模拟对象之间的交互。CRC卡片是易于理解的,但是是非正式的,如果需要正式的文档,要将卡片转换为相应的文档。
{E5L,}o c0ITPUB个人空间 l1?$PjI[5c9e
4) spike solution
W)P$h0HI1?X2V0使用spike solution减低风险,当遇到技术难题或设计问题时,使用简单的程序进行测试,找出问题,在不同的解决方法之间进行评估。在早期进行实验可以有效的降低风险。
3C-Ge'X/L_0
'Wf0al1y4y05)never add function early
R@:Mv*s0不要过早的设计没有计划的功能,在一个需求经常变化的环境中,过早的设计经常是没有用的。ITPUB个人空间5r2l`M_(bcs O;`\
ITPUB个人空间Oi$[wq$nr"^
6)refactoringwhenever and whereverITPUB个人空间[(i&N4|M2O
XP鼓励对设计和代码经常进行重构(Refactoring),目的是去除冗余,提高质量,保持设计简单。重构必须以完全测试为检验条件
!FK/nEGX3l0
(exq-ox$G(T^o0ITPUB个人空间(d`qhf+QXo%Kn
3 Coding
3wovp4_"M'Z#@0ITPUB个人空间 @%T&n