由Steve McConnell的书想到的

最近看完了Steve McConnell的《Professional Software Development》,这本书前部分一直在阐述基于事先规划的软件开发方式的重要性,其他大部分内容基本上是在推广他自己参与创建的、由IEEE Computer Society资助的《Software Engineering's Body of Knowledge(SWEBOK)》。

总体来讲,整本书浅显易懂,生动深刻,作者善于采用故事类比的方式来说明一些重要的道理。他的另一本重要著作《Code Complete》也是这种风格。在软件工程评论界颇有名气的Joel Spolsky应该也是Steve的粉丝。

有意思的是,Steve McConnell这本书的前部分内容明显就是针对agile方法而写的,虽然没有明说,但一看便知这本书里把agile方法看做是一种code-and-fix approach。敏捷宣言Agile Manifesto建立于2001年,《Professional Software Development》写于2003年,也就正是敏捷开发方法正处于火热的阶段。在2003年还有一本书很出名,就是Robert C.Martin的《Agile Software Development:Principles,Patterns and Practices》,获得了第13届震憾(Jolt)奖,其中观点明显与《Professional Software Development》中的观点冲突。


从后来的发展情况来看,还是agile方法占了上风。这是由于agile强调了以往常常被业界忽略的一个事实,就是用户需求和商业环境的快速变化,强烈需要一个更加灵活、反应更迅速的软件开发流程,通过这种流程能够快速拿出产品投放到市场以满足商业战略的需要,而agile正是以能够拥抱变化而著称,符合人们的期望。以往那种面面俱到的方法论虽然严谨,但响应变化的速度慢,而且容易流于形式,在讲究实际的程序员和管理者那里也就慢慢失去了市场。

即便如此,agile的一些方针还是备受批评,例如不重视计划和设计文档,这样不可避免的会导致项目走向混乱,越到后期重构越困难。所以近两年出版的软件工程类的图书逐渐又开始强调计划和设计文档的重要性,只说不要做的太过份,够用就行。大家逐渐认识到,前期不投入力气进行一些计划、基础性准备工作和设计,是一种短视的行为。如果现在还有谁纯粹按照Agile Manifesto那4句话去做,肯定是很傻很天真。

讽刺的是,一些对软件工程知之甚少的开发团队,依靠自己临时拍脑袋得来的、作坊式的开发方法,居然也是基本上符合Agile Manifesto的。例如缺乏统一的开发规范和纪律,各自按自己的想法来干,符合“个体与交互重于过程和工具”;不做需求分析和架构设计直接甩膀子就开干,符合“可用的软件重于完备的文档”;允许用户随意提功能变化而不经过范围控制流程,符合“客户合作高于合同谈判”和“响应变化高于遵循计划”。如果按照这个标准来看,可以说国内的绝大部分软件项目都是依照agile方法开发的。

其实,agile之所以能够有效应对变化和降低项目风险,主要并不是由于Agile Manifesto这四句话,而是agile采用了迭代式开发过程,且引入了一些非常有用的开发实践。例如XP中的结对编程、TDD、持续集成、代码控制、重构等,这些具体的手段明显的提高了代码质量和开发效率。严格来说,最有影响力的agile方法XP中强调的简单设计和编码标准等其实在某种程度上也是和Agile Manifesto矛盾的。

总之,至于那种方法适合自己的软件开发,要具体问题具体分析。无论使用什么流程和实践,都要理解其适用的道理和缺陷,分析自身的项目情况,找到合适的配合点。实践是检验真理的唯一标准,盲目依葫芦画瓢是不可取的。

你可能感兴趣的:(架构设计,敏捷开发,TDD,XP,敏捷,文档)