论文部分内容阅读
计算机信息技术的飞速发展,使得资源的获取和使用也变得更加的快捷方便。但与此同时,信息资源之间的抄袭也变得越来越简单和难以防范。例如在计算机的程序设计类课程中,进行程序作业完成提交及在线测试时,学生之间进行彼此抄袭的现象非常的普遍。这种现象严重影响了教学质量、制约了学生素质的提高发展,更加无法确保考核的公平公正性。此外,在软件商业领域中,软件产品发生版权争端的事件也时有发生。对程序代码相似性度量方法及其应用的进一步深入高效研究,将在很大程度上扼制在程序设计类课程中存在的普遍的抄袭现象,加大对软件商业领域中软件产品的知识产权保护力度。本文分析了目前国内外在程序相似性度量领域的相关研究,对常用的相似性度量检测方法做了综合的对比分析。并在此基础上对程序代码相似性度量方法进行了以下的相关研究。首先,对于传统字符串匹配算法GST算法在进行串匹配时需要逐个比较串的每个字符、造成时问复杂度相对较大的问题,提出了一种基于Java多线程并行匹配的设计方式,以此对GST算法的匹配过程进行了改进,有效的提高了算法进行匹配检测的时间效率;然后,针对GST算法时间复杂度和参加检测匹配的字符串长度成正比的特点,对能够代表程序语义结构的token序列,提出一种设计思想:在对其语义没有影响的条件下对其长度进行缩短,可以进一步降低匹配的时间复杂度;最后,针对利用工具生成抽象语法树时会包含大量的冗余信息,容易造成资源的极大浪费的问题,设计并实现了一种构造抽象语法树的算法,该算法通过先创建父节点后创建子节点,再将其关联的方式,将程序中类、方法等体现程序语义结构的有用信息进行抽象语法树的构造,并且设计了类信息表和方法信息表进行数据的存储和更新,方便数据的使用。通过抽象语法树的算法设计,在构造生成语法树后,可以遍历解析语法树使其生成能够表示程序语义结构的token序列串,再结合改进的字符串匹配算法GST进行相似度的计算,得到最终的相似性度量分析结果。根据上述的方法理论,本文设计并且实现了一个基于Java语言的程序代码相似度检测系统,该系统可以计算源程序对之间的相似度。在同等测试程序集和程序对的基础上和Moss系统的抄袭检测结果进行了对比分析。实验结果表明,本文的研究内容,可以有效的检测出大部分抄袭手段,并且具有较高的检测时问效率。在代码检测的精度和准确度方面都具有较高的可靠性。