Software Development Methodology
如何在不确定的现实中,把一个想法,可靠地变成可用的软件
方法论的三层结构
价值观 / 哲学
v
开发方法(流程)
v
工程实践(工具 + 技术)
| 层级 | 解决的问题 | | 哲学层 | 我们如何看待变化、人、复杂度?| | 方法层 | 我们用什么流程来应对现实?| | 实践层 | 我们具体用哪些工具和技术?|
方法论全景图
瀑布模型 (1970s) → 迭代增量 (1980s) → 敏捷家族 (2001-)
↘ ↗
└─ V模型、RUP ────────┘
同时并行:原型法、螺旋模型、DevOps、低代码/无代码
瀑布模型(Waterfall)
四大主流开发模型之一
哲学:决定论,世界可观测
世界观:世界是可预测的,需求是稳定的
核心思想:严格线性顺序,像瀑布一样自上而下流动
流程
需求 -> 设计 -> 实现 -> 测试 -> 交付
优点
- 结构清晰
- 适合需求固定的项目(军工、嵌入式、协议栈)
致命问题
- 每个阶段必须100%完成才能进入下一阶段
- 一旦需求变,整个系统就崩
- 交付周期极长
适用场景
- 底层系统
- 引擎内核
- 协议
- 算法库
敏捷开发(Agile)
四大开发模型之一
世界观:世界是变化的,需求永远不完整
哲学:复杂系统论,世界动态变化
核心思想
- 快速迭代
- 小步快跑
- 持续迭代
主要敏捷框架和方法
- Scrum
- Kanban
- XP
节奏
需求池 -> Sprint -> 开发 -> 评审 -> 反馈 -> 再规划
适用场景
- 游戏玩法系统
- 工具链
- Web/App/编辑器
精益开发(Lean)
四大开发模型之一
世界观:最大的浪费不是做错,而是做没人要的东西
哲学:进化论,系统逐步逼近最优
核心思想:源自丰田生产系统,消除浪费、优化价值流
七原则
- 消除浪费
- 内建质量
- 创建知识
- 推迟承诺
- 快速交付
- 尊重员工
- 整体优化
适用场景
- 原型开发
- 游戏机制验证
- 创意型产品
DevOps
四大开发模型之一
世界观:交付不是终点,而是循环的一部分
目标
代码 -> 构建 -> 测试 -> 部署 -> 监控 -> 反馈 -> 改进
强调
- CI/CD
- 自动化
- 可观测性
适用场景
- 大型系统
- 在线游戏
- 服务端
V模型(V-Model)
核心思想:瀑布模型的增强版,强调测试与开发的对应关系
需求分析 -> 验收测试设计
v ^
系统设计 -> 系统测试设计
v ^
详细设计 -> 集成测试设计
v ^
编码实现 <- 单元测试设计
- 特点:每个开发阶段都有对应的测试阶段
- 意义:在传统模型中引入了质量保证的提前规划
迭代式开发(Iterative Development)
循环:规划 -> 设计 -> 实现 -> 评审 -> (下一轮迭代)
- 与敏捷的区别:迭代周期较长(2-6个月),仍偏向计划驱动
- 代表:Rational统一过程(RUP)的核心概念
螺旋模型(Spiral Model)
核心思想:风险管理驱动的迭代模型
每一轮螺旋包含:
1. 确定目标、方案和约束
2. 识别和解决风险
3. 开发和测试
4. 计划下一轮迭代
- 特点:结合了瀑布的系统和原型而迭代,强调风险评估
- 适用:高风险、大型、复杂项目
原型法(Prototyping)
核心思想:快速构建简化版,获取反馈,逐步完善
快速设计 -> 构建原型 -> 用户评估 -> 修正改进 -> (循环或转为正式开发)
- 变体
- 抛弃式原型:仅用于探索需求
- 演进式原型:逐步完善为最终产品
- 适用:需求模糊、用户界面复杂的项目
增量模型(Incremental Model)
核心思想:分多个“增量”构建,每个增量都是完整的功能子集
第一次发布:核心功能
第二次发布:核心 + 功能集A
第三次发布:核心 + 功能集A + 功能集B
特性驱动开发(FDD)
核心思想:以“特性”为增量单位,强调建模和计划
五个核心活动
1. 开发整体模型
2. 构建特性列表
3. 按特性指定计划
4. 按特性设计
5. 按特性构建
低代码/无代码平台开发
- 核心:通过可视化配置而非传统编码构建应用
- 意义:公民开发者参与,快速响应业务需求
- 代表:OutSystems, Mendix, Power Apps
模型驱动开发(MDD/MDA)
- 核心:用UML等模型作为主要工件,自动生成代码
- 理想:编写模型,而非代码
- 现状:在特定领域(如嵌入式)有成功应用
基于测试的开发(TDD/BDD)
- TDD:测试驱动开发(红-绿-重构循环)
- BDD:行为驱动开发(用自然语言描述行为)
- 地位:通常是敏捷或精益的工程实践,也可作为主导思想
净室软件工程
- 核心:强调数学验证和统计质量认证
- 目标:开发“零缺陷”或接近零缺陷的软件
- 适用:对可靠性要求极高的系统
大多数组织慈爱用“混合方法”
- “敏捷瀑布”:前期用瀑布做架构设计,后期用敏捷迭代开发
- “Scrum-ban”:Scrum的迭代节奏 + 看板的流程可视化
- “瀑布式增量”:整体瀑布规划,内部用增量式开发
核心认知:“没有银弹”——没有任何一种方法论能解决软件开发的所有问题
现代趋势
- 情景驱动:根据项目具体情境选择/裁剪方法
- 混合实践:各取方法之长,形成适合自己团队的方式
- 原则重于流程:理解背后的原则(如快速反馈、质量内建),而非机械执行仪式
- 关注价值流:从“遵循流程”转向“优化从想法到价值的流动”
方法论是工具,目的是帮助开发者更好地创造价值。当方法论本身成为目标时,它就失去了意义。优秀的团队和工程师懂得“有方法而不唯方法”