专业书籍精读 · 持续交付 · 第 9 章

非功能需求测试

Continuous Delivery · Ch 9 · Jez Humble & David Farley · 2010

EN →

这一章讲什么?

抢演唱会门票的那一刻,App 转圈、然后告诉你「系统繁忙」。功能其实都写好了——按钮在、订单流程通——它只是扛不住那么多人同时来。《持续交付》第 9 章讲的就是这类要求:够快、扛得住、不被黑。怎么把它们提前变成机器每天能自动检查的事,而不是上线那天才知道。

打个比方

盖房子有两种要求。一种是有几间房、厨房能不能做饭——一看就知道做没做到。另一种是楼板能站多少人、隔音好不好、着火能撑多久。第二种不是装修时再补的,它在打地基那天就被决定了;而且验收时你得真的把一百个人请上楼板站一站,光看图纸没用。这一章讲的,就是软件里第二种要求怎么验。

旧世界为什么难

难点不在测,在于这类要求通常写成一句没法判对错的话:「系统要快」「要能支撑大量用户」。没人能说清做到没有,于是它被推到最后——上线前一周找几个人点一点,或者干脆等真实用户来测。等到那时才发现扛不住,问题往往出在最底下的结构里,改起来等于翻修地基。

核心机制直觉

这一章的办法就两步,都很朴素。

第一步,把话说死。「要快」改写成「一千个人同时下单时,九成五的人能在 0.8 秒内看到结果,连续一小时不掉队」。这样它就从愿望变成了一道能判对错的题。

第二步,把现成的脚本复制一万份。 上一章(自动化验收测试)已经写好了「机器自己走一遍下单流程」的脚本。压测不用另起炉灶:把同一批脚本同时跑上几千份,看系统在哪一步开始变慢、在哪一步塌掉。机器每天自动跑、不过关就亮红灯——和跑普通测试没有本质区别。

最大的那个坑

排练场不是真场地。 公司很少舍得为压测再配一整套和生产一样的机器,于是拿一台小机器测,再乘以三十。可小机器上数据只有十万条、生产是十亿条;小机器上什么都在缓存里、生产上要去翻硬盘。这个乘法几乎总是错的——书里的态度很实在:环境越像生产,数字才越可信;不像的时候,只能拿它看「这次比上次慢了吗」,别拿它承诺「我们能扛住多少」。

代价也说清楚:这类测试又慢又贵,一轮几十分钟起、还要占一整套机器,所以它不该卡在每个人每次提交的路上。

一句话记住

把「够快」「扛得住」写成带数字、能判对错的一句话,复用已有的测试脚本把它做成流水线里一道会亮红灯的关卡;同时记住,缩水的测试环境只能看趋势,不能当承诺。

想看容量拐点曲线、注入器架构和环境失真的对比表? → 切到精读版