CN116302919A - 一种多语言可扩展的代码依赖解析模型及解析方法 - Google Patents
一种多语言可扩展的代码依赖解析模型及解析方法 Download PDFInfo
- Publication number
- CN116302919A CN116302919A CN202211516728.0A CN202211516728A CN116302919A CN 116302919 A CN116302919 A CN 116302919A CN 202211516728 A CN202211516728 A CN 202211516728A CN 116302919 A CN116302919 A CN 116302919A
- Authority
- CN
- China
- Prior art keywords
- dependency
- entity
- information
- code
- syntax tree
- 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
Links
- 238000004458 analytical method Methods 0.000 title claims abstract description 35
- 238000000034 method Methods 0.000 claims abstract description 48
- 230000008569 process Effects 0.000 claims abstract description 14
- 238000000605 extraction Methods 0.000 claims abstract description 13
- 230000008676 import Effects 0.000 claims abstract description 7
- 238000012545 processing Methods 0.000 claims description 25
- 230000003068 static effect Effects 0.000 claims description 11
- 230000001419 dependent effect Effects 0.000 claims description 10
- 239000000284 extract Substances 0.000 claims description 3
- 125000004122 cyclic group Chemical group 0.000 claims description 2
- 238000013461 design Methods 0.000 claims description 2
- 238000003860 storage Methods 0.000 abstract description 10
- 230000006870 function Effects 0.000 description 11
- 238000010586 diagram Methods 0.000 description 10
- 238000004590 computer program Methods 0.000 description 7
- 238000011161 development Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 3
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005265 energy consumption Methods 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 238000002360 preparation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000013589 supplement Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/80—Information retrieval; Database structures therefor; File system structures therefor of semi-structured data, e.g. markup language structured data such as SGML, XML or HTML
- G06F16/81—Indexing, e.g. XML tags; Data structures therefor; Storage structures
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开了一种多语言可扩展的代码依赖解析模型及解析方法,首先,利用解析器生成抽象语法树,基于对抽象语法树的遍历,在恰当的结点获取信息,完成对实体的抽取和保存,其次,此过程中保留了一些能够直接判断的依赖关系和能够判断一半信息的残缺依赖,最后,处理前序流程的分析中得到的残缺依赖,结合符号表,按照“先Export再Import后其他”的顺序完成依赖回填,完成依赖回填的残缺依赖将补充为完整依赖存储,依赖回填失败的残缺依赖将保留为未解决的依赖存储。
Description
技术领域
本发明涉及可信软件及静态代码分析领域,特别涉及一种语言无关、测试项目应用场景无关、可扩展的静态代码依赖解析领域。
背景技术
静态代码分析是软件工程领域的一个重要组成部分,软件产品在开发和维护过程中都需要进行静态代码分析,静态代码分析得到的依赖解析结果为上层软件及架构分析提供坚实基础,可以广泛应用于漏洞检测、架构度量、软件坏味道等多个领域,能够保障软件产品的可靠性和安全性。相较于动态分析,静态代码分析不需要运行软件产品,其在时间复杂度和空间复杂度上具有更好的表现。
学术界的研究往往集中于某些特定语言,且多偏向于调用(call)依赖图的构建和特定场景下的分析(如Linux操作系统),实体粒度相对较粗,往往是在函数层级上解析,依赖种类相对较少,依赖种类集中于调用关系和继承关系。更细粒度的实体和更多种类的依赖可以提供更加丰富的信息,为架构度量等上层应用提供稳固支撑。当前,工业界的研究往往基于自身需求进行设计,开发完善度较高且对外开放使用的工具多为闭源且收费的项目,其成本较高,开放性较差,该类项目由于语言语法规范多样性和无法在编译期间确定接受对象的类型等原因,在部分场景下准确率较低,且无法进行补充和迭代开发,其余项目多为开发的早期阶段,支持的功能较少,能力较为薄弱。现阶段还存在一些用于描述静态分析中间结果的协议,但是其普及度和使用度不够,较难验证其可行性。
发明内容
本发明的目的是旨在提供一种多语言的、可扩展的代码依赖解析方法,其可以在排序性能和时间开销上取得一定的平衡,并且在大规模软件中能够取得性能和时间开销双方面的优势,利用静态代码分析的方式来克服动态代码分析中程序必须没有运行错误、耗费算力和时间的缺点,以解决上述技术问题。
为达到上述目的,本发明采用以下技术方案予以实现:
S1 遍历文件系统
S2 生成抽象语法树
S3基于抽象语法树遍历的实体抽取
S4根据实体抽取结果的中间处理
S5 基于符号表的依赖回填
S6 生成结果并输出
一种多语言可扩展的代码依赖解析模型,包括:
代码依赖图模型,由节点和边组成,其中,节点表示的是实体对象,存储与实体相关的全部信息,包括但不限于实体的种类、唯一标识索引、全名、属性信息和位置信息,边是链接起发生依赖的两个实体之间的桥梁,此处,边为有向边,边的方向指代依赖发生的方向,即源实体到目的实体之间发生某依赖关系,除此之外,边还保留了其他与依赖相关的信息,包括但不限于依赖的种类和依赖的发生位置。
一种多语言可扩展的代码依赖解析方法,遍历文件系统模块,遍历输入项目路径,获取得到需要处理的文件信息及处理顺序;
抽象语法树生成模块,根据文件列表及处理顺序,设置合适的编译选项,生成抽象语法树;
基于抽象语法树的实体抽取模块,根据生成的抽象语法树和访问者设计模式,从抽象语法树上相应的节点上抽取实体信息;
中间处理模块,用于对实体列表中未完成的处理信息进行标识解决;
基于符号表的依赖回填模块,根据实体仓库里的实体信息和处理得到的残缺依赖补全实体信息,获得最终实体依赖图;
结果输出模块。
依赖图中每个节点可以确认唯一实体,节点与节点之间允许存在一种依赖发生多次或者是多种依赖同时发生等复杂情况,即边可以重叠存在,另外,依赖信息之间存在关联关系,根据依赖信息推导出循环依赖/间接依赖,依赖的发生位置可以是在实体定义文件,也可以不在,依赖的发生位置与源实体和目的实体的定义位置均可以在不同文件之中。
方法优化了内部的存储结构和处理逻辑,对于大规模和存在复杂依赖关系的软件产品,方法可以在理想的时间和空间完成解析。
对于需要解析其他形式,需要其他相关种类依赖的情况下,可以对方法过程中生成的抽象语法树进行扩展处理,整个框架功能隔离明确,允许并友好支持模块扩展。
对于输入的软件产品的语言不设限制,对于容忍软件产品的语法错误和语义错误,方法具有良好的鲁棒性。
其抽取到的实体粒度为符号级别的实体,粒度更细,保留的实体信息以变量为最小实体层级,保留的依赖信息以发生在实体之间的依赖信息为最小依赖层级。
更细粒度的信息格式,包括实体为具有包括但不限于名称、代码位置和类型等属性的对象结构,除类型外实体还可以有细分类型,其反映了更细粒度的实体特征:
依赖种类的广泛性,包括动态依赖和静态依赖等;
依赖回填的顺序性,包括综合符号表,按照“先Export再Import最后其他”的顺序完成依赖回填,完成依赖回填的残缺依赖将补充为完整依赖存储。
与现有技术相比,本发明具有以下有益效果:
本发明多语言可扩展的代码依赖解析方法,首先,利用解析器生成抽象语法树,基于对抽象语法树的遍历,在恰当的结点获取信息,完成对实体的抽取和保存,其次,此过程中保留了一些能够直接判断的依赖关系和能够判断一半信息的残缺依赖,最后,处理前序流程的分析中得到的残缺依赖,综合符号表,按照“先Export再Import最后其他”的顺序完成依赖回填,完成依赖回填的残缺依赖将补充为完整依赖存储,依赖回填失败的残缺依赖将保留为未解决的依赖存储。
附图说明
图1为本发明实施例的多语言可扩展的代码依赖解析方法的实体依赖分类图;
图2为本发明实施例的多语言可扩展的代码依赖解析方法流程图,其中包括三个子图,子图(a)为流程图总图,子图(b)为依赖回填流程图,子图(c)为扩展模块,隐式依赖抽取流程图;
图3为本发明实施例的多语言可扩展的实体依赖模型图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
下面结合附图对本发明做进一步详细描述:
参见图1,本发明实施例对所有可能的实体和依赖依其性质和抽取方式等的不同分别划分为了如(a)-(c)所示的3种和如(d)-(f)所示的3种。对于实体,图1(a)为部分的结构性实体,其一般是软件项目的组成文件和部分具有特定模式的文件夹;图1(b)为部分的代码实体,其一般是软件项目代码文件中符合特定语法格式且承担具体软件功能逻辑的元素;图1(c)为部分的作用域实体,其一般是软件项目代码文件中符合特定语法格式但仅起逻辑控制流转换功能的元素。对于依赖,图1(d)为部分的无需绑定依赖,其一般是在对代码抽象语法树进行遍历的过程中随着实体的抽取就能同时完全解析的依赖;图1(e)为部分的需要绑定依赖,其一般是在对代码抽象语法树进行遍历时无法完全解析的依赖,通常需要在随后进行二次分析以根据代码字符串找到该依赖所指向的实体;图1(f)为部分的隐式依赖,其一般是在无类型标注系统的编程语言中根据某变量随后的对属性的使用情况来反推该变量可能的类型所构建出的依赖,相比于前述依赖,隐式依赖解析还需要额外的步骤来实现求解和约束求精。
参见图2(a)本发明实施例的总体流程图,本方法的输入包括项目源代码、项目配置和第三方库列表等,输出为实体仓库、依赖仓库和自定义分析结果(若有)等,具体包括以下过程:
准备工作选取合适的解析器。本方法需要调研现有解析器,所选解析器需要能够在容错的情况下高效率、高准确率、低能耗生成抽象语法树,该解析器需要是行业内部存在共识,普遍验证、根据语言版本变更及时维护的工具,例如,本发明中对于Java和C++语言分别采用Eclipse的JDT和CDT,对于Python采用语言官方parser,对于Javascript和TypeScript采用babel。
S1遍历软件项目目录以获得所有结构性实体。具体地,包含以下步骤:
S101:给定软件项目的多个目录路径,首先使用树的遍历算法遍历目录中所有的文件,对于编程语言源文件、特定编程语言或框架的配置文件和其他会影响依赖分析的文件,分别为其创建File实体;
S102:对于部分特定编程语言中具有特定功能意义的目录结构,如Python中包含__init__.py文件的目录特化为Python Module和JavaScript中包含package.json文件的目录特化为Node.js Package,额外为其创建对应的结构性实体。若某结构性实体有相对应的配置文件,则一并将配置文件中会影响依赖分析的信息以属性的形式保存在该实体中。
S2遍历代码抽象语法树节点以获得所有代码实体和作用域实体。具体地,包含以下步骤:
S201:特定编程语言限定的预处理环节。若某特定编程语言存在涉及到对代码文件进行改写的行为,则本发明实施例会在此处依相关定义进行相同的改写。如C/C++中需要先处理所有头文件(.h文件)再处理(宏展开)其他代码文件,以及还需要访问和解析特定的程序环境变量等。
S202:将S101中获得的File实体所对应的代码文件的内容使用Parser解析为代码抽象语法树。根据所选使用的Parser的不同,该步骤既可以对单文件一一进行解析,也可直接使用特定Parser所提供的对完整项目一次性建立完整的抽象语法树的API来一次性解析;
S203:使用Parser所提供的基于访问者模式的节点遍历接口依次序遍历所有代码抽象语法树节点,对于各代码实体和作用域实体所分别对应的抽象语法树节点,注册相对应的抽取方法。特定的抽取方法能在被调用时创建其类型的实体并从对应的抽象语法树节点中提取需要的信息保存在该实体中。在此过程中,所有实体都依照代码作用域包含关系层级化保存;
S204:初始化并随S203节点遍历过程持续维护跨节点的上下文信息栈。部分编程语言特性会使得当前节点的属性计算依赖于其同层的兄弟节点或跨越多层的父子节点的相关属性,Parser所提供的节点遍历接口通常是无状态的,因此需要额外使用一个可在节点跳转时维持和传递特定信息的栈结构;
S205:部分无需绑定依赖的立即解析。特定编程语言的语法模式使得待绑定的实体实际上出现在特定依赖的语法标识符之后,在依次序遍历抽象语法树节点时,按S203创建该待绑定的实体的同时即可以完成该依赖的创建和绑定,使其成为一个完整依赖;
S206:需要绑定依赖(残缺依赖)的记录。与S204相反,大多数语法模式都使得待绑定的实体出现在特定依赖的语法标识符之前,在遍历到该依赖的语法标识符之时,仅能获取到字符串形式的对该实体的引用,该字符串需要在后续步骤被解析为S203所保存的实体,而在本步骤只能将该不完整的依赖(残缺依赖)及其他有助于绑定的相关信息暂时保存在单独的结构中。
S3根据实体抽取结果做中间处理。完成在2中因实体未全部抽取而未能处理的过程中保存的实体属性信息。例如:(1)为由数据聚合实体定义的对象绑定其类型信息;(2)实现对函数重载信息的识别和记录等。
S4基于层级化符号表的依赖绑定。按照“Export->Import->其他”的顺序遍历2中所记录的残缺依赖,根据模块路径解析规则和基于作用域的符号表层级搜索等方法补全依赖关系。具体地,包含以下步骤:
S401:处理抽象语法树可以解决的绑定信息,根据抽象语法树提供的绑定信息来回填同一个文件中的依赖,保存在依赖仓库里;
S402:处理跨文件间及同文件未绑定的依赖,此过程从符号表进行查找回填。此处进行分类讨论:第一步根据语言需要,对Import依赖首先查找是否有相对应的Export依赖;第二步根据生命周期分类,对于依赖目标绑定实体为函数/类等全生命周期的情况,先采用根据作用域向上逐级查找的方法查找,查找失败后在有引用关系(Import、Include等)的文件中进行查找,最后查找编程语言内置的Built-in实体;对于存在生命周期限制的局部变量等实体而言,由于内存会在local scope结束的时候被释放,不会被外部的实体访问到,故只使用短名字来进行设置,在查找过程中只在当前作用域或者是上层作用域内进行搜索,继而绑定。对于采用上述绑定成功的依赖信息,作为完整依赖,保存在实体仓库里,对于绑定失败的依赖信息,将其归类为未知依赖,未知依赖产生的原因包括但不限于标准API的调用和第三方库的版本不一致等情况,同样加入依赖仓库进行存储,可以将其未绑定部分的实体,标记为unresolved,该依赖也同样标记为unresolved。
参见图2(b)所示,为本方法实施例中的对残缺依赖进行依赖绑定的流程图。总体上关于依赖绑定,可能实施的步骤有本地作用域搜索、模块路径解析、Exported作用域搜索、Imported作用域搜索、三方库列表搜索和语言Built-in列表搜索,不同类型的依赖可能会分别用到上述所有步骤的单个或多个。对于由S206所记录的所有残缺依赖,在处理之前依先类型按特定的处理时序排列,总体上遵循“先Export再Import后其他”的顺序来处理。处理每种类型的依赖所需要用到的步骤均在图中以“√”(单步骤)或数字(按数字顺序执行步骤)标识。
以下内容是对该方法的可扩展性的说明和解释:
参见图2(c)所示,为本方法实施例中可扩展部分的样例,此实施例中呈现的为隐式依赖抽取模块。隐式依赖为难以通过常规静态代码分析索引到的依赖关系,该类依赖在通常情况下只能通过动态分析获取到。在本方法中,可以借助生成的AST对语义进行抽象,例如x=y可以表示为Move(x,y),x.f=y可以表示为Store(x,f,y);根据语义抽象、前面所述提到的显式依赖和构建的堆模型,可以获得根据指向关系的解析代码依赖,进而规约为由成员调用等约束的隐式依赖关系。
参见图3所示,为本方法实施例中的实体依赖模型图,实体为具有包括但不限于名称(Name)、代码位置(Location)和类型(Type)等属性的对象结构,除类型外实体还可以有细分类型(Sub-type),其反映了更细粒度的实体特征;依赖D=<Esrc,Type,Edest>为包含起始实体、依赖类型和终止实体的三元组结构,其也具有包括但不限于代码位置(Location)等属性。该模型将传统的简单枚举模型{E={Ea,Eb,…},D={Da,Db,…}}进行了更细粒度的划分,利用了依赖的三元组结构中的起始实体类型和终止实体类型将可能在多种实体对之间产生的同名依赖按照实体类型的不同划分到不同的二维坐标(Esrc,Edest)下。该实体依赖模型能不但能展现完整的实体和依赖类型分类,也能清晰的展现何种实体之间可以产生何种依赖的细粒度关系,在指导编码实现时具有提示注意避免遗漏的作用。
本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本发明各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。
Claims (10)
1.一种多语言可扩展的代码依赖解析模型,其特征在于,包括:
代码依赖图模型,由节点和边组成,其中,节点表示的是实体对象,存储与实体相关的全部信息,包括但不限于实体的种类、唯一标识索引、全名、属性信息和位置信息,边是链接起发生依赖的两个实体之间的桥梁,此处,边为有向边,边的方向指代依赖发生的方向,即源实体到目的实体之间发生某依赖关系,除此之外,边还保留了其他与依赖相关的信息,包括但不限于依赖的种类和依赖的发生位置。
2.采用如权利要求1所述模型的一种多语言可扩展的代码依赖解析方法,其特征在于,遍历文件系统模块,遍历输入项目路径,获取得到需要处理的文件信息及处理顺序;
抽象语法树生成模块,根据文件列表及处理顺序,设置合适的编译选项,生成抽象语法树;
基于抽象语法树的实体抽取模块,根据生成的抽象语法树和访问者设计模式,从抽象语法树上相应的节点上抽取实体信息;
中间处理模块,用于对实体列表中未完成的处理信息进行标识解决;
基于符号表的依赖回填模块,根据实体仓库里的实体信息和处理得到的残缺依赖补全实体信息,获得最终实体依赖图;
结果输出模块。
3.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,依赖图中每个节点可以确认唯一实体,节点与节点之间允许存在一种依赖发生多次或者是多种依赖同时发生等复杂情况,即边可以重叠存在,另外,依赖信息之间存在关联关系,根据依赖信息推导出循环依赖/间接依赖,依赖的发生位置可以是在实体定义文件,也可以不在,依赖的发生位置与源实体和目的实体的定义位置均可以在不同文件之中。
4.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,方法优化了内部的存储结构和处理逻辑,对于大规模和存在复杂依赖关系的软件产品,方法可以在理想的时间和空间完成解析。
5.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,对于需要解析其他形式,需要其他相关种类依赖的情况下,可以对方法过程中生成的抽象语法树进行扩展处理,整个框架功能隔离明确,允许并友好支持模块扩展。
6.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,对于输入的软件产品的语言不设限制,对于容忍软件产品的语法错误和语义错误,方法具有良好的鲁棒性。
7.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,其抽取到的实体粒度为符号级别的实体,粒度更细,保留的实体信息以变量为最小实体层级,保留的依赖信息以发生在实体之间的依赖信息为最小依赖层级。
8.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,更细粒度的信息格式,包括实体为具有包括但不限于名称、代码位置和类型等属性的对象结构,除类型外实体还可以有细分类型,其反映了更细粒度的实体特征。
9.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,依赖种类的广泛性,包括动态依赖和静态依赖。
10.根据权利要求2所述的一种多语言可扩展的代码依赖解析方法,其特征在于,依赖回填的顺序性,包括综合符号表,按照“先Export再Import最后其他”的顺序完成依赖回填,完成依赖回填的残缺依赖将补充为完整依赖存储。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211516728.0A CN116302919A (zh) | 2022-11-29 | 2022-11-29 | 一种多语言可扩展的代码依赖解析模型及解析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211516728.0A CN116302919A (zh) | 2022-11-29 | 2022-11-29 | 一种多语言可扩展的代码依赖解析模型及解析方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116302919A true CN116302919A (zh) | 2023-06-23 |
Family
ID=86824563
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211516728.0A Pending CN116302919A (zh) | 2022-11-29 | 2022-11-29 | 一种多语言可扩展的代码依赖解析模型及解析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116302919A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116955719A (zh) * | 2023-09-20 | 2023-10-27 | 布谷云软件技术(南京)有限公司 | 一种链式网络结构数字化存储的代码管理方法及系统 |
-
2022
- 2022-11-29 CN CN202211516728.0A patent/CN116302919A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116955719A (zh) * | 2023-09-20 | 2023-10-27 | 布谷云软件技术(南京)有限公司 | 一种链式网络结构数字化存储的代码管理方法及系统 |
CN116955719B (zh) * | 2023-09-20 | 2023-12-05 | 布谷云软件技术(南京)有限公司 | 一种链式网络结构数字化存储的代码管理方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103412853B (zh) | 一种针对文档转换器的测试用例自动生成方法 | |
JP7172435B2 (ja) | 抽象コードグラフを用いたソフトウェアの表現 | |
CN102567201B (zh) | 跨模型的图形用户界面测试脚本自动修复方法 | |
CN110825385B (zh) | React Native离线包的构建方法及存储介质 | |
CN102880468A (zh) | 一种用于ecu程序开发的代码智能提示方法及其系统 | |
CN113901083B (zh) | 基于多解析器的异构数据源操作资源解析定位方法和设备 | |
US11262988B2 (en) | Method and system for using subroutine graphs for formal language processing | |
CN116302919A (zh) | 一种多语言可扩展的代码依赖解析模型及解析方法 | |
CN104899037A (zh) | 一种基于模型的侵入式灰盒组装验证方法 | |
CN112256271A (zh) | 一种基于静态分析的区块链智能合约安全检测系统 | |
CN116560642A (zh) | 代码生成方法及其装置、电子设备及存储介质 | |
CN116302930A (zh) | 应用测试方法和装置 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN112395198B (zh) | 一种基于区分子图挖掘的软件缺陷发现方法 | |
WO2023207973A1 (zh) | 编译器测试方法、用例生成方法、装置及指令存储结构 | |
CN112115125B (zh) | 数据库访问对象名称解析方法、装置及电子设备 | |
Creager et al. | Stack graphs: Name resolution at scale | |
CN109710538B (zh) | 一种用于大规模系统中状态相关缺陷的静态检测方法 | |
CN101126983A (zh) | 一种结构化模型的合并方法及系统 | |
Grigorev et al. | String-embedded language support in integrated development environment | |
CN102129406A (zh) | 一种基于条件值的软件静态预测方法及工具 | |
CN117909121A (zh) | 死锁修复系统、方法和计算机设备 | |
CN114968806A (zh) | 单元测试用例的生成方法、装置、设备及介质 | |
CN115964289A (zh) | 基于Python的SDK接口和功能的测试方法、装置、设备及介质 | |
CN117472381A (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 |