Community写作与编辑github.com

走廊测试

让一个只见过需求和用户文档的新子代理对工具进行走廊可用性测试:构建测试用例、先写期望再运行、提出疑问,并报告缺陷、意外和缺口;可选地通过截图肉眼审视真实终端。

走廊测试 是什么?

走廊测试(hallway test)通过模拟“首位临场用户”的视角,对命令行工具、CLI、笔记本工作流或页面进行系统性可用性评估。一个没有看过实现、规格或历史对话的子代理(tester)仅基于用户文档构建期望并执行测试,将实际结果与预测进行比对,识别缺陷、意外行为和文档缺口。测试支持两种模式:行为模式(behaviour)关注输入/输出是否符合预期;视觉模式(by eye)利用 xterm 截图来捕获文本解析无法感知的问题(如滚动、换行、分页器隐藏信息)。 该技能适用于 Claude Code 等 AI 代理平台,需配合 `xvfb`、`xterm`、`xdotool` 和 ImageMagick 运行视觉测试。测试前需与用户明确 tester 可读的内容、工具运行方式、强制覆盖范围、问题解答人及报告格式。测试结束后,主会话应基于报告修复缺陷,记录未回答的设计决策,并为每个缺陷跟踪“本应如何避免”的改进措施。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/uellue/skills/tree/HEAD/plugins/kaizen/skills/hallway-test

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

在你喜欢的 AI 中提问

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

文档

走廊测试 是做什么的?

名字来源于在走廊里抓一个人,看着他们使用产品。这里的“人”是一个子代理,它没有看过实现、规格说明或生成代码的对话,因此无法“忘记”作者知道的信息。它阅读需求文档和面向用户的文档,决定应该发生什么,亲自尝试,然后报告现实与预期的差异。在 modama 爬虫项目中,一个下午就发现了价值二十个实验的行为,包括测试套件已经“固化”的缺陷。

两种模式,通常组合使用:

  • 行为模式:测试者构建测试输入,在运行前为每个输入写下期望,然后运行工具,比较结果,分类。
  • 肉眼模式:针对面向人眼的输出,测试者在真实终端中驱动工具并判断截图,从而捕获文本解析永远看不到的问题:滚动出屏幕的输出、被噪声淹没的信号、换行、分页器隐藏的调试信息。随附的驱动脚本 ${CLAUDE_PLUGIN_ROOT}/scripts/xterm-shots.py 在虚拟 X 服务器下启动 xterm,发送按键并截图;它需要安装 xvfb、xterm、xdotool 和 imagemagick(ImageMagick 的 import),这些可以通过 devcontainer 托管。

一个借用来的检查清单,感谢:MIT 许可的 cli-ux-tester 技能(作者 ali5ter)中的十一条 CLI 可用性标准,位于 ${CLAUDE_PLUGIN_ROOT}/references/cli-ux-checklist.md,作为命令行工具的额外检查环节。

启动前

与用户确定以下事项,它们将成为测试者的任务简报:

  1. 测试者可以阅读的内容。 仅限于首位用户能接触到的:需求文档、用户文档、命令的帮助信息。明确指出文件或目录;明确禁止其余内容(源代码、测试、规格说明、设计笔记、git 历史)。测试的重点是新鲜视角;每增加一份文档都会削弱这一效果。
  2. 工具及其运行方式。 命令行或入口点,测试输入应创建的位置(临时目录,绝不能是仓库),可以安装什么,绝对不能碰什么(例如只读数据挂载)。
  3. 必须覆盖的内容。 取自需求文档和上次玩法测试缺口的一系列测试场景,加上“自行添加实验”。对于肉眼测试:场景、终端尺寸、按键序列。
  4. 谁回答问题。 当需求未说明应该发生什么时,测试者向主会话提问;主会话根据设计回答,并将自己无法自信回答的内容记录为待办事项,交给项目所有者。
  5. 报告存放位置 和摘要长度。

任务简报

在后台生成一个通用子代理,任务简报基于模板 ${CLAUDE_PLUGIN_ROOT}/references/tester-brief.md 构建:角色(“一位首次尝试此工具的关键早期用户,作为研究软件工程师”)、严格的阅读规则、用户视角的命令参考、方法(创建→先写期望→运行→比较→分类为“匹配/缺陷/意外但合理/缺口/疑问”)、强制覆盖范围、提问指令和报告结构。对于肉眼测试,使用 ${CLAUDE_PLUGIN_ROOT}/references/visual-brief.md 中的简报,该模板描述了驱动脚本,并强调测试者只能基于截图进行判断。

模型选择:肉眼测试者可以使用更便宜的模型,它负责观察和报告;行为测试者受益于主会话的模型,因为它需要推理应该发生什么。

运行期间

根据设计回答测试者的问题,附上推理过程,并在问题暴露一个缺陷时通知测试者(然后按照正常方式修复缺陷,附带测试,并告知测试者工具已更改)。保留一份你无法自信回答的问题清单;这些问题应作为“决策”而非“猜测”交给项目所有者。

之后

  1. 阅读报告。在接受每个缺陷声明前,对照代码进行验证;没有源代码访问权限的测试者仅描述症状,原因可能不同。
  2. 将持久记录写入项目设计笔记(例如 design/playtest.md):哪些被阻止了,哪些已修复并附带了测试和规格场景,给出的答案,以及一份为项目所有者准备的待办事项清单,每项附带你的倾向性意见。
  3. 对于每个缺陷,回答“本应如何捕捉到它”并添加对应措施:一个测试、一条规则、一项检查。没有这个答案的缺陷只修复了一半。
  4. 保持测试者的目录和截图可重现:编写一个能重新运行任何实验的小脚本,保存在报告旁边或临时目录中,路径在记录中注明。

规则

  • 测试者绝不修改仓库,绝不读取被禁止的内容,并在报告中说明自己获得了哪些信息,包括测试框架附加的、它未主动请求的内容。
  • 期望值必须在运行前写下,否则比较毫无意义。
  • 每条发现都是一个时刻:具体的命令、期望的结果、观察到的结果、相关的 stderr 行或截图文件名。
  • 不要在任何测试者作为问题报告的内容上立即修复;先判断它是缺陷还是设计选择,然后附带测试进行修复。

Individual skills in this repo

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

相关技能