04 C₂ — 能力:动词推演
组件是零件,能力是动作。
"引擎"是组件;"引擎能转"是能力。\ "文件系统"是组件;"文件系统能存"是能力。\ "侧边栏"是组件;"侧边栏能折叠"是能力。
组件是有形的、你能在界面或代码里看见的;能力是隐形的——你只能通过使用它、触发它来证明它存在。
开篇除恐
"能力"听起来很像需求文档的活,测试能插手什么?
全部。
能力就是测试存在的真正意义。\ 测引擎,不是测引擎这个组件在不在——它当然在;测的是你让它转,它转不转。 测文件系统,不是测磁盘是不是活着——是测存进去的文件,你能不能原封不动地拿回来。
你会意识到:一切测试的动作,本质上是"触发一个能力,看它兑现了什么"。 能力是测试真正的靶心,A 和 C₁ 都是入场券,真正的比赛从小写能力开始。
白话化
C₂ — Capability(能力)
能力是产品的动作 —— 用户命令它能做的事,系统自己做的事,定时任务让它做的事。
- 能力通常只能通过触发行为来验证,不能一看看穿。
- 一个组件可以支撑多种能力;一个能力可能涉及多个组件的配合。
- 能力是 ACC 格子里每个格子的"占位内容"——格子是 C × C 的表头,能力是写在格子里的那个动词。
能力的三类来源
| 来源 | 定义 | 例子 |
|---|---|---|
| 用户指令 | 用户主动发出的动作 | 点击"保存"、按下"打印"、输入密码 |
| 系统事件 | 系统内部触发的,不需要用户操作 | 打开电脑自动连网、手机快没电了节省后台、文件存盘后自动生成副本 |
| 定时触发 | 按时间点或周期触发 | 每日凌晨备份数据库、每十五分钟刷新天气、会员到账通知 |
三类合起来,就是一张"这个产品所有时候都在动"的图。你画得越全,漏得越少。
| 你的直觉理解 | 对应的一类 |
|---|---|
| "点了按钮之后发生的" | 用户指令 |
| "不用我操作也自己在变的" | 系统事件 |
| "每天/每X小时固定要跑的" | 定时触发 |
三种你都每天都遇到,不需要教科书就知道它们的不同。
直觉先行
把你现在看的这部手机放在面前。
它至少能做这些事——
- 响铃(你打它来)——你触发它
- 自动锁屏(你把它放下,六十分钟不动,它自己锁了)——系统事件
- 充电时推送个通知通知你已充满——定时触发("每 X 秒检测电量"背后的节奏)
这三个能力来自三个不同的种类。\ 你能举出的例子越多,你的能力清单就越密。
现在试试列出你的笔记软件的五件它能做的事。\ 前十秒你会冒出来五六个动词——"打开""保存""搜索""加粗""分享"。这就是你的能力清单,未经训练的版本,已经够用。
例子贴身
☼☼ 正经:从 RedPen 的组件推演能力(自编)
回头看看我们在第三章列出的 RedPen 组件:
主编辑窗口 / 侧边栏 / 命令面板 / 语法高亮引擎 / 状态栏 / 缩略预览窗格 / 插件管理器 / 配置读取器 / PDF 导出模块 / 拼写检查器
我们的工作,是给每个组件搭配它支持哪些能力。
主编辑窗口
- 接受字符输入(用户指令)
- 支持多光标编辑(用户指令)
- 粘贴保留格式(用户指令)
- 满 N 行后滚动自动分页(系统事件)
侧边栏
- 展开 / 收起(用户指令)
- 右键新建 / 删除文件(用户指令)
- 文件内容变动时实时刷新目录中的时间戳(系统事件)
命令面板
- 列出匹配当前键盘输入的指令(用户指令,实时过滤)
- 执行选中指令(用户指令)
- 上下键切换 / Enter 确认(用户指令)
Ctrl+Shift+P全局唤起(用户指令,跨区域热键)
语法高亮引擎
- 接收 JavaScript / Python / Markdown 文本,返回带颜色的行数组(被调用,用户指令的后果)
- 未知语言文件回退为纯文本(系统事件,失败处理)
- 高亮规则文件热重载(系统事件)
PDF 导出模块(组合了语法高亮引擎输出)
- 指令"导出 PDF"后生成文件(用户指令)
- 本地图片随 PDF 打包另存(用户指令)
- 非法 URL 图片降级为占位符(系统事件,容错)
- 导出结束后弹出下载提示(系统事件)
拼写检查器
- 用户输入停顿后自动检查(系统事件,延迟触发)
- 用户添加自定义词条(用户指令)
- 重启后保留自定义词条(系统事件)
- 右键"忽略"本次拼写警告(用户指令)
第一版列完,先别管它完不完整——有了这张表,你就知道要测什么了。
从组件到测试问题的下一步
你手上现在有两份清单:
- A — 属性(形容词):"轻量"、可定制、协作友好
- C₁ — 组件(名词):十件零件的名字
- C₂ — 能力(动词):每个零件能做什么
下一步,是在 A × C₁ × C₂ 的格子里填空——每一个格子对应一个测试点。第五章做这件事。
☼ 热身:看你的 app 扛得住几次点击
(自编)
打开你常用的 app,做以下动作:
- 打开通知中心,快速上下拉动。
- 发一条消息,立刻再撤回。
- 退出 app,重进——看历史有没有还原。
这三个动作,每个都对应一个 C₂。\ 你现在已经在测试了——只是大概率没人付钱给你,也没人叫它"测试"。
这一章要带走的东西
- 能力是测试真正的靶心:测的就是"很多动词兑现后的样子"
- 能力来自三类:用户指令、系统事件、定时触发——你本能知道它们不同
- 从组件推演能力的方法是"问每个名词它能做什么"——列动词,真实用例会从动词里冒出来
- C₂ 与 A 的衔接:能力要承载属性。RedPen 的"轻量"对应"冷启动在 50ms 内",这就是能力绑定属性的样子
就这样。