0. 项目背景
在软件工程课程中,个人项目的测试一直是一个难以自动化的问题。不同的学校的项目题目不同,测试代码也不一样,每一届助教都需要手动测试或费时费力写一个自动批处理测试的程序。但在助教们使用的过程中发现,实际上大部分测试的大部分步骤都是可以固定下来的,比如说爬取Github仓库,命令行批处理运行等。希望能开发一个软工OJ,它的扩展性比较强,可以稍微定制化。比如能处理数独、能处理四则运算、地铁线路规划这样的题目作业的自动判定测试。它不仅能支持软工题目自动评分、还能支持代码查重、代码规范评分等,同时其定制化的成本不要太大,最好能够支持助教使用不同的语言来利用平台。
1. 项目用户分析
角色:学生、老师、管理员
1.1 管理员:
建立课程
赋予教师课程操作权限
处理一些特殊情况 ... ... .
1.2 学生:
提交代码
查看结果
1.3 教师:
项目发布:输入项目名称、项目详细描述、项目功能测试文件、是否允许学生自行评测。
项目浏览:查看发布的项目、删除项目、选择项目进行评测。项目信息包括项目名称、详细描述和选择该项目学生的列表。其中项目评测自动爬取学生提交在github上的项目源代码,并进行评测。
项目评测结果:显示项目中每个学生的评测情况。包括每个学生提交项目的代码规范程度、测试样例通过比例。同时包括项目总体报告。项目总体包括项目每个测试点通过的学生数量
2. 项目功能分析
2.1 主要角色的需求 (分角色描述)
学生:
选题
查看本次项目评测的结果
查看全班得分排行
教师:
项目发布:输入项目名称、项目详细描述、项目功能测试文件、是否允许学生自行评测。
项目浏览:查看发布的项目、删除项目、选择项目进行评测。项目信息包括项目名称、详细描述和选择该项目学生的列表。其中项目评测自动爬取学生提交在github上的项目源代码,并进行评测。
项目评测结果:显示项目中每个学生的评测情况。包括每个学生提交项目的代码规范程度、测试样例通过比例。同时包括项目总体报告。项目总体包括项目每个测试点通过的学生数量
2.2 核心功能
对用户提交的程序进行判题
对用户的基本管理功能
对题库的基本管理功能
可以建立作业、测验、考试
可以生成作业、测验、考试的结果表格
2.3 亮点功能
加入从GitHub爬取项目仓库的功能
代码正确性评测给出具体错误提示
对代码评分的指标:
运行测试数据的正确率;[运行测试脚本]
代码是否满足题目要求;[题目设定的检查点]
代码的规范性 [利用代码审查技术实现];
代码内聚、耦合、规模等指标 [利用代码度量技术实现]
测试数据生成方式多来源、多方式。
自动生成:可以由工具生成(Evosuite、Randoop)
老师手动生成
测试脚本的生成方式也是多来源、多方式 0. 全自动生成测试脚本:处理一些相对简单的、test Oracle相对明确的、或者蜕变关系明确的(蜕变测试)
半自动生成测试脚本框架:类似与 IDE 自动生成测试框架
老师手动生成:处理相对复杂的场景
2.4 其他功能
项目库(即题库)的管理:
题目(项目)要求描述。尽量模板化、规范化;
测试用例、测试脚本。尽量提供模版或一些撰写指南。
班级管理
学生班级分组;
老师和学生(班级)建立关联
排行榜管理
每个学生得分:
程序测试得分
开发过程得分
文档质量得分
其他一些统计分析功能
学生提交项目(commit)分布;
项目规模与提交时间关联分析;
... ...
3. 性能需求分析
学生在线分析的实时性需求:最好做到实时反馈测试结果;代码审查的结果;
一次处理学生提交的项目数量、规模需求;[需要细化]
4. 对现有软件的分析
1、GitHub: 提交代码,代码迭代管理ok,但缺乏对测试数据的自动检测 2、oj平台: 提交代码,缺乏个性化测试,深层分析和管理
用户需求: 教师:自动评分和反馈
学生:实时反馈代码质量,