CN117540711A - 文档缺陷检测方法 - Google Patents

文档缺陷检测方法 Download PDF

Info

Publication number
CN117540711A
CN117540711A CN202311700941.1A CN202311700941A CN117540711A CN 117540711 A CN117540711 A CN 117540711A CN 202311700941 A CN202311700941 A CN 202311700941A CN 117540711 A CN117540711 A CN 117540711A
Authority
CN
China
Prior art keywords
constraint
annotation
source code
code
determining
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.)
Pending
Application number
CN202311700941.1A
Other languages
English (en)
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.)
Sun Yat Sen University
Original Assignee
Sun Yat Sen University
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 Sun Yat Sen University filed Critical Sun Yat Sen University
Priority to CN202311700941.1A priority Critical patent/CN117540711A/zh
Publication of CN117540711A publication Critical patent/CN117540711A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/169Annotation, e.g. comment data or footnotes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/289Phrasal analysis, e.g. finite state techniques or chunking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/279Recognition of textual entities
    • G06F40/289Phrasal analysis, e.g. finite state techniques or chunking
    • G06F40/295Named entity recognition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (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)
  • Software Systems (AREA)
  • Machine Translation (AREA)

Abstract

本申请公开了一种文档缺陷检测方法,该方法可以获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;确定每个源代码结构对应的代码约束事实;基于此,本申请能够适应各类目标文档,提高了实用性及适用范围;对应同一源代码结构将代码相关的代码约束事实与注释相关的约束描述自然关联;随后,可以对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码;可见,本申请提供的文档缺陷检测方法可以在简化分析难度的同时,提高实用性及适用范围。

Description

