代码抄袭检测系统的设计和实现(1)--需求分析和基础架构

前言:

  其实挺意外的, 最近和大学的老师联系, 得知4年前写的代码抄袭检测系统还在运行, 又惊又喜, 还以为早就替换升级了.  千百次回眸, 可惜界面依旧不给面子的简陋, 不过"金窝, 银窝, 不如自家的草窝", 脑补之后, 越看越帅气, ^_^!!.

  

  让我们暂时抛开"娇俏动人"的web界面, 来谈谈背后"核心"的相似检测算法. 算法未必华丽, 效果未必惊艳, 但愿与大家一起分享, 与君共勉.

场景:
  让我们来玩个游戏, 假设我们是懒得"无可救药"的坏学生, 就是死活不做题, 一根筋的要走"抄袭"路线.
  How to do it?
  让我们来简单枚举下各自的方式:
  1). copy/paste
  老师: 呵呵, 也只能呵呵了
  2). 名称替换 (变量名/函数名)
  老师: 能有点创意不?
  3). 代码位置置换
  老师: 丢人.....
  4). 添加注释, 调整代码书写形式
  老师 (推推鼻梁上的眼镜): 有点意思 .....
  5). 简单重构 ( 函数合并和拆分 )
  老师 : 有进步, 看来还有救.......
  就此打住, 总之抄袭方法, 没有最好, 只有更好, 众人拾材火焰高, oh yeah.

需求分析:
  基于上述的场景, 我们把代码抄袭过程视为一次transform, 转换前后的代码应该是相似的.
  那么代码抄袭检测系统的基本功能, 列举如下所示:
  1). 相似代码检测的准确率高
  定义相似度算法, 能准确反映出代码之间的相似程度, 通过上述的抄袭方式转换的代码, 彼此之间的相似度高
  2). 相似代码对比的友好展示效果
  相似代码在两两对比时, 能通过染色+高亮的方式来强调突出可疑的相似区域, 而不需人肉对比了.
  3). 快速增量
  代码检测需快速响应, 在大数据量代码仓库下的情况, 依旧能快速检索.

难点解析:
  1). 相似度如何描述和定义
  不可否认, 自然语言和机器所能理解的语言, 存在着天然的鸿沟. 那如何从机器的角度去理解语言? 相似文本的检测算法, 是否可以套用到代码检测上? 好像不行, 简单的词袋模型, 并不能表述代码的特征(后续的文章详细阐述). 那代码的特征是什么, 它在那里?
  2). 相似代码对比的友好性
  这个似乎简单一点, 但它绝不是vimdiff那么简单
  3). 在大数据量的前提下, 如何支持快速检索
  显然相似检索时, 是不会遍历所有的代码做相似计算, 然后求出top n的.
  例如, 我们假设相似算法计算耗时10ms, 当代码集数量为10, 遍历一边耗时为100毫秒, 当如果代码集数量达到1万时, 需要耗时为100秒, 这显然无法接受.
  当然我们可以大致猜测的实现思路, 分如下两步骤
    (1). 快速检索出小数据集的候选集
    (2). 然后精确的计算该候选集的相似度, 并做top n排序
  如何去支撑该实现, 又该选用存储方案, 这是我们需要所面临的问题.
  而这一切, 所有的关键就是特征, 究竟代码的特征是谁? 从哪里来? 将要去哪里?
  先卖个关子,请期待后续的文章.

基础架构:

  抛开核心算法不谈, 检测系统的架构还是很明确的. 大致如下:

后续:
  不太清楚, 自己能写几篇, 下一篇文章会重点介绍代码相似度的定义和计算, 敬请关注.

时间: 2024-10-25 14:04:40

代码抄袭检测系统的设计和实现(1)--需求分析和基础架构的相关文章

单片机课程设计——基于51单片机温湿度检测系统的设计与实现

1 #include <reg52.h> 2 #include "1602.h" 3 #include "dht.h" 4 #include "2402.h" 5 6 //定义三个LED灯 7 sbit Led_qushi=P1^6; //去湿灯 8 sbit Led_jiangwen=P1^5; //降温灯 9 sbit Led_shengwen=P1^4; //升温灯 10 sbit Key_TH1 = P3^2; 11 sbit

浅析论文检测系统的发展历程

近日教育部针对目前的学术不端行为出台了<关于对学位论文作假行为的暂行处理办法(征求意见稿)>.办法中规定指导教师未尽到学术道德和学术规范教育.论文指导和审查把关等职责,其负责指导的学生学位论文存在购买.他人代写或者抄袭.剽窃等作假情形的,学位授予单位视情节轻重,可暂停其招生.取消指导教师资格,并可给予处分直至解除聘任合同等处理.于是各高校采取引用论文抄袭检测系统的方法检测学生的抄袭,高校学生必须通过了论文抄袭检测系统的检测才能获得正式答辩资格,目前本科院校也引用了这一系统. 现如今,本科院校的

