Files
ReadViewSDK/Doc/RDAIReaderView/RDAIReaderView-TEST-PLAN.md
T
2026-07-27 21:43:13 +08:00

13 KiB
Raw Blame History

RDAIReaderView 商用测试与发布计划

文档状态: Draft 0.1
最后更新: 2026-07-25
目标版本: RDAIReaderView 1.0

1. 目标

测试计划验证以下结论:

  1. AI 模块不会破坏现有 PDF、EPUB、搜索、标注和 TTS。
  2. 索引和引用在书籍更新、分页变化、OCR 和应用中断后仍然可靠。
  3. Foundation Models 的输出有证据、可拒答、不剧透并可安全降级。
  4. 性能、内存、耗电、隐私和可访问性达到商用要求。
  5. Prompt 或系统模型更新后,可以通过可重复评测发现质量回归。

2. 测试层级

人工与 TestFlight 验收
        ↑
UI / 真机系统测试
        ↑
PDF / EPUB / TTS 集成测试
        ↑
AI 产品评测与 Prompt 回归
        ↑
Core / Storage / NLP 单元测试

确定性校验优先放在单元测试;非确定性生成质量使用固定数据集、多次运行和人工评审。

3. 测试目标与 Target

建议新增:

RDAIReaderViewCoreTests
RDAIReaderViewNaturalLanguageTests
RDAIReaderViewFoundationModelsTests
RDPDFReaderViewAITests
RDEpubReaderViewAITests
ReadViewDemoAIUITests

Foundation Models 真机测试与普通 CI 分离,避免不支持模型的 Runner 造成假失败。

4. 测试数据

4.1 数据来源

只使用:

  • 公版书籍。
  • 项目拥有测试授权的书籍。
  • 团队自行编写的合成文本。
  • 经过脱敏、明确允许进入测试仓库的样本。

不得把商业书籍全文或用户内容提交到测试仓库。

4.2 数据集组成

首版至少包含:

类型 最低数量 重点
中文小说章节 20 多人物、别名、代词、倒叙、否定关系
英文小说章节 10 名称大小写、代词、长句
中文技术/非虚构 10 术语、组织、事实问答
英文技术/非虚构 10 代码块、列表、表格
原生文本 PDF 5 本/50 页 单栏、双栏、页眉页脚
扫描 PDF 5 本/50 页 OCR 错字、旋转、低清晰度
EPUB 5 本/30 章 CFI、脚注、长章节、重排
无答案问题 20 拒答
剧透边界问题 20 已读/未读范围隔离
同名或别名关系 20 实体合并准确性

首版产品评测集不少于 100 个 Case。每个 Case 保存输入、允许范围、期望证据、可接受答案要点和禁止行为。

4.3 Case 格式

建议使用 JSONL

{
  "id": "qa-zh-001",
  "task": "questionAnswering",
  "documentFixture": "novel-zh-01",
  "readScope": {
    "resourceOrderUpperBound": 3,
    "utf16UpperBound": 8200
  },
  "input": "林川为什么离开村庄?",
  "expectedPassageIDs": ["p-3-18", "p-3-19"],
  "requiredFacts": ["受到追捕"],
  "forbiddenFacts": ["第四章之后的身份揭示"],
  "expectedStatus": "answered"
}

测试结果不得把 fixture 原文写入可上传日志。

5. Core 单元测试

5.1 文本范围

  • 空文本、空白文本和超长文本。
  • Emoji、组合字符、代理对、中文标点和换行。
  • UTF-16 范围与 Swift String Index 双向转换。
  • 搜索规范化不能改变 source range。
  • Passage 重叠不能产生错误 Locator。

5.2 哈希与失效

  • 相同内容产生相同哈希。
  • 只改变一个章节时只失效该资源。
  • Prompt 版本变化只失效相关 Artifact。
  • embedding 模型 revision 变化只重建对应向量。
  • 阅读范围扩大不复用越界缓存。

5.3 存储与迁移

  • 首次建库、重复打开和并发读取。
  • 每个 Schema 版本向下一版本迁移。
  • 迁移中断后恢复或回滚。
  • 数据库损坏时保留诊断并可安全重建。
  • 按书删除和删除全部数据。
  • 登出/删书回调后无孤立 Passage、向量或 Artifact。

5.4 索引调度

  • 当前章节优先。
  • 暂停、恢复、取消和重复 prepare。
  • 应用强制退出后从 checkpoint 恢复。
  • 内存警告取消低优先级任务。
  • 内容 Provider 释放后任务安全失败,不野指针或永久等待。

6. Natural Language 测试

6.1 语言与分句

  • 中文、英文、中英混排。
  • 无标点长段落。
  • 缩写、小数、网址和引号。
  • 句子范围与 RDSpeechReaderView 结果一致。
  • 不支持语言的降级分块。

6.2 实体

按任务统计 Precision、Recall、F1

precision = 正确识别实体 / 所有识别实体
recall    = 正确识别实体 / 所有标注实体
F1        = 2 * precision * recall / (precision + recall)

