2019-02-20 16:14:02 来源:早检测网 栏目:检测教程
一、研究背景及研究意义
信息技术的快速发展加速了教育信息化的进程,在线教育系统与测试系统的出现为学生提供了一个可以提高和检测综合能力的便捷途径。另一方面,C语言教学在各大高校中都是必修课程之一,且在计算机相关课程教学中,针对某个理论性的知识点的考察,一般会以客观题的形式给出。由于答案具有唯一性,通过简单得匹配方式便能识别正确与否从而给出相应成绩。针对这类客观题的自动评分技术已经相当成熟,因此后续在自动评分方向的研究中主要集中于主观题的自动评判。在过去几年的积极探索阶段到现有的实际研究成果来看,有关C语言知识的检测中对编程题的考察是必不可少的。虽然检测的形式各不相同(填写空缺代码块完成完整程序,按题目要求编写整个程序),但终究是为了考察学生掌握编程技巧及编程思想的程度。
本课题研究的主要目的是结合编程实现的特征,为一个正在初始运营中的在线测试平台提供一个能查重与自动评分的功能模块。其中最终评分包括两个部分,一是对每个学生提交的程序代码文件相互之间进行相似度检测,当相似度超过预定阈值作为抄袭处理,此为查重检测。二是将学生程序与模板程序匹配检测相似度并由此计算最终得分。
程序语言与自然语言在各自适用领域上有较大差异,其语言虽然都有词法、语法规则等,但编写程序语言时并没有自然语言那么的灵活,不会出现一词多义,一义多词,他只有固定的关键字,标识符编写规则,功能实现结构等,所以较于自然语言来说识别起来要容易一些。国内外对编程题相似度检测及自动评分都有不少的研究,现也有一些系统比较成熟。
目前,各大高校对C语言课程考察方式一般还是以传统的纸质化考试为主。
这样的考试方法在人工阅卷的过程中存在着些许的不确定因素,随着教育的普及,能力测试之后需要批改的试卷绝不是一个小数目。这单一单调的工作很容易使得批改人员疲惫不堪,从而阅卷出错率将会被动的提高。利用计算机完成自动阅卷将杜绝这一问题的出现,同时,其运行速度快能及时的给学生反馈结果也没有人的感官情绪,能公平公正的对待每一份试卷。
对于主观题的自动评分技术还在不断的完善中,由于在主观题的识别所需的技术:人工智能、自然语言处理、模式识别等还处于起步阶段。所以主观题自动阅卷技术不能一蹴而就,还需要不断的实验研究。目前,探索开发出合理试用的主观题自动评分系统是一个技术难题,若能将开发的系统投入教学或是别的考察里面,将会大大的节省人力物力。
二、国内外研究现状
国外对文本相似度检测的研究早国内,在20世纪中期,就有学者提出让计算机同人工阅卷一般来对主观题如作文进行评阅。至今,经过数多学者的致力研究,出现了许多与教育结合的应用系统,并已投入使用。在对自然语言的文本分析处理方法的研究同时,随着计算机教育的普及,程序代码的检测也在逐渐兴起。
1966年,Ellis Page开 发 了 一 个 模 拟 人 工 评 分 的 系 统Project EssayGrade(PEG),该系统是总结学生提交文本的特征向量,然后将文本的特征进行量化,最后根据量化的结果对其文本进行判分。
1967年,Halstead提出了用属性计数法计算程序代码之间的相似度,所谓的属性是指代码的某些度量值,如:空行的数目,字符量,语句量,控制结构量等,在他的研究基础之上,1977年Otteiistein设计了检测FORTRAN编程语言的代码抄袭检测系统,该系统基于属性技术的相似度检测技术。基于属性技术求解程序代码之间相似度的系统还有Faidhi和Robinson的程序抄袭检测系统,以及Grier设计的Accuse程序抄袭检测系统。
单方面只考虑属性计数而忽略程序的结构组成,得出的代码相似度比值准确率较低,在1996年,Verco和Wise对Accuse程序抄袭检测系统进行了一系列可能性的测试,通过在源程序中加入不影响代码运行的字符串或用其他结构代替原结构等方式。在对测试结果分析研究之后指出:只是单纯的增加供于检测的程序属性数量,在程序相似度检测中并不能得到更加精确的检测结果。
G.Whal首次提出了程序结构方向的研究思路,通过分析程序的内部结构来匹配两源代码之间的相似度。在此后,学者们朝着这两个方向开始研究,同时也有将二者结合研究的。
G.Whal设计的Plague系统,Micheal Wise设计的YAP3系统,Sim系统都是采用的程序结构度量技术进行研究。Donaldson是结合了属性技术与程序结构度量两种技术完成对程序相似度的检测。
还有用token(标记)序列来表示程序的字符串匹配算法,是根据编译原理技术,将程序的语句进行分词的操作,然后将得到的单词存入token序列。然后使用字符串匹配算法计算相似度。常用的字符串匹配算法有:最长公共子序列(LCS)算法、余弦算法、编辑距离(Levenshtein)算法等。采用这种方法的有Duploc、NICAD、Dup、Clone Detective、CCFinder、CP-Miner等。
现在使用比较广泛是 Online Judge 系统,简称 OJ,是一个在线的判题系统,系统通过对用户提交的代码进行编译和运行,对于能够运行的程序通过预先设定的测试集来检测代码运行的结果,以及运行时间是否在规定范围之内。该系统最早使用在 ACM-ICPC 国际大学生程序设计赛和 OI 信息学奥林匹克竞赛中。该系统的返回结果有 7 种:Wrong Answer : 答案不完全正确;Time Limit Exceeded :
运行超出时间限制;Memory Limit Exceeded : 超出内存限制;Output LimitExceeded: 输出超过限制;Runtime Error : 运行时错误;Compile Error : 编译错误;Accepted : 程序通过。该系统采用的是动态评分方式。
三、研究内容
本文的主要研究内容以及创新点有:
1)研究文本相似度检测技术,分别比较点阵图法、空间向量的余弦算法、最长公共子序列LCS算法、最小编辑距离Levenshtein distance算法对源程序相似度检测效果。提出基于LCS的C语言程序查重算法。并对源代码进行适用于LCS算法匹配的预处理操作,改进匹配方式以提高算法匹配效率,提取源代码的特征属性求解阈值。
2)研究程序识别相关技术,以及自动评分的两种常见方法:动态评分;静态评分。本文主要研究静态评分方法,将程序抽象提取为SDG的表现形式,分析结构语义对源代码进行预处理,并提出基于控制流程匹配度的C语言自动评分算法。
3)分析 C语言程序的结构,分析抽象语法树的表现形式,将程序划分为多个不同粒度的子程序,并转换为结构树。运用编译原理技术分析数据依赖、控制依赖完成树的构建。因此提出基于最小子程序匹配的C语言自动评分算法。
四、提纲
五、组织安排
整个论文包含个章节,整体组织结构如下所示:
第一章绪论,根据研读的国内外文献简要描叙一下本文所研究主题的背景、意义,然后介绍国内外相关研究方法及成果,以及自己研究的内容简介。
第二章介绍了完成本文实验的相关理论知识:正则表达式的应用、编译原理技术、程序与图的关系、C语言编码特性、多样性等。
第三章介绍程序查重算法动态求解最长公共子序列。
第四章介绍了基于流程控制匹配的自动评分算法第五章介绍了基于最小子程序匹配的自动评分算法。
第六章总结了整个算法实现过程中主要工作,分析优缺点,并对后续的工作进行展望。
六、进度安排
20XX年11月01日-11月07日 论文选题、
20XX年11月08日-11月20日 初步收集毕业论文相关材料,填写《任务书》
20XX年11月26日-11月30日 进一步熟悉毕业论文资料,撰写开题报告
20XX年12月10日-12月19日 确定并上交开题报告
20XX年01月04日-02月15日 完成毕业论文初稿,上交指导老师
20XX年02月16日-02月20日 完成论文修改工作
20XX年02月21日-03月20日 定稿、打印、装订
20XX年03月21日-04月10日 论文答辩
七、参考文献
本网站部分文章转载自互联网以及作者的分享,如本网站所引用的文章涉及著作权问题, 请您及时通知本站,我们将及时妥善处理。