1.研究基本内容:
本次研究在前人已有的基础上,主要做以下几方面工作:
1)通过深入研究现在已有的代码重复性检测算法,深入了解代码抄袭检测的难点和要点。其中代码相似度阈值选取直接影响检测精度——阈值过大易导致遗漏抄袭,或者仅需要通过简单修改即可躲过检测;阈值过小易导致误判,加大人工作业量。同时,程序规模对阈值的确定也有着较为重要影响,例如在1000行代码中,有400行为相同代码,那么可以认为抄袭嫌疑较大,但相似度仅为0.4。因此,如何提高检测准确率和运行效率是重要解决问题;
2)深入研究XML语言,为实际开发打下基础;
3)确定整个检测算法基本工作原理:将C代码中的语句属性存储为具有结构性的XML文本的标记字符串,针对文本每行不同的标记调用不同的相似值计算函数以计算XML文本行的相似值,最后根据各行相似值计算程序相似度。同时,通过各个文本的标记属性与字符串匹配算法相结合,提高系统运行效率。
2.拟解决主要问题:
1)确定整个算法设计流程,大致为:C代码转换为XML文本;关键结构识别;以关键结构为基础分别计算每个XML文本行的相似值;根据各个文本行相似值计算程序对相似度。
2)选择合适的相似度计算算法:由于XML文本的结构特征,需要将关键结构分类以按行计算相似值。C程序的关键结构主要分为以下几类:变量定义、指针、结构体、宏定义、函数调用、函数声明、循环结构、条件结构。不同的关键结构应对应相应的相似度计算函数。以循环结构为例:循环结构抄袭行为可以大致列为以下几点:(1)for-while和do-while之间的互相替换;(2)将for循环语句中的第一表达式放到for循环之前;(3)将for循环语句中的第三表达式放至for循环语句体的最后;(4)重命名循环体判断标示符;(5)循环语句体代码块重排序;(6)增加注释(7)语句等价替换,如i++换为i=i+1等;(8)循环语句体中增加冗余结构。针对循环结构应有对应计算函数,不同于其他结构体。
3)C代码转换XML文本:利用XML语言的结构性较强,把C语言程序中关键结构转化为对应的XML文本,以此文本作为抄袭检测的计算输入。转换主要通过以下三个步骤:代码格式化;关键结构的正则匹配;XML文本构建。在XML文本构建过程中,要保证能够提取出已发生抄袭的关键结构,例如:变量类型,函数类型,函数名,变量个数等。在XML文本中将C程序中的关键结构以不同XML元素标记,例如用function_call代表程序调用函数节点等,以此调用相对应的函数计算相似值。
4)相似度阈值确定:由于代码复杂程度和规模不同,阈值确定极为关键,特别对于初学C语言程序设计的学生,以下问题都可能导致学生间作业出现一定的相似性:学生在相同老师教学下有着相似的编程风格;完成作业时参考同一本教材或参考书等。所以阈值选定应由测试代码的编写者编程熟练度、代码规模、代码复杂难易度多方面决定。
三、研究步骤、方法及措施:
1.研究步骤
(1)需求分析
本次研究的C语言代码抄袭检测系统,除了可以直接拷贝两份程序代码进行单独比较外,也可以录入一系列的TXT文件,进行两两之间的比较,方便快捷。同时,由于考虑到以辅助教学为主,还支持教师自行改变相似度阈值,以便更加灵活的根据不同难度、规模的程序进行调节。
在输入上,不仅支持单独输入两份进行对比,还支持对一系列的文件间进行两两对比。
在精度上,由于先将C语言转化成更加结构化的XML文本,同时通过不同的结构特征进行分行,分别计算相似度,再计算程序对的相似度,使其精度大大提高,减少了误判、漏判的可能性。
在时效上,应优化逻辑设计,减少冗余代码,使系统运行效率高,反映速度快。
程序应健壮性好,具有良好的容错机制,运行不容易崩溃。
(2)设计概要
程序主要分为以下几个模块:输入,程序关键结构提取,C程序转XML文本,XML文本行相似值计算,程序对相似度计算,相似度输出。
在输入数据时可选择文本输入和批量文件输入,同时可以选择是否改变相似度判断阈值还是使用默认阈值。然后进入C程序转换XML文本模块,对输入的文本或文件进行数据预处理,预处理主要应包括:将包含多语句的代码行转化为每行一句;对循环结构和选择结构语句不包含成对括号且仅包含一句语句的,添加成对括号;删除代码中注释语句;删除代码中冗余空白字符并将制表符转为单空格。通过这种代码格式化标准化C代码,即能检测出通过简单拷贝和修改注释等简单抄袭手段,也能大大提高转化XML文本的有效性,减少遗漏率。随后在转换为XML文本后对关键结构进行特殊标记。然后进行计算模块,对各个关键行带入各自相似值计算函数,并最后得出程序对的相似度并与设定阈值比较。最后通过输出模块显示出直观结果。
(3)平台选择
选择用C#来编写本软件,C#是微软公司结合C/C++和JAVA等语言特点设计的一种心得程序设计语言,可以快速地编写各种基于Microsoft.NET平台的应用程序。
成品毕业设计 可以根据自己的要求 , 自行浏览选购, 可以参考是否符合自己要求,找到满意的成品毕业设计 , 直接发送成品编号联系发你网址的工作人员进行交易, 我们会从 QQ或者邮箱等方式发送毕业设计程序。
我们团队,可以根据用户的功能要求量 身定制毕业设计程序 (同样联系发你网址的 工作人员) , 需要用户提供详细的 , 功能要 求.开发技术要求(开发语言、开发工具、框 架等 ) .我们会根据用户毕业设计的难易程 度 ,工作量大小等,具体的给出一个报价,价格 协商一致过后,付下40%定金.我们开始开 发毕业设计, 做好过后先发送设计桌面演示录像 , 用户看后 满意付尾款, 我们再发程序源码压缩包.