From a6dd2b52ce8a5e8f6c5e8d9202527f4bf4689234 Mon Sep 17 00:00:00 2001 From: ukeSJTU Date: Mon, 29 Dec 2025 10:52:27 +0800 Subject: [PATCH 01/12] feat: add slidev file for final report --- apps/slides/final-report.md | 1325 +++++++++++++++++++++++++++++++++++ 1 file changed, 1325 insertions(+) create mode 100644 apps/slides/final-report.md diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md new file mode 100644 index 000000000..764df2c37 --- /dev/null +++ b/apps/slides/final-report.md @@ -0,0 +1,1325 @@ +--- +theme: default +addons: [] +title: Nomad 项目期末汇报 +info: false +author: uke +presenter: true +browserExporter: dev +download: false +twoslash: true +lineNumbers: true +monaco: true +selectable: true +record: false +colorSchema: auto +drawings: + enabled: false +fonts: + mono: "Fira Code, monospace" +layout: cover +transition: slide-left +mdc: true +--- + +# Nomad 项目期末汇报 + +Requirements as Code 方法实践 + +—— TODO 小组 + + + + + + + +--- +layout: center +transition: slide-left +--- + +# 目录 + + + +1. **演示环节** - 视频展示核心业务功能 +2. **需求管理方法** - Requirements as Code 的创新实践 +3. **需求-设计-测试-实现的闭环** - 如何达成稳定复现代码 +4. **遇到的挑战与解决方案** - 实践中的问题和改进 +5. **GUI测试运行情况** - E2E测试的实践 +6. **总结与展望** - 核心贡献和未来计划 + + + + + +--- +layout: section +transition: slide-up +--- + +# 一、演示环节 + +视频展示核心业务功能 + + + +--- +transition: slide-up +layout: center +--- + +## 视频演示 + + + +### 核心业务流程 + +- **用户注册** - 手机号/邮箱注册 +- **航班搜索** - 单程/往返,座舱选择 +- **订单创建** - 乘客信息,联系人信息 +- **支付完成** - 订单确认和管理 + + + + + +> 这段视频由 apps/demo 应用生成,展示了从用户注册到支付完成的完整业务闭环 + + + + + +--- +transition: slide-left +layout: section +--- + +# 二、需求管理方法 + +Requirements as Code 的创新实践 + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 2.1 传统需求管理的痛点 + +::left:: + + + +### 常见问题 + +- **需求与代码分离** + - Word/Excel 文档难以同步 + - 需求变更追踪困难 + - 代码和文档容易脱节 + +- **测试覆盖率难以量化** + - 无法准确知道哪些需求已测试 + - 人工统计费时费力 + - 容易遗漏边界场景 + + + +::right:: + + + +### AI 辅助开发的挑战 + +- **AI 生成测试的局限性** + - 容易产生"幻觉" + - 倾向于 Happy Path + - 遗漏异常场景和边界条件 + +- **追溯性差** + - 难以知道某个测试覆盖了哪个需求 + - 需求变更时难以找到相关测试 + - 缺乏自动化验证机制 + + + + + +--- +transition: slide-up +layout: center +--- + +## 2.2 我们的解决方案:Requirements as Code + + + +### 核心思想 + +将需求定义为 **TypeScript 代码**,纳入 **版本控制** + +### 关键优势 + +- **类型安全** - TypeScript 类型定义保证需求结构一致 +- **版本控制** - 需求变更可追溯,支持 Git Diff +- **模块化管理** - 按业务模块组织(用户、机票、订单、支付、UI/UX) +- **多应用共享** - 一次定义,多处消费(文档系统、主应用、覆盖率分析) + + + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 2.2 实现架构(结合 Monorepo) + +::left:: + + + +### 目录结构 + +``` +packages/requirements/ ← 需求定义包(核心) +├── src/data/ +│ ├── user-module.ts +│ ├── flight-module.ts +│ ├── order-module.ts +│ ├── payment-module.ts +│ └── ui-ux-module.ts +├── src/utils/ +│ └── traceability/ ← 需求追溯系统 +│ ├── parser.ts +│ ├── mapper.ts +│ └── reporter.ts +└── src/cli/ + └── coverage.ts ← 自动化覆盖率分析 +``` + + + +::right:: + + + +### 消费者应用 + +``` +apps/docs/ ← 文档系统 +├── components/ +│ ├── RequirementStats.tsx +│ ├── RequirementDetail.tsx +│ └── RequirementToc.tsx +└── content/docs/requirements/ + +apps/web/ ← 主应用 +├── app/_components/ +│ └── *.test.tsx ← 带需求标签的测试 +└── coverage-report.json ← 覆盖率报告 +``` + +### 工作流 + +需求定义 → 多应用消费 → 覆盖率分析 + + + + + +--- +transition: slide-up +layout: center +--- + +## 2.3 需求数量与结构 + + + +| 模块 | 需求数量 | 验收场景数 | 优先级分布 | +| --------- | -------- | ---------- | ------------------------------ | +| 用户模块 | 12 | ~75 | Must: 6, Should: 6 | +| 机票模块 | 13 | ~95 | Must: 9, Should: 3, Could: 1 | +| 订单模块 | 12 | ~85 | Must: 8, Should: 4 | +| 支付模块 | 13 | ~75 | Must: 11, Should: 2 | +| UI/UX模块 | 12 | ~51 | Must: 8, Should: 4 | +| **总计** | **62** | **381** | Must: 42, Should: 19, Could: 1 | + + + + + +> 所有需求采用 BDD 风格(Given-When-Then),使用 MoSCoW 优先级管理 + + + + + +--- +transition: slide-left +layout: section +--- + +# 三、需求-设计-测试-实现的闭环 + +如何达成稳定复现代码 + + + +--- +transition: slide-up +layout: center +--- + +## 3.1 设计思路:双向追溯系统 + + + +```mermaid +graph TD + A[需求定义
packages/requirements] --> B[JSDoc 标签标记
@requirement, @scenario] + B --> C[测试代码
apps/web/**/*.test.ts] + C --> D[AST 解析
TypeScript Compiler API] + D --> E[覆盖率映射
需求↔测试, 场景↔测试] + E --> F[覆盖率报告
识别未覆盖需求] + F --> G[文档系统展示
apps/docs] + G -.反馈.-> A +``` + +
+ + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 3.2 方法1:JSDoc 标签追溯 + +::left:: + + + +### 标签语法 + +```typescript +/** + * @requirement REQ-U01 ← 关联需求 + * @scenario 场景1 ← 关联验收场景 + */ +describe("PhoneVerificationForm", () => { + it("should render all form fields correctly", () => { + // 测试实现 + }); +}); +``` + +### 继承规则 + +- **文件级** → describe 块 → test 块 +- 子级标签覆盖父级标签 +- 支持多需求、多场景关联 + + + +::right:: + + + +### 实际示例 + +```typescript {*}{maxHeight:'400px'} +/** + * @requirement REQ-U01 + * Phone verification form component tests + */ + +describe("PhoneVerificationForm", () => { + /** + * @scenario 场景1: 表单正确渲染 + */ + it("should render all form fields", () => { + render(); + + expect(screen.getByLabelText(/手机号/)) + .toBeInTheDocument(); + expect(screen.getByLabelText(/验证码/)) + .toBeInTheDocument(); + }); + + /** + * @scenario 场景2: 验证码发送 + */ + it("should send verification code", + async () => { + // ... + }); +}); +``` + + + + + +--- +transition: slide-up +layout: center +--- + +## 3.2 方法2:自动化覆盖率分析 + + + +### 实现原理 + +1. **AST 解析** - 使用 TypeScript Compiler API 解析测试文件 +2. **标签提取** - 提取 JSDoc 标签(@requirement, @scenario) +3. **映射构建** - 构建需求→测试、场景→测试的双向映射 +4. **标签验证** - 验证需求ID和场景ID是否有效 +5. **统计计算** - 计算覆盖率、识别未覆盖项 + +### 工具链路 + +```bash +pnpm test:ac-coverage # 生成覆盖率报告 +pnpm test:ac-coverage --json # JSON 格式输出 +``` + + + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 覆盖率报告内容 + +::left:: + + + +### 报告结构 + +- **总体覆盖率统计** + - 需求覆盖率 + - 场景覆盖率 + - 按优先级统计 + +- **各模块覆盖率** + - 用户模块:83.3% + - 机票模块:30.8% + - 订单模块:41.7% + - 支付模块:0% + - UI/UX模块:0% + + + +::right:: + + + +### 详细信息 + +- **未覆盖的需求列表** + - 需求 ID + - 需求标题 + - 优先级 + - 所属模块 + +- **未覆盖的场景列表** + - 场景描述 + - 所属需求 + - 优先级 + +- **测试分布情况** + - 每个需求的测试数量 + - 重复测试识别 + + + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 3.3 方法3:文档系统动态展示 + +::left:: + + + +### 文档组件 + +```tsx {*}{maxHeight:'400px'} +// MDX 文档 +import { userModule } + from '@nomad/requirements/data'; +import { + RequirementStats, + RequirementDetail +} from '@/components'; + +## 用户模块 + +用户模块包含 {userModule.requirements.length} +个功能需求。 + + + +{userModule.requirements.map((req) => ( + +))} +``` + + + +::right:: + + + +### 展示内容 + +- **需求统计表格** + - 需求数 + - 场景数 + - MoSCoW 分布 + +- **需求详情卡片** + - 需求概述 + - 用户故事 + - 验收标准 + - 优先级 + +- **需求目录导航** + - 按模块分类 + - 按优先级筛选 + + + + + +--- +transition: slide-up +layout: center +--- + +## 3.4 测试系统架构 + + + +### 4层测试金字塔 + +1. **单元测试(Unit Tests)** - 纯逻辑、工具函数 +2. **组件测试(Component Tests)** - React 组件渲染和交互 +3. **集成测试(Repository Tests)** - 数据库操作、数据层 +4. **E2E测试(Playwright)** - 端到端业务流程 + +### 当前测试覆盖情况 + +- 测试文件:89 个 +- Vitest 配置:4 个独立测试项目 +- 覆盖率阈值:80%(branches, functions, lines, statements) + + + + + +--- +transition: slide-left +layout: section +--- + +# 四、遇到的挑战与解决方案 + +实践中的问题和改进 + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 4.1 挑战1:需求覆盖率不均衡 + +::left:: + + + +### 现象 + +| 模块 | 覆盖率 | 状态 | +| --------- | ------ | --------- | +| 用户模块 | 83.3% | ✅ 良好 | +| 机票模块 | 30.8% | ⚠️ 待改进 | +| 订单模块 | 41.7% | ⚠️ 待改进 | +| 支付模块 | 0% | ❌ 需补充 | +| UI/UX模块 | 0% | ❌ 需补充 | + +### 根因分析 + +1. **组件设计问题** + - 部分组件未遵循单一职责原则 + - 业务逻辑与 UI 耦合,难以拆分测试 + + + +::right:: + + + +### 根因分析(续) + +2. **测试优先级** + - 团队优先保证核心业务流程 + - 用户注册、订单查询优先实现 + +3. **AI 辅助局限** + - AI 生成的测试倾向于 Happy Path + - 边界场景覆盖不足 + +### 解决方案 + +- 重构支付模块:分离 Base 组件(UI)和 Web Adapter(业务逻辑) +- 利用覆盖率报告:优先补充 Must Have 需求的测试 +- 建立测试模板:标准化 JSDoc 标签使用规范 + + + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 4.2 挑战2:场景覆盖率低(7.3%) + +::left:: + + + +### 现象 + +- **总场景数**:381 个验收场景 +- **已覆盖**:28 个场景 +- **覆盖率**:7.3% + +### 原因 + +1. **场景数量多** + - 单个需求包含 5-10 个验收场景 + - Happy Path + 多个异常场景 + +2. **当前测试主要覆盖 Happy Path** + - 正常注册流程 ✅ + - 手机号已注册 ❌ + - 验证码错误 ❌ + - 网络异常 ❌ + + + +::right:: + + + +### 改进计划 + +1. **优先级驱动** + - 使用覆盖率报告识别高优先级未覆盖场景 + - Must Have 需求优先 + +2. **测试驱动开发(TDD)** + - 先写测试,再实现功能 + - 确保每个场景都有对应测试 + +3. **Property-Based Testing** + - 引入 fast-check 等工具 + - 提升边界场景覆盖 + +4. **测试评审机制** + - Code Review 时检查场景覆盖 + - 新增功能必须包含场景测试 + + + + + +--- +transition: slide-up +layout: center +--- + +## 4.3 挑战3:Monorepo 维护复杂度 + + + +### 问题 + +- **组件迁移工作量大** + - 140 个组件,已完成 117 个 + - 需要重构 Base 组件和 Web Adapter + +- **版本依赖管理复杂** + - 多个应用依赖同一个包 + - 版本不一致可能导致构建失败 + +- **构建缓存策略优化** + - Turborepo 缓存配置 + - CI/CD 流水线优化 + +### 解决措施 + +- 使用 Turborepo 优化构建流程 +- 制定 Base Component Pattern 规范 +- 渐进式迁移,避免大爆炸式重构 + + + + + +--- +transition: slide-left +layout: section +--- + +# 五、GUI测试运行情况 + +E2E测试的实践 + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## Playwright E2E 测试 + +::left:: + + + +### 测试范围 + +- **首页功能测试** + - 页面正确渲染 + - 导航功能 + - 响应式布局 + - 共 4 个测试用例 + +- **法律页面导航测试** + - 隐私政策 + - 服务条款 + - 用户协议等 + - 共 5 个测试用例 + + + +::right:: + + + +### CI/CD 集成 + +- **4 分片并行执行** + - 提升测试速度 + - 每个分片独立运行 + +- **跨浏览器测试** + - Chromium + - Firefox + - WebKit + +- **自动生成报告** + - HTML 报告 + - 部署到 GitHub Pages + - 访问地址:[playwright-report](https://ukesjtu.github.io/nomad/playwright-report/) + + + + + +--- +transition: slide-up +layout: center +--- + +## 待改进方向 + + + +### 1. 为 E2E 测试添加需求标签 + +- 当前 E2E 测试没有 `@requirement` 标签 +- 需要将 E2E 测试纳入覆盖率统计 +- 让需求追溯系统覆盖所有测试层级 + +### 2. 扩展核心业务流程的 E2E 测试 + +- **完整的订票流程** + - 用户注册/登录 + - 搜索航班 + - 选择航班 + - 填写乘客信息 + - 完成支付 + - 查看订单 + +- **其他关键流程** + - 密码找回 + - 个人信息修改 + - 订单取消 + + + + + +--- +transition: slide-left +layout: section +--- + +# 六、总结与展望 + +核心贡献和未来计划 + + + +--- +transition: slide-up +layout: two-cols-header +--- + +## 核心贡献 + +::left:: + + + +### 1. 创新方法 + +**Requirements as Code** + +- 需求管理的代码化实践 +- 从文档驱动到代码驱动 +- 业界少见的系统性实践 + +### 2. 工程化实现 + +**自动化追溯系统** + +- JSDoc 标签追溯 +- AST 解析和映射构建 +- 覆盖率报告生成 +- 避免人工遗漏和错误 + + + +::right:: + + + +### 3. Monorepo 架构 + +**需求、文档、应用的统一管理** + +- packages/requirements:需求定义 +- apps/docs:文档系统 +- apps/web:主应用 +- 一次定义,多处消费 + +### 4. 类型安全 + +**TypeScript 保证需求定义的一致性** + +- 编译时验证 +- 重构时自动提示 +- IDE 智能提示 + + + + + +--- +transition: slide-up +layout: center +--- + +## 效果验证 + + + +### ✅ 需求总数清晰可查 + +- **62 个需求**,**381 个验收场景** +- 按模块组织,按优先级管理 + +### ✅ 覆盖率可量化 + +- **总体需求覆盖率:30.6%** +- **用户模块覆盖率:83.3%** +- 识别未覆盖的高优先级需求 + +### ✅ 需求变更可追溯 + +- **Git 历史记录所有变化** +- git diff 查看需求演变 +- git blame 找到修改者 + +### ✅ 文档自动同步 + +- **apps/docs 动态读取需求数据** +- 需求更新,文档自动同步 +- 避免文档与代码不一致 + + + + + +--- +transition: slide-up +layout: center +--- + +## 下一步计划 + + + +### 1. 提升测试覆盖率 + +- **支付模块和 UI/UX 模块**:从 0% 提升至 60% +- **场景覆盖率**:从 7.3% 提升至 30% +- 优先补充 Must Have 需求的测试 + +### 2. 为 E2E 测试添加需求标签 + +- 将 E2E 测试纳入覆盖率统计 +- 实现从单元测试到 E2E 测试的完整追溯 + +### 3. 扩展核心业务流程的 E2E 测试 + +- 完整的订票流程 +- 密码找回、个人信息修改等关键流程 + +### 4. 引入突变测试(Mutation Testing) + +- 使用 Stryker 等工具验证测试质量 +- 识别"假阳性"测试 + + + + + +--- +layout: center +transition: slide-left +--- + +# 感谢聆听 + + + +## 附录:关键文件路径 + +### 需求定义 + +- `packages/requirements/src/data/user-module.ts` +- `packages/requirements/src/data/flight-module.ts` +- `packages/requirements/src/data/order-module.ts` +- `packages/requirements/src/data/payment-module.ts` +- `packages/requirements/src/data/ui-ux-module.ts` + +### 追溯系统 + +- `packages/requirements/src/cli/coverage.ts` - CLI 工具入口 +- `packages/requirements/src/utils/traceability/parser.ts` - AST 解析器 +- `packages/requirements/src/utils/traceability/mapper.ts` - 覆盖率映射 +- `packages/requirements/src/utils/traceability/reporter.ts` - 报告生成 + + + + + +--- +layout: end +--- + +# Q&A + +欢迎提问 + + From c8d1964182547f2479180356465fe5fed0486205 Mon Sep 17 00:00:00 2001 From: ukeSJTU Date: Mon, 29 Dec 2025 10:57:10 +0800 Subject: [PATCH 02/12] feat(slides): enhance final report with workflow and key steps for traceability --- apps/slides/final-report.md | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md index 764df2c37..808861e88 100644 --- a/apps/slides/final-report.md +++ b/apps/slides/final-report.md @@ -370,34 +370,44 @@ layout: section --- transition: slide-up -layout: center --- ## 3.1 设计思路:双向追溯系统 +### 完整工作流程 + ```mermaid -graph TD - A[需求定义
packages/requirements] --> B[JSDoc 标签标记
@requirement, @scenario] - B --> C[测试代码
apps/web/**/*.test.ts] - C --> D[AST 解析
TypeScript Compiler API] - D --> E[覆盖率映射
需求↔测试, 场景↔测试] - E --> F[覆盖率报告
识别未覆盖需求] - F --> G[文档系统展示
apps/docs] +graph LR + A[需求定义] --> B[JSDoc标签] + B --> C[测试代码] + C --> D[AST解析] + D --> E[覆盖率映射] + E --> F[覆盖率报告] + F --> G[文档展示] G -.反馈.-> A ``` +### 关键环节 + +1. **需求定义** → packages/requirements 定义 62 个需求、381 个场景 +2. **JSDoc标签** → @requirement, @scenario 标记测试 +3. **AST解析** → TypeScript Compiler API 提取标签 +4. **覆盖率映射** → 构建需求↔测试、场景↔测试的双向映射 +5. **覆盖率报告** → 识别未覆盖需求和场景 +6. **文档展示** → apps/docs 动态展示需求状态 +
- ---- -transition: slide-up -layout: center ---- - -## 视频演示 - - - -### 核心业务流程 - -- **用户注册** - 手机号/邮箱注册 -- **航班搜索** - 单程/往返,座舱选择 -- **订单创建** - 乘客信息,联系人信息 -- **支付完成** - 订单确认和管理 - - - - - -> 这段视频由 apps/demo 应用生成,展示了从用户注册到支付完成的完整业务闭环 - - - - --- From 4d3e81015e8af70da16c39eb3aa526c87a48006c Mon Sep 17 00:00:00 2001 From: ukeSJTU Date: Mon, 29 Dec 2025 12:32:18 +0800 Subject: [PATCH 06/12] fix(slides): remove unnecessary v-clicks tags from final report --- apps/slides/final-report.md | 224 +++++++++--------------------------- 1 file changed, 54 insertions(+), 170 deletions(-) diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md index 79f40f868..479eef653 100644 --- a/apps/slides/final-report.md +++ b/apps/slides/final-report.md @@ -43,8 +43,6 @@ transition: slide-left # 目录 - - 1. **演示环节** - 展示目前实现的核心业务功能 2. **需求管理方法** - Requirements as Code 的创新实践 3. **需求-设计-测试-实现的闭环** - 如何达成稳定复现代码 @@ -52,22 +50,20 @@ transition: slide-left 5. **GUI测试运行情况** - TODO 6. **总结与展望** - 核心贡献和未来计划 - - @@ -115,8 +111,6 @@ layout: two-cols-header ::left:: - - ### 常见问题 - **需求与代码分离** @@ -129,12 +123,8 @@ layout: two-cols-header - 人工统计费时费力 - 容易遗漏边界场景 - - ::right:: - - ### AI 辅助开发的挑战 - **AI 生成测试的局限性** @@ -147,18 +137,16 @@ layout: two-cols-header - 需求变更时难以找到相关测试 - 缺乏自动化验证机制 - - @@ -170,8 +158,6 @@ layout: center ## 2.2 我们的解决方案:Requirements as Code - - ### 核心思想 将需求定义为 **TypeScript 代码**,纳入 **版本控制** @@ -183,14 +169,12 @@ layout: center - **模块化管理** - 按业务模块组织(用户、机票、订单、支付、UI/UX) - **多应用共享** - 一次定义,多处消费(文档系统、主应用、覆盖率分析) - - --- @@ -284,8 +260,6 @@ layout: center ## 2.3 需求数量与结构 - - | 模块 | 需求数量 | 验收场景数 | 优先级分布 | | --------- | -------- | ---------- | ------------------------------ | | 用户模块 | 12 | ~75 | Must: 6, Should: 6 | @@ -295,8 +269,6 @@ layout: center | UI/UX模块 | 12 | ~51 | Must: 8, Should: 4 | | **总计** | **62** | **381** | Must: 42, Should: 19, Could: 1 | - - > 所有需求采用 BDD 风格(Given-When-Then),使用 MoSCoW 优先级管理 @@ -304,7 +276,7 @@ layout: center --- @@ -344,8 +316,6 @@ transition: slide-up ## 3.1 设计思路:双向追溯系统 - - ### 完整工作流程 ```mermaid @@ -368,10 +338,8 @@ graph LR 5. **覆盖率报告** → 识别未覆盖需求和场景 6. **文档展示** → apps/docs 动态展示需求状态 - - --- @@ -531,8 +487,6 @@ layout: two-cols-header ::left:: - - ### 报告结构 - **总体覆盖率统计** @@ -547,12 +501,8 @@ layout: two-cols-header - 支付模块:0% - UI/UX模块:0% - - ::right:: - - ### 详细信息 - **未覆盖的需求列表** @@ -570,16 +520,14 @@ layout: two-cols-header - 每个需求的测试数量 - 重复测试识别 - - @@ -742,8 +678,6 @@ layout: two-cols-header ::left:: - - ### 现象 | 模块 | 覆盖率 | 状态 | @@ -760,12 +694,8 @@ layout: two-cols-header - 部分组件未遵循单一职责原则 - 业务逻辑与 UI 耦合,难以拆分测试 - - ::right:: - - ### 根因分析(续) 2. **测试优先级** @@ -782,10 +712,8 @@ layout: two-cols-header - 利用覆盖率报告:优先补充 Must Have 需求的测试 - 建立测试模板:标准化 JSDoc 标签使用规范 - - @@ -1161,8 +1057,6 @@ layout: center ## 效果验证 - - ### ✅ 需求总数清晰可查 - **62 个需求**,**381 个验收场景** @@ -1186,18 +1080,16 @@ layout: center - 需求更新,文档自动同步 - 避免文档与代码不一致 - - @@ -1209,8 +1101,6 @@ layout: center ## 下一步计划 - - ### 1. 提升测试覆盖率 - **支付模块和 UI/UX 模块**:从 0% 提升至 60% @@ -1232,18 +1122,16 @@ layout: center - 使用 Stryker 等工具验证测试质量 - 识别"假阳性"测试 - - @@ -1255,8 +1143,6 @@ transition: slide-left # 感谢聆听 - - ## 附录:关键文件路径 ### 需求定义 @@ -1274,12 +1160,10 @@ transition: slide-left - `packages/requirements/src/utils/traceability/mapper.ts` - 覆盖率映射 - `packages/requirements/src/utils/traceability/reporter.ts` - 报告生成 - - --- From f13264fbc719d2af25575d15aecdf8135bf1bf71 Mon Sep 17 00:00:00 2001 From: ukeSJTU Date: Mon, 29 Dec 2025 12:37:15 +0800 Subject: [PATCH 08/12] fix(slides): remove unnecessary sections and clarify UI/UX testing status in final report --- apps/slides/final-report.md | 47 +++---------------------------------- 1 file changed, 3 insertions(+), 44 deletions(-) diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md index 8c2fc4a22..53c878836 100644 --- a/apps/slides/final-report.md +++ b/apps/slides/final-report.md @@ -231,10 +231,6 @@ apps/web/ ← 主应用 └── coverage-report.json ← 覆盖率报告 ``` -### 工作流 - -需求定义 → 多应用消费 → 覆盖率分析 - ---- -transition: slide-up -layout: center ---- - -## 3.4 测试系统架构 - -### 4层测试金字塔 - -1. **单元测试(Unit Tests)** - 纯逻辑、工具函数 -2. **组件测试(Component Tests)** - React 组件渲染和交互 -3. **集成测试(Repository Tests)** - 数据库操作、数据层 -4. **E2E测试(Playwright)** - 端到端业务流程 - -### 当前测试覆盖情况 - -- 测试文件:89 个 -- Vitest 配置:4 个独立测试项目 -- 覆盖率阈值:80%(branches, functions, lines, statements) - - - --- transition: slide-left layout: section From 3393ce7894f141a6e0d8cc17bcb0e4c33d0584ed Mon Sep 17 00:00:00 2001 From: uke_mba Date: Mon, 29 Dec 2025 13:12:59 +0800 Subject: [PATCH 09/12] fix(slides): update final report structure and clarify GUI testing requirements --- apps/slides/final-report.md | 508 ++++++------------------------------ 1 file changed, 79 insertions(+), 429 deletions(-) diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md index 53c878836..ad69cbb3e 100644 --- a/apps/slides/final-report.md +++ b/apps/slides/final-report.md @@ -46,9 +46,8 @@ transition: slide-left 1. **演示环节** - 展示目前实现的核心业务功能 2. **需求管理方法** - Requirements as Code 的创新实践 3. **需求-设计-测试-实现的闭环** - 如何达成稳定复现代码 -4. **遇到的挑战与解决方案** - 实践中的问题和改进 -5. **GUI测试运行情况** - TODO -6. **总结与展望** - 核心贡献和未来计划 +4. **挑战与解决方案** - 当前测试框架的不足 +5. **GUI测试运行情况** - 通过率和改进 +--- +transition: slide-up +layout: two-cols-header +--- + +## 2.3 具体需求展示 + +::left:: + +### 需求定义 + +```typescript +const REQ_F01: Requirement = { + id: "REQ-F01", + module: "flight", + name: "航班搜索表单", + overview: + "本功能是用户发起机票查询流程的主入口,位于机票业务的首页。它提供了一个简洁、高效的表单,用于捕获用户的核心出行意图,包括行程类型(单程/往返)、出发地、目的地、日期和座舱等级,并将用户引导至包含详细航班信息的搜索结果页面。", + priority: "Must Have", + userStories: [ + { + id: "US-01", + content: + "作为一个有初步出行计划的用户,我希望能在首页清晰地看到并填写我的出发地、目的地和日期,以便快速启动航班搜索。", + }, + { + id: "US-02", + content: + "作为一个用户,我希望能选择单程或往返行程类型,以便系统返回符合我需求的航班结果。", + }, + ], +}; +``` + +::right:: + +### 验收标准定义 + +```typescript +{ + id: "场景7", + title: "交换出发地和目的地", + steps: [ + { + type: "given", + description: `用户已选择出发地为"上海",目的地为"北京"`, + }, + { + type: "when", + description: "用户点击交换按钮", + }, + { + type: "then", + description: `出发地应变为"北京",目的地应变为"上海"`, + }, + ], +} +``` + --- transition: slide-up layout: center @@ -467,13 +525,10 @@ pnpm test:ac-coverage --json # JSON 格式输出 --- transition: slide-up -layout: two-cols-header --- ## 覆盖率报告内容 -::left:: - ### 报告结构 - **总体覆盖率统计** @@ -482,31 +537,12 @@ layout: two-cols-header - 按优先级统计 - **各模块覆盖率** - - 用户模块:83.3% - - 机票模块:30.8% - - 订单模块:41.7% - - 支付模块:0% + - 用户模块:~80% + - 机票模块:~90% + - 订单模块:~50% + - 支付模块:~60% - UI/UX模块:0% (<-- 不测试) -::right:: - -### 详细信息 - -- **未覆盖的需求列表** - - 需求 ID - - 需求标题 - - 优先级 - - 所属模块 - -- **未覆盖的场景列表** - - 场景描述 - - 所属需求 - - 优先级 - -- **测试分布情况** - - 每个需求的测试数量 - - 重复测试识别 - ---- -transition: slide-left -layout: section ---- - -# 四、遇到的挑战与解决方案 - -实践中的问题和改进 - - - --- transition: slide-up layout: two-cols-header @@ -633,10 +643,10 @@ layout: two-cols-header | 模块 | 覆盖率 | 状态 | | --------- | ------ | --------- | -| 用户模块 | 83.3% | ✅ 良好 | -| 机票模块 | 30.8% | ⚠️ 待改进 | -| 订单模块 | 41.7% | ⚠️ 待改进 | -| 支付模块 | 0% | ❌ 需补充 | +| 用户模块 | ~80% | ✅ 良好 | +| 机票模块 | ~90% | ⚠️ 待改进 | +| 订单模块 | ~50% | ⚠️ 待改进 | +| 支付模块 | ~60% | ❌ 需补充 | | UI/UX模块 | 0% | ❌ 需补充 | ### 根因分析 @@ -690,79 +700,10 @@ transition: slide-up layout: two-cols-header --- -## 4.2 挑战2:场景覆盖率低(7.3%) +## 4.3 挑战2:Monorepo 维护复杂度 ::left:: -### 现象 - -- **总场景数**:381 个验收场景 -- **已覆盖**:28 个场景 -- **覆盖率**:7.3% - -### 原因 - -1. **场景数量多** - - 单个需求包含 5-10 个验收场景 - - Happy Path + 多个异常场景 - -2. **当前测试主要覆盖 Happy Path** - - 正常注册流程 ✅ - - 手机号已注册 ❌ - - 验证码错误 ❌ - - 网络异常 ❌ - -::right:: - -### 改进计划 - -1. **优先级驱动** - - 使用覆盖率报告识别高优先级未覆盖场景 - - Must Have 需求优先 - -2. **测试驱动开发(TDD)** - - 先写测试,再实现功能 - - 确保每个场景都有对应测试 - -3. **Property-Based Testing** - - 引入 fast-check 等工具 - - 提升边界场景覆盖 - -4. **测试评审机制** - - Code Review 时检查场景覆盖 - - 新增功能必须包含场景测试 - - - ---- -transition: slide-up -layout: center ---- - -## 4.3 挑战3:Monorepo 维护复杂度 - ### 问题 - **组件迁移工作量大** @@ -777,6 +718,8 @@ layout: center - Turborepo 缓存配置 - CI/CD 流水线优化 +::right:: + ### 解决措施 - 使用 Turborepo 优化构建流程 @@ -812,74 +755,21 @@ layout: section # 五、GUI测试运行情况 -E2E测试的实践 +GUI 测试的实践 --- transition: slide-up -layout: two-cols-header --- -## Playwright E2E 测试 - -::left:: +## GUI 测试 -### 测试范围 +运行结果:通过 28/30 个测试案例。 -- **首页功能测试** - - 页面正确渲染 - - 导航功能 - - 响应式布局 - - 共 4 个测试用例 - -- **法律页面导航测试** - - 隐私政策 - - 服务条款 - - 用户协议等 - - 共 5 个测试用例 - -::right:: - -### CI/CD 集成 - -- **4 分片并行执行** - - 提升测试速度 - - 每个分片独立运行 - -- **跨浏览器测试** - - Chromium - - Firefox - - WebKit - -- **自动生成报告** - - HTML 报告 - - 部署到 GitHub Pages - - 访问地址:[playwright-report](https://ukesjtu.github.io/nomad/playwright-report/) - - +其中不通过的案例有一定原因是测试背后调用的 Agent 本身不稳定。 --- transition: slide-up @@ -888,244 +778,8 @@ layout: center ## 待改进方向 -### 1. 为 E2E 测试添加需求标签 - -- 当前 E2E 测试没有 `@requirement` 标签 -- 需要将 E2E 测试纳入覆盖率统计 -- 让需求追溯系统覆盖所有测试层级 - -### 2. 扩展核心业务流程的 E2E 测试 - -- **完整的订票流程** - - 用户注册/登录 - - 搜索航班 - - 选择航班 - - 填写乘客信息 - - 完成支付 - - 查看订单 - -- **其他关键流程** - - 密码找回 - - 个人信息修改 - - 订单取消 - - - ---- -transition: slide-left -layout: section ---- - -# 六、总结与展望 - -核心贡献和未来计划 - - - ---- -transition: slide-up -layout: two-cols-header ---- - -## 核心贡献 - -::left:: - -### 1. 创新方法 - -**Requirements as Code** - -- 需求管理的代码化实践 -- 从文档驱动到代码驱动 -- 业界少见的系统性实践 - -### 2. 工程化实现 - -**自动化追溯系统** - -- JSDoc 标签追溯 -- AST 解析和映射构建 -- 覆盖率报告生成 -- 避免人工遗漏和错误 - -::right:: - -### 3. Monorepo 架构 - -**需求、文档、应用的统一管理** - -- packages/requirements:需求定义 -- apps/docs:文档系统 -- apps/web:主应用 -- 一次定义,多处消费 - -### 4. 类型安全 - -**TypeScript 保证需求定义的一致性** - -- 编译时验证 -- 重构时自动提示 -- IDE 智能提示 - - - ---- -transition: slide-up -layout: center ---- - -## 效果验证 - -### ✅ 需求总数清晰可查 - -- **62 个需求**,**381 个验收场景** -- 按模块组织,按优先级管理 - -### ✅ 覆盖率可量化 - -- **总体需求覆盖率:30.6%** -- **用户模块覆盖率:83.3%** -- 识别未覆盖的高优先级需求 - -### ✅ 需求变更可追溯 - -- **Git 历史记录所有变化** -- git diff 查看需求演变 -- git blame 找到修改者 - -### ✅ 文档自动同步 - -- **apps/docs 动态读取需求数据** -- 需求更新,文档自动同步 -- 避免文档与代码不一致 - - - ---- -transition: slide-up -layout: center ---- - -## 下一步计划 - -### 1. 提升测试覆盖率 - -- **支付模块和 UI/UX 模块**:从 0% 提升至 60% -- **场景覆盖率**:从 7.3% 提升至 30% -- 优先补充 Must Have 需求的测试 - -### 2. 为 E2E 测试添加需求标签 - -- 将 E2E 测试纳入覆盖率统计 -- 实现从单元测试到 E2E 测试的完整追溯 - -### 3. 扩展核心业务流程的 E2E 测试 - -- 完整的订票流程 -- 密码找回、个人信息修改等关键流程 - -### 4. 引入突变测试(Mutation Testing) - -- 使用 Stryker 等工具验证测试质量 -- 识别"假阳性"测试 - - - ---- -layout: center -transition: slide-left ---- - -# 感谢聆听 - -## 附录:关键文件路径 - -### 需求定义 - -- `packages/requirements/src/data/user-module.ts` -- `packages/requirements/src/data/flight-module.ts` -- `packages/requirements/src/data/order-module.ts` -- `packages/requirements/src/data/payment-module.ts` -- `packages/requirements/src/data/ui-ux-module.ts` - -### 追溯系统 - -- `packages/requirements/src/cli/coverage.ts` - CLI 工具入口 -- `packages/requirements/src/utils/traceability/parser.ts` - AST 解析器 -- `packages/requirements/src/utils/traceability/mapper.ts` - 覆盖率映射 -- `packages/requirements/src/utils/traceability/reporter.ts` - 报告生成 - - +- 修改部分文本,避免 GUI 测试无法识别 +- 对齐原版需求文档和 GUI 的要求,当前有测试不通过原因是缺少要求的验证字段以及相应的提示 --- layout: end @@ -1134,7 +788,3 @@ layout: end # Q&A 欢迎提问 - - From 52709498cd52086c558db794754dd154f3a2dbb0 Mon Sep 17 00:00:00 2001 From: uke_mba Date: Mon, 29 Dec 2025 13:14:52 +0800 Subject: [PATCH 10/12] fix(slides): align GUI testing requirements with original documentation and clarify test failures --- apps/slides/final-report.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md index ad69cbb3e..484ebb085 100644 --- a/apps/slides/final-report.md +++ b/apps/slides/final-report.md @@ -780,9 +780,10 @@ layout: center - 修改部分文本,避免 GUI 测试无法识别 - 对齐原版需求文档和 GUI 的要求,当前有测试不通过原因是缺少要求的验证字段以及相应的提示 +- 观察到测试框架似乎存在多次尝试失败后判定为PASS的现象,干扰了测试结果的准确性 --- -layout: end +layout: center --- # Q&A From c620a4f11c0c7ab2e0193c4182181cc574de78d9 Mon Sep 17 00:00:00 2001 From: uke_mba Date: Mon, 29 Dec 2025 13:15:58 +0800 Subject: [PATCH 11/12] fix(slides): update layout and structure for specific requirements display --- apps/slides/final-report.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md index 484ebb085..482170aa2 100644 --- a/apps/slides/final-report.md +++ b/apps/slides/final-report.md @@ -250,13 +250,10 @@ apps/web 是主应用,它的测试文件通过 JSDoc 标签关联需求,覆 --- transition: slide-up -layout: two-cols-header --- ## 2.3 具体需求展示 -::left:: - ### 需求定义 ```typescript @@ -282,7 +279,11 @@ const REQ_F01: Requirement = { }; ``` -::right:: +--- +transition: slide-up +--- + +## 2.3 具体需求展示(续) ### 验收标准定义 From 31dccc5ab8ccb1fc0c52ae75ea3d69d0568fab92 Mon Sep 17 00:00:00 2001 From: uke_mba Date: Mon, 29 Dec 2025 13:29:00 +0800 Subject: [PATCH 12/12] fix(slides): update ticket module status to good and refine migration description --- apps/slides/final-report.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/slides/final-report.md b/apps/slides/final-report.md index 482170aa2..f8c2e04e5 100644 --- a/apps/slides/final-report.md +++ b/apps/slides/final-report.md @@ -645,7 +645,7 @@ layout: two-cols-header | 模块 | 覆盖率 | 状态 | | --------- | ------ | --------- | | 用户模块 | ~80% | ✅ 良好 | -| 机票模块 | ~90% | ⚠️ 待改进 | +| 机票模块 | ~90% | ✅ 良好 | | 订单模块 | ~50% | ⚠️ 待改进 | | 支付模块 | ~60% | ❌ 需补充 | | UI/UX模块 | 0% | ❌ 需补充 | @@ -725,7 +725,7 @@ layout: two-cols-header - 使用 Turborepo 优化构建流程 - 制定 Base Component Pattern 规范 -- 渐进式迁移,避免大爆炸式重构 +- 渐进式迁移,避免一次性重构