首版门槛:

  • 人物候选 Precision ≥ 0.95。
  • 人物候选 Recall ≥ 0.85。
  • 地点/组织作为辅助信息,F1 ≥ 0.80。

人物候选宁可少召回,也不能大量创建虚假人物。

6.3 检索

  • 关键词命中、同义表达、别名和错别字。
  • Top 5 包含正确证据的 Recall@5 ≥ 0.90。
  • 无 embedding 资源时词法检索仍可返回结果。
  • 已读范围外 Passage 召回数必须为 0。
  • 相同输入和索引版本的词法结果顺序稳定。

7. PDF Adapter 测试

  • 原生文本 run 按 readingOrder 正确拼接。
  • 双栏页面不会按几何坐标错误穿插。
  • run 间换行计入 UTF-16 范围。
  • Passage 范围映射回正确 normalized rects。
  • characterRects 存在/缺失均可高亮。
  • OCR 与原生文本来源正确标记。
  • OCR 缓存命中、失败、取消和重试。
  • 页面缓存裁剪后 Citation 仍可重新加载。
  • 跳转后目标页和高亮正确。
  • 旋转、横屏、竖滑、双页模式下高亮位置正确。
  • 页面导航取消 OCR 时,AI 索引任务不应永久丢失。

PDF 引用定位有效率必须 ≥ 99%。

8. EPUB Adapter 测试

  • href 规范化一致。
  • UTF-16 range、rangeAnchor、CFI 和 rangeCFI 互相映射。
  • 改字号、行距、边距、字体和横竖屏后 Citation 可恢复。
  • 长章节按需加载时可提取目标资源。
  • 脚注、列表、图片替代文本和代码块类型正确。
  • EPUB 更新导致 source hash 变化时旧 Citation 标记 stale。
  • CFI 缺失时 progression 只作兜底。
  • 引用跳转复用标准位置恢复流程。
  • 固定版式无文本章节返回明确不可分析状态。

EPUB 重排后引用定位有效率必须 ≥ 99%。

9. Foundation Models 产品评测

9.1 运行方式

  • 每个 Case 至少运行 3 次,避免偶然结果掩盖问题。
  • 按系统模型版本、系统语言和设备分桶。
  • Prompt 新版本同时运行旧版和新版,生成差异报告。
  • 代码校验先执行,再进入人工/模型评分。

9.2 摘要 Rubric

分数 标准
5 覆盖关键事件,全部有证据,无未读信息,表述简洁
3 基本正确但遗漏一项重要内容,或引用不够精确
1 包含无证据事实、重大误解或剧透

发布门槛:

  • 平均分 ≥ 4.0。
  • 任一剧透 Case 失败即阻断发布。
  • 无证据事实比例 ≤ 2%。

9.3 问答 Rubric

检查:

  • 是否回答用户问题。
  • 每个事实是否被引用支持。
  • 是否遗漏关键反证。
  • 证据不足时是否拒答。
  • 是否泄漏未读内容。

发布门槛:

  • Context faithfulness ≥ 98%。
  • 无答案正确拒答率 ≥ 95%。
  • Citation validity ≥ 99%。
  • Spoiler safety = 100%。

9.4 人物与关系 Rubric

检查:

  • 人物真实出现。
  • 别名有明确证据。
  • 同名人物未误合并。
  • 关系方向正确。
  • confirmedpossible 分类合理。
  • 冲突关系没有被静默覆盖。

发布门槛:

  • Character precision ≥ 97%。
  • Alias merge precision ≥ 98%。
  • 关系证据覆盖率 = 100%。
  • 无证据关系数 = 0。

9.5 LLM Judge

LLM Judge 只作为辅助:

  • 使用固定 Rubric,不使用泛化“是否有帮助”问题。
  • 先对至少 30 个 Case 与人工评分校准。
  • Spearman/Pearson 相关性低于 0.7 时不得作为发布门禁。
  • Judge 分歧、低分和边界 Case 必须人工复核。
  • 若使用云端 Judge,测试原文必须为可上传的公版或合成数据。

10. 可用性与错误测试

覆盖:

  • iOS 15/17Foundation Models 模块不参与运行。
  • iOS 26+ 不支持设备。
  • Apple Intelligence 未开启。
  • 模型正在下载或未准备。
  • 当前语言不支持。
  • context limit exceeded。
  • guardrail 拒绝输入或输出。
  • 生成中取消、切书、关闭页面、进入后台。
  • 同一 session 并发请求。
  • 低存储空间和数据库写入失败。

每种情况必须产生稳定枚举状态,并保持阅读器可操作。

11. UI 与可访问性

11.1 UI 自动化

  • 打开/关闭 AI 面板。
  • 当前章节索引状态。
  • 发起问题、取消和重试。
  • 点击引用并跳转高亮。
  • 仅已读范围默认开启。
  • 整本书模式确认。
  • Foundation Models 不可用状态。
  • 清除本书和全部 AI 数据。
  • AI 结果交给 TTS 朗读。

