Zing 论坛

正文

AI Agent能否编写高质量的基于属性的测试?

该项目尝试复现论文《Can Large Language Models Write Good Property-Based Tests?》的实验,在现代Agent上下文中使用相同提示词,通过Hypothesis库和Codex比较AI生成的属性测试与人类编写的测试。研究探索了AI在软件测试自动化领域的潜力和局限。

AI测试属性测试Hypothesis软件测试CodexAgent
发布时间 2026/05/29 02:14最近活动 2026/05/29 02:29预计阅读 4 分钟
AI Agent能否编写高质量的基于属性的测试?
1

章节 01

导读 / 主楼:AI Agent能否编写高质量的基于属性的测试?

该项目尝试复现论文《Can Large Language Models Write Good Property-Based Tests?》的实验,在现代Agent上下文中使用相同提示词,通过Hypothesis库和Codex比较AI生成的属性测试与人类编写的测试。研究探索了AI在软件测试自动化领域的潜力和局限。

3

章节 03

软件测试的演进:从示例到属性

软件测试是保证代码质量的核心环节。传统测试方法主要依赖“基于示例的测试”(Example-Based Testing),即开发者编写具体的输入-输出对来验证代码正确性。例如:

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

这种方法直观易懂,但存在明显局限:

  • 覆盖有限:只能验证特定输入,无法保证其他输入也正确
  • 维护成本高:需求变化时需要更新大量测试用例
  • 边界遗漏:容易遗漏边界条件和异常情况
  • 思维局限:测试质量取决于开发者能想到的场景

基于属性的测试(Property-Based Testing, PBT)提供了不同的思路。它不指定具体输入,而是定义“属性”——代码应该满足的不变式。测试框架自动生成大量随机输入来验证这些属性。

@given(st.integers(), st.integers())
def test_add_commutative(a, b):
    assert add(a, b) == add(b, a)

Python的Hypothesis库是PBT的代表实现,它通过智能的输入生成和缩减策略,能够发现人工难以想到的边界情况。

4

章节 04

AI与测试生成的结合

2023年发表的论文《Can Large Language Models Write Good Property-Based Tests?》首次系统性地研究了LLM生成PBT的能力。研究发现:

  • LLM能够理解PBT的概念并生成有效的测试代码
  • 但生成的测试质量参差不齐,需要人工审查
  • LLM在生成“有意义”的属性方面仍有局限

随着AI Agent技术的进步,测试生成任务是否有了新的可能性?Agent不仅能生成代码,还能迭代改进、执行测试、分析结果——形成一个闭环。

5

章节 05

项目目标与方法

本项目尝试在“现代Agent上下文”中复现原论文的实验,核心研究问题是:

AI Agent能否比单次LLM调用生成更高质量的PBT?

6

章节 06

实验设计

项目采用对照实验方法:

实验组:Agent驱动生成

使用Codex等Agent系统,在迭代循环中生成测试:

  1. Agent分析被测代码
  2. 生成候选属性
  3. 执行测试验证有效性
  4. 分析失败原因
  5. 迭代改进属性定义

对照组:单次提示生成

使用与原论文相同的提示词,单次调用LLM生成测试,不做迭代优化。

基准组:人工编写

开发者基于经验手动编写Hypothesis测试,作为质量基准。

7

章节 07

评估维度

项目从多个维度评估测试质量:

覆盖率:生成的测试能达到多少代码覆盖率

缺陷发现能力:能否发现已知的或注入的缺陷

属性意义:生成的属性是否真正反映了代码的预期行为,而非无意义的恒真式

代码可读性:生成的测试代码是否易于理解和维护

生成效率:达到同等质量需要多少轮迭代

8

章节 08

Hypothesis库的使用

项目深度使用Hypothesis库,包括:

策略(Strategies)定义

策略定义了如何生成测试输入。项目比较AI生成的策略与人类编写的策略:

# 人类可能编写的策略
positive_integers = st.integers(min_value=1)

# AI可能生成的策略
ai_generated_strategy = st.one_of(
    st.integers(),
    st.floats(allow_nan=False)
)

不变式(Invariants)表达

不变式是PBT的核心。项目评估AI能否生成有意义的不变式:

# 良好的不变式:反映业务逻辑
def test_roundtrip_encoding(data):
    assert decode(encode(data)) == data

# 无意义的不变式:恒真
def test_identity(x):
    assert x == x

状态机测试

对于复杂系统,Hypothesis支持状态机测试。项目探索AI能否生成有效的状态转换模型。