为您写序列毕业论文和职称论文提供序列方面硕士毕业论文范文,与程序代码相似度评判系统的设计与实现相关论文范文例文,包括关于序列及模块及文件方面的论文题目、提纲、开题报告、文献综述、参考文献的大学硕士和本科毕业论文,是免费优秀的序列论文范文。
摘 要:程序代码相似性的识别是利用一定的检测识别手段,判断两个源程序代码之间的相似性,并度量两个程序代码之间的相似程度.代码抄袭是程序设计课程中频繁出现的一种作弊行为,检测源代码的抄袭对验证学生程序作业的独创性非常重要.本文针对计算机教学考核中对程序设计客观性和真实性的要求,应用最长公共子序列算法来对比两个源程序文件在结构上的相似性,同时设计可用于教学考核的程序代码相似度评判系统.
关 键 词 :源代码;相似度评判;抄袭检测;最长公共子序列
中图分类号:TP309
程序代码相似性度量技术主要用于代码的抄袭检测上,主要来确定一个程序是否是通过复制另外一个程序得来.在本质上,本技术是通过对这两个程序代码的相似度进行分析衡量,根据衡量的结果给出一个相似度的数值表示,然后由此数值来判断这两个程序是否存在互相抄袭的现象.程序代码的相似性度量算法主要研究如何更准确地把程序的结构用字符串形式表示,并选择一个快速的、有效的字符串匹配算法,以提高相似性度量的准确性,同时尽量减少代码相似性度量算法的复杂度.
1.最长公共子串程序代码相似度评判方法
最长公共子串指的是给定的一组字符串的长度最大的共有的子字符串.若将字符串看成是由若干个子串组成,则两个字符串中存在的相同的子串就是它们的公共子串,因而,它们的相似度可用所有公共子串的长度占整个串的百分比表示.
LCS算法的具体实现过程主要可以分为以下两个部分:
该文来源:http://www.sxsky.net/chaoxi/459699.html
(1)
(2)
Xi等于x1,等,xi即X序列的前i个字符(1≤i≤m)(前缀);
Yj等于y1,等,yj即Y序列的前j个字符(1≤j≤n)(前缀);
Length(i,j)表示Xi和Yj的最长公共子序列的长度.
(1)求出最长公共子序列的长度Length(i,j)
利用最长公共子序列问题的子问题重叠性质,定义一个标志位数组变量f(i,j),将子字符串中字符的匹配结果保存在其中,以避免多次的重复运算.由公式(1)可以知道:
若i等于0或j等于0,则Length(i,j)等于0;
若xi等于bj,则Length(i,j)等于Length(i-1,j-1)+1,f(i,j)等于“”;
若xi≠yi,且Length(i-1,j)等于Length(i,j-1),则Length(i,j)等于Length(i-1,j),f(i,j)等于“↑”;
若xi≠yi,且Length(i-1,j) 由于计算每个数组单元的时间复杂度为O(1),所以求解Length(i,j)的时间复杂度为O(M*N). (2)求出最长公共子序列LCS(X,Y) 根据上述过程中计算最优值时得到的最长公共子序列长度,搜索在上述求解Length(i,j)的过程中保存的匹配结果f(i,j),构造最优解. 若i或j为0,返回空字符串; 若f(i,j)等于“”,则Xi,Yj的最长公共子序列是Xi-1,Yj-1的最长公共子序列在尾部加上xi得到的子序列; 若f(i,j)等于“↑”,则Xi,Yj和Xi-1,Yj有着相同的最长公共子序列; 若f(i,j)等于“←”,则Xi,Yj和Xi,Yj-1有着相同的最长公共子序列; 用LCS(X,Y)保存每次比较得到的公共子序列,比较结束后得到两个字符串的最长公共子序列.在求解LCS(X,Y)过程中,因为每次递归调用都会使i或j减1,因此计算的时间复杂度为O(m+n).为了使运行方便,程序中可以将“”,“↑”,“←”替换为某些方便判别的标记,比如数字.结合LCS算法以及DUPOC工具的判别思想,逐行分析程序语句,可以直观的得到程序代码之间的相似的部分. 2.1 系统概述 本系统具体的各个部分操作如下: (1)文件导入,一对一对比的源代码的文件的采集. (2)源文件具体信息采集,获取源文件的具体信息并显示. (3)文件夹导入,导入文件夹中的所有源代码文件. (4)文件列表显示,显示批处理源文件的列表. (5)相似度阀值设置,根据实际情况设置合适的相似度阀值,可以经过反复比较后确定,以达到预期的效果. (6)数据预处理,获取导入的源文件中的代码,并对其进行扫描并预处理,除去注释等冗余信息. (7)代码比较,用LCS算法得出经过预处理的两段程序代码的最长公共子序列,并得出相似度信息. (8)批处理,用LCS算法结合设定的相似度阀值对所选文件夹下的源代码文件与指定源代码文件进行对比并得出相似度信息. (9)源代码相似度信息,显示单文件对比和批处理的结果,单文件对比包括最长公共子序列和相似度百分比.批处理包括最长公共子序列以及符合阀值设定范围的文件的信息. (10)分析结果输出,将批处理得到的分析结果自动输出到文本文件里面,方便用户查看. (11)使用说明,帮助菜单项中包括使用说明,给用户方便的使用本系统提供帮助. 2.2 系统逻辑层次设计 (1)界面层给用户提供了一个操作界面,通过界面层,用户可以输入数据或者操作命令,系统则显示出相关数据.主要功能划分为若干独立应用程序模块. (2)逻辑层是系统设计过程中的关键和难点.本课题中,根据数据的相关性及不同的职能,将其划分成多个对象,这样做的目的可以重复利用对象中的Provider和方法,减少冗余,层次清晰.逻辑层主要负责对各类应用的数据请求进行封装. 2.3 概要设计 软件的结构采用了典型的三层设计,在View接口里的操作都可以从BLL层交互一次数据,而BLL层的操作则是从DAL层抽象而来的. 这样的概要设计可以实现三层结构,三层结构的优势在于任何一层的修改都可以独立于其他三层,这样的设计有效的降低了系统的耦合度.使得程序的适应性极大的提高. 2.4 总体功能模块设计 根据系统的设计要求,系统的总体功能设计必须齐全,保证客户需求,本课题中将系统划分为以下几个功能模块: (1)单文件对比模块:负责定位两个独立的源代码文件,并将文件中的代码信息读入,然后使用最长公共子串算法进行处理. (2)文件基础信息显示模块:负责读取并显示源代码文件的基础信息. (3)代码相似度显示模块:显示独立对比时的两个源代码文件的相似度. (4)批处理模块:快速读取指定目录中的所有源代码文件,并进行LCS处理. (5)文件打印模块:将使用最长公共子序列算法处 2.系统总体设计
有关论文范文主题研究:
序列类论文范文
大学生适用:
学年论文、学士学位论文
相关参考文献下载数量:
83
写作解决问题:
怎么撰写
毕业论文开题报告:
标准论文格式、论文小结
职称论文适用:
期刊发表、初级职称
所属大学生专业类别:
怎么撰写
论文题目推荐度:
经典题目