CN113946366A - 代码分析的方法、系统及计算设备 - Google Patents

代码分析的方法、系统及计算设备 Download PDF

Info

Publication number
CN113946366A
CN113946366A CN202011433419.8A CN202011433419A CN113946366A CN 113946366 A CN113946366 A CN 113946366A CN 202011433419 A CN202011433419 A CN 202011433419A CN 113946366 A CN113946366 A CN 113946366A
Authority
CN
China
Prior art keywords
code
algorithm
analysis
information
target
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
CN202011433419.8A
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.)
Huawei Cloud Computing Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to PCT/CN2021/103301 priority Critical patent/WO2022012327A1/zh
Priority to EP21843552.7A priority patent/EP4184330A4/en
Publication of CN113946366A publication Critical patent/CN113946366A/zh
Priority to US18/152,942 priority patent/US20230168888A1/en
Pending legal-status Critical Current

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
    • G06F8/751Code clone detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3616Software analysis for verifying properties of programs using software metrics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请公开了一种代码分析方法,该方法应用于代码分析系统,代码分析系统获取业务场景的信息,该业务场景表示代码分析的目标;代码分析系统进一步地基于业务场景的信息生成针对该业务场景的代码分析算法;在需要进行代码分析时,代码分析系统获取用户指定的源代码和目标代码的信息;基于前述代码分析算法,对源代码和目标代码之间的相似性进行分析,获得分析结果。采用基于业务场景的信息生成的代码分析算法对源代码和目标代码进行代码的相似性分析,可获得更满足业务场景需要的分析结果。

Description

