用途:验证任务列表、编译器和代码审查看不到的“流程”正确性——屏幕之间的跳转、返回路径、死路与可发现性。结构上、代码层面都正常的应用,可能在用户带目标走完整流程时出现死路或错误落点。
三层方法:
- 静态导航图审计(无需构建):用 Grep 检索 NavigationStack、navigationDestination、NavigationLink、.sheet、.fullScreenCover、router.push、enum Route、dismiss()、popToRoot、@Query 等,构建导航图,检查每个屏幕的进入与返回路径、CRUD 完整性(有创建路径的 @Model 是否有读取和重新打开编辑的路径)、入口合理性,以及被推入的视图是否错误地再包一层 NavigationView/NavigationStack。发现以 DEAD-END、NO-EDIT-PATH、ORPHANS-ENTITY、NESTED-NAV 形式输出,并附 file:line。
- 自动化流程驱动(XCUITest + 每步截图):把每个流程转成 UI 测试,逐步点击并截图,断言每步落点,尤其是 Done/Back 之后。运行命令示例:
xcodebuild test -project <App>.xcodeproj -scheme <App>
-destination 'platform=iOS Simulator,name=<device>'
-resultBundlePath .planning/walkthrough/<flowId>.xcresult xcrun xcresulttool export attachments
--path .planning/walkthrough/<flowId>.xcresult
--output-path .planning/walkthrough/<flowId>/ (xcresulttool 子命令名随 Xcode 版本变化,需查看 xcrun xcresulttool --help 后调整。)另需至少跑一次不带种子参数的干净安装流程,检查各顶层屏幕的空状态。 - 人工可发现性检查:为每个流程生成简短脚本,让真人执行并按 1–5 评分并记录犹豫之处,因为自动化测试可能点到隐藏控件仍然通过。
输入:来自 PLAN.md 的 <flows>,即端到端旅程,每个都是可测试脚本;若没有,先从 <mvp-features>/views 推导并写回 PLAN.md。输出:.planning/WALKTHROUGH.md,含三层结果与结论;截图存于 .planning/walkthrough/<flowId>/。所有第一层死路和第二层失败必须在阶段标记完成前修复。
限制:测试无法判断手感或可发现性,第二层全绿但第三层未评分不算通过;受门槛限制的晚期流程需要提供 DEBUG 的 -uiTestSeed 路径并确保不影响发布;可发现性问题属于设计变更,应交给人类决定。此技能与 visual-qa 互补,生成的 XCUITest 可交给测试流程作为回归套件。