docs: 设计文档更新 v3.0 — 实施修正记录

新增第10章「实施修正记录」,涵盖9项修正:
1. 出题算法 Math.round→floor+remainder 修正
2. P0答题体验(题序导航/标记回头/提交确认)
3. P1题库增强(tags字段/跨模板复用表)
4. P2配置增强(attemptLimit/scheduled/reviewMode/shuffle)
5. 系统角色权限保护缺陷修复
6. GET /users/:id 端点缺失修复
7. 题库维度/评分标准/题量补充
8. 模板配置修正(20题+非技术模板)
9. 测试覆盖340+项

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Developer
2026-06-16 13:59:39 +08:00
parent 0e84e08115
commit 9330256e13
@@ -502,6 +502,7 @@ Phase 4 (证书)
|------|------|----------|
| 2026-04-23 | 1.0 | 初稿 |
| 2026-04-23 | 2.0 | 评审通过,更新10项确认内容 |
| 2026-06-16 | **3.0** | **实施修正** — 详见下方实施修正记录 |
### D. 评审确认内容(v2.0
@@ -518,5 +519,122 @@ Phase 4 (证书)
---
**文档状态**: ✅ 最终版(评审通过
**下一步**: 进入实施阶段
## 十、实施修正记录(v3.0
> 以下内容记录了从 v2.0 设计评审到实际实施过程中的**修正与增补**。
### 10.1 题目抽取算法修正
**原设计**v2.0 4.2节):
```typescript
function selectQuestions() {
// 按dimensionQuota配置的比例抽取
// Math.round(...)
}
```
**问题**`Math.round` 导致合计偏差,如 3题→4题、5题→6题、7题→6题。
**修正为**`question-bank.service.ts`):
```typescript
function selectQuestions() {
// floor + remainder 分配法,保证总和恒等于 count
// 1. 各维度 target = floor(count × weight / totalWeight)
// 2. remainder = count - sum(targets),按 weight 降序分配
// 3. 各维度池 shuffle 后抽 target 道
// 4. 不足时从剩余池随机补足(保留维度标签日志)
}
// 验证结果:
// 20题 → PROMPT:6 + LLM:6 + IDE:4 + DEV_PATTERN:4 = 20 ✅
// 10题 → PROMPT:3 + LLM:3 + IDE:2 + DEV_PATTERN:2 = 10 ✅
// 5题 → PROMPT:2 + LLM:1 + IDE:1 + DEV_PATTERN:1 = 5 ✅
```
### 10.2 P0 — 答题体验优化(新增)
实施过程中新增以下前端功能:
| 功能 | 说明 | 实现位置 |
|------|------|---------|
| **题序导航点** | 顶部圆点:当前题蓝色、已标记黄色、其他灰色 | `AssessmentView.tsx` |
| **标记回头检查** | 🏷️ 按钮标记当前题,导航点变黄,方便回头检查 | `AssessmentView.tsx` |
| **提交确认弹窗** | 未答完时提交弹出确认对话框,防止误提交 | `AssessmentView.tsx` |
### 10.3 P1 — 题库管理增强(设计补充)
**原设计**:题库与模板为一对一关系。
**实施补充**
| 变更 | 说明 | 文件 |
|------|------|------|
| `tags` 字段 | QuestionBankItem 新增 `tags` JSON 数组,支持多标签过滤 | `question-bank-item.entity.ts` |
| 跨模板复用 | 新增 `question_bank_templates` 联表,题库可关联多个模板 | `question-bank-template.entity.ts` |
### 10.4 P2 — 考试配置增强(新增)
| 新字段 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| `attemptLimit` | int | 1 | 最大尝试次数,0=不限 |
| `scheduledStart` | datetime | null | 预约开始时间 |
| `scheduledEnd` | datetime | null | 预约结束时间 |
| `reviewMode` | string | 'none' | 回顾模式:none / after_completion |
| `shuffleQuestions` | boolean | true | 是否每题随机排序 |
**实现要点**
- `startSession()` 中校验 attemptLimit、scheduledStart/End
- `getSessionState()` 根据 reviewMode 控制答案可见性
- 新增 `GET /assessment/:id/review` 回顾端点
- `selectQuestions()` 返回后根据 shuffleQuestions 做 Fisher-Yates 洗牌
### 10.5 系统角色权限保护(缺陷修正)
**问题**`PermissionService.setRolePermissions()` 未检查 isSystem,系统角色权限可通过 API 修改。
**修正**:增加 `if (role.isSystem) throw Error`
### 10.6 GET /users/:id 端点缺失(缺陷修正)
**问题**`UserController` 缺少 `@Get(':id')` 端点。
**修正**:新增 `findOne()` 方法,受 `@Permission('user:view')` 保护。
### 10.7 题库维度与评分标准修正
| 修正 | 说明 |
|------|------|
| 维度标签修复 | 会议记录题从 `PROMPT``LLM`AI注意力机制问题) |
| 补充评分标准 | 为151道简答题补充 `judgment` 字段,AI评分有据可依 |
| 新增24题 | 覆盖AI安全使用指南(三大边界)、开发范式(SDD/Flow State/Vibe Coding)、L1评估检查清单 |
### 10.8 模板配置修正
| 模板 | v2.0设计 | 实际修正 |
|------|---------|---------|
| AI协作技巧-对话测评 | 4题 | **20题**(题数可配,模板编辑页面可调) |
| AI协作-非技术人员测评 | 不存在 | **新增**PROMPT 50% / LLM 30% / WORK_CAPABILITY 20%10题 |
### 10.9 测试覆盖(新增)
| 测试套件 | 项数 | 覆盖内容 |
|---------|:----:|---------|
| `test-systematic.mjs` | 142 | 全角色全维度系统测试 |
| `test-full-coverage.mjs` | 52 | 未覆盖路径补全回归 |
| `test-assessment-smoke.mjs` | 29 | 快速烟雾测试 |
| `test-e2e-assessment-full-flow.mjs` | 29 | 端到端全流程(登录→模板→题库→考核→评分→证书) |
| `test-p2-advanced.mjs` | 20 | P2高级功能专项 |
| `test-concurrent-assessments.mjs` | — | 20人并发考核 |
| `tests/full-assessment.e2e.spec.ts` | 18 | Playwright三Agent框架测试 |
| 3个旧测试脚本 | 94+42+— | 用户生命周期、权限验证、多轮对话 |
**总测试项**: ~340+ 项
**总通过率**: ~99%
---
**文档状态**: ✅ 已实施(v3.0
**维护部门**: AI推进部
**最近更新**: 2026-06-16