文档缺陷检测方法
技术领域
本申请涉及检测技术领域,更具体地说,涉及一种文档缺陷检测方法。
背景技术
为了便于非开发人员理解源代码,各个源代码文档如智能合约及软件开发文档,包含有源代码对应的代码注释。一般情况下,代码注释中通常会包含参数范围说明、角色权限等约束信息,但上述约束信息容易存在各种错误,例如,参数说明错误等,使得源代码与注释间存在不相符之处,而这些不相符之处,对智能合约的维护,对软件的开发都造成了一定的不良影响。
目前,现有技术主要使用较为严格的模板提取智能合约API文档中的文本信息,并基于文本信息进行一致性分析。但在各类源代码文档中注释和代码的位置可能是多种多样的,为了适配各种各样的源代码文档,需要构建多种模板,在实际使用过程中较为复杂,实用性较差。
发明内容
有鉴于此,本申请提供了一种文档缺陷检测方法,用于解决现有技术中应用过程复杂及实用性低的缺点。
为了实现上述目的,现提出的方案如下:
一种文档缺陷检测方法,包括:
获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;
从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;
确定每个源代码结构对应的代码约束事实;
对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码。
可选的,所述从各个注释中提取所有约束描述,包括:
从每个注释中提取与预设的各个注释关键词匹配的所有注释主体;
提取每个注释主体的约束实体;
基于每个注释主体对应的注释关键词,确定每个注释主体的约束类型;
基于每个注释主体的约束类型及约束实体,构建每个注释主体对应的约束描述。
可选的,所述基于每个注释主体的约束类型及约束实体,构建每个注释主体对应的约束描述,包括:
确定每个注释主体对应的源代码结构的结构标识;
确定每个注释主体的约束类型对应的类型标识;
基于每个注释主体的结构标识及约束实体,构建每个注释主体对应的多元组;
将同一注释主体对应的多元组及类型标识进行拼接,拼接形成每个注释主体对应的约束描述。
可选的,所述提取每个注释主体的约束实体,包括:
提取每个注释主体中的命名实体;
基于预设的实体专家库,对各个命名实体中不构成约束的权限实体进行删除,删除后得到每个注释主体对应的约束主体。
可选的,所述确定每个源代码结构对应的约束描述,包括:
确定各个源代码结构间的依赖关系,并基于源代码结构间的依赖关系,确定各个注释间的依赖关系;
基于注释间的依赖关系,确定每个注释关联的所有约束描述;
基于源代码结构与注释间的对应关系,确定每个源代码结构关联的所有约束描述。
可选的,所述确定每个源代码结构对应的代码约束事实,包括:
编译各个源代码结构,构建各个代码约束事实;
基于各个代码约束事实及各个约束描述,构建代码调用图,所述代码调用图表示各个源代码结构间的调用关系,所述代码调用图的每个节点包含从对应源代码结构中提取的多个代码约束事实;
基于所述代码调用图,确定每个源代码结构关联的所有代码约束事实。
可选的,所述编译各个源代码结构,构建各个代码约束事实,包括:
编译各个源代码结构,构建所述目标文档对应的抽象语法树;
遍历所述抽象语法树,构建各个代码约束事实。
可选的,所述遍历所述抽象语法树,构建各个代码约束事实,包括:
识别所述抽象语法树中与预设的各个事实关键词匹配的各个关键子节点;
确定每个关键子节点对应的事实类型;
确定每个关键子节点的依赖子节点;
针对每一关键子节点,基于所述关键子节点的事实类型,从所述关键子节点及其对应的依赖子节点中提取事实元素,并基于事实类型及事实元素构建所述关键子节点对应的代码约束事实。
可选的,所述对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码,包括:
针对每一源代码结构,确定所述源代码结构的各个约束描述与各个代码约束事实间的对应关系;
比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释和/或错误代码。
可选的,所述比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释和/或错误代码,包括:
确定存在对应关系的约束描述的约束类型,并确定所述约束类型匹配的比率阈值;
确定存在对应关系的约束描述与代码约束事实间的距离比率;
在任一距离比率超过对应比率阈值时,确定该距离比率的约束描述所对应的注释存在错误,以及,该距离比率的代码约束事实所对应的源代码结构存在错误。
从上述的技术方案可以看出,本申请提供的文档缺陷检测方法,该方法可以获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;确定每个源代码结构对应的代码约束事实;基于此,本申请可以直接从目标文档中提取每个源代码结构对应的代码约束事实以及约束描述,不需要使用模板,能够适应各类目标文档,提高了实用性及适用范围;对应同一源代码结构将代码相关的代码约束事实与注释相关的约束描述自然关联;随后,可以对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码;基于此,可以对每个源代码结构的注释进行一致性分析,将目标文档所有注释的分析问题转换为多个源代码结构的注释分析问题,简化了分析难度;可见,本申请提供的文档缺陷检测方法可以在简化分析难度的同时,提高实用性及适用范围。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请实施例公开的一种文档缺陷检测方法流程图;
图2为本申请实施例示例的一种代码调用图;
图3为本申请实施例公开的一种文档缺陷检测装置结构框图;
图4为本申请实施例公开的一种文档缺陷检测设备的硬件结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
接下来结合图1对本申请的文档缺陷检测方法进行详细介绍,包括如下步骤:
步骤S1、获取目标文档。
具体地,目标文档中可以包含多个源代码结构及每个源代码结构对应的注释。
可以根据不同的需求,设置多个源代码结构的类型,例如,每个源代码结构的类型可以为函数,也可以为模块。
目标文档可以为包含编程语言编写的源代码及相应注释的代码文件,例如可以为智能合约文档,也可以为软件开发文档。
其中,智能合约文档可以为Solidity文档;还可以为Vyper文档或Java文档。
步骤S2、从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述。
具体地,可以从每个注释中提取与约束相关的信息,构建约束描述。
基于各个注释间的依赖关系,不同注释中提取的约束描述可以相互关联。
可以确定每个源代码结构关联的约束描述。每个源代码结构对应的约束描述中包含有从对应注释中提取的约束描述,以及,从存在依赖关系的其他源代码结构的注释中提取的约束描述。
在提取约束描述前,可以对注释进行规范化处理。
其中,可以删除注释中的无关字符,将跨行的注释合并,将并列的注释拆分为单句等。
步骤S3、确定每个源代码结构对应的代码约束事实。
具体地,每个代码约束事实可以表示对应源代码结构中的部分代码性质。
可以从每个源代码结构中提取代码约束事实,并根据各个源代码结构间的依赖关系,更新每个源代码结构对应的代码约束事实。
存在依赖关系的各个源代码结构的代码约束事实可以相同。
步骤S4、对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码。
具体地,可以对同一源代码结构的约束描述及代码约束事实进行一致性分析,计算约束描述与代码约束事实间的距离,基于距离,识别错误注释。
从上述的技术方案可以看出,本申请实施例提供的文档缺陷检测方法,该方法可以获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;确定每个源代码结构对应的代码约束事实;基于此,本申请可以直接从目标文档中提取每个源代码结构对应的代码约束事实以及约束描述,不需要使用模板,能够适应各类目标文档,提高了实用性及适用范围;对应同一源代码结构将代码相关的代码约束事实与注释相关的约束描述自然关联;随后,可以对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码;基于此,可以对每个源代码结构的注释进行一致性分析,将目标文档所有注释的分析问题转换为多个源代码结构的注释分析问题,简化了分析难度;可见,本申请提供的文档缺陷检测方法可以在简化分析难度的同时,提高实用性及适用范围。
在本申请的一些实施例中,对步骤S2中从各个注释中提取所有约束描述的过程进行详细说明,步骤如下:
S20、从每个注释中提取与预设的各个注释关键词匹配的所有注释主体。
具体地,可以预先设置多个注释关键词,以及,每个注释关键词提取注释主体的方式和约束类型,例如,可以设置CALLED BY、ALLOWS、GREATER、HIGHER及EVENT为注释关键词。
注释主体可以为从包含注释关键词的语句中提取的短句或词组。具体而言,注释主体属于短句亦或者是词组基于预先设置的提取方式确定,随注释关键词的不同可以不同。
S21、提取每个注释主体的约束实体。
具体地,可以提取每个注释主体的分词,并对每个分词进行词性标注;
根据每个注释主体中各个分词的词性,选取每个注释主体的约束主体。
其中,可以从各个词性为名词的分词中选取约束主体。
S22、基于每个注释主体对应的注释关键词,确定每个注释主体的约束类型。
具体地,可以将每个注释主体注释关键词的约束类型作为对应注释主体的约束类型,不同注释关键词可以对应不同约束类型。例如,注释关键词为CALLED BY及ALLOWS时,约束类型可以为Role;注释关键词为GREATER时,约束类型可以为Param;注释关键词为EVENT时,约束类型可以为Event;注释关键词为inheritdoc时,约束类型可以为Inherit。
S23、基于每个注释主体的约束类型及约束实体,构建每个注释主体对应的约束描述。
具体地,可以将每个注释主体的约束类型及约束实体进行整合,形成每个注释主体对应的约束描述,其中,每个注释主体可以对应一个约束描述。
从上述技术方案可以看出,本实施例提供了一种构建约束描述的可选的方式,通过上述的方式可以基于通过词性标注及注释关键词,提取约束描述,使得本申请的目标文档可以不受限于表述方式中,可以适用于通过多种表述方式表述的注释中。
在本申请的一些实施例中,对步骤S21、提取每个注释主体的约束实体的过程进行详细说明,步骤如下:
S210、提取每个注释主体中的命名实体。
具体地,针对每一注释主体,可以将注释主体中词性为名词的分词,作为该注释主体的命名实体。
S211、基于预设的实体专家库,对各个命名实体中不构成约束的权限实体进行删除,删除后得到每个注释主体对应的约束主体。
具体地,可以预先构建实体专家库,实体专家库中可以预先存储有多个不构成约束的实体,例如,token owner、spender、anyone、everyone、potential、someone、anybody、transfer、buyer、customer及consumer等。
可以将与实体专家库的各个实体匹配的命名实体作为权限实体删除,得到每个注释主体对应的约束主体。
约束实体可以表示对应源代码结构需要满足的约束条件,约束实体可以为参数范围、变量名及函数名等。
从上述技术方案可以看出,本实施例提供了一种提取约束实体的可选的方式,通过上述的方式可以进一步去除不构成约束的权限实体,能够进一步保证约束实体的可靠性。
在本申请的一些实施例中,对步骤S23、基于每个注释主体的约束类型及约束实体,构建每个注释主体对应的约束描述的过程进行详细说明,步骤如下:
S230、确定每个注释主体对应的源代码结构的结构标识。
具体地,可以确定源代码结构的名称为源代码结构的结构标识。
S231、确定每个注释主体的约束类型对应的类型标识。
具体地,可以确定每个约束类型对应的类型标识,每个类型标识与每个约束类型一一对应。
S232、基于每个注释主体的结构标识及约束实体,构建每个注释主体对应的多元组。
具体地,可以根据每个注释主体的结构标识及约束实体作为元素,构建多元组。
其中,多元组可以根据约束实体及结构标识的总数量确定,一个注释主体中可以包含一个以上约束实体,多元组随注释主体中约束实体的数量不同而不同,多元组可以为二元组,也可以为三元组。
S233、将同一注释主体对应的多元组及类型标识进行拼接,拼接形成每个注释主体对应的约束描述。
具体地,可以将同一注释主体的多元组及类型标识相互拼合,形成约束描述。例如,多元组可以为(c,f,e),类型标识可以为Param,约束描述可以为Param(c,f,e)。其中,c为参数名;f为函数名;e为表达式。Param(c,f,e)表示函数f中有一个参数c的范围需要满足表达式e。
从上述技术方案可以看出,本实施例提供了一种基于每个注释主体的约束类型及约束实体构建每个注释主体对应的约束描述的可选的方式,通过上述的方式构建的约束描述可以表示包含反映约束类型的类型标识及反映函数约束条件的多元组,简化约束描述的复杂度。
在本申请的一些实施例中,对步骤S2中确定每个源代码结构对应的约束描述的过程进行详细说明,步骤如下:
S24、确定各个源代码结构间的依赖关系,并基于源代码结构间的依赖关系,确定各个注释间的依赖关系。
具体地,可以确定各个源代码间的依赖关系,以确定各个注释间的依赖关系。
S25、基于注释间的依赖关系,确定每个注释关联的所有约束描述。
具体地,针对每一注释,可以将该注释所提取的约束描述以及该注释依赖的其他注释所提取的约束描述作为该注释关联的所有约束描述。该注释依赖的其他注释可以为与该注释满足注释继承关系的其他注释,以及,与该注释满足接口-实现关系的其他注释。
S26、基于源代码结构与注释间的对应关系,确定每个源代码结构关联的所有约束描述。
具体地,基于各个注释与各个源代码结构间的对应关系,以及,各个注释关联的注释约束,确定源代码结构关联的各个约束描述。
从上述技术方案可以看出,本实施例提供了一种确定每个源代码结构关联的各个约束描述的可选的方式,通过上述的方式可以将各个约束描述传播至对应的源代码结构中,进一步建立源代码结构与约束描述间的对应关系。
在本申请的一些实施例中,对步骤S3、确定每个源代码结构对应的代码约束事实的过程进行详细说明,步骤如下:
S30、编译各个源代码结构,构建各个代码约束事实。
具体地,可以对各个源代码结构进行编译,得到编译结果;
根据编译结果,构建各个代码约束事实。
S31、基于各个代码约束事实及各个约束描述,构建代码调用图,所述代码调用图表示各个源代码结构间的调用关系,所述代码调用图的每个节点包含从对应源代码结构中提取的多个代码约束事实。
具体地,可以根据各个源代码结构的各个代码约束事实以及各个约束描述,构建代码调用图,代码调用图由多个边及两种类型节点组成,一类为公有节点,另一类为私有节点,如图2所示。
各个节点对应源代码结构,每个节点包含从对应源代码结构中提取的各个代码约束事实及各个约束描述,各个边表示各个源代码结构间的调用关系。
对应私有节点的源代码结构只能被合约内部调用,对应公有节点的源代码结构可以被外部调用。
图2中External function(Entry Point)表示公有节点;Internal function表示私有节点。
S32、基于所述代码调用图,确定每个源代码结构关联的所有代码约束事实。
具体地,可根据代码调用图中各个节点的类型以及各个节点间的调用关系,确定每个源代码结构关联的所有代码约束事实。
对于属于外部节点的源代码结构,其是代码约束事实传播的入口点,调用任一外部节点的源代码结构关联的代码约束事实包括从该源代码结构提取的代码约束事实、该外部节点及该外部节点的后续子节点的代码约束事实。例如,在调用如图2中的节点a时,调用该节点的源代码结构关联的代码约束事实包括节点a、节点c及节点d所对应的代码约束事实。
对于属于私有节点的源代码结构,调用私有节点的源代码结构关联的代码约束事实包括从该源代码结构提取的代码约束事实、与该私有节点位于同一调用链上的各个节点的代码约束事实。
从上述技术方案可以看出,本实施例提供了一种构建每个源代码结构关联的所有代码约束事实的可选的方式,通过上述的方式,可以通过代码调用图进行代码约束事实的确定,能够进一步综合各个源代码结构间的调用关系,确定每个源代码结构的代码约束事实,进一步保证了本申请的可靠性。
在本申请的一些实施例中,对步骤S30、编译各个源代码结构,构建各个代码约束事实的过程进行详细说明,步骤如下:
S300、编译各个源代码结构,构建所述目标文档对应的抽象语法树。
具体地,可以对各个源代码机构进行解析,并构建抽象语法树。
S301、遍历所述抽象语法树,构建各个代码约束事实。
具体地,可以遍历抽象语法树中的每个节点,确定每个节点的类型,并基于每个节点的类型及各个节点间的调用关系,构建代码约束事实。
从上述技术方案可以看出,本实施例提供了一种构建代码约束事实的可选的方式,通过上述的方式可以进一步利用抽象语法树提取各个源代码结构的关键信息,并基于关键信息构建代码约束事实。
在本申请的一些实施例中,对步骤S301、遍历所述抽象语法树,构建各个代码约束事实的过程进行详细说明,步骤如下:
S3010、识别所述抽象语法树中与预设的各个事实关键词匹配的各个关键子节点。
具体地,可以预先设置多个事实关键词及每个事实关键词对应的事实类型,例如,可以设置Contract Definition及Function Definition为事实关键词。
可以将与预设的事实关键词匹配的节点作为关键子节点。
S3011、确定每个关键子节点对应的事实类型。
具体地,可以根据每个关键子节点对应的事实关键词,确定每个关键子节点的事实类型。
S3012、确定每个关键子节点的依赖子节点。
具体地,可以根据每个关键子节点的节点类型,以及,每个关键子节点的依赖关系,确定每个关键子节点的依赖子节点。
S3013、针对每一关键子节点,基于所述关键子节点的事实类型,从所述关键子节点及其对应的依赖子节点中提取事实元素,并基于事实类型及事实元素构建所述关键子节点对应的代码约束事实。
具体地,可以基于所述关键子节点的事实类型,确定需要提取的元素类型;
基于元素类型,从关键子节点及各个依赖子节点的属性信息中提取事实元素,将各个事实元素组成多元组,并将事实类型与多元组进行拼接,形成代码约束事实。例如,关键子节点与Function Definition匹配时,事实类型可以为HasFunction,可以从各个依赖子节点中提取源代码结构的名称、目标文档名称以及源代码结构的可见性,并基于源代码结构的名称、目标文档名称以及源代码结构的可见性组成三元组,将三元组与HasFunction拼接,形成代码约束事实。
从上述技术方案可以看出,本实施例提供了一种基于抽象语法树构建代码约束事实的可选的方式,通过上述的方式可以更好地构建代码约束事实,进一步提高本申请的效率。
在本申请的一些实施例中,对步骤S4、对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码的过程进行详细说明,步骤如下:
S40、针对每一源代码结构,确定所述源代码结构的各个约束描述与各个代码约束事实间的对应关系。
具体地,可以确定同一源代码结构中各个约束描述与各个代码约束事实间的关系,约束描述反映注释中的部分约束,代码约束事实反映代码中的部分约束,因而,需要计算各个约束描述与各个代码约束事实间的匹配性,并将具备匹配性的约束描述与代码约束条件间的对应关系。
S41、比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释和/或错误代码。
具体地,可以计算具备匹配性的约束描述与代码约束事实间的一致性,识别不具备一致性的约束描述,并将该约束描述所对应的注释作为错误注释。
从上述技术方案可以看出,本实施例提供了一种识别同一源代码结构中约束描述与代码约束事实间不一致性的可选的方式,通过上述的方式可以将具备对应关系的约束描述与代码约束条件进行比对,进一步保证一致性分析结果的可靠性。
对在本申请的一些实施例中,对步骤S41、比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释和/或错误代码的过程进行详细说明,步骤如下:
S410、确定存在对应关系的约束描述的约束类型,并确定所述约束类型匹配的比率阈值。
具体地,约束类型可以为以下任意一种:参数范围、文字、字符串及表达式。约束类型的不同,比率阈值可以不同也可以相同。若约束类型为参数范围或表达式,比率阈值可以为0。若约束类型为字符串时,比率阈值可以为0.2。
S411、确定存在对应关系的约束描述与代码约束事实间的距离比率。
具体地,可以计算存在对应关系的约束描述与代码约束事实间的莱温斯坦距离(编辑距离);
可确定每一约束描述的总长度,并计算每一约束描述对应的莱温斯坦距离与对应的总长度间的比率,得到距离比率。
其中,在计算编辑距离前,可以对约束描述及代码约束事实中缩略词进行处理,将缩略词替换为完整字词。
S412、在任一距离比率超过对应比率阈值时,确定该距离比率的约束描述所对应的注释存在错误,以及,该距离比率的代码约束事实所对应的源代码结构存在错误。
具体地,可以在存在对应关系的约束描述与代码约束事实间的距离超过比率阈值时,将约束描述所对应的注释作为错误注释,同时,将代码约束事实所对应的代码作为错误代码。
从上述技术方案可以看出,本实施例提供了一种比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释及错误代码的可选的方式,通过上述的方式可以进一步量化约束描述与代码约束事实间的一致性分析过程,提高了一致性分析效率。
接下来将结合图3对本申请提供的文档缺陷检测装置进行详细介绍,下文提供的文档缺陷检测装置可以与上文提供的文档缺陷检测方法相互对照。
参见图3可以发现,文档缺陷检测装置可以包括:
获取模块10,用于获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;
提取模块20,用于从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;
确定模块30,用于确定每个源代码结构对应的代码约束事实;
识别模块40,用于对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码。
进一步,提取模块可以包括:
注释主体提取单元,用于从每个注释中提取与预设的各个注释关键词匹配的所有注释主体;
约束实体提取单元,用于提取每个注释主体的约束实体;
约束类型确定单元,用于基于每个注释主体对应的注释关键词,确定每个注释主体的约束类型;
约束描述构建单元,用于基于每个注释主体的约束类型及约束实体,构建每个注释主体对应的约束描述。
进一步,约束实体提取单元可以包括:
第一约束实体提取子单元,用于提取每个注释主体中的命名实体;
第二约束实体提取子单元,用于基于预设的实体专家库,对各个命名实体中不构成约束的权限实体进行删除,删除后得到每个注释主体对应的约束主体。
进一步,约束描述构建单元可以包括:
第一约束描述构建子单元,用于确定每个注释主体对应的源代码结构的结构标识;
第二约束描述构建子单元,用于确定每个注释主体的约束类型对应的类型标识;
第三约束描述构建子单元,用于基于每个注释主体的结构标识及约束实体,构建每个注释主体对应的多元组;
第四约束描述构建子单元,用于将同一注释主体对应的多元组及类型标识进行拼接,拼接形成每个注释主体对应的约束描述。
进一步,提取模块还可以包括:
注释依赖关系确定单元,用于确定各个源代码结构间的依赖关系,并基于源代码结构间的依赖关系,确定各个注释间的依赖关系;
注释依赖关系利用单元,用于基于注释间的依赖关系,确定每个注释关联的所有约束描述;
对应关系利用单元,用于基于源代码结构与注释间的对应关系,确定每个源代码结构关联的所有约束描述。
进一步,确定模块可以包括:
源代码编译单元,用于编译各个源代码结构,构建各个代码约束事实;
代码调用图构建单元,用于基于各个代码约束事实及各个约束描述,构建代码调用图,所述代码调用图表示各个源代码结构间的调用关系,所述代码调用图的每个节点包含从对应源代码结构中提取的多个代码约束事实;
代码调用图利用单元,用于基于所述代码调用图,确定每个源代码结构关联的所有代码约束事实。
进一步,源代码编译单元可以包括:
抽象语法树构建组件,用于编译各个源代码结构,构建所述目标文档对应的抽象语法树;
抽象语法树利用组件,用于遍历所述抽象语法树,构建各个代码约束事实。
进一步,抽象语法树构建组件可以包括:
第一抽象语法树构建子组件,用于识别所述抽象语法树中与预设的各个事实关键词匹配的各个关键子节点;
第二抽象语法树构建子组件,用于确定每个关键子节点对应的事实类型;
第三抽象语法树构建子组件,用于确定每个关键子节点的依赖子节点;
第四抽象语法树构建子组件,用于针对每一关键子节点,基于所述关键子节点的事实类型,从所述关键子节点及其对应的依赖子节点中提取事实元素,并基于事实类型及事实元素构建所述关键子节点对应的代码约束事实。
进一步,识别模块可以包括:
对应关系确定单元,用于针对每一源代码结构,确定所述源代码结构的各个约束描述与各个代码约束事实间的对应关系;
错误注释识别单元,用于比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释和/或错误代码。
进一步,错误注释识别单元可以包括:
第一错误注释识别子单元,用于确定存在对应关系的约束描述的约束类型,并确定所述约束类型匹配的比率阈值;
第二错误注释识别子单元,用于确定存在对应关系的约束描述与代码约束事实间的距离比率;
第三错误注释识别子单元,用于在任一距离比率超过对应比率阈值时,确定该距离比率的约束描述所对应的注释存在错误,以及,该距离比率的代码约束事实所对应的源代码结构存在错误。
本申请实施例提供的文档缺陷检测装置可应用于文档缺陷检测设备,如PC终端、云平台、服务器及服务器集群等。可选的,图4示出了文档缺陷检测设备的硬件结构框图,参照图4,文档缺陷检测设备的硬件结构可以包括:至少一个处理器1,至少一个通信接口2,至少一个存储器3和至少一个通信总线4;
在本申请实施例中,处理器1、通信接口2、存储器3、通信总线4的数量为至少一个,且处理器1、通信接口2、存储器3通过通信总线4完成相互间的通信;
处理器1可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路等;
存储器3可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器存储有程序,处理器可调用存储器存储的程序,所述程序用于:
获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;
从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;
确定每个源代码结构对应的代码约束事实;
对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码。
可选地,所述程序的细化功能和扩展功能可参照上文描述。
本申请实施例还提供一种可读存储介质,该可读存储介质可存储有适于处理器执行的程序,所述程序用于:
获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;
从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;
确定每个源代码结构对应的代码约束事实;
对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码。
可选地,所述程序的细化功能和扩展功能可参照上文描述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。本申请的各个实施例之间可以相互结合。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种文档缺陷检测方法,其特征在于,包括:
获取目标文档,所述目标文档中包含多个源代码结构及每个源代码结构对应的注释;
从各个注释中提取所有约束描述,并确定每个源代码结构对应的约束描述;
确定每个源代码结构对应的代码约束事实;
对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码。
2.根据权利要求1所述的文档缺陷检测方法,其特征在于,所述从各个注释中提取所有约束描述,包括:
从每个注释中提取与预设的各个注释关键词匹配的所有注释主体;
提取每个注释主体的约束实体;
基于每个注释主体对应的注释关键词,确定每个注释主体的约束类型;
基于每个注释主体的约束类型及约束实体,构建每个注释主体对应的约束描述。
3.根据权利要求2所述的文档缺陷检测方法,其特征在于,所述基于每个注释主体的约束类型及约束实体,构建每个注释主体对应的约束描述,包括:
确定每个注释主体对应的源代码结构的结构标识;
确定每个注释主体的约束类型对应的类型标识;
基于每个注释主体的结构标识及约束实体,构建每个注释主体对应的多元组;
将同一注释主体对应的多元组及类型标识进行拼接,拼接形成每个注释主体对应的约束描述。
4.根据权利要求2所述的文档缺陷检测方法,其特征在于,所述提取每个注释主体的约束实体,包括:
提取每个注释主体中的命名实体;
基于预设的实体专家库,对各个命名实体中不构成约束的权限实体进行删除,删除后得到每个注释主体对应的约束主体。
5.根据权利要求1所述的文档缺陷检测方法,其特征在于,所述确定每个源代码结构对应的约束描述,包括:
确定各个源代码结构间的依赖关系,并基于源代码结构间的依赖关系,确定各个注释间的依赖关系;
基于注释间的依赖关系,确定每个注释关联的所有约束描述;
基于源代码结构与注释间的对应关系,确定每个源代码结构关联的所有约束描述。
6.根据权利要求1所述的文档缺陷检测方法,其特征在于,所述确定每个源代码结构对应的代码约束事实,包括:
编译各个源代码结构,构建各个代码约束事实;
基于各个代码约束事实及各个约束描述,构建代码调用图,所述代码调用图表示各个源代码结构间的调用关系,所述代码调用图的每个节点包含从对应源代码结构中提取的多个代码约束事实;
基于所述代码调用图,确定每个源代码结构关联的所有代码约束事实。
7.根据权利要求6所述的文档缺陷检测方法,其特征在于,所述编译各个源代码结构,构建各个代码约束事实,包括:
编译各个源代码结构,构建所述目标文档对应的抽象语法树;
遍历所述抽象语法树,构建各个代码约束事实。
8.根据权利要求7所述的文档缺陷检测方法,其特征在于,所述遍历所述抽象语法树,构建各个代码约束事实,包括:
识别所述抽象语法树中与预设的各个事实关键词匹配的各个关键子节点;
确定每个关键子节点对应的事实类型;
确定每个关键子节点的依赖子节点;
针对每一关键子节点,基于所述关键子节点的事实类型,从所述关键子节点及其对应的依赖子节点中提取事实元素,并基于事实类型及事实元素构建所述关键子节点对应的代码约束事实。
9.根据权利要求1所述的文档缺陷检测方法,其特征在于,所述对同一源代码结构对应的约束描述及代码约束事实进行一致性校验,识别错误注释和/或错误代码,包括:
针对每一源代码结构,确定所述源代码结构的各个约束描述与各个代码约束事实间的对应关系;
比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释和/或错误代码。
10.根据权利要求9所述的文档缺陷检测方法,其特征在于,所述比较存在对应关系的约束描述与代码约束事实间的一致性,识别错误注释和/或错误代码,包括:
确定存在对应关系的约束描述的约束类型,并确定所述约束类型匹配的比率阈值;
确定存在对应关系的约束描述与代码约束事实间的距离比率;
在任一距离比率超过对应比率阈值时,确定该距离比率的约束描述所对应的注释存在错误,以及,该距离比率的代码约束事实所对应的源代码结构存在错误。
CN202311700941.1A 2023-12-12 2023-12-12 文档缺陷检测方法 Pending CN117540711A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311700941.1A CN117540711A (zh) 2023-12-12 2023-12-12 文档缺陷检测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311700941.1A CN117540711A (zh) 2023-12-12 2023-12-12 文档缺陷检测方法

