You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带缓存的flakey测试套件:多变量试验成功前期望次数计算问询

量化Flakey测试导致的期望重试次数

这个问题刚好戳中了很多开发团队的痛点——flakey测试简直是隐形的时间小偷!咱们用概率论的方法一步步拆解,算出成功前的期望试验次数。

核心思路:容斥原理+期望线性性

先明确规则:每次运行套件时,只跑之前没通过的测试,通过的会被缓存;直到所有测试都通过为止,我们要算总共需要运行多少次的期望值。

这里的关键技巧是利用期望的线性性结合容斥原理,最终可以推导出通用公式:

$$
E = \sum_{k=1}^n (-1)^{k+1} \cdot \sum_{1 \leq i_1 < i_2 < \dots < i_k \leq n} \frac{1}{1 - \prod_{j=1}^k (1-p_{i_j})}
$$

公式拆解(人话版)

我们一步步拆解这个公式的含义:

  1. 单个测试的情况:当只有一个测试$T_i$时,k=1,公式简化为$\frac{1}{p_i}$——这就是几何分布的期望,很直观:每次成功概率是$p_i$,平均需要$\frac{1}{p_i}$次才能通过。
  2. 两个测试的情况:比如$T_1(p_1)$和$T_2(p_2)$,公式变成:
    $$
    E = \frac{1}{p_1} + \frac{1}{p_2} - \frac{1}{1 - (1-p_1)(1-p_2)}
    $$
    举个例子:如果两个测试的成功概率都是0.5,代入得$E=2+2-\frac{1}{0.75}=\frac{8}{3}≈2.67$次,和实际推导的结果完全一致。
  3. n个测试的通用情况:
    • 先计算所有单个测试的期望重试次数之和(k=1的项);
    • 再减去所有两两测试组合的“重复计算”部分(k=2的项)——因为一次运行可能同时通过两个测试,避免重复统计;
    • 接着加回三个测试组合的修正项(k=3的项),以此类推,直到k=n的最后一项。

特殊场景简化

如果所有测试的成功概率都是$p$,公式可以进一步简化为:
$$
E = \sum_{k=1}^n (-1)^{k+1} \cdot \binom{n}{k} \cdot \frac{1}{1 - (1-p)^k}
$$
比如3个测试,每个成功概率0.5,代入得$E≈3.14$次,完全符合实际场景的预期。

实际意义

这个公式能帮你实打实量化时间损耗:比如每次运行测试套件需要5分钟,期望重试次数是3,那平均每次checkin要花15分钟在测试上——和无flakey测试的5分钟比,差值就是团队被浪费的时间。你还可以单独计算某个flakey测试的贡献,判断是否值得投入精力优先修复它。

内容的提问来源于stack exchange,提问作者Airball

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:47:12