CN111562944A - 程序代码的比对方法、比对装置 - Google Patents

程序代码的比对方法、比对装置 Download PDF

Info

Publication number
CN111562944A
CN111562944A CN202010393234.2A CN202010393234A CN111562944A CN 111562944 A CN111562944 A CN 111562944A CN 202010393234 A CN202010393234 A CN 202010393234A CN 111562944 A CN111562944 A CN 111562944A
Authority
CN
China
Prior art keywords
program code
code
key
tree structure
standard
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010393234.2A
Other languages
English (en)
Other versions
CN111562944B (zh
Inventor
游辉敏
顾继光
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing Yuzhi Intelligent Technology Co Ltd
Original Assignee
Nanjing Yuzhi Intelligent Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing Yuzhi Intelligent Technology Co Ltd filed Critical Nanjing Yuzhi Intelligent Technology Co Ltd
Priority to CN202010393234.2A priority Critical patent/CN111562944B/zh
Publication of CN111562944A publication Critical patent/CN111562944A/zh
Application granted granted Critical
Publication of CN111562944B publication Critical patent/CN111562944B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/194Calculation of difference between files
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种程序代码的比对方法、比对装置,其中,比对方法包括:定义程序代码键的组成;扫描标准程序代码,形成由键组成的标准程序代码的树型结构;根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成;根据标准程序代码的树型结构和值的组成,形成标准程序代码的键‑值树型结构;根据标注的代码段,将标准程序代码的键‑值树型结构进行剪枝,形成特征代码;扫描新程序代码,将新程序代码与所述特征代码进行比对。由此,该方法可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。

Description

程序代码的比对方法、比对装置
技术领域
本发明涉及一种程序分析领域,特别涉及一种程序代码的比对方法、一种程序代码的比对装置、一种计算机设备、一种非临时性计算机可读存储介质和一种计算机程序产品。
背景技术
随着大数据、人工智能、云计算、物联网等新兴技术的不断发展,编程语言已经成为各大高校普适性教学的一部分,且对学生的要求逐年提高。在新时代,编程不止是一种计算机语言,更是未来人工智能时代的“沟通”语言。
随着参加编程的教育人群增多和教学内容难度的提升,如何更加快速、正确、智能地批改编程语言(程序代码)成为亟待解决的难题。
发明内容
本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的一个目的在于提出一种程序代码的比对方法,该方法可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
本发明的第二个目的在于提出一种程序代码的比对装置。
本发明的第三个目的在于提出一种计算机设备。
本发明的第四个目的在于提出一种非临时性计算机可读存储介质。
本发明的第五个目的在于提出一种计算机程序产品。
为达到上述目的,本发明第一方面的实施例提出了一种程序代码的比对方法,包括以下步骤:定义程序代码键的组成;扫描标准程序代码,形成由键组成的标准程序代码的树型结构;根据所述键的组成,提取所述标准程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述标准程序代码的值的组成;根据所述标准程序代码的树型结构和所述值的组成,形成所述标准程序代码的键-值树型结构;根据所述标注的代码段,将所述标准程序代码的键-值树型结构进行剪枝,形成特征代码;扫描新程序代码,将所述新程序代码与所述特征代码进行比对
根据本发明实施例的程序代码的比对方法,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对。由此,该方法可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
另外,根据本发明上述实施例的程序代码的比对方法还可以具有如下附加的技术特征:
根据本发明的一个实施例,所述将所述新程序代码与所述特征代码进行比对,包括:定义程序代码键的组成;扫描新程序代码,形成由键组成的所述新程序代码的树型结构;根据所述键的组成,提取所述新程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述新程序代码的值的组成;根据所述新程序代码的树型结构和所述值的组成,形成所述新程序代码的键-值树型结构;将所述特征代码的键与所述新程序代码的键-值树型结构的键进行比对,以获取所述新程序代码与所述特征代码相似的代码段;如果所述特征代码的键与所述新程序代码的键-值树型结构的键存在相同部分,则将相同部分键对应的值进行比对;如果所述相同部分键对应的值相同,则判断所述标准代码与所述新程序代码的存在相同的代码段;如果所述相同部分键对应的值不相同,则判断所述标准代码与所述新程序代码的不存在相同的代码段。
根据本发明的一个实施例,所述将所述新程序代码与所述特征代码进行比对,还包括:如果所述特征代码的键与所述新程序代码的键-值树型结构的键无相同部分,则判断所述标准代码与所述新程序代码不存在相同的代码段。
根据本发明的一个实施例,形成由键组成的树型结构,包括:以主函数为入口,提取出所有变量、常量、库函数、普通函数,进行泛化处理,形成由键组成的树型结构。
根据本发明的一个实施例,所述键-值树型结构以JSON(Object Notation,JS对象简谱,一种轻量级的数据交换格式)格式进行存储。
根据本发明的一个实施例,所述程序代码键的组成包括:键类型、键名称、程序ID、节点ID、父节点ID和层级。
为达到上述目的,本发明第二方面实施例提出了一种程序代码的比对装置,包括:定义模块,用于定义程序代码键的组成;扫描模块,用于扫描标准程序代码,形成由键组成的标准程序代码的树型结构;确定模块,用于根据所述键的组成,提取所述标准程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述标准程序代码的值的组成;形成模块,用于根据所述标准程序代码的树型结构和所述值的组成,形成所述标准程序代码的键-值树型结构;剪枝模块,用于根据所述标注的代码段,将所述标准程序代码的键-值树型结构进行剪枝,形成特征代码;比对模块,用于扫描新程序代码,将所述新程序代码与所述特征代码进行比对。
根据本发明实施例的程序代码的比对装置,通过定义模块定义程序代码键的组成,扫描模块扫描标准程序代码,形成由键组成的标准程序代码的树型结构,确定模块根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,形成模块根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,剪枝模块根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,比对模块,扫描新程序代码,将新程序代码与所述特征代码进行比对。由此,该装置可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
另外,根据本发明上述实施例的程序代码的比对装置还可以具有如下附加的技术特征:
根据本发明的一个实施例,所述扫描模块还用于:扫描新程序代码,形成由键组成的所述新程序代码的树型结构;所述确定模块还用于根据所述键的组成,提取所述新程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述新程序代码的值的组成;所述形成模块还用于根据所述新程序代码的树型结构和所述值的组成,形成所述新程序代码的键-值树型结构;所述比对模块具体用于:将所述特征代码的键与所述新程序代码的键-值树型结构的键进行比对,以获取所述新程序代码与所述特征代码相似的代码段;如果所述特征代码的键与所述新程序代码的键-值树型结构的键存在相同部分,则将相同部分键对应的值进行比对;如果所述相同部分键对应的值相同,则判断所述标准代码与所述新程序代码的存在相同的代码段,如果所述相同部分键对应的值不相同,则判断所述标准代码与所述新程序代码的不存在相同的代码段。
根据本发明的一个实施例,所述比对模块还用于:如果所述特征代码的键与所述新程序代码的键-值树型结构的键无相同部分,则判断述标准代码与所述新程序代码不存在相同的代码段。
根据本发明的一个实施例,所述扫描模块具体用于:以主函数为入口,提取出所有变量、常量、库函数、普通函数,进行泛化处理,形成由键组成的树型结构。
根据本发明的一个实施例,所述键-值树型结构以JSON格式进行存储。
根据本发明的一个实施例,所述程序代码键的组成包括:键类型、键名称、程序ID、节点ID、父节点ID和层级。
为达到上述目的,本发明第三方面实施例提出了一种计算机设备,包括存储器、处理器及存储在所述处理器执行所述程序时,实现根据本发明第一方面实施例所述的程序代码的比对方法。
根据本发明实施例的计算机设备,处理器执行存储在存储器上的计算机程序时,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对,由此,可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
为达到上述目的,本发明第四方面实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,实现根据本发明第一方面实施例所述的程序代码的比对方法。
根据本发明实施例的非临时性计算机可读存储介质,处理器执行存储在其上的计算机程序时,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对,由此,可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
为达到上述目的,本发明第五方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令由处理器执行时,执行一种根据本发明第一方面实施例所述的程序代码的比对方法,所述方法包括:定义程序代码键的组成;扫描标准程序代码,形成由键组成的标准程序代码的树型结构;根据所述键的组成,提取所述标准程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述标准程序代码的值的组成;根据所述标准程序代码的树型结构和所述值的组成,形成所述标准程序代码的键-值树型结构;根据所述标注的代码段,将所述标准程序代码的键-值树型结构进行剪枝,形成特征代码;扫描新程序代码,将所述新程序代码与所述特征代码进行比对。
根据本发明实施例的计算机程序产品,处理器执行存储在其上的指令时,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对,由此,可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
本发明的有益效果为:
(1)在代码片段特征的组织方式、存储方式和比对方式上,解决了不同代码片段的特征标注和比对难题;
(2)本发明与语言无关,适用于任何语言,且无需编译;
(3)研究具体代码中代码片段的分层抽象存储,通过键-值的关联处理,实现代码段之间逻辑关系的结构转换;
(4)通过代码泛化和代码键值对树型结构构造,来影响代码物理结构的记录,运用最小的存储实现对复杂代码物理关系的表述;
(5)利用局部抽象逻辑树来记录代码段的逻辑,进一步提升代码匹配的精准性;
(6)本发明对代码完整性没有要求,对于断残缺代码和不规范的代码也可以判断。
附图说明
本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中,
图1是根据本发明一个实施例的程序代码的比对方法的流程图;
图2是根据本发明一个实施例的JSON格式的存储示意图;
图3是根据本发明另一个实施例的程序代码的比对方法的流程图;
图4是表1中所述的标准程序代码的树型结构的示意图;
图5是表3中节点ID为3的键-值树型结构的示意图;
图6是表1中所述的标准程序代码的特征代码X-的示意图;
图7为新程序代码的键-值树型结构;
图8是根据本发明一个实施例的程序代码的比对装置的方框示意图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。
下面参照附图来描述根据本发明实施例提出的程序代码的比对方法、程序代码的比对装置、计算机设备、非临时性计算机可读存储介质和计算机程序产品。
本发明是发明人基于对以下问题的研究和认知做出的:
本发明所指的程序代码是指在计算机教育中学生为完成课业或考试所写的代码。综合分析当前计算机教育中对于程序代码的批改需求,主要集中在两点:一是准确定位得分点位置的需求,对于每一个程序代码题来说,其程序代码的书写方式多种多样,要想准确定位出评分标准中提及的得分点是非常困难的;二是带有一定逻辑正确判卷的需求,每一个得分点所对应的代码段并不是孤立存在的,其存在的意义具有上下文关系,需要根据前后逻辑去进行判卷。随着参加编程的教育人群增多和教学内容难度的提升,如何更加快速、正确、智能地批改程序代码成为亟待解决的难题。
图1是根据本发明一个实施例的程序代码的比对方法的流程图。如图1所示,该方法包括一下步骤:
S1,定义程序代码键的组成。
其中,在本发明的实施例中,程序代码键的组成可以包括:<键类型、键名称、程序ID、节点ID、父节点ID和层级>。其中键类型分为变量、常量、库函数、普通函数、循环、判断六类;键名称为键的泛化名称,键为变量或者普通函数时键名称记为“$数字”,键为常量或库函数时键名称记为常量名或库函数本身;程序ID代表唯一的程序代码;节点ID代表在程序代码段中的唯一标识;父节点ID代表在当前节点上一层级的代码段的唯一标识;层级为代码段所在的位置。
S2,扫描标准程序代码,形成由键组成的标准程序代码的树型结构。
其中,标准程序代码可以理解为批改程序代码时的标准答案。
进一步地,在本发明的一个实施例中,形成由键组成的树型结构,可以包括:以主函数为入口,提取出所有变量、常量、库函数、普通函数,进行泛化处理,形成由键组成的树型结构。程序代码主函数入口的层级为1,顺序结构代码层级不增加,如存在判断结构、循环结构、函数调用等非顺序结构则代码层级增加1层。通过生成的键,对程序代码的总体结构进行分层保留。
可以理解的是,如果是构建标准程序代码的树型结构,则主函数指标准程序代码的主函数。如果是构建新程序代码的树型结构,则主函数指新程序代码的主函数。
S3,根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成。
S4,根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构X。
在本发明的实施例中,键-值树型结构可以以JSON格式进行存储。
具体地,根据键的组成,对每个代码段进行局部抽象逻辑树分析,并与步骤S2中的键形成键-值树型结构,并以JSON格式进行存储,具体可参照图2所示,其中,Key代表键,Value代表值。通过JSON值记录代码的逻辑,对程序代码的局部完整信息进行单独保留,可用于代码局部语义的判断。
S5,根据标注的代码段,将标准程序代码的键-值树型结构X进行剪枝,形成特征代码X-。
具体地,根据步骤S3中获取的标注的代码段对标准程序代码的键-值树型结构X进行剪枝,得到新的树型结构X-,其中<节点ID,父节点ID,层级>三个部分对应的键转变为树型结构X-的新键,其含义是代表代码段与代码段之间的相对隶属关系,并非绝对的层级。通过存储剪枝后的树型结构和JSON值形成特征代码X-,实现特征代码的标注。
S6,扫描新程序代码,将新程序代码与特征代码进行比对。
可以理解,新程序代码可以为待批改或者待比对代码。可以通过设计相应的比对引擎,将新程序代码与特征代码进行比对,从而实现新程序代码与标准代码的比对。
具体地,本发明提出的程序代码的比对方法,根据代码分层结构和代码逻辑结构两种不同的方式,实现代码段的特征标注。分层结构在具体的组织形式上,采用树型结构,每个节点分为“键”和“值”两个部分。键由参数信息、层级信息组成树型结构的节点,通过键的信息可以在结构上快速定位到代码位置;在值的构成上,以局部抽象逻辑树的形式记录信息,通过局部逻辑树的信息可以对代码逻辑进行判断,一方面降低了全代码生成逻辑树的时间复杂度,另一方面进一步突出局部代码特征,大幅提升了相似代码的匹配效率。由此,该方法可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
下面结合具体的实施例描述如何将将新程序代码与特征代码进行比对。
根据本发明的一个实施例,如图3所示,将新程序代码与所述特征代码进行比对,可以包括:
S601,定义程序代码键的组成。
S602,扫描新程序代码,形成由键组成的新程序代码的树型结构。
S603,根据键的组成,提取新程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定新程序代码的值的组成。
S604,根据新程序代码的树型结构和值的组成,形成新程序代码的键-值树型结构Y;
S605,将特征代码X-的键与新程序代码的键-值树型结构Y的键进行比对,以获取新程序代码与特征代码相似的代码段。
S606,如果特征代码的键与新程序代码的键-值树型结构的键存在相同部分,则将相同部分键对应的值进行比对。
S607,如果相同部分键对应的值相同,则判断标准代码与新程序代码的存在相同的代码段。
S608,如果相同部分键对应的值不相同,则判断标准代码与新程序代码的不存在相同的代码段。
S609,如果特征代码的键与新程序代码的键-值树型结构的键无相同部分,则判断标准代码与新程序代码不存在相同的代码段。
具体地,通过获取新程序代码的键-值树型结构Y,获取方式与上述实施例中获取标准程序代码的键-值树型结构X的方式相同,具体细节可参照上述,不再进行赘述。然后,将新程序代码的键-值树型结构Y与步骤S5中获取的特征代码X-进行比对,优先比对特征代码X-与新程序代码的键-值树型结构Y的键,寻找新程序代码的键-值树型结构Y中与特征代码X-相似的代码段,其中,如果特征代码的键与新程序代码的键-值树型结构的键无相同部分,则判断述标准代码与新程序代码不存在相同的代码段;如果特征代码X-与新程序代码的键-值树型结构Y部分代码段结构相似,则继续比对相同键所对应的值是否相似,如果也相似,表示特征代码X-与新程序代码的键-值树型结构Y的部分代码段是相似代码,如果相同键所对应的值不同,则表示特征代码X-与新程序代码的键-值树型结构Y不存在相似的代码段。由此,完成新程序代码与标准程序代码的比对,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
为使本领域技术人员更清楚地理解本发明,下面结合具体的示例来描述本发明实施例提出的程序代码的比对方法。
标准代码如表1所示:
表1
Figure BDA0002486396220000121
表1中的标准代码泛化后的结果,如表2所示:表2
Figure BDA0002486396220000122
表2代码形成的表结构如表3所示:
表3
Figure BDA0002486396220000123
Figure BDA0002486396220000131
表3转化成树型结构如图4所示,即图4为表1中所述的标准程序代码的树型结构,除作为根节点的入口函数以外,共有2层,4个节点。
对全部程序代码进行局部抽象逻辑树分析,表3中的每个代码键都会生成一个JSON值,例如表3中节点ID为3的代码段解析后的抽象逻辑树(键-值树型结构)如图5所示,变量为“$0”,初始值为“1”,执行条件为“<100”,步长为“1”。
从程序代码中提取标准程序代码中涉及键的代码段,以获取标注的代码段,如表4中斜体部分所示。
表4
Figure BDA0002486396220000132
根据选取的标注的代码段对图5中的树型结构进行剪枝,得到如图6所示,新的树型结构,即特征代码X-,特征代码X-对应的表结构如表5所示。
表5
Figure BDA0002486396220000133
Figure BDA0002486396220000141
剪枝后的树型结构所表达的含义是,特征代码段由循环for和库函数scanf组成,循环for和库函数scanf有明确的隶属关系,即库函数scanf是循环for的子节点,循环for隶属于主函数main节点。图4中的树型结构剪枝后,循环for节点继承了表3中每个节点对应的JSON结果,形成新的键值对,即为特征键值对。
将要比对的另一个新程序代码如表6所示,
表6
Figure BDA0002486396220000142
Figure BDA0002486396220000151
泛化后的结果如表7所示,
表7
Figure BDA0002486396220000152
泛化代码生成的代码树型结构如图7所示,即图7为新程序代码的键-值树型结构,其中部分结构与图6中特征代码结构相同,再对代码键的值进行比对,结果同样相同,因此新程序代码中含有与特征代码段相同的代码段,由此判断标准代码与新程序代码的存在相同的代码段。
由上,不难理解,本发明提出的程序代码的比对方法存在以下有益效果:
(1)在代码片段特征的组织方式、存储方式和比对方式上,解决了不同代码片段的特征标注和比对难题;
(2)本发明与语言无关,适用于任何语言,且无需编译;
(3)研究具体代码中代码片段的分层抽象存储,通过键-值的关联处理,实现代码段之间逻辑关系的结构转换;
(4)通过代码泛化和代码键值对树型结构构造,来影响代码物理结构的记录,运用最小的存储实现对复杂代码物理关系的表述;
(5)利用局部抽象逻辑树来记录代码段的逻辑,进一步提升代码匹配的精准性;
(6)本发明对代码完整性没有要求,对于断残缺代码和不规范的代码也可以判断。
综上所述,根据本发明实施例的程序代码的比对方法,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对。由此,该方法可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
与上述的程序代码的比对方法相对应,本发明还提出一种程序代码的比对装置,由于本发明的装置实施例与上述的方法实施例相对应,对于装置实施例中未披露的细节可参照上述的方法实施例,本发明中不再进行赘述。
图8是根据本发明一个实施例的程序代码的比对装置的方框示意图。如图8所示,该装置包括:定义模块1、扫描模块2、确定模块3、形成模块4、剪枝模块5和比对模块6。
其中,定义模块1用于定义程序代码键的组成;扫描模块2用于扫描标准程序代码,形成由键组成的标准程序代码的树型结构;确定模块3用于根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成;形成模块4用于根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构;剪枝模块5用于根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码;比对模块6用于扫描新程序代码,将新程序代码与特征代码进行比对。
根据本发明的一个实施例,扫描模块2还可以用于:扫描新程序代码,形成由键组成的新程序代码的树型结构;确定模块3还用于根据键的组成,提取新程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定新程序代码的值的组成;形成模块4还用于根据新程序代码的树型结构和值的组成,形成新程序代码的键-值树型结构;比对模块6具体用于:将特征代码的键与新程序代码的键-值树型结构的键进行比对,以获取新程序代码与特征代码相似的代码段;如果特征代码的键与新程序代码的键-值树型结构的键存在相同部分,则将相同部分键对应的值进行比对;如果相同部分键对应的值相同,则判断标准代码与新程序代码的存在相同的代码段,如果相同部分键对应的值不相同,则判断标准代码与新程序代码的不存在相同的代码段。
根据本发明的一个实施例,比对模块6还用于:如果特征代码的键与所述新程序代码的键-值树型结构的键无相同部分,则判断述标准代码与新程序代码不存在相同的代码段。
根据本发明的一个实施例,扫描模块2具体用于:以主函数为入口,提取出所有变量、常量、库函数、普通函数,进行泛化处理,形成由键组成的树型结构。
根据本发明的一个实施例,键-值树型结构以JSON格式进行存储。
根据本发明的一个实施例,程序代码键的组成包括:键类型、键名称、程序ID、节点ID、父节点ID和层级。
综上所述,根据本发明实施例的程序代码的比对装置,通过定义模块定义程序代码键的组成,扫描模块扫描标准程序代码,形成由键组成的标准程序代码的树型结构,确定模块根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,形成模块根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,剪枝模块根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,比对模块,扫描新程序代码,将新程序代码与所述特征代码进行比对。由此,该装置可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
本发明还提出一种计算机设备,包括存储器、处理器及存储在所述处理器执行所述程序时,实现根据本发明上述实施例所述的程序代码的比对方法。
根据本发明实施例的计算机设备,处理器执行存储在存储器上的计算机程序时,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对,由此,可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
本发明的实施例提出了一种非临时性计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时,实现根据本发明上述实施例所述的程序代码的比对方法。
根据本发明实施例的非临时性计算机可读存储介质,处理器执行存储在其上的计算机程序时,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对,由此,可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
此外,本发明的实施例还提出了一种计算机程序产品,当所述计算机程序产品中的指令由处理器执行时,执行一种根据本发明上述实施例所述的程序代码的比对方法,所述方法包括:定义程序代码键的组成;扫描标准程序代码,形成由键组成的标准程序代码的树型结构;根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成;根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构;根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码;扫描新程序代码,将新程序代码与特征代码进行比对。
根据本发明实施例的计算机程序产品,处理器执行存储在其上的指令时,首先定义程序代码键的组成,然后扫描标准程序代码,形成由键组成的标准程序代码的树型结构,再根据键的组成,提取标准程序代码中涉及键的代码段,以获取标注的代码段,并根据标注的代码段确定标准程序代码的值的组成,再根据标准程序代码的树型结构和值的组成,形成标准程序代码的键-值树型结构,根据标注的代码段,将标准程序代码的键-值树型结构进行剪枝,形成特征代码,最后扫描新程序代码,将新程序代码与特征代码进行比对,由此,可以对程序代码进行分层、分段解析,并形成具有特征的特征代码,大大提升了相似代码的匹配效率,以便于程序批改时对代码进行比对。
在本发明的描述中,需要理解的是,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现特定逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,"计算机可读介质"可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
本技术领域的普通技术人员可以理解实现上述实施例方法携带的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,该程序在执行时,包括方法实施例的步骤之一或其组合。
此外,在本发明各个实施例中的各功能单元可以集成在一个处理模块中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。所述集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。
上述提到的存储介质可以是只读存储器,磁盘或光盘等。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。

Claims (10)

1.一种程序代码的比对方法,其特征在于,包括以下步骤:
定义程序代码键的组成;
扫描标准程序代码,形成由键组成的标准程序代码的树型结构;
根据所述键的组成,提取所述标准程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述标准程序代码的值的组成;
根据所述标准程序代码的树型结构和所述值的组成,形成所述标准程序代码的键-值树型结构;
根据所述标注的代码段,将所述标准程序代码的键-值树型结构进行剪枝,形成特征代码;
扫描新程序代码,将所述新程序代码与所述特征代码进行比对。
2.根据权利要求1所述的程序代码的比对方法,其特征在于,所述将所述新程序代码与所述特征代码进行比对,包括:
定义程序代码键的组成;
扫描新程序代码,形成由键组成的所述新程序代码的树型结构;
根据所述键的组成,提取所述新程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述新程序代码的值的组成;
根据所述新程序代码的树型结构和所述值的组成,形成所述新程序代码的键-值树型结构;
将所述特征代码的键与所述新程序代码的键-值树型结构的键进行比对,以获取所述新程序代码与所述特征代码相似的代码段;
如果所述特征代码的键与所述新程序代码的键-值树型结构的键存在相同部分,则将相同部分键对应的值进行比对;
如果所述相同部分键对应的值相同,则判断所述标准代码与所述新程序代码的存在相同的代码段;
如果所述相同部分键对应的值不相同,则判断所述标准代码与所述新程序代码的不存在相同的代码段。
3.根据权利要求2所述的程序代码的比对方法,其特征在于,所述将所述新程序代码与所述特征代码进行比对,还包括:
如果所述特征代码的键与所述新程序代码的键-值树型结构的键无相同部分,则判断所述标准代码与所述新程序代码不存在相同的代码段。
4.根据权利要求1-3中任一项所述的程序代码的比对方法,其特征在于,形成由键组成的树型结构,包括:
以主函数为入口,提取出所有变量、常量、库函数、普通函数,进行泛化处理,形成由键组成的树型结构。
5.根据权利要求1-3中任一项所述的程序代码的比对方法,其特征在于,所述键-值树型结构以JSON格式进行存储。
6.根据权利要求1-3中任一项所述的程序代码的比对方法,其特征在于,所述程序代码键的组成包括:键类型、键名称、程序ID、节点ID、父节点ID和层级。
7.一种程序代码的比对装置,其特征在于,包括:
定义模块,用于定义程序代码键的组成;
扫描模块,用于扫描标准程序代码,形成由键组成的标准程序代码的树型结构;
确定模块,用于根据所述键的组成,提取所述标准程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述标准程序代码的值的组成;
形成模块,用于根据所述标准程序代码的树型结构和所述值的组成,形成所述标准程序代码的键-值树型结构;
剪枝模块,用于根据所述标注的代码段,将所述标准程序代码的键-值树型结构进行剪枝,形成特征代码;
比对模块,用于扫描新程序代码,将所述新程序代码与所述特征代码进行比对。
8.一种计算机设备,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时,实现根据权利要求1-6中任一项所述的程序代码的比对方法。
9.一种非临时性计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现根据权利要求1-6中任一项所述的程序代码的比对方法。
10.一种计算机程序产品,其特征在于,当所述计算机程序产品中的指令由处理器执行时,执行一种根据权利要求1-6中任一项所述的程序代码的比对方法,所述方法包括:
定义程序代码键的组成;
扫描标准程序代码,形成由键组成的标准程序代码的树型结构;
根据所述键的组成,提取所述标准程序代码中涉及键的代码段,以获取标注的代码段,并根据所述标注的代码段确定所述标准程序代码的值的组成;
根据所述标准程序代码的树型结构和所述值的组成,形成所述标准程序代码的键-值树型结构;
根据所述标注的代码段,将所述标准程序代码的键-值树型结构进行剪枝,形成特征代码;
扫描新程序代码,将所述新程序代码与所述特征代码进行比对。
CN202010393234.2A 2020-05-11 2020-05-11 程序代码的比对方法、比对装置 Active CN111562944B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010393234.2A CN111562944B (zh) 2020-05-11 2020-05-11 程序代码的比对方法、比对装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010393234.2A CN111562944B (zh) 2020-05-11 2020-05-11 程序代码的比对方法、比对装置

Publications (2)

Publication Number Publication Date
CN111562944A true CN111562944A (zh) 2020-08-21
CN111562944B CN111562944B (zh) 2023-08-29

Family

ID=72072096

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010393234.2A Active CN111562944B (zh) 2020-05-11 2020-05-11 程序代码的比对方法、比对装置

Country Status (1)

Country Link
CN (1) CN111562944B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103729580A (zh) * 2014-01-27 2014-04-16 国家电网公司 一种检测软件抄袭的方法和装置
CN104428750A (zh) * 2012-07-06 2015-03-18 微软公司 代码片段的泛化和/或特化
CN109165040A (zh) * 2018-07-04 2019-01-08 东华大学 一种基于随机森林模型的代码抄袭嫌疑检测的方法
CN109445834A (zh) * 2018-10-30 2019-03-08 北京计算机技术及应用研究所 基于抽象语法树的程序代码相似性快速比较方法
CN110515823A (zh) * 2018-05-21 2019-11-29 百度在线网络技术(北京)有限公司 程序代码复杂度评估方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104428750A (zh) * 2012-07-06 2015-03-18 微软公司 代码片段的泛化和/或特化
CN103729580A (zh) * 2014-01-27 2014-04-16 国家电网公司 一种检测软件抄袭的方法和装置
CN110515823A (zh) * 2018-05-21 2019-11-29 百度在线网络技术(北京)有限公司 程序代码复杂度评估方法和装置
CN109165040A (zh) * 2018-07-04 2019-01-08 东华大学 一种基于随机森林模型的代码抄袭嫌疑检测的方法
CN109445834A (zh) * 2018-10-30 2019-03-08 北京计算机技术及应用研究所 基于抽象语法树的程序代码相似性快速比较方法

Also Published As

Publication number Publication date
CN111562944B (zh) 2023-08-29

Similar Documents

Publication Publication Date Title
CN113641826B (zh) 面向多源知识图谱融合的实体对齐方法、装置与系统
CN111930906A (zh) 基于语义块的知识图谱问答方法及装置
Lin et al. Deep structured scene parsing by learning with image descriptions
Arias-Duart et al. Focus! rating XAI methods and finding biases
CN108255702A (zh) 一种测试用例创建方法、装置、设备及存储介质
Jing et al. Maintaining reasoning consistency in compositional visual question answering
Hua et al. Research on 3D medical image surface reconstruction based on data mining and machine learning
CN114330267A (zh) 一种基于语义学关联的结构化报告模板的设计方法
CN106980960B (zh) 一种知识点体系的制作方法及装置
Lonij et al. Open-world visual recognition using knowledge graphs
Keys System dynamics as a systems-based problem-solving methodology
CN111562944B (zh) 程序代码的比对方法、比对装置
Vieira et al. A requirements engineering analysis of MoReq
CN116467219A (zh) 一种测试处理方法及装置
KR20190082453A (ko) 기계학습 모델링을 위한 신규 학습 콘텐츠 분석 방법, 장치 및 컴퓨터 프로그램
Chen et al. Constructing Medical Image Domain Ontology with Anatomical Knowledge
CN117743315B (zh) 一种为多模态大模型系统提供高质量数据的方法
CN110457543B (zh) 一种基于端到端多视角匹配的实体消解方法和系统
CN117634617B (zh) 知识密集型推理问答方法、装置、电子设备和存储介质
Hajic jr Handwritten optical music recognition
Anay et al. Mapping theory: Production of knowledge in theory of architecture in Turkey
Lopez-Molina et al. Ultrametrics for context-aware comparison of binary images
Liu Visualizing multi-level structures in data
CN117076638A (zh) 对话篇章解析方法
Reynoso et al. Measuring OCL expressions: a “tracing”-based approach

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant