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.
Files changed (35) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/LICENSE +21 -0
  3. package/README.md +275 -0
  4. package/cordis.patch.yml +23 -0
  5. package/docs/FRAMEWORK.zh-en.md +149 -0
  6. package/docs/INSTALL.zh-en.md +226 -0
  7. package/docs/USAGE.zh-en.md +295 -0
  8. package/icon.svg +21 -0
  9. package/lib/index.js +197 -0
  10. package/lib/self-check.js +313 -0
  11. package/locale/en.json +6 -0
  12. package/locale/zh.json +6 -0
  13. package/package.json +80 -0
  14. package/scripts/capture.mjs +318 -0
  15. package/scripts/guard.mjs +311 -0
  16. package/scripts/report.mjs +484 -0
  17. package/scripts/session.mjs +709 -0
  18. package/scripts/verify.mjs +205 -0
  19. package/skills/observed-test-plan/MATRIX.md +99 -0
  20. package/skills/observed-test-plan/PERMISSIONS.md +109 -0
  21. package/skills/observed-test-plan/PLAN-TEMPLATE.md +93 -0
  22. package/skills/observed-test-plan/SKILL.md +135 -0
  23. package/skills/observed-ui-test/BANNED-INPUTS.md +161 -0
  24. package/skills/observed-ui-test/EVIDENCE.md +113 -0
  25. package/skills/observed-ui-test/FRAMEWORK.md +181 -0
  26. package/skills/observed-ui-test/LEVELS.md +137 -0
  27. package/skills/observed-ui-test/REPORT-TEMPLATE.md +111 -0
  28. package/skills/observed-ui-test/SKILL.md +210 -0
  29. package/skills/software-design-test/DEFECTS.md +205 -0
  30. package/skills/software-design-test/HEURISTICS.md +236 -0
  31. package/skills/software-design-test/PERSONAS-SCENARIOS.md +159 -0
  32. package/skills/software-design-test/SKILL.md +211 -0
  33. package/skills/software-design-test/SOURCES.md +118 -0
  34. package/skills/software-design-test/TEST-CONTENT.md +257 -0
  35. package/skills/software-design-test/WORKFLOW.md +293 -0
