智测 OpenQA

行业与实践研究与基准测试

LLM 生成测试套件的覆盖率与变异分数是否与其有效性相关(下篇)

智测团队 · OpenQA(openqa.cn)阅读约 29 分钟

LLM 生成测试套件的覆盖率与变异分数是否与其有效性相关(下)(中文全译)

本文目录

LLM 生成测试套件的覆盖率与变异分数是否与其有效性相关(下)(中文全译)

上篇:https://openqa.cn/articles/coverage-mutation-correlation-zh本篇从「## 4. RQ1:覆盖率与变异分数之间的相关性」继续。

4. RQ1:覆盖率与变异分数之间的相关性

对于 RQ1,我们通过分析 LLM 生成测试的覆盖率与测试有效性(以变异分数作为代理)之间的相关性,来复现 Inozemtseva 等人的研究。我们镜像原工作的结构,并针对同一组相关分析报告结果。

4.1. 规模是否与变异分数相关?

Inozemtseva 等人报告,测试套件规模与原始变异分数、归一化变异分数之间都存在强正相关。为考察这一结论能否迁移到 LLM 生成的测试,我们进行类似分析,但有一处关键差异。我们并不像先前工作那样,通过从项目范围的测试池抽样来构造预先指定规模的套件,而是利用 LLM 生成测试套件规模的自然变异。我们随机抽样的 LLM 生成测试套件已经跨越很宽的测试数量范围,使我们能够直接计算所生成测试数量与变异分数之间的相关性。这一设定也更好地反映了实践中套件规模为何会变化:差异在很大程度上由被测代码的特征与测试需求驱动,而不是由人工强制一个目标规模驱动。

表 3. 来自全部模型的测试套件上,测试数量(平均聚合取平均,累计聚合取求和)与两类变异分数之间的相关性;所有条目均显著(\(p < 0.05\))。

平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
原始变异分数0.0310.0340.0290.017
归一化变异分数0.0980.066-0.112-0.047

我们从合并视图开始。如表 3 所示,在平均聚合与累计聚合下,测试套件规模与原始变异分数、归一化变异分数之间的相关性一律为弱。随后我们从模型内视图考察同一关系,以评估该趋势是否因 LLM 而异。图 2 报告模型内相关性;与汇集分析相比,这些相关性在许多情况下略高,但对每个模型仍为弱。最后我们考虑模型间视图:表 4 显示,这些模型层面的相关性同样为弱,且在统计上不显著。总体而言,与 Inozemtseva 等人相反,在合并、模型内与模型间分析中,我们观察到 LLM 生成测试套件的测试套件规模与原始及归一化变异分数之间仅为弱到可忽略的相关。这表明,生成更多测试的 LLM,并不必然产生杀死变异体能力更强的测试套件。

图 2. 未约束设定下,测试套件规模与变异分数(原始与归一化)之间相关性的箱线图。每个点是由模型特定的抽样测试套件组合计算出的相关性;箱体按聚合类型(平均对累计)与统计量(Pearson \(r\) 对 Kendall \(\tau\))对这些相关性分组。该图汇总各模型在测试套件规模与原始及归一化变异分数之间的相关系数。

表 4. 测试数量(平均聚合取平均,累计聚合取求和)与变异分数之间的模型间相关性;\(p\) 值报告在括号中。

平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
原始变异分数0.185 (0.546)0.205 (0.367)0.259 (0.393)0.231 (0.306)
归一化变异分数0.093 (0.761)0.026 (0.952)-0.347 (0.245)-0.231 (0.306)

4.2. 忽略规模时,覆盖率是否与变异分数相关?

接下来,我们在不控制测试套件规模的情况下考察覆盖率与变异分数之间的关系。表 5 汇总合并视图的结果。在平均聚合与累计聚合下,各类覆盖率与各变异分数变体之间的相关性始终为弱:几乎所有系数都低于 0.4,唯一例外是平均语句覆盖率与平均归一化变异分数之间的 Pearson 相关(0.443),刚刚超过“中等”阈值。同一模式在各个模型内部成立。如图 3 所示,模型内相关性通常甚至弱于汇集分析中的相关性:系数紧密聚集在零附近,并且在大多数设定中保持在 0.2 以下。

表 5. 来自全部模型的随机选取测试套件组合上,覆盖率与变异分数之间的相关性,分别按平均聚合与累计聚合报告;除累计聚合下归一化变异分数与语句覆盖率之间的相关外,所有条目均显著(\(p < 0.05\))。

覆盖率变异分数平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
语句原始0.3560.2500.2060.162
语句归一化0.4430.272-0.009-0.004
分支原始0.3790.2700.1420.109
分支归一化0.3480.2380.0320.022
MCC原始0.2670.1860.1180.092
MCC归一化0.3390.218-0.087-0.064

(a)语句覆盖率对变异分数。

(b)分支覆盖率对变异分数。

(c)修正条件覆盖率对变异分数。

