1.本发明涉及程序语言教学技术领域,具体涉及基于程序语言教学实践平台的代码抄袭检测方法及系统。
背景技术:2.随着社会科技的进步和发展,智能教学也更多的应用于各大高校之间。在实践教学场景中,由于学生数量远远多于教师数量,导致教师的作业批改时间在整个教学时间中占比较大,而现有的教学实践平台虽然提供了作业批改功能,但是教师往往还需要花费很多时间用于排查学生的作业代码抄袭情况。学生在线提交作业后,教师需要对每一份作业进行审阅,而作业代码抄袭的现象在教学过程中屡禁不止,因此本发明用于批改作业前,对提交的作业做代码抄袭对比,得出可能的作业代码抄袭样本,以减少教师排查时间,减轻教师负担。
3.已有的发明多是对代码或加工后的代码进行语义、特征分析,对变量、函数重命名、重构、修改代码格式特征进行检测,可以大致分为两个阶段:转换代码格式和确定代码相似度。首先将代码经过无关项剔除,以某种算法将代码包装成待对比代码,其次对待对比代码进行相似度比对,最终获得代码相似度对比结果。
4.现有的作业代码抄袭检测方案只是简单的对作业代码进行相似度对比检测,没有结合具体的使用场景,导致对比检测结果脱离实际,缺乏现实意义,更不具有连续性。所以现有的作业代码抄袭检测方案仅仅是从代码相似度进行分析,并不结合学生的实际行为,如日常表现、作业提交时间等,所得数据程式化,供给教师的参考意义不大。
技术实现要素:5.针对上述现有技术存在的问题,本发明提供了一种基于程序语言教学实践平台的代码抄袭检测方法及系统,不仅完成了学生作业代码相似度的检查,更融合学生的作业表现及长期表现,提高最终抄袭结果的可信度。
6.为达到上述目的,本技术实施例的技术方案是这样实现的:
7.一方面,本技术实施例提供基于程序语言教学实践平台的代码抄袭检测方法,包括:
8.获取两个作业代码,基于作业代码内容进行匹配对比,确定两个作业代码的相似度;
9.对所述相似度进行处理,获取两个作业代码的最终代码抄袭检测结果,所述对所述相似度进行处理包括将第一参数作用于所述相似度数据,所述第一参数基于学生在编辑作业代码时的编辑操作特征生成。
10.在一种可选的实施例中,所述第一参数的生成还基于学生的历史抄袭行为特征和教师对学生的抄袭可能性评分。
11.在一种可选的实施例中,所述第一参数的获取包括:
12.基于学生在编辑作业代码时的编辑操作特征,计算学生编辑作业过程的第一抄袭可信度参数;
13.基于学生的历史抄袭行为特征,计算学生的第二抄袭可信度参数;
14.基于教师对学生的抄袭可能性评分,计算学生的第三抄袭可信度参数;
15.基于第一抄袭可信度参数、第二抄袭可信度参数、第三抄袭可信度参数融合得到第一参数。
16.在一种可选的实施例中,所述学生在编辑作业代码时的编辑操作特征包括:
17.键盘输入操作、拷贝和粘贴操作、代码静态分析操作、作业调试操作、作业运行操作、作业保存操作、作业提交操作;
18.所述第一抄袭可信度参数a3为:
19.其中,学生拷贝粘贴代码次数p1,程序语言教学实践平台对作业代码所做的静态分析结果p2,是否做过在线调试运行p3以及在线调试运行结果p4,作业提交时间p5。
20.在一种可选的实施例中,所述对所述相似度进行处理,获取两个作业代码的最终代码抄袭检测结果x(m,n),包括:
21.x(m,n)=y(m,n)s(am,an),其中,m为一个作业代码,n为另一个作业代码,y(m,n)为作业代码m和n的相似度,am和an分别为作业代码m和n的第一参数。
22.在一种可选的实施例中,所述获取两个作业代码,包括:
23.基于所有学生提交的作业代码,通过作业对应的测试例对代码进行通过测试;
24.获取测试结果,将测试结果相同的作业封装在同一个代码文件中,以相互独立的命名空间分隔,并附加学生信息作为空间名;
25.在同一代码文件中获取两个学生提交的作业代码。
26.在一种可选的实施例中,所述基于作业代码内容进行匹配对比,确定两个作业代码的相似度,包括:
27.对两个作业代码封装在两个相互独立的工作空间中;
28.将作业代码进行格式转化和无关数据清洗;
29.将作业代码中文本不同但语义相同的词句编译为相同文本,获取中间代码;
30.对两个中间代码通过lcs函数进行相似度对比,获取两个作业代码的相似度。
31.再一方面,本技术实施例提供基于程序语言教学实践平台的代码抄袭检测系统,包括:
32.作业代码文本相似度分析模块,用于获取两个作业代码,基于作业代码内容进行匹配对比,确定两个作业代码的相似度;
33.作业代码抄袭检测模块,用于对所述相似度进行处理,获取两个作业代码的最终代码抄袭检测结果,所述对所述相似度进行处理包括将第一参数作用于所述相似度数据,所述第一参数基于学生在编辑作业代码时的编辑操作特征生成。
34.又一方面,本技术实施例还提供一种电子设备,所述电子设备包括:
35.处理器;
36.用于存储处理器可执行指令的存储器;
37.其中,所述处理器通过运行所述可执行指令以实现上述基于程序语言教学实践平台的代码抄袭检测方法。
38.又一方面,本技术实施例还提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被处理器执行时实现上述基于程序语言教学实践平台的代码抄袭检测方法的步骤。
39.本发明的基于程序语言教学实践平台的代码抄袭检测方法及系统,具备如下有益效果:
40.1、本发明是为语言教学实践课程提交作业的场景程序化,针对学生提交的课程作业统一由程序做初步筛选,通过作业代码抄袭检测算法来完成抄袭对比检测,为教师批改作业节省人工评审时间,提高作业批改效率,增加作业代码抄袭的检测准确率,遏制不良学习习惯,提高教学质量。
41.2、本发明不同于现有技术中仅通过代码文本的相似性分析确定是否抄袭,在对代码文本的相似性计算后,还结合具体的教学实践使用场景,结合学生在编辑作业代码时的编辑操作特征,比如复制和粘贴操作等、作业提交时间等因素,对代码文本的相似性进行进一步整合,使得与教学场景相结合的作业代码抄袭结果更加精准。
42.3、本发明对代码文本的相似性进行进一步整合,还加入了教师对于学生的抄袭行为可能性评判和学生的历史抄袭行为特征,统筹后得到最终的抄袭结果,使得与教学场景相结合的作业代码抄袭结果更加精准。
附图说明
43.图1是本技术实施例中基于程序语言教学实践平台的代码抄袭检测方法的流程图;
44.图2是本技术实施例中的第一参数的获取方法流程图;
45.图3是本技术实施例中的基于程序语言教学实践平台的代码抄袭检测系统的结构图。
具体实施方式
46.为了使本技术的目的、技术方案和优点更加清楚,下面将结合附图对本技术作进一步地详细描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。
47.需要说明的是,本技术的文件中涉及的术语“包括”和“具有”以及它们的变形,意图在于覆盖不排他的包含,例如,包含一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
48.以下对本技术实施例中的部分用语进行解释说明,以便于本领域技术人员理解。
49.(1)代码相似度:衡量代码相似程度的量,多为百分比。
50.(2)代码格式化:将代码按照某种规律排列成有序的样式。
51.(3)代码量:衡量代码数量的多少,多以行为单位。
52.(4)无效代码:程序中从未执行过的代码。
53.(5)冗余代码:程序经过优化后代码量减少了,能达到同样的目的且执行效率增强,那么减少的代码就是冗余代码。
54.(6)中间代码:一种面向语法,易于翻译成目标程序的源程序的等效内部表示代码。
55.(7)在线ide:本发明提供的线上编程的集成开发环境。
56.(8)静态分析:在不运行程序的条件下,进行程序分析的方法。
57.(10)机器学习:机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式,并将现有内容进行知识结构划分来有效提高学习效率。
58.下面结合附图及具体实施例对本技术作进一步详细的说明。
59.在实践教学场景中,由于学生数量远远多于教师数量,导致教师的作业批改时间在整个教学时间中占比较大,而现有的教学实践平台虽然提供了作业批改功能,但是教师往往还需要花费很多时间用于排查学生的作业代码抄袭情况。本技术实施例提供了一种基于程序语言教学实践平台的代码抄袭检测方法、系统、电子设备、计算机可读存储介质,对于学生提交的作业代码进行相似度比对,获得代码相似度对比结果,进一步根据学生以及作业的特性,结合学生历史抄袭情况、当前作业编辑行为、当前作业提交时间等因素,再整合代码相似度对比结果。同时也加入了教师对于学生的主观评判,统筹后得到最终的抄袭结果,再结合教师的人工评审,使得与教学场景相结合的作业代码抄袭结果更加精准。
60.本技术实施例提供的基于程序语言教学实践平台的代码抄袭检测方法,包括:
61.步骤s1,获取两个作业代码,基于作业代码内容进行匹配对比,确定两个作业代码的相似度;
62.其中,两个作业代码是指可能存在抄袭现象的两个学生提交的作业代码,本技术实施例中,基于作业代码内容进行匹配对比,可以是基于对两份作业代码的文本内容进行词语和句子的相似性或相同性判断。
63.步骤s2,对所述相似度进行处理,获取两个作业代码的最终代码抄袭检测结果,所述对所述相似度进行处理包括将第一参数作用于所述相似度数据,所述第一参数基于学生在编辑作业代码时的编辑操作特征生成。
64.不同于现有技术中仅通过代码文本的相似性分析确定是否抄袭,本技术实施例中,在对代码文本的相似性计算后,还会结合具体的使用场景,结合学生在编辑作业代码时的编辑操作特征,比如复制和粘贴操作等、作业提交时间等因素,对代码文本的相似性进行进一步整合,使得与教学场景相结合的作业代码抄袭结果更加精准,可以理解,该第一参数可以是表征学生提交的作业代码存在抄袭的可信度的参数,基于第一参数作用于所述相似度数据,得到两个作业代码的最终代码抄袭检测结果,当该抄袭检测结果超过预设阈值时,判定两个作业代码存在抄袭行为。
65.其中,学生提交作业的过程中,在线ide的编辑行为也会被记录下来,包括键盘输入操作,拷贝、粘贴操作,程序分析、代码调试、运行等相关操作,用户操作的时间点等,以下述几点为例:
66.拷贝、粘贴的次数与抄袭的可能性为正相关;
67.键盘输入数、修改次数与抄袭的可能性为负相关;
68.第一次提交作业的时间越接近deadline,越有抄袭的可能;最后一次修改时间越晚,抄袭的概率越低;
69.所以,本技术实施例中,对于第一参数的获取融合了学生在编辑作业代码时的编辑操作特征。
70.上述第一参数的生成还基于学生的历史抄袭行为特征和教师对学生的抄袭可能性评分。
71.具体地说,在一些实施例中,步骤s2中的第一参数还考虑了学生的历史抄袭行为特征和教师对学生的抄袭可能性评分,加入教师对于学生的评判,统筹后得到最终的抄袭结果,再结合教师的人工评审,使得与教学场景相结合的作业代码抄袭结果更加精准,其中教师对于学生的评判,是教师根据学生的日常表现为学生发生抄袭可能性的评判。
72.本技术实施例,第一参数融合了学生的作业编辑操作特征、学生的历史抄袭行为特征和教师对学生的评判,在语言教学实践的场景下,对学生提交的作业代码进行抄袭对比,综合参考学生的作业编辑行为、作业执行结果、作业提交时间等其他因素,以及教师给定的学生实际表现行为,最终与代码相似度数据结合,经过算法计算得到学生的最终抄袭结果,不仅完成了学生作业代码相似度的检查,更融合学生的作业表现及长期表现,提高最终抄袭结果的可信度,抄袭检测结果具有连续性。
73.在一些实施例中,步骤s2中的第一参数的获取包括:
74.基于学生在编辑作业代码时的编辑操作特征,计算学生编辑作业过程的第一抄袭可信度参数;
75.基于学生的历史抄袭行为特征,计算学生的第二抄袭可信度参数;
76.基于教师对学生的抄袭可能性评分,计算学生的第三抄袭可信度参数;
77.基于第一抄袭可信度参数、第二抄袭可信度参数、第三抄袭可信度参数融合得到第一参数。
78.示例性的,对于学生的第二抄袭可信度参数,可以采用如下步骤获取:
79.基于对该学生历史抄袭行为发生的时间进行统计,确定抄袭行为的频率特征和抄袭行为的发生规律,所述抄袭行为的发生规律包括由历史作业代码中发生抄袭行为的统计确定的发生抄袭行为的概率以及所述历史抄袭行为的权重,所述历史抄袭行为的权重基于与上一次抄袭行为的发生时间间隔确定,在一种实施方式中,与上一次抄袭行为的发生时间间隔越长,则本次发生抄袭行为的权重越小;
80.根据历史频率特征和历史抄袭行为的发生规律,对当前作业代码发生抄袭行为的概率进行预测,将所述预测概率作为第二抄袭可信度参数,其中进行概率预测可以采用神经网络模型进行。
81.本技术实施例中,对于学生的第二抄袭可信度参数,同样结合学生的历史作业表现进行动态变化,提高最终抄袭结果的可信度。
82.同理,本技术实施例中,对于学生的第三抄袭可信度参数,也可以基于学生的历史课程表现进行动态变化,例如,教师根据学生的历史课堂表现包括考勤情况、课堂积极性、作业优良评价结果等对学生进行综合评价,评估学生发生抄袭行为的可能性,作为学生的第三抄袭可信度参数。
83.当然,第二抄袭可信度参数和第三抄袭可信度参数的动态更新可以是基于每次作业代码进行一次更新,也可以是基于一段时间比如若干个学习课时等进行一次更新。
84.上述基于第一抄袭可信度参数a1、第二抄袭可信度参数a2、第三抄袭可信度参数a3融合得到第一参数a,可以是:a=∑(a1h1,a2h2,a3h3)
85.在一些实施例中,所述学生在编辑作业代码时的编辑操作特征包括:
86.键盘输入操作、拷贝和粘贴操作、代码静态分析操作、作业调试操作、作业运行操作、作业保存操作、作业提交操作;
87.所述第一抄袭可信度参数a1为:
88.其中,学生拷贝粘贴代码次数p1,程序语言教学实践平台对作业代码所做的静态分析结果p2,是否做过在线调试运行p3以及在线调试运行结果p4,作业提交时间p5。
89.本技术实施例中,基于学生在编辑作业代码时的编辑操作特征进行综合判断学生的第一抄袭可信度参数,当然,对于第一抄袭可信度参数的获取也可以基于如下步骤:
90.获取历史作业代码的所有学生在编辑作业代码时的编辑操作特征,包括每个学生每次作业代码编辑过程中的键盘输入数、拷贝和粘贴操作数、修改次数、第一次提交作业的时间、最后一次修改时间等;
91.基于每个学生的每次作业代码编辑过程的编辑操作特征作为训练样本,将每个学生的每次作业代码是否发生抄袭的结果作为训练样本的标注数据,通过训练神经网络获取作业代码编辑操作特征和发生抄袭行为之间的预测模型;
92.基于所述预测模型,将学生的每次作业代码编辑过程的编辑操作特征提取并输入到预测模型,获取学生在编辑作业代码时的第一抄袭可信度参数。
93.上述对所述相似度进行处理,获取两个作业代码的最终代码抄袭检测结果x(m,n),包括:
94.x(m,n)=y(m,n)s(am,an),其中,m为一个作业代码,n为另一个作业代码,y(m,n)为作业代码m和n的相似度,am和an分别为作业代码m和n的第一参数。
95.本技术实施例中,基于第一参数作用于所述相似度数据,得到两个作业代码的最终代码抄袭检测结果,当该抄袭检测结果超过预设阈值时,判定两个作业代码存在抄袭行为。
96.本技术实施例中,获取两个作业代码,包括:
97.基于所有学生提交的作业代码,通过作业对应的测试例对代码进行通过测试;
98.将测试结果相同的作业存储到同一作业集中;
99.在同一作业集中获取两个学生提交的作业代码。
100.每一道上机作业都会配备由教学实践平台提供的模板、样例代码以及若干个测试例,本技术实施例中,将测试例通过情况作为抄袭判定的参考因子之一,对比的两份作业代码若通过率一致且通过/未通过的测试例相同,那么这两份代码被判定为抄袭的概率也会随之增大。
101.本技术实施例中,对每个作业代码的测试例通过情况进行统计分析,对通过情况相同的作业代码归为同一作业集中,同一作业集中的任意两个作业代码之间发生抄袭的可
能性较大,具体的,该过程可以是测试结果相同的作业封装在同一个代码文件中,以相互独立的命名空间分隔,并附加学生信息作为空间名,以便于后期进行相似度对比操作。
102.本技术实施例中在进行两个作业代码的相似性判断前,先基于代码的测试例通过情况对需要进行作业代码相似性判断的作业代码进行筛选分类,避免了直接对任意两个学生提交的作业代码一一进行相似性比较,减小了相似性比较的计算量,提高了抄袭检测的效率。
103.在一些实施例中,上述基于作业代码内容进行匹配对比,确定两个作业代码的相似度,包括:
104.对两个作业代码封装在两个相互独立的工作空间中;
105.将作业代码进行格式转化和无关无效数据清洗;
106.将作业代码中文本不同但语义相同的词句编译为相同文本,获取中间代码;
107.对两个中间代码通过lcs函数进行相似度对比,获取两个作业代码的相似度。
108.现有技术中,对作业代码进行抄袭检测时,采用的相似性度量方法,多是对代码或加工后的代码进行语义、特征分析,对变量、函数重命名、重构、修改代码格式特征进行检测,可以大致分为两个阶段:转换代码格式和确定代码相似度。首先将代码经过无关项剔除,以某种算法将代码包装成待对比代码,其次对待对比代码进行相似度比对,最终获得代码相似度对比结果。
109.本技术实施例中,对于待进行相似度计算的两个作业代码:
110.第一步,通过代码格式化工具将每一份代码的文本格式处理成一致的格式以便于后续的抄袭对比;
111.第二步,将代码中的无效行去除,包括注释行、空行、空语句行等;
112.第三步,对代码进行静态分析,删除可能干扰代码相似度对比的无效代码和冗余代码;
113.第四步,将学生提交的作业源代码编译成中间代码,排除不同命名、不同但等效的控制语句等可能干扰代码相似度对比的情况;
114.第五步,基于上述中间代码,对两个作业代码的字符数据一一对比,得到代码相似度结果。
115.其中,对作业代码进行抄袭对比检测前,本技术实施例使用静态代码分析技术,排除无效代码和冗余代码,极大提高了对比结果的准确性;对作业代码的抄袭对比检测过程是建立在将代码抽象、包装基础之上,是对中间语言的分析对比,排除了可变干扰项后所做的相似度对比。
116.与上述的基于程序语言教学实践平台的代码抄袭检测方法基于同一发明构思,本技术实施例中还提供了一种基于程序语言教学实践平台的代码抄袭检测系统,该代码抄袭检测系统可以布设在服务器或终端设备中。由于该代码抄袭检测系统是本技术实施例代码抄袭检测方法对应的系统,并且该代码抄袭检测系统解决问题的原理与该方法相似,因此该代码抄袭检测系统的实施可以参见上述代码抄袭检测方法的实施,重复之处不再赘述。
117.本技术实施例提供的一种基于程序语言教学实践平台的代码抄袭检测系统,包括:
118.作业代码文本相似度分析模块,用于获取两个作业代码,基于作业代码内容进行
匹配对比,确定两个作业代码的相似度;
119.作业代码抄袭检测模块,用于对所述相似度进行处理,获取两个作业代码的最终代码抄袭检测结果,所述对所述相似度进行处理包括将第一参数作用于所述相似度数据,所述第一参数基于学生在编辑作业代码时的编辑操作特征生成。
120.在一种可选的实施例中,作业代码抄袭检测模块包括:
121.第一抄袭可信度参数获取单元,用于基于学生在编辑作业代码时的编辑操作特征,计算学生编辑作业过程的第一抄袭可信度参数;
122.第二抄袭可信度参数获取单元,用于基于学生的历史抄袭行为特征,计算学生的第二抄袭可信度参数;
123.第三抄袭可信度参数获取单元,用于基于教师对学生的抄袭可能性评分,计算学生的第三抄袭可信度参数;
124.第一参数获取单元,用于基于第一抄袭可信度参数、第二抄袭可信度参数、第三抄袭可信度参数融合得到第一参数。
125.需要说明的是:本实施例提供的代码抄袭检测系统在进行抄袭检测时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将代码抄袭检测系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
126.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
127.与上述方法实施例相对应地,本技术实施例还提供了一种电子设备,该电子设备可以是服务器,所述电子设备包括:
128.处理器;
129.用于存储处理器可执行指令的存储器;
130.其中,所述处理器通过运行所述可执行指令以实现如上所述的基于程序语言教学实践平台的代码抄袭检测方法。
131.其中,对于用于数据处理的处理器而言,在执行处理时,可以采用微处理器、cpu、dsp或fpga实现。对于存储器来说,存储器可以是易失性存储器或非易失性存储器,也可包括易失性和非易失性存储器两者,存储器中存储有操作指令,该操作指令可以为计算机可执行代码,通过该操作指令来实现上述本技术实施例的代码抄袭检测方法的流程中的各个步骤。
132.与上述方法实施例相对应地,本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机指令,所述指令被处理器执行时实现如上所述的基于程序语言教学实践平台的代码抄袭检测方法。
133.该计算机可读存储介质可以是只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、只读光盘(compact disc read-only memory,cd-rom)、磁带、软盘和光数据存储节点等。
134.本发明不局限于上述具体的实施方式,本领域的普通技术人员从上述构思出发,不经过创造性的劳动,所做出的种种变换,均落在本发明的保护范围之内。