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 图片降级为占位符(系统事件,容错)
  • 导出结束后弹出下载提示(系统事件)

拼写检查器

  • 用户输入停顿后自动检查(系统事件,延迟触发)
  • 用户添加自定义词条(用户指令)
  • 重启后保留自定义词条(系统事件)
  • 右键"忽略"本次拼写警告(用户指令)

第一版列完,先别管它完不完整——有了这张表,你就知道要测什么了。

从组件到测试问题的下一步

你手上现在有两份清单:

  1. A — 属性(形容词):"轻量"、可定制、协作友好
  2. C₁ — 组件(名词):十件零件的名字
  3. C₂ — 能力(动词):每个零件能做什么

下一步,是在 A × C₁ × C₂ 的格子里填空——每一个格子对应一个测试点。第五章做这件事。

☼ 热身:看你的 app 扛得住几次点击

(自编)

打开你常用的 app,做以下动作:

  1. 打开通知中心,快速上下拉动。
  2. 发一条消息,立刻再撤回。
  3. 退出 app,重进——看历史有没有还原。

这三个动作,每个都对应一个 C₂。\ 你现在已经在测试了——只是大概率没人付钱给你,也没人叫它"测试"。


这一章要带走的东西

  • 能力是测试真正的靶心:测的就是"很多动词兑现后的样子"
  • 能力来自三类:用户指令、系统事件、定时触发——你本能知道它们不同
  • 从组件推演能力的方法是"问每个名词它能做什么"——列动词,真实用例会从动词里冒出来
  • C₂ 与 A 的衔接:能力要承载属性。RedPen 的"轻量"对应"冷启动在 50ms 内",这就是能力绑定属性的样子

就这样。