Publications (1)

Publication Number Publication Date
CN117540711A true CN117540711A (zh) 2024-02-09

Family

ID=89789916

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311700941.1A Pending CN117540711A (zh) 2023-12-12 2023-12-12 文档缺陷检测方法

Country Status (1)

Country Link
CN (1) CN117540711A (zh)

Similar Documents

Publication Publication Date Title
US11321364B2 (en) System and method for analysis and determination of relationships from a variety of data sources
Dragoni et al. Combining NLP approaches for rule extraction from legal documents
WO2020232882A1 (zh) 命名实体识别方法、装置、设备及计算机可读存储介质
US8407253B2 (en) Apparatus and method for knowledge graph stabilization
US9875319B2 (en) Automated data parsing
US8577938B2 (en) Data mapping acceleration
CN111723569A (zh) 一种事件抽取方法、装置和计算机可读存储介质
US11042467B2 (en) Automated searching and identification of software patches
Dragoni et al. Combining natural language processing approaches for rule extraction from legal documents
US20220147714A1 (en) System and method for email signature extraction from unstructured text
CN108763202A (zh) 识别敏感文本的方法、装置、设备及可读存储介质
CN116415564B (zh) 基于知识图谱的功能点扩增方法和系统
CN113704420A (zh) 文本中的角色识别方法、装置、电子设备及存储介质
CN116304748A (zh) 一种文本相似度计算方法、系统、设备及介质
CN115099233A (zh) 一种语义解析模型的构建方法、装置、电子设备及存储介质
CN116484025A (zh) 漏洞知识图谱构建方法、评估方法、设备及存储介质
CN115221332A (zh) 一种危化品事故事理图谱的构建方法与系统
CN113076089B (zh) 一种基于对象类型的api补全方法
CN114417016A (zh) 一种基于知识图谱的文本信息匹配方法、装置及相关设备
CN116383412B (zh) 基于知识图谱的功能点扩增方法和系统
Rubasinghe et al. Software artefact traceability analyser: A case-study on POS system
US11475529B2 (en) Systems and methods for identifying and linking events in structured proceedings
CN115062619B (zh) 中文实体链接方法、装置、设备及存储介质
CN117540711A (zh) 文档缺陷检测方法
CN115827847A (zh) 知识图谱构建方法、装置、电子设备和存储介质

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