他山之石可以攻玉!
//注:本BLOG中标注“原创”的文章为本人版权所有,未经许可不得擅自使用,如有引用请注明作者“谷雨霖”。msn: cabinhome@sohu.com
敏捷开发大家谈(二)
上一篇 / 下一篇 2008-05-15 12:47:02 / 个人分类:项目管理
一、敏捷开发方法
fF_+VWf7xJ P(`Ls0ITPUB个人空间;s7Bu2_(u6W.P
(一) 说明ITPUB个人空间Q9]*{i7q3|8R4w
本文是阅读Alistair Cockburn的Agile Software Development和William C. Wake的XP Explored的一些笔记和想法,Agile Software Development是一组软件开发方法的总称,包括(Crystal , Extreme Programming , Adaptive software development等等)。敏捷开发方法又称为“轻量级”开发方法。
mr/b,P:c _;mQ0ITPUB个人空间`;c@N,P(W
下面这段话摘自Martin Fowler的一篇文章:
0_4U.SJR%d0
(~%CFeib[0从无到繁重再到敏捷
;^2l$j tY;~n"AW0多数软件开发仍然是一个显得混乱的活动,即典型的“边写边改” (code and fix)。设计过程充斥着短期的,即时的决定,而无完整的规划。这种模式对小系统开发其实很管用,但是当系统变得越大越复杂时,要想加入新的功能就越来越困难。同时错误故障越来越多,越来越难于排除。一个典型的标志就是当系统功能完成后有一个很长的测试阶段,有时甚至有遥遥无期之感,从而对项目的完成产生严重的影响。
q#n a4N6LY.U6[ th"h0我们使用这种开发模式已有很长时间了,不过我们实际上也有另外一种选择,那就是“正规方法”(methodology)。这些方法对开发过程有着严格而详尽的规定,以期使软件开发更有可预设性并提高效率,这种思路是借鉴了其他工程领域的实践。
V)};q)P0xE2`^0这些正规方法已存在了很长时间了,但是并没有取得令人瞩目的成功,甚至就没怎么引起人们的注意。对这些方法最常听见的批评就是它们的官僚繁琐,要是按照它的要求来,那有做太多的事情需要做,而延缓整个开发进程。所以它们通常被认为是“繁琐滞重型”方法,或Jim HighSmith 所称的“巨型”(monumental)方法。ITPUB个人空间3bl1ZkK0j
作为对这些方法的反叛,在过去几年中出现了一类新方法。尽管它们还没有正式的名称,但是一般被称为“敏捷型”方法。对许多人来说,这类方法的吸引之处在于对繁文缛节的官僚过程的反叛。它们在无过程和过于繁琐的过程中达到了一种平衡,使得能以不多的步骤过程获取较满意的结果。
py3f_y1C)S3^0敏捷型与滞重型方法有一些显著的区别。其中一个显而易见的不同反映在文档上。敏捷型不是很面向文档,对于一项任务,它们通常只要求尽可能少的文档。从许多方面来看,它们更象是“面向源码”(code-oriented)。事实上,它们认为最根本的文档应该是源码。
7X[&e:]1]%\b.Ng0但是,我并不以为文档方面的特点是敏捷型方法的根本之点。文档减少仅仅是个表象,它其实反映的是更深层的特点:ITPUB个人空间 ]{ MMr
? 敏捷型方法是“适配性”而非“预设性”。 重型方法试图对一个软件开发项目在很长的时间跨度内作出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它们的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。
ns:k A'g1y.s8X0? 敏捷型方法是“面向人”的(people-oriented) 而非“面向过程”的 (process-oriented)。 它们试图使软件开发工作顺应人的天性而非逆之。它们强调软件开发应当是一项愉快的活动。ITPUB个人空间~y6t:z2}C
我认为以上两个特点很好的概括了敏捷开发方法的核心思想:适应变化和以人为中心
UIz#\?-K"f#|0ITPUB个人空间4e_RR+O_e]y
(二) 方法背后的思想ITPUB个人空间6S6s-t"Cf7p%P%Gz
ITPUB个人空间#c,_9u6C II,~
Alistair Cockburn在Agile Software Development中讲述了敏捷开发方法背后的思想ITPUB个人空间pc#z/`*rU
ITPUB个人空间r!dhqc |^+|n8tg?
人们掌握过程(process)可以分为3个阶段:ITPUB个人空间2D4BXd6}6Y J!\;o
1 following 遵循一个定义好的processITPUB个人空间s`7Ip ] s-b{u
2 detaching 知道不同process的适用范围,在不同的场合使用不同的process
;kGn/[*m03 fluent 不关心是否遵循特定的process,知道在什么情况下采用什么动作
U?)P4S!P F!g9u\0
h)bgg\0软件开发是一个充满发明和交流的协作性游戏(cooperative game of invertion and communication)。软件开发的首要目标是生产出软件,遵循特定的过程和模型只是手段,只要传递了足够的信息,手段是次要的。交流的效果要远远重于交流的形式(Effect of communication is more important than the form. of communication)。ITPUB个人空间yV$UG s5r?
一般软件开发有两个目标:1 尽快的生产出软件2 为下一个team或项目做准备,有时这两个目标是矛盾的,我们要在这两个目标之间寻求平衡ITPUB个人空间5wlG4l)b
E5H!M\q i;w-t0在软件开发中,人的因素要远远大于过程和技术。人是有缺陷的:
)_.f&km M;O S\"Z01 容易犯错误,因此必须在错误扩散之前找到并改正错误
fF_+VWf7xJ P(`Ls0ITPUB个人空间;s7Bu2_(u6W.P
(一) 说明ITPUB个人空间Q9]*{i7q3|8R4w
本文是阅读Alistair Cockburn的Agile Software Development和William C. Wake的XP Explored的一些笔记和想法,Agile Software Development是一组软件开发方法的总称,包括(Crystal , Extreme Programming , Adaptive software development等等)。敏捷开发方法又称为“轻量级”开发方法。
mr/b,P:c _;mQ0ITPUB个人空间`;c@N,P(W
下面这段话摘自Martin Fowler的一篇文章:
0_4U.SJR%d0
(~%CFeib[0从无到繁重再到敏捷
;^2l$j tY;~n"AW0多数软件开发仍然是一个显得混乱的活动,即典型的“边写边改” (code and fix)。设计过程充斥着短期的,即时的决定,而无完整的规划。这种模式对小系统开发其实很管用,但是当系统变得越大越复杂时,要想加入新的功能就越来越困难。同时错误故障越来越多,越来越难于排除。一个典型的标志就是当系统功能完成后有一个很长的测试阶段,有时甚至有遥遥无期之感,从而对项目的完成产生严重的影响。
q#n a4N6LY.U6[ th"h0我们使用这种开发模式已有很长时间了,不过我们实际上也有另外一种选择,那就是“正规方法”(methodology)。这些方法对开发过程有着严格而详尽的规定,以期使软件开发更有可预设性并提高效率,这种思路是借鉴了其他工程领域的实践。
V)};q)P0xE2`^0这些正规方法已存在了很长时间了,但是并没有取得令人瞩目的成功,甚至就没怎么引起人们的注意。对这些方法最常听见的批评就是它们的官僚繁琐,要是按照它的要求来,那有做太多的事情需要做,而延缓整个开发进程。所以它们通常被认为是“繁琐滞重型”方法,或Jim HighSmith 所称的“巨型”(monumental)方法。ITPUB个人空间3bl1ZkK0j
作为对这些方法的反叛,在过去几年中出现了一类新方法。尽管它们还没有正式的名称,但是一般被称为“敏捷型”方法。对许多人来说,这类方法的吸引之处在于对繁文缛节的官僚过程的反叛。它们在无过程和过于繁琐的过程中达到了一种平衡,使得能以不多的步骤过程获取较满意的结果。
py3f_y1C)S3^0敏捷型与滞重型方法有一些显著的区别。其中一个显而易见的不同反映在文档上。敏捷型不是很面向文档,对于一项任务,它们通常只要求尽可能少的文档。从许多方面来看,它们更象是“面向源码”(code-oriented)。事实上,它们认为最根本的文档应该是源码。
7X[&e:]1]%\b.Ng0但是,我并不以为文档方面的特点是敏捷型方法的根本之点。文档减少仅仅是个表象,它其实反映的是更深层的特点:ITPUB个人空间 ]{ MMr
? 敏捷型方法是“适配性”而非“预设性”。 重型方法试图对一个软件开发项目在很长的时间跨度内作出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它们的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。
ns:k A'g1y.s8X0? 敏捷型方法是“面向人”的(people-oriented) 而非“面向过程”的 (process-oriented)。 它们试图使软件开发工作顺应人的天性而非逆之。它们强调软件开发应当是一项愉快的活动。ITPUB个人空间~y6t:z2}C
我认为以上两个特点很好的概括了敏捷开发方法的核心思想:适应变化和以人为中心
UIz#\?-K"f#|0ITPUB个人空间4e_RR+O_e]y
(二) 方法背后的思想ITPUB个人空间6S6s-t"Cf7p%P%Gz
ITPUB个人空间#c,_9u6C II,~
Alistair Cockburn在Agile Software Development中讲述了敏捷开发方法背后的思想ITPUB个人空间pc#z/`*rU
ITPUB个人空间r!dhqc |^+|n8tg?
人们掌握过程(process)可以分为3个阶段:ITPUB个人空间2D4BXd6}6Y J!\;o
1 following 遵循一个定义好的processITPUB个人空间s`7Ip ] s-b{u
2 detaching 知道不同process的适用范围,在不同的场合使用不同的process
;kGn/[*m03 fluent 不关心是否遵循特定的process,知道在什么情况下采用什么动作
U?)P4S!P F!g9u\0
h)bgg\0软件开发是一个充满发明和交流的协作性游戏(cooperative game of invertion and communication)。软件开发的首要目标是生产出软件,遵循特定的过程和模型只是手段,只要传递了足够的信息,手段是次要的。交流的效果要远远重于交流的形式(Effect of communication is more important than the form. of communication)。ITPUB个人空间yV$UG s5r?
一般软件开发有两个目标:1 尽快的生产出软件2 为下一个team或项目做准备,有时这两个目标是矛盾的,我们要在这两个目标之间寻求平衡ITPUB个人空间5wlG4l)b
E5H!M\q i;w-t0在软件开发中,人的因素要远远大于过程和技术。人是有缺陷的:
)_.f&km M;O S\"Z01 容易犯错误,因此必须在错误扩散之前找到并改正错误