posts

一个人的质量守门:验证预算、回归清单与发布门禁(10 篇)

一个人没有时间做完整测试,只能把有限的验证预算压在丢数据、收错钱、进不去这三条红线上。本组从 47 个线上缺陷、86.5 小时修复与 12 次发布出发,讲关键路径、三层配比、回归分层、六项门禁、缺陷分级、不可逆保护与十项验收。

一个人守不住所有质量,只能守住那些坏了就回不来的地方。

这个系列解决什么问题

一个人做产品,最难的不是写功能,是每次按发布键之前那十分钟。没有测试团队,没有 QA 同事,也没有第二双眼睛;能用的只有每周几个小时、一份清单和一个门禁。

这个系列不讲「怎么写单元测试」,也不讲测试框架怎么配。它讲的是取舍:一年 47 个线上缺陷里,哪些本来能拦住;12 条关键路径中,哪 5 条坏了不可逆;38 条回归清单怎么砍到发布时只跑 26 条;6 项门禁检查怎么在 11 分钟内跑完;以及一个人没有双人复核时,怎么用预演、快照和冷却期替代。

它服务的是一个每周只能拿出 4 小时做验证的人。 你能投入的不是一套测试平台,而是一张关键路径表、一份分层回归清单和一条「红灯不准发」的规则。

核心主张:五条口径

10 篇速览

#文章核心内容阶段
01质量是一笔预算:四十七个缺陷、八十六小时与三条红线47 缺陷、86.5 h、三条红线、192 h/年记账
02关键路径清单:十二条不能坏的路径12 条路径、5 条不可逆、48 项检查清单
03三层验证的一个人配比:单元、集成与六条端到端214 单元、31 集成、6 条 E2E、332.8 秒分层
04回归清单:三十八条怎么砍到二十六条38→26、58 分钟、年省 6.64 h回归
05发布门禁:六项检查与一个红绿灯6 项、10.8 分钟、拦截 7 次、净省 21.64 h门禁
06缺陷分级:四级、四个时限与一个周末例外P0–P3、2 h/24 h/本周/季度、达标 80.9%响应
07测试数据与假依赖:一个种子、四个替身与三列脱敏1 租户 12 任务、4 替身、2.4 秒重置数据
08不可逆操作:预演、快照、冷却与一个人的双人复核4 类操作、4.7 分钟/次、净省 6.06 h保护
09验证的边际收益:什么时候可以不写测试3 种不写、3 种必写、测试债 17 项取舍
10质量验收:十项检查、四维评分与一次季度复盘10 项检查、权重 0.35/0.25/0.20/0.20、3.13→4.11验收

三条阅读路径

路径 A:刚上线,几乎没有测试。 先读 01 把三条红线和验证预算定下来,再读 02 列出 12 条关键路径,最后用 05 的六项门禁跑第一次发布。这条路径的重点是「先有红灯,再谈覆盖率」。

路径 B:有测试,但发一次怕一次。 先读 03 把三层配比调顺,再读 04 把回归清单分层,最后用 06 给缺陷定级和时限。这条路径的重点是「让验证时间随风险变化,而不是随心情变化」。

路径 C:出过事故,或要接企业客户。 先读 08 把不可逆操作的四件套补齐,再读 07 隔离测试数据,最后用 10 做一次四维评分。这条路径的重点是「同样的错不犯第二次」。

与其它专题的边界

站内已有测试工程、运维、交付、架构与各组业务验收内容,但都不处理「一个人怎么决定发不发」这条线。下表说明本组不重复什么。

