选题说明——编译课程平台
编译课程是计算机学院、软件学院的核心专业课,每年有着400+的学生用户量。现有的编译课程平台使用judge平台开发,在UI布局、实验指导书、评测反馈、评测功能、讨论区设计等方面存在问题。
我们希望设计一个集成学生端和管理端的编译课程平台。
Need 需求
学生用户
学生用户在该产品中占比最高,是课程的主要参与者,主要活动为进行课下学习、讨论交流、完成作业和期中期末考试等。具体需求分析如下:
接收通知
- 学生用户应当可以接收老师或助教发布的通知,涉及作业题面修改、课程进度公告、考试等,类似下图。
查看指导书
- 学生用户需要查看实验教程,教程需要有检索功能便于定位,类似下图。
- 学生用户可能需要一个GPT辅助阅读指导书,进行对话式辅助学习、快速答疑等。
查看和提交作业
-
学生用户需要查看每次作业的要求和截至时间。
-
学生用户可以选择完成不同难度的实验,分别对应三种目标代码。学生用户需要选择自己提交的目标代码版本(llvm、mips或者pcode)
查看评测反馈
-
学生用户需要查看提交作业的得分情况和具体的反馈信息,类似下图。
-
对开放测试的的评测结果,学生用户需要对比自己答案和正确答案,类似下图。
性能排序(针对最后一次作业)
编译课程在实验的最后阶段有需要性能排序的竞速作业。
学生用户的需求为:
-
查看最近一次提交的作业性能在总榜单中的情况,分析优化空间。如下图。
-
查看最近历次提交在各个测试点中的性能变化情况,分析优化效果。如下图。(由于需要看对比,学生需要确定自己当前提交的名称)
讨论区
- 学生用户可以在讨论区发帖、查看已有帖子、将帖子按tag分组筛选等,类似下图。
管理员
本部分主要阐述助教/教师用户(下文统称为管理员)的需求,由于学生用户和管理员共用一套前端,管理员用户应当能看到学生看到的内容,并额外拥有删改权限。
发布通知
- 管理员需要发布通知,涉及作业题面修改、课程进度公告、考试等。
用户管理
- 管理员需要批量导入学生信息
- 需要课程管理功能,区分不同年份的课程,以便平台持续使用
教程管理
- 管理员需要新增、修改、删除、查看教程
作业/考试管理
作业与考试需求一致不做区分,统称为作业。管理员需求如下:
- 增删改作业,包括增删改题面、测验题目、评测点、起始截止时间
- 应对特殊情况,对特定的学生用户修改起始截止时间
- 修改评测分数,文档类作业评测结果默认100,其他评测结果按公式计算,管理员有权修改评测得分。
- 对于竞速作业,管理员应当有权设置排序规则
统计数据
- 管理员需要查看学生用户的作业进度,作业情况,成绩分布
- 支持画图等统计方法直观展示,并支持导出
评测管理(成绩管理)
- 管理员用户需要查看学生用户的提交记录,若出现评测问题可以及时溯源,类似下图。
讨论区
- 管理员需要对讨论区的内容进行审核与管理
- 管理员需要将指定帖子加精或加助教认证
- 管理员需要置顶某些重要帖子
评测功能
- 平台需要对学生用户的提交进行评测并给予反馈
- 需要较高的评测效率,需要较强的承压能力
Approach 方法
通知
一个可以分类筛选不同通知的版块,学生有查看权限,管理员有查看和修改权限
指导书
具有章节索引和目录,以及搜索功能。使用markdown编写,前端渲染。
右侧可以添加训练好的编译bot,使用ChatGPT API,提供交流对话的方式学习,同时对教程中不清晰之处进行简要快速的答疑。
作业
一个显眼的选择框来确认提交语言为mips/llvm/pcode,避免学生用户错交。提交界面UI清晰。
页面设置导航栏,可以在介绍、测验、评测间切换查看,类似下图。
作业反馈
评测首先应当反映评测分数构成、评分方法与原则、晚交扣分机制、提交的文档也应当将分数进行反馈。
提供开放测试点的编译命令,测试结果,标准答案,学生答案的下载。减少前端评测结果比对显示量,防止浏览器卡死
竞速作业
提供两个视图:
-
第一个是所有用户最新提交排名,用于和其他人进行逐case对比(不给出具体testfile的rank, 只提供排序)
-
第二个显示该用户近5次提交testfile记录,全部的提供下载为csv文件(由于需要看对比,学生需要设置自己每次提交的名称)
讨论区
学生端管理端看到的一样,权限不同。
支持讨论区加精、发帖次数统计、看到往届讨论区、置顶讨论区(参考oo),支持讨论区分类、搜索功能
成绩分析
普通用户可以查看自己历次成绩并统计绘图。
管理员用户可以统计所有/指定学生成绩,并导出为csv等常见表格格式。管理员用户还应当可以查看题目通过率、测试点通过率等。
评测及管理
我们希望通过Go实现高并发,并使用docker容器保证安全性,最终实现一个分布式可扩容的评测机。
Benefit 好处
管理员用户
- 管理:对各部分的管理(通知、讨论区、作业题目等)更合直觉、更容易统计使用不同开发语言、使用mips/llvm/pcode的人数比例
- 统计:学生成绩、测试通过率可以绘图直观统计
- 迭代:提供了迭代学生届数的功能,保存了多届学生的讨论区及成绩数据
学生用户
- 通知:通知形式更加直观且便于分类查看
- 指导书:比起pdf指导书,网页版提供了更好的检索定位功能;提供了GPT对话交流,指导书阅读更方便。
- 讨论区:使用md编辑器,比富文本编辑器更加方便
- 作业:deadline更明显、模块划分更清晰、可以直接从作业进入对应的讨论区更方便讨论,更容易选择自己的使用语言及中间代码
- 评测:评测速度更快
- 评测结果反馈:评测结果展示更加合理清晰
Competitors 竞争
唯一竞品就是编译judge平台,在上述需求场景下都有较大问题,会被我们的平台爆杀。以下以对比的形式给出judge平台和本平台在学生用户需求场景下的实现对比。
接收通知
-
judge
无通知功能,依靠微信课程群通知 -
本平台
消息可以按tag筛选、折叠、分页
查看指导书
-
judge
指导书只能以pdf方式下载,下载位置很刁钻。同时pdf不易定位检索。
-
本平台
指导书提供pdf下载与网页浏览两种方式,网页浏览可以检索定位,同时有GPT辅助学习、快速答疑。
查看和提交作业
-
judge
题面和评测信息混杂,题干要求不集中,阅读体验差
-
本平台
作业题面、测验、评测分栏展示,功能解耦
查看评测反馈
-
judge
评测界面反馈较长、不直观,体验较差
-
本平台
清晰看到评测得分、时间、各个评测点的正确性,点开还能进一步和正确结果进行比较。
性能排序
-
judge
besttestfile无意义
-
本平台
删除judge无意义的besttestfilex、新增了个人历次提交的性能变化视图
讨论区
- judge
没有检索分类分页功能、没有加精认证等功能。UI布局不好看。发帖只能使用富文本编辑器。
其优点在于可以查看到往年的讨论帖。
- 本平台
可以从每次作业或者左侧sidebar进入讨论区,讨论区提供不同tag供筛选,助教可以加精认证。
评测功能
- judge
现有的judge平台存在以下问题:
- 服务器资源,由于北航有不少课程都选择judge平台,所以在进行大量评测的时候可能会导致平台崩溃,例如我们大一数据结构考试的时候遇到大规模查重,导致课程平台崩溃,2019级学生进行期中考试的时候有过一次提交需要等大量时间的情况
- llvm版本不对。大部分同学在完成llvm生成时使用的都是llvm10以上的版本,而评测机的版本似乎是llvm6.0,导致有很多本地能过但是交上去评测不过的问题
- 评测文件名的问题。现有的评测机批量上传测试点的时候只能从1开始,且中间不能有隔断的测试点
- java和cpp的识别有问题,当cpp工程多压缩了一层文件夹之后会被识别错误 - 本平台
我们在解决以上问题的基础上,通过Go实现高并发进行提速,并使用docker容器保证安全性,最终实现一个分布式可扩容的评测机。
Delivery
可以通过部分20级学生体验功能进行对比、编译课程老师体验功能、开放部分21级学生提前感受课程平台等。预期规模可以达到100-200人。