序言五
自从1946年第一台计算机诞生以来,人类一直在寻找开发软件的最佳方法,以提高软件质量,减少项目成本,并更好地控制项目进度。最早的软件开发模型是1970年W.Royce提出的瀑布模型(Waterfall Model),这种方法在20世纪80年代成为软件开发的主流。瀑布模型的概念是按照需求、设计、开发、测试的顺序,线性地开发出软件产品。在前一个阶段完成之前,不能进入下一个阶段。这种方法对需求明确、设计方法成熟且开发人员对编程工具非常熟悉的软件项目十分适用,但是对已经完成的工作进行修改却很麻烦。
为克服瀑布模型“死板”的缺点,在20世纪90年代出现了迭代和增量开发模型(Iterative and Incremental Development Model),其核心思想是每一次“需求–设计–开发–测试”的迭代只开发整个软件的一部分,这样做的目的是尽早发现并解决项目中存在的重大问题。在迭代和增量开发模型的基础上,也出现了一些更加“短小精悍”和更加“以人为本”的开发模型,比如RUP(1994)、Scrum(1995)、Extreme编程(1996)等。这些方法更加注重持续回顾和增量开发,并通过逐步完善的方法来开发和交付软件产品。
2001年2月17日,17位“草根”程序员在美国犹他州发布了敏捷宣言(Agile Manifesto),其中最重要的4项原则是:“个人和交流重于过程和工具,能运行的软件重于详尽的文档,与客户合作重于合同谈判,响应变化重于执行计划”。敏捷宣言的发布,在软件开发方法领域开启了一场轰轰烈烈的敏捷运动。所谓敏捷方法,其实只是一个概念,它是所有带有敏捷特征的软件开发方法的统称。上面提到的Scrum和Extreme编程都属于敏捷方法。
在过去的十几年里,随着网络的普及,以及近年来越来越多移动应用的出现,信息的传播速度越来越快,软件开发的周期也越来越短。很多项目启动时需求并不是很明确,传统的瀑布模型不再适用,敏捷方法的优点得以发挥。因此,敏捷方法越来越流行,特别是针对小型项目。在敏捷方法里,使用最多的是Scrum方法。据敏捷联盟(Agile Alliance)统计,在全球使用敏捷方法的企业里,66%使用过Scrum方法或Scrum方法的变种。
提到软件开发,我们不能不提到CMMI模型。有人认为CMMI和敏捷方法是相冲突的,二者不能共存,其实这是一种误解。CMMI规定了必须做什么,但是没有规定怎么做。在选择项目的生命周期模型时,CMMI项目可以选择瀑布模型,也可以选择敏捷模型。敏捷方法的出现,实际上是丰富了软件开发模型的可选项,是对CMMI的补充。敏捷方法合理地借鉴了CMMI的400多条最佳实践,可以最大限度地保证敏捷项目的成功。所以CMMI和敏捷方法是相辅相成的关系,不是对立的关系。写这篇序的时候,我正在美国华盛顿参加CMMI研究所举办的北美SEPG年会,今年年会的一个特点就是出现了大量CMMI与敏捷结合的论文和报告。可以预见,在未来的几年,CMMI与敏捷方法的结合将会是一个重要的趋势。
在敏捷方法不断发展的过程中,IBM扮演了一个非常关键的角色。从最早的RUP方法到DAD,再到最新的DevOps方法,IBM都走在时代的最前沿。本书作者非常幸运地亲身参与到这场轰轰烈烈的敏捷运动中,更为可贵的是,作者把自己在IBM十年的亲身体验写下来,与广大读者分享,为大家更好地理解敏捷方法,避免已经走过的弯路,提供了第一手的资料,非常有意义。
最后祝愿敏捷方法如作者所期望的那样,能在中国的企业里开花结果!也祝愿中国的软件产业能早一天走向世界!
高山
CMMI评估师,CSM