Download presentation
Presentation is loading. Please wait.
1
学生程序自动评测与抄袭检测系统 http://course.sei.buaa.edu.cn 赵长海 北京航空航天大学 计算机学院 2010-5-9
2
问题的提出 程序设计类课程的要求 实践 ○ 大量练习,通过大量的实践领会程序设计内涵 和思维 考核 ○ 考察学生的动手能力! ○ 而非记概念、背知识点、应付书面考试的学习 模式
3
问题的提出 面临的问题 1 学生上机练习如何指导和监督? ○ 给予每一个学生及时的指导是不现实的,即使 有助教参与 ○ 学生是否完成了编程作业?结果是否正确?存 不存在抄袭? 国外调查:高达 85.4% 的学生承认抄袭过别人的编程 作业
4
问题的提出 面临的问题 2 如何考核学生的程序设计能力? ○ 纸质考试的问题: 教师能否在五分钟时间内看出一个程序的正确性? - 能否通过编译 - 运行时错误:数组越界、除零错误、空指针 - 输出结果的正确性 评分的客观性如果保证?
5
国内高校程序设计课程教学效果 上机考试形式 3 道编程题, 2 个小时内完成 题目来自大一学生的期中或者期末试题
6
国内高校程序设计课程教学效果
8
观察到的现象: 相当一部分学生将程序先写到纸上,然后再 录入 IDE 内 念博士时,我接触过一个来自中国大陆的学生,他叫沈为民,他有 几件时间真的让我惊叹不已,印象最深的是,当我们大家都在计算 机上写程序的时候,只有沈为民不急于上机,他把一行行的程序写 到纸上,反复地看。我们非常惊讶,问他 “ 天啊,你怎么不在计算机 上写? ” 他说, “ 在中国,我们都是这样的,我们没有那么多计算机 啊。所以我们都是写在纸上,然后老师给我们修改程序。 ” 我当时非 常震惊,因为把程序写在纸上的做法,我闻所未闻,更不敢想象。 《世界因你不同 — 李开复自传》第四章 P99
9
CourseGrading 特点: 学生程序自动评分 ○ 动态测试、运行效率测试、程序特征识别、代 码静态检查、性能分析 抄袭检测 ○ 能够检测出标识符重命名、增加冗余语句、等 价的控制结构替换等 12 种学生常用的抄袭手段
10
CourseGrading 系统功能 课程管理系统 + 程序设计题型
11
CourseGrading 应用 作业 ○ 完成 8 次作业,每次作业有 12 道选择题和 3 道编 程题; 考试 ○ 期中考试要求学生两个小时内完成 10 道选择 题, 2 道编程题; ○ 期末考试要求学生在三个小时内完成 20 道选择 题, 3 道编程题 网上答疑等
12
程序自动评判系统研究现状 WebToTeach BOSS CourseMarker 问题: 使用过于复杂
13
代码相似性研究现状 Jones 总结了学生常用的 10 种抄袭手段,在此基础上,本 文又增加了常量替换和表达式拆分两种手段,根据抄袭所 付出的努力,从易到难依次为: (1) 完整拷贝 (2) 修改注释 (3) 重新排版 (4) 标识符重命名 (5) 代码块重排序 (6) 代码块内语句重排序 (7) 常量替换 (8) 改变表达式中的操作符或者操作数顺序 (9) 改变数据类型 (10) 增加冗余的语句或者变量 (11) 表达式拆分 (12) 等价控制结构替换
14
代码相似性研究现状 属性计数方法 结构度量 MOSS JPlag SIM YAP3
15
CourseGrading 自动评判流程 编译能否通过? 运行时错误? 错误原因: ○ 数据越界、除 零 … 输出结果是否正 确? 格式错误 内容错误 抄袭检测
16
编程题型设计 题目描述编程 根据题目描述,编写一个完整的可编译执行的程 序。学生程序的输入输出必须严格按照题目描述 中的要求。 接口编程 接口编程的灵感来自软件开发过程中的单元测试 (unit testing) 理论,传统的结构化编程语言,比如 C ,学生需要实现一个函数; Java 或者 C++ 这样 面向对象的语言,学生需要实现一个接口或者继 承一个抽象类。 程序片段编程 程序片段编程,即补充源程序中缺失的代码段, 代码段可以是一个表达式、语句、也可以是一个 函数实现。
17
编程题型设计 —— 题目描述编程题 题目描述
18
编程题型设计 —— 题目描述编程题 属性信息:便于教 师出题 程序约束:评判系统使用
19
编程题型设计 —— 接口编程题 题目描述
20
编程题型设计 —— 接口编程题 录入接口:头 文件或者抽象 类等
21
编程题型设计 —— 接口编程题 接口编程的灵感来自软件开发过程中的单元 测试 (unit testing) 理论,传统的结构化编程 语言,比如 C ,学生需要实现一个函数; Java 或者 C++ 这样面向对象的语言,学生需 要实现一个接口或者继承一个抽象类。 教师编写的题目的时候,除了题目描述,还 要提供头文件和 main 函数,这种类型的题目 对学生编写程序提供了导向与约束的作用, 一方面可以训练学生对函数或者类有更深入 的了解,此外,数据结构课程可以利用这种 约束作用,限定学生用某种类型的数据结构 编写代码。
22
编程题型设计 —— 程序片段编程题 题目描述
23
编程题型设计 —— 程序片段编程题 录入程序体
24
编程题型设计 —— 程序片段编程题 代码段可以是一个表达式、语句、也可以是一 个函数实现。系统根据代码段前后的调试打印 语句或程序最终的输出结果评判程序的正确 性。一般情况下,程序片段编程类的题目难度 较小,在作业或考试中,可以与其它两种类型 题目搭配。
25
评判方法 动态测试 运行效率测试 代码特征识别 代码静态检查
26
评判方法 —— 动态测试 通过运行被测程序,检查运行结果与预期 结果的差异
27
评判方法 —— 动态测试 输入输出形式 系统执行动态测试时会根据输入输出类型调 用相应的例程 (routine) ,执行待测程序
28
评判方法 —— 动态测试 运行时错误 崩溃 ○ Linux 下,进程崩溃时都会释放信号,如 SIGFPE 、 SIGSEGV 和 SIGBUS 等 评判系统内安装了信号处理函数,可以在运行时捕捉 学生程序发出的信号,并对这些信号进行解释,方便 学生查找崩溃原因 运行时间过长(可能是死循环)
29
评判方法 —— 动态测试 输出格式问题 完全匹配 内容匹配 ○ 忽略格式
30
评判方法 —— 效率测试 效率测试 时间效率和空间效率 ○ 根据占用内存和运行时间的均值来度量
31
评判方法 —— 效率测试 性能分析
32
评判方法 —— 程序特征识别 特征识别缘由 例如要求学生在代码中使用 for 循环,而不能 用 while 循环; 使用数组,不能使用指针; 或者采用多进程技术,而不能用多线程 实现方法 采用正则表达式构建 “ 包括 / 排除 (include/exclude)” 规则
33
评判方法 —— 代码静态检查 特征识别缘由 静态代码检查是指不运行被测试程序而寻找 程序代码中可能存在的错误或评估程序代码 的过程
34
抄袭检测
35
CourseGrading 开发经验 性能非常关键 系统安全性 源文件的组织与管理
36
北航应用效果
38
系统的发展 学生程序自动评分与 抄袭检测系统 仅支持学生程序自 动评分:动态测 试、性能分析、静 态分析、代码度量 学生程序抄袭检测 课程自动评分与抄袭 检测平台 自动评判:数据结 构、编译技术、汇 编、英文作文 抄袭检测:文档抄 袭检测、互联网相 似文档检索
39
本系统下载地址: http://course.sei.buaa.edu.cn
Similar presentations