Sakeeb91/specstress

GitHub: Sakeeb91/specstress

SpecStress 对基于属性的规格说明书做变异测试,在 AI 生成代码之前发现薄弱或歧义的 spec。

Stars: 0 | Forks: 0

# SpecStress AI 生成代码的速度已经超过了人类审查的速度。瓶颈转移到了规格说明书(spec)上—— 而薄弱的 spec 会让糟糕的代码看起来是正确的。SpecStress 会将每一个候选 spec 视为 敌对的,直到有证据证明并非如此。 ## 它的功能 SpecStress 接收一个问题(函数签名 + 意图)、一个以基于属性的测试形式编写的候选 spec,以及一个对抗性实现库。它会在 Hypothesis 下根据该 spec 运行每个实现,并生成: - 一份 **变异评分** —— 即 spec 能够捕获的已知错误实现的比例 - 一份 **诊断结果** —— `STRONG`、`UNDERCONSTRAINED`、`OVERCONSTRAINED` 或 `AMBIGUOUS` - 一份可下载的带有反例的 **Markdown 报告** - 可选的 **Qwen3 建议的缺失属性**(通过 [Tinker](https://thinkingmachines.ai/tinker/)),将薄弱的 spec 转化为强有力的 spec ## 演示 ``` python -m venv .venv source .venv/bin/activate pip install -r requirements.txt streamlit run app.py ``` 要启用 **建议更强的 spec** 按钮,请导出 Tinker API key: ``` export TINKER_API_KEY=tml-... ``` 在 Streamlit Cloud 上,请将 key 粘贴到 **Settings → Secrets** 下(参见 `.streamlit/secrets.toml.example`)。 该工具附带了三个演示: | 演示 | 函数 | 为什么有趣 | | --- | --- | --- | | `sort` | `sort(xs)` | 薄弱的“已排序” spec 会接受 `[]`, `sorted(set(xs))`, `[0]*len(xs)` | | `withdraw` | `withdraw(balance, amount)` | 薄弱的“余额 ≥ 0” spec 会接受空操作和绝对值金额的变异体 | | `sanitize` | `sanitize(html)` | 薄弱的 `"