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)` | 薄弱的 `"