白话架构(4)——从瀑布到螺旋:60年软件研发模型进化史,藏着每个程序员的工作密码
巴利·玻姆:软件工程的本质,是在不确定性中寻找确定性的艺术。
作为软件工程师的我们,有没有在那一刹那,思考过这个问题:为什么有的项目能按时上线零bug,有的却卡在需求变更里反复返工?
答案,藏在软件研发模型的进化史里。
上一篇我们聊了软件行业的造神者,今天这篇聚焦和瀑布模型强相关的研发模型——从被误读的瀑布模型,到能应对高风险项目的螺旋模型,再到至今仍在悄悄用的RAD模型,每一种模型的诞生,都是程序员和项目失控的博弈史。
开篇暴击:被全行业误读的瀑布模型,诞生初衷竟是“预警缺陷”
1970年,温斯顿·罗伊斯(Winston Royce)在论文里写下了瀑布模型的核心框架,但他万万没想到:自己写这篇论文的目的,是警告大家这个模型的缺陷(比如线性流程扛不住需求变更),结果却被全行业当成了“研发圣经”。

图:温斯顿·罗伊斯
为啥会被误读?核心是时代刚需:当时的软件项目需求 简单,行业急需一套标准化流程规范混乱的开发行为。于是,这个本是“负面案例”的模型被推上神坛,瀑布模型(Waterfall Model)的名字正式敲定——而类似的线性开发实践,其实早已在行业里悄悄用了十几年。
瀑布模型的核心逻辑特别好懂:像瀑布一样单向倾泻,每个阶段彻底完成后才进入下一个,环环相扣不回头。核心阶段就6个:需求分析,设计,开发,测试,部署,维护。完美适配“需求100%明确、几乎不变更”的大型工程。

图:瀑布模型
但说出来你可能不信,它的雏形早在第一代计算机时代就有了。
溯源:比1970年早14年,世界首个大型计算机网络就用了“类瀑布流程”
瀑布模型不是突然冒出来的,而是从大型项目实践里“长”出来的。
1950年代初到1963年,美国空军搞了个大项目——SAGE半自动地面防空系统,这是世界上第一个大型实时计算机网络。为了保证这个“国之重器”不出错,团队用了一套“先明确需求、再设计、后开发测试”的线性流程,这就是最早的“类瀑布实践”。

图:防空导弹示意图
这里还有个有趣的小插曲:SAGE系统的核心——AN/FSQ-7计算机,是由 IBM 全权负责开发、构建和维护的。
作为20世纪50年代全球最大的计算机项目,SAGE 堪称 IBM 的“成长加速器”:1952年到1955年期间,这个项目为 IBM 贡献了80%的计算机业务收入;到1958年,参与该项目的 IBM 员工更是超过7000人。更关键的是,SAGE项目催生了大量技术创新,而 IBM 后续将这些创新成果广泛融入到其他计算机产品中,进一步巩固了自身在行业内的地位。
更关键的是,1956年6月29日,赫伯特·D·贝内特(Herbert D. Benington)在“数字计算机高级编程方法研讨会”上,专门以 SAGE 系统为例,写了篇《Production of Large Computer Programs》,第一次系统讲了大型软件的阶段化生产流程——这是目前有文献记载的、最早的类瀑布实践,比罗伊斯1970年的论文早了14年。

图:《Production of Large Computer Programs》 截图
后来,这套流程成了“大型关键项目标配”:IBM 704/709大型机的配套软件、NASA水星计划和双子座计划的载人航天软件、UNIVAC 系列商用软件,全用了瀑布模型。
这些项目有个共性:需求由军方或政府拍板,几乎不可能变;团队动辄几百上千人;交付的是不能出半点错的关键系统——这正好是线性流程的“舒适区”。
就连《人月神话》的 作者弗雷德·布鲁克斯(Fred Brooks),在领导 IBM System/360 操作系统开发时,也用了需求→设计→实现→测试的线性流程。虽然没叫瀑布模型,但他强调的文档驱动和阶段评审,后来都成了瀑布模型的核心特征。在前文中我们知道 IBM System/360 难产几年才发布的故事,但正是从它开始,软件的研发模型才具象化,也促使了经典著作《人月神话》的诞生。
致命缺陷爆发:瀑布模型的4个“坑”,逼出了后续所有模型创新
瀑布模型能稳住大型关键项目,但随着软件行业发展,它的缺陷越来越明显,几乎成了“项目翻车重灾区”:
- 错从源头起,补救全白搭:需求分析阶段的一点偏差,会像滚雪球一样贯穿整个流程,直到交付才发现,这时再改已经来不及了(
需求分析的偏差会一直向后续阶段传导); - 变更等于“推倒重来”:开发中途要改需求或设计?成本高到离谱,往往得从头返工(
难以适应需求变化); - 用户体验“盲盒”:产品原型要等到开发后期才能看到,中间过程没法验证用户感受,等发现问题已经晚了(
等待最终产品周期长); - 文档拖累效率:对文档要求极严,大量时间花在写文档上,反而耽误了开发进度(
输出大量 文档,增加时间、人力成本)。
为了填这些坑,行业开始了一波又一波的模型创新——第一个站出来的,就是带反馈的瀑布模型。
瀑布模型的初代优化:从单向流转到原型验证
带反馈的瀑布模型:打破单向却未解决核心问题
20世纪70年代末,带反馈的瀑布模型(Modified Waterfall Model)出现了。它的改进很直接:在相邻阶段之间加了“双向反馈通道”——比如设计时发现需求有问题,能回退到需求分析阶段改;编码时发现设计有缺陷,能退回设计阶段调整。
这打破了传统瀑布“只能往前走、不能回头”的绝对限制,但核心还是线性推进,文档评审要求也没减。
可惜改进有限:只能相邻阶段回退,如果测试阶段才发现需求层面的大问题,跨阶段回退还是得大量返工;而且“需求前期冻结”的核心问题没解决,还是扛不住需求变更。
就在这时,另一种更灵活的模型站了出来——原型模型(Prototype model)。
1977 年原型模型:用快速原型搞定模糊需求
1977年,巴利·玻姆(Barry Boehm,后面会多次提到的模型创新大神)系统化提出了原型模型(Prototype model)。苹果 Lisa 系统原型开发、早期交互式桌面应用、CRM系统原型验证,都用了这个模型。

图:巴利·玻姆
它的核心逻辑特别简单:先快速做一个可运行的产品原型,拿给用户看、让用户试,通过反复迭代验证需求。对于需求模糊、需要用户频繁确认的交互式软件,这简直是“救星”。
原型模型又分为抛弃型原型和演化型原型。
前者用于需求验证(比如项目开工前做一个 Demo),后者则将原型逐步迭代演化为最终产品(比如先做了个微信,包含基本聊天功能,再慢慢加上朋友圈等功能)。
原型模型的优点很突出:能快速澄清模糊需求,减少理解偏差;用户全程参与,后期需求变更风险大幅降低;早期就能验证产品方向,避免走弯路。
但它缺点也明显:
- 容易“重功能轻质量”,为了赶进度可能忽略代码规范和性能问题,导致后期维护困难
- 如果原型迭代没节制,容易导致项目范围失控,工期延误
- 不适用于高复杂度、高可靠性要求的核心系统(比如嵌入式软件、航天软件)