将软件开发过程看成一项系统工程,无疑是具有深远意义的,它形象地展现了软件开发过程中的各项活动,并与组织管理、项目管理、团队管理等管理活动有效地结合起来,体现了团队在软件开发过程中的重要性,并从工程的角度建立一个规范而有序的过程体系。这一过程体系涵盖了软件在构建前、构建时及构建后的整个生命周期。从了解需求开始,整个团队的不同角色就像一台机器的各个零配件一般,各司其职,按部就班地开始运转,或参与需求分析,或开展架构设计,或进行编码开发,或实施质量保证,或完成部署与维护。这种规范化、层次化、过程化的方式,正是工程的本质所在。
然而,这恰恰是软件工程引起广泛诟病的一点,主要是因为软件开发有不同于机械制造、建筑工程的特殊之处。其一,软件项目的需求总是不稳定的,处于不断变化之中。一些重要需求的变化甚至会影响到整个系统的解决方案; 其二,软件开发活动是一项知识活动,受团队成员技能与知识水平的影响较大,许多开发实践及活动都很难做到规范化; 其三,软件开发难以完全做到功能分解,软件规模也无法简单地以“人·月”数值的多少来衡量。团队成员人数越多,沟通成本就越高,也不能简单、直接地判断开发进度与开发效率; 其四,几乎不可能准确地制订出软件开发计划,即使制订计划的人员经验丰富,也很难对软件开发的各项任务做出准确的估算。
于是,软件工程就从一门最初希望从其他工程学中汲取灵感的学科,逐渐转变到针对软件开发的这些特质,研究如何才能更好地管理开发过程、提高开发效率与质量、保证软件的成功交付。以卡内基·梅隆大学的软件工程研究所(Software Engineering Institution,SEI)为首的学术派,更多地专注于过程的规范化,致力于各种方法学的研究和最佳实践,并以细致、准确的文档作为团队知识传递的重要媒介,通过开展对软件开发能力成熟度的评估,衡量并提高软件开发组织的能力。然而,这种重型方法却为许多软件开发的实践者不能接受,他们真切地理解软件开发的种种困扰与问题,注重实践与实效,不囿于规范与组织,追求变化,从而在软件工程的土壤上萌生了“敏捷开发”思想,提出了著名的《敏捷宣言》,并基于这些重要思想和原则,产生了诸多敏捷开发方法与实践。
在20世纪90年代,“敏捷开发”思想可以称得上是一场针对软件工程科学的逆袭,抑或是一场革命,但笔者更愿意相信,这是历史发展的一种必然,是这个世界多样性的真实体现。轻与重,敏捷与严谨,理论与实践,无非是事物的两面,无所谓好坏与优劣,评判的关键标准还在于它是否适合团队与软件组织。理性而正确的选择是融合,各取所需,取长补短。
因此,希望本书的读者不要锱铢必较于方法和规范的细节,更不要固守自己的观点,对本书中不同的方法或思想嗤之以鼻,而应该抱着包容的态度、开放的心态去汲取知识,充分理解软件工程思想的精髓,批判而有选择地为己所用。
希望本书能够成为读者学习软件工程学的起点。
ThoughtWorks高级咨询师
于成都天府软件园
