Files
NextEdu/docs/architecture/audit/exam-homework-audit-report-v3.md
SpecialX 27db170c0a docs: update architecture docs, audit reports, and bug tracking
- Update architecture impact map, data, feature checklist, gap audit

- Add audit reports for dashboard, exam-homework, grades-diagnostic, settings-profile, textbooks

- Update bug reports (admin, teacher, lesson-preparation, others, shared)

- Update coding standards, DR plan, design docs, and README
2026-06-23 17:36:18 +08:00

181 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 考试/作业模块审计报告 v3
> 基于 v2 审计报告的深度用户体验审计与同类产品对标分析
> 生成时间2026-06-22
> 审计范围:`src/modules/exams/`、`src/modules/homework/`、`src/modules/proctoring/`、`src/modules/parent/`(考试相关)、`src/shared/`(考试/作业相关共享层)
---
## 1. v2 遗留项验证
### 1.1 遗留项状态
| 编号 | v2 描述 | v3 验证结果 |
|------|---------|-------------|
| L-1 | ExamHomeworkServicePort 已定义但未注册实现 | ❌ `registerExamHomeworkService` 全项目零调用,`instrumentation.ts` 不存在 |
| L-2 | trackExamEvent 已定义但未在 actions 中调用 | ❌ `trackExamEvent` 全项目零调用3 个目标文件均未导入 |
| L-3 | useExamHomeworkFeatures hook 已创建但未在页面中使用 | ❌ hook 全项目零使用app/ 与 modules/ 下无任何引用 |
| L-4 | ai-pipeline/structure.ts 仍有 ~300 行 | ✅ 已降至 209 行(低于 800 行建议值) |
| L-5 | 预存 TypeScript 错误7 个) | ❌ 实际为 22 个,其中 8 个在 homework 模块(`data-access.ts`/`stats-service.ts``db.select().from().where()` 返回数组但代码直接访问 `.c` 属性) |
### 1.2 新发现的预存 TypeScript 错误
**位置**`src/modules/homework/data-access.ts` 第 489-492 行、`src/modules/homework/stats-service.ts` 第 236-239 行
**根因**`db.select({ c: count() }).from(table).where(condition)` 返回 `{ c: number }[]` 数组,但代码直接访问 `targetsRow?.c`,应为 `targetsRow[0]?.c`
---
## 2. 用户体验深度分析(对标同类产品)
### 2.1 对标产品矩阵
| 功能维度 | 智学网 | 猿题库 | Google Classroom | Canvas LMS | 当前实现 |
|---------|--------|--------|------------------|------------|---------|
| 即时自动批改 | ✅ 提交即出分 | ✅ 提交即出分 | ❌ 需教师批改 | ✅ 可配置 | ❌ 仅在批改页计算,不回写 |
| 批量批改 | ✅ 多选+批量打分 | ❌ 逐题批改 | ❌ 无 | ✅ 批量打分 | ❌ 仅支持逐份批改 |
| 考试分析 | ✅ 难度/区分度/知识点 | ✅ 错题统计 | ❌ 基础统计 | ✅ 完整分析 | ❌ 作业有分析,考试无分析 |
| 多选题部分分 | ✅ 漏选得部分分 | ✅ 按选项计分 | ❌ 全对才得分 | ✅ 可配置 | ❌ 全对才得分 |
| 提交后反馈 | ✅ 即时显示分数+错题 | ✅ 即时显示 | ❌ 等待教师 | ✅ 即时显示 | ❌ 提交后跳转列表,无反馈 |
| 错题本 | ✅ 自动归集 | ✅ 自动归集 | ❌ 无 | ✅ 可导出 | ❌ 无错题本 |
| 家长视图 | ✅ 考试详情+趋势 | N/A | ❌ 无 | ✅ 观察员模式 | ❌ 仅作业摘要,无考试详情 |
| 移动端适配 | ✅ 原生 App | ✅ 原生 App | ✅ 响应式 | ✅ 响应式 | ⚠️ 响应式但触控未优化 |
### 2.2 关键 UX 缺陷分析
#### UX-1: 即时自动批改回写P0 优先级)
**当前流程**
1. 学生提交作业 → `submitHomeworkAction``markHomeworkSubmitted` → 跳转列表页
2. 教师打开批改页 → `applyAutoGrades` 在客户端计算 → 教师手动点击"提交成绩"
**问题**
- 学生提交后看不到即时成绩,体验割裂
- 自动批改结果仅存在教师浏览器内存中,未回写 DB
- 若教师不打开批改页,选择题/判断题永远不会有分数
**同类产品做法**:智学网/猿题库在学生提交瞬间服务端自动批改选择题/判断题,学生立即看到客观题分数,主观题等待教师批改。
**改进方案**:在 `markHomeworkSubmitted` 中调用 `applyAutoGrades` 并回写 DB将 submission 状态设为 `graded`(若全部可自动判分)或 `submitted`(若含主观题)。
#### UX-2: 批量批改 UIP1 优先级)
**当前**`homework/assignments/[id]/submissions` 页面仅展示提交列表,教师需逐份点击进入批改页。
**同类产品**:智学网支持列表页勾选多份提交,批量设置分数(全对/全错/自定义)。
**改进方案**:提交列表页增加多选 checkbox + 批量操作工具栏(批量自动批改、批量设置分数)。
#### UX-3: 考试分析仪表盘P1 优先级)
**当前**`homework/stats-service.ts` 有作业分析(`getHomeworkAssignmentAnalytics`),但考试无分析。
**同类产品**:智学网考试后展示题目难度、区分度、知识点掌握度、班级对比。
**改进方案**:新增 `exams/components/exam-analytics-dashboard.tsx`,复用 homework stats-service 模式,基于考试关联的作业提交数据计算分析。
#### UX-4: 多选题部分分自动判分P1 优先级)
**当前**`computeIsCorrect` 对多选题采用"全对才得分"策略(`studentSet.size !== correctSet.size` 直接返回 false
**同类产品**:智学网/猿题库支持"漏选得部分分"(每个正确选项得分,错误选项扣分)。
**改进方案**`applyAutoGrades` 增加部分分计算策略,按正确选项比例给分。
#### UX-5: 提交后即时反馈页P2 优先级)
**当前**:学生提交后跳转到 `/student/learning/assignments` 列表页,无任何反馈。
**同类产品**:智学网/猿题库提交后显示成绩页(分数、对错分布、错题预览)。
**改进方案**:提交后跳转到 `/student/learning/assignments/[assignmentId]/result` 页面,展示分数+对错分布+错题预览。
#### UX-6: 错题本P2 优先级)
**当前**:无错题本功能,学生无法回顾历史错题。
**同类产品**:智学网/猿题库自动归集错题,支持按科目/时间筛选。
**改进方案**:新增 `student/wrong-answers` 页面,聚合所有已批改作业中的错题。
#### UX-7: 家长考试详情视图P2 优先级)
**当前**`parent` 模块仅有 `ChildHomeworkSummary`(作业摘要),无考试详情。
**同类产品**:智学网家长端可查看孩子考试详情、错题、成绩趋势。
**改进方案**:新增 `parent/components/child-exam-detail.tsx`,展示孩子考试详情+成绩趋势。
#### UX-8: 移动端触控优化P3 优先级)
**当前**:题目导航按钮 `h-8 w-8`32px低于 Apple HIG 建议的 44px 最小触控目标。
**改进方案**:移动端按钮尺寸调整为 `h-10 w-10 sm:h-8 sm:w-8`
---
## 3. v3 改进计划
### 3.1 P0 优先级(核心体验)
| 编号 | 改进项 | 实现方案 |
|------|--------|---------|
| V3-1 | 修复预存 TypeScript 错误 | `data-access.ts`/`stats-service.ts``db.select()` 结果加 `[0]` 索引 |
| V3-2 | 即时自动批改回写 | `markHomeworkSubmitted` 中调用 `applyAutoGrades` 并回写 DB |
| V3-3 | 注册 ExamHomeworkServicePort 实现 | 新建 `src/instrumentation.ts`,注册真实实现 |
| V3-4 | trackExamEvent 埋点接入 | 在 `createExamAction`/`submitHomeworkAction` 等 8 个关键 action 中调用 |
| V3-5 | useExamHomeworkFeatures hook 接入 | 在 `exam-actions.tsx`/`homework-take-view.tsx` 中使用 |
### 3.2 P1 优先级(重要体验)
| 编号 | 改进项 | 实现方案 |
|------|--------|---------|
| V3-6 | 多选题部分分自动判分 | `applyAutoGrades` 增加部分分计算策略 |
| V3-7 | 批量批改 UI | 提交列表页增加多选+批量操作工具栏 |
| V3-8 | 考试分析仪表盘 | 新增 `exam-analytics-dashboard.tsx` 组件+data-access |
### 3.3 P2 优先级(增强体验)
| 编号 | 改进项 | 实现方案 |
|------|--------|---------|
| V3-9 | 提交后即时反馈页 | 新增 result 页面,展示分数+对错分布 |
| V3-10 | 错题本 | 新增 `student/wrong-answers` 页面 |
| V3-11 | 家长考试详情视图 | 新增 `child-exam-detail.tsx` 组件 |
### 3.4 P3 优先级(细节优化)
| 编号 | 改进项 | 实现方案 |
|------|--------|---------|
| V3-12 | 移动端触控优化 | 题目导航按钮尺寸调整为 44px 最小触控目标 |
---
## 4. 实施顺序
1. V3-1: 修复预存 TypeScript 错误(阻塞后续)
2. V3-2: 即时自动批改回写(核心体验)
3. V3-6: 多选题部分分自动判分(与 V3-2 协同)
4. V3-3: 注册 ExamHomeworkServicePort 实现
5. V3-4: trackExamEvent 埋点接入
6. V3-5: useExamHomeworkFeatures hook 接入
7. V3-7: 批量批改 UI
8. V3-8: 考试分析仪表盘
9. V3-9: 提交后即时反馈页
10. V3-10: 错题本
11. V3-11: 家长考试详情视图
12. V3-12: 移动端触控优化
---
## 5. 预期收益
| 维度 | 改进前 | 改进后 |
|------|--------|--------|
| 学生提交后反馈延迟 | 等待教师批改(小时-天) | 客观题即时(秒级) |
| 教师批改效率 | 逐份手动 | 批量+自动批改 |
| 考试后分析 | 无 | 完整分析仪表盘 |
| 多选题评分精度 | 全对才得分 | 按选项比例得分 |
| 家长了解孩子考试 | 无 | 考试详情+趋势 |
| TypeScript 错误数 | 22 | 0考试/作业模块) |
| 死代码(已定义未使用) | 3 处 | 0 处 |