前言:
其实挺意外的, 最近和大学的老师联系, 得知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排序
  如何去支撑该实现, 又该选用存储方案, 这是我们需要所面临的问题.
  而这一切, 所有的关键就是特征, 究竟代码的特征是谁? 从哪里来? 将要去哪里?
  先卖个关子,请期待后续的文章.

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

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

转载于:https://www.cnblogs.com/mumuxinfei/p/4043045.html

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

  1. 基于Vue和SpringBoot的论文检测系统的设计与实现

    作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue.SpringBoot和微信小程序).系统定制.远程技术指导. ...

  2. 基于神经网络的目标检测论文之目标检测系统:实时路况检测系统的设计与实现

    第五章 实时路况检测系统的设计与实现 物体识别技术被广泛应用于人们的生产生活中.随着深度学习与云计算的飞速发展,带动了物体识别技术产生质的飞跃.高分辨率图像和检测的实时性要求越来越高. 从本章开始,我 ...

  3. 基于单片机的空气检测系统的设计

    基于STM32的室内空气检测系统的设计 摘  要:为保证居民生活环境的安全性,应该对室内空气质量参数进行检测,使人们能够及时了解室内的空气质量,排除险情,该设计通过STM32单片机结合蓝牙通信和温湿度 ...

  4. 【转】知网论文反抄袭检测系统的算法与修改秘籍

    现在高校对于硕士和博士论文采用的检测系统,是由知网开发的.但该软件的具体算法,判定标准,以前一直不清楚, 本文是从知网内部工作人员哪里拿到的,揭示了知网反抄袭检测系统的算法,如何判定论文是抄袭,以及如 ...

  5. 【毕设狗】【单片机毕业设计】基于单片机的室内空气质量检测系统的设计

    软件安装: Keil:点击下载 Proteus:点击下载 AD:点击下载 Visio:点击下载 设计简介: 本设计是基于单片机的室内空气质量检测系统的设计,主要实现以下功能: 实现通过甲烷气体传感器检 ...

  6. 基于电容传感器的压力检测系统的设计

    基于电容传感器的压力检测系统的设计 本系统以电容式传感器为压力感应元件,将压力信号转换为相应的电信号,经ADC0809模数转化芯片将电信号转化为数学信号再经单片机在输出端显示电感式传感器所受到的压力值 ...

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

    本文主要介绍了怎么使用51单片机最小系统板和温湿度传感器制作一个温湿度检测系统. 本次设计主要涉及了温湿度的测量.显示以及实现简单控制.硬件方面有五个模块,即STC89C52单片机主控模块.传感器模块 ...

  8. 基于Python(Django)+MySQL 实现(Web)SQL智能检测系统的设计与实现【100010694】

    摘 要 为了满足不同的用户群体的需求,中国移动的套餐业务更新频繁,每个月都会推出很多个性化的套餐服务,当前,中国移动创建套餐的方式是手动编辑上百行 SQL 语句之后插入到数据库中,一旦 SQL 语句中 ...

  9. 操作系统读写者问题实验报告_基于S3C2410微处理器和操作系统实现光电测量仿真检测系统的设计...

    引言 动基座光电测量平台按载体的不同可分为车载.舰载.机载和星载四种.为了保证测量平台系统的可靠性和测量的准确性,平台在正式放到载体上运行之前需要进行仿真检测.目前的动基座光电测量仿真检测系统大多成本 ...

最新文章

  1. VS编译时output/Error list窗口自动弹出设置
  2. 企业官网营销,网站建设是第一步
  3. 030_自己实现一个HashSet
  4. 走进COM组件系列(二)
  5. C++实现包含空格、标点、字符、数字的字符串的逆序输出,并且还可以实现一句语言中每个单词的倒序输出
  6. 手机壳定制商城小程序系统 手机壳定制商城小程序源码
  7. 学生信息管理系统课程设计 java_java课程设计(学生信息管理系统)
  8. 关于GPS数据跳动问题的解决方案
  9. 嵌入式思维 、不深不浅的理解
  10. 耐得寂寞,拥得繁华 (转)
  11. PL/SQL——员工涨工资问题
  12. html页面打印a4尺寸,html网页打印A4样式
  13. python定义一个字符串变量_python基础入门语法和变量类型(一)
  14. 构建自定义安全令牌服务
  15. linux下硬件检测工具,Linux硬件检测工具
  16. linux基础知识总结(上)
  17. offer--刷题之路(持续更新)
  18. 计算机网络功能可归纳为,计算机网络的功能
  19. 西门子1200plc轴运动控制程序模板 调用轴控制块做的控制3个伺服
  20. js+canvas实现雨滴特效

热门文章

  1. 大华JAVA解决方案_大华Java案例 大致有三种在可能性: 1、动态库 dhplay 为32位 联合开发网 - pudn.com...
  2. 安全性和保密性设计---计算机病毒与防治
  3. 计算机二级 监控,计算机二级VB辅导:用VB编写网络监控软件
  4. matplotlib数据可视化
  5. vscode——HTML基本标签A标签超级链接
  6. 蔡徐坤哈哈哈mybatis
  7. utorrent 2.04 Firewall拒绝访问解决办法
  8. 猴子管理法则:管理者忙死,下属闲死,谁的错?
  9. Springboot整合Mybatis多数据源配置
  10. Python爬虫入门教程【15】:煎蛋网XXOO图片抓取