本节摘要:把零件拼起来是有顺序的——大爆炸一把梭,增量式则从某端逐级往上垒。本节展开大爆炸、自顶向下、自底向上、三明治四种策略的骨骼、危险区与适用场景,并给一张决策矩阵帮你选。
集成测试要回答"先拼哪两头、用什么挡缺口的模块"。没人规定必须一次把模块全接上才测,接的顺序决定了你能多早发现问题、以及缺了某个模块时用什么替身顶住。四种经典策略分别代表四种不同的拼装哲学,挑选的依据不是"哪个高大上",而是你系统的依赖长什么样。
把所有模块一次性接起来,只跑一轮大的。优点是省事、规划少;致命缺点是定位难——出了问题往往不知道是哪个接缝,就像一锅乱炖吃出问题不知道该怪哪个菜。适合模块少、接口简单的项目。一旦模块超过十几个,基本就告别大爆炸。
从最上层的总控模块开始,边测边把它的子模块从"替身"换成真的,一层层向下推进;被替换的下层模块继续用替身占位。优点是最早验证主干控制流和上层契约,缺点是底层核心逻辑可能长期被替身盖着迟迟不露真容,要准备一大堆上层替身。
示意序列(看它如何逐层往下换):
随着推进,替身被真实现逐层替换,最终层层的接缝都被真实地走一遍。
从最底层的叶子模块开始,测它们、给它们写好替身感受"驱动者",再由驱动者把它们一个个接到上一层。优点是底层核心被最先、最充分验证,方便定位缺陷;缺点是上层控制流和用户界面始终最后见光,且需要维护大量"驱动器"。
同时从顶层和底层向核心聚拢,兼具两者优点、也要求更复杂的规划。适合模块多、层次分明的大型系统——既让上层契约早验证,又让底层核心早验证,中间层再陆续接上。
| 系统面貌 | 推荐策略 | 一句话理由 |
|---|---|---|
| 模块少、接口简单 | 大爆炸 | 规划省,定位凑合能扛 |
| UI 驱动、上层契约重要 | 自顶向下 | 主干控制流最早见光 |
| 核心业务逻辑藏在底层 | 自底向上 | 地基最值钱先测牢 |
| 模块多、层次分明 | 三明治 | 两头优点都要 |
| 依赖复杂、缺模块多 | 增量 + 替身 | 用替身占位,边补边接 |
下面把四种策略对"发现问题早晚"和"定位难度"的权衡画成一张图。

背景:一个支付服务分订单、风控、对账三块,对账依赖外部结算文件,风控要被风控团队反复改。
操作:若用大爆炸,一跑就全糊;改用三明治——从订单主流程自顶向下验证上方契约,同时从对账底层自底向上把文件解析测牢,最终两头在中间层汇合。
结果:上层契约耦合配置改动很快被发现,底层文件口径也早被锁死,而风控那块的频繁改动被隔离在中间层,不影响全盘。
解读:选择策略本质是把"最愿意早发现的错"摆到最先验的位置。变式:当采用容器化测试后,甚至可以按业务域拆多个独立小拼装,互不相扰。
很多团队把集成策略当成开工时画一次就再也不动的图纸,这是误解。真实的依赖结构在持续演化——新模块加入、老接口重构、外部服务换厂商——这些都可能让"当年选定的自底向上"在今天变成负担。所以策略应当是一份"活的决策",建议跟着系统结构季度性地回看一次:现在的依赖长这样了吗?上一季度最常红的接缝,被当前策略放在最先验的位置了吗?
一个务实的判断信号:当团队花在"定位集成红灯"上的时间,开始明显超过"修复代码"的时间,多半说明当前策略把最难定位的接缝放到了最后才验。此时不是去忍受,而是把那个接缝的验证提前——这往往比在旧策略上硬扛更省力。
四选一不是唯一的形态,现实项目里更多是组合。比如一个系统用"自底向上"测地基、又用"自顶向下"验主流程,两头的接缝都尽早见光,这在模块多、层次分明时尤其常见——它本质上就是三明治策略的一个延伸。再比如外部依赖多的项目,会先给替代不了的第三方接口配契约测试或替身,用"增量 + 替身"把缺的模块顶住,边接边测。
组合时唯一要守的口径是:别让两条策略在同一层各测各的、造成重复或空白。每个接缝应当被恰好一条路径覆盖,谁验什么写清楚,否则又是"以为都测了其实都漏了"。策略的价值从来不是名字好听,而是让每个接缝都被一个有意的顺序安排过。
聊策略就绕不开替身,但要摆正它的位置:替身不是策略的敌人,而是策略的脚手架。在自顶向下里,下层模块用替身顶到被真实现换掉;在自底向上里,由"驱动器"替身上层指挥。任何增量式策略都依赖替身先占住还没接上的位置,让已被接上的部分能独立往下测。真正要警惕的,是替身引退的时机——一个该被真实现换下却迟迟不换的替身,会让策略停在半道,产生"测了但没测到真相"的假象。
记一条经验:每次往深层接上真实模块,就顺手检查一层——那些先前占位的替身,是否已经被该换下的真实现顶掉?多留一个"退役清单"记录哪些替身还占着哪些位置、什么时候该卸,能避免策略被一堆忘了下架的替身卡住。策略走得下去,靠的是替身按时上、按时下。
对所有十人以下的小团队或刚起步的项目,策略也实在不必第一天就追求哪种高大上,务实的起点往往是先按自底向上把地基里最值钱的纯逻辑测牢,再把必须走通的大接缝用一轮冒烟兜住。先把最容易漏的底层核心稳住,等模块和层次多了再自然演进到三明治。策略会跟着系统一起长大,先动起来,比先在纸面上争论漂亮仗更要紧。