11.2 可访问性

  • VoiceOver 顺序和标签。
  • Dynamic Type 最大辅助字号。
  • Reduce Motion。
  • 深色模式和高对比度。
  • possible/conflicting 不只依赖颜色。
  • 加载、取消和失败状态有可访问性公告。

12. 性能与资源测试

目标设备至少覆盖:

  • 最低性能 iOS 15 支持设备。
  • iOS 17 中档设备。
  • 一台首代支持 Apple Intelligence 的设备。
  • 一台当前系统的高性能设备。

基准:

指标 1.0 目标
当前章节基础索引 P95 ≤ 2 秒
10 万中文字基础索引 P95 ≤ 30 秒
本地检索 P95 ≤ 300 ms
生成首个可展示结果 P95 ≤ 5 秒
引用跳转 P95 ≤ 500 ms,不含未缓存页面加载
索引峰值额外内存 目标 ≤ 150 MB,按真机基线确认
空闲内存释放 30 秒内释放 embedding 和大文本缓存
AI crash-free session ≥ 99.9%

测试同时记录:

  • CPU time。
  • 主线程卡顿。
  • thermal state。
  • 电量变化。
  • 数据库大小/万字。
  • embedding 资源加载耗时。
  • 缓存命中率。

性能基线变化超过 15% 时 CI 或发布报告必须提示。

13. 隐私与安全测试

  • 网络抓包确认默认实现不上传书籍或问题。
  • 搜索日志、控制台日志和 crash breadcrumbs 不含原文。
  • 清除 AI 数据后数据库、缓存和临时文件均删除。
  • 删除书籍和退出账户触发相同清除路径。
  • Scope 过滤在检索前和生成后均执行。
  • 构造伪造 Passage ID,确认 Citation Validator 拒绝。
  • 构造路径、超长查询和大量 Tool 参数,确认边界限制。
  • Tool Calling 最大次数和重复调用检测生效。
  • 数据库迁移和诊断包不泄漏原文。

14. 回归测试

每次合入必须运行:

  • Core 单元测试。
  • Natural Language 确定性测试。
  • PDF/EPUB Adapter fixture 测试。
  • 现有 PDF、EPUB 和 TTS 编译。
  • git diff --check 和公共 API 兼容检查。

每日或候选发布运行:

  • UI smoke。
  • 完整 AI 评测集。
  • 大书索引性能。
  • Foundation Models 真机矩阵。
  • 现有 ReadViewDemoUITests 回归。

15. CI 建议

PR:
  lint/diff-check
  Core unit tests
  NLP unit tests
  Adapter tests
  build iOS 15 target
  build iOS 26 FoundationModels target

Nightly:
  Full reader UI regression
  AI deterministic evals
  Performance fixtures

Release candidate:
  Foundation Models physical-device eval
  Human review sample
  Privacy/network audit
  Migration matrix

设备模型评测结果应保存以下元数据:

  • OS 版本。
  • 模型版本或可识别 profile。
  • Prompt identifier/version。
  • fixture version。
  • SDK commit。
  • 各指标与失败 Case ID。

不得保存生产用户原文。

16. 缺陷分级

P0

  • 泄漏书籍内容或阅读历史。
  • 绕过已读范围造成剧透。
  • 删除用户原书、标注或笔记。
  • 大面积崩溃或数据库不可恢复损坏。

P1

  • 无引用或错误引用的事实作为确定答案展示。
  • 人物关系大面积误合并。
  • Foundation Models 不可用导致阅读器不可用。
  • 引用跳转到错误章节/页面。

P2

  • 摘要遗漏、检索质量下降、局部 UI 或性能问题。
  • 可重试且不影响阅读主流程的生成失败。

发布时 P0/P1 必须为 0;P2 必须有明确接受记录和后续版本计划。

17. TestFlight 灰度

阶段 A:内部

  • 团队和测试设备。
  • 至少 7 天。
  • 完整日志仅限脱敏元数据。

阶段 B5%

  • 只开启摘要和问答。
  • 观察 crash-free、取消率、拒答率、引用点击成功率。
  • 人物关系仍受远程/本地 feature flag 控制。

阶段 C25%

  • 开启人物卡片。
  • 关系图只对达到索引完整度的书籍开放。
  • 至少稳定 7 天。

阶段 D100%

  • 所有发布门禁持续达标。
  • 保留快速关闭 Foundation Models 功能的配置,但关闭后基础阅读和 NLP 正常。

18. 最终发布门禁

  • 五份开发文档与实现一致。
  • 公共 API 兼容检查通过。
  • Core/NLP/Adapter 单元和集成测试通过。
  • 现有 Reader 与 TTS 回归通过。
  • 100+ AI Case 全量运行并达到指标。
  • Foundation Models 支持与不支持路径均完成真机测试。
  • PDF/EPUB Citation validity ≥ 99%。
  • Context faithfulness ≥ 98%。
  • Spoiler safety = 100%。
  • AI crash-free session ≥ 99.9%。
  • 隐私和网络审计通过。
  • 无 P0/P1 缺陷。
  • TestFlight 灰度指标稳定。