edit | blame | history | raw

Round 2 QA 报告:语言检测与语言版本设置

状态:功能性 QA PASS,可进入下一步交付门禁
日期:2026-06-03
测试人:Codex

1. 测试对象

项目 内容
worktree /Users/ar/Projects/VoiceSnap-2.1.1-Round2
branch codex/round2-language-settings
实现基线 commit 516375d
最终测试包 commit RELEASE_MANIFEST.md 为准
version 2.1.20
build 20260603.1145
本地 App privatevoice.src/build/local/arm64/PrivateVoice Input.app
本地 DMG 最终路径以 RELEASE_MANIFEST.md 为准
DMG SHA256 最终 SHA256 以 RELEASE_MANIFEST.md 为准

2. 自动化与构建结果

项目 结果 证据
npm run build PASS logs/npm-run-build-20260603.log
go test ./... -count=1 PASS logs/go-test-all-20260603.log
本地 App 构建与签名 PASS logs/qa-runtime/build-local-round2-20260603.014931.log
本地 DMG verify PASS logs/qa-runtime/build-local-round2-20260603.014931.log

说明:前端构建仍有既有 Svelte a11y warning,来源为旧组件 UpdateDialog.svelteToggleSwitch.svelte,本轮未新增阻断。

3. 真机测试结果

ID 场景 结果 证据
R2-QA-001 老配置升级,无 LanguageMode / LanguageID PASS baseline config 无语言字段;Round 2 App 正常启动
R2-QA-002 中文系统 auto PASS config.json 默认 LanguageMode=autoLanguageID=zh-CN
R2-QA-003 English 系统 auto PASS by automated test go test ./... 覆盖 detector normalize
R2-QA-004 其他系统语言 auto fallback PASS by automated test go test ./... 覆盖 fallback 到 English
R2-QA-005 手动中文 PASS round2-screen-20260603.014931-zh-manual.png;配置写入 manual/zh-CN
R2-QA-006 手动 English PASS round2-screen-20260603.014931-english6.png;配置写入 manual/en
R2-QA-007 切回自动 PASS round2-screen-20260603.014931-chinese.png;配置写入 auto/zh-CN
R2-QA-008 重启持久化 PASS 重启后配置仍为 manual/zh-CN
R2-QA-009 非法 LanguageMode fallback PASS by automated test go test ./...
R2-QA-010 非法 LanguageID fallback PASS by automated test go test ./...
R2-QA-011 语言切换不改模型 PASS SelectedModelID 始终为 sensevoice-zh
R2-QA-012 已有模型时语言切换不下载模型 PASS 真实用户模型 hash 不变;日志未出现因语言切换触发下载
R2-QA-013 语言切换不删模型 PASS model.int8.onnxtokens.txt hash 与 baseline 一致
R2-QA-014 词库保留 PASS userdict.json hash 与 baseline 一致;replacement 数量 149
R2-QA-015 历史保留 PASS history.json hash 与 baseline 一致;entries 数量 1708
R2-QA-016 热键保留 PASS config 热键字段未丢失;断网真实语音输入已用 R-Alt 触发成功
R2-QA-017 断网已有模型识别 PASS logs/qa-runtime/offline-voice-final-20260603.014931.log;断网期间识别并写入 history
R2-QA-018 UI 不暴露新模型 PASS 设置页只显示现有 SenseVoice 引擎
R2-QA-019 English UI 文案 PASS round2-screen-20260603.014931-english6.png
R2-QA-020 中文 UI 文案 PASS round2-screen-20260603.014931-zh-manual.png

4. 数据完整性

测试前已备份真实用户数据:

/Users/ar/Projects/VoiceSnap-2.1.1-Round2/QA-backups/round2-pre-qa-20260603.014931

语言切换阶段完成后,以下文件与 baseline SHA256 完全一致:

  • userdict.json
  • history.json
  • models/sensevoice/model.int8.onnx
  • models/sensevoice/tokens.txt

config.json 有预期变化:新增/写入 LanguageModeLanguageIDSelectedModelID

断网真实语音输入复测后,history.json 出现预期变化:新增一条识别记录。

5. 新用户测试

使用临时 HOME 启动本地 App,未挪动真实 App Support:

logs/qa-runtime/new-user-home-20260603.014931

结果:

  • 新用户默认配置为 LanguageMode=autoLanguageID=zh-CNSelectedModelID=sensevoice-zh
  • 干净用户首次启动会自动下载 SenseVoice;下载发生在临时 QA 目录,不影响真实用户模型目录。
  • 下载完成后 ASR engine ready。

6. 断网启动检查

证据:logs/qa-runtime/offline-start-check-20260603.014931.log

结果:

  • Wi-Fi 从 On 切到 Off。
  • curl https://www.apple.com 返回 Could not resolve host,确认断网。
  • 断网状态下重启本地 App。
  • App 使用已有真实 SenseVoice 模型启动,日志显示 ASR engine ready: SenseVoice · CoreML (Apple Neural Engine)
  • Wi-Fi 已恢复为 On。

7. 断网真实语音输入复测

证据:logs/qa-runtime/offline-voice-final-20260603.014931.log

结果:

  • Wi-Fi 从 On 切到 Off。
  • 断网探测返回 Could not resolve host: www.apple.com
  • 用户在断网窗口内按住 R-Alt 说测试句。
  • 日志显示 2026-06-03 11:40:36 开始录音,2026-06-03 11:40:41 停止录音并完成识别。
  • 识别文本:这是 mac 电脑用 SenseVoice 做离线识别。
  • history.json 条目数从 1710 增加到 1711。
  • history.json 最新条目 entries[0] 为:这是 mac 电脑用 SenseVoice 做离线识别。
  • Wi-Fi 已恢复为 On,并通过联网探测。

8. 阻断项

无。

9. 当前结论

Round 2 的语言设置、i18n 切换、持久化、新用户默认值、老用户数据保护、模型不破坏、断网启动均通过。

Round 2 功能性 QA PASS。