代码分析的方法、系统及计算设备
技术领域
本申请涉及软件开发领域,尤其涉及代码分析的方法、系统及计算设备。
背景技术
在软件开发和维护过程中,开发者们常会采用复制粘贴方式,对某些代码片段进行直接复用或进行修改后复用,使得一个代码文件中或者不同代码来源中存在不少相同或相似的代码片段,这个过程被称为代码克隆(code clones)。代码克隆在一定程度上会对软件的质量带来威胁。例如,在一种场景下,代码克隆容易将Bug引入到软件系统中并分散在不同的代码位置处,一旦某个代码片段存在某个bug或需求变更,所有的克隆实例都需要进行同步修复或调整。但由于代码克隆实例众多且分散,人工维护成本高,容易产生变更遗漏,从而在软件演化过程中这些代码克隆的存在逐步加剧了软件质量的腐化并提高了其维护成本。多种应用场景都需要利用代码分析算法进行代码克隆的有效分析。
目前进行代码克隆的分析常采用固定的特征和方法,获得的分析结果不能满足实际需求。
发明内容
本申请公开了执行代码分析的方法、系统和计算设备,该代码分析方法获得的分析结果可以满足用户的实际业务需求。
第一方面,本申请提供一种代码分析的方法,该方法应用于代码分析系统,代码分析系统首先获取业务场景的信息,其中,该业务场景表示代码分析的目标,进一步地基于业务场景的信息生成针对该业务场景的代码分析算法;在需要对代码进行克隆分析时,代码分析系统获取用户指定的源代码和目标代码的信息;并基于代码分析算法,对源代码和目标代码之间的相似性进行分析,获得分析结果。
由于上述方法并非采用通用的代码分析算法对源代码和目标代码进行分析,而是先基于业务场景的信息生成代码分析算法,采用基于业务场景的信息生成的代码分析算法对源代码和目标代码进行分析,可获得更满足业务场景需要的分析结果,提高了分析结果的准确性和可应用性。
在第一方面的一种可能实现中,基于所述业务场景的信息生成针对所述业务场景的代码分析算法,包括:基于业务场景的信息,向用户推荐与所述业务场景对应的算法特征;再根据用户在推荐的算法特征中确认的目标算法特征,生成代码分析算法。
上述向用户推荐与业务场景对应的算法特征,且采用经过用户的确认后的目标算法特征生成代码分析算法,使得生成的代码分析算法更满足用户在该业务场景下的需求。
在第一方面的一种可能实现中,前述向用户推荐的算法特征包括代码分析特征和后处理特征,其中,代码分析特征表示对代码进行分析时的分析策略类型,后处理特征表示对代码进行分析后需要进行的后处理策略类型。对两方面的算法特征均进行推荐和确认,可以使得得到的代码分析算法在更细粒度的层面满足用户的业务场景的需求。
在第一方面的一种可能实现中,与所述业务场景对应的算法特征来源于预置特征库,该预置特征库包括至少一种业务场景及对应的算法特征。
在第一方面的一种可能实现中,根据用户在推荐的算法特征中确认的目标算法特征,生成所述代码分析算法,包括:根据该用户在推荐的算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
在第一方面的一种可能实现中,获取业务场景的信息,包括:获取至少两个业务场景的信息;基于所述业务场景的信息生成所述代码分析算法,包括:基于每个业务场景的信息,生成分别针对每个业务场景的至少两个代码分析算法;基于所述代码分析算法,对所述源代码和目标代码之间的相似性进行分析包括:根据至少两个代码分析算法,分别对源代码与目标代码之间的相似性进行分析,该分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
上述方法可以针对至少两个业务场景分别生成代码分析算法,且至少两个代码分析算法一起用于对同一组源代码和目标代码进行分析,使得获得的分析结果可以包含至少两个代码分析算法分析出来的结果。通过上述方法用户不必对同一组源代码和目标代码执行两次分析,即可得到包含两种所需场景的分析结果,且在分析结果中可通过克隆代码对的信息和克隆代码对对应的业务场景的信息得知每个克隆代码对是由对应那种业务场景的代码分析算法分析得来的,大大方便了用户。
可选的,上述克隆代码对的信息可以包括组成克隆代码对的两部分代码片段、第一部分代码片段在源代码中的位置信息、第二部分代码片段在目标代码中的位置信息,克隆代码对的相似程度信息、克隆代码对的相似原因描述。
在第一方面的一种可能实现中,业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。各个业务场景的信息表示代码分析算法应用的目标,例如:代码溯源分析,则表示生成的针对代码溯源分析场景的代码分析算法要用于识别源代码中是否有代码块来源于目标代码(例如:开源代码库中的代码)。
在第一方面的一种可能实现中,代码分析的方法还包括:获取日志信息,该日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;基于该日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
上述方法通过在代码分析的过程中根据日志信息调整预置特征库中业务场景和算法特征的对应关系,可以使得利用预置特征库进行基于业务场景的算法特征进行推荐时更准确、更符合对应业务场景的需求。
在第一方面的一种可能实现中,日志信息包括以下信息中的一种或多种:业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
在第一方面的一种可能实现中,获取业务场景的信息,包括:向用户提供配置界面,接收用户在改该配置界面选择或输入的业务场景的信息。通过配置界面的方式获取业务场景的信息,对用户的使用更友好。
在第一方面的一种可能实现中,在基于代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析之前,该方法还包括:将生成的针对所述业务场景的代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
上述方法可以使用户通过代码分析服务的方式进行代码分析,生成的代码分析算法在后台被调用,这种方式对用户更方便、友好。
第二方面,本申请还提供一种代码分析的方法,该方法应用于代码分析系统,包括:向用户推荐至少一个算法特征,每个算法特征对应至少一个算子;根据该用户在所述算法特征中确认的目标算法特征,生成代码分析算法;获取用户指定的源代码和目标代码的信息;基于该代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
上述方法通过向用户推荐算法特征并基于用户确认的目标算法特征生成代码分析算法,并将代码分析算法用于源代码和目标代码的相似性分析,使得生成的代码分析算法的功能更满足用户的需求,也使得利用该代码分析算法获得的代码分析结果更满足用户的需求。
在第二方面的一种可能实现中,上述方法还包括:获取业务场景的信息,所述业务场景表示执行代码分析的目标;其中,向用户推荐至少一个算法特征,包括:基于业务场景的信息,向用户推荐至少一个与所述业务场景对应的算法特征。上述方法基于业务场景的信息向用户推荐算法特征,使得推荐的算法特征更具有针对性,给予用户建议的算法特征,减少了用户选择的范围,使得代码分析系统适合于更多的用户。
在第二方面的一种可能实现中,算法特征包括代码分析特征和后处理特征,其中,所述代码分析特征表示对代码进行分析时的分析策略类型,所述后处理特征表示对代码进行分析后需要进行的后处理策略类型。
在第二方面的一种可能实现中,与所述业务场景对应的算法特征来源于预置特征库,所述预置特征库包括至少一种业务场景及对应的算法特征。
在第二方面的一种可能实现中,根据用户在所述算法特征中确认的目标算法特征,生成代码分析算法,包括:根据所述用户在所述算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
在第二方面的一种可能实现中,获取业务场景的信息,包括:获取至少两个业务场景的信息;根据所述用户在所述算法特征中确认的目标算法特征,生成代码分析算法,包括:根据用户在所述算法特征中确认的目标算法特征,生成分别针对每个业务场景的至少两个代码分析算法;基于所述代码分析算法,对所述源代码和目标代码之间的相似性进行分析,获得分析结果,包括:根据所述至少两个代码分析算法,分别对所述源代码与所述目标代码之间的相似性进行分析,获得分析结果,所述分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
通过上述方法用户不必对同一组源代码和目标代码执行两次分析,即可得到包含两种所需场景的分析结果,且在分析结果中可通过克隆代码对的信息和克隆代码对对应的业务场景的信息得知每个克隆代码对是由对应那种业务场景的代码分析算法分析得来的,提高了代码分析的效率,给用户带来方便。
在第二方面的一种可能实现中,业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。
在第二方面的一种可能实现中,所述方法还包括:获取日志信息,所述日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;基于所述日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
在第二方面的一种可能实现中,所述日志信息包括以下信息中的一种或多种:业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
在第二方面的一种可能实现中,在基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析之前,所述方法还包括:将生成的所述代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
第三方面,本申请提供一种代码分析系统,包括:
交互组件,用于获取业务场景的信息,所述业务场景表示代码分析的目标;
处理组件,用于基于所述业务场景的信息生成针对所述业务场景的代码分析算法;
该交互组件,还用于获取用户指定的源代码和目标代码的信息;
该处理组件,还用于基于所述代码分析算法,对源代码和目标代码之间的相似性进行分析,获得分析结果。
在第三方面的一种可能实现中,交互组件,还用于基于所述业务场景的信息,向所述用户推荐与所述业务场景对应的算法特征;处理组件,用于根据所述用户在推荐的算法特征中确认的目标算法特征,生成所述代码分析算法。
在第三方面的一种可能实现中,上述算法特征包括代码分析特征和后处理特征,其中,所述代码分析特征表示对代码进行分析时的分析策略类型,所述后处理特征表示对代码进行分析后需要进行的后处理策略类型。
在第三方面的一种可能实现中,与所述业务场景对应的算法特征来源于预置特征库,所述预置特征库包括至少一种业务场景及对应的算法特征。
在第三方面的一种可能实现中,处理组件,用于根据所述用户在推荐的算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
在第三方面的一种可能实现中,交互组件,用于获取至少两个业务场景的信息;处理组件,用于基于每个业务场景的信息,生成分别针对每个业务场景的至少两个代码分析算法;根据所述至少两个代码分析算法,分别对所述源代码与所述目标代码之间的相似性进行分析,所述分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
在第三方面的一种可能实现中,业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。
在第三方面的一种可能实现中,交互组件,还用于获取日志信息,所述日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;处理组件,还用于基于所述日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
在第三方面的一种可能实现中,日志信息包括以下信息中的一种或多种:业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
在第三方面的一种可能实现中,交互组件,用于向用户提供配置界面,接收所述用户在所述配置界面选择或输入的业务场景的信息。
在第三方面的一种可能实现中,处理组件,还用于将生成的针对所述业务场景的代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
第四方面,本申请还提供一种代码分析系统,包括:
交互组件,用于向用户推荐至少一个算法特征,每个算法特征对应至少一个算子;
处理组件,用于根据所述用户在所述算法特征中确认的目标算法特征,生成代码分析算法;
该交互组件,还用于获取所述用户指定的源代码和目标代码的信息;
该处理组件,还用于基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
在第四方面的一种可能实现中,交互组件,还用于获取业务场景的信息,所述业务场景表示执行代码分析的目标;交互组件,用于基于所述业务场景的信息,向所述用户推荐至少一个与所述业务场景对应的算法特征。
在第四方面的一种可能实现中,算法特征包括代码分析特征和后处理特征,其中,所述代码分析特征表示对代码进行分析时的分析策略类型,所述后处理特征表示对代码进行分析后需要进行的后处理策略类型。
在第四方面的一种可能实现中,与所述业务场景对应的算法特征来源于预置特征库,所述预置特征库包括至少一种业务场景及对应的算法特征。
在第四方面的一种可能实现中,处理组件,用于根据所述用户在所述算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
在第四方面的一种可能实现中,交互组件,还用于获取至少两个业务场景的信息;处理组件,用于根据所述用户在所述算法特征中确认的目标算法特征,生成分别针对每个业务场景的至少两个代码分析算法;根据所述至少两个代码分析算法,分别对所述源代码与所述目标代码之间的相似性进行分析,获得分析结果,所述分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
在第四方面的一种可能实现中,业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。
在第四方面的一种可能实现中,交互组件,还用于获取日志信息,所述日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;处理组件,还用于基于所述日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
在第四方面的一种可能实现中,上述日志信息包括以下信息中的一种或多种:
业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
在第四方面的一种可能实现中,处理组件,还用于将生成的所述代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
第五方面,本申请提供一种用于代码分析的计算设备,该计算设备包括处理器和存储器,所述存储器存储计算机指令,所述处理器执行所述计算机指令,以使所述计算设备执行前述第一方面或第一方面的任意可能实现中的方法或者执行前述第二方面或第二方面的任意可能实现中的方法。
第六方面,本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序代码,当所述计算机程序代码被计算设备执行时,所述计算设备执行前述第一方面或第一方面的任意可能实现中的方法,或者执行前述第二方面或第二方面的任意可能实现中的方法。该计算机可读存储介质包括但不限于易失性存储器,例如随机访问存储器,非易失性存储器,例如快闪存储器、硬盘(英文:hard disk drive,缩写:HDD)、固态硬盘(英文:solid state drive,缩写:SSD)。
第七方面,本申请还提供一种计算机程序产品,所述计算机程序产品包括计算机程序代码,在所述计算机程序代码被计算设备执行时,所述计算设备执行前述第一方面或第一方面的任意可能实现中提供的方法,或执行前述第二方面或第二方面的任意可能实现中提供的方法。该计算机程序产品可以为一个软件安装包,在需要使用前述第一方面或第一方面的任意可能实现中提供的方法,或者需要使用前述第二方面或第二方面的任意可能实现中提供的方法的情况下,可以下载该计算机程序产品并在计算设备上执行该计算机程序产品。
附图说明
图1为本申请实施例提供的一种系统架构示意图;
图2为本申请实施例提供的一种应用场景的示意图;
图3为本申请实施例提供的一种代码分析系统200的结构示意图;
图4为本申请实施例提供的一种代码分析的流程示意图;
图5为本申请实施例提供的一种业务场景选择的界面示意图;
图6为本申请实施例提供的一种算法特征推荐的界面示意图;
图7为本申请实施例提供的一种示例性的代码分析算法的自动化组装过程;
图8为本申请实施例提供的一种指定源代码和目标代码来源信息的界面示意图;
图9为本申请实施例提供的一种代码克隆分析结果的呈现界面示意图;
图10为本申请实施例提供的另一种代码分析系统600的结构示意图。
图11为本申请实施例提供的计算设备700的结构示意图。
具体实施方式
业界将在软件开发和维护过程中对代码进行简单复用或者修改后复用,使得代码仓库或者一个或多个代码文件中包括多个相同或相似的代码片段的过程称为代码克隆(code clone)。由一个代码片段衍生出的相同或相似的代码片段被称为该代码片段的克隆代码。
代码克隆可以分为四种类别:第一类:产生与一个代码片段相同的另一个或者多个代码片段,产生的克隆代码仅与原代码片段存在空格、布局或注释的差别。第二类:产生与一个代码片段语法结构相同的另一个或者多个代码片段,产生的克隆代码仅与原代码存在变量名、数字、类型、字符、空格、布局及注释的差别。第三类:产生与一个代码片段语法结构相似的另一个或者多个代码片段,产生的克隆代码在允许存在变量名、数字、类型、字符、空格、布局及注释差别的基础上,允许插入或者删除部分语句或者表达式。第四类:产生与原代码的语义相同(特定输入情况下,输出或产生的行为保持一致),但所采用的实现逻辑或算法完全不同的克隆代码。
本申请中的代码分析方法旨在生成代码分析算法,利用代码分析算法分析出代码文件中存在的克隆代码。应理解,本申请中的代码分析也可以称为代码克隆分析,代码分析服务也可以称为代码克隆分析服务,代码分析算法也可以称为代码克隆分析算法。
软件分析领域存在很多业务场景都依赖于代码克隆分析的支持。例如:这些应用场景包括:1、开源成分溯源分析场景,在该场景下,对于一个给定的受检软件项目,利用代码克隆分析自动分析该项目中引用了哪些来自于开源社区的开源代码片段。开源成分溯源分析有助于开发者检查由开源社区克隆而来的代码片段是否满足开源协议,以便于及时排查风险。2、代码抄袭检测场景,例如,在线编程测试系统中,利用代码克隆分析,针对不同学生提交的作业进行抄袭问题的自动化识别与确认。3、代码聚类分析场景,围绕软件数据进行挖掘时,往往需要将相似的代码进行归类聚类后,再进行高级模式或洞察的自动化提炼和挖掘。对相似代码的聚类需要使用到代码克隆分析方法。4、代码重构场景,软件重构过程中,需要进行代码克隆分析及时识别出冗余代码片段并及时进行抽取,从而减少后期维护成本。5、代码缺陷检测场景,例如:针对软件中相似的代码中存在复制粘贴(copy-paste)过程中,对出现的修订不一致问题进行自动化检测与预警。
应理解,上述代码分析所应用到的业务场景仅是示例性的举例,实际上,代码分析还可以应用于更多业务场景,本申请对此不作限定。
虽然不同场景都依赖于代码分析算法,但由于各个业务场景的关注点不同,所需要的代码分析算法的功能也会有所差异。例如,代码聚类场景可直接基于文本方式进行相似度判断,不需要过于精准;代码抄袭场景需要进行代码中变量名的正则化,并基于抽象语法树层面尽量进行精准匹配;而在代码检测复制粘贴错误的场景,需要针对代码进行更大程度地抽象,找到疑似拷贝代码位置等。因此可以看到,不同的业务场景下,代码分析算法内部所采用的技术方案、特征维度、过滤技术等,也会有所变化,以更好地支撑上层应用场景。
相关的进行代码克隆分析的工具往往只提供基于代码相似度的固定的代码分析算法,其内部算法逻辑固定不变,无法很好地胜任不同的业务场景,导致代码克隆分析的工具应用于不同的业务场景时,存在对一些业务场景下代码克隆分析不准确、分析结果不适用的问题。
基于上述问题,本申请提供一种代码分析系统。在一些实施例中,该代码分析系统可以向用户提供代码分析服务,该系统可以支持根据用户的特定业务场景诉求,生成与用户所指定的业务场景相匹配的代码分析算法,为用户提供更加准确的代码克隆分析。在另一些实施例中,该代码分析系统也可以向用户推荐至少一种算法特征,根据用户在推荐的算法特征中确认的目标算法特征生成满足用户需求的代码分析算法,进而利用生成的代码分析算法为用户提供代码克隆分析。在又一种实施例中,该代码分析系统还可以先获取业务场景的信息,再根据业务场景的信息向用户推荐与该业务场景对应的算法特征,再获得用户确认的目标算法特征,生成满足用户的业务需求的代码分析算法,进而利用生成的代码分析算法为用户提供代码克隆分析。
图1为本申请实施例提供的一种系统架构示意图。用户101通过终端计算设备与运行代码分析系统的服务器102进行数据通信,以使用代码分析系统提供的代码分析服务。用户101可以通过终端计算设备(例如:笔记本电脑、平板电脑、PC计算机、智能手机)访问网页(web)客户端或者应用(application,app)程序客户端,通过客户端实现与服务器102中运行的代码分析系统进行交互。其中,app程序需要用户101预先下载安装在终端计算设备中,app程序通常由代码分析系统的提供方在应用下载平台发布,并定期升级和维护。在另一种实施例中,用户101的终端计算设备也可以通过命令行接口(command line interface,CLI)与服务器102中运行的代码分析系统进行交互。
应理解,服务器102可以是一个独立的服务器或者是包含多个独立服务器的服务器集群,当服务器102为服务器集群时,代码分析系统在该服务器集群中分布式地运行。服务器102可以是云服务器(例如:公有云服务商的云服务器)、边缘服务器或者终端服务器,或者是前述三种服务器中的任意两种或三种服务器构成的服务器集群。
如图2所示,在一些实施例中,服务器102可以是公有云服务商的云数据中心中的云服务器或云服务器集群,公有云服务商可以在云服务平台提供代码分析服务,运行在服务器102中的代码分析系统用于支撑这项云服务。用户101通过网页界面在云服务平台购买和使用代码分析服务,代码分析系统接收用户101的分析配置信息和分析请求,为用户101完成代码克隆的分析。
图3为本申请实施例中的一种代码分析系统200的结构示意图。代码分析系统200可以包括交互模块201,算法生成模块203,算法执行模块204,可选的,代码分析系统200还包括算法特征推荐模块202,预置特征库205,预置算法库206和挖掘与调整模块207。
在一些实施例中,交互模块201,用于与用户交互,获取用户输入或选择的业务场景信息;或者交互模块201用于与其他系统或者组件交互获取要进行代码克隆分析的业务场景的信息。在一些实施例中,交互模块201还用于向用户提供算法特征推荐模块202推荐的算法特征,并接受用户确认或选择的目标算法特征,将目标算法特征发送至算法生成模块203。在一些实施例中,交互模块201还用于接收用户指定的用于代码克隆分析的源代码和目标代码的信息,例如地址信息,交互模块201还用于将源代码和目标代码的信息发送给算法执行模块206。在一些实施例中,交互模块201还用于向用户提供代码克隆分析结果,接收用户对代码克隆分析结果的反馈信息。
在一些实施例中,算法特征推荐模块202,用于基于获取的业务场景信息,在预置特征库中查找与用户需要进行代码克隆分析的业务场景信息相匹配的算法特征,或者利用预训练的人工智能(artificial intelligence,AI)模型进行推理,获得与用户需要进行代码克隆分析的业务场景信息相匹配的算法特征,并结合交互模块201向用户推荐算法特征。算法特征推荐模块202用基于查找的方式产生与业务场景相匹配的算法特征时,可以在代码分析系统200中包括的预置特征库205中进行查找,若代码分析系统200不包括预置特征库205,也可以访问其他系统中的特征库进行匹配的算法特征的查找。
在一些实施例中,算法特征推荐模块202,用于向用户推荐至少一个算法特征,被推荐的算法特征作为候选的算法特征供用户选择,被推荐的算法特征可能来自后台维护的数据库,这些算法特征与业务场景还没有关联关系。
应理解,本申请中的算法特征表示对待分析的代码进行算法处理的策略类型,一个代码分析算法可以集合多个算法特征。算法特征可以包括代码分析特征和后处理特征。代码分析特征表示对代码进行分析时的分析策略类型,例如:进行纯文本的分析和比对;变量名正则化比对;对变量名抽象后比对;空行、空格或注释过滤后比对等。后处理特征表示对代码进行分析后需要进行的后处理策略类型,例如:在基于代码分析特征完成代码相似度计算后,采用过滤器对相似度较高的代码片段进行过滤,过滤器如:“Include Filter”表示将相似代码中含有include语句的代码片段进行过滤;“Import Filter”表示将相似代码中含有import语句的代码片段进行过滤。针对不同的业务场景采用不同的算法特征可以产生更适应于该业务场景的代码分析算法,可以提升分析结果的准确性和可应用性。
算法生成模块203,用于根据用户选择或确认的目标算法特征,进行代码分析算法的组装与生成。算法生成模块203通过在预置算法库206中提取与目标算法特征对应的算法,并结合代码克隆分析模板对算法进行组装,生成对业务场景敏感的代码分析算法。可选的,算法生成模块203还用于将生成的代码分析算法推送和发布至生产环境,使得生产环境的服务平台可以基于代码分析算法向用户提供代码分析服务,其中,生产环境是指正式提供服务的环境。
算法执行模块204,用于在代码分析算法生成后,结合交互模块201获取用户需要进行代码克隆分析的源代码以及作为分析基准的目标代码,执行代码分析算法,确定源代码与目标代码之间的相似代码片段,产生分析结果。
预置特征库205是一个包含多种业务场景以及与业务场景对应的一个或多个算法特征的数据库。预置特征库205中的每个业务场景和该业务场景对应的算法特征是用于表示在该特定的业务场景下,采用符合对应算法特征的算法进行代码分析能满足该场景下的代码分析诉求。预置特征库205中的业务场景和算法特征的对应关系是基于预定的规则、历史的经验和/或对分析结果的挖掘与分析获得的。
预置算法库206中包括代码克隆分析模板以及不同的算法特征对应的算子。代码克隆分析模板是一个预定义的算法框架,可以通过在该算法框架的不同模块中填充适配的算子,生成可以执行的代码分析算法。每种算法特征对应的算子可以包括多个,每个算子是一个完成代码克隆分析的部分功能的算法。
挖掘与调整模块207,用于获取用户使用代码分析服务的日志信息,基于日志信息挖掘业务场景与算法特征之间的关联关系,获得挖掘结果,根据挖掘结果调整前述预置特征库205中的业务场景与算法特征的对应关系。
应理解,代码分析系统200可以包含上述功能模块中的部分或者全部的功能模块,或者代码分析系统200可以仅发挥上述描述的部分或者全部功能模块的功能。在不同实施例中,代码分析系统200可以包含的功能模块可以不同。
应理解,上述对代码分析系统200的模块划分仅是根据功能的一种示例性的划分方式,本申请不对代码分析系统200的功能模块划分作任何限定。
下面结合图4对代码分析系统200生成代码分析算法和基于代码分析算法提供代码分析服务的一种具体的实施方法进行介绍。在本申请实施例中,为简洁起见,“代码分析系统”在有些地方简称为“系统”。
S301:用户选择或输入业务场景,系统获取业务场景的信息。
应理解,根据代码分析系统提供代码分析服务的业务方式的不同,代码分析系统与用户交互的方式也不同。例如:代码分析系统可以通过交互界面与用户交互(如:代码分析公有云服务通过网页界面与用户交互,代码克隆app应用通过应用界面与用户交互),或者代码分析系统可以提供接口给用户,用户以接口调用的方式与用户交互。应理解,进行业务场景选择的用户可以是后续需要使用代码分析服务的用户,也可以是进行代码分析系统初始化的人员,初始化人员进行代码分析系统初始化后,代码分析系统可以向其他用户提供代码分析服务。
本申请对于代码分析系统具体提供代码克隆分析服务的方式不作限定,在本申请一些实施例中,将代码分析系统以公有云网页服务的方式提供代码分析服务作为举例进行详细说明。
在用户使用公有云平台的代码分析服务的场景下,当用户要获取基于业务场景敏感的代码克隆分析服务时,用户首先根据需要在界面上选择或者新建某个具体的业务场景,图5表示一种业务场景选择界面的示意图,如图5所示,在界面中提供了多种可供用户选择的业务场景,例如,包括:代码开源成分溯源分析,代码抄袭检测,重复代码识别(代码重构场景),克隆缺陷识别(缺陷检测场景),代码聚类分析(代码分析场景),用户可以根据实际需求选择其中一种场景,例如:图5中用户选择了代码开源成分溯源分析场景,用户可以点击界面中的确认按钮进行后续配置。可选的,界面也可以支持由用户新建或者输入一个业务场景,例如:当用户选择图5界面中的“其他”项之后,系统可以为用户提供新建业务场景的页面,由用户在新建业务场景的页面配置所需求的新的业务场景。用户也可以在界面中自主输入业务场景。
当用户确定具体业务场景后,系统获取到业务场景的信息,该业务场景的信息用于系统后续生成针对该业务场景的代码分析算法。
可选的,用户还可以在业务场景选择的界面选择是否由系统智能推荐算法特征。例如,如图5所示,当用户点击智能推荐算法特征的按钮后,系统将会为用户智能化地推荐与用户已选择的业务场景相关的算法特征,供用户进一步选择或确认;当用户点击人工选择算法特征后,系统会为用户推荐通用的算法特征,这种场景下,系统推荐的算法特征与业务场景没有特别的相关性,由用户在系统推荐的算法特征中进一步选择算法特征。
S302:系统向用户推荐算法特征,获取用户确认或选择的目标算法特征。
S302-1:系统在获取到业务场景的信息后,可以向用户推荐算法特征。如前所述,系统可以根据用户选择的由系统智能推荐算法特征向用户推荐与业务场景相关的算法特征或者自动地向用户推荐与业务场景相关的算法特征,系统也可以自动地向用户推荐通用的算法特征以供用户选择。与业务场景相关的算法特征表示在生成针对该业务场景的代码分析算法时可以采用的算法处理的策略类型。通用的算法特征可以是数据库中记录的、可以应用于代码分析的所有算法特征,也可以是预设数目的可以应用于代码分析的算法特征。
当系统向用户推荐与业务场景相关的算法特征时,具体地,系统在获取到业务场景的信息后,根据业务场景的信息在预置特征库中搜索与业务场景对应的算法特征,再向用户推荐与业务场景对应的算法特征。预置特征库中包括多个业务场景及各业务场景对应的算法特征。预置特征库可以是由系统预先构建的数据库,也可以是第三方数据库。预置特征库中每个业务场景对应的算法特征表示针对该业务场景进行代码克隆分析的代码分析算法可以集合的算法处理的策略类型。预置特征库可以是人工根据各个场景的需求和经验构建的,也可以是基于大量的历史的各个场景的代码分析算法的相关信息,利用大数据和/或深度学习技术进行构建的。本申请实施例中的预置特征库可以随着用户使用代码分析服务的过程继续被丰富和更新,后续将进行详细介绍。
S302-2:对于系统推荐的算法特征,用户可以进行确认,以确定目标算法特征,目标算法特征表示后续生成代码分析算法需要被采用的算法特征。
在用户使用公有云平台的代码分析服务的场景下,继续上述图5的例子。当用户选择的业务场景为代码开源成分溯源分析,且用户选择了智能推荐算法特征后,如图6所示,系统通过用户界面向用户推荐与业务场景相关的算法特征。
图6中,界面呈现的算法特征包括两类,一类为代码分析特征,表示对代码进行分析时的分析策略类型;另一类为后处理特征,表示对代码进行分析后需要进行的后处理策略类型。
代码分析特征包括多种,例如:
1、纯文本分析,即在对代码进行分析时,无需考虑代码自身的抽象结构,直接将其视为普通文本进行特征提取。
2、变量名正则化,即在对代码进行分析时,需要对代码中的变量名进行正则化后进行特征提取,以规避因变量重命名等重构行为带来的代码差异。
3、变量名全部抽象,即表示将所有变量名字进行抽象处理,统一成标准的标识之后再进行特征提取,从而规避所有变量名带来的信息差异。
4、空格/空行过滤,即分析时将源代码中的空格或空行进行过滤,忽略这些因素带来的信息差异。
5、注释过滤,即分析时将注释信息进行过滤,忽略这些因素带来的信息差异。
控制流,表示分析时需要考虑基于代码分析技术提取匹配代码片段的抽象语法树结构,并进行控制流图的构建,在控制流图的基础上进行特征的提取,实现控制流敏感度的代码相似度计算。
6、语句顺序可微调,代表对于待匹配的代码,在不引起语义差异的情况,允许一些语句进行顺序微调(如不存在数据依赖的语句调整后,不影响执行结果),这种情况下仍然视为待匹配片段具有相似性。
需要注意的是,上述代码分析特征只是示例,还可以有更多的代码分析特征用于提供推荐。代码分析特征属于分析技术侧的算法特征,用于限定系统该选择什么样的特征来对源代码片段进行特征提取,从而支撑后续的代码相似度计算和分析。
后处理策略也包括多种,例如:
1、Getters/Setters Filter,代表将含有getters/setters方法相关的代码克隆分析结果进行过滤(这些代码往往功能和形式都比较单一,这些代码的相似性在某些场景下不重要,可以直接过滤掉)。
2、Include Filter,代表将含有include语句的代码片段进行过滤。
3、3rd Party API Filter,代表将含有第三方库API调用语句的代码片段进行过滤。
4、SQL Statement Filter,代表将含有SQL语句的代码片段进行过滤。
5、Import Filter,代表将含有Import语句的代码片段进行过滤。
6、条件编译filter,代表将含有条件编译语句的代码片段进行过滤。
需要注意的是,上述后处理特征只是示例,还可以有更多的后处理特征用于提供推荐。后处理特征属于后处理技术侧的算法特征,用于指示系统在完成代码相似度计算后,是否需要增加后处理技术,例如增加哪些过滤器,从而针对特定业务场景的数据进行及时后处理,以提升最终结果的准确率。
如图6所示,由于用户选择的业务场景为代码开源成分溯源分析,系统通过自动勾选的方式向用户自动推荐代码分析特征:变量名正则化、注释过滤、控制流、语句顺序可微调以及后处理特征:Getters/Setters Filter、Include Filter、3rd Party API Filter、SQL Statement Filter、Import Filter。用户可以在界面中点击确认按钮表示确认系统所推荐的算法特征为目标算法特征,用户也可以根据业务的特殊需求在界面中新增加一部分算法特征的勾选或者将系统自动推荐的部分算法特征进行去除后再进行确认,系统将接收到用户选择的目标算法特征。应理解,对于推荐算法特征的呈现方式,本申请不进行限定。
S303:系统基于用户确认或选择的目标算法特征,生成针对业务场景的代码分析算法。
具体地,代码分析系统基于目标算法特征和预置算法库,以及通用的代码克隆分析模板进行算法的组装与生成。
预置算法库可以是在代码分析系统中预置的算法库或者是第三方的算法库,预置算法库中包括多种算法特征对应的算子。在预置算法库中,每一种算法特征可以对应有一个或多个算子,例如:算法特征为纯文本分析,在预置算法库中可以有一个或多个可以实现纯文本分析的特征提取算子。可选的,预置算法库可以包括多个独立的算法库,例如:根据算法特征的类型,预置算法库可以包括代码分析算法库和后处理算法库。在代码分析算法库中包括各个代码分析特征对应的算子,在后处理算法库中包括各个后处理特征对应的算子。
通用的代码克隆分析模板表示一个代码分析算法的一般实现框架。具体地,该模板可以包括三部分:索引器(Indexer),用于对待匹配的目标代码进行特征提取并建立索引;扫描器(Scanner),用于对待匹配的源代码进行特征提取,并与目标代码的索引进行匹配;过滤器(Filter),用于针对匹配和分析结果进行一系列的过滤,提高结果的有效性。
代码分析系统基于目标算法特征和预置算法库,以及通用的代码克隆分析模板进行代码分析算法的组装与生成,具体包括如下几个步骤:
步骤1:根据目标算法特征,在预置算法库中选择与目标算法特征对应的算子。例如:目标算法特征包括纯文本分析,则在预置算法库中选择纯文本分析对应的基于文本方式(Text-based)的特征提取算子;目标算法特征包括变量名正则化,则在预置算法库中选择基于关键词且保持变量名字不变(Token-based&Variable-sensitive)的特征提取算子;目标算法特征包括变量名全部抽象,则在预置算法库中选择基于Token且保持变量名不敏感(Token-based&Variable-Insensitive)的特征提取算子;目标算法特征包括空格/空行过滤或者注释过滤,则在预置算法库中选择基于数据依赖网络(Data-dependency-based)的特征提取算子;目标算法特征包括语句顺序可微调,则在预置算法库中选择语句顺序非敏感(Statement sequence insensitive)的特征提取算子。
应理解,预置算法库可以是一个综合的算法库,也可以包括多个算法库。例如,预置算法库包括代码分析算法库和后处理算法库,则可以在不同的算法库中获取不同类型的目标算法特征对应的算子。根据目标算法特征中的代码分析特征在代码分析算法库中选择对应的算子,进一步地根据后处理特征在后处理算法库中选择对应的算子。后处理算法库中会内置不同类型的过滤技术算子,例如面向setters/getters类型代码片段的过滤算子(Getters/Setters Filter),面向Include语句的过滤算子(Include Filter),面向第三方API调用的过滤算子(3rd Party API Filter),面向SQL语句的过滤算子(SQL Filter),面向import区的过滤算子(Import Filter),面向条件编译的过滤算子(ConditionalCompilation Filter)。
上述获取到目标算法特征对应的算子之后,这些算子可以被编排组装,分别生成代码分析模块(也可以称为代码特征提取模块)和后处理模块(结果过滤模块),生成的模块可以用于生成代码分析算法。应理解,每个模块是一个软件逻辑程序,运行每个模块可以实现相应的代码分析或者后处理的功能。
步骤二:基于代码分析模块,后处理模块和代码克隆分析模板进行代码分析算法的自动化组装,生成代码分析算法。
在代码克隆分析模板中,Indexer和Scanner内部都会依赖代码分析模块,Indexer要基于代码分析模块对待匹配的目标代码进行特征提取,Scanner要基于代码分析模块对待匹配的源代码进行特征提取。因此,在进行组装时,将代码分析模块分别内置到Indexer和Scanner的框架中。Filter需要组装后处理模块执行针对匹配和分析结果进行过滤,因此,将后处理模块内置到Filter的框架中,提供给Filter进行调用。
上述算子选择以及代码分析算法的自动化组装过程可以用图7进行示例性的表示。图7中的过程以预置算法库包括代码分析算法库和后处理算法库为例。
应理解,上述步骤S301-S303也可以称为代码分析系统的初始化阶段,该阶段主要用于生成能够对用户选择的业务场景敏感的代码分析算法。生成的代码分析算法可以被推动上线,形成基于场景敏感的代码分析服务。
S304:基于代码分析算法,提供代码分析服务
具体地,系统获取用户指定的源代码和目标代码的信息;系统基于前述生成的代码分析算法,对源代码和目标代码之间的相似性进行分析,获得分析结果。并将分析结果提供给用户。
在一些实施例中,用户可以通过web页面或者本地客户端或者API接口调用的方式进行使用代码分析服务。以通过界面访问方式为例,如图8所示例的用户界面,用户访问到界面后,可以查看当前关注的业务场景信息、自动生成的代码分析算法信息(例如:启动的代码分析特征、后处理特征、创建时间等)。在该界面中,用户还可以指定待分析的源代码和目标代码的来源信息,例如:指定包含源代码的源代码仓路径的远程git仓路径信息或本地文件夹路径,指定包含目标代码的目标代码仓的路径信息等。本申请中的源代码表示待进行代码克隆分析的代码,目标代码表示进行代码克隆分析时所参考的代码。根据业务场景的需要,目标代码仓可以采用系统后台内置的开源数据仓(例如;开源成分溯源分析场景),也可以设置为和源代码仓保持一致(例如:代码重构场景、代码缺陷检测场景)。设置好待匹配的源代码和目标代码的来源信息之后,即可通过代码分析算法对源代码和目的代码的相似度进行分析,例如:用户可点击“启动分析”按钮,启动代码克隆分析。代码分析系统根据前述组装好的代码分析算法调取用户指定的源代码和目标代码,执行代码克隆分析。
系统还会向用户提供代码克隆分析的分析结果,分析结果可以包括两个相似代码片段构成的克隆代码对的告警信息、个数,代码克隆对的具体代码比对信息,例如:第一部分代码片段在源代码中的位置信息、第二部分代码片段在目标代码中的位置信息,克隆代码对的相似程度信息、克隆代码对的相似原因描述。对于通过界面提供服务的场景,代码分析服务执行完之后,系统会将分析结果通过界面进行即时展示。图9提供了一个界面示例,界面中会展示出识别出的克隆代码对的告警信息,用户点击每条告警信息,还可以查看具体的存在克隆关系的代码比对信息。基于该界面,用户可以方便进行告警查看,并确认每条告警信息是否准确。如果不准确,可以向系统进行反馈,例如:点击每行后面的“误报”按钮进行标记和反馈。
S305:系统在提供代码分析服务时,持续跟踪用户使用的数据,根据用户使用的数据进行场景-算法特征的持续挖掘,调整预置特征库。
具体地,在系统向用户提供代码分析服务的过程中,系统会记录现每个用户选择的业务场景信息,向用户推荐的算法特征,以及用户确定的目标算法特征,代码克隆分析结果数据,分析结果相关的代码上下文信息,分析结果的人工确认信息等,系统可以将这些信息记录成日志信息。系统可以采用频繁模式挖掘技术(frequent pattern mining),对日志信息中的数据进行模式挖掘,提炼出各个业务场景频繁对应的算法特征,并利用提炼出的场景-算法特征的对应关系调整预置特征库中业务场景与算法特征之间的关系,或者添加新的关系。系统可以周期性地进行上述数据的挖掘与预置特征库的调整,也可以在记录的用户使用的数据超过一定阈值时触发上述调整。
应理解,上述S305是可选的,在一些情况下,例如:预置特征库已经足够智能足够准确的情况下,也可以不需要再进行用户使用的数据的挖掘和预置特征库的调整。通过上述S305可以提高代码分析系统在基于业务场景进行算法特征智能化推荐的有效性和准确性。
上述S301-S304介绍的提供代码分析服务的方法,可以基于用户需要的业务场景,并基于用户在推荐的算法特征中确定的目标算法特征,生成与业务场景相匹配的代码分析算法,并提供代码分析服务,提高了代码分析服务的灵活性,能够满足用户灵活的需求。
在另一些实施例中,用户还可以同时选择两个以上的业务场景,后台将分别对用户提供的业务场景进行算法特征推荐和代码分析算法的自动生成,由此,系统将为用户构建两个以上的代码分析算法。当用户需要使用代码分析服务时,用户不仅可以选定源代码和目标代码,还可以选择启用哪个业务场景或者哪几个业务场景对应的代码分析算法。当用户选择利用其中一个业务场景对应的代码分析算法进行代码分析时,系统的代码分析流程与前述步骤S304相同,此处不再赘述。当用户选择利用其中两个或两个以上的代码分析算法进行代码分析时,系统将并行地分别执行两个或两个以上的算法分析源代码和目标代码。每个算法获得的分析结果可以分开地提供给用户,例如通过多个页面提供给用户多份报告,或者在同一页面分离地提供多份报告。每个算法获得的分析结果也可以经过整合,获得一个综合分析结果。综合分析结果中可以包括克隆代码对的告警信息、个数,代码克隆对的具体代码比对信息,还可以包括每个克隆代码对的业务场景类型。例如:采用两个针对不同业务场景的代码分析算法A、B分别对源代码和目标代码进行分析,共获得3个克隆代码对。第一个克隆代码对为通过算法A获得的,第二个克隆代码对为通过算法B获得的,第三个克隆代码对为算法A和算法B都获得的。则第一个克隆代码对的业务场景类型为算法A对应的业务场景,第二个克隆代码对的业务场景类型为算法B对应的业务场景,第三个克隆代码对的业务场景类型包括算法A对应的业务场景和算法B对应的业务场景。
本申请实施例还提供另一种代码分析的方法,该方法包括:
S401:代码分析系统获取业务场景的信息
该步骤的具体实现方法可参考前述步骤S301,此处不再赘述。
S402:代码分析系统基于业务场景的信息生成针对所述业务场景的代码分析算法。
具体生成代码分析算法的方法可以是系统根据获取的业务场景的信息在后台找到已生成的与业务场景相对应的代码分析算法。或者,系统根据获取的业务场景的信息在预置算法库中获得与业务场景的信息对应的算法特征,基于对应的算法特征在预置算法库中找到算法特征对应的算子,利用预设的代码克隆分析模板和获得的算子进行组装,得到代码分析算法,该方法的一些细节描述可参考前述代码分析算法的生成和组装的流程,此处不再赘述。
S403:代码分析系统获取用户指定的源代码和目标代码的信息,基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
上述步骤可参考前述步骤S304描述的内容,此处不再赘述。
上述步骤S401-S403提供了一种生成基于业务场景的代码分析算法,并基于生成的代码分析进行代码分析的流程。上述方法可以使得用户更为方便地获得与需要的业务场景相关的代码分析服务。
本申请实施例还提供又一种代码分析的方法,该方法包括:
S501:代码分析系统向用户推荐至少一个算法特征,每个算法特征对应至少一个算子。
具体地,代码分析系统向用户推荐的至少一个算法特征可以是可以应用于代码分析算法的所有候选算法特征,这些算法特征可能来自后台维护的数据库,这些算法特征与业务场景可以没有关联关系。这些算法特征也可以是与某一业务场景相关的、由系统根据该业务场景的信息并基于预置特征库推荐的算法特征。
S502:代码分析系统根据用户在推荐的算法特征中确认的目标算法特征,生成代码分析算法。
上述步骤可参考前述步骤S303描述的内容,此处不再赘述。
S503:代码分析系统获取用户指定的源代码和目标代码的信息,基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
上述步骤可参考前述步骤S304描述的内容,此处不再赘述。
通过上述方法,用户可以更灵活地选择或确认目标算法特征,系统可以生成更满足用户需求的代码分析算法,提高了代码分析结果的准确性和可应用性。
应理解,上述各个实施例的描述各有侧重,某个流程中没有详述的部分,可以参见其他流程的相关描述。
本申请实施例还提供一种如图10所示的代码分析系统600,代码分析系统600包括交互组件601和处理组件602。上述交互组件601可以与前述代码分析系统200中的交互模块201的部分或全部功能相同。上述处理组件602可以执行前述代码分析系统200中的算法生成模块203和算法执行模块204的功能,在一些可选的情况下,处理组件602还可以执行前述算法特征推荐模块202、挖掘与调整模块207、预置特征库205、预置算法库206中的部分或全部功能。代码分析系统600可以执行前述步骤S301-S304中描述的部分或全部的代码分析方法,或者,代码分析系统600可以执行前述步骤S401-S403中描述的部分或全部的代码分析方法,或者,代码分析系统600可以执行前述步骤S501-S503中描述的部分或全部的代码分析方法。
图11提供了一种计算设备700的结构示意图,图11所示的计算设备700可以是云环境或者边缘环境的计算设备或计算设备集群,也可以是终端计算设备。计算设备700包括存储器701、处理器702、通信接口703以及总线704。其中,存储器701、处理器702、通信接口703通过总线704实现彼此之间的通信连接。应理解,本申请不限定计算设备700中的处理器、存储器的个数。
存储器701可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器701可以存储计算机指令,当存储器701中存储的计算机指令被处理器702执行时,处理器702和通信接口703执行前述步骤S301-S304中描述的部分或全部的代码分析方法,或者执行前述步骤S401-S403中描述的部分或全部的代码分析方法,或者执行前述步骤S501-S503中描述的部分或全部的代码分析方法。可选的,存储器701还可以存储预置特征库或者预置算法库。
处理器702可以采用通用的中央处理器(Central Processing Unit,CPU),应用专用集成电路(Application Specific Integrated Circuit,ASIC),图形处理器(graphicsprocessing unit,GPU)或其任意组合。处理器702可以包括一个或多个芯片,处理器702可以包括AI加速器,例如:神经网络处理器(neural processing unit,NPU)。
通信接口703使用例如但不限于收发器一类的收发模块,来实现计算设备700与其他设备或通信网络之间的通信。例如,可以通过通信接口703获取用户输入或选择的业务场景的信息、确认的目标算法特征等。
总线704可包括在计算设备700各个部件(例如,存储器701、处理器702、通信接口703)之间传送信息的通路。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如SSD)等。