图 3. 忽略测试套件规模时,覆盖率(语句、分支与修正条件)与变异分数(原始与归一化)之间相关性的箱线图。每个点是由模型特定的抽样测试套件组合计算出的相关性;箱体按聚合类型(平均对累计)与统计量(Pearson \(r\) 对 Kendall \(\tau\))对这些相关性分组。该图汇总各模型在语句、分支与修正条件覆盖率同原始及归一化变异分数之间的相关系数。

模型内视图下甚至更弱的相关性提示:合并分析中略强一些的相关性,可能是由模型之间的差异驱动,而不是由单个模型内部的变异驱动。我们在模型间分析中确认了这一点。表 6 显示,在平均聚合下,对大多数覆盖率—变异组合,相关性明显上升。尽管该视图样本量较小(13 个数据点),大多数系数仍在统计上显著(\(p < 0.05\)),表明取得更高平均覆盖率的模型,也倾向于取得更高的平均变异分数。

表 6. 将测试统计聚合为每个模型一个数据点后,覆盖率与变异分数之间的相关性,在忽略测试套件规模时分别按平均聚合与累计聚合报告;\(p\) 值报告在括号中。

覆盖率变异分数平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
语句原始0.676 (0.011)0.462 (0.030)0.383 (0.197)0.410 (0.057)
语句归一化0.738 (0.004)0.538 (0.010)-0.047 (0.880)-0.051 (0.858)
分支原始0.821 (0.001)0.641 (0.002)0.246 (0.419)0.154 (0.510)
分支归一化0.596 (0.032)0.410 (0.057)0.035 (0.909)0.051 (0.858)
MCC原始0.541 (0.057)0.385 (0.076)0.289 (0.339)0.308 (0.163)
MCC归一化0.625 (0.022)0.462 (0.030)-0.124 (0.686)-0.051 (0.858)

4.3. 固定规模时,覆盖率是否与变异分数相关?

现在我们在控制测试套件规模之后,分析覆盖率与变异分数之间的相关性。受篇幅限制,我们省略合并视图与模型内视图的全部系数,并在此概括结果。总体而言,这些规模受控的结果镜像未约束设定:无论我们跨所有模型汇集套件,还是分别分析每个模型,覆盖率与变异分数之间的相关性在所有被测试的套件规模上仍为弱。更有趣的问题是,早先观察到的中等到强的模型间相关,在套件规模固定之后是否仍然存在。

表 7. 将测试统计聚合为每个模型一个数据点后,在不同固定测试套件规模下,覆盖率与变异分数之间的相关性;\(p\) 值报告在括号中。

套件规模 \(k\)覆盖率变异分数平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
3语句原始0.190 (0.534)0.103 (0.675)-0.144 (0.639)-0.103 (0.675)
3语句归一化0.642 (0.018)0.410 (0.057)-0.251 (0.409)-0.128 (0.590)
3分支原始0.525 (0.066)0.282 (0.204)-0.102 (0.739)-0.026 (0.952)
3分支归一化0.579 (0.038)0.487 (0.022)0.036 (0.907)0.000 (1.000)
3MCC原始0.035 (0.910)0.000 (1.000)0.156 (0.610)0.051 (0.858)
3MCC归一化0.669 (0.012)0.462 (0.030)0.127 (0.680)0.128 (0.590)
5语句原始0.476 (0.100)0.385 (0.076)0.489 (0.090)0.282 (0.204)
5语句归一化0.462 (0.112)0.282 (0.204)0.009 (0.977)0.103 (0.675)
5分支原始0.699 (0.008)0.513 (0.015)-0.001 (0.997)-0.154 (0.510)
5分支归一化0.323 (0.282)0.256 (0.252)0.165 (0.589)0.179 (0.435)
5MCC原始0.476 (0.100)0.410 (0.057)0.015 (0.962)-0.077 (0.765)
5MCC归一化0.526 (0.065)0.410 (0.057)-0.283 (0.350)-0.154 (0.510)
10语句原始0.632 (0.021)0.590 (0.004)0.140 (0.648)0.179 (0.435)
10语句归一化0.688 (0.009)0.513 (0.015)-0.263 (0.386)-0.282 (0.204)
10分支原始0.780 (0.002)0.692 (0.001)0.054 (0.860)-0.154 (0.510)
10分支归一化0.528 (0.064)0.410 (0.057)0.072 (0.816)-0.103 (0.675)
10MCC原始0.550 (0.052)0.462 (0.030)0.095 (0.759)0.077 (0.765)
10MCC归一化0.652 (0.016)0.487 (0.022)-0.492 (0.088)-0.333 (0.129)

表 7 报告模型间结果。在统计上显著(\(p < 0.05\))的系数中,相关性相对于规模未约束设定总体下降,但它们通常为中等,并且在某些情况下为强(例如 \(k = 10\) 时分支覆盖率对原始变异分数,\(r = 0.780\))。这一模式不同于 Inozemtseva 等人:他们报告,一旦控制套件规模,覆盖率与归一化变异分数仅弱相关,与原始变异分数仅中等相关。总体而言,我们的结果表明,即使在控制套件规模之后,覆盖率在模型间层面仍能对杀死变异体的强度提供一定指示。

4.4. 不同覆盖类型之间的相关性

除分析覆盖率对变异分数之外,Inozemtseva 等人还考察了不同覆盖率指标之间的相关性,并发现各覆盖类型之间存在非常强的关系。我们针对 LLM 生成的测试套件复现这一分析。表 8 报告在平均聚合与累计聚合下,未约束套件(All)与规模受控套件中,语句覆盖、分支覆盖与修正条件覆盖之间的相关性。

我们的结果在若干方面不同于 Inozemtseva 等人所报告的结果。当套件规模未受约束时,覆盖率指标在平均聚合下强相关,但不如 2014 年报告的近乎完美的关系那么强(例如,所有覆盖类型之间 Pearson 与 Kendall \(\tau\) 的系数都高于 0.9)。Pearson 相关通常仍为强,而 Kendall \(\tau\) 常常只是中等。在累计聚合下,语句覆盖与分支覆盖仍强相关,但涉及修正条件覆盖的相关常常降到中等或弱。一旦控制套件规模,这些差距进一步扩大:在累计聚合下,修正条件覆盖有时与语句覆盖、分支覆盖仅弱相关,而在平均聚合下这些关系大多仍为中等到强。总体而言,这些结果并不支持 Inozemtseva 等人的主张,即在我们的 LLM 生成设定中,不同覆盖类型本质上在度量同一件事。

表 8. 抽样测试套件组合上不同覆盖率指标(语句、分支与修正条件)之间的相关性,针对未约束设定(All)以及固定套件规模 \(k \in \{3, 5, 10\}\) 报告。\(p\) 值报告在括号中。

套件规模 \(k\)覆盖率对平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
All语句对分支0.753 (0.0)0.553 (0.0)0.857 (0.0)0.675 (0.0)
All语句对 MCC0.885 (0.0)0.694 (0.0)0.319 (\(2.58 \times 10^{-304}\))0.222 (0.0)
All分支对 MCC0.709 (0.0)0.510 (0.0)0.400 (0.0)0.271 (0.0)
3语句对分支0.663 (0.0)0.468 (0.0)0.811 (0.0)0.614 (0.0)
3语句对 MCC0.789 (0.0)0.572 (0.0)-0.003 (0.735)0.005 (0.408)
3分支对 MCC0.458 (0.0)0.303 (0.0)-0.059 (\(1.99 \times 10^{-11}\))-0.037 (\(2.00 \times 10^{-10}\))
5语句对分支0.690 (0.0)0.496 (0.0)0.699 (0.0)0.506 (0.0)
5语句对 MCC0.839 (0.0)0.639 (0.0)0.209 (\(1.15 \times 10^{-128}\))0.141 (\(3.99 \times 10^{-129}\))
5分支对 MCC0.605 (0.0)0.413 (0.0)-0.021 (0.018)-0.008 (0.190)
10语句对分支0.715 (0.0)0.517 (0.0)0.772 (0.0)0.566 (0.0)
10语句对 MCC0.878 (0.0)0.683 (0.0)0.189 (\(2.11 \times 10^{-104}\))0.130 (\(2.87 \times 10^{-110}\))
10分支对 MCC0.665 (0.0)0.467 (0.0)0.034 (\(8.71 \times 10^{-5}\))0.027 (\(3.69 \times 10^{-6}\))

4.5. RQ1 小结

总体而言,我们观察到若干偏离原发现之处:

  1. 测试套件规模对变异分数。 对 LLM 生成的测试,套件规模与原始及归一化变异分数都只弱相关,表明生成更多测试并不必然提升杀死变异体的能力。
  2. 不控制规模时的覆盖率对变异分数。 在不控制套件规模时,覆盖率—变异相关性在合并视图与模型内视图中均为弱。然而在模型间视图中,在平均聚合下覆盖率与变异分数变为中等到强相关,表明覆盖率对比较模型具有信息量。
  3. 控制规模时的覆盖率对变异分数。 固定套件规模之后,相关性在合并视图与模型内视图中仍为弱;在模型间视图中它们总体下降,但常常仍为中等到强,这强化了如下判断:覆盖率对模型比较比对区分同一模型内部的套件更有信息量。
  4. 覆盖率指标之间的相关。 各覆盖准则之间的相关性弱于 Inozemtseva 等人所报告的结果;在累计聚合下,修正条件覆盖可以与语句覆盖、分支覆盖仅弱相关,表明不同覆盖类型不可互换。

5. RQ2:覆盖率与真实缺陷检测之间的相关性

在 RQ2 中,我们不再像 Inozemtseva 等人那样把变异分数当作代理,而是以真实缺陷检测比率作为有效性度量,分析覆盖率与该比率之间的相关性。

5.1. 测试套件规模是否与真实缺陷检测相关?

除非另有说明,本节及随后两小节中的分析使用由焦点方法的无缺陷(已修复)版本生成的测试套件;含缺陷输入设定在第 5.4 节考察。与 RQ1 一样,我们从考察测试套件规模开始。总体趋势在合并视图与模型内视图中是一致的,相关系数保持为弱。在模型间视图中,相关性略微上升到大约 0.4,但仍刚好低于中等阈值,且在统计上不显著,这很可能是由于样本量较小。总体而言,这些结果表明,对 LLM 生成的测试,测试套件规模与真实缺陷检测比率并不强相关,这与我们在变异分数上观察到的弱关系相呼应。

表 9. 来自全部模型的随机选取测试套件组合上,覆盖率与缺陷检测比率之间的相关性;所有条目均显著(\(p < 0.05\))。

覆盖率指标平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
语句0.3680.2500.4730.336
分支0.3850.2660.4810.337
MCC0.3790.2610.1900.127

5.2. 忽略测试规模时,覆盖率是否与真实缺陷检测相关?

覆盖率对真实缺陷检测的总体模式,镜像了我们在覆盖率对变异分数上所观察到的情况。在合并视图(表 9)中,覆盖率与缺陷检测有效性呈现弱到中等的相关:所有系数都保持在 0.5 以下,累计修正条件覆盖是最明显的离群点(\(r = 0.190\))。与覆盖率—变异分析一样,切换到模型内视图会得到弱得多的相关性(通常低于 0.2)。这一下降提示,合并视图中较强的相关可能主要由模型之间的差异驱动,从而促使我们更仔细地查看模型间视图。

表 10. 覆盖率与缺陷检测比率之间的模型间相关性,统计被聚合为每个模型一个数据点;\(p\) 值报告在括号中。

覆盖率指标平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
语句0.617 (0.025)0.477 (0.024)0.619 (0.024)0.555 (0.0086)
分支0.861 (\(1.6 \times 10^{-4}\))0.761 (\(3.1 \times 10^{-4}\))0.542 (0.056)0.400 (0.058)
MCC0.573 (0.041)0.503 (0.017)0.504 (0.079)0.452 (0.032)

我们在表 10 中报告模型间结果。总体而言,覆盖率与缺陷检测比率之间的相关性为中等到强,并且最强的相关也是统计上最显著的。特别是,平均分支覆盖率与缺陷检测比率呈现强关系,并给出最小的 \(p\) 值。与变异分数的结果不同,累计覆盖率指标与缺陷检测比率也保持中等相关;其中,语句覆盖既在统计上显著、又相对较强。总体而言,这些结果表明,在比较不同模型时,覆盖率可以是缺陷检测有效性的有用指示器。

表 11. 覆盖率与缺陷检测比率之间的模型间相关性,统计被聚合为每个模型一个数据点,针对不同固定测试套件规模 \(k\) 报告。\(p\) 值报告在括号中。

\(k\)覆盖率指标平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
3语句0.205 (0.501)0.222 (0.297)0.384 (0.195)0.118 (0.581)
3分支0.679 (0.011)0.405 (0.057)0.351 (0.240)0.248 (0.244)
3MCC0.098 (0.751)0.118 (0.581)-0.175 (0.568)-0.118 (0.581)
5语句0.528 (0.064)0.536 (0.012)0.690 (0.0091)0.484 (0.023)
5分支0.855 (\(2.0 \times 10^{-4}\))0.667 (0.0017)0.183 (0.549)-0.013 (0.951)
5MCC0.554 (0.050)0.510 (0.017)0.104 (0.735)0.144 (0.499)
10语句0.589 (0.034)0.529 (0.012)0.496 (0.085)0.297 (0.160)
10分支0.858 (\(1.7 \times 10^{-4}\))0.735 (\(4.9 \times 10^{-4}\))0.353 (0.237)0.168 (0.427)
10MCC0.587 (0.035)0.555 (0.0086)0.121 (0.694)0.142 (0.501)

5.3. 固定测试规模时,覆盖率是否与真实缺陷检测相关?

与规模未约束设定一样,模型内相关性仍为弱;合并视图的相关性始终更强,但一旦控制套件规模就落到中等阈值以下。由于这些趋势镜像了我们在变异分数上所观察到的情况,此处省略其详细讨论,并聚焦于模型间分析。表 11 报告每个固定套件规模下按模型的相关性。在统计上显著的结果中,相关性始终为中等到强,分支覆盖尤其突出:它对 \(k = 5\) 与 \(k = 10\) 为强,对 \(k = 3\) 仍刚好低于“强”阈值(\(r = 0.679\))。在累计聚合下,相关性相对于未约束设定总体下降,唯一在统计上显著的相关出现在 \(k = 5\) 时的语句覆盖与缺陷检测之间。

总体而言,固定规模的模型间结果强化了我们早先的发现:在比较模型时,覆盖率可以是缺陷检测有效性的有意义指示器。信号对平均分支覆盖最强,表明不同覆盖类型确实可以传达关于 LLM 生成测试之实践有效性的不同信息。

无缺陷焦点方法

public static boolean equals(CharSequence cs1,
 CharSequence cs2) {
 if (cs1 == cs2) return true;
 if (cs1 == null || cs2 == null) return false;
 if (cs1 instanceof String && cs2 instanceof String)
 return cs1.equals(cs2);
 return CharSequenceUtils.regionMatches(cs1, false, 0,
 cs2, 0, Math.max(cs1.length(), cs2.length()));
}

含缺陷焦点方法

public static boolean equals(CharSequence cs1,
 CharSequence cs2) {
 if (cs1 == cs2) return true;
 if (cs1 == null || cs2 == null) return false;
 return cs1.equals(cs2);
}

⇓ 由 LLM 生成的测试 ⇓

断言预期行为

@Test
public void testEquals_stringBuilder() {
 assertTrue(StringUtils.equals("abc",
 new StringBuilder("abc")));
}

断言含缺陷行为

@Test
public void testEquals_stringBuilder() {
 assertFalse(StringUtils.equals("abc",
 new StringBuilder("abc")));
}

图 4. 代表性示例:使用同一 LLM 与同一提示模板,比较由 StringUtils.equals(Defects4J Lang-14)的无缺陷实现(左)与含缺陷实现(右)生成的测试。上行展示提供给模型的焦点方法体,下行展示相应生成的测试方法。高亮文本标出两种实现之间、以及两个生成测试之间的关键差异。该图并排比较 StringUtils.equals 的无缺陷实现与含缺陷实现,以及 LLM 分别从二者生成的测试;由含缺陷实现生成的测试断言的是含缺陷的行为。

5.4. 当输入代码含有缺陷时,我们观察到的强相关是否仍然成立?

迄今为止的模型间分析表明,覆盖率可以与缺陷检测有效性中等相关,对某些指标甚至强相关——但这一证据是在测试由无缺陷代码生成时获得的。然而在实践中,被测代码的正确性并不能得到保证,测试的目标常常是暴露含缺陷代码本身中的缺陷。Huang 等人(Huang 等人,2025)的先前工作表明,用含缺陷代码提示 LLM 仍能产生暴露该缺陷的测试,但这类能够检测缺陷的测试的数量,大大低于由对应的无缺陷代码生成测试时的数量。一个主要原因是,LLM 可能被含缺陷的实现误导,生成断言含缺陷代码之错误行为、而非预期行为的测试。

图 4 用 Defects4J 中 Lang-14 的 StringUtils.equals 说明了这样一种情形。该方法旨在比较两个 CharSequence 对象的内容,其中 CharSequence 是由 String、StringBuilder 与 StringBuffer 等常见文本类型实现的 Java 接口。因此,尽管具体类型不同,"abc" 与 new StringBuilder("abc") 应当被视为相等。无缺陷实现通过 regionMatches 处理这一情形,而含缺陷实现直接调用 cs1.equals(cs2)。由于 String.equals 仅当其参数也是内容相同的 String 时才返回 true,在比较 String 与 StringBuilder 时它返回 false。当用这一含缺陷实现提示时,LLM 把这种错误行为当作预期行为,并生成一个通过 assertFalse 断言不正确结果的测试;相比之下,由无缺陷实现生成的测试用 assertTrue 断言预期行为。该示例说明,由含缺陷代码生成的测试可以编码无缺陷实现中并不存在的错误行为。

尽管如此,在含缺陷代码上取得更高覆盖率是否有帮助,仍然不清楚:即使 LLM 把错误行为当作预期行为,从而产生更弱或不正确的断言,行使实现中更广的部分,原则上仍可能增加触发并暴露含缺陷行为的机会。

为考察这一点,我们重复用于无缺陷代码的同一相关分析程序,但改为由含缺陷输入生成测试,并把在含缺陷版本上测得的覆盖率与缺陷检测有效性相关联。受篇幅限制,并且由于该趋势在所有设定中是一致的,我们不在此报告全部系数;完整统计可在我们的复现包中获得。概括而言,在合并、模型内与模型间视图下,相关性均为弱。尽管这一结果并不完全出人意料——含缺陷代码上的覆盖率并不必然说明测试是否会检测到该缺陷——它与无缺陷设定的对比在实践上很重要,因为它凸显了近期基于 LLM 的测试评估与测试生成实践的一个关键局限:这些实践主要假定以无缺陷代码作为输入。

5.5. RQ2 小结

总体而言,对由无缺陷代码生成的测试套件,覆盖率与真实缺陷检测的相关强于 RQ1 中与变异分数的相关:在跨模型比较时,大多数覆盖率指标与缺陷检测有效性中等相关,某些准则呈现强相关。然而,当被测代码含有缺陷时,覆盖率与缺陷检测之间的相关性在全部三种视图中一律为弱,表明在含缺陷代码上测得的覆盖率,并不能说明所生成的测试是否检测到该缺陷。

6. RQ3:变异与真实缺陷检测之间的相关性

对于 RQ3,我们利用来自 RQ1 与 RQ2 的数据,复现 Papadakis 等人关于变异分数与真实缺陷检测有效性之间关系的分析,对象是 LLM 生成的测试。

6.1. 忽略测试规模时,变异分数是否与真实缺陷检测相关?

我们从合并视图开始(表 12)。变异分数与缺陷检测比率之间的 Pearson 相关,在平均聚合下为中等(0.475–0.511),而相应的 Kendall \(\tau\) 保持在中等阈值以下;累计聚合下的相关性为弱。在模型内视图中,相关性对所有模型与所有指标类型都降为弱(为简洁起见省略详细结果)。这一模式镜像 RQ1 与 RQ2,提示任何更强的关系若存在,更可能出现在模型间层面。

表 12. 来自全部模型的随机选取测试套件组合上,变异与缺陷检测比率之间的相关性,分别按平均聚合与累计聚合报告;所有条目均显著(\(p < 0.05\))。

变异分数平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
原始0.4750.3200.1460.110
归一化0.5110.3730.1960.123

表 13 报告模型间结果。在两种聚合方案下,原始变异分数与缺陷检测有效性的关联最强:在平均聚合下相关为强,在累计聚合下为中等。这表明,在比较模型时,原始变异分数可以作为缺陷检测有效性的有用指示器。值得注意的是,相关最强的指标变体不同于合并视图与模型内视图中的情形。这一模式与较早的研究问题形成对照——在那些研究问题中,指标变体的相对排序在各视图间更为一致——从而强化了报告多种指标变体的重要性。

表 13. 变异与缺陷检测比率之间的模型间相关性,统计被聚合为每个模型一个数据点;\(p\) 值报告在括号中。

变异分数平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
原始0.863 (\(1.44 \times 10^{-4}\))0.761 (\(3.11 \times 10^{-4}\))0.622 (0.023)0.529 (0.012)
归一化0.493 (0.087)0.374 (0.076)-0.077 (0.803)-0.039 (0.855)

6.2. 固定测试规模时,变异分数是否与真实缺陷检测相关?

在合并视图与模型内视图中,规模受控的结果大体遵循与规模未约束设定相同的总体趋势;因此,为简洁起见我们省略详细系数,并在此概括结果。在两种视图中,相关性仍为弱,模型内相关性始终弱于合并结果,平均聚合始终强于累计聚合。在模型间视图(表 14)中,控制套件规模之后相关性略有下降,但对原始变异分数,在平均聚合与累计聚合下大多仍为中等到强且在统计上显著,这强化了我们上一节的观察。

表 14. 在固定测试套件规模 \(k\) 下,变异与缺陷检测比率之间的模型间相关性,统计被聚合为每个模型一个数据点;\(p\) 值报告在括号中。

套件规模 \(k\)变异分数平均聚合 Pearson \(r\)平均聚合 Kendall \(\tau\)累计聚合 Pearson \(r\)累计聚合 Kendall \(\tau\)
3原始0.702 (0.007)0.510 (0.017)0.585 (0.036)0.405 (0.057)
3归一化0.354 (0.236)0.222 (0.297)0.186 (0.542)0.013 (0.951)
5原始0.695 (0.008)0.510 (0.017)0.533 (0.061)0.301 (0.158)
5归一化0.386 (0.192)0.275 (0.197)-0.186 (0.542)-0.118 (0.580)
10原始0.833 (\(4.05 \times 10^{-4}\))0.658 (\(1.83 \times 10^{-3}\))0.600 (0.030)0.477 (0.024)
10归一化0.532 (0.061)0.426 (0.044)-0.085 (0.783)0.013 (0.951)

6.3. RQ3 小结

对于 RQ3,我们再次观察到对 Papadakis 等人原发现的偏离。对 LLM 生成的测试,无论是否控制测试套件规模,变异分数与真实缺陷检测比率之间的相关性在合并视图中至多为中等,在模型内视图中为弱。相比之下,在模型间视图中,缺陷检测与原始变异分数在平均聚合与累计聚合下都为中等到强相关,表明原始变异分数对比较各模型的缺陷检测有效性可以具有信息量。

我们还观察到与早先结果不同的模式:此前差异更常归因于聚合方式的选择(平均对累计),而不是变异分数变体本身;而在 RQ3 中,变异分数变体扮演了更大的角色。总体而言,这些发现促使我们在两种聚合方案下报告多种指标。

7. 讨论

基于我们的发现,我们总结一组启示、洞见与可操作建议。我们相信它们可以为评估用于测试生成的 LLM、以及解读评估结果,提供更好的实践参考。

① 覆盖率与变异可以具有信息量,但仅在某些条件下。 与 Inozemtseva 等人及 Papadakis 等人的结论相反,我们发现,即使控制了测试套件规模,覆盖率与变异仍可以指示缺陷检测有效性。然而,这只在某些设定中成立。当可以合理假定提供给 LLM 的代码无缺陷时(例如目标是检测未来变更所引入缺陷的回归式场景),在跨模型比较时,更高的覆盖率与变异分数常常与更高的真实缺陷检测有效性同时出现。在更实践的设定中——被测代码可能已经含有缺陷,且目标是暴露该既有缺陷——覆盖率对缺陷检测有效性失去预测力,变异测试也不适用。

② 在被测代码含有缺陷这一实践场景下评估 LLM。 鉴于我们在含缺陷代码设定中观察到覆盖率与缺陷检测有效性之间的弱相关——再加上变异分析的适用性有限——我们强调,需要直接评估 LLM 生成能够检测被测代码中缺陷的测试的能力。这一结论与 Huang 等人(Huang 等人,2025)一致:他们表明,当输入代码含有缺陷时,模型的缺陷检测有效性大幅下降。综合来看,这些发现促使进一步研究能够提升 LLM 生成暴露既有缺陷之测试的能力的方法。

