计算机教学中的抄袭检测及其社会网络分析研究

2018-01-31 07:49王林玉
计算机教育 2018年1期
关键词:网络分析程序设计代码

王林玉,黄 俭

(1. 云南能源职业技术学院 计算机系,云南 曲靖 655000;2. 曲靖师范学院 信息与工程学院,云南 曲靖 655000)

0 引 言

高校程序设计类课程的教师几乎都遇到过学生编程作业中的抄袭现象。特别是近年来,随着网络信息化和移动互联网的深入普及,学生可以有更多的方式从互联网或同学处复制代码,几乎无需时间成本和脑力成本,致使抄袭率有增高的趋势。国外最近的一项调查中发现大约有 33%学生承认曾经抄袭[1];另一项研究中, 教学人员对学生从2003—2013 年的4 门编程作业进行分析,发现有 1%~10%比例的抄袭, 而且呈逐年增长趋势[2]。另外,程序设计课程作为专业基础课,多为合班开课,班级规模大,而且有些学生在复制代码时还做了一些类似代码混淆的操作(标识符重命名、注释删除、格式及布局调整等),这种情况下,人工判别抄袭或简单的自动检测已不具可操作性。因此,高效准确地检测学生编程作业中的抄袭现象,保证教学效果,是授课教师迫切需要面对的问题。

1 源码抄袭检测技术

在程序设计类课程中,学生作业多为在线提交源代码,因此,抄袭检测是在源码存在的场景下进行的。由于大学生群体的特殊性,作业抄袭主要采用人工修改的方式,手段限定在词法、语法、语义3方面的变换,而且大部分学生作业的抄袭集中在前两种[3]。

依据抽象方式的不同,源码抄袭检测技术分为基于属性统计和基于结构分析两大类[4]。

基于属性统计的抄袭检测技术,其基本思想是通过对源代码中的各项度量指标如操作符个数、操作数个数、操作符总数、操作数总数、变量总数等进行统计,将软件转换成一个n维向量,每个维度指定软件的一项度量指标,从而将其映射成n维笛卡尔空间中的一个点,最后基于该空间中不同点(软件)间的距离实现抄袭的判定[5-6]。该方法是对整个软件的度量,在抽象的过程中丢弃了过多的软件结构信息,根据此方法设计的检测系统经常会存在漏报或误报的情况,简单的代码混淆就可以躲避检测。近年来,虽然有研究者通过聚类分析、BP神经网络和人工智能的方法改进此类方法,但是仅限于研究阶段,代表性的技术和工具有Ottenstein’s system等,普遍性和实用性并不是很强。

基于结构分析的抄袭检测技术,有基于token、树和图3种。目前主流的检测系统中大多采用token技术,如MOSS、JPlag、Sherlock、YAP3、Sim、SID等,解析速度快,实用性强。

2 MOSS系统检测结果

MOSS系统的主机运行在类UNIX系统上,授课教师只需在官网注册MOSS账号,然后利用官网提供的提交脚本,将学生的作业集传给MOSS,就可以等待检测结果。

通常授课教师会很快收到MOSS的输出,其中包含一个网址,打开后可以看到程序相似度的检测结果,如图1所示,该网页将会保留两个星期。

点开某一对程序(如File 1和File 2)相似度比较的链接,可以显示代码相似的那一部分,如图2所示。

得到检测结果后,可以将其存储为csv文件,以备下一步数据可视化分析之用。

3 数据可视化及社会网络分析

教师布置编程作业,然后学生之间进行交流、解答,这一过程可以抽象成一种社会网络活动。有了MOSS提供的软件相似度分析数据之后,可以采用社会网络分析工具对学生的作业情况进行分析。

社会网络分析是采用图论等数学方法,通过研究大量个体(个人、组织等社会活动参与方)间的关系以寻找社会系统表面下的内在规律[7-8]。社会网络分析方法已经被广泛应用于推荐系统、电子商务系统、舆情监控系统等多种具体的应用中,并且在现代社会学、人类学、社会语言学、地理、社会心理学、资讯科学、经济学、生物学等领域的研究中发挥了重要作用[9]。目前,社会网络分析领域的代表性软件有4款:nodeXL、Pajeck、Gephi和NetworkX。其中,nodeXL、Pajeck和Gephi是独立软件,NetworkX只提供功能函数接口,需要编程调用后进行分析。

鉴于本文所针对的抄袭检测研究对象,采用免费的跨平台软件Gephi进行分析。Gephi是一个开源的社会网络分析及可视化软件包,采用Java语言,最初在NetBeans平台上实现,系统开放性好,文档丰富,适合初涉社会网络分析的研究者。

