mcpField
S
spec-probes

spec-probes

github.com/mdsmithaustin测试与质量8146 次安装1 天前更新
代码仓库

关于 spec-probes

供开发者在实现前检查需求完整性的技能,重点发现边界情况和未明确禁止的结果。它通过数据形状分类、边缘探查和禁行探查列出问题,并跟踪处理状态。

主要功能

  1. 01按数据形状分类需求
  2. 02探查相关边界与边缘情况
  3. 03识别未禁止的不良结果
  4. 04记录问题的解决或未决状态
  5. 05汇总覆盖情况与后备测试

适用场景

  1. 01编码前审查需求
  2. 02发现边界输入的行为缺失
  3. 03检查功能可能产生的不良结果
  4. 04记录尚未解决的规格缺口

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mdsmithaustin/pstack --skill spec-probes

安装后在 Claude Code 中输入/spec-probes确认已加载。

详细介绍

规格探查

验证器只会检查已有的断言;对于规格从未说明的边界情况,它会自信地判断错误。解决办法不是换一个更好的验证器,而是补全规格。在编写代码前,按以下顺序对每项需求进行这两轮检查。

第 1 轮:边界探查

对每项需求的数据形态进行分类:numeric-range、collection、text、stateful、io。然后,只提出与其形态相符的类别。纯文本需求绝不会被问及溢出问题。分类法有意保持封闭:作者能逐一排查的 8 个类别,胜过没人能全部完成的 30 个类别。

类别形态问题
边界值numeric-range在每个最小值、最大值或阈值处,以及其前后各一步,具体会发生什么?
邻接collection两个对象恰好相等或刚好接触时,它们会合并、冲突,还是保持分离?
空 / 退化情况collection, text输入为空、只有一个元素或为 null 时,结果是什么?
编码text长度和相等性依据谁的定义:字节、码点、字素簇,还是规范化形式?
顺序 / 稳定性collection元素比较结果相等时,是否规定输出顺序,且顺序是否稳定?
精度 / 溢出numeric-range哪些情况下可能发生舍入、平局处理、精度损失或溢出?具体契约是什么:四舍五入还是银行家舍入,向下取整还是截断?
幂等性stateful对同一输入运行两次会发生什么?
并发 / 效果顺序stateful, io如果操作被中断或并行运行,能保证什么?

有文字描述但没有匹配形态的需求,只添加一条宽泛的“未分类,手动审查”事项,不要保持沉默。

这种方法能发现的缺陷:“合并重叠区间”没有说明 [1,2] 和 [2,3] 这类仅仅接触的区间该如何处理。“四舍五入到最近值”没有说明 2.5 按银行家舍入取为 2。“截断为 N 个字符”没有说明字符指的是字节、代码单元、码点还是字素。

第 2 轮:禁止项探查

边界形态无法发现“提醒不得让用户感到羞愧”这类要求。针对每项需求,询问:这项功能可能悄然变成什么,而作者并不希望如此,却又未在规格中禁止? 先广泛发散;每项需求提出 10 个原始候选项是预期之内。

然后进行一轮精炼:

  • 删除常规工程事项:不得修改输入、空输入不得抛出异常、不得泄漏句柄。这些属于第 1 轮或代码审查。
  • 保留涉及价值、公平、隐私、透明度和安全的事项:不得采用羞辱式措辞,不得以受保护属性作为代理变量,不得以明文存储原始 PII。
  • 转交,不要新建, 专用工具已负责的事项(提示注入、路径遍历、数据保留法规、通用偏见准则):在安全或合规步骤留一条线索,然后停止。

每项功能通常会筛出两三条专属事项。纯工具函数筛出零条也很正常,而且这就是正确答案;因此,非空列表总是有所提示。

解决所有提出的事项

每项事项最终必须处于以下一种状态:

  • 已解决:验收标准明确说明了答案(explicit,由常规测试检查);或有一项保留测试或基于属性的测试,用来覆盖你已知但无法完整写清的边界情况(backstop);或对于需要人工判断而非测试的禁止项,标记为 judgment。
  • 已驳回,并说明理由。“不适用,输入是有界枚举,不存在边界”是有效理由;保持沉默则不行。理由就是审计记录。
  • 未解决:作为明确的缺口保留,并要求计划中呈现,绝不可悄然丢弃。

在规格本身写入 backstop 和 judgment 标签。之后的审查者会对这些事项弃权,而不是仅凭检查就判定通过;没有标签,审查者就无法识别自身的盲点。

回复: 按每项需求列出提出的事项及其状态;然后给出覆盖计数:适用项数、已解决项数、未解决项数,以及标记为 backstop 或 judgment 的项数。

评论

支持 Markdown