您现在的位置是:首页 >其他 >Compilify Alpha阶段项目展示网站首页其他

Compilify Alpha阶段项目展示

人杰De灵 2024-06-14 17:17:09
简介Compilify Alpha阶段项目展示

本文为Compilify Alpha阶段项目展示文档。

项目与团队亮点

成员与分工

合作分工表

姓名任务
刘俊辰PM、用户课程API及后端开发
温佳昊评测API及后端开发
龚悦前端开发(课程公告、评测提交、课程资源、个人中心)和美工
何天然前端开发(架构、鉴权机制、api封装、CI/CD、Dockerfile、课程管理、作业列表、MR terminator)、前后端对接、评测文档
俞逸洋前端开发(登录、作业题面、作业小测、用户管理、评测列表)和美工
王鹏宇作业课程资源API及后端开发
申浩佳服务部署、系统架构设计、运维

项目管理

代码管理
在这里插入图片描述
代码使用极狐进行管理,前后端和测评机分别创建仓库管理。

文档管理
在这里插入图片描述

文档使用Notion进行管理,由PM分配每次博客文档作业的各个部分,团队共同完成文档编写。

API管理

在这里插入图片描述
API使用了Apifox进行管理,前端后端确定需求后由后端人员把编写的API放到Apifox上供前端使用。API中规定了每个API的url、请求参数、参数体、正常响应、异常响应、返回结构体等行为。

软件工程质量

代码风格约定

大体使用了软工课程组之前给出的参考规范,后端使用golang常用的代码规范,前端使用eslint+prettier自动化检查代码风格
在这里插入图片描述

团队新人加入

  • 如果团队有新成员加入,则可以通过Apifox查看文档、notion查看开发说明、文档等了解项目内容
  • 项目的文档清晰,代码风格良好,易于新人继续上手开发。另外由于采用了docker容器化技术以及CI/CD,项目的打包部署不用手动配置环境

单元测试

共完成了54个单元测试,覆盖率如下。部分覆盖率无法进一步提升是由于对数据库异常进行一定的检测, 这种异常难以在单元测试中完成触发。
在这里插入图片描述

CI/CD

项目的前后端、评测机均采用CI/CD自动部署,极大的减少了部署所需要的时间,并且能够通过CI/CD的执行发现项目的问题
在这里插入图片描述
在这里插入图片描述

经验教训

  • 要重视鉴权和安全问题。由于团队中没有对网安相对较熟悉的同学,Alpha阶段出现的比较严重的问题均为安全问题
  • 线下对接能够增加效率,在开发的关键阶段应该增加线下对接的次数,通常能够较快的发现问题并且当场解决
  • 要多和用户交流,明确需求,避免在开发的过程当中重构
  • Beta阶段主要完成的任务有重构评测机架构,完成讨论区、教程、成绩统计等功能

典型用户及场景

课程教师

数量约5-10位

用户S 老师
年龄~40岁
职业编译技术 课程教师
需求分析每次作业同学们的完成情况、收取实验报告、发布课程通知
期望数据尽量直观,操作便捷

课程助教

数量约10-20位

用户H 助教
年龄~21岁
职业学生,编译技术助教
需求批量导入学生信息、发布或配置作业要求和教程、查看同学们的作业提交情况,给某些特殊情况的同学配置延时、给实验报告打分、解答讨论区帖子的问题,重要或优质帖子加精
期望便于管理,操作便捷

课程学生

数量约400-450位,有计算机学院、软件学院、高等理工学院的学生

用户A 同学B 同学
年龄~20 岁~ 20 岁
职业学生,选修编译技术课程学生,选修编译技术课程
需求方便查看各次作业要求细节、想挑战难度大的 MIPS 类别作业、将学习心得发布到讨论区、查看自己历次提交到性能数据、查看自己在整体性能排行榜中的位置,进一步优化做作业时遇到问题,查看讨论区的解答帖子、讨论区还没有类似问题,进行发帖提问、想先尝试较为简单的 PCODE 类别作业
期望作业提交评测时能快速反馈、能清晰看到自己已经获得的分数、可以清晰看到性能测试中历次提交的性能特点、希望提交作业时能提交到正确的位置,不希望错误提交到其他类别影响成绩计算在讨论区方便分类查找已有帖子、提问能够尽快被解决、教程尽量清晰易懂、有辅助评测辅助 debug

典型场景

典型场景—课程公告

  • S 老师在课程平台上发布了新的课程公告
  • A 同学从首页公告栏处得知了新作业和DDL

典型场景—查看作业

  • B 同学打开作业要求页面阅读
  • H 助教修改作业要求

典型场景—小测

  • H 助教为作业设置了小测题目
  • B 同学做完小测,页面显示小测结果和正确答案

典型场景—提交评测

  • B 同学尝试提交
  • 平台提示他选择作业类型
  • 评测机很快给出评判结果
  • 平台显示本次作业的有效成绩和折算成绩
  • B 同学下载标准输出和学生输出对比

典型场景—课程资料

  • H 助教上传了往年的优秀报告
  • A 同学进行下载

典型场景—个人中心

  • B 同学切换课程
  • B 同学给自己挑选了新头像
  • B 同学修改默认密码为自己的常用密码
  • B 同学退出登录

典型场景—管理

  • 用户管理
    • H 助教检索用户
    • H 助教编辑修正A同学的信息
    • H 助教批量导入新用户
    • H 助教调整表格的分页
    • H 助教单独添加了B同学的信息
  • 课程管理
    • H 助教新增**“**2022编译技术”课程
    • H 助教修改课程名为”2023编译技术“
    • H 助教把21届的学生批量添加到课程
    • H 助教按列模糊搜索功能检查学生信息
  • 提交记录
    • H 助教表通过提交记录表的模糊搜索功能找到 B 同学的历史提交
    • H 助教下载了他的历史提交文件

项目发布功能

现行发布版本对学生用户提供了一系列基本功能:

  • 个人相关
    • 登录登出(注册方式见下方安装使用方法)
    • 修改邮箱密码(其他信息不提供自由编辑,需联系助教/管理员修改)
  • 公告相关
    • 查看课程公告
  • 资料相关
    • 查看下载课程资料
  • 作业相关
    • 查看作业介绍、测验、评测
    • 提交小测、查看小测答案
    • 提交评测、获取评测结果、下载提交、查看详情

在学生用户的基础上,对管理员用户进一步提供了用于管理的基本功能:

  • 用户管理
    • 添加删除用户
    • 修改用户信息、重置用户密码为默认值
  • 课程管理
    • 添加修改删除课程
    • 添加删除课程开放用户
  • 公告管理
    • 修改删除课程公告
  • 资源管理
    • 添加更新删除资源
  • 作业管理
    • 添加删除作业、修改作业题面
    • 创建更新删除小测
    • 延长作业时间
    • 评测管理
      • 添加更新删除评测
      • 添加更新删除数据点
      • 上传测试点文件

杀手级功能

评测

CompilifyJudge
评测界面美丽,利用quasar组件库实现页面,与其他6系课程平台风格更贴近页面布局不合理,信息密度过大
反馈信息较全面,包含评测总结果、每个评测点的结果、标准输出、标准错误、答案等部分反馈信息不明确,无下载功能等
响应时间快速加载,不会卡顿响应慢,卡顿
评测速度快,一次编译,再利用进程池并发运行用户程序单次评测时间长
评测环境安全,使用docker,隔离运行时目录和网络不确定是否断网

发布与活跃用户

项目推广

我们选择以6系20级和21级水群作为媒介,由PM着笔、共同修改得到宣发文案,于5.3中午在两个微信群中发布。在版本发布12小时内,有57位同学通过填写学号获得了账号。现平台共有8个管理员账号和62个学生账号,共70位用户。
在这里插入图片描述
在这里插入图片描述

活跃用户量

在日活用户量方面,达到alpha阶段预期数量。

截止5月4日14:32,已经有49人完成登录,API访问1852次,提交评测39次

截止5月4日20:28,Compilify-alpha用户交流群已有88人(其中7人为团队成员)
在这里插入图片描述

用户反馈与评价

用户功能反馈

来源建议描述是否采纳
微信聊天移动端适配将考虑在beta阶段实现
微信聊天管理端表格表头筛选的存储将考虑在beta阶段实现

用户bug反馈

在bug上的反馈,主要集中在平台安全相关问题以及用户权限问题上。

来源bug描述是否修复
微信聊天minio 信息泄露已修复
微信聊天改密码时token不失效已修复
微信聊天关于部分按钮在没有相关数据情况下的可见性问题已修复
微信聊天用户可以通过修改url访问不包含该用户的课程已修复
微信聊天用运行在root权限下且没有密码的redis提权,可以进入容器修改源码已修复
微信聊天db中密码明文存储已修复
alpha阶段用户微信群修改密码后无法登陆已修复