既有内容它讲什么本组边界
测试工程专题每种测试技术怎么做:金字塔、TDD、契约、混沌、性能与安全它给方法;本组给一个人每周 4 小时的取舍、清单与门禁
一个人的运维:可用性、告警、事故与值班上线后的探针、告警、事故响应与复盘它管上线后出事怎么办;本组管上线前敢不敢按发布键
版本节奏与回滚:发布列车、兼容窗口与一次撤回发布列车、兼容窗口、撤回流程它管发布节奏与撤回;本组管发布前验证什么、什么情况禁止发
一个人的架构:技术选型、模块边界与演进模块边界、数据模型迁移、技术债预算它管代码怎么组织;本组要的是行为正确性的证据
一个人的计费系统:订阅状态机、按比例计费与失败重试订阅状态机、按比例计费、催收与对账它管计费逻辑本身;本组把结账与订阅变更列为关键路径并给验证方式
一个人的隐私工程:数据地图、最小化与删除权数据主体请求、删除权、保留期与清理任务它管删什么、留多久;本组管删除操作的预演、快照与冷却
一个人的多租户:组织、邀请、角色与数据隔离角色矩阵、三层校验、数据隔离与审计它管权限模型;本组管权限变更的验证与回滚
一个人的产品度量:事件字典、指标口径与决策看板事件字典、埋点三处校验、口径与看板它记行为数据;本组记缺陷、回归与门禁的验证账
一个人的数据搬家:导入、去重、迁移与退出导入契约、幂等重跑、导出四件套它管数据怎么进出;本组把导入列为关键路径并测它的失败分支
一个人的前 100 天:从想法到第一批付费用户上线前十五件事与发布清单它是时间盒清单;本组把「验证」拆成预算、分层清单与门禁
一个人把用户搞懂:访谈、观察、可用性测试与证据链可用性测试、证据强度分级它发现需求问题;本组防行为回归
一个人的服务生意:从接单、报价到产品化里程碑、周报与客户验收它是客户验收;本组是发布验收
一个人的安全基线:十四个入口、十七个密钥与一次 72 小时响应14 个攻击面、认证与枚举、会话撤销、17 个密钥三档、四条边界、41 个依赖与 186 条告警、四类限流、9 类审计日志、72 小时三段响应、20 项验收那组管攻击者能不能绕过功能;本组管功能对不对——关键路径、回归与门禁
一个人的性能与账单:4.2 秒的首屏、一千二百次查询与每月 210 美元4 项预算与 20 格、RUM 与慢查询、412→168 KB、1,200→3 次查询、0→86% 缓存、34 秒导出、7→4 个第三方、210→118 美元、3 次回归告警、10 项验收那组管同样功能快不快、贵不贵;本组管功能对不对——关键路径、回归与门禁
一个人的企业客户:九家询价、一百四十八道问卷与 134 天的第一单9 家询价与 130 h、96 天采购、148 题问卷、7 个子处理者、SLA 43.2/216 分钟、26 h SSO、4 周试点、38 天到账、8 h 实施、10 项验收那组讲客户验收与试点结论;本组讲关键路径、回归与发布门禁
一个人的开源产品:4,200 个 star、一百八十个付费与一年 612 小时的维护4,200 star 与 1,949 美元、612 h 维护、214 依赖、48,600 行 78/22、1,180 个 issue、214 条告警、23 个赞助者、9 家双许可、17 位贡献者、10 项验收那组讲开源项目的发版节奏;本组讲关键路径、回归与发布门禁

这十篇不教具体测试框架的用法,不承诺「零缺陷」,也不评价任何厂商工具。可复算的部分全部用四则运算给出算式;不可复算的部分(框架行为、平台限制)明确指向官方文档。所有数字都是教学假设,代入前请换成自己的缺陷数、发布次数与每周验证时间。

本组统一口径

全组共用一组教学假设,各篇引用时不换分母:

