?!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
对于正在L软g开发方法的人来_问题不在于是否能扑ֈ{案Q而是定{案是否满要求。下面来一下Y件开发方法学必须l历深刻的变革。应该放弃当前依赖于新词和政d宣传的状况,转向Z理论和实验验证的严肃的科学工作?/span>
软gҎ学是一个特D的领域。按原理它应该是ZU学的工E学U,但目前的实践中它却时而像时装业,时而又像搞政治?/span>
时装业每q都要有一U新潮流Q在匆忙跟风中,Z好的和坏的一h弃。h们不是从自己的经验中学习Q而是跟着自认为更好的赎ͼ因ؓ其他人都说这h好。创新者们常常抱怨,大公司拥抱变化非常缓慢,但事实上q如此Q许多大公司非常渴望试C物。真正的问题在于Q他们也会更快地攑ּQ还没等认真用v来呢Q在q程和工具上的不菲投入就打水漂了?/span>
在政MQ重点不是放在难题的切实解决Q而是口号、宣传和煽情。理念不是通过对利弊仔l的讨论来提出,而是像品牌那栯行营销Q借助一些大师的一些金口玉a来传播。每一U方法都试图忽略自己的同c,如果不得不承认它们的存在Q通常也会恶意贬低Q这弄得一Uh员无所适从?/span>
最l,很少有新思想能运用在大规模的目里,因此对大pȝ开发中的质量、生产力和上市时间等{都没有产生什么媄响。过d十年中Y件开发方法中出现的所有新概念里,只有数大的创新——结构化~程、对象技术、设计模式和UML{对行业产生了真正的影响?/span>
q些都是不成熟的表现。我们的学科该长大了?/span>
席卷业界的最C波浪潮是“敏捷”。敏h法的做Z许多贡献Qƈ使我们再ơ注意到人在软g工程中的中心C。一些敏Ll验很可能仍然会在未来的Ҏ中l存在。与此同Ӟ敏捷领域也ؓ上面谈到的现象提供了zM子。作Z个重视h甚于q程和工Lq动Q敏捷却提出了许多被宣传为“新的”过E和工具Q而且没有说清楚其中哪些是真正新的Q哪些只是已有概늚重述。很多一Uh员很自然地就被弄晕了。先不说q些“新”概늚价值如何,对它们的推广方式颇为引人注目:先是个方法精心编写了一份基性文献的—个宣言Q更多的是第一人称复数的情感诉求,而缺事实依据。这U风格对于吸引眼球可能有效,但随着概念日益成熟Q还是应该采用更传统阐释形式?/span>
在工E和U学中,一U新技术的提出者与MZ样都急于推广自己的发明,但是也会很小心地定应用q项新技术在什么地方存在不x者未l证实。然而,很少有Y件方法学者会提供q样的警CZ息。太多h夸大了自qҎ与前人的差异。每一ơ变革(比如对象技术)中,有多突破其实是已知概念的调_逐渐改进当然没有错,U学和工E中大量q展都是如此实现的。但是,每一ơ改q都包装成革命,没意思了?/span>
我们目前软g开发的ҎQ无论是商业q是公司内部Q新q是旧,需求已知还是不清,实际上都只是来自Ҏ文献中各U元素的l合Q加上一些特定于领域或者业务的扩展。基本的成分是一个个实践?/span>
如果我们这些基本成分从大杂烩中分离出来Q大家就可以建立自己所需的方法。这U方法是以模块的方式设计的,能够在不断ȝl验的基上快速演q,响应我们快速变化的行业的需求?/span>
l济压力是当前的时代特征Q与时装业的跟风和政d传一样都不会完全消失。但是,所有关注Y件工Eh值的Ҏ学者都理应为学U找到存在的理由?/span>
我们所~Z的是作ؓ一门科学和工程学的基础Q理论及光证。我们应该采取以下步骤,Y件方法学转变ZU严谨的工作?/span>
软g开发是一Uh的活动,但它也是pq明定义的步骤l成的,而且我们对这些步骤之间关pdl有了充分认识。至,在有l验的从业h员脑中,对这些概늚定义和理解都是不a自明的。但q还不够Q我们需要坚实的软g开发理论。Ş式化Ҏ为我们提供了q行建模的正工P含有U定构造(contractQ的面向对象语言也可以实现同一目的。如果Y件开发的d和限制没有精的、无歧义的模型,我们无法显著地q行改善。模型应该独立于具体ҎQ只描述问题Q而非解决ҎQ;模型应该不仅包含定义和公理,而且q应该包括描q所有系l和可行Ҏ的定理——这恰恰是Ş式化模型l常~失的部分?/span>
所有方法在被过度宣传的差异之外Q都有许多共同的属性。而以理论作ؓ基础Q我们将描述ZQ何有效的开发高质量软g的方法都应该满的属性。毕竟,它们都是用来开发Y件的Q而且都承认Y件开发中有一些东西L需要。我们L要写代码Q用某种方式q行试QL要考虑需求(无论要不要文档)QL有backlogQ无论显式还是隐式)QL需要计划?/span>
我们需要找到Y件开发本质的不能再简化的内核。例如,通过研究大约50U方法包括XP和ScrumQ我们已l找C一个包含超q?5个元素的内核Q其中的元素是我们总要做的事情或者总要生成的东ѝ?/span>
有了内核之后Q所有方法都可以q行描述和比较。我们可以从所有广泛用和l过验证的方法或者过E中采集隐含的实践,比如架构、组件、P代等{。有些实跉|重叠的,比如用例驱动开发和Ҏ驱动开发。有些是互相补充的,比如用例驱动开发和按约定设计?/span>
内核清除了方法之间表面存在的差异Q比如不同方法中只是U呼不同的相同事物。比如,RUP所说的q代在Scrum中称为sprintQ但是它们基本上说的是一回事。通过q种清理Q可以明昑֜看出不同Ҏ之间真正的差异?/span>
因ؓ内核对于M具体的实践都是中立的Q我们可以简单地分LZ同实践之间的实际区别Q不是表面上的,而是深层ơ的。这减各U方法中包含的“宗教”成分?/span>