展示Demo

Compilify Demo

项目与团队总结

本部分是对亮点部分补充说明

成员与分工

姓名任务个人博客
刘俊辰PM、用户课程API及后端开发https://blog.csdn.net/dawning_77?type=blog
温佳昊评测API及后端开发
龚悦前端开发(课程公告、作业评测提交、课程资源、个人中心)和美工https://arthuring.github.io/
何天然前端开发(架构、鉴权机制、api封装、CI/CD、Dockerfile、课程管理、作业列表、MR terminator)、前后端对接、评测文档https://blog.csdn.net/weixin_51130923?type=blog
俞逸洋前端开发(登录、作业题面、作业小测、用户管理、评测列表展示)和美工https://blog.csdn.net/emilyu2003?type=bbs
王鹏宇作业课程资源API及后端开发https://blog.csdn.net/wpydexiaoheiwu?type=bbs
申浩佳后端开发(架构、鉴权机制、api封装、CI/CD、Dockerfile、MR terminator)服务部署、系统架构设计、运维https://blog.csdn.net/shliba?type=blog

项目管理

项目开发使用jihulab进行管理,项目****compilify-backendcompilify-frontendcompilify-judger**分别是前后端和测评机的代码仓库。

项目进度使用"issues"完成每日任务,每晚由PM统计各成员完成的任务,在各子项目中创建 Issue 作为底层,实现项目进度的动态化管理。

项目使用Notion平台进行团队的文档管理、模块化结构等任务分配。在Notion中,任务直接分配到个人,每个人需要完成自己相应的内容。

项目合作基本原则:由大家协商共同决定是否将需求纳入实现范围

分工协作

根据编译平台开发的特性,我们使用前后端分离+测评机的模式,根据技术栈等综合因素的考量,将开发人员分工进行,实现项目效益最大化。

与此同时,项目的开发过程中涉及到需要无法均分的任务,对于这些特异化分工,我们选择交给指定的成员进行处理。

例如我们有灵活的开发补位者,具有全栈的就开发能力,能沟通解决前后端开发和对接遇到的难题,解决不协调的问题。

例如我们有开发工具的维护者,其了解DevOps 的最佳实践和CI/CD等自动化工具,主持架构设计,完成具体的部署问题。

沟通和对接

项目使用微信群+腾讯会议+线下进行项目进度的对接,其中遇到的问题通过Notion保留。沟通对接的方面主要有如下方面

  1. 前后端开发的对接
  2. 开发和部署的对接
  3. 需求方和项目的对接
  4. 迭代开发的对接

平衡 时间/质量/资源

我们尽量做到将任务分配到个人,这样做能将工作具体落实,尽量做到有条不紊。与此同时,PM分配任务时会评估任务难度在可控范围内,这样也能保证每个同学能够很好的完成任务。由于开发时间有限,我们以需求为导向进行取舍,将更多的精力用于保证 Alpha 阶段目标。

实际进展(燃尽图)
在这里插入图片描述
贡献分配表

名字团队贡献分本职工作完成情况其他贡献
刘俊辰49后端+单元测试代码3019行,完成部分博客完成宣发文案
温佳昊50后端+评测机代码2100行,完成部分博客评测机架构设计,docker配置
龚悦50前端代码1896行,完成部分博客
王鹏宇49后端+单元测试代码3281行,完成部分博客
俞逸洋50前端代码2173行,完成部分博客
何天然51前端代码3854行(包含架构代码),评测脚本325行,完成部分博客
申浩佳51后端+评测机代码1700行,完成部分博客部署了minio、redis等环境,运维后端服务

典型用户场景

典型场景 — 普通作业

新一周的编译课程开始了,同时也到了新一次作业的开启时间。S 老师在课程平台上**发布了新的课程公告**,通知大家新一次作业的起止时间。B 同学很快从首页公告栏处得知了新作业和DDL,他打算立即开工。

B 同学打开作业要求页面仔细阅读,但还是感到一些要求在细节上有些模糊。于是 B 同学打开讨论区,将自己的困惑**写成提问帖发布**,**并附上了 tag** 便于他人查找。帖子很快**收到了同学们的回复**,热度不断增加。H 助教也因此关注到了这个问题,在帖子中**以助教身份做出明确回复**,并给之前同学们的正确回复**添加助教认证**。同时,H 助教**修改了原先不清晰的作业要求**,并**在通知栏提醒**同学们作业要求的变动。

解决问题后,B 同学继续完成作业。B 同学在课程平台**查看实验指导书**,发现有一个概念不理解,他注意到指导书旁的“ **问问Chat GPT** ”窗口,他决定先尝试问问看。Chat GPT 很快给出了概念的解释,通过不断对话追问的方式,B 同学对这个概念有了更好的理解。

困惑解答后,B 同学顺利的完成了作业。在提交作业时,B 同学先使用**公开的辅助评测**尝试提交。评测机**很快给出了评判结果**,果然没有一次通过。评测机提供了错误信息的前五行,B 同学为了查看详细错误信息,**下载了标准输出和学生输出作为对比**,并使用平台**给出的编译命令**复现错误。很快,B 同学找出了错误,改正后,他决定提交正式评测。由于初次接触编译实验,B 同学打算先完成较为简单的 PCODE 实验。在提交之前,平台**提示他选择作业类型**。确认作业类型无误后,B 同学提交并通过了评测。看到成绩一栏中出现了**本次作业的有效成绩和折算成绩**后,B 同学满意的关掉平台,睡大觉去了。

作业发布后,S 老师查看到了学生**提交作业情况的实时统计**,分析同学们的完成情况后,决定在下节课讲讲同学们作业中的难点,并叮嘱同学们按时完成作业。

典型场景 — 竞速作业

激动人心的 MIPS 赛道竞速作业终于开启了,A 同学早就蓄势待发,第一时间提交了作业。果不其然,A 同学在排行榜上名列前茅。看着随排行榜实时更新的竞速成绩,A 同学十分满意,去学别的课了。

几天之后,随着其他同学的提交不断增多,A 同学发现自己在排行榜上的位置越来越低。A 同学决定给自己的编译器再增添一些优化。他在**总排行榜中仔细比对各个测试点的性能**与前面同学的差距,发现自己还有很大提升空间后,A 同学开始了他的优化之路。

A 同学每完成一个优化,就在平台上进行一次提交。通过查看**历史提交性能分析**,A 同学看到了每个优化带来的性能提升。这让 A 同学十分有成就感,并且对于哪些优化和优化组合更加重要有了深刻的理解。终于,几次优化迭代后,A 同学又回到了排行榜顶端。

A 同学将自己的优化思路和心得总结成了博客,并发布到了**对应的讨论区作为经验分享贴**。H 助教看到这篇帖子,认为 A 同学写的非常棒,给这篇帖子**设置为了精品帖**,吸引更多的同学来阅读学习。

竞速作业接近尾声,A 同学将自己的详细实验过程写成实验报告,提交到了文档作业窗口中。H 助教和 S 老师负责**评判实验报告**。在阅读完 A 同学的实验报告后,他们认为 A 同学很好的完成了编译实验,于是给 A 同学打出高分。A 同学**看到实验报告分数**后,满意的关掉平台,去学别的课了。

典型场景—课程公告

新一周的编译课程开始了,同时也到了新一次作业的开启时间。S 老师在课程平台上发布了新的课程公告,通知大家新一次作业的起止时间。B 同学很快从首页公告栏处得知了新作业和DDL,他打算立即开工。

典型场景—查看作业

B 同学打开作业要求页面仔细阅读,但还是感到一些要求在细节上有些模糊。H 助教也因此关注到了这个问题,H 助教**修改了原先不清晰的作业要求。**B 同学继续开心的做作业。

典型场景—小测

为了加深同学们的对题面的理解,确保同学们注意到了作业要求细节,H 助教为作业设置了小测题目

B 同学看完作业要求后,马上把小测都做完了,并进行了提交。页面上立即出现了小测结果,错误的题目会显示正确答案。B 同学对照答案后,更加深刻的理解了作业要求,他非常高兴的继续做作业。

典型场景—提交评测

