观点碰撞
敏捷开发企图终结软件危机
如今在软件开发领域占绝对主流地位的传统软件工程学思想是大约在20世纪60年代伴随着“软件危机”言论的出现而诞生的。所谓软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题,它包含两方面内容:一是如何开发软件,以满足不断增长、日趋复杂的需求;二是如何维护数量不断膨胀的软件产品。的确,传统软件工程学思想的诞生,把软件开发活动按照工程化的原则和方法进行组织,并一度被认为是摆脱软件危机的一个主要出路。
但是,数十年后的今天,人们对于软件危机的“恐惧”仍没有丝毫减弱,相反随着软件系统的急速膨胀而越发不可收拾了:对软件开发成本和进度的估计常常不准确,开发成本超出预算,实际进度比预定计划一再拖延的现象并不罕见;用户对“已完成”系统不满意的现象也经常发生;软件产品的质量往往靠不住,Bug一大堆,补丁一个接一个;等等。于是,无论是产业界还是理论界,都开始对传统软件工程学思想产生怀疑,甚至背叛。因此,关于软件到底是“工程”还是“艺术”的讨论一度风靡全球。而以迭代式循序渐进开发方式为主,以“人”为核心的敏捷开发方法就是在这样的背景下产生的,它背叛了传统软件工程学中以“过程”为核心,把设计和开发尽可能分开,尽量弱化“人”在整个工程中地位的思想。
近日,当世界软件开发领域最具影响力的五位大师之一、敏捷软件开发方法的早期开拓者马丁·福勒先生来华与国内软件高手论道之际,北京大学软件学院院长阵钟老师再次将软件是“工程”还是“艺术”这一问题摆到了桌面上。而这位软件教父似乎对这一问题早有深入思考,他认为,这一争论的核心应该在于软件设计是否要与软件开发分开,这也正是传统工程化软件开发方法与敏捷软件开发方法的重要区别。
作为敏捷软件开发方法的推动者,马丁先生认为,软件设计应该和软件开发紧密结合在一起,采用迭代式开发。软件开发不能被认为是一个既定的过程,因为软件开发中有太多的变化出现,既定的过程设置不可能达到合适的预想结果。由于需求变化、技术更新、人员流动等问题的存在,许多软件设计工作应该在软件开发到一定程度的时候才能进行,两者不应该在顺序上严格分开。他说:“至于从哲学的角度讲,到底软件开发活动是艺术还是工程呢?我很难清晰地界定,也许都是或者都不是。也许我们应该把软件开发活动当做一个独立的东西来对待。”
由此看来,马丁先生既不认为软件开发活动应该是一个先进行设计,然后根据 “设计图纸”进行构建的工程化过程,也不认为软件开发应该是完全依赖于开发者头脑中随时蹦出的灵感的艺术活动,因为这两种倾向在人类数十年的软件开发实践中已经被证明都不甚完美。而他企图在两者之间找到一个均衡点,这个均衡点也许正是真正解决“软件危机”的突破口。
据了解,敏捷开发实际上包括了许多优秀的软件开发习惯。首先,这种方法改变了软件测试的流程,在编写代码前进行测试,减少了开发风险;其次,可以对软件进行持续集成,即每个小时都在集成,任何部件间的冲突都可以随时解决;此外,这种方法的“动态规划”和“重构”做法,意味着开发者可以对软件架构进行持续改进,可以根据用户的需求随时进行改进,而利用传统的软件开发方法则很难对软件的架构进行调整,同时也会造成成本的大幅增加。