知行合一: 实现价值驱动的敏捷和精益开发
上QQ阅读APP看书,第一时间看更新

第一部分 神形兼备的敏捷开发模式

第1章 从“先知后行”到“知行合一”——从传统开发模式到敏捷开发模式

北大西洋公约组织的科技委员会在1968年10月组织了一次会议,在那次会议上,出现了“软件工程”这个词。50位来自11个国家的软件用户、软件生产者和高校从事软件教学的教授一起讨论了下列一些软件工程中碰到的突出问题。

随着数据系统不断渗透到现代社会日常活动中,如何保证这些系统的可靠性成了一个日益突出的问题。

大的软件项目的进度及特性需求难以控制。

软件工程师的再教育。

软件的定价是否要和硬件分开。

除了第4个问题外(今天软件的价格常常已经超过了硬件的价格),其他3个问题在今天依然是让我们头痛的问题。随着互联网变成公众生活中不可缺少的部分,软件系统的应用比当年多出了百倍,而质量成本依然是软件项目的杀手。软件产品的需求比以往更加难于控制,需求蔓延(requirement creep)是软件开发中最常见的风险之一。IT行业技术变化之快远超其他行业,学习新的技术、方法是软件工程师常态工作的一部分。

根据这些问题,在这次会议上首次提出了“软件危机”的问题。会后不久,Winston Royce(1970)博士根据制造业的实践,提出了一个至今依然影响软件业的开发模式——瀑布式软件开发生命周期,希望能够借鉴其他行业的经验,解决软件开发中的问题。但40多年后,危机并没有消失,依然威胁着软件公司的生存发展。

近20年来,越来越多的软件工程实践者开始了深层次的反思:问题出在哪里?解决问题的方向又在哪里?在反思的同时,一些有勇气的软件工作者开始了新的探索。他们在软件开发过程中,尝试了新的实践,并不断总结交流,形成了我们今天看到的敏捷宣言、敏捷原则、敏捷实践以及敏捷方法与传统方法结合的实践。今天我们比以往任何时候都更接近找到解决软件危机之匙。

我们首先审视下列4个问题。

(1)什么是成功的项目?项目中的决策应该由什么来驱动?

(2)Royce博士提出的瀑布开发模式真的适用于复杂软件产品开发吗?

(3)复杂软件项目的特点是什么?

(4)根据复杂软件项目特点,我们需要建立一个什么样的开发模式?

通过对这4个问题的讨论,希望读者能意识到为什么“先知后行”的传统开发模式会让我们在原地踏步,很难走出软件危机的圈子。走出瀑布模式,拥抱“知行合一”的敏捷方法才可能是解决软件危机的正确思路。在这里我虽然借用了王阳明的核心理念,但要表达的意思远远没有达到王阳明先生表达的深度。在本书中,“先知后行”指的是确定了实现目标要走的路再开始行动,也就是在项目前期,确定产品范围、实施方法后,才开始软件开发活动。“知行合一”指的是明确了愿景后,尽管我们不完全清楚到达目标的路径,但我们先往前走,边走边看边调整,在开发中学习、总结、调整、提高,逐步实现客户需要的产品。