论文部分内容阅读
本文针对C程序设计课程实验教学的特点,利用在线评测系统对选课的目标群体开展实验教学研究。探索在实验教学中应用在线评测的教学方法和手段,同时对传统的纸质考试方式进行变革,在课程考试中引入在线评测,并对实施的结果做详细的数据分析和评价。在线评测程序设计实践教学1引言对普通规模的理工科高校而言,每年选程序设计课程的本科生数量大约在2000至2500人次左右,辐射面广,受众面大。无论是C,C 还是Java,程序语言设计课程作为理工类本科生的必修课程,都有一个共同的特点:即“上机第一、实践第一”。仅通过课堂的理论教学是无法理解程序设计的精髓的,也无法培养和锻炼学生的实践能力和创新能力。因此,课程的实践教学环节的重要性凸显,胜过其他任何一门课程。目前程序设计课程在实践教学环节大多仍停留在学生撰写纸质实验报告,编写程序代码,课后由教师进行批改这种传统的教学模式上。这种传统的实践教学模式不仅存在浪费资源,耗时耗力的问题,而且加重了教师和学生的负担。根据一项生物心理学研究显示,人脑类似一个反馈激励系统,在有效的信号刺激下,刺激的频率越快,信息驻留在大脑中的时间就越长,有效及时的信息反馈能够激发人脑的学习潜能和兴趣。而传统模式由于反馈时间周期长,恰恰缺乏了及时的特点,大脑在得不到有效反馈的情况下,对信息的记忆度将大为减弱。因此传统的实践教学模式不利于学生的进一步学习。在线评测的英文名为Online Judge,简称OJ,是一个基于HTTP协议的服务器端判题系统,用来检测程序源代码的正确性。用户可以在线提交多种程序(如C、C )源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。OJ系统最初使用于ACM-ICPC国际大学生程序设计竞赛和信息学奥林匹克竞赛中的自动判题和排名,现广泛应用于世界各地高校学生程序设计的训练、参赛队员的训练和选拔、各种程序设计竞赛以及数据结构和算法的学习和作业的自动提交判断,著名的有RQNOJ、URAL、北京大学OJ等。目前,在线评测模式正在被越来越多的程序设计学习和爱好者所接受。2实验教学的实施利用OJ实施教学首先需要在服务器上建立试题库,题库包括ACM程序设计竞赛试题及与C程序设计课程实验教学内容紧密结合的实际问题。每道题目包含Description(题目描述)、Input data(输入数据格式)和Output data(输出数据格式)三个部分,学生编写完成后在网页中将源程序提交到服务器,服务器启动编译器编译该源程序并生成可执行程序,以输入数据文件作为输入启动该可执行程序,并将程序的输出结果和标准输出数据文件进行对比,最后系统返回给用户一个状态:完全一致则判为Accept(接受),否则判为Wrong Answer(错误),超时(Time Limit Exceed),超内存(Memory Limit Exceed),运行时错误(Runtime Error)或是无法编译(Compile Error),并返回程序使用的内存、运行时间等信息。学生能够立即看到服务器反馈的结果,同一段代码可以修改后多次提交。在OJ上开展实验教学十分方便,除预先部署题库外,利用OJ的Authors Ranklist(用户排名等级)功能,即按Solved Problems(做对题数)和Submit(提交次数)的比例对用户进行排序,如图1所示。
Authors Ranklist在一定程序上能较准确地反映学生的实际水平,便于教师掌握学生的实验进度,并有针对性的对个别排名靠后的学生进行实验辅导。对学生而言,提交通过的题数越多,自己的排名越靠前,能让学生获取成功的喜悦感和成就感,进一步刺激他们主动去做更多的题,争取更高的排名,形成了正反馈激励效应。另一方面由于程序课程覆盖面广,基本上涵盖了理工类的所有本科生,选课的人数众多,采用了OJ系统对学生提交的作业进行评判,一方面可以大大减轻教师的工作量,另一方面又可以减少因教师的主观因素使评测尺度不统一,做到高效客观的判题。3扩充平台的功能3.1增加相关考试功能在现有OJ功能的基础上,进一步丰富了平台的功能,改进后的OJ支持多种语言的判定,有C、C 、Pascal和 Java。扩充了考试模块,包括多种题型的设定,有选择、判断、填空和程序设计。增加了防作弊开关功能,如图2中所示,左侧控制菜单中有Switch按钮,用来开启和关闭查看代码和收发邮件功能。考试时禁止考生互发邮件和查看试题源代码。
3.2 相似代码检测功能在平时的编程练习或考试过程中,两个人可能提交相似的源程序以欺骗系统进行判断。人工批阅过程中,类似的欺骗很容易被发现,但对于机器评测这是一个盲区,OJ系统对于代码防抄袭(cheat checker)方面没有做预防措施。
为了解决这个问题,可利用基于最长公共子序列LCS(longest common substring)的方法进行检测。将两次提交代码取出回车,空格与制表符,得到两个长字符串,然后每次都找出两串的最长公共子序列,将他们删除,然后再找,直到找到的最长公共子序列小于某个阈值,计算被删除的字符数目占原始数目的比例,比例高的就有较高的抄袭可能性。如图3所示:
这种基于LCS的判定方法可以用来检查多种方式的抄袭,比如移动代码块,修改变量名,修改函数名等。检测程序的算法复杂度是O(N*M),N和M是要两个被检验程序的字节长度。不足之处是当用户提交的程序较长时,效率会变低,耗时增加,所以适合有针对性的使用。4考试方式的转变在研究中,选取2011级选“C程序设计”课程的部分学生作为样本,共 885人次使用在线评测系统参加期末考试,要求在3小时内完成选择,判断,填空共30题和程序设计题5题。从考试结果看,由于成绩在50分以下的属于极个别,因此我们重点考查成绩在50分至100分之间的情况,将成绩区间划分为10个区间,统计每个区间对应的人数分布密度,如表1所示:
根据概率和数理统计规律,大多数随机变量均服从或近似服从正态分布。如测量的误差,学生的考试成绩,人的身高与体重等。正态分布的随机变量应用范围之广,使其在数理统计学中占有极其重要的地位。考查考生成绩分布情况的直方图,如果基本呈正态曲线状,属于好;如果略呈正(负)态状,属于中等;如果呈严重偏态或无规律,就是差的。 定义成绩的样本空间为S:{50, 51, 52…100},将考生的成绩Xi作为随机变量,其中(50≤Xi≤100,1≤i≤n)。设定数学期望值μ=75,计算均方差σ为=94.48,标准差为σ=9.72。在Excel中对样本空间构建正态分布函数f(x)=NORMDIST(Si,μ,σ,0),得到正态分布曲线,如图5中红色虚线所示,可看出成绩分布直方图近似地接近于正态分布曲线,说明在考试中引入在线评测模式具有较为客观的区分度。 5评价及结论收集OJ模式下的实践教学活动中的数据,由参与者对教学活动的内容、组织等进行评价。包括做题数量,兴趣度,使用习惯等。本次调查对象885人次,其中女生224人,占25.4%,男生661人,占74.6%。调查专业为非计算机的理工类专业,主要集中在机械、材料、生物、土木等专业。通过调查,我们得出以下一些结论:(1)认为OJ题目难度偏难的有362人,占总人数的41%,其中女比男高出3%,显示出男生更擅长于程序设计。(2)认为OJ进行实验比传统撰写实验报告方式更具有优势的占总人数的70%,其中女比男高出10%,这意味着OJ本身更受到女生的欢迎。 (3)值得注意的是,在这次调查中不习惯使用OJ的人数有61人,占总人数的7%。在这些学生中,认为题目偏难的有44人,比例高达71.6%,远高于平均比例41%,只有2人认为题目难度适中但不习惯使用OJ。因此,我们得出结论:造成这些学生对OJ有抵触心理的主要原因是题目难度高于他们的平均水平,使得他们无法在较短的时间内提交正确,从而打击了继续使用OJ的积极性。假设能降低部分题目的难度,让这些学生先做简单的题目,便可让他们逐步适应并认可OJ。 (4)在60分钟的课时内,接近85%的人能够做对三题或三题以下,15%的人能完成五到七题以上, 凭此可大致估算程序设计题量和所需时间的关系。(5)34.5%的人在使用OJ时遇到问题倾向于独立思考,其中男生比女生高10%;反之,遇到问题后想请教他人的,男生占52%,女生占63%,女生高于男生11%。这意味着虽然OJ可以自动判题并给出学生反馈,有利于学生在编程时独立思考解决问题,但显然女生仍应更多的受到关注和帮助。(6)73%的人通过OJ的训练,对程序设计课程产生了兴趣,男女比例基本持平。28.4%的人有参加ACM竞赛的愿意,试试自己的编程水平。(7)从调查结果看,认同OJ的原因主要有:简单易行、反馈及时、有利于主动学习。但即使OJ被广泛认可,教师仍不能过度依赖于机器判题的自动化,尤其对程序设计的初学者而言,在学习的初级阶段,程序的书写格式以及良好的编程习惯的培养,都需要教师对学生的耐心指导,而远非依靠OJ所能达到。6结语随着计算机人工智能的发展,程序代码自动评测系统已成为程序设计课程实验教学过程中的有效辅助工具。改变传统的笔试考核方式,使用在线评测系统开展课程考试逐步成为趋势。同时需要不断完善在线评测系统的功能,最大程度上减少和避免抄袭现象的发生,这样做既能促进学生主动学习,又能考查出学生真实的编程水平,同时极大减轻了教师的工作量,让他们有更多的时间和精力投入到教学活动中去。经过多年的教学实践,目前已形成包括实验教学体系,教学方法,考核评价,创新能力培养等在内的一整套方案,建立了适合初学者练习的在线评测试题库,积累了大量地学生平时练习和考试的原始数据。藉此,希望对高校程序设计课程的实验教学起到一定的借签和指导作用。
参考文献:
[1]丁邦旭,钟志水.基于ACM 的计算机程序设计类课程实验教学体系设计[J].安庆师范学院学报(自然科学版),2012,18(3):117-120.
[2]张丽萍,刘东升,王春晖.“程序设计基础”精品课程建设[J].计算机教育,2010(20):115-117.
[3]韩君泽,钟美,刘东升. 程序设计在线评测辅助教学系统的设计与实现[J].内蒙古师范大学学报,2010,39(5):473-476.[4]梁嵩,王建新,盛 羽.在线程序语言评测系统的设计与实现[J].计算机技术与自动化,2010,29(6):128-131.
[5]Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest.Introduction to Algorithms[M].The MIT Press,2009,9.
[6]茆诗松,程依明,濮晓龙.概率论与数理统计教程[M].北京:高等教育出版社,2011,2.
Authors Ranklist在一定程序上能较准确地反映学生的实际水平,便于教师掌握学生的实验进度,并有针对性的对个别排名靠后的学生进行实验辅导。对学生而言,提交通过的题数越多,自己的排名越靠前,能让学生获取成功的喜悦感和成就感,进一步刺激他们主动去做更多的题,争取更高的排名,形成了正反馈激励效应。另一方面由于程序课程覆盖面广,基本上涵盖了理工类的所有本科生,选课的人数众多,采用了OJ系统对学生提交的作业进行评判,一方面可以大大减轻教师的工作量,另一方面又可以减少因教师的主观因素使评测尺度不统一,做到高效客观的判题。3扩充平台的功能3.1增加相关考试功能在现有OJ功能的基础上,进一步丰富了平台的功能,改进后的OJ支持多种语言的判定,有C、C 、Pascal和 Java。扩充了考试模块,包括多种题型的设定,有选择、判断、填空和程序设计。增加了防作弊开关功能,如图2中所示,左侧控制菜单中有Switch按钮,用来开启和关闭查看代码和收发邮件功能。考试时禁止考生互发邮件和查看试题源代码。
3.2 相似代码检测功能在平时的编程练习或考试过程中,两个人可能提交相似的源程序以欺骗系统进行判断。人工批阅过程中,类似的欺骗很容易被发现,但对于机器评测这是一个盲区,OJ系统对于代码防抄袭(cheat checker)方面没有做预防措施。
为了解决这个问题,可利用基于最长公共子序列LCS(longest common substring)的方法进行检测。将两次提交代码取出回车,空格与制表符,得到两个长字符串,然后每次都找出两串的最长公共子序列,将他们删除,然后再找,直到找到的最长公共子序列小于某个阈值,计算被删除的字符数目占原始数目的比例,比例高的就有较高的抄袭可能性。如图3所示:
这种基于LCS的判定方法可以用来检查多种方式的抄袭,比如移动代码块,修改变量名,修改函数名等。检测程序的算法复杂度是O(N*M),N和M是要两个被检验程序的字节长度。不足之处是当用户提交的程序较长时,效率会变低,耗时增加,所以适合有针对性的使用。4考试方式的转变在研究中,选取2011级选“C程序设计”课程的部分学生作为样本,共 885人次使用在线评测系统参加期末考试,要求在3小时内完成选择,判断,填空共30题和程序设计题5题。从考试结果看,由于成绩在50分以下的属于极个别,因此我们重点考查成绩在50分至100分之间的情况,将成绩区间划分为10个区间,统计每个区间对应的人数分布密度,如表1所示:
根据概率和数理统计规律,大多数随机变量均服从或近似服从正态分布。如测量的误差,学生的考试成绩,人的身高与体重等。正态分布的随机变量应用范围之广,使其在数理统计学中占有极其重要的地位。考查考生成绩分布情况的直方图,如果基本呈正态曲线状,属于好;如果略呈正(负)态状,属于中等;如果呈严重偏态或无规律,就是差的。 定义成绩的样本空间为S:{50, 51, 52…100},将考生的成绩Xi作为随机变量,其中(50≤Xi≤100,1≤i≤n)。设定数学期望值μ=75,计算均方差σ为=94.48,标准差为σ=9.72。在Excel中对样本空间构建正态分布函数f(x)=NORMDIST(Si,μ,σ,0),得到正态分布曲线,如图5中红色虚线所示,可看出成绩分布直方图近似地接近于正态分布曲线,说明在考试中引入在线评测模式具有较为客观的区分度。 5评价及结论收集OJ模式下的实践教学活动中的数据,由参与者对教学活动的内容、组织等进行评价。包括做题数量,兴趣度,使用习惯等。本次调查对象885人次,其中女生224人,占25.4%,男生661人,占74.6%。调查专业为非计算机的理工类专业,主要集中在机械、材料、生物、土木等专业。通过调查,我们得出以下一些结论:(1)认为OJ题目难度偏难的有362人,占总人数的41%,其中女比男高出3%,显示出男生更擅长于程序设计。(2)认为OJ进行实验比传统撰写实验报告方式更具有优势的占总人数的70%,其中女比男高出10%,这意味着OJ本身更受到女生的欢迎。 (3)值得注意的是,在这次调查中不习惯使用OJ的人数有61人,占总人数的7%。在这些学生中,认为题目偏难的有44人,比例高达71.6%,远高于平均比例41%,只有2人认为题目难度适中但不习惯使用OJ。因此,我们得出结论:造成这些学生对OJ有抵触心理的主要原因是题目难度高于他们的平均水平,使得他们无法在较短的时间内提交正确,从而打击了继续使用OJ的积极性。假设能降低部分题目的难度,让这些学生先做简单的题目,便可让他们逐步适应并认可OJ。 (4)在60分钟的课时内,接近85%的人能够做对三题或三题以下,15%的人能完成五到七题以上, 凭此可大致估算程序设计题量和所需时间的关系。(5)34.5%的人在使用OJ时遇到问题倾向于独立思考,其中男生比女生高10%;反之,遇到问题后想请教他人的,男生占52%,女生占63%,女生高于男生11%。这意味着虽然OJ可以自动判题并给出学生反馈,有利于学生在编程时独立思考解决问题,但显然女生仍应更多的受到关注和帮助。(6)73%的人通过OJ的训练,对程序设计课程产生了兴趣,男女比例基本持平。28.4%的人有参加ACM竞赛的愿意,试试自己的编程水平。(7)从调查结果看,认同OJ的原因主要有:简单易行、反馈及时、有利于主动学习。但即使OJ被广泛认可,教师仍不能过度依赖于机器判题的自动化,尤其对程序设计的初学者而言,在学习的初级阶段,程序的书写格式以及良好的编程习惯的培养,都需要教师对学生的耐心指导,而远非依靠OJ所能达到。6结语随着计算机人工智能的发展,程序代码自动评测系统已成为程序设计课程实验教学过程中的有效辅助工具。改变传统的笔试考核方式,使用在线评测系统开展课程考试逐步成为趋势。同时需要不断完善在线评测系统的功能,最大程度上减少和避免抄袭现象的发生,这样做既能促进学生主动学习,又能考查出学生真实的编程水平,同时极大减轻了教师的工作量,让他们有更多的时间和精力投入到教学活动中去。经过多年的教学实践,目前已形成包括实验教学体系,教学方法,考核评价,创新能力培养等在内的一整套方案,建立了适合初学者练习的在线评测试题库,积累了大量地学生平时练习和考试的原始数据。藉此,希望对高校程序设计课程的实验教学起到一定的借签和指导作用。
参考文献:
[1]丁邦旭,钟志水.基于ACM 的计算机程序设计类课程实验教学体系设计[J].安庆师范学院学报(自然科学版),2012,18(3):117-120.
[2]张丽萍,刘东升,王春晖.“程序设计基础”精品课程建设[J].计算机教育,2010(20):115-117.
[3]韩君泽,钟美,刘东升. 程序设计在线评测辅助教学系统的设计与实现[J].内蒙古师范大学学报,2010,39(5):473-476.[4]梁嵩,王建新,盛 羽.在线程序语言评测系统的设计与实现[J].计算机技术与自动化,2010,29(6):128-131.
[5]Thomas H.Cormen,Charles E.Leiserson,Ronald L.Rivest.Introduction to Algorithms[M].The MIT Press,2009,9.
[6]茆诗松,程依明,濮晓龙.概率论与数理统计教程[M].北京:高等教育出版社,2011,2.