software-design-test 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/LICENSE +21 -0
- package/README.md +275 -0
- package/cordis.patch.yml +23 -0
- package/docs/FRAMEWORK.zh-en.md +149 -0
- package/docs/INSTALL.zh-en.md +226 -0
- package/docs/USAGE.zh-en.md +295 -0
- package/icon.svg +21 -0
- package/lib/index.js +197 -0
- package/lib/self-check.js +313 -0
- package/locale/en.json +6 -0
- package/locale/zh.json +6 -0
- package/package.json +80 -0
- package/scripts/capture.mjs +318 -0
- package/scripts/guard.mjs +311 -0
- package/scripts/report.mjs +484 -0
- package/scripts/session.mjs +709 -0
- package/scripts/verify.mjs +205 -0
- package/skills/observed-test-plan/MATRIX.md +99 -0
- package/skills/observed-test-plan/PERMISSIONS.md +109 -0
- package/skills/observed-test-plan/PLAN-TEMPLATE.md +93 -0
- package/skills/observed-test-plan/SKILL.md +135 -0
- package/skills/observed-ui-test/BANNED-INPUTS.md +161 -0
- package/skills/observed-ui-test/EVIDENCE.md +113 -0
- package/skills/observed-ui-test/FRAMEWORK.md +181 -0
- package/skills/observed-ui-test/LEVELS.md +137 -0
- package/skills/observed-ui-test/REPORT-TEMPLATE.md +111 -0
- package/skills/observed-ui-test/SKILL.md +210 -0
- package/skills/software-design-test/DEFECTS.md +205 -0
- package/skills/software-design-test/HEURISTICS.md +236 -0
- package/skills/software-design-test/PERSONAS-SCENARIOS.md +159 -0
- package/skills/software-design-test/SKILL.md +211 -0
- package/skills/software-design-test/SOURCES.md +118 -0
- package/skills/software-design-test/TEST-CONTENT.md +257 -0
- package/skills/software-design-test/WORKFLOW.md +293 -0
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
# 启发式、巡游与无障碍清单 / Heuristics, Tours and Accessibility Lenses
|
|
2
|
+
|
|
3
|
+
> 这些是"透镜",不是"用例"。用法:**先各自独立扫,再合并去重**,每条结论都必须指得到画面上的
|
|
4
|
+
> 具体位置;指不到位置的结论降级为"观察"。
|
|
5
|
+
> These are lenses, not test cases. Sweep **independently first, merge second**; every conclusion must
|
|
6
|
+
> point at a place on the screen, or it is downgraded to an observation.
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## A. 认知走查四问 / Cognitive walkthrough: the four questions
|
|
11
|
+
|
|
12
|
+
对任务卡里的**每一个关键动作**问这四句(Wharton / Carroll / Lewis / Polson):
|
|
13
|
+
|
|
14
|
+
| # | 问题 Question | 画面上的证据 Evidence |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| 1 | 用户会想做出这个效果吗?Will the user try to achieve the right effect? | 目标与界面的用词是否对得上 |
|
|
17
|
+
| 2 | 用户会注意到存在正确操作吗?Will the user notice the correct action is available? | 控件可见、未禁用、不是只在悬停才出现 |
|
|
18
|
+
| 3 | 用户会把正确操作和想要的结果联系起来吗?Will the user associate the action with the effect? | 标签/图标/位置是否表达一致含义 |
|
|
19
|
+
| 4 | 做完之后,用户看得出自己在接近目标吗?Will the user see progress after acting? | 有加载/成功/位置变化的可见反馈 |
|
|
20
|
+
|
|
21
|
+
**会话组织 / How to run it**:
|
|
22
|
+
|
|
23
|
+
1. 固定一个**人物** + 3–5 条最重要的任务;**先约定"一步"的粒度**(否则一半时间在吵粒度)。
|
|
24
|
+
2. 角色:主持人(逐步停在每个界面)、记录员、3–6 名评估者。
|
|
25
|
+
3. 每个界面集体答四问;**任何一问是"否" ⇒ 这一步判 Fail**。
|
|
26
|
+
4. 记录失败原因 + 界面位置 + 失败的是第几问。
|
|
27
|
+
5. 汇总失败点 → 按失败步骤的比例给分 → 进入设计修改。
|
|
28
|
+
|
|
29
|
+
**产物**:任务清单、逐步通过/失败表、失败原因、问题清单。
|
|
30
|
+
**坑**:粒度争议、跑题成通用设计评审、群体思维、假设用户知道评估者知道的事;
|
|
31
|
+
**对专家/高频功能不适用**(这类功能要用任务观察而不是走查)。
|
|
32
|
+
失败步骤按"哪一问失败 + 界面"打标签,作为缺陷候选;严重级由共识(Nielsen 0–4)给出,
|
|
33
|
+
但**评估者判断仍需真人会话佐证**。
|
|
34
|
+
|
|
35
|
+
> 3–5 人各自独立答,合并分歧点——**分歧点本身就是最好的缺陷候选**。
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## B. 十项可用性启发式 / Nielsen's 10 usability heuristics
|
|
40
|
+
|
|
41
|
+
(名称与释义依据 NN/g 原文;检查问句与"画面上长什么样"是本地化改写)
|
|
42
|
+
|
|
43
|
+
| # | 启发式 Heuristic | 检查问句 Ask | 违反时长什么样 On screen |
|
|
44
|
+
| --- | --- | --- | --- |
|
|
45
|
+
| 1 | 系统状态可见性 Visibility of system status | 每个操作后 1 秒内有没有可见反馈? | 点了没反应、无加载态、不知道保存没保存 |
|
|
46
|
+
| 2 | 贴合现实世界 Match with the real world | 用的是用户的词还是内部术语? | "同步实体""实例化"这类词直接出现在界面 |
|
|
47
|
+
| 3 | 用户控制与自由 User control and freedom | 有没有明确的"紧急出口"(撤销/取消/返回)? | 弹窗只能"确定"、误操作无法撤销 |
|
|
48
|
+
| 4 | 一致性与标准 Consistency and standards | 同类东西是不是同一套词、同一套位置? | "保存"和"应用"混用;同类按钮位置不同 |
|
|
49
|
+
| 5 | 错误预防 Error prevention | 有没有在犯错前拦一下? | 破坏性操作无二次确认、无影响范围说明 |
|
|
50
|
+
| 6 | 识别优于回忆 Recognition rather than recall | 需不需要记住上一屏的信息? | 必须记住上一步的编号/路径才能继续 |
|
|
51
|
+
| 7 | 灵活与高效 Flexibility and efficiency | 新手与专家是否都有顺手的路径? | 只有快捷键、或只有一层层点菜单 |
|
|
52
|
+
| 8 | 美观与极简 Aesthetic and minimalist design | 有没有无关信息挤占注意力? | 一屏五个同等强调的按钮;干扰性提示 |
|
|
53
|
+
| 9 | 帮助用户识别、诊断和恢复错误 Help users recognize, diagnose, recover | 报错说人话吗?给出下一步了吗? | 直接抛错误码、只说"操作失败" |
|
|
54
|
+
| 10 | 帮助与文档 Help and documentation | 需要时能不能就地找到帮助? | 帮助入口埋在设置深处、无可搜索内容 |
|
|
55
|
+
|
|
56
|
+
**严重级(启发式评估用)**:`0` 不是问题 · `1` 表面问题(修饰性)· `2` 轻微/低优先 · `3` 严重/高优先 ·
|
|
57
|
+
`4` 灾难(发布前必修)。严重级按**频率 × 影响 × 持续性**综合判断,不由感觉定。
|
|
58
|
+
每个人**先独立定级**,再对合并后的问题清单**取 ≥3 人评分的均值**;分歧条目不投票,
|
|
59
|
+
**回到画面确认**,确认不了降级为"观察"。
|
|
60
|
+
|
|
61
|
+
> **为什么必须多人独立评估**:单个评估者平均只能发现约 **42%** 的严重问题与 **32%** 的轻微问题
|
|
62
|
+
> (Nielsen 1992)。所以一个"我扫过了,没问题"的结论几乎必然漏掉大部分问题。
|
|
63
|
+
> One evaluator finds only ~42% of major and ~32% of minor problems — a solo sweep is not coverage.
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## C. HICCUPPS(F) 一致性启发式 / Consistency heuristics
|
|
68
|
+
|
|
69
|
+
软件应当与以下任一项保持一致;**任何一处不一致,都是缺陷候选**:
|
|
70
|
+
|
|
71
|
+
| 字母 | 一致性对象 | 问句 |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| **H**istory | 历史(同一功能的旧版本/旧行为) | 以前能做,现在为什么不能? |
|
|
74
|
+
| **I**mage | 产品形象(品牌、宣传、截图) | 宣称的能力与实际一致吗? |
|
|
75
|
+
| **C**omparable products | 同类产品 | 别的软件按这个键会发生什么? |
|
|
76
|
+
| **C**laims | 明确宣称(文档、帮助、提示文案、tooltip) | 文案说会做的事,真的做了吗? |
|
|
77
|
+
| **U**ser expectations | 用户期望 | 一个普通用户会期待它怎么表现? |
|
|
78
|
+
| **P**roduct | 产品自身(内部一致) | 同一应用里同类操作是否一致? |
|
|
79
|
+
| **P**urpose | 目的(这个功能存在的理由) | 它有没有完成它存在的目的? |
|
|
80
|
+
| **S**tatutes / standards | 标准与法规(平台规范、无障碍标准) | 是否符合平台/合规要求? |
|
|
81
|
+
| **(F)**amiliarity | 熟悉度(你自己/团队的实际使用感受) | 第一次用的人会不会觉得别扭? |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## D. SFDIPOT 结构透镜 / Structural lenses
|
|
86
|
+
|
|
87
|
+
> 常被简写成 "SFDIPOT",**漏掉了 Interfaces**;完整形式是 **SFDIPOT**(Bach《Heuristic Test Strategy
|
|
88
|
+
> Model》)。用法:对每个透镜问"这里能怎么坏",再配一条 HICCUPPS 一致性预言(见上一节)——
|
|
89
|
+
> 每个格子至少一个探针。
|
|
90
|
+
> Often truncated to "SFDIPOT", which drops **Interfaces**; the full form is **SFDIPOT**.
|
|
91
|
+
|
|
92
|
+
| 透镜 Lens | 问句 Prompts |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| **S**tructure 结构 | 界面由什么组成(区域、控件、层级)?哪个结构在极端内容下会崩? |
|
|
95
|
+
| **F**unction 功能 | 每个功能做什么、不做什么?边界条件是什么? |
|
|
96
|
+
| **D**ata 数据 | 输入什么数据会坏(空、超长、非拉丁文、emoji、极端数值、重复)? |
|
|
97
|
+
| **I**nterfaces 接口 | 界面之间、模块之间、与外部系统/文件/设备/剪贴板怎么交接?交接处最容易坏。 |
|
|
98
|
+
| **P**latform 平台 | 依赖什么(系统、分辨率、输入设备、权限、网络)?换一个会怎样? |
|
|
99
|
+
| **O**perations 操作 | 用户会怎么用它(顺序、并发、重复、撤销、批量、中断)? |
|
|
100
|
+
| **T**ime 时间 | 时间相关(超时、跨天、时区、夏令时、并发编辑冲突、长期使用)? |
|
|
101
|
+
|
|
102
|
+
配套的质量判据(HTSM 的 CRUSPICSTMPL):Capability 能力 / Reliability 可靠 / Usability 易用 /
|
|
103
|
+
Charisma 吸引力 / Security 安全 / Scalability 扩展 / Compatibility 兼容 / Performance 性能 /
|
|
104
|
+
Installability 可安装 / Development 可维护——挑相关的几项当检查表。
|
|
105
|
+
|
|
106
|
+
> 提醒:预言会失效(不一致 ≠ 缺陷);写结论时**点明用的是哪条预言**,别用"不符合预期"这种同义反复。
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## E. 巡游 Tours / Exploratory tours
|
|
111
|
+
|
|
112
|
+
Whittaker《Exploratory Software Testing》(2009) 把巡游按"城区"分组。**巡游是启发式的方向,
|
|
113
|
+
不是脚本**;每走完一条,在 `heuristics.md` 记一行:`巡游 → 区域 → 观察`。
|
|
114
|
+
|
|
115
|
+
### 商业区 Business District
|
|
116
|
+
|
|
117
|
+
| 巡游 Tour | 意图 Intent | 一句话脚本 Script |
|
|
118
|
+
| --- | --- | --- |
|
|
119
|
+
| 导览 Guidebook | 对照文档 | 按帮助/文档走一遍,文档与实物不一致的地方记下来 |
|
|
120
|
+
| 金钱 Money | 值钱的功能 | 专测"把产品卖出去"的那几个功能 |
|
|
121
|
+
| 地标 Landmark | 熟悉地形 | 找出每个界面的关键功能,用不同顺序反复走 |
|
|
122
|
+
| 知识 Intellectual | 最难输入 | 专挑能骗过校验的输入(最难、最刁) |
|
|
123
|
+
| 快递 FedEx | 追一个数据 | 让同一条数据穿过所有子系统:建→改→导→同步→删 |
|
|
124
|
+
| 打烊后 After-Hours | 后台工作 | 触发用户看不见的后台任务:备份、索引、同步、清理 |
|
|
125
|
+
| 拾荒者 Garbage Collector | 快速普查 | 快速把每个功能各点一遍,做一次广度体检 |
|
|
126
|
+
|
|
127
|
+
### 历史区 Historical District
|
|
128
|
+
|
|
129
|
+
| 巡游 | 意图 | 脚本 |
|
|
130
|
+
| --- | --- | --- |
|
|
131
|
+
| 危险街区 Bad Neighbourhood | 缺陷密集区 | 去历史上 bug 最多的模块,专测那里 |
|
|
132
|
+
| 博物馆 Museum | 遗留代码 | 只测长期没人动过的遗留功能与旧接口 |
|
|
133
|
+
| 旧版本 Prior Version | 回归 | 把上一版的测试在新构建上重跑一遍 |
|
|
134
|
+
|
|
135
|
+
### 娱乐区 Entertainment District
|
|
136
|
+
|
|
137
|
+
| 巡游 | 意图 | 脚本 |
|
|
138
|
+
| --- | --- | --- |
|
|
139
|
+
| 配角 Supporting Actor | 旁支变体 | 测相邻区域、本地化版本,而不是主角功能 |
|
|
140
|
+
| 后巷 Back Alley | 冷门路径 | 只走偏好设置、恢复、首次运行、隐藏菜单、右键菜单 |
|
|
141
|
+
| 通宵 All-Nighter | 长时间 | 让它跑很久:内存泄漏、超时、长任务中断 |
|
|
142
|
+
|
|
143
|
+
### 旅游区 Tourist District
|
|
144
|
+
|
|
145
|
+
| 巡游 | 意图 | 脚本 |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| 收藏家 Collector's | 穷举输出 | 把一个功能的每种输出都拿一遍(各格式、各分辨率) |
|
|
148
|
+
| 孤独商人 Lonely Businessman | 最长路径 | 走最长、最绕、最费时的那条路径 |
|
|
149
|
+
| 超级名模 Supermodel | 只看界面 | 只挑视觉问题:规范、图标、文案、对齐、深浅色 |
|
|
150
|
+
| TOGOF | 资源竞争 | 开两个以上实例抢同一资源(同一文件、同一账号、同一设备) |
|
|
151
|
+
| 苏格兰酒吧 Scottish Pub | 真实在用的功能 | 找出用户真正在用的功能,确认它们被测过 |
|
|
152
|
+
|
|
153
|
+
### 旅馆区 Hotel District
|
|
154
|
+
|
|
155
|
+
| 巡游 | 意图 | 脚本 |
|
|
156
|
+
| --- | --- | --- |
|
|
157
|
+
| 下雨取消 Rained-Out | 中止长任务 | 启动长任务后取消/退出/Esc,看状态是否干净 |
|
|
158
|
+
| 沙发土豆 Couch Potato | 最省力 | 只用最少操作、默认值、只填必填项、纯鼠标 |
|
|
159
|
+
|
|
160
|
+
### 灰色地带 Seedy District
|
|
161
|
+
|
|
162
|
+
| 巡游 | 意图 | 脚本 |
|
|
163
|
+
| --- | --- | --- |
|
|
164
|
+
| 破坏者 Saboteur | 破坏环境 | 断资源、断网、拔设备、把磁盘塞满、强杀进程 |
|
|
165
|
+
| 反社会 Antisocial | 逆向使用 | 无效输入、错误顺序、错误格式、并发乱序操作 |
|
|
166
|
+
| 强迫症 Obsessive-Compulsive | 重复与错误路径 | 反复执行同一步骤与错误路径,直到出现异常 |
|
|
167
|
+
|
|
168
|
+
> **注意**:常被提到的 "Configuration Tour" 与 "Dirty Harry Tour" **不在**该书巡游索引与公开速查表里,
|
|
169
|
+
> 本插件不作为标准巡游引用(配置类与环境脏数据类覆盖,用"平台/数据透镜 + 反社会/破坏者巡游"代替)。
|
|
170
|
+
> The widely repeated *Configuration* and *Dirty Harry* tours are not in the book's tour index or the
|
|
171
|
+
> public cheatsheets; this plugin does not present them as canonical.
|
|
172
|
+
|
|
173
|
+
**记录与产出**:每次会话每条巡游记一行(巡游 → 区域 → 观察),跨会话维护覆盖矩阵;
|
|
174
|
+
巡游日志不是缺陷报告——**发现要单独落盘成 finding**。
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## F. 无障碍作为模拟轴 / Accessibility as a simulation axis
|
|
179
|
+
|
|
180
|
+
无障碍是**唯一"合法的模拟用户"**:一个真人按公开标准采用一种交互模式,步骤可复现、判据可引用。
|
|
181
|
+
|
|
182
|
+
### F.1 仅键盘走一遍(12 步)/ Keyboard-only pass
|
|
183
|
+
|
|
184
|
+
依据 WebAIM 键盘可达性指南与 WCAG 2.2(2.1.1 键盘、2.1.2 无键盘陷阱、2.4.3 焦点顺序、
|
|
185
|
+
2.4.7 焦点可见、**2.4.11 焦点不被遮挡**〔2.2 新增〕、**2.5.7 拖拽动作**〔2.2 新增,需提供
|
|
186
|
+
非拖拽的单指针替代〕):
|
|
187
|
+
|
|
188
|
+
1. **物理上把鼠标收起来**(不是"尽量不用")。
|
|
189
|
+
2. `Tab` 前进 / `Shift+Tab` 后退走完整页;每一站都要有**可见**焦点指示;不许有 `outline:0`。
|
|
190
|
+
3. 焦点顺序应与视觉顺序一致(左→右、上→下);`tabindex ≥ 1` 是否把顺序搞乱了。
|
|
191
|
+
4. 激活:链接用 `Enter`;按钮 `Enter` **或** `Space` 都要能用。
|
|
192
|
+
5. 复选框用 `Space`;单选组用方向键移动、`Space` 选中、`Tab` 离开整组。
|
|
193
|
+
6. 下拉选择:方向键移动、`Space` 展开、`Enter`/`Esc` 选择并收起。
|
|
194
|
+
7. 复合控件(菜单、树、标签页)用方向键 + `Home`/`End`;滑块用方向键 + `PageUp`/`PageDown`。
|
|
195
|
+
8. `Esc` 关闭对话框/菜单并释放焦点;关闭后焦点应回到打开它的控件。
|
|
196
|
+
9. 试"跳到主内容"链接与标题/地标导航。
|
|
197
|
+
10. **专找陷阱**:Tab 进去以后,确认能否用 Tab/方向键/`Esc` 出来;出不来就是 2.1.2 失败。
|
|
198
|
+
11. 移动端接外接键盘再试一遍。
|
|
199
|
+
12. 焦点指示弱或被遮挡时,**截一张图**(粘性页脚挡住焦点是 2.4.11 的典型失败)。
|
|
200
|
+
|
|
201
|
+
### F.2 屏幕阅读器 / Screen readers
|
|
202
|
+
|
|
203
|
+
视障用户的消费方式是**线性且语义化**的(标题 → 地标 → 列表 → 表单),常常感知不到布局、
|
|
204
|
+
颜色和空间邻近;焦点顺序与朗读顺序可能不同;**被朗读的是可访问名称,不是可见文字**。
|
|
205
|
+
|
|
206
|
+
| 平台 | 键位要点 | 必查 |
|
|
207
|
+
| --- | --- | --- |
|
|
208
|
+
| macOS VoiceOver | `VO = Control+Option`;`VO+U` 打开转子(标题/链接/表单/地标);`VO+Shift+↓` 进入组,`VO+Shift+↑` 退出 | 标题层级是否真实(不是样式冒充);进入/退出嵌套组是否错乱;表单标签与错误是否被朗读 |
|
|
209
|
+
| iOS VoiceOver | 两指旋转 = 转子;右/左滑 = 下/上一项;双击 = 激活;三指滑 = 滚动 | 每个控件有标签+角色+提示;朗读顺序与视觉一致;弹窗/警告会被朗读;自定义手势有替代 |
|
|
210
|
+
| Windows NVDA | `NVDA+Space` 浏览/焦点模式切换;`H` 标题 `K` 链接 `D` 地标 `F` 表单字段 `B` 按钮;`NVDA+F7` 元素列表 | 角色/状态/标签是否朗读;实时区域与 toast 是否播报;换浏览器复测 |
|
|
211
|
+
| Windows Narrator | `Caps Lock+Space` 扫描模式;`Caps Lock+F7` 元素列表 | 扫描模式下导航、退出后输入是否正常 |
|
|
212
|
+
|
|
213
|
+
> **观察记录必须包含"听到什么",不只是"看到什么"**:一个缺陷可能在画面上不存在、在耳朵里震耳欲聋。
|
|
214
|
+
> The log must record **what was heard**, not only what was seen.
|
|
215
|
+
|
|
216
|
+
---
|
|
217
|
+
|
|
218
|
+
## G. 风险排序与抽样 / Risk ranking and sampling
|
|
219
|
+
|
|
220
|
+
```text
|
|
221
|
+
风险分 = 影响面(多少人物/场景受影响) × 概率(多容易出现) × 不可检测性(错了能不能马上发现)
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
先测前 20% 风险最高的区域;P0 全量、P1 抽样 50%、P2 每类至少 1 条、P3 只跑视觉基线。
|
|
225
|
+
抽样规则**写进计划**,事后不得更改(改了就是选择偏差)。
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## H. 扫描记录纪律 / Sweep discipline
|
|
230
|
+
|
|
231
|
+
- 每条结论:`启发式/巡游` + `适用处(界面+元素)` + `结论(通过/违反/未验证)` + `证据文件`。
|
|
232
|
+
- 同一条发现只能归到一个"根因";如果一个界面里同一个根因造成 5 处违反,写成 1 条 + 5 个复现点。
|
|
233
|
+
- 不许写"整体不够友好"这类无法指认的结论。
|
|
234
|
+
- 扫描完成率要报数:14 条巡游里实际走了几条、10 项启发式里哪几项未验证。
|
|
235
|
+
|
|
236
|
+
**出处与链接见 [SOURCES.md](SOURCES.md)。**
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
# 人物、场景与任务 / Personas, Scenarios and Tasks
|
|
2
|
+
|
|
3
|
+
> 这一层决定"模拟谁、走哪条路"。人物与场景都是**观察的架子**,不是关于真实用户的证据。
|
|
4
|
+
> This layer decides who is simulated and which path is walked. Personas and scenarios are
|
|
5
|
+
> **scaffolding for observation**, never evidence about real users.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 一、人物 / Personas
|
|
10
|
+
|
|
11
|
+
### 1.1 依据从哪来 / Where the evidence comes from
|
|
12
|
+
|
|
13
|
+
只允许这五类来源,并在 `personas.md` 的"依据"列写明:
|
|
14
|
+
Only these five sources are allowed, and the "source" column must name one:
|
|
15
|
+
|
|
16
|
+
| 来源 Source | 怎么用 How |
|
|
17
|
+
| --- | --- |
|
|
18
|
+
| 用户访谈 / 可用性会话记录 | 直接引用用户的原话作为动机 |
|
|
19
|
+
| 支持工单 / 客服邮件 | 统计高频卡点,形成场景 |
|
|
20
|
+
| 埋点与漏斗 | 找出真实放弃点,作为"会在哪里放弃" |
|
|
21
|
+
| 设计目标(如"30 秒内导出") | 变成可判定的成功标准 |
|
|
22
|
+
| 你自己第一次使用的真实体验 | 作为新手人物的最低门槛 |
|
|
23
|
+
|
|
24
|
+
**不许**凭空写"25–35 岁白领、喜欢咖啡"这类与缺陷无关的画像——那是装饰,不是依据。
|
|
25
|
+
Never write decorative demographics; persona attributes must change what you test.
|
|
26
|
+
|
|
27
|
+
### 1.2 四个必填属性 / Four attributes that must be filled
|
|
28
|
+
|
|
29
|
+
| 属性 Attribute | 取值 Values | 影响什么 What it changes |
|
|
30
|
+
| --- | --- | --- |
|
|
31
|
+
| 熟练度 Expertise | 新手 novice / 普通 regular / 专家 expert | 是否需要引导、是否依赖快捷键 |
|
|
32
|
+
| 使用频率 Frequency | 第一次 / 每周 / 每天 100 次 | 容忍几秒延迟、能否记住状态 |
|
|
33
|
+
| 设备与姿势 Device & posture | 触控板 / 鼠标 / 触屏 / 外接键鼠 / 单手 | 命中区、悬停依赖、拖拽可达性 |
|
|
34
|
+
| 可访问性需求 Accessibility | 无 / 键盘-only / 屏幕阅读器 / 动态字体 / 高对比度 | 焦点顺序、朗读文本、缩放与重排 |
|
|
35
|
+
|
|
36
|
+
再加一句硬要求 / Plus one hard line: **"他会在哪里放弃"(where this persona gives up)**。
|
|
37
|
+
|
|
38
|
+
### 1.3 最少三个,最多五个 / Three to five, no more
|
|
39
|
+
|
|
40
|
+
| 槽位 Slot | 建议 Suggested | 为什么 Why |
|
|
41
|
+
| --- | --- | --- |
|
|
42
|
+
| P-01 | 新手,第一次用 | 发现入口、术语、引导问题 |
|
|
43
|
+
| P-02 | 专家,高频重复 | 发现效率、快捷键、批量操作问题 |
|
|
44
|
+
| P-03 | 键盘-only 或视障或单手 | 发现焦点、可达性、命中区问题 |
|
|
45
|
+
| P-04(可选) | 中断者 / 多任务者 | 发现状态保持、恢复、并发问题 |
|
|
46
|
+
| P-05(可选) | 谨慎/怀疑型 | 发现确认、撤销、隐私提示问题 |
|
|
47
|
+
|
|
48
|
+
### 1.4 反模式 / Anti-patterns
|
|
49
|
+
|
|
50
|
+
- 完人人物(什么都会、什么都不生气)→ 找不到缺陷。
|
|
51
|
+
- 只按人口统计写人物 → 与测试动作无关。
|
|
52
|
+
- 一个人物代表"所有用户" → 覆盖不到边缘,也解释不了差异。
|
|
53
|
+
- 用真实用户姓名与隐私信息 → 合规问题,用角色名代替。
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 二、场景 / Scenarios
|
|
58
|
+
|
|
59
|
+
### 2.1 公式 / The formula
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
场景 = 人物 + 目标 + 触发条件 + 约束 + 成功标准 + 途中检查点
|
|
63
|
+
Scenario = persona + goal + trigger + constraints + success criteria + checkpoints
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
| 字段 Field | 例 Example |
|
|
67
|
+
| --- | --- |
|
|
68
|
+
| 人物 | P-01 新手 |
|
|
69
|
+
| 目标 Goal | 把当前笔记导出成 PDF 发给同事 |
|
|
70
|
+
| 触发 Trigger | 会议前 5 分钟,第一次导出 |
|
|
71
|
+
| 约束 Constraints | 只有一个触控板;不知道菜单在哪 |
|
|
72
|
+
| 成功标准 Success | 5 分钟内得到 PDF,文件名可辨认 |
|
|
73
|
+
| 检查点 Checkpoints | 找到入口 / 选对格式 / 找到保存位置 / 看到完成反馈 |
|
|
74
|
+
|
|
75
|
+
### 2.2 场景类型必须齐 / Scenario types that must all appear
|
|
76
|
+
|
|
77
|
+
| 类型 Type | 例子 Example | 找什么 Finds |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| 首次成功 First success | 新装应用完成第一次核心任务 | 引导、术语、入口可发现性 |
|
|
80
|
+
| 熟练例行 Routine | 每天做 100 次的操作 | 效率、快捷键、批量、重复确认 |
|
|
81
|
+
| 出错与恢复 Error & recovery | 输错、断网、权限被拒、文件损坏 | 错误信息、恢复路径、数据是否丢 |
|
|
82
|
+
| 中断与恢复 Interruption | 做到一半接电话/切应用 | 状态保持、草稿、回到原处 |
|
|
83
|
+
| 破坏性操作 Destructive | 删除、覆盖、批量修改 | 确认、撤销、可逆性 |
|
|
84
|
+
| 交接与协作 Handoff | 别人发来的文件/链接 | 上下文、权限、命名 |
|
|
85
|
+
|
|
86
|
+
### 2.3 场景来源 / Where scenarios come from
|
|
87
|
+
|
|
88
|
+
真实会话与工单 · 支持邮件 · 埋点失败漏斗 · 设计目标 · 竞品对照 · 你第一次使用的体验。
|
|
89
|
+
每个场景都要能回答:"这个场景失败,用户在画面上的哪一刻会看出来?"
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 三、任务分解 / Task decomposition
|
|
94
|
+
|
|
95
|
+
场景不能直接测,要拆成**任务卡**。A scenario is not testable until it becomes task cards.
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
任务卡 Task card
|
|
99
|
+
任务 ID / Task ID:T-01
|
|
100
|
+
人物 / Persona:P-01 新手
|
|
101
|
+
场景 / Scenario:S-01 首次导出
|
|
102
|
+
意图 / Intent:把这份笔记变成能发出去的 PDF(意图,不是步骤清单)
|
|
103
|
+
开始状态 / Start state:笔记本打开,有 2 条笔记,无未保存修改
|
|
104
|
+
步骤 / Steps:只用「移动 / 悬停 / 单击 / 双击 / 右键 / 拖拽 / 滚轮 / 键入 / 焦点移动 / 等待」
|
|
105
|
+
成功标准 / Success criteria(画面上可见):屏幕上出现「已导出」提示,且导出目录里出现
|
|
106
|
+
文件名含笔记标题的 PDF
|
|
107
|
+
检查点 / Checkpoints:找到入口 → 选对格式 → 选对位置 → 完成反馈
|
|
108
|
+
允许的求助 / Allowed help:无(新手人物不允许查文档)
|
|
109
|
+
级别 / Levels:L1、L2、L3 各跑一次
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 3.1 步骤的写法 / How to write steps
|
|
113
|
+
|
|
114
|
+
- 用**意图 + 动作**,不要写"点击坐标 (412,88)"。
|
|
115
|
+
- 不写"调用导出接口""用脚本点一下"——那是 R1 禁止的内部指针指令。
|
|
116
|
+
- 允许写"等待导出完成(最多 30 秒)"。
|
|
117
|
+
- 新手人物的任务里**不写答案**(不要写"点击右上角齿轮"),否则测的是执行而不是可发现性。
|
|
118
|
+
|
|
119
|
+
### 3.2 成功标准必须可判定 / Success criteria must be decidable
|
|
120
|
+
|
|
121
|
+
| 不合格 Not decidable | 合格 Decidable |
|
|
122
|
+
| --- | --- |
|
|
123
|
+
| "导出成功" | "出现『已导出』提示,且导出目录出现新 PDF" |
|
|
124
|
+
| "界面友好" | "菜单第一层能直接看到『导出』两个字" |
|
|
125
|
+
| "没报错" | "控制台无错误弹窗,且列表首行状态列显示『已同步』" |
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## 四、旅程 / The user journey
|
|
130
|
+
|
|
131
|
+
沿时间轴走一遍,标记每一步的"期望 vs 实际"。Walk the timeline and mark expectation vs observed.
|
|
132
|
+
|
|
133
|
+
| # | 阶段 Stage | 要问的问题 Question |
|
|
134
|
+
| --- | --- | --- |
|
|
135
|
+
| 1 | 进入 Entry | 用户凭什么知道该打开哪里、点哪个? |
|
|
136
|
+
| 2 | 首次成功 First success | 多久得到第一次成功?中间被迫学了几个新词? |
|
|
137
|
+
| 3 | 熟练使用 Routine | 第 100 次做同一件事,还有几个多余步骤? |
|
|
138
|
+
| 4 | 出错与恢复 Error & recovery | 出错后用户知道发生了什么、下一步做什么吗? |
|
|
139
|
+
| 5 | 退出与再进入 Exit & return | 再回来时,状态、草稿、位置还在吗? |
|
|
140
|
+
|
|
141
|
+
旅程记录里额外标三类现象 / Mark three extra phenomena:
|
|
142
|
+
|
|
143
|
+
- **断头路 Dead end**:走到某处无路可走,也没有出口提示。
|
|
144
|
+
- **绕路 Detour**:为了达成目标必须离开当前上下文。
|
|
145
|
+
- **记忆负担 Memory burden**:用户被迫记住上一步看见但不能复制的信息。
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 五、一个完整例子 / A worked example
|
|
150
|
+
|
|
151
|
+
| 项 | 内容 |
|
|
152
|
+
| --- | --- |
|
|
153
|
+
| 人物 P-01 | 新手,第一次用,只有触控板,目标"把笔记发给同事",会在"看到一堆陌生术语"时放弃 |
|
|
154
|
+
| 场景 S-01 | 会议前 5 分钟,把当前笔记导出成 PDF |
|
|
155
|
+
| 任务 T-01 | 意图:拿到能发出去的 PDF;成功标准:出现「已导出」提示 + 目录里出现新 PDF |
|
|
156
|
+
| 发现 F-003 | L1 下菜单只有「分享 / 打印 / 同步」,没有「导出」;L3 下 ⌘E 直接可用 → **缺鼠标可达路径(新手在 L1 会放弃)** |
|
|
157
|
+
|
|
158
|
+
这条发现的价值不在于"导出坏了",而在于**"只有会快捷键的人才能导出"**——
|
|
159
|
+
这正是用户模拟工作流相对元素清单的增量。
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: software-design-test
|
|
3
|
+
description: 软件设计测试(模拟真实用户):把"真实用户会怎么用"变成可执行、可复现的测试——先建人物与场景,再拆成任务卡,用出声思维在三级操作模式(仅鼠标 / 鼠标+键盘无快捷键 / 可用快捷键)下真实操作,按"测试内容清单"逐类检查(窗口与界面尺寸、鼠标与指针速度、目标尺寸与间距、工具栏与菜单、文字排版、布局层级、反馈状态、效率流程、键盘焦点、可访问性、性能响应、错误恢复、数据输入、跨设备一致性、视觉打磨),靠录屏与截屏判断功能元素是否完好、工具是否可用;覆盖 macOS、Windows、iPhone、iPad。禁止任何内部指针注入指令,开始前先申请鼠标、键盘与录屏权限。**触发词:用户说「模拟真实用户测试」或英文等价表达(simulate a real user test / run a real-user simulation test / simulated user testing / test it like a real user)时,立即进入真实模拟测试。** Software design testing by simulating real users: personas, scenarios and executable task cards, think-aloud execution in three input modes, a full what-to-test checklist (window and screen size, pointer dynamics and speed, target size, toolbars and menus, legibility, layout, feedback, efficiency, keyboard focus, accessibility, performance, errors, data input, cross-device consistency, polish), screen-evidence judgement, no synthetic pointer injection, permission gate first. Trigger phrases — "模拟真实用户测试", "simulate a real user test", "run a real-user simulation test", "simulated user testing" — start the real simulation immediately.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 软件设计测试:模拟真实用户 / Software Design Testing by Simulating Real Users
|
|
7
|
+
|
|
8
|
+
> **本技能是插件的重心。** 它回答一个问题:**怎么像真实用户那样去测一个软件,并真的找出问题。**
|
|
9
|
+
> This is the plugin's centerpiece: **how to test software the way a real user would, and actually
|
|
10
|
+
> find the problems.**
|
|
11
|
+
|
|
12
|
+
模拟真实用户不是"假装点几下",而是三件事同时成立:
|
|
13
|
+
|
|
14
|
+
| 要素 | 含义 | 缺了它会怎样 |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| **人物 Persona** | 以谁的身份:熟练度、频率、设备与姿势、可访问性需求、"会在哪里放弃" | 退化成无立场的"随便点点" |
|
|
17
|
+
| **任务 Task** | 他此刻想完成什么:意图 + 开始状态 + 画面可判定的成功标准 | 退化成元素清单核对 |
|
|
18
|
+
| **画面 Screen** | 证据只来自录屏与截屏;代码、DOM、日志只是线索 | 结论无法复现、无法被他人确认 |
|
|
19
|
+
|
|
20
|
+
> Simulating a real user means three things at once: **who** (persona), **what for** (task), and
|
|
21
|
+
> **proved by the screen** (recording and screenshots only).
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 0. 触发即开始 / Trigger phrases start the test
|
|
26
|
+
|
|
27
|
+
用户只要发出下面任意一句,就**立即进入真实模拟测试**,不要再讨论方法论、不要再要求确认流程:
|
|
28
|
+
|
|
29
|
+
| 语言 | 触发词 Trigger phrases |
|
|
30
|
+
| --- | --- |
|
|
31
|
+
| 中文 | **模拟真实用户测试** · 模拟真实用户 · 真实用户测试 · 真实用户模拟测试 |
|
|
32
|
+
| English | **simulate a real user test** · run a real-user simulation test · simulated user testing · real-user simulation · test it like a real user |
|
|
33
|
+
|
|
34
|
+
**收到触发词后的动作序列 / What happens next**:
|
|
35
|
+
|
|
36
|
+
1. **对象已明确** → 直接进 P0:一句话复述要测的应用与范围,紧接着发权限问卷(这是**唯一**必须先问的东西)。
|
|
37
|
+
2. 用户答复权限后 → 立刻 `session.mjs init` + `gate`,从 P1 人物/场景开始跑,**不再回头确认方法**。
|
|
38
|
+
3. **权限本会话已授予且对象明确** → 直接开始,不再问任何问题。
|
|
39
|
+
4. **只有触发词、没有对象** → 只问一个问题:"测哪个应用/哪个功能?"得到答复后立即开始。
|
|
40
|
+
5. **测试中途出现触发词** → 继续当前会话,不新建会话、不重新问权限(除非范围变了)。
|
|
41
|
+
|
|
42
|
+
**禁止 / Do not**:
|
|
43
|
+
|
|
44
|
+
- 收到触发词后回答"我可以帮你做 X""这是方法论介绍"或罗列流程细节——直接开始。
|
|
45
|
+
- 反复确认"是否按 L1→L2→L3""要不要录屏"——权限问卷里已经问过。
|
|
46
|
+
- 每发现一个小问题就停下来汇报;按任务卡/级别跑完一段再汇总。
|
|
47
|
+
|
|
48
|
+
> On a trigger phrase, restate the target in one line, ask the permission questionnaire (the only
|
|
49
|
+
> mandatory ask), then start. Do not re-litigate the method.
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 1. 三条不可交换的硬规则 / Three non-negotiable rules
|
|
54
|
+
|
|
55
|
+
1. **人是唯一的手 / The human is the only hand** —— 只用真实鼠标键盘操作;任何内部指针指令
|
|
56
|
+
(注入指针/触摸/按键、驱动自动化框架、调用软件内部句柄)一律禁止,完整清单见
|
|
57
|
+
[BANNED-INPUTS.md](../observed-ui-test/BANNED-INPUTS.md)。
|
|
58
|
+
2. **屏幕是唯一证据 / The screen is the only evidence** —— 元素是否完好、工具是否可用,都从画面判定。
|
|
59
|
+
3. **权限先行 / Permissions first** —— 开始前必须问过用户:鼠标、键盘级别、录屏、截屏、系统权限、
|
|
60
|
+
数据边界与合规确认;未答复不开始(问卷见 [PERMISSIONS.md](../observed-test-plan/PERMISSIONS.md))。
|
|
61
|
+
|
|
62
|
+
执行细节(三级模式、十大观察维度、取证协议、报告模板)全部沿用 `observed-ui-test`。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 2. 测什么 / What to test — 测试内容清单
|
|
67
|
+
|
|
68
|
+
用户真正关心的是**测试内容本身**,不是术语。完整清单在 **[TEST-CONTENT.md](TEST-CONTENT.md)**,
|
|
69
|
+
共 15 类、每类给出"检查项 / 怎么看 / 判据":
|
|
70
|
+
|
|
71
|
+
| # | 类别 | 用户最常先问的 |
|
|
72
|
+
| --- | --- | --- |
|
|
73
|
+
| §1 | 窗口与界面尺寸 Window & screen size | 这个界面的大小便于使用吗?最小尺寸/分屏/缩放 200% 还能用吗? |
|
|
74
|
+
| §2 | 鼠标速度与指针 Pointer dynamics & speed | 鼠标要跑多远?要不要很慢很准?双击速度跟系统一致吗?悬停菜单会不会"路过就弹"? |
|
|
75
|
+
| §3 | 目标尺寸与间距 Target size | 按钮够大吗?相邻按钮会不会误点?(24 / 44 / 48 阈值) |
|
|
76
|
+
| §4 | 工具栏与菜单 Toolbar & menus | 图标不看提示能看懂吗?常用命令一级可达吗?变窄时会不会消失? |
|
|
77
|
+
| §5 | 文字与排版 Legibility | 对比度、字号、截断、深色模式、放大后破版 |
|
|
78
|
+
| §6 | 布局与层级 Layout | 主次分明吗?弹窗挡东西吗?提示被裁了吗? |
|
|
79
|
+
| §7 | 反馈与状态 Feedback | 点了有反应吗?加载/成功/失败提示清楚吗? |
|
|
80
|
+
| §8 | 效率与流程 Efficiency | 要走几步?要重复填吗?能撤销吗? |
|
|
81
|
+
| §9 | 键盘与焦点 Keyboard & focus | Tab 走得通吗?焦点看得见吗?有陷阱吗? |
|
|
82
|
+
| §10 | 可访问性 Accessibility | 读屏、仅键盘、颜色依赖、动效可关 |
|
|
83
|
+
| §11 | 性能与响应 Performance | 启动、滚动、输入延迟、长时间运行 |
|
|
84
|
+
| §12 | 错误与恢复 Errors | 报错说人话吗?数据丢吗?能恢复吗? |
|
|
85
|
+
| §13 | 数据与输入 Data & input | 空/超长/emoji/中文输入法/粘贴表格 |
|
|
86
|
+
| §14 | 跨设备一致性 Cross-device | 四个端的位置、命名、行为一致吗? |
|
|
87
|
+
| §15 | 视觉打磨 Polish | 图标、对齐、圆角、动效、文案(S4 级) |
|
|
88
|
+
|
|
89
|
+
**用法**:会话开始时先跑 [TEST-CONTENT.md](TEST-CONTENT.md) §0 的"十分钟快扫",再按需要逐类展开;
|
|
90
|
+
每条违反落盘时带上 `content`(类别)与 `criteria`(判据)字段,报告会按**测试内容**聚合出分布。
|
|
91
|
+
|
|
92
|
+
> The checklist answers "what do we actually look at": size, pointer travel, toolbar readability,
|
|
93
|
+
> targets, text, layout, feedback, efficiency, keyboard, accessibility, performance, errors, data,
|
|
94
|
+
> cross-device consistency, polish — each with how-to-check and a criterion.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## 3. 十步流程 / The ten steps
|
|
99
|
+
|
|
100
|
+
| # | 步骤 Step | 一句话 | 产出 |
|
|
101
|
+
| --- | --- | --- | --- |
|
|
102
|
+
| P0 | 立项与权限 Charter & gate | 要回答什么、不回答什么、何时停 | `session.json` |
|
|
103
|
+
| P1 | 人物 Personas | 3–5 个,含依据与"会在哪放弃" | `personas.md` |
|
|
104
|
+
| P2 | 场景 Scenarios | 六类场景各至少一条 | `scenarios.md` |
|
|
105
|
+
| P3 | 任务卡 Task cards | 意图 + 画面可判定的成功标准(新手卡里不写答案) | `matrix.md` |
|
|
106
|
+
| P4 | 旅程 Journey | 进入 → 首次成功 → 熟练 → 出错恢复 → 退出再进入 | `journey.md` |
|
|
107
|
+
| P5 | 启发式与巡游 Sweep | 认知走查四问 → 十项启发式 → HICCUPPS(F)/SFDIPOT → 巡游 | `heuristics.md` |
|
|
108
|
+
| P6 | 执行 Sessions | 出声思维 × 三级模式 × 录屏截屏 | `findings.jsonl`、`evidence/` |
|
|
109
|
+
| P7 | 判定 Adjudicate | 四分类(测试者/观察/产品/环境)→ 定级 → 复现与最小化 | 定稿发现 |
|
|
110
|
+
| P8 | 报告 Report | 去重、按根因合并、报告"用户模拟覆盖" | `report.md` |
|
|
111
|
+
| P9 | 复测 Retest | 同一任务卡、同一人物、同一级别 | 追加到原条目 |
|
|
112
|
+
|
|
113
|
+
逐步做法、会话节奏模板、可选方法(SBTM、首点/五秒/游击/日记、启发式评估、bug bash)与度量:
|
|
114
|
+
**[WORKFLOW.md](WORKFLOW.md)**。
|
|
115
|
+
|
|
116
|
+
> Full procedure — session rhythm, optional methods and metrics: [WORKFLOW.md](WORKFLOW.md).
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 4. 怎么"模拟得像" / How to simulate credibly
|
|
121
|
+
|
|
122
|
+
| 纪律 Discipline | 做法 Practice |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| 人物有依据 | 访谈、工单、埋点、设计目标、你自己第一次使用的体验;**不许凭空编造"典型用户"** |
|
|
125
|
+
| 人物有约束 | 一只手、赶时间、第一次用、只有触控板、键盘-only、动态字体——约束才产生缺陷 |
|
|
126
|
+
| 人物有放弃点 | 每个人物写一句"他会在哪里放弃" |
|
|
127
|
+
| 任务不写答案 | 新手任务卡写"点击右上角齿轮"→ 你测的是执行力,不是可发现性 |
|
|
128
|
+
| 出声思维 | 操作者边做边说"我在找什么、我以为会发生什么";观察者只问中性问题("你现在在想什么?") |
|
|
129
|
+
| 不替软件找补 | 不知道就说不知道;卡住本身就是发现 |
|
|
130
|
+
| 全路径覆盖 | 成功路径只是一半;出错与恢复、中断、破坏性操作、交接才是缺陷密集区 |
|
|
131
|
+
| 三段式取证 | 录屏全程 + 每次点击前后静帧 + 关键状态截图 |
|
|
132
|
+
| 承认边界 | 模拟提高**发现率**,不提高**结论权威性**;高风险功能必须补真人会话(见 [SOURCES.md](SOURCES.md)) |
|
|
133
|
+
|
|
134
|
+
细节:[PERSONAS-SCENARIOS.md](PERSONAS-SCENARIOS.md)(人物/场景/任务卡)、
|
|
135
|
+
[HEURISTICS.md](HEURISTICS.md)(认知走查、Nielsen 十项、HICCUPPS(F)、SFDIPOT、巡游、
|
|
136
|
+
WCAG 2.2 仅键盘与屏幕阅读器步骤)、[DEFECTS.md](DEFECTS.md)(观察记录、失败四分类、复现与最小化)、
|
|
137
|
+
[SOURCES.md](SOURCES.md)(方法与出处,标注已核验/未核验)。
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
## 5. 三级操作模式 × 人物 / Modes × personas
|
|
142
|
+
|
|
143
|
+
同一张任务卡在三级下的期待完全不同——**差异本身就是结论**:
|
|
144
|
+
|
|
145
|
+
| 级别 Level | 适合的人物 Persona | 典型发现 Typical finds |
|
|
146
|
+
| --- | --- | --- |
|
|
147
|
+
| **L1 仅鼠标** | 新手、单手、触屏用户 | 找不到入口、必须悬停才知道、右键菜单缺项、拖拽无反馈 |
|
|
148
|
+
| **L2 鼠标+键盘(禁快捷键)** | 键盘-only、视障、键盘重度用户 | Tab 走不到、焦点环丢失、焦点陷阱、顺序与视觉不符 |
|
|
149
|
+
| **L3 鼠标+键盘+快捷键** | 专家、每天用 100 次的人 | 快捷键冲突、两条路径结果不一致、快捷键提示写错 |
|
|
150
|
+
|
|
151
|
+
`L1 做不到、L3 做得到` = 缺鼠标可达路径(新手会直接放弃);`L1/L2 做得到、L3 失败` = 快捷键路径缺陷。
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 6. 最小可用流程 / Minimum viable run
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
cd software-design-test
|
|
159
|
+
|
|
160
|
+
# P0 会话与权限闸门
|
|
161
|
+
node scripts/session.mjs init ./ui-test-<app>-<date> --platform macos --app "<app>"
|
|
162
|
+
node scripts/session.mjs gate ./ui-test-<app>-<date> --mouse yes --keyboard L2 \
|
|
163
|
+
--screen-recording yes --screenshot yes --compliance yes
|
|
164
|
+
|
|
165
|
+
# P1–P4 人物 / 场景 / 任务卡 / 旅程:填 init 生成的四个模板文件
|
|
166
|
+
# P5 只读观察有没有注入工具在跑
|
|
167
|
+
node scripts/guard.mjs scan ./ui-test-<app>-<date>
|
|
168
|
+
|
|
169
|
+
# P6 执行:录屏 + 点击前后静帧;每条发现立刻落盘
|
|
170
|
+
node scripts/capture.mjs record ./ui-test-<app>-<date> --label P01-S01-L1 --seconds 90
|
|
171
|
+
node scripts/session.mjs finding ./ui-test-<app>-<date> --json '{
|
|
172
|
+
"level":"L1","persona":"P-01 新手 Novice","scenario":"S-01 首次导出 First export",
|
|
173
|
+
"task_outcome":"fail","heuristic":"可发现性 Discoverability","tour":"后巷 Back Alley",
|
|
174
|
+
"title_zh":"新手在 L1 找不到导出入口","title_en":"Novice cannot find export at L1",
|
|
175
|
+
"content":"窗口与界面尺寸 Window size","criteria":"最小尺寸下主按钮不可见","severity":"S2","kind":"defect","repro_rate":"3/3","modes":"L1 fail / L2 fail / L3 pass"
|
|
176
|
+
}'
|
|
177
|
+
|
|
178
|
+
# P8 报告(含"用户模拟覆盖"一节)
|
|
179
|
+
node scripts/report.mjs build ./ui-test-<app>-<date>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 7. 反模式 / Anti-patterns
|
|
185
|
+
|
|
186
|
+
| 反模式 | 为什么错 |
|
|
187
|
+
| --- | --- |
|
|
188
|
+
| 人物是完人(什么都会、从不生气) | 找不到任何缺陷 |
|
|
189
|
+
| 只走成功路径 | 只发现表面问题;断头路与恢复路径才是重点 |
|
|
190
|
+
| 任务卡写出答案 | 把可用性测试做成了执行力测试 |
|
|
191
|
+
| 观察者引导("你没看到导出按钮吗?") | 操作者照着做,问题消失 |
|
|
192
|
+
| 用脚本/AI 代点一遍 | 违反硬规则一:那就是内部指针指令 |
|
|
193
|
+
| 用代码/DOM/日志判定界面正确 | 破坏证据链,结论不可复现 |
|
|
194
|
+
| 把模拟结论写成"用户都……" | 越界:模拟不是用户研究 |
|
|
195
|
+
| 一条根因报成五条缺陷 | 用症状数量冒充缺陷数量 |
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## 8. 与其他两个技能的关系 / How the three skills fit
|
|
200
|
+
|
|
201
|
+
```text
|
|
202
|
+
observed-test-plan → software-design-test(本技能,重心) → observed-ui-test
|
|
203
|
+
权限问卷、范围、 人物 → 场景 → 任务卡 → 旅程 → 三级模式、十大观察维度、
|
|
204
|
+
元素清单、用例矩阵 启发式/巡游 → 执行 → 判定 → 报告 取证协议、报告模板
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
三个技能共用同一套硬规则;本技能负责**"以谁、走哪条路、找哪类 bug"**,
|
|
208
|
+
`observed-test-plan` 负责准备与闸门,`observed-ui-test` 负责执行与取证的细节。
|
|
209
|
+
|
|
210
|
+
> This skill decides who is simulated, which path is walked and which bugs are hunted; the other two
|
|
211
|
+
> supply preparation/gating and execution/evidence mechanics.
|