您好, 访客   登录/注册

一种基于编码习惯的SQL语句抄袭检测算法

来源:用户上传      作者:葛文馨 魏永山

  摘  要: 为了检测出数据库实验课程中结构化查询语言(Structured Query Language, SQL)语句代码的抄袭行为,发现因SQL语句篇幅较短,使用现有的技术进行代码检测却没有得到预期的结果,于是提出了一种基于编码习惯的SQL语句抄袭检测算法。获取学生历史的编码数据并分类,判定待检测代码的类别并将其与之类别相同的代码依照学生的编码习惯进行特征提取,进而得到特征矩阵并对比代码之间的相似程度,对涉嫌抄袭的代码进行过滤,判断该代码是否为该学生编写。实验结果表明,该算法能够有效地判断出学生的抄袭行为,同时也解决因编码篇幅较短而带来的难以检测是否为抄袭代码这一问题。
  关键词: 编码习惯;代码抄袭检测;朴素贝叶斯;SQL
  【Abstract】: In order to detect the plagiarism of the SQL statement code in the database experiment course, it is found that the SQL statement is short, and the existing technology is used to detect the code but the expected result is not obtained. Therefore, a SQL statement plagiarism detection based on coding habit is proposed. Obtaining the classification data of the student history and classifying it, determining the category of the code to be detected and extracting the code with the same category according to the coding behavior of the student, thereby obtaining the feature matrix and comparing the degree of similarity between the codes, for the suspected plagiarism. The code is filtered to determine if the code was written for the student. The experimental results show that the algorithm can effectively judge the plagiarism of students, and also solve the problem that it is difficult to detect whether it is plagiarism code due to the short length of coding.
  【Key words】: Coding behavior; Code plagiarism detection; Naive bayesian; SQL
  0  引言
  随着计算机技术的蓬勃发展,当今的教育模式也继而发生着巨大的改变。现如今的教育模式已经不仅仅是过去那种传统又单一的书本教育,而是逐渐发展成书本、互联网等多元化的形式,在线教育也应运而生。学生可以在课程辅助网站上进行相应课程的练习,以巩固提高在课堂上学习到的知识点。学生在网站上进行练习时会遇到需要编写代码才能完成的题目,该类题目设计的初衷是为了帮助学生掌握相关知识点,提高学生的编码技能以及熟练程度。然而,随着代码共享以及复制粘贴的方法越来越容易,初衷却越来越难以实现,反而抄袭的现象日益剧增,尤其是在学生和老师缺乏直接联系的在线教育网站中,毕竟在网络教育中难以对学生的做题过程进行监督,于是很难确定学生是否掌握此类知识,能否熟练准确地编写出相应的代码。为了能够检查出学生在做题的过程中是否存在抄袭行为,研究代码抄袭检测算法的学者与日俱增。他们提出多种不同的方法来对代码进行分析,并开发出一些有效的代码剽窃监测系统,而被广为使用的系统如JPlag[1]、Moss[2]、YAP3[3]等均采用串对比算法,将源码和执行流程进行处理转换成字符,使用串对比的算法对这些转换后的字符串进行相似度对比。国内外众多学者对这些检测系统中的算法进行改进,如Pawelczak等人[4]提出了一种基于源代码标记的思想,使用贪婪字符串平铺的方法對学生提交的代码进行抄袭检查;卫军超[5]使用Jplag中的GST(Greedy String Tilling)算法,提出了一种基于属性计数法和结构度量技术相结合的程序相似度计算方法;Wang等人[6]则是将Moss系统和抽象语法树模型进行融合,对Verilog代码进行剽窃检测;文献[7-9]都对Winnowing算法进行改进,使其能够判定文本或程序是否存在抄袭现象;文献[10]-[12]提出了不同的基于源码结构的抄袭检测系统,将程序源代码转换成带有结构特征的特征串并进行匹配计算代码之间的相似程度;文献[13]则是基于文本的重复代码的基础上通过词法分析并使用语法树对代码进行对比,筛选出重复的代码。
  由于现有的方法在对用户编写的代码进行抄袭检测时是将用户所编写的代码与其他用户编写的代码以及存在于网络或书籍中的代码进行相似度匹配,观察该用户是否存在抄袭行为。但是这些检测方法都是仅仅考虑到代码的语法特征,从而计算出的代码之间的相似程度,并没有将其与代码的编码规范进行结合,同时对于篇幅简短的代码检测效果往往不太理想。于是本文是在现有的代码抄袭检测技术的基础上,提出了一种基于编码习惯的抄袭检测的方法,使得抄袭检测不再局限于检测不同用户在同一题目中所提交的代码是否一致,提取该用户的编码习惯特征并进行分析,判断该用户所作答的代码是否存在抄袭行为。实验表明,本文提出的基于编码习惯的抄袭检测方法能够对学生提交的代码进行抄袭检测,判断出该代码是否为该学生所编写,进而提高抄袭检测的准确率。   1  基于编码习惯的抄袭检测算法
  1.1  编码习惯
  每个学生在编写计算机程序源代码时都会有一种独有的编码习惯。编码习惯,又称编码风格,是指学生在编写代码的过程中习惯使用某种特有的书写格式或内容。编码习惯通常因编程语言的不同而不同,例如在编写JAVA语言的源代码所使用的编码习惯和编写SQL语言的源代码所使用的编码习惯会有很大的不同。
  3  结论
  本文在现有的代码抄袭检测系统的基础上,为了检测出不同学生在编码过程中是否存在抄袭行为而提出了一种基于编码习惯的抄袭检测算法,通过对学生历史编码的数据进行分类,并对学生提交的待检测代码进行类别判定,将同类代码进行特征提取,进一步处理得到特征矩阵,并比较矩阵之间的相似程度。实验结果表明,使用该方法能够有效地检测出抄袭代码,有助于指导教师对学生的学习情况进行评估。
  参考文献
  [1]Prechelt L, Malpohl G, Philippsen M. Finding Plagiarisms among a Set of Programs with JPlag[J]. J Universal Computer Science, 2000, 8(11): 1016-1038.
  [2]Schleimer S, Wilkerson D S, Ailen A. Winnowing: local algorithms for document fingerprinting[C]//Proceedings of the 2003 ACM SIGMOD International Conference on Management of Data, San Diego, California, June 09-12, 2003. ACM Press, 2003: 76.
  [3]Wise M J. YAP3: Improved Detection of Similarities In Computer Program And Other Texts[J]. ACM SIGCSE Bulletin, 1996: 28(1).
  [4]Pawelczak D. Benefits and drawbacks of source code plagiarism detection in engineering education[C]//2018 IEEE Global Engi neering Education Conference (EDUCON), Tenerife, Islas Canarias, Spain, Apr. 17-20, 2018, IEEE, 2018: 1048-1056.
  [5]卫军超. 在线评测系统中代码剽窃检测技术的研究与实现[D]. 陕西: 西北农林科技大学, 2017.
  [6]Lisheng Wang, Lingchao Jiang, Guofeng Qin. A Search of Verilog Code Plagiarism Detection Method[C]//2018 13th Inter national Conference on Computer Science & Education (ICCSE). Sri Lanka, Colombo, Aug. 8-11, 2018 IEEE, 2018: 1-5.
  [7]趙萌萌. 基于数字指纹的文本抄袭检测算法研究[D]. 浙江: 杭州电子科技大学, 2017.
  [8]殷丹平. 基于CNN的代码相似度检测研究与代码查重系统[D]. 北京: 北京邮电大学, 2018.
  [9]段旭良, 杨洋, 王曼韬等. 一种扩展Winnowing剽窃检测算法[J]. 计算机工程与科学, 2017, 39(12): 2245-2251.
  [10]杨超. 基于多种技术的混合式程序代码抄袭检测方法[J]. 计算机工程与应用, 2016, 52(18): 222-227.
  [11]Arabyarmohamady S, Moradi H, Asadpour M. A coding style-based plagiarism detection[C]//Proceedings of 2012 Inter national Conference on Interactive Mobile and Computer Aided Learning (IMCL). Amman, Jordan, Nov. 6-8, 2012, IEEE, 2012: 180-186.
  [12]孙芬芬. 基于源码结构相似度检测系统的设计与实现[D]. 内蒙古: 内蒙古大学, 2017.
  [13]刘伟,宾航飞,胡志刚. 一种改进的基于文本的重复代码自动识别方法[J]. 软件, 2018, 39(10): 68-73.
  [14]李航. 统计学习方法[M]. 北京: 清华大学出版社, 2012.
  [15]周志华. 机器学习[M]. 北京: 清华大学出版社, 2016.
  [16]胡燕祝, 权桁, 艾新波. 复杂网络全局拓扑相似度计算方法实证研究[J]. 软件, 2015, 36(9): 16-20.
  [17]刘宇帅, 高广宇. 基于相似性判断的广告片段检索[J]. 软件, 2012, 33(10): 25-27.
  [18]韩如冰, 叶得学. 基于VSM的权重改进文档相似度算法研究[J]. 软件, 2012, 33(10): 103-105.
转载注明来源:https://www.xzbu.com/8/view-15072602.htm