使用Gephi对MOSS检测结果进行分析后,得到图3所示的可视化结果。图中数字部分为学生的学号,连线部分为学生作业之间的相似度,以线条粗细进行表征。该图其实也从一定程度上反映了学生之间的社会关系,如单独一对相似度高的学号对应的学生很有可能是情侣,4~6个相似度高的组合极有可能是同一宿舍的学生。

图1 MOSS检测系统的检测结果

图2 程序的相似代码区域

图3 检测结果的可视化呈现

4 抄袭判定及课程评分

判定学生的作业抄袭应该是一件非常严肃的事情,不能仅凭机器的相似度检测来判定。抄袭判定通常是按如下流程进行。

首先,授课教师从检测结果确定怀疑对象,然后成对地通知学生,让他们知晓作业相似度的情况并当面说明。如果一个学生是有意让另一个学生抄袭,那么都判定为作业不及格。如果学生是无意被抄袭(作业打印稿、磁盘丢失,文件被窃取等情况),那么只判定抄袭者为不及格,被抄袭者正常给分。有时,在面谈阶段,学生会坚称没有抄袭,但此时研究他们代码重复部分,发现包含有程序非必要的括号、常量定义以及一些相同的冗余语句,则可判定为抄袭,此时,双方都将判定为不及格。

其次,有时作业的相似性是因为学生都按教科书上的例子进行解答,导致MOSS检测到高的相似度,此时要注意甄别。

最后,有时会出现相似度非常高的两份作业,但这两个学生又确实没有互相抄袭。这种情况通常是他们同时抄袭于不在同一群体的“第三者”。这个“第三者”有可能是高年级学生,也有可能是互联网上的习题解答。

当然,抄袭检测只是手段,并不是目的。为了更加客观地评价学生在编程上的学习水平,教师可以在评价机制上也作出调整,如降低作业得分在总成绩中的比重,提高课堂即时测验得分在总成绩中的比重。

5 结 语

在2015—2016学年度,我们已开始采用MOSS结合Gephi进行抄袭检测判定,并在面向对象程序设计课程开课前就明确告知学生,该学年75个学生中有20人因抄袭被判定为课程成绩不合格。在接下来的2016—2017学年度,90名学生中,6人因抄袭判定没有拿到课程学分,抄袭率下降约20%。研究的结果表明,在获取程序相似度之后,再进行社会网络分析,对学生的抄袭行为具有较好的警戒作用,学生作业抄袭率显著下降,为减少学生程序设计作业抄袭现象提供了一种新的思路。

[1]Chuda D, Navrat P, Kovacova B, et al. The issue of (software) plagiarism: A student view[J]. IEEE Transactions on Education, 2012,55(1): 22-28.

[2]Rosales F, Garcia A, Rodriguez S, et al. Detection of plagiarism in programming assignments[J]. IEEE Transactions on Education,2008, 51(2): 174-183.

[3]田振洲, 刘烃. 软件抄袭检测研究综述[J]. 信息安全学报, 2016, 1(3): 52-76.

[4]Chow T W S, Rahman M K M. Multilayer SOM with tree-structured data for efficient document retrieval and plagiarism detection[J]. IEEE Transactions on Neural Networks, 2009(20): 1385-1402.

[5]Shen Y, Li S C, Tian C G, et al. Research on anti-plagiarism system and the law of plagiarism[C]//First International Workshop on Education Technology and Computer Science. Washiongton D C: IEEE, 2009: 296-300.

[6]Yang S, Wang X. A visual domain recognition method based on function mode for source code plagiarism[C]//Third International Symposium on Intelligent Information Technology and Security Informatics. Washington D C: IEEE, 2010: 580-584.

[7]张莉, 周祖林. 代码相似性检测在程序设计教学中的应用[J].计算机教育, 2009(13): 117-228.

[8]王春晖, 程金宏. 程序代码相似性检测技术在教学中的应用[J].计算机教育, 2007(12): 137-139.

[9]Hu C G, Zhu L J. Complex network software analysis and evaluation[J]. Digital Library Forum, 2010(5): 33-39.

猜你喜欢
网络分析程序设计代码
基于交通运输业的股票因果网络分析
基于ISM模型的EPC项目风险网络分析
低轨卫星互联网融合5G信息网络分析与应用
医学专业“Python程序设计”课程教学改革总结与思考
基于Visual Studio Code的C语言程序设计实践教学探索
认知重评和表达抑制情绪调节策略的脑网络分析:来自EEG和ERP的证据*
从细节入手,谈PLC程序设计技巧
创世代码
创世代码
创世代码