质量不是最后测出来的

很多团队的测试是这样的:开发写完功能,丢给测试同学最后验一遍,发现 bug 再来回扯皮。这种模式下,质量是「测出来的」,而且成本高、反馈慢。

质量内建要扭转的正是这件事:把质量做进开发流程的每一步,让问题在刚冒头时就被发现,而不是攒到最后一起算账。

越晚发现的问题,修复成本越高;把测试左移到开发过程中,是最划算的质量投资。
本文核心知识点
  • 测试金字塔底层宽、顶层窄,分层搭配。
  • 单元测试快而多,覆盖代码细节。
  • 集成测试验证模块之间拼得对。
  • 端到端少而精,守住关键业务路径。
  • 质量门禁不合格就拦住,别往下走。
测试金字塔示意:蓝色渐变背景一座发光三层金字塔,底层宽阔由许多发光小方块组成,中层稍窄,顶层窄小,旁悬浮盾牌质量门禁与对勾标记,扁平科技插画
金字塔底层多而快、顶层少而精,质量在每一层层层把关。

测试金字塔:为什么底层要宽

测试金字塔把测试分成三层,关键在于数量从底到顶递减:底层单元测试最多最快,往上集成测试少一些,最顶端端到端测试最少。这样搭配,反馈速度和覆盖广度才能兼顾。

层级数量特点
单元测试最多快、便宜、定位准
集成测试中等验证模块协作,略慢
端到端测试最少覆盖真实流程,慢而脆

反过来,如果把大量测试堆在顶端,就成了「冰淇淋甜筒」:跑一次要很久,一坏还难定位,团队很快就不想跑了。

单元测试:快而多,覆盖细节

单元测试针对最小的代码单元——一个函数或一个类——单独验证它的行为。它跑得快、数量多,是金字塔最宽的底座。

# 单元测试关注一件小事
输入一个边界情况
断言它返回预期结果
# 单元测试要:快、独立、只测一个行为
# 依赖外部的部分用替身隔开,别让它变慢变脆。
  • 写得快、跑得快,可以频繁运行。
  • 失败时一眼定位到哪个函数出了问题。
  • 把边界情况和常见错误都覆盖到。

底座够宽,团队才敢频繁改代码——因为改错了,立刻就有单元测试红给你看。

集成测试:验证模块拼得对不对

单个模块都测对了,拼在一起却可能出问题:接口对不上、数据传错、顺序乱掉。集成测试就是验证几个模块协作时是否如预期工作。

它关心它不纠结
模块之间的接口是否对得上单个函数的内部细节
数据流转是否正确每个分支都走到
跟真实依赖是否配合替代单元测试

集成测试比单元测试慢一些,所以数量适中,聚焦在模块交界这些容易出问题的地方。