课程实验与报告批改

1. 概述

在现有账户和权限基础上,交付教师发布任务、学生提交、教师批改、学生查看结果的闭环。范围与后置能力依据项目宪法 §8 和路线图。

2. 用户故事

US1 课程与实验(P1)

教师创建课程,学生凭课程码加入,教师发布实验,成员查看要求。优先理由:形成可独立运行的课程任务阅读入口。独立测试:两位教师各建课程,两个学生分别加入,确认各自只能读取所属课程的已发布任务。

US2 报告提交(P1)

学生按教师配置保存草稿并正式提交,截止前重交保留版本。优先理由:任务必须有可确认的交付结果。独立测试:预置课程和任务,提交两版报告,重进页面仍可确认版本与时间,重复操作不增加重复提交。

US3 批改与反馈(P1)

教师针对提交版本评分,确认后发布,学生查看本人结果或按退回要求重交。优先理由:教学反馈闭环不可缺少。独立测试:预置两版报告,对其中一版评分发布,验证可见范围、版本绑定和重交后成绩状态。

3. 功能需求

编号 必须满足的行为
FR-001 有创建许可的教师创建课程并成为唯一负责人;仅负责人管理该课,不根据 teacher 名称开放所有课程
FR-002 学生凭有效课程码直接加入开放课程;重复加入不重复生成成员;码失效或课程归档时拒绝加入
FR-003 负责人关闭或重置课程码;旧码立即不能新增成员,既有成员不受影响
FR-004 负责人查看、移除本课程成员;移除不删除既有报告与评分,原成员停止该课页面、请求与下载访问
FR-005 任务可保存草稿、发布和关闭;非负责人看不到未发布内容;存在正式提交后锁定提交要求、评分项和满分
FR-006 负责人从平台支持集合配置提交类型、必交材料、文件数量大小;报告满足所有必交条件才允许正式提交;支持集合见提案
FR-007 任务公开评分项、各项满分与总分;简单任务使用一个总分项;分项满分之和等于总分
FR-008 区分应交时间和停止接收时间;应交后、停止接收前允许提交并标迟交;停止接收后拒绝,显示明确时区
FR-009 学生仅保存本人报告草稿;保存成功与正式提交分开,失败保留当前输入,不虚报成功
FR-010 正式提交生成稳定版本和确认时间;相同提交的重复请求只产生一个结果,响应丢失后可查证
FR-011 截止前允许再次正式提交、保留旧版,以最新提交为待批改版本;开始批改锁定当前版;并发重交与开批只能有一种顺序结果
FR-012 负责人具备查看报告与批改许可后,对明确版本保存分项得分、分项评语和总评;得分在允许范围,未评分与零分区分
FR-013 保存批改草稿不向学生公开;负责人具备查看报告与发布许可后可逐份或一次发布已完成批改,未完成项不得发布;批量结果逐项明确
FR-014 学生只读取本人已发布结果;旧版成绩不自动绑定新版;历史结果明确标识对应版本
FR-015 负责人填写原因与新期限退回重交,允许已截止任务中的该学生重新提交;其他学生期限不变;重交须重新批改
FR-016 已发布成绩修订需明确确认,保留此前结果及其版本对应关系;再次发布前学生仍看到先前已发布结果
FR-017 同时编辑草稿或批改发生冲突时拒绝静默覆盖并提示重新读取;未失效输入可用于人工恢复
FR-018 附件每次读写校验权限和归属;超限/不支持内容拒绝,失败上传不能作为有效材料,文件不执行、不自动解压
FR-019 负责人归档课程后拒绝加入、上传、提交、修改及评分发布;有效成员只读历史内容;首期不删除或恢复归档课程
FR-020 平台管理权不自动获得课程内容权;学生不能改身份、读取他人报告或未公开成绩;成员与账户状态改变后新请求立即复核

4. 验收标准

编号 可观察的验收结果
SC-001 2 位教师各建 1 课,2 位学生分别加入;互换课程、任务、报告和附件地址的越权成功数为 0
SC-002 同一课程码重复加入 2 次只保留 1 份成员关系;重置后旧码失败 1 次,新码成功 1 次
SC-003 保存 1 份任务草稿,学生访问失败;发布后本课学生成功,外课学生失败
SC-004 配置 2 种必交材料,缺任意一种提交均失败;补齐后成功;超数量、大小或不支持类型各拒绝 1 次
SC-005 正式提交同一请求 2 次只有 1 份结果;另交新版保留共 2 版;刷新后内容、时间和版本一致
SC-006 应交前、迟交窗口、停止接收后三种时点分别正常接收、标迟交接收、拒绝;界面说明与结果一致
SC-007 批改草稿学生不可见;发布后本人能看、其他学生不能看;零分与未批改分别正确展示
SC-008 2 个评分项分别给分,显示总分等于两项之和;超范围输入不保存;2 次并发编辑不静默覆盖
SC-009 开始批改后学生重交被拒绝;教师退回后该学生按新期限交第 3 版,旧分不成为第 3 版成绩
SC-010 一次发布含 1 份已完成和 1 份未完成批改,仅已完成项发布;结果明确逐项报告
SC-011 移除学生后,其页面、报告请求、附件下载共 3 条访问全部拒绝;既有提交仍可由负责人查看
SC-012 课程归档后,加入、上传、提交、改任务、发布成绩共 5 类写入均失败;有效成员仍能查看本人历史结果
SC-013 提交响应丢失、保存失败、批改冲突各测 1 次,没有虚假成功或静默丢稿

边界条件

课程码错误统一提示,防止枚举,限制频繁尝试;凭码加入不宣称核验真实学籍。码不得出现在普通业务日志。成员加入和课程归档并发时以有效课程状态为准。

截止边界、上传完成和正式提交分别判断;迟交不自动扣分;返工个别期限不隐式开放整班。已提交后不支持静默换附件、评分标准或正文。

所有正式提交和成绩版本不可由学生删除或覆盖。成员离课、角色改变或禁用后不因旧页面和既有下载地址继续获取材料。

5. 假设

每课一位负责人,报告个人完成;自助注册与既有全局单角色规则保持。首期不支持教师同时以学生身份选课。课程成员关系不代表真实学籍。文件只作为作业材料,源文件与 Notebook 不执行,Office 文件不在线编辑。

6. 关键实体

课程:一次实际授课的空间;成员:账户与课程的有效关系;任务:教师发布的实验要求;报告草稿:尚未交付的本人材料;提交版本:一次正式交付的稳定材料;评分:绑定版本的分项判断与评语;发布结果:学生可读取的已确认成绩。

7. 用户流程

教师创建课程→发放课程码→学生加入→教师配置任务及评分标准并发布→学生保存草稿和提交→教师锁定提交开始批改→保存评分→确认发布→学生查看。需要返工时教师填写原因与期限→学生新交一版→重新批改发布。

8. 交互与数据边界

课程加入输入课程码,返回成员结果或明确拒绝;任务编辑输入要求、允许材料、时间和评分标准;报告保存/提交返回状态、版本与时间;评分输入分项结果和评语,发布返回公开结果。所有操作者身份与可访问范围由服务端核实,不从请求声明采信。

9. 自查与评审状态

本文没有框架、接口路径或字段类型设计;20 条需求与 13 条验收标准已获用户整包确认,实现和组合验收已完成,见完成报告及测试证据。真实批准的选择与提案新增默认边界分开记录,未虚构独立评审人或完成结果。

2026-11-04 用户审阅整包提案后确认开始,并明确要求积极编写测试。规范批准不代表实现或验收完成。

权限澄清(2026-11-04,ADR-008):批改、发布等返回报告视图的接口同时遵守报告查看许可,防止通过写入响应绕过读取边界。