基于动态目标Makefile的授课用工具校验与性能整合系统问询
我最近为自己的编程课开发了一套自动化校验与性能对比工具,专门用来批量验证学生实现的多款工具在测试数据上的正确性、行为一致性,还能自动对比它们的性能表现,分享下我的设计思路和实现细节:
核心设计理念
我做这套工具的核心目标就是降低学生的使用门槛,同时方便我批量管理和分析所有学生的解决方案:
- 学生端:只需要把自己的源码目录按规则放到指定位置,不需要手动配置任何脚本,就能自动完成所有校验和性能测试
- 教师端:我可以直接把学生的解决方案目录复制到自己的工具副本里,一键完成所有方案的整合与批量测试
目录命名规则与自动触发逻辑
我设置了一个非常简单的目录识别规则:
所有学生的源码目录必须以
_src结尾,比如student_alice_src、student_bob_src
当学生把符合规则的目录放到预设的submissions/目录下后,我的主脚本会自动执行以下操作:
- 扫描
submissions/目录,自动识别所有*_src结尾的目录 - 为每个目录创建独立的工作空间,避免不同学生的代码互相干扰
- 自动拉取预设的测试数据集(我提前存在
test_data/目录下)到对应工作空间 - 依次执行正确性校验、一致性对比、性能测试三类脚本
功能模块详解
1. 正确性校验脚本
这个脚本会遍历test_data/里的所有测试用例,每个用例包含输入数据和预期输出:
- 自动编译/运行学生目录里的源码(支持C、Python、R等多语言,我写了语言判断逻辑)
- 捕获程序的实际输出,和预期输出做逐行比对
- 生成详细的校验报告,标记出错误用例和具体的差异点
2. 一致性对比脚本
除了和标准预期对比,我还加入了不同学生实现之间的一致性校验:
- 收集所有通过正确性校验的学生程序的输出结果
- 对比这些结果是否完全一致(排除一些允许的格式差异,比如空格、换行符)
- 标记出结果不一致的程序,方便我排查是否存在逻辑漏洞或者题目理解偏差
3. 性能对比脚本
为了让学生直观看到不同实现的性能差异,我做了自动化的性能统计:
- 对每个测试用例,重复运行学生程序多次(默认10次)
- 用
time命令或者自定义计时函数统计平均执行时间、最大/最小执行时间 - 生成可视化的性能对比表格(用Python的
tabulate库实现),把所有学生的性能数据按排序展示
教师端整合方案
我自己的工具副本里有一个instructor_analysis/目录,当我需要批量分析学生作业时:
- 只需把所有学生的
*_src目录复制到这个目录下 - 运行主脚本后,会生成一份汇总报告,包含所有学生的校验结果、一致性对比情况和性能排名
- 这份报告能帮我快速定位优秀实现和需要重点辅导的学生
内容的提问来源于stack exchange,提问作者Thomas Mailund
相关产品推荐
相关产品推荐