产品:一人 SaaS 任务板,与既有组同一产品;账号 344,付费 120
时间:一年 48 周 × 40 h = 1,920 h;验证预算 10% = 192 h,按每周 4 h
线上缺陷 47:P0 3 + P1 9 + P2 21 + P3 14
关键路径缺陷 31 ÷ 47 = 66.0%
修复工时 86.5 h = P0 3×2.5(7.5) + P1 9×4(36) + P2 21×1.5(31.5) + P3 14×0.5(7) + 回归沟通 4.5
缺陷中位修复:P0 1.2 h、P1 18 h、P2 4.6 天、P3 23 天
缺陷达标(时限内):P0 3/3、P1 7/9、P2 17/21、P3 11/14 → 38/47 = 80.9%
一年记录缺陷 77 个:开发自测 19 + 发布前 11 + 线上 47
30 个前移 × 0.5 h = 15 h;15 ÷ 86.5 = 17.3%
缺陷成本倍数(教学假设):需求 1、开发 5、发布前 15、线上 100
关键路径 12 条,每条 4 项检查 = 48 项;一轮 35 分钟
不可逆路径 5 条:结账、订阅变更、导出、删除账号、权限变更
单元 214 个 / 6.8 秒;集成 31 个 / 74 秒;E2E 6 条 / 252 秒
全量 332.8 秒 = 5 分 33 秒;受影响集 107.5 秒
回归清单 38 条:必跑 12 + 选跑 14 + 季度 12
全量 38 × 2.4 = 91.2 分钟;发布跑 26 条 = 58 分钟;每次省 33.2 分钟
12 次发布省 398.4 分钟 = 6.64 h
门禁 6 项 × 1.8 = 10.8 分钟;拦截 7 次;事故均值 3.4 h → 23.8 h
门禁成本 12 × 10.8 = 129.6 分钟 = 2.16 h;净省 21.64 h
测试数据:1 租户 / 3 用户 / 4 项目 / 12 任务;种子 18 KB;重置 2.4 秒
替身 4 个:支付、邮件、对象存储、OAuth;真实只读依赖 2 个:时区库、邮编库
不可逆保护:预演 4 分钟 + 快照 12 秒 + 确认 30 秒 = 4.7 分钟/次
12 次/年 = 56.4 分钟;避免 2 次误删 × 3.5 h = 7 h;净省 6.06 h
单测回本:写 12 分钟,年触发 40 次 × 省 8 分钟 = 5.33 h;净省 5.13 h
测试债 17 项:偿还 9 项 6.5 h,跳过 8 项
质量四维权重 0.35/0.25/0.20/0.20
现状 3.13 = 0.35×3.0 + 0.25×3.5 + 0.20×3.0 + 0.20×3.0
修后 4.11 = 0.35×4.0 + 0.25×4.25 + 0.20×4.0 + 0.20×4.25
季度复盘 4 × 6 h = 24 h/年

86.5 h 是修复总工时,不是 82.0 h。 82.0 是四级缺陷的工时之和,另有 4.5 h 用于回归与沟通;引用时不要漏掉这一项。

47 是线上缺陷数,77 是一年记录的全部缺陷数。 两个数回答的不是同一个问题:47 决定你救了多少次火,77 决定你有多少机会把火拦在前面。

成本倍数 1/5/15/100 是教学假设。 它只用来排序,不用来算钱;不同产品的真实倍数差异很大,代入前请用自己的工时记录替换。

使用说明

先把三条红线写下来。 丢数据、收错钱、进不去,只要有一条坏了就不可接受;其余问题可以排期。

清单要短到能在发布前跑完。 91 分钟的全量回归,跑到一半就会开始跳步;58 分钟的分层清单才可能每次都跑。

门禁的红灯必须真的能停发布。 如果红灯只换来一句「下次注意」,它就不再是门禁,只是日志。

不可逆操作先预演。 影响行数没看到之前,不要点执行;快照与冷却期是第二道,不是第一道。

本组的证据与使用方法

证据类型。 本组用的是「47 个线上缺陷记录 + 77 个全量缺陷台账 + 12 次发布记录 + 7 次门禁拦截 + 2 次误删恢复 + 17 项测试债清单」。没有「最佳实践」式的断言。

如何使用。 先用 01 的账核对自己的缺陷分布,再用 02 列出 12 条路径,用 04 把回归分层,最后用 05 的门禁跑一次真实发布。

如何复核。 取最近一次发布:看门禁六项是否全跑、回归清单是否按变更类型选、P0 是否在 2 小时内响应、不可逆操作是否有预演记录。四项都能对上,这套基线才适用。

系列导航

全部文章 game Indie golang 客户端开发 Minigame Saas rust Python Java cg