Claims (45)

1.一种代码分析的方法,其特征在于,所述方法应用于代码分析系统,包括:
获取业务场景的信息,所述业务场景表示代码分析的目标;
基于所述业务场景的信息生成针对所述业务场景的代码分析算法;
获取用户指定的源代码和目标代码的信息;
基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
2.根据权利要求1所述的方法,其特征在于,所述基于所述业务场景的信息生成针对所述业务场景的代码分析算法,包括:
基于所述业务场景的信息,向所述用户推荐与所述业务场景对应的算法特征;
根据所述用户在推荐的算法特征中确认的目标算法特征,生成所述代码分析算法。
3.根据权利要求2所述的方法,其特征在于,所述算法特征包括代码分析特征和后处理特征,其中,所述代码分析特征表示对代码进行分析时的分析策略类型,所述后处理特征表示对代码进行分析后需要进行的后处理策略类型。
4.根据权利要求2或3所述的方法,其特征在于,所述与所述业务场景对应的算法特征来源于预置特征库,所述预置特征库包括至少一种业务场景及对应的算法特征。
5.根据权利要求2-4任一项所述的方法,其特征在于,所述根据所述用户在推荐的算法特征中确认的目标算法特征,生成所述代码分析算法,包括:
根据所述用户在推荐的算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;
根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
6.根据权利要求1-5任一项所述的方法,其特征在于,
所述获取业务场景的信息,包括:获取至少两个业务场景的信息;
所述基于所述业务场景的信息生成所述代码分析算法,包括:
基于每个业务场景的信息,生成分别针对每个业务场景的至少两个代码分析算法;
所述基于所述代码分析算法,对所述源代码和目标代码之间的相似性进行分析包括:
根据所述至少两个代码分析算法,分别对所述源代码与所述目标代码之间的相似性进行分析,所述分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
7.根据权利要求1-6任一项所述的方法,其特征在于,所述业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。
8.根据权利要求4所述的方法,其特征在于,所述方法还包括:
获取日志信息,所述日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;
基于所述日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
9.根据权利要求8所述的方法,其特征在于,所述日志信息包括以下信息中的一种或多种:
业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述获取业务场景的信息,包括:
向用户提供配置界面,接收所述用户在所述配置界面选择或输入的业务场景的信息。
11.根据权利要求1-10任一项所述的方法,其特征在于,在基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析之前,所述方法还包括:
将生成的针对所述业务场景的代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
12.一种代码分析的方法,其特征在于,所述方法应用于代码分析系统,包括:
向用户推荐至少一个算法特征,每个算法特征对应至少一个算子;
根据所述用户在所述算法特征中确认的目标算法特征,生成代码分析算法;
获取所述用户指定的源代码和目标代码的信息;
基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:获取业务场景的信息,所述业务场景表示执行代码分析的目标;
所述向用户推荐至少一个算法特征,包括:
基于所述业务场景的信息,向所述用户推荐至少一个与所述业务场景对应的算法特征。
14.根据权利要求12或13所述的方法,其特征在于,所述算法特征包括代码分析特征和后处理特征,其中,所述代码分析特征表示对代码进行分析时的分析策略类型,所述后处理特征表示对代码进行分析后需要进行的后处理策略类型。
15.根据权利要求13所述的方法,其特征在于,所述与所述业务场景对应的算法特征来源于预置特征库,所述预置特征库包括至少一种业务场景及对应的算法特征。
16.根据权利要求12-15任一项所述的方法,其特征在于,所述根据所述用户在所述算法特征中确认的目标算法特征,生成代码分析算法,包括:
根据所述用户在所述算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;
根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
17.根据权利要求13或15所述的方法,其特征在于,
所述获取业务场景的信息,包括:获取至少两个业务场景的信息;
所述根据所述用户在所述算法特征中确认的目标算法特征,生成代码分析算法,包括:
根据所述用户在所述算法特征中确认的目标算法特征,生成分别针对每个业务场景的至少两个代码分析算法;
所述基于所述代码分析算法,对所述源代码和目标代码之间的相似性进行分析,获得分析结果,包括:
根据所述至少两个代码分析算法,分别对所述源代码与所述目标代码之间的相似性进行分析,获得分析结果,所述分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
18.根据权利要求13、15或17所述的方法,其特征在于,所述业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。
19.根据权利要求15所述的方法,其特征在于,所述方法还包括:
获取日志信息,所述日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;
基于所述日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
20.根据权利要求19所述的方法,其特征在于,所述日志信息包括以下信息中的一种或多种:
业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
21.根据权利要求12-20任一项所述的方法,其特征在于,在基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析之前,所述方法还包括:
将生成的所述代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
22.一种代码分析系统,其特征在于,包括:
交互组件,用于获取业务场景的信息,所述业务场景表示代码分析的目标;
处理组件,用于基于所述业务场景的信息生成针对所述业务场景的代码分析算法;
所述交互组件,还用于获取用户指定的源代码和目标代码的信息;
所述处理组件,还用于基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
23.根据权利要求22所述的系统,其特征在于,
所述交互组件,还用于基于所述业务场景的信息,向所述用户推荐与所述业务场景对应的算法特征;
所述处理组件,用于根据所述用户在推荐的算法特征中确认的目标算法特征,生成所述代码分析算法。
24.根据权利要求23所述的系统,其特征在于,所述算法特征包括代码分析特征和后处理特征,其中,所述代码分析特征表示对代码进行分析时的分析策略类型,所述后处理特征表示对代码进行分析后需要进行的后处理策略类型。
25.根据权利要求23或24所述的系统,其特征在于,所述与所述业务场景对应的算法特征来源于预置特征库,所述预置特征库包括至少一种业务场景及对应的算法特征。
26.根据权利要求23-25任一项所述的系统,其特征在于,所述处理组件,用于根据所述用户在推荐的算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
27.根据权利要求22-26任一项所述的系统,其特征在于,
所述交互组件,用于获取至少两个业务场景的信息;
所述处理组件,用于基于每个业务场景的信息,生成分别针对每个业务场景的至少两个代码分析算法;根据所述至少两个代码分析算法,分别对所述源代码与所述目标代码之间的相似性进行分析,所述分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
28.根据权利要求22-27任一项所述的系统,其特征在于,所述业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。
29.根据权利要求25所述的系统,其特征在于,
所述交互组件,还用于获取日志信息,所述日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;
所述处理组件,还用于基于所述日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
30.根据权利要求29所述的系统,其特征在于,所述日志信息包括以下信息中的一种或多种:
业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
31.根据权利要求22-30任一项所述的系统,其特征在于,所述交互组件,用于向用户提供配置界面,接收所述用户在所述配置界面选择或输入的业务场景的信息。
32.根据权利要求22-31任一项所述的系统,其特征在于,所述处理组件,还用于将生成的针对所述业务场景的代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
33.一种代码分析系统,其特征在于,包括:
交互组件,用于向用户推荐至少一个算法特征,每个算法特征对应至少一个算子;
处理组件,用于根据所述用户在所述算法特征中确认的目标算法特征,生成代码分析算法;
所述交互组件,还用于获取所述用户指定的源代码和目标代码的信息;
所述处理组件,还用于基于所述代码分析算法,对所述源代码和所述目标代码之间的相似性进行分析,获得分析结果。
34.根据权利要求33所述的系统,其特征在于,
所述交互组件,还用于获取业务场景的信息,所述业务场景表示执行代码分析的目标;
所述交互组件,用于基于所述业务场景的信息,向所述用户推荐至少一个与所述业务场景对应的算法特征。
35.根据权利要求33或34所述的系统,其特征在于,所述算法特征包括代码分析特征和后处理特征,其中,所述代码分析特征表示对代码进行分析时的分析策略类型,所述后处理特征表示对代码进行分析后需要进行的后处理策略类型。
36.根据权利要求34所述的系统,其特征在于,所述与所述业务场景对应的算法特征来源于预置特征库,所述预置特征库包括至少一种业务场景及对应的算法特征。
37.根据权利要求33-36任一项所述的系统,其特征在于,所述处理组件,用于根据所述用户在所述算法特征中确认的目标算法特征,从预置算法库中提取与所述目标算法特征对应的算子;根据提取的与所述目标算法特征对应的算子,生成所述代码分析算法。
38.根据权利要求34或36所述的系统,其特征在于,
所述交互组件,还用于获取至少两个业务场景的信息;
所述处理组件,用于根据所述用户在所述算法特征中确认的目标算法特征,生成分别针对每个业务场景的至少两个代码分析算法;根据所述至少两个代码分析算法,分别对所述源代码与所述目标代码之间的相似性进行分析,获得分析结果,所述分析结果包括克隆代码对的信息和克隆代码对对应的业务场景的信息。
39.根据权利要求34、36或38所述的系统,其特征在于,所述业务场景的信息包括以下信息中的一种或多种:代码溯源分析,代码抄袭检测,代码重构场景重复代码识别,代码克隆缺陷识别,代码聚类分析。
40.根据权利要求36所述的系统,其特征在于,
所述交互组件,还用于获取日志信息,所述日志信息来源于基于所述代码分析算法对所述源代码和所述目标代码之间的相似性进行分析的过程;
所述处理组件,还用于基于所述日志信息,调整所述预置特征库中的业务场景和算法特征的对应关系。
41.根据权利要求40所述的系统,其特征在于,所述日志信息包括以下信息中的一种或多种:
业务场景的信息,目标算法特征,分析结果,所述用户针对所述分析结果的确认信息。
42.根据权利要求33-41任一项所述的系统,其特征在于,
所述处理组件,还用于将生成的所述代码分析算法部署至生产环境,在所述生产环境发布代码分析服务。
43.一种代码分析的计算设备,其特征在于,其特征在于,所述计算设备包括处理器和存储器,所述存储器存储计算机指令,所述处理器执行所述计算机指令,以使所述计算设备执行前述权利要求1-11任一项权利要求所述的方法,或者执行前述权利要求12-21任一项权利要求所述的方法。
44.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序代码,当所述计算机程序代码被计算设备执行时,所述计算设备执行前述权利要求1-11任一项权利要求所述的方法,或者执行前述权利要求12-21任一项权利要求所述的方法。
45.一种计算机程序产品,所述计算机程序产品包括计算机程序代码,在所述计算机程序代码被计算设备执行时,所述计算设备执行前述权利要求1-11任一项权利要求所述的方法,或者执行前述权利要求12-21任一项权利要求所述的方法。
CN202011433419.8A 2020-07-17 2020-12-10 代码分析的方法、系统及计算设备 Pending CN113946366A (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
PCT/CN2021/103301 WO2022012327A1 (zh) 2020-07-17 2021-06-29 代码分析的方法、系统及计算设备
EP21843552.7A EP4184330A4 (en) 2020-07-17 2021-06-29 CODE ANALYSIS METHOD AND SYSTEM AND COMPUTER APPARATUS
US18/152,942 US20230168888A1 (en) 2020-07-17 2023-01-11 Code analysis method and system, and computing device

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN2020106890996 2020-07-17
CN202010689099 2020-07-17

Publications (1)

Publication Number Publication Date
CN113946366A true CN113946366A (zh) 2022-01-18

Family

ID=79327215

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011433419.8A Pending CN113946366A (zh) 2020-07-17 2020-12-10 代码分析的方法、系统及计算设备

Country Status (4)

Country Link
US (1) US20230168888A1 (zh)
EP (1) EP4184330A4 (zh)
CN (1) CN113946366A (zh)
WO (1) WO2022012327A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115378695A (zh) * 2022-08-19 2022-11-22 安天科技集团股份有限公司 克隆网页检测方法及装置
WO2023231526A1 (zh) * 2022-05-30 2023-12-07 深圳市爱云信息科技有限公司 基于数字孪生DaaS平台的算法仓库管理方法及系统

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117215542B (zh) * 2023-11-07 2024-05-14 上海华创自动化工程股份有限公司 一种自定义数据处理系统及方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8255885B2 (en) * 2008-06-16 2012-08-28 Software Analysis And Forensic Engineering Corp. Detecting copied computer source code by examining computer object code
CN101398758B (zh) * 2008-10-30 2012-04-25 北京航空航天大学 一种代码抄袭的检测方法
KR101780233B1 (ko) * 2016-04-26 2017-09-21 고려대학교 산학협력단 소프트웨어의 코드 클론 탐지 장치 및 방법
CN108875317B (zh) * 2017-05-08 2022-06-07 中国移动通信有限公司研究院 软件克隆检测方法及装置、检测设备及存储介质
CN110990273B (zh) * 2019-11-29 2024-04-23 中国银行股份有限公司 克隆代码检测方法及装置

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023231526A1 (zh) * 2022-05-30 2023-12-07 深圳市爱云信息科技有限公司 基于数字孪生DaaS平台的算法仓库管理方法及系统
CN115378695A (zh) * 2022-08-19 2022-11-22 安天科技集团股份有限公司 克隆网页检测方法及装置

Also Published As

Publication number Publication date
EP4184330A4 (en) 2023-12-27
WO2022012327A1 (zh) 2022-01-20
EP4184330A1 (en) 2023-05-24
US20230168888A1 (en) 2023-06-01

Similar Documents

Publication Publication Date Title
US11620117B2 (en) Systems and methods for code clustering analysis and transformation
US11726760B2 (en) Systems and methods for entry point-based code analysis and transformation
US11789715B2 (en) Systems and methods for transformation of reporting schema
US11436006B2 (en) Systems and methods for code analysis heat map interfaces
CN102804147B (zh) 执行abap源代码的代码检查的代码检查执行系统
US11429365B2 (en) Systems and methods for automated retrofitting of customized code objects
WO2022012327A1 (zh) 代码分析的方法、系统及计算设备
EP3674918B1 (en) Column lineage and metadata propagation
US20170090892A1 (en) Systems and methods for dynamically replacing code objects for code pushdown
CN104133772A (zh) 一种自动生成测试数据的方法
US20200097260A1 (en) Software application developer tools platform
Tinnes et al. Mining domain-specific edit operations from model repositories with applications to semantic lifting of model differences and change profiling
CN117875288A (zh) 一种表单页面生成方法、装置及电子设备
Tinnes et al. Learning domain-specific edit operations from model repositories with frequent subgraph mining
CN115794858A (zh) 查询语句处理方法、装置、设备及存储介质
CN114281688A (zh) 一种无码或低码的自动化用例管理方法和装置
CN114356330A (zh) 页面配置方法、装置、电子设备和存储介质
CN116955156A (zh) 流量录制回放测试方法、装置及电子设备
CN115543374A (zh) 方案生成方法、设备升级方法及相关装置、设备和介质
Vujic Quality Assurance Workflow, Release 2+ Release Report
CN116166254A (zh) 一种系统的开发方法、装置、电子设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
TA01 Transfer of patent application right

Effective date of registration: 20220223

Address after: 550025 Huawei cloud data center, jiaoxinggong Road, Qianzhong Avenue, Gui'an New District, Guiyang City, Guizhou Province

Applicant after: Huawei Cloud Computing Technologies Co.,Ltd.

Address before: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen

Applicant before: HUAWEI TECHNOLOGIES Co.,Ltd.

TA01 Transfer of patent application right
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination