Presentation is loading. Please wait.

Presentation is loading. Please wait.

学生程序自动评测与抄袭检测系统 赵长海 北京航空航天大学 计算机学院 2010-5-9.

Similar presentations


Presentation on theme: "学生程序自动评测与抄袭检测系统 赵长海 北京航空航天大学 计算机学院 2010-5-9."— Presentation transcript:

1 学生程序自动评测与抄袭检测系统 http://course.sei.buaa.edu.cn 赵长海 北京航空航天大学 计算机学院 2010-5-9

2 问题的提出  程序设计类课程的要求 实践 ○ 大量练习,通过大量的实践领会程序设计内涵 和思维 考核 ○ 考察学生的动手能力! ○ 而非记概念、背知识点、应付书面考试的学习 模式

3 问题的提出  面临的问题 1 学生上机练习如何指导和监督? ○ 给予每一个学生及时的指导是不现实的,即使 有助教参与 ○ 学生是否完成了编程作业?结果是否正确?存 不存在抄袭? 国外调查:高达 85.4% 的学生承认抄袭过别人的编程 作业

4 问题的提出  面临的问题 2 如何考核学生的程序设计能力? ○ 纸质考试的问题: 教师能否在五分钟时间内看出一个程序的正确性? - 能否通过编译 - 运行时错误:数组越界、除零错误、空指针 - 输出结果的正确性 评分的客观性如果保证?

5 国内高校程序设计课程教学效果 上机考试形式 3 道编程题, 2 个小时内完成 题目来自大一学生的期中或者期末试题

6 国内高校程序设计课程教学效果

7

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 北航应用效果

37

38 系统的发展 学生程序自动评分与 抄袭检测系统 仅支持学生程序自 动评分:动态测 试、性能分析、静 态分析、代码度量 学生程序抄袭检测 课程自动评分与抄袭 检测平台 自动评判:数据结 构、编译技术、汇 编、英文作文 抄袭检测:文档抄 袭检测、互联网相 似文档检索

39 本系统下载地址: http://course.sei.buaa.edu.cn


Download ppt "学生程序自动评测与抄袭检测系统 赵长海 北京航空航天大学 计算机学院 2010-5-9."

Similar presentations


Ads by Google