计算机程序设计课程实践和考试方法的改革 —经验、支持工具 赵长海 博士 zch@buaa.edu.cn 北京航空航天大学 计算机学院 课程网站:http://programming.buaa.edu.cn 2010年4月18日
问题 ? 教学目标是否达到 教学方法是否有效
从研究生复试看效果 上机考试形式 2个小时内,完成3道编程题 题目来自大一学生的期中或者期末试题
从研究生复试看效果 上机考试形式 3道编程题,2个小时内完成 题目来自大一学生的期中或者期末试题
从研究生复试看效果 题目示例
从研究生复试看效果
从研究生复试看效果
从研究生复试看效果 观察到的现象: 大部分要讲程序先写到纸上,然后再录入IDE内 念博士时,我接触过一个来自中国大陆的学生,他叫沈为民,他有几件时间真的让我惊叹不已,印象最深的是,当我们大家都在计算机上写程序的时候,只有沈为民不急于上机,他把一行行的程序写到纸上,反复地看。我们非常惊讶,问他“天啊,你怎么不在计算机上写?”他说,“在中国,我们都是这样的,我们没有那么多计算机啊。所以我们都是写在纸上,然后老师给我们修改程序。”我当时非常震惊,因为把程序写在纸上的做法,我闻所未闻,更不敢想象。 《世界因你不同—李开复自传》第四章P99
改革前的问题 改革前(6年前)存在的问题 在与非计算机专业(数学、电子、自动化、机械等)的学生的竞争中,计算机专业的学生并未表现出明显的专业优势 很难监督学生是否完成作业 抄袭现象严重 试卷评阅工作量太大
问题分析 教学内容偏窄偏浅 教学方法不适当 实验考核手段落后 教学内容主要是语言的语法、语义等基本内容的介绍以及简单的应用举例,缺少较深入讨论程序设计的内容,缺少对语言运用能力培养和训练的内容 教学方法不适当 把这门课混同于一般的理论课,重视知识的讲授而忽视对能力的培养 实验考核手段落后 缺少必要的技术手段,因此多采用书面方式,教师在评判学生的练习和考试答卷时面临巨大的工作量和难度
改革 2003年,启动 计算机程序设计课程实践和考试方法的改革
改革的目标 对于一般问题,能够在已知算法的前提下,具备分析问题、解决问题的能力,在 40~60分钟内编写并调试通过、能正确运行、一般在40~50行有效代码以内的程序;
改革的核心 实践! 依赖计算机督促学生认真学习 依靠计算机评测学生程序,给出及时反馈 开发学生程序实时自动评测与抄袭检测系统 上机练习 上机考试 开卷 抄袭检测—督促学生独立完成作业
系统主要功能 网上答疑 在线作业 在线考试 程序自动评判 程序相似性比较 成绩统计分析 文档相似性比较 实时网络监测工具;代码抄袭检测。同时,在考试配置时,教师还可以在一场考试中使用具有相同难度的多份试卷 程序自动评判 程序相似性比较 成绩统计分析 文档相似性比较 支持提交文档之间的相似性检测,也能够从互联网上搜索相似的文档。
系统特色 支持C、C++、Java、Fortran、Pascal等高级程序语言的自动评分 支持程序的相似检测,优于当前国外最好的相似性检测工具 JPlag。 系统稳定可靠 性能优异 基于语意特征的文档相似性检测技术,支持互联网相似性文档搜索
程序自动评判
程序自动评判 编译信息 性能度量
程序自动评判
抄袭检测
系统抄袭检测能力 根据抄袭所付出的努力,从易到难依次为: 完整拷贝 修改注释 重新排版 标识符重命名 代码块重排序 代码块内语句重排序 常量替换 改变表达式中的操作符或者操作数顺序 改变数据类型 增加冗余的语句或者变量 表达式拆分 控制结构等价替换 Jones[1]总结了学生常用的10种抄袭手段,在此基础上,我又增加了常量替换和表达式拆分两种手段 [1] Jones, E. L. Metrics based plagiarism monitoring[R]. Paper presented at the 6th Annual CSSC Northeastern Conference, Middlebury, VT.2001
系统支持的题目类型 系统支持的题目类型 填空题 选择题 简答题 编程题 接口编程题 程序片段编程题 文件上传题
根据题目描述编写一个完整可编译执行的程序 系统支持的题目类型 编程题 根据题目描述编写一个完整可编译执行的程序 对比程序输出与期望输出判断程序的正确性
系统支持的题目类型 程序片段编程题 补充源程序中缺失的代码段 代码段:表达式、语句、函数实现。 系统根据代码段前后的调试打印语句或程序最终的输出结果评判程序的正确性。
系统支持的题目类型 接口编程题 主要用途: 灵感来自软件开发过程中的单元测试 接口:函数(C等),接口或者抽象类(Java或者C++) 一方面可以训练学生对函数或者类有更深入的了解,此外 数据结构课程可以利用这种约束作用,限定学生用某种类型的数据结构编写代码。
北航的应用情况 研究生复试上机考试 数据结构与算法课程练习 高级语言程序设计练习与考核 作业 考试 每届学生需要完成8次作业,每次作业有12道选择题和3道编程题; 考试 期中考试要求学生两个小时内完成10道选择题和2道编程题; 期末考试要求学生在三个小时内完成20道选择题,3道编程题
应用效果
系统的发展 仅支持学生程序自动评分:动态测试、性能分析、静态分析、代码度量 学生程序抄袭检测 自动评判:数据结构、编译技术、汇编、英文作文 学生程序自动评分与抄袭检测系统 仅支持学生程序自动评分:动态测试、性能分析、静态分析、代码度量 学生程序抄袭检测 课程自动评分与抄袭检测平台 自动评判:数据结构、编译技术、汇编、英文作文 抄袭检测:文档抄袭检测、互联网相似文档检索
在研项目 数据结构与算法可视化自动评测 演示 并行程序自动评分 并行程序设计、多核程序设计 作文自动评分 拟利用互联网的大量语料