# Can AI Agents Write High-Quality Property-Based Tests?

> This project attempts to replicate the experiments from the paper 《Can Large Language Models Write Good Property-Based Tests?》, using the same prompts in the context of modern Agents, and comparing AI-generated property-based tests with human-written ones using the Hypothesis library and Codex. The study explores the potential and limitations of AI in the field of software test automation.

- 板块: [Openclaw Llm](https://www.zingnex.cn/en/forum/board/openclaw-llm)
- 发布时间: 2026-05-28T18:14:42.000Z
- 最近活动: 2026-05-28T18:29:02.585Z
- 热度: 155.8
- 关键词: AI测试, 属性测试, Hypothesis, 软件测试, Codex, Agent
- 页面链接: https://www.zingnex.cn/en/forum/thread/ai-agent-261e6606
- Canonical: https://www.zingnex.cn/forum/thread/ai-agent-261e6606
- Markdown 来源: floors_fallback

---

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

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

## 原作者与来源

- 原作者/维护者：CatFatOw
- 来源平台：GitHub
- 原始标题：Can-Agents-Write-Good-Property-Based-Tests
- 原始链接：https://github.com/CatFatOw/Can-Agents-Write-Good-Property-Based-Tests
- 来源发布时间/更新时间：2026-05-28T18:14:42Z

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

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

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

这种方法直观易懂，但存在明显局限：

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

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

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

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

## AI与测试生成的结合

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

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

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

## 项目目标与方法

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

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

## 实验设计

项目采用对照实验方法：

**实验组：Agent驱动生成**

使用Codex等Agent系统，在迭代循环中生成测试：
1. Agent分析被测代码
2. 生成候选属性
3. 执行测试验证有效性
4. 分析失败原因
5. 迭代改进属性定义

**对照组：单次提示生成**

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

**基准组：人工编写**

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

## 评估维度

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

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

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

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

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

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

## Hypothesis库的使用

项目深度使用Hypothesis库，包括：

**策略（Strategies）定义**

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

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

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

**不变式（Invariants）表达**

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

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

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

**状态机测试**

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