B 同学顺利的完成了作业。在提交作业时,B 同学先使用公开的辅助评测尝试提交。评测机很快给出了评判结果,果然没有一次通过。评测机提供了错误信息的前五行,B 同学为了查看详细错误信息,下载了标准输出和学生输出作为对比,并使用平台给出的编译命令复现错误。很快,B 同学找出了错误,改正后,他决定提交正式评测。由于初次接触编译实验,B 同学打算先完成较为简单的 PCODE 实验。在提交之前,平台提示他选择作业类型。确认作业类型无误后,B 同学提交并通过了评测。看到成绩一栏中出现了本次作业的有效成绩和折算成绩后,B 同学满意的关掉平台,睡大觉去了。

典型场景—课程资料

写总结报告的时间到了,为了给大家一些方向,H 助教上传了往年的优秀报告供大家参考。A 同学看到后,立即进行下载。参考了往届优秀学长学姐的报告,A 同学的报告内容更加丰富起来,方向更加明确,最终提交了一份优秀的报告!

典型场景—个人中心

新的学期开始了!B 同学由于对上一学年的编译课程成绩不太满意,他今年决定重修编译课程!B 同学登陆了熟悉的账号,确认自己的信息无误后,将自己的课程切换到了新一年的编译课程。新年新气象,B 同学给自己挑选了新头像,并修改默认密码为自己的常用密码。做完这些,B 同学满意的退出登录,期待新一年能有更好的编译成绩!

典型场景—管理

用户管理

H助教想要查看所有20级的用户,于是进入用户管理界面,在年级一栏的搜索框中输入2020进行检索。H助教突然发现,A同学的专业不对,于是点击编辑,修正了A同学的信息。接着,H助教导通过使用右下角按钮的批量导入功能,在表格中添加了2021级的新用户们。表格长了许多,H助教通过调整表格的分页,让界面看起来更清晰了一些,同时把右下角的管理按钮拖到了不碍事的地方。B同学向H助教反映自己无法登陆,于是H助教在表格中进行检索,发现B同学确实不在用户列表中,于是单独添加了B同学的信息。

课程管理

为做好新一学期课程的准备,H助教打开课程管理界面,新增了一个名称为“2023编译技术”的课程。但是——H助教想起了去年上课的场景,手抖打成了“2022”,于是急忙点击修改课程,输入了课程的正确名字。通过用户管理的批量导入功能,H助教把21届的学生们都添加到了课程中。经过人数的核对,并利用便捷的按列模糊搜索功能,H助教发现有重修的B同学没能进入这个列表,于是手动添加了该学生到课程中。

提交记录

B 同学正在风风火火的完成他的作业。他已经通过了所有评测,但 B 同学显然并不打算止步于此,他继续思考如何优化架构。一番重构之后,他的最新提交竟然没有通过测试。B 同学平时没有版本管理的习惯,在本地没有保存以前已通过的代码,平台上的提交记录又被覆盖了。眼看作业即将截止,B 同学心急如焚,只得联系 H 助教帮忙。H 助教表示这不是大事,他通过提交记录表模糊搜索功能找到 B 同学的历史提交,并下载了他的历史提交文件,帮助 B 找回了之前通过的版本。B 同学高兴极了,他下定决心之后一定好好做版本管理。

项目实现典型场景情况

Alpha 阶段满足了除指导书、讨论区、数据统计图、竞速排序之外的所有应用场景。

综合考虑时间、功能重要程度、实现难度,我们认为这些功能实现难度大,且没有这些功能,平台仍能正常进行最核心的功能。因此未在 Alpha 阶段实现。

但这些功能仍然重要,以上四个功能计划将在 Beta 阶段实现。

杀手级功能

杀手级功能

评测系统

  • 美观的评测界面:利用quasar组件库实现页面,与其他6系课程平台风格更贴近
  • 详细的反馈信息:包含评测总结果、每个评测点的结果、标准输出、标准错误、答案等
  • 更短的响应时间:前端加载速度更快,不会造成卡顿
  • 更快的评测速度:一次编译,再利用进程池并发运行用户程序
  • 安全的评测环境:docker隔离运行时的目录和网络

和竞品的比较

竞品希冀平台也基本实现了上述功能,但是存在不少问题,例如单次评测过慢、页面响应时间太长、卡顿等等。我们团队重新设计了UI,完善了反馈机制,让学生更好地获取评测信息。同时我们重新设计了数据模型,做了查询优化,从而加快前端响应速度,不会造成页面卡顿。而对于评测机,我们改良了评测流程,使得每个测试点的评测高度并发,尽可能地缩短了单次评测时间。

自我评价

基本上达到预期目标,但评测流程目前还不够完整,一些细节还待完善。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。