@@ -0,0 +1,118 @@
1
+ # 方法与出处 / Methods and Sources
2
+
3
+ > 标注:**✅ 已核验**(本次抓取过原文)· **⚠️ 未核验**(经典引用,链接未在本次会话抓取,或站点拒绝自动抓取)。
4
+ > Key: **✅ verified** (page fetched in this session) · **⚠️ unverified** (canonical reference; page not
5
+ > fetched, or the site refused automated access). 引用只用于说明方法来源,不构成对第三方主张的背书。
6
+
7
+ ---
8
+
9
+ ## 一、用户模拟与可用性 / User simulation and usability
10
+
11
+ | 方法 | 出处 | 核验 |
12
+ | --- | --- | --- |
13
+ | 认知走查四问与会话组织 | Wharton, Rieman, Lewis & Polson, *The Cognitive Walkthrough Method*(1994)[PDF](https://ics.uci.edu/~dfredmil/ics203b-SQ05/papers/Whartonetal99.pdf) · [NN/g 概述](https://www.nngroup.com/articles/cognitive-walkthroughs/) · Lewis et al.(1990)[DOI](https://dl.acm.org/doi/10.1145/97243.97279)(付费) | ✅(PDF/概述) |
14
+ | 十项可用性启发式 | Nielsen, J. *10 Usability Heuristics* [链接](https://www.nngroup.com/articles/ten-usability-heuristics/) | ✅ |
15
+ | 启发式评估的会话组织(3–5 人独立、两遍、合并去重、独立定级) | NN/g *How to Conduct a Heuristic Evaluation* [链接](https://www.nngroup.com/articles/how-to-conduct-a-heuristic-evaluation/) · Nielsen & Molich(1990)[DOI](https://dl.acm.org/doi/10.1145/97243.97281)(付费) | ✅ |
16
+ | 单人评估的发现率(严重 42% / 轻微 32%) | NN/g *Usability Problems Found by Heuristic Evaluation* [链接](https://www.nngroup.com/articles/usability-problems-found-by-heuristic-evaluation/) · Nielsen(1992)[DOI](https://dl.acm.org/doi/10.1145/142750.142834)(付费) | ✅(NN/g) |
17
+ | 严重级 0–4 的定义(频率 × 影响 × 持续性) | NN/g *How to Rate the Severity of Usability Problems* [链接](https://www.nngroup.com/articles/how-to-rate-the-severity-of-usability-problems/) | ✅ |
18
+ | 出声思维、任务脚本、引导性提问的禁忌 | NN/g *Thinking Aloud* [链接](https://www.nngroup.com/articles/thinking-aloud-the-1-usability-tool/) · *Task Scenarios* [链接](https://www.nngroup.com/articles/task-scenarios-usability-testing/) · *Leading Questions* [链接](https://www.nngroup.com/articles/leading-questions/) · gov.uk *Moderated usability testing* [链接](https://www.gov.uk/service-manual/user-research/using-moderated-usability-testing) | ✅ |
19
+ | N=5 与其局限(平均约 55%、方差大;不同人群各 3–5 人) | NN/g *Why You Only Need to Test with 5 Users* [链接](https://www.nngroup.com/articles/why-you-only-need-to-test-with-5-users/) · *How Many Test Users* [链接](https://www.nngroup.com/articles/how-many-test-users/) · Faulkner(2003)[链接](https://link.springer.com/article/10.3758/BF03195536) | ✅ |
20
+ | SUS / SEQ 与基准分(SUS 0–100,≈68) | Brooke, *SUS: A Quick and Dirty Usability Scale* [PDF 镜像](https://hell.meiert.org/core/pdf/sus.pdf) · [MeasuringU SUS](https://measuringu.com/sus/) · [SEQ](https://measuringu.com/seq/) | ✅ |
21
+ | 人物与场景 | NN/g *Personas* [链接](https://www.nngroup.com/articles/persona/) · Cooper, *About Face* 4th ed. ch.5 · Carroll, *Making Use* | ✅(NN/g)/⚠️(书) |
22
+ | 首次点击 / 五秒测试 | NN/g *5-Second Usability Test* [链接](https://www.nngroup.com/videos/5-second-usability-test/) · Optimal Workshop *Correct first click* [链接](https://www.optimalworkshop.com/blog/correct-first-click-lead-to-3x-higher-task-success) | ✅(供应商研究,非标准) |
23
+ | 旅程地图与服务蓝图 | NN/g *Journey Mapping 101* [链接](https://www.nngroup.com/articles/journey-mapping-101/) · *Service Blueprints* [链接](https://www.nngroup.com/articles/service-blueprints-definition/) | ✅ |
24
+ | 游击测试 / 内部试用 / 公测 | NN/g *Guerrilla HCI* [链接](https://www.nngroup.com/articles/guerrilla-hci/) · *Dogfooding* [链接](https://www.nngroup.com/articles/dogfooding/) · gov.uk *Beta phase* [链接](https://www.gov.uk/service-manual/agile-delivery/how-the-beta-phase-works) | ✅ |
25
+ | 可用性发现的写法与检查法总览 | NN/g *Actionable Usability Findings* [链接](https://www.nngroup.com/articles/actionable-usability-findings/) · *Summary of Inspection Methods* [链接](https://www.nngroup.com/articles/summary-of-usability-inspection-methods/) | ✅ |
26
+ | 知情同意(研究前/后、撤回权、删除) | NN/g *Obtaining Consent for User Research* [链接](https://www.nngroup.com/articles/informed-consent/) | ✅ |
27
+
28
+ > **两条必须写进方法里的外部约束**:① 检查类方法(走查、启发式评估)与真人会话**发现的是不同的问题**,
29
+ > 必须交替使用,不能互相替代;② "5 个用户"是**发现**的经验法则,不是覆盖保证。
30
+ > Two hard constraints: inspection and real sessions surface different problems (alternate them), and
31
+ > N=5 is a discovery heuristic, not a coverage guarantee.
32
+
33
+ ---
34
+
35
+ ## 二、探索式测试与启发式 / Exploratory testing and heuristics
36
+
37
+ | 方法 | 出处 | 核验 |
38
+ | --- | --- | --- |
39
+ | 基于会话的测试管理 SBTM(章程、时间盒 45 分钟–数小时、会话单、TBS、Charter vs Opportunity、15–20 分钟复盘、机会漂移阈值) | Bach, J. & Bach, J. *Session-Based Test Management* [索引](http://satisfice.us/sbtm/index.shtml) · [示例会话单](http://satisfice.us/sbtm/sample_session.htm) · [复盘清单](http://satisfice.us/sbtm/debrief_checklist.htm) | ✅ |
40
+ | 探索式测试的管理与报告 | SSW *Do you know how to manage and report on exploratory testing?* [链接](https://www.ssw.com.au/rules/manage-report-exploratory-testing) | ✅ |
41
+ | 巡游 Tours(按"城区"分组:商业/历史/娱乐/旅游/旅馆/灰色地带) | Whittaker, J. A. *Exploratory Software Testing*(2009)· [书的巡游索引](http://manfred-schwab.at/exploratory-software-testing/) · [SAP 速查表](https://github-wiki-see.page/m/SAP/fundamental-ngx/wiki/Exploratory-Testing-Tours) | ✅(索引与速查表) |
42
+ | HICCUPPS(F) 一致性启发式 | Bolton, M. *FEW HICCUPPS* [链接](https://developsense.com/blog/2012/07/few-hiccupps) · *Test Framing* [PDF](http://www.developsense.com/resources/TestFraming.pdf) | ✅ |
43
+ | SFDIPOT 结构透镜(Structure/Function/Data/**Interfaces**/Platform/Operations/Time) | 同上 *FEW HICCUPPS* 引 Bach《Heuristic Test Strategy Model》v6.3 · [主文档下载页](https://www.satisfice.com/download/heuristic-test-strategy-model) | ✅(引用页)/⚠️(主 PDF 仅供下载) |
44
+ | 风险驱动测试与残余风险 | Bach, J. & Bolton, M. *Rapid Software Testing methodology* [链接](https://www.satisfice.com/rapid-testing-methodology) · [RST 附录](https://www.satisfice.com/download/rst-appendices) | ✅ |
45
+ | 错误猜测 Error guessing | ISTQB 术语表 [链接](https://glossary.istqb.org/en_US/term/error-guessing) | ⚠️(页面 JS 渲染) |
46
+ | 缺陷复盘 Bug bash(60–90 分钟事件、角色分工、现场分诊) | BugBug 综述 [链接](https://bugbug.io/blog/software-testing/bug-bash/) · 引 [Google Testing Blog (2008)](https://testing.googleblog.com/2008/06/productivity-games-using-games-to.html) | ✅ |
47
+ | 变更热点 / 相对变更量预测缺陷密度 | Nagappan, N. & Ball, T. *Use of Relative Code Churn Measures to Predict System Defect Density*(ICSE 2005)[链接](https://dl.acm.org/doi/10.1145/1062455.1062514) | ✅ |
48
+ | 复现、最小化、二分定位与缺陷报告解剖 | Mozilla *Bug Writing Guidelines* [链接](https://bugzilla.mozilla.org/page.cgi?id=bug-writing.html) · [mozregression](https://mozilla.github.io/mozregression/quickstart.html) · Zeller & Hildebrandt(IEEE TSE 2002)[链接](https://doi.org/10.1109/32.988498) | ✅ |
49
+ | 严重级 vs 优先级(谁定、四象限) | Zoho QEngine *Bug Severity and Priority* [链接](https://www.zoho.com/qengine/know/bug-severity-and-priority-in-software-testing.html) | ✅(注:该页矩阵段落 S/P 标注自相矛盾,勿照抄其表格) |
50
+
51
+ > **两处常见的以讹传讹**:① "Configuration Tour" 与 "Dirty Harry Tour" 不在该书巡游索引与公开速查表里,
52
+ > 本插件不把它们当标准巡游;② 常写的 "SFDPOT" 漏了 **Interfaces**,完整形式是 **SFDIPOT**。
53
+ > Two widely repeated errors this plugin avoids: the *Configuration*/*Dirty Harry* tours are not in the
54
+ > book's index, and "SFDPOT" drops the **Interfaces** lens.
55
+
56
+ ---
57
+
58
+ ## 三、AI/GUI 智能体与"模拟用户"(本工作流的反面参照)/ GUI agents as negative reference
59
+
60
+ 这些系统的**动作层**(CDP / XTest / SendInput / 辅助功能驱动)正是本插件禁止的部分;
61
+ 可借鉴的只有它们的**推理层**:显式描述屏幕状态、语义化定位元素、里程碑与后置条件、
62
+ 自我核查与反思、失败分类。
63
+
64
+ | 系统 | 出处 | 核验 |
65
+ | --- | --- | --- |
66
+ | Anthropic Computer Use(截图循环、screenshot flipbook 会漏掉瞬时状态、OSWorld 14.9% vs 人 70–75%) | [Anthropic](https://www.anthropic.com/news/developing-computer-use) · [参考实现](https://github.com/anthropics/anthropic-quickstarts/tree/main/computer-use-demo) | ✅ |
67
+ | OpenAI CUA / Operator(多步规划 + 自适应纠错;OSWorld 38.1%、WebArena 58.1%、WebVoyager 87%) | [Computer-Using Agent](https://openai.com/index/computer-using-agent/) · [System Card](https://openai.com/index/operator-system-card/) | ✅ |
68
+ | browser-use(DOM/无障碍树 + 截图混合,索引化元素点击;动作层为 CDP) | [browser-use](https://github.com/browser-use/browser-use) | ✅ |
69
+ | UI-TARS(任务分解、长期一致性、里程碑识别、试错、反思) | [论文](https://ar5iv.labs.arxiv.org/html/2501.12326v1) · [代码](https://github.com/bytedance/UI-TARS) | ✅ |
70
+ | 模拟用户的效度问题(不同模拟器之间成功率差异可达 9 个百分点) | *Lost in Simulation*(ACL 2026)[链接](https://aclanthology.org/2026.acl-long.2192/) | ✅ |
71
+ | 人格"讨喜"导致谄媚偏差(13 个模型里 9 个显著;r 最高 0.87) | *Too Nice to Tell the Truth*(ACL 2026)[链接](https://aclanthology.org/2026.acl-long.1421/) | ✅ |
72
+ | 合成人物在研究中的误用 | *The Challenges of Synthetic Users in UX Research*, ACM interactions(2026)[链接](https://interactions.acm.org/archive/view/january-february-2026/the-challenges-of-synthetic-users-in-ux-research) | ⚠️(403) |
73
+ | 虚拟人物"过于乐观" | *"She was useful, but a bit too optimistic": Augmenting Design with Interactive Virtual Personas* [链接](https://www.sciencedirect.com/science/article/pii/S1071581925002034) | ✅(摘要可达) |
74
+
75
+ **结论**:这些文献是本工作流**保持真人在环**的理由,而不是替代真人的理由;模拟只用于
76
+ 假设生成、预筛与边界枚举,不用于验收与效果量。
77
+
78
+ ---
79
+
80
+ ## 四、无障碍(唯一"合法的模拟用户")/ Accessibility
81
+
82
+ | 主题 | 出处 | 核验 |
83
+ | --- | --- | --- |
84
+ | 仅键盘可达性的手工检查步骤 | WebAIM *Keyboard Accessibility* [链接](https://webaim.org/techniques/keyboard/) | ✅ |
85
+ | WCAG 2.2 · 2.1.1 键盘 | [W3C](https://www.w3.org/WAI/WCAG22/Understanding/keyboard.html) | ✅ |
86
+ | WCAG 2.2 · 2.1.2 无键盘陷阱 | [W3C](https://www.w3.org/WAI/WCAG22/Understanding/no-keyboard-trap.html) | ✅ |
87
+ | WCAG 2.2 · 2.4.11 焦点不被遮挡(2.2 新增,AA) | [W3C](https://www.w3.org/WAI/WCAG22/Understanding/focus-not-obscured-minimum.html) | ✅ |
88
+ | WCAG 2.2 · 2.5.7 拖拽动作(2.2 新增,AA;需非拖拽单指针替代) | [W3C](https://www.w3.org/WAI/WCAG22/Understanding/dragging-movements.html) | ✅ |
89
+ | 焦点顺序 / 焦点可见(2.4.3 / 2.4.7) | [W3C](https://www.w3.org/WAI/WCAG22/Understanding/focus-order.html) · [W3C](https://www.w3.org/WAI/WCAG22/Understanding/focus-visible.html) | ✅(同域名) |
90
+ | macOS VoiceOver 转子导航 | [Apple 支持](https://support.apple.com/guide/voiceover/voiceover-rotor-mchlp2719/mac) | ✅ |
91
+ | Windows NVDA / Narrator 手册 | [NVDA 用户指南](https://download.nvaccess.org/documentation/userGuide.html) · [Narrator 完整指南](https://download.microsoft.com/download/565194dd-1f9a-4781-93e9-b09c7add2ad1/windows-11-Complete-guide-to-narrator.docx) | ⚠️ |
92
+
93
+ ---
94
+
95
+ ## 五、录制的伦理与数据处理 / Recording ethics and data handling
96
+
97
+ | 主题 | 出处 | 核验 |
98
+ | --- | --- | --- |
99
+ | 知情同意要素(目的、格式、时长、自愿与撤回、数据去向、删除时点) | NN/g *Obtaining Consent* [链接](https://www.nngroup.com/articles/informed-consent/) | ✅ |
100
+ | 持续同意(会前发、会中重申、每个新活动再问) | UK DfE *How to gather and store informed consent* [链接](https://user-research.education.gov.uk/guidance/informed-consent-26/2) | ✅ |
101
+ | 内部同事参与的伦理(可识别性、颗粒化授权) | GDS *Conducting ethical internal research* [链接](https://userresearch.blog.gov.uk/2023/02/09/conducting-ethical-internal-research/) | ✅ |
102
+ | 录屏中的个人信息与删除 | UserTesting GDPR FAQ [链接](https://help.usertesting.com/hc/en-us/articles/11880394493853-General-Data-Protection-Regulation-GDPR-FAQs) | ✅ |
103
+ | 数据最小化与存储限制 | ICO *Data minimisation* [链接](https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/data-protection-principles/a-guide-to-the-data-protection-principles/data-minimisation/) | ✅ |
104
+
105
+ 本插件的落地规则(写进 `observed-test-plan` 的权限问卷与 `observed-ui-test` 的取证协议):
106
+ 只用测试账号与演示数据 · 支付/健康/身份界面暂停录制 · 打码第三方姓名 ·
107
+ 录屏加密存放并设保留期限 · 录制起止要口头宣告 · 屏幕阅读器语音与残障相关数据按敏感数据单独征求同意。
108
+
109
+ ---
110
+
111
+ ## 六、本插件对来源的取舍 / How this plugin uses the sources
112
+
113
+ | 采纳 Adopted | 丢弃 Rejected |
114
+ | --- | --- |
115
+ | 认知走查、启发式评估、出声思维、SBTM 章程、巡游、HICCUPPS/SFDIPOT 作为**人的观察透镜** | 任何自动点击/注入/回放(含 GUI agent 的动作层、CDP、SendInput、XTest、辅助功能驱动) |
116
+ | GUI agent 的**推理原语**(状态描述、语义定位、里程碑、后置条件、自我核查、失败四分类) | 用代码/DOM/日志直接判定界面正确性 |
117
+ | 无障碍标准作为**可复现的模拟视角** | 把合成人物结论当成真实用户结论;把自动化回归与人工观察混写 |
118
+ | 录制伦理与数据最小化 | 无限期"伞式"同意、录制真实生产数据 |
@@ -0,0 +1,257 @@
1
+ # 测试内容清单 / What to Test
2
+
3
+ > **这是"测什么"的主清单。** 每个类别都给出:检查项、怎么看(真实操作)、判据(带规范编号或经验阈值)。
4
+ > 用法:先做 §0 的十分钟快扫,再按需要逐类展开;每条结论都要能指到画面上的具体位置。
5
+ > The master checklist of *what* to test: item, how to check by hand, and the criterion (with the
6
+ > WCAG clause or platform guideline where one exists).
7
+
8
+ **你提到的三项在本清单里的位置**:界面大小 → §1 · 鼠标速度与指针 → §2 · 工具栏 → §4。
9
+
10
+ ---
11
+
12
+ ## 0. 十分钟快扫 / The ten-minute sweep
13
+
14
+ 每次会话开始先跑这十项,便宜且命中率高:
15
+
16
+ 1. 打开应用:默认窗口是否**完整可见**(不超出屏幕、不钻到菜单栏/Dock 下面)。
17
+ 2. 把窗口缩到最小可用尺寸:主按钮还在吗?文字被裁了吗?出现横向滚动条了吗?
18
+ 3. 放大到系统缩放 200%:内容是否溢出/重叠。
19
+ 4. 只动鼠标走一遍主任务:有没有必须悬停才知道的地方。
20
+ 5. 只用键盘走一遍主任务:Tab 能不能走到底,焦点看得见吗。
21
+ 6. 记录**指针总行程**:主任务需要移动的累计距离与最远距离。
22
+ 7. 扫一眼工具栏:每个图标不看提示词能不能看懂;有没有文字或 tooltip。
23
+ 8. 点一个会耗时 >1 秒的操作:有没有加载反馈;能不能取消。
24
+ 9. 故意输错:错误提示说人话吗,指出位置了吗,给了下一步吗。
25
+ 10. 切到深色模式、换系统字号,各看一眼。
26
+
27
+ > 快扫只用来找"一眼就能看出"的问题;每条都要落盘成 finding,别留在脑子里。
28
+
29
+ ---
30
+
31
+ ## 1. 窗口与界面尺寸 / Window and screen-size usability
32
+
33
+ **核心问题:这个界面在真实用户的屏幕上"装得下、看得清、点得到"吗?**
34
+
35
+ | 检查项 | 怎么看 |
36
+ | --- | --- |
37
+ | 默认窗口大小合理 | 首次打开是否完整可见、不超出屏幕、不遮挡系统栏;内容是否需要在默认尺寸下横向滚动 |
38
+ | 最小尺寸可用 | 拖到最小:主操作按钮、主输入框、主列表是否仍完整可用;有无裁切或重叠 |
39
+ | 最小尺寸下限被尊重 | 是否设置了一个"再小就不能用"的最小尺寸(而不是无限缩小到不可用) |
40
+ | 大尺寸不散架 | 最大化/全屏:内容是否被无意义拉伸,行宽是否过长(正文超过 ~100 字符就难读) |
41
+ | 分屏与平铺 | macOS Split View / Windows Snap / iPad Split View、Slide Over:布局是否正确,能否在窄栏里完成主任务 |
42
+ | 屏幕缩放 | 系统缩放 125% / 150% / 200%:文字与控件按比例放大后不重叠、不裁切、不溢出(WCAG 1.4.4 文本可放大到 200%) |
43
+ | 回流 Reflow | 在等价于 320 CSS px 宽时,主流程不需要横向滚动(WCAG 1.4.10) |
44
+ | 窗口记忆 | 关闭再打开,位置、大小、最大化状态、分栏宽度是否被记住 |
45
+ | 多显示器 | 拖到第二块屏、拔掉外接屏后:窗口是否可达(不出现"跑到屏幕外找不回来") |
46
+ | 全屏与还原 | 进出全屏不丢状态;全屏下系统栏隐藏后仍知道在哪 |
47
+ | 内容密度 | 空白过多(浪费屏幕)或过少(拥挤);信息层级在大屏上是否重新组织 |
48
+ | 长内容 | 长列表/长文本在窗口变小时的换行、省略、滚动策略是否一致且可预期 |
49
+ | 对话框尺寸 | 弹窗是否过大(超出屏幕)或过小(内容被裁);弹窗是否可缩放或自适应 |
50
+ | 触屏尺寸 | iPhone/iPad:内容是否在安全区内(避开刘海/圆角/Home 指示条),横竖屏切换不丢状态 |
51
+
52
+ **判据**:能完成主流程 + 不裁切 + 不重叠 + 不用横向滚动 + 记住用户调整过的尺寸。
53
+ 标准参考:WCAG 1.4.4(放大 200%)、1.4.10(320 CSS px 回流)。
54
+
55
+ ---
56
+
57
+ ## 2. 鼠标速度与指针 / Pointer dynamics and speed
58
+
59
+ **核心问题:完成这件事需要"跑多远、动多准、等多久"?**
60
+
61
+ | 检查项 | 怎么看 | 判据 / 经验值 |
62
+ | --- | --- | --- |
63
+ | 指针总行程 | 走一遍主任务,在录屏里量指针路径总长与最远两点距离 | 常用动作越近越好(Fitts 定律:时间 ∝ 距离/目标宽度);主任务要在屏幕内"局部"完成 |
64
+ | 精细操作要求 | 是否要求像素级对齐(手动拖分隔条、对齐到 1px、拖到窄热区) | 不应要求"慢速微调"才能完成;拖拽要有吸附/对齐辅助 |
65
+ | 双击速度 | 把系统"双击速度"调到最慢与最快各试一次(macOS:系统设置 → 鼠标/触控板,或辅助功能里的连按速度) | 应用必须尊重系统设置,不能自定一套更快的双击窗口 |
66
+ | 悬停延迟 | 悬停工具提示多快出现、是否必须悬停才能发现功能 | 提示 300–500ms 内出现;**功能不允许只靠悬停才能发现**(触屏与键盘用户不可用) |
67
+ | 拖拽 | 拖拽过程有反馈吗?能取消(Esc)吗?有非拖拽替代吗? | WCAG 2.5.7 拖拽动作需提供单指针非拖拽替代 |
68
+ | 拖拽距离与容差 | 长距离拖拽(跨窗口、跨屏)、拖到边缘、拖到无效区域 | 无效区域要给出"为什么不行"的反馈;不丢数据 |
69
+ | 光标反馈 | 进入可拖拽/可缩放/可文本选择区域时,光标形状是否即时变化 | 形状变化需在 ≤100ms 内出现,且与可做动作一致 |
70
+ | 指针速度与加速度 | 应用是否修改系统指针速度/加速度;是否自带"慢速模式" | 不应悄悄改变系统设置;若提供,必须显式且可复位 |
71
+ | 滚轮与触控板 | 滚动速度、惯性、横向滚动、精确(像素级)滚动 | 与系统设置一致;长页面可加速,但不要"一滚到底" |
72
+ | 命中区一致性 | 目标边缘外 2px、图标之间的缝隙、图标外框 | 热区必须与视觉一致;热区不小于目标本身 |
73
+ | 误触保护 | 相邻的危险操作(删除/覆盖/退出)间距 | 危险操作间距更大 + 二次确认 + 可撤销 |
74
+ | 指针穿越干扰 | 鼠标从 A 移动到 B 时,路径上是否会误触发悬停菜单/展开面板 | 悬停菜单应有延迟与容错三角,不应"路过就弹" |
75
+
76
+ **快速测量法**:开录屏 → 操作 → 在录屏里取"起点帧"和"终点帧",用屏幕宽度做尺子估算行程
77
+ (例如 1920 px 屏上走了 1.5 屏 ≈ 2900 px 的指针移动)。**不需要任何自动化工具。**
78
+
79
+ > How to measure without tooling: record the screen, then read the start and end positions off two
80
+ > frames and use the screen width as the ruler.
81
+
82
+ ---
83
+
84
+ ## 3. 目标尺寸与间距 / Target size and spacing
85
+
86
+ | 检查项 | 判据 |
87
+ | --- | --- |
88
+ | 触控目标最小尺寸 | WCAG 2.5.8(AA):24×24 CSS px;WCAG 2.5.5(AAA):44×44;Apple HIG 触控:44×44 pt;Material:48×48 dp |
89
+ | 桌面紧凑控件 | 图标按钮的**命中区**至少与 24×24 等价,且大于图标视觉边界 |
90
+ | 相邻目标间距 | 目标之间至少留出可辨间隙(避免"想点 A 点到 B") |
91
+ | 滚动条抓取区 | 细滚动条(macOS 悬浮滚动条)是否仍能抓到;有无键盘/触控板替代 |
92
+ | 危险操作 | 删除/覆盖等目标不与常用操作紧邻 |
93
+ | 边缘手势 | 触屏/触控板边缘手势是否与系统级手势冲突 |
94
+
95
+ ---
96
+
97
+ ## 4. 工具栏与菜单 / Toolbar and menus
98
+
99
+ | 检查项 | 怎么看 |
100
+ | --- | --- |
101
+ | 图标可识别 | 不看 tooltip 能否理解含义;陌生图标是否有文字标签 |
102
+ | 提示可用 | 悬停是否有 tooltip;tooltip 是否包含名称 + 快捷键 |
103
+ | 分组与顺序 | 是否按使用频率/功能逻辑分组;常用命令是否一级可达(不藏进二级菜单或设置) |
104
+ | 密度与留白 | 是否过挤(图标贴在一起)或过空;与内容区比例是否合理 |
105
+ | 溢出行为 | 窗口变窄时,工具栏是自适应收纳(» 溢出菜单)还是直接消失 |
106
+ | 状态可见 | 激活/选中/禁用态是否清晰;禁用能否知道原因 |
107
+ | 一致性 | 工具栏、菜单、右键菜单、快捷键提示是否指同一个命令、同一套命名 |
108
+ | 可定制 | 若支持自定义:能否拖动、能否恢复默认、重启后是否记住 |
109
+ | 读取顺序 | 从左到右的阅读顺序是否符合"高频在前";是否因图标宽窄导致视觉错位 |
110
+ | 菜单可用性 | 文字不截断、不歧义;子菜单打开方向正确(不超出屏幕);键盘可导航 |
111
+ | 触屏适配 | 工具栏在窄屏是否折叠为底部/更多菜单;命中区是否 ≥44pt |
112
+
113
+ **判据**:一个新用户在 **10 秒内**能找到"导出/保存/搜索"这类主命令。
114
+
115
+ ---
116
+
117
+ ## 5. 文字与排版 / Text legibility
118
+
119
+ | 检查项 | 判据 |
120
+ | --- | --- |
121
+ | 对比度 | 正文 ≥ 4.5:1,大字(≥18pt 或 14pt 粗体)≥ 3:1(WCAG 1.4.3);非文本元素 ≥ 3:1(1.4.11) |
122
+ | 默认字号 | 与平台惯例一致,长文本阅读不费力;不靠用户自己放大 |
123
+ | 长文本处理 | 截断策略一致(尾部省略/中间省略/换行);标题截断不丢关键信息 |
124
+ | 混排 | 中英数混排、emoji、RTL 文本不破版;数字与单位对齐 |
125
+ | 放大 | 系统字号/动态字体放大后不重叠、不裁切(WCAG 1.4.4) |
126
+ | 深色模式 | 对比度仍达标;纯黑背景上的细字与阴影是否"糊" |
127
+ | 行距字距 | 行高足够(约 1.4–1.6 倍字号),段间距清晰 |
128
+ | 占位符 | 占位符不能替代标签(占位符一消失就不知道填什么) |
129
+
130
+ ---
131
+
132
+ ## 6. 布局与层级 / Layout and hierarchy
133
+
134
+ | 检查项 | 怎么看 |
135
+ | --- | --- |
136
+ | 主次分明 | 一屏是否只有一个主操作;次要操作是否视觉降级 |
137
+ | 遮挡 | 弹窗/抽屉/浮层是否遮住关键信息;提示是否被裁或被遮挡(WCAG 2.4.11 焦点不被遮挡) |
138
+ | 层叠顺序 | 菜单、下拉、提示之间是否互相遮挡或穿透 |
139
+ | 对齐与网格 | 元素是否按网格对齐;间距是否一致(同类元素同间距) |
140
+ | 滚动容器 | 是否存在嵌套滚动、滚动陷阱、滚动条与内容不同步 |
141
+ | 空/加载/错误态 | 三种状态的布局是否都设计过(不是只做"有数据"的样子) |
142
+ | 视觉噪音 | 边框/阴影/分隔线是否过多,是否用颜色替代层级 |
143
+
144
+ ---
145
+
146
+ ## 7. 反馈与状态 / Feedback and state
147
+
148
+ | 检查项 | 判据 |
149
+ | --- | --- |
150
+ | 即时反馈 | 操作后 ≤0.1s 有可见响应;≤1s 不打断思路;>1s 要有进度指示;>10s 要能取消(Nielsen 三个响应时限) |
151
+ | 加载 | 有加载态;长任务有进度与可取消;无"白屏假死" |
152
+ | 结果提示 | 成功/失败提示可读、可关闭、不遮挡后续操作 |
153
+ | 状态持久 | 切换页面/标签、重启应用后,关键状态是否保留 |
154
+ | 焦点可见 | 键盘操作时焦点位置始终可见(WCAG 2.4.7) |
155
+ | 状态齐全 | 默认/悬停/按下/选中/禁用/忙碌 六态是否都有可见样式 |
156
+
157
+ ---
158
+
159
+ ## 8. 效率与流程 / Efficiency and flow
160
+
161
+ | 检查项 | 怎么看 |
162
+ | --- | --- |
163
+ | 步数 | 主任务实际步数 vs 理论最少步数;多出来的步骤是否有理由 |
164
+ | 重复输入 | 是否要求重复填写已知信息(WCAG 3.3.7 冗余输入) |
165
+ | 默认值 | 默认值是否是常见选择(能不填就不填) |
166
+ | 批量 | 批量选择、批量操作、全选/反选;批量失败时的部分成功提示 |
167
+ | 撤销重做 | 关键操作可撤销;撤销范围明确 |
168
+ | 双路径一致 | 鼠标路径与快捷键路径结果一致(三级模式 L3 专项) |
169
+ | 帮助就地 | 需要帮助时能否就地找到(WCAG 3.2.6 一致帮助) |
170
+
171
+ ---
172
+
173
+ ## 9. 键盘与焦点 / Keyboard and focus
174
+
175
+ 见 `observed-ui-test` 的 LEVELS.md 与 `HEURISTICS.md` §F,核心项:
176
+
177
+ Tab 顺序与视觉顺序一致 · 焦点环清晰可见 · 无键盘陷阱(WCAG 2.1.2)· 焦点关闭弹窗后回到触发控件 ·
178
+ 单字符快捷键可关闭或重映射(WCAG 2.1.4)· 快捷键不与系统冲突 · 组合控件(菜单/树/标签页)方向键可用。
179
+
180
+ ---
181
+
182
+ ## 10. 可访问性 / Accessibility
183
+
184
+ 屏幕阅读器标签/角色/状态 · 仅键盘可用(2.1.1)· 颜色不作为唯一信息载体(1.4.1)·
185
+ 动效可关(prefers-reduced-motion)· 触屏手势有替代 · 动态字体与高对比度模式下可用 ·
186
+ 表单错误被朗读且指出字段。
187
+
188
+ ---
189
+
190
+ ## 11. 性能与响应 / Performance and responsiveness
191
+
192
+ 启动时间 · 首屏可用时间 · 滚动帧率(目测卡顿与掉帧)· 输入延迟(打字、拖拽跟手度)·
193
+ 大文件/大列表/大图片 · 长时运行(内存泄漏、超时:用"通宵巡游")· 离线与弱网 · 后台任务对前台的影响。
194
+
195
+ ---
196
+
197
+ ## 12. 错误与恢复 / Errors and recovery
198
+
199
+ 错误信息说人话、指出位置、给出下一步 · 出错不丢数据(草稿、自动保存)· 崩溃后能否恢复 ·
200
+ 破坏性操作有确认且可撤销 · 超时/断网时的行为明确 · 不把内部错误码直接抛给用户(除非可复制给支持)。
201
+
202
+ ---
203
+
204
+ ## 13. 数据与输入 / Data and input
205
+
206
+ 空输入 · 超长输入 · 特殊字符与 emoji · 非拉丁文 · 粘贴表格与多行文本 · 前后空格 ·
207
+ 中文/日文输入法组合期不误提交 · 校验时机(即时 vs 提交)一致 · 复制粘贴格式往返不丢内容 ·
208
+ 数字格式与本地化(千分位、小数点)· 时间与时区显示。
209
+
210
+ ---
211
+
212
+ ## 14. 跨设备一致性 / Cross-device consistency
213
+
214
+ 同一功能在 macOS / Windows / iPhone / iPad 上的位置、命名、行为是否一致 ·
215
+ 是否遵循各平台惯例(窗口控制位置、右键菜单、手势、返回逻辑)· 同步状态与冲突提示 ·
216
+ 外接键鼠与纯触控下的可达性差异。
217
+
218
+ ---
219
+
220
+ ## 15. 视觉打磨 / Visual polish(S4 级,别挤占 S1/S2 的时间)
221
+
222
+ 图标风格统一 · 像素对齐与描边一致性 · 圆角/阴影/分隔线体系 · 动效时长与曲线(避免弹跳过度)·
223
+ 文案统一("保存/应用"不混用)· 加载占位与骨架屏的一致性。
224
+
225
+ ---
226
+
227
+ ## 附 A · 阈值速查 / Threshold cheat sheet
228
+
229
+ | 项目 | 阈值 | 来源 |
230
+ | --- | --- | --- |
231
+ | 触控目标最小 | 24×24 CSS px(AA) | WCAG 2.5.8 |
232
+ | 触控目标增强 | 44×44(AAA)/ Apple 44×44 pt / Material 48×48 dp | WCAG 2.5.5 · Apple HIG · Material |
233
+ | 正文对比度 | ≥ 4.5:1 | WCAG 1.4.3 |
234
+ | 大字对比度 | ≥ 3:1(≥18pt 或 14pt 粗体) | WCAG 1.4.3 |
235
+ | 非文本对比度 | ≥ 3:1 | WCAG 1.4.11 |
236
+ | 文本放大 | 200% 不丢内容/不重叠 | WCAG 1.4.4 |
237
+ | 回流宽度 | 320 CSS px 无横向滚动 | WCAG 1.4.10 |
238
+ | 响应时限 | 0.1s 即时 / 1s 不断思路 / 10s 需进度与取消 | Nielsen 响应时限 |
239
+ | 悬停提示 | 300–500ms 出现 | 通行实践 |
240
+ | 光标形状变化 | ≤100ms | 通行实践 |
241
+ | 主命令可发现 | 新用户 10 秒内找到 | 本插件约定 |
242
+ | 正文行宽 | ≤ ~100 字符(约 45–75 为佳) | 排版通行实践 |
243
+
244
+ ## 附 B · 判据来源 / Where the criteria come from
245
+
246
+ WCAG 2.2(W3C)· Apple Human Interface Guidelines · Material Design ·
247
+ Nielsen 十项启发式与响应时限 · Whittaker 巡游 · HICCUPPS(F)/SFDIPOT。
248
+ 完整链接见 [SOURCES.md](SOURCES.md);无障碍专项步骤见 [HEURISTICS.md](HEURISTICS.md) §F。
249
+
250
+ ---
251
+
252
+ ## 用法提示 / How to use this file
253
+
254
+ 1. 会话开始时把本清单的类别抄进 `content.md`(`session.mjs init` 已生成骨架)。
255
+ 2. 每确认一类,在 `content.md` 里写结论(通过 / 违反 / 未验证)+ 证据文件 + 检查项数。
256
+ 3. 每条违反落盘成 finding,并带上 `content`(类别)与 `criteria`(判据)两个字段,
257
+ 报告会按**测试内容**聚合,直接告诉你"问题集中在哪一类"。