没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
新方法学
Martin Fowler
过去几年中兴起的敏捷型(agile)软件开发方法,以矫正官僚繁琐过程,或者许可
对过程进行自主调整为特征,在软件业引起了极大的兴趣。在这篇文章里,我将探索敏
捷型方法的合理性,着重点并不是放在其“轻重”上,而是于它们的适配性(adaptive)
性质和以人优先的理念。我在本文也简要介绍了一些敏捷型方法并给出了进一步的参考
材料。另外,我还给出了一些你在决定是否要走这条刚踏出来的敏捷之路时需考虑的因
素。
1. 从无,到繁重,再到敏捷
多数软件开发仍然是一个显得混乱的活动,即典型的“边写边改” ( code and
x)。设计过程充斥着短期的,即时的决定,而无完整的规划。这种模式对小系统开发
其实很管用,但是当系统变得越大越复杂时,要想加入新的功能就越来越困难。同时错
误故障越来越多,越来越难于排除。一个典型的标志就是当系统功能完成后有一个很长
的测试阶段,有时甚至有遥遥无期之感,从而对项目的完成产生严重的影响。
我们使用这种开发模式已有很长时间了,不过我们实际上也有另外一种选择,那就
是“正规方法”(methodology)。这些方法对开发过程有着严格而详尽的规定,以期使
软件开发更有可预设性并提高效率,这种思路是借鉴了其他工程领域的实践。
这些正规方法已存在了很长时间了,但是并没有取得令人瞩目的成功,甚至就没怎
么引起人们的注意。对这些方法最常听见的批评就是它们的官僚繁琐,要是按照它的要
求来,那有做太多的事情需要做,而延缓整个开发进程。所以它们通常被认为是“繁琐滞
重型”方法,或 Jim Highsmith 所称的“巨型”(monumental)方法。
作为对这些方法的反叛,在过去几年中出现了一类新方法。尽管它们还没有正式的
名称,但是一般被称为“敏捷型”方法。对许多人来说,这类方法的吸引之处在于对繁文
缛节的官僚过程的反叛。它们在无过程和过于繁琐的过程中达到了一种平衡,使得能以
不多的步骤过程获取较满意的结果。
敏捷型与滞重型方法有一些显著的区别。其中一个显而易见的不同反映在文档上。
敏捷型不是很面向文档,对于一项任务,它们通常只要求尽可能少的文档。从许多方面
来看,它们更象是“面向源码”(code-oriented)。事实上,它们认为最根本的文档应
该是源码。
但是,我并不以为文档方面的特点是敏捷型方法的根本之点。文档减少仅仅是个表
象,它其实反映的是更深层的特点:
敏捷型方法是“适配性”而非“预设性”。 重型方法试图对一个软件开发项目
在很长的时间跨度内作出详细的计划,然后依计划进行开发。这类方法在计划制定
完成后拒绝变化。而敏捷型方法则欢迎变化。其实,它们的目的就是成为适应变化
的过程,甚至能允许改变自身来适应变化。
敏 捷 型 方 法 是 “ 面 向 人 ” 的 (people-oriented) 而 非 “ 面 向 过 程 ” 的
(process-oriented)。 它们试图使软件开发工作顺应人的天性而非逆之。它们强调
软件开发应当是一项愉快的活动。
在以下各节中,我将详细地探讨这些差别,这样你可以了解适配性和以人为中心的
过程是什么,它们的好处与不足,以及你作为软件开发人员或用户时是否应该使用它们。
2. 预设性与适配性
2.1 将设计与建造分离开来
传统的软件开发正规方法的基本思路一般是从其他工程领域借鉴而来如土木工程模
式对软件工程的影响较大。这类工程实践中,在实际建造之前,通常非常强调设计规划。
工程师首先给出一系列的图纸,这些图纸准确地说明了要建造什么以及如何建造(包括
部分和整体)。许多工程问题,如怎样处理一座桥梁的负荷,图纸上都有说明。然后,
这些图纸分发给另外一组人员,通常是另外一个公司,去建造。这种方式其实已假定了
建造过程将按图纸而来。当然,施工中也会碰到一些问题,但这些都是次要的。
图纸其实就是一个详细的建造计划,它说明了一个项目中必须完成的各项任务,以
及这些任务之间的依赖关系。这样,管理层能较为合理地制订出生产进度表和项目预算。
这种模式实际上也规定了建造者如何做(施工),这也隐含着建造者不须是高智能型的,
尽管他们可能都有非常高超的手上功夫。
在此,我们看到的是两类非常不同的活动。设计是难于预设的,并且需要昂贵的有
创造你的人员,建造则要易于预设。我们有了设计之后,便可对建造进行计划了。而有
了建造计划后,我们进行建造则可以是非常可预设性的了。在土木工程中,建造不论在
经费上还是在时间上的花销都要比设计和计划大得多。
所以,多数正规方法的途径是象这样的:我们想要可预定的生产进度计划,以便能
使用技能较低的人员。要达到这一点,我们必须得把设计与建造分离开来。因此,在软
件开发中,我们得想法作出这样的设计,使得计划一经完成,建造将会是直接而明确的。
那 么 , 计 划 应 该 采 用 什 么 形 式 呢 ? 对 许 多 人 来 说 , 这 是 设 计 “ 标 识 符 号 ”
(notation),如象 UML,需承担的角色了。如果我们能用 UML 作出所有主要的技术
决定,那么就可以用 UML 来做建造计划,然后把计划交给程序员去编码,即是建造活动。
但这里存在几个问题。你是否能作出这样的设计使得它能够让编码成为一项建造活
动?如果能,那么建造是否能在资金和时间上的花销都充分地大于设计而使得这种途径
值得一用?
第一个问题是到底有多困难能使一个用类似 UML 作出的设计达到交给程序员就能直
接编码的状态。用象 UML 那样的语言作出的设计在纸上看起来非常漂亮,而实际编程时
可能会发现严重的缺陷。土木工程师使用的模型是基于多年的工程实践,并结晶在工程
典章中。更进一步来说,一些设计上的关键部分,如应力作用,都是建立于坚实的数学
分析之上。而在软件设计中,我们对 UML 图纸所能做的只是请专家审阅。这当然是很有
帮助的,但是往往一些设计错误只能在编码和测试时才能发现。甚至于熟练的设计者,
我自认为我属此列,就常常对在把设计变成软件的过程中出现的错误感到意外。
另一个问题是费用比较。建一座桥梁时,设计费用一般占整个工程的 10%,左右,
余下的 90%左右为施工建造费用。而在软件开发中,编码所占的时间一般要少得多
(McConnell 指出在大型项目中,编码和单元测试只占 15%,这几乎和桥梁工程中的
比例倒过来了。即使把所有测试工作都算作是建造的一部分,设计仍要占到 50%)。这
就提出了一个重要问题,那就是和其他过程领域的设计相比,软件设计到底是什么性质。
更有甚者,Jack Reeves 认为源码也应是设计文档,而建造应该是编译和链接,因
为任何属于建造的工作都应当是自动化的。
这些讨论导致了下面一些结论:
在软件开发中,具体建造费用非常低,几可忽略不计。
软件开发的绝大部分工作是设计,因此需要富有创造性的才智之士。
创造性的过程是不太容易计划的,因此,可预设性不可能成为一个要达
到的目标。
我们应该对用传统工程模式来进行软件开发的做法保持足够的警觉,因
为它们是不同类型的活动,因此需要不同的过程。
2.2 需求的不可预设性
在每个我参加的项目都有这样一种情况,开发人员跑来抱怨说,“这个项目的问题是
需求老是在变”。而让我意外的是每个人都对此感到意外。其实在建造商用软件系统中,
需求变更是常态,问题是我们如何来处理它。
一种方法是把需求变更看成是因需求工程(requirements engineering)没作好
而导致的结果。一般来说,需求工程(或曰进行需求分析)是要在着手建造软件之前,
获取一幅已完全理解了的待建系统的画面,然后取得客户认可签发,并且还要建立一套
规章来限制需求变更。
该方法的一个问题是要准确获取所有需求是困难的,特别是当开发商不能提供某些
需求的费用信息时。例如,你买车时想在你的车上装一个天窗,而推销员却不能告诉你
要在车价上只再加 10 元钱呢,还是 10000 元。如果不知道这点,你如何能决定你是否
愿意在车上加个天窗呢。
作软件开发的费用估算是不容易的,这有多种原因。部分原因是因为软件开发是一
种设计活动,因此难于精确计划。部分原因是系统的“基本材料”变化非常之快。部分原
因是开发活动极大地依赖于项目参与人员,而个体是难于预测和量化的。
软件的“不可触摸”性也是一个原因。在系统建成之前,有时很难判断一项功能的具
体价值。也就是说,只有当你在实实在在地使用系统时,你才能知道哪些功能是有用的,
哪些没什么用。
这样的结果颇具讽刺意味,即人们期待需求应该是可变的。毕竟,软件应该是 “软”
的。所以,需求不仅是可变的,简直就是应该变的。要让客户把需求固定下来要花很大
的力气,特别是当他们“参与”了软件开发并且“知道”软件是多么易于修改。
但是,即使你能把所有的需求都固定下来,并不意味着你的开发就是阳光灿烂了,
你可能仍然会在昏暗之中。在当今的经济形势下,决定并推动软件系统功能特性的商业
因素飞快地变化着。现在一组很好的功能六个月以后可能就不那么好了。
商业世界并不会因你的系统的需求固定下来了而停止不动,商业世界的许多变化是
完全不可预测的。如果有人不承认这一点,要么他在撒谎,要么他已炒股成了百万富翁
了。
软件开发的一切都取决于系统需求,如果需求不固定,你就不能制订出一个可预设
性的计划。
2.3 预设性是不可能的吗?
一般来说,不可能。当然,有一些软件开发项目中,预设性是可能的。象 NASA 的
航天飞机的软件开发项目,应是这样一个例子。它需要大量的会议,充足的时间,庞大
剩余14页未读,继续阅读
资源评论
- 松鼠杨2016-01-05文档内容很好,但很遗憾对我没有帮助。
- chenlix2019-11-14下载了还没看
光脚的石头
- 粉丝: 1
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功