他山之石可以攻玉! //注:本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个人空间] { MM r
? 敏捷型方法是“适配性”而非“预设性”。 重型方法试图对一个软件开发项目在很长的时间跨度内作出详细的计划,然后依计划进行开发。这类方法在计划制定完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它们的目的就是成为适应变化的过程,甚至能允许改变自身来适应变化。
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/`*r U
ITPUB个人空间r!dhq c| ^+| n8tg?
人们掌握过程(process)可以分为3个阶段:ITPUB个人空间2D4B Xd6}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 \qi;w-t0在软件开发中,人的因素要远远大于过程和技术。人是有缺陷的:
)_.f&km M;O S\"Z01 容易犯错误,因此必须在错误扩散之前找到并改正错误
jU7z"T;m P7v;C02 当觉得可能失去较多的时候,不愿意冒险ITPUB个人空间&k U P Uq3^
3 重新构造而不愿意重复使用已有的东西ITPUB个人空间rw0W4T%pn+h5i}9I
4 难于坚持一个习惯ITPUB个人空间3Kcr#sU/J6xJ
ITPUB个人空间 X(F^%JZ J xMc5D
针对个人因素的几个建议:
PP1SBU#B1\?w0d01 具体的模型较抽象的模型更容易理解ITPUB个人空间 Zr@j&kc[+Iv;?
2 从一个例子开始是容易的
;}~IVy03 通过观察他人的成果学习
$R\3I't eeZ04 要有足够的不受打扰的时间ITPUB个人空间;R D@:b7crC:x1V
5 分配的工作要与个人意向,能力匹配
y F9Sp2F06 不正确的奖励会有坏作用,从长期看个人兴趣比奖励更重要,培养在工作中的自豪感:ITPUB个人空间t-Zd.@ G9r
1) pride in work参与工作的自豪感,通常参与一个重要的工作会有自豪感
R6_b1a2E6fh02) pride in accomplishment 完成工作的自豪感,长期未完的工作会使士气低落
4Szu-a$](y.f _g03)pride in contribution 为他人贡献的自豪感
y,M"J$oZ;? z#b07 鼓励关心其他人的工作和整体的工作
n a5?A.Ary0ITPUB个人空间'I CvA8L{
在一个团队之间,交流是最重要的,实践证明面对面的实时的交流是最有效的,对交流的延误会损失信息,白板是最好的交流工具,交流工具的先进并不能提高交流效果。文档的作用是记录和备忘,不能通过文档交流。
i$]2s(}m#R0ITPUB个人空间eA*E6z$n C6} j
敏捷开发方法要避免的过程设计的几个常见错误ITPUB个人空间"M5KGS1S Q k
1 对所有的项目使用同一种过程
G)E*AE0F:tF_02 没有弹性ITPUB个人空间1d%lS|3q/T
3 过于沉重
1A!xY9K1l:xO(}Q+G04 增加不必要的“必须完成”(“should do” is really should?)ITPUB个人空间8M VH}-BW'?
5 没有经过实践检验
2zzD7Z/Mx0ITPUB个人空间 oP1j h R/@5_,ikkHhv
敏捷开发方法过程设计的几个原理:
0YXxO'r[f01 交互的面对面的交流是代价最小,最迅速的交换信息的方法
:o#n$`i_W?02 超过实际需要的过程是浪费的ITPUB个人空间|V6n\$Q^.^9eM
3 大的团队需要重量级方法
Ou2M.g6iJ4bO04 处理重大问题的项目需要重量级方法强调
"I7S)f7d+Hm05 增加反馈和交流可以减少中间产品和文档的需求
2D{'w d ZV&@z06 轻量级方法更强调理解(understanding),自律(discipline)和技能(skill),重量级方法更强调文档(documentation),过程(process)和正式(formality)
ks.} h&?/e_f*m0understanding指整个团队关于项目的全部知识,包括讨论的过程,documentation只能记录其中的一部分
(?^H4g1^$u$D,K0discipline是指个人主动的完成工作,process指个人根据指令完成工作
9v `8Avo0p0skill指具有良好技能的人可以省略中间的产品,formality指必须按照规定步骤完成工作
mpU;F&? CN?0ITPUB个人空间 ZF0M,y,H+N`
7 确定开发中间的瓶径,提高它的效率ITPUB个人空间.nS,C erq:Tj
对于瓶径处的工作应该尽量加快,减少重复,(使用更熟练的人,使用更多的人,使用更好的工具,使瓶径处的工作的深入尽量稳定)对于非瓶径处的工作可以多一些重复,在输入还不确定的情况下也可以尽早开始。
8jtr X nC+T+e t~QE0ITPUB个人空间8O#Q rPuGg
这些原理的几个结论:ITPUB个人空间+hQQ$BN!]1A A(B
1 向一个项目增加人员要花费较大代价(constly),因为原有人员和新人员之间的交流要花费大量时间
$n5o4~UC0K/?02 团队的规模经常是跳跃的,例子:需要6个熟练的程序员,但是只有4个,于是增加不熟练的程序员,结果团队的大量时间花费在培训不熟练的程序员上面,最后增加到了20个不熟练的程序员。
o*@N(M$P03 应该侧重于提高团队的技能而不是扩充团队ITPUB个人空间*[(I/h Lg}
4 对不同的项目使用不同的过程
9ex-z(Z.S%zb3r05 在适用的条件下,轻量级的方法优于重量级的方法
@ EJ&SpN#Se(t-[0L06 对不同的项目要裁减过程
)b$B\)oD^0ITPUB个人空间E{r$YUuAD
敏捷开发方法的原则是“刚刚好”(Light and Sufficient)
R1e0U iC-y0
;j%r~N6D wx1Tin^Y0

相关阅读:

TAG: 敏捷开发

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2008-07-25  
  12345
6789101112
13141516171819
20212223242526
2728293031  

数据统计

  • 访问量: 22631
  • 日志数: 702
  • 文件数: 6
  • 书签数: 4
  • 建立时间: 2008-01-14
  • 更新时间: 2008-07-22

RSS订阅

Open Toolbar