Linux下一个简单的日志系统的设计及其C代码实现

1.概述 在大型软件系统中,为了监测软件运行状况及排查软件故障,一般都会要求软件程序在运行的过程中产生日志文件.在日志文件中存放程序流程中的一些重要信息, 包括:变量名称及其值.消息结构定义.函数返回值及其执行情况.脚本执行及调用情况等.通过阅读日志文件,我们能够较快地跟踪程序流程,并发现程序问题. 因此,熟练掌握日志系统的编写方法并快速地阅读日志文件,是对一个软件开发工程师的基本要求. 本文详细地介绍了Linux下一个简单的日志系统的设计方法,并给出了其C代码实现.本文为相关开发项目Linux

高校启用论文检测系统防止学生论文抄袭行为

日前各大高校为了防止申请博士.硕士.工程硕士专业学位人员的学位论文存在一些抄袭等学术不端的行为,高校各研究生培养单位普遍启用了论文检测系统,通过论文检测系统来对论文进行论文相似度检测,如果发现论文的抄袭率达到高校所要求的水平会要求重新对论文进行修改,如果论文抄袭率严重超标将会直接取消论文答辩资格,严重的会延期毕业. 哈尔滨某大学计算机系专业的李计同学说,导师说了,现在的毕业论文都需要经过一个学校论文检测系统的检测,哪里抄袭了.重复率是多少都能测得一清二楚,要他们老实些,不要抄袭.根据王同学说很多

基于ARM9的指纹识别系统的设计和实现

生物识别技术是利用人体固有的生理特性(如指纹.脸象.红膜等)和行为特征(如笔迹.声音.步态等)来进行个人身份的鉴定. 生物识别技术比传统的身份鉴定方法更具安全.保密和方便性.生物特征识别技术具有不易遗忘.防伪性能好.不易伪造或被盗.随身"携带"和随时随地可用等优点. 生物识别的工作原理是利用生物识别设备对生物特征进行取样,提取其唯一的特征并将其转化成数字代码,并进一步将这些代码组成特征模板,人们同识别设备交互进行身份认证时,识别设备获取其特征并与数据库中的特征模板进行比对,以确定是否匹

百科知识 学位论文学术不端行为检测系统简介

学位论文学术不端行为检测系统 研制介绍与使用方法 第一章 系统简介 1.1 系统概述 学位论文学术不端行为检测系统(简称"TMLC")以<中国学术文献网络出版总库>为全文比对数据库,实现了对抄袭与剽窃.伪造.篡改等学术不端行为的快速检测,可供用户检测学位论文,并支持用户自建比对库.其系统示意图如图1所示. 图1 检测系统示意图 1.2 系统技术路线介绍 TMLC 采用CNKI 自主研发的自适应多阶指纹(AMLFP)特征检测技术,具有检测速度快,准确率,召回率较高,抗干扰性强

基于网络(NIDS)的入侵检测系统

入侵(Instruction)是个 广义的概念,不仅包括被发起攻击的人取得超出合法权限的系统的控制权,也包括搜集漏洞信息,造成拒绝访问(Denial of service)等对计算机系统造成危害的行为. 通过被动地监测网络上传输的原始流量,对获取的网络数据进行处理,从中提取有用的信息,再通过与已知攻击特征相匹配或与正常网络行为原型相比较来识别攻击事件.此类检测系统不依赖操作系统作为检测资源,可应用于不同的操作系统平台:配置简单,不需要任何特殊的审计和登录机制:可检测协议攻击.特定环境的攻击等多种

电商 秒杀系统 设计思路和实现方法

电商 秒杀系统 设计思路和实现方法 2017年05月26日 00:06:35 阅读数:3662 1 秒杀业务分析 正常电子商务流程 (1)查询商品:(2)创建订单:(3)扣减库存:(4)更新订单:(5)付款:(6)卖家发货 秒杀业务的特性 (1)低廉价格:(2)大幅推广:(3)瞬时售空:(4)一般是定时上架:(5)时间短.瞬时并发量高: 2 秒杀技术挑战 假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要面对的技术挑战有: 对现有网站业务造

代码在线编译器(下)- 用户代码安全检测

此文已由作者姚太行授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前文连接 案例的介绍已在前文中给出,本文中对相关部分将不再叙述.为更好地阅读本文,需要简单了解背景,建议可以大致浏览下前文: 代码在线编译器(上)- 编辑及编译 安全检测 在线编译器中的安全检测,目的是确定用户代码是否能够安全的运行,且不对运行环境产生危害.仍以一般场景和特殊场景(前文有说明)举例区分: 一般场景:用户代码仅依赖原生库,运行环境选择沙箱情况下,沙箱间相互独立,用户代码导致的环境损害只会作用