Community写作与编辑github.com

Devolutions/IronRDP 盲测套件

仅基于 CONTRACT*.md 和已发布的来源编写或扩展一致性测试套件,由从未见过实现文件的作者完成,在实现文件构建过程中保持只读状态。适用于当某个合约有或将有多个实现,或者错误的预期值对实现者不可见时(例如在密码学、编解码器和线协议中)。

IronRDP 盲测套件 是什么?

该技能描述的是一个“盲测套件”的编写流程,它独立于任何具体实现,仅基于合约定义和公开标准来生成测试用例。其核心价值在于确保测试套件是对合约的独立验证,而非对某个实现的理解的确认。它特别适用于密码学、编解码器、网络协议等场景,在这些场景中,错误的预期值很难被实现者发现。该流程通过严格的隔离机制确保测试独立:作者在编写测试时不能接触任何实现代码;预期值必须来自公开来源、合约声明或可独立验证的推导;并通过差分测试、负输入测试和覆盖率记录来确保测试的完整性。整个工作流程高度自动化,涉及 `test-writer`、`test-oracle-reviewer`、`test-reviewer` 等角色或工具,并支持 Git 工作流中的分支管理,确保测试套件在实现开发期间保持只读状态,任何对测试的修改都必须由新的作者独立完成。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Devolutions/IronRDP/tree/HEAD/.agents/skills/blind-testsuite

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

盲测套件

该套件是源自合约的独立证据,而非合规性定义,因此测试失败表明实现或测试有问题,而合约永远正确。 test-writer 决定每个测试的形状,test-oracle-reviewer 决定什么算作独立值;该技能围绕它们提供隔离。

作者看到的内容

合约文件、合约所针对的接口(合约 crate 或模块、其类型和文档)以及已发布的来源:规范、供应商提供的向量、捕获数据。 不包含实现、早期实现或产生该合约的拉取请求,因为每个都包含对合约的解读,而该套件本应对此进行测试而非确认。 当实现存在时,作者是在一个不包含该实现的工作树中,处于一个没有该实现的提交上的全新上下文;禁止阅读列表补充且不取代此隔离,因为一旦上下文看到了实现,就无法再“忘记”。

预期值

来自测试中引用的已发布来源、合约声明的属性,或者合约或引用的标准固定了推导方法的推导值,记录在向量旁边以便审查者可以重新计算;绝不能来自只有合约实现才能执行的计算,因为检查这样的值意味着再次实现合约。 推导的向量必须考虑更改所影响的所有耦合字段——长度、校验和、签名——否则其结果就不符合推导的宣称。 在没有已发布答案的情况下,跨实现比较输出;差分检查绝不能单独存在,因为两个实现共享的 bug 会使其通过。 手工编写的负输入与独立有效的控制输入仅在目标维度上不同,这样测试只能因命名原因失败;一个命名被拒绝输入的规则必须获得一个这样的测试,因为仅通过接受来测试的规则可以通过接受一切来满足。 供应商提供的来源保留起源、版本和校验和记录,整体使用或在其自己的章节边界处切割,且从不编辑,因为编辑或切割的向量失去了使其成为 Oracla 的来源证明。 在套件旁保留覆盖率记录:哪个测试检查哪个子句,哪些子句仅通过审查验证,以及故意不检查的边界,这样沉默不会被误认为是覆盖率。

审查与合并

审查者运行 test-reviewer 并双向检查合约与覆盖率记录:每个子句都有测试或记录的空缺,每个测试都引用其子句。 在实现之前编写套件;一旦有一个实现能绿色通过,就合并它,这样任何合规实现都无法通过的测试会在它绑定所有后续实现之前被发现。

实现期间保持只读

实现拉取请求从不编辑套件或合约。 看起来有问题的测试,或没有测试的子句,会连同向量或子句、预期值和观察到的值以及引用的来源一起上报。 修复将转到拥有该套件的拉取请求——如果是开放中的,通过其负责人;如果是已合并的,则发新的拉取请求——由具有相同输入的新作者执行,该作者接收决策而不接收实现的输出,从而保持套件的“盲”状态。

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

相关技能