③ 不同覆盖准则提供互补信号。 Inozemtseva 等人报告不同覆盖率指标之间存在非常强的相关,并得出结论:“此外,使用更简单的覆盖率度量可能最符合开发者的利益。这些度量对套件有效性提供相近数量的信息,但引入更少的度量开销。”然而我们发现,对 LLM 生成的测试,这一结论并不成立。在我们的结果中,各覆盖准则之间的相关性依具体配对仅为中等到强,并且这一模式主要在平均聚合下观察到。在累计聚合下,修正条件覆盖与语句覆盖、分支覆盖仅弱相关。这些观察表明,报告多种覆盖准则——包括修正条件覆盖等更严格的准则——可以为 LLM 生成的测试套件提供额外信息。这也与安全关键领域的工业实践一致:DO-178B 等标准要求充分的修正条件/判定覆盖(Hayhurst 与 Veerhusen,2001)。

④ 测试套件规模真的是混杂因素吗? 尽管 Inozemtseva 等人与 Papadakis 等人都主张,测试套件规模是覆盖率、变异与真实缺陷检测之间关系中的强混杂因素,我们针对 LLM 生成测试的结果几乎不支持这一结论。我们发现,测试套件规模与变异分数、以及与真实缺陷检测比率都只弱相关;在缺陷检测的模型间视图中,至多向中等阈值有适度上升。我们进一步考察测试套件规模与覆盖率之间的相关性,再次没有观察到强关系。此外,从未约束规模设定转到固定规模设定,相关性只出现小幅下降:它们大体保持其定性强度,只是偶尔从强降到中等。综合来看,这些结果表明,测试套件规模不太可能是我们所观察到的强相关的主要驱动因素。

⑤ 为什么我们关于测试套件规模的结论与先前工作有实质性差异? 本研究中测试套件规模较弱的混杂效应,很可能源于不同规模测试套件的构造方式。在我们的设定中,每个测试套件由 LLM 针对单个焦点方法生成,因此套件规模的差异很可能反映的是:为行使验证该方法预期功能所需的那组行为,需要多少测试。从这个意义上说,套件规模的变异自然来自焦点方法的测试需求,而不是来自外部强加的目标规模,因此不太可能对其他指标施加强混杂效应。相比之下,先前研究通过从项目范围的测试池中抽样指定数量的测试来构造套件。在该设定下,每个被抽样的测试只贡献整体行为空间的一部分,因此更大的抽样套件会机械地聚合更多这类部分贡献,并仅仅因为包含更多测试而倾向于取得更高的覆盖率、更多的变异体杀死与更多的缺陷检测,从而造成更强的由规模驱动的混杂效应。

⑥ 应当如何解读 LLM 生成测试套件中与测试套件规模相关的指标? 我们对 ④ 与 ⑤ 的讨论,也说明了应如何解读测试正确性度量(例如能够编译或通过的生成测试的数量或比例)。这些度量在 LLM 测试生成评估中被普遍报告(Yang 等人,2024;Schäfer 等人,2024;Yuan 等人,2024)。尽管产生更多“正确”的测试是可取的,正确性度量不应与缺陷检测有效性混为一谈;它们更好地被看作成本效益的度量。特别是,更高比例的可编译/通过测试表明,浪费在不可用输出上的生成预算更少。

⑦ 还有哪些因素可能导致我们的发现与先前研究之间的分歧? 除 ⑤ 中讨论的测试套件构造差异之外,我们识别出另外两处差异,它们可能有助于解释我们的发现为何偏离先前研究。第一,基于 LLM 的测试生成不同于人工编写测试,也不同于传统自动化测试生成,因为待行使的行为与断言预言都条件于提示、焦点方法以及周围的代码上下文。相比之下,人工编写的测试常常由开发者对预期行为的理解所引导,而传统自动化工具通常以实现为输入,并通过在该实现上优化覆盖率或变异等结构性测试目标来生成回归测试。第二,我们在多种粒度上考察相关性,包括合并、模型内与模型间分析,揭示相关性可以因视角不同而有实质性变化;先前研究并未以同样方式进行这种分析。

8. 效度威胁

外部效度。

外部效度关注我们的发现在所研究设定之外的可推广性。遵循 Inozemtseva 等人的范围,我们聚焦大型开源 Java 项目,并使用 Defects4J——它在先前自动化测试研究与近期基于 LLM 的单元测试生成评估中都被广泛采用。为降低结果由小样本或特定模型驱动的风险,我们在 11 个前沿 LLM 上进行实验,并分析超过 100,000 个互不相同的生成测试用例。尽管如此,我们的结论限于 Java 生态系统与 Defects4J 项目的特征,未必能完全推广到其他编程语言或项目风格。即便如此,我们实验的规模应当足以支持我们相对于先前研究所观察到的关键差异。第二项威胁是,我们的结论基于单一提示工作流。由于识别一种普遍“最佳”的提示策略并不现实,我们采用一种由先前工作充分论证、并且可以仅使用被测代码完全自动化、无需额外人力的提示模板,这与实践中的测试生成场景一致。然而我们承认,替代的提示设计或不同的上下文,可能在所研究的指标之间产生不同的关系。

内部效度。

对内部效度的一项威胁是,我们的某些结论依赖模型间视图,该视图涉及相对较少的数据点(每个模型一个),可能降低统计功效,同时增加对离群点的敏感性。为缓解这一威胁,我们主要通过统计上显著的系数来解读模型间结果,并检查所观察的趋势在多种互补设定中是否一致,包括规模未受控与受控的随机抽样测试套件。同一模式在这些设定中持续出现,表明我们的主要观察不太可能纯粹由偶然驱动。

构念效度。

对构念效度的一项威胁,是 LLM 输出固有的随机性,以及结果对提示与指标选择的依赖。为降低输出变异,我们将生成温度设为 0 以最大化确定性,同时承认某些非确定性仍可能源于实现细节。另一项潜在威胁是数据污染:Defects4J 中由开发者编写的测试可能出现在模型训练数据中,这可能抬高所测得的性能。虽然我们无法排除这一点,但我们观察到,由同一焦点方法的含缺陷版本与已修复版本生成的测试之间存在实质性差异(它们共享同一套 Defects4J 预言测试),并且这些差异反映在我们所测得的指标关系中;这表明模型是在响应所提供的提示上下文,而不是简单地复现记忆中的测试。

9. 结论与未来工作

本文对 Inozemtseva 等人与 Papadakis 等人进行大规模复现研究,考察被广泛使用的代理指标——测试覆盖率与变异分数——如何关联到 LLM 生成测试套件的真实缺陷检测有效性。我们的结论与两项先前研究有实质性差异。特别是,我们发现覆盖率与变异的有用性高度依赖情境。当可以合理假定提供给 LLM 的代码无缺陷时,某些形式的覆盖率与变异在跨模型比较时提供有意义的信号。相比之下,在实践中常见的情形里——被测代码可能已经含有缺陷,且目标是暴露该缺陷——覆盖率变得不可靠,变异分析也不适用。我们还发现,几乎没有证据表明测试套件规模是 LLM 生成测试中覆盖率、变异与真实缺陷检测之间相关性的主导混杂因素。综合来看,这些结果有助于解读先前发现,并促使未来的评估去度量最重要的事情:所生成的测试能否揭示被测代码中的缺陷。

我们的研究还提示若干未来工作方向。第一,先前基于 LLM 的测试生成研究采用范围广泛的提示模板与提示策略;一个自然的下一步,是系统性地变化提示构造(例如代码上下文的数量与类型、格式以及辅助指令),并考察这些选择如何影响所观察到的覆盖率、变异与真实缺陷检测有效性之间的关系。第二,许多近期技术通过专门的提示或后处理来改进编译成功、通过率、覆盖率或变异分数等代理结果;这类改进何时会转化为更高的真实缺陷检测有效性仍不清楚,澄清这一联系将有助于判断何时优化这些代理是合理的。第三,我们的实验采用以白盒为主的提示设定,其中提供了被测代码;未来工作应当评估我们的观察在黑盒或基于规约的设定中是否成立——在那些设定中,模型根据自然语言规约、文档字符串或其他行为描述生成测试,而不能访问实现。第四,我们的研究聚焦于 LLM 生成的 Java 测试中覆盖率、变异与真实缺陷检测有效性之间的总体相关性,但这些关系可能因项目而异;因此,考察这类项目特定的相关性是未来工作的一个重要方向。最后,未来工作应当比较来自不同来源的测试——LLM 生成、人工编写以及非 LLM 的测试自动化工具——以理解这些关系如何因设定而异,以及是什么驱动了这些差异。

致谢

本工作由加拿大自然科学与工程研究理事会(NSERC)在资助编号 RGPIN-2022-04154 下支持。

数据可用性

本研究所用数据取自公开可用的 Defects4J 数据集(Just 等人,2014a)。为支持可复现性,我们提供一个复现包(Zhao 等人,2026),其中包含我们的测试生成代码、数据预处理脚本,以及分析中使用的原始数据。论文中报告的全部结果都可以使用该包复现。该包在 GitHub 上公开可得:https://github.com/drixs2050/Cov_mut_bug_detect_correlation ,并在 Zenodo 上永久存档(DOI:10.5281/zenodo.21429528)。

参考文献列表从略。

署名与许可

  • 原文:Do Coverage and Mutation Scores of LLM-Generated Test Suites Correlate with Their Effectiveness?(Replicability Study),Junda Zhao、Shurui Zhou、Eldan Cohen。
  • 原文链接:https://arxiv.org/abs/2607.22880
  • 许可:原文以 CC BY 4.0 许可发布。
  • 译者:智测团队。

觉得有用,转给同事

微信扫码

用微信扫一扫,在手机上打开后即可转发。

用 RSS 订阅

提交勘误