CN116339818B - 代码变更类型的筛选方法、电子设备及可读存储介质 - Google Patents

代码变更类型的筛选方法、电子设备及可读存储介质 Download PDF

Info

Publication number
CN116339818B
CN116339818B CN202310625274.9A CN202310625274A CN116339818B CN 116339818 B CN116339818 B CN 116339818B CN 202310625274 A CN202310625274 A CN 202310625274A CN 116339818 B CN116339818 B CN 116339818B
Authority
CN
China
Prior art keywords
change
code
changes
submissions
data belonging
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.)
Active
Application number
CN202310625274.9A
Other languages
English (en)
Other versions
CN116339818A (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.)
Honor Device Co Ltd
Original Assignee
Honor Device 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202310625274.9A priority Critical patent/CN116339818B/zh
Publication of CN116339818A publication Critical patent/CN116339818A/zh
Application granted granted Critical
Publication of CN116339818B publication Critical patent/CN116339818B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • 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
    • Y02PCLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
    • Y02P90/00Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
    • Y02P90/30Computing systems specially adapted for manufacturing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Abstract

本申请公开了一种代码变更类型的筛选方法、电子设备及可读存储介质,属于计算机技术领域。所述方法包括:获取描述标签为指定标签的多个代码变更提交,所述描述标签用于指示对应的代码变更提交的用途;根据非缺陷性修复变更的特征,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据,所述非缺陷性修复变更包括至少一种类型,所述至少一种类型中每种类型的非缺陷性修复变更均与缺陷bug的修复无关。本申请根据非缺陷性修复变更的特征,从获取的多个代码变更提交中依次筛除属于非缺陷性修复变更的数据,由于对非缺陷性修复变更的数据精准地进行了筛除,且无需额外投入精力和成本,从而提高了筛选BFC的准确性和效率。

Description

代码变更类型的筛选方法、电子设备及可读存储介质
技术领域
本申请涉及计算机技术领域,特别涉及一种代码变更类型的筛选方法、电子设备及可读存储介质。
背景技术
随着计算机技术的发展,各类软件层出不穷,为了后续优化软件开发流程和软件测试流程,通常需要挖掘和分析包含bug(缺陷)的代码文件/模块有哪些特性和特点。其中,电子设备可以从任意一个代码仓中获取研发人员上传的代码变更提交,并通过挖掘或检索的方式从获取的代码变更提交中继续获取缺陷性修复提交(Bug-Fixing Commit,BFC),研发人员通过对获取的BFC进行分析,可以获知包含bug的代码文件/模块的特性和特点。通常情况下,可以将BFC中包含的代码文件/模块认为是存在软件bug的代码文件/模块。
目前,在业界,很多研发人员在上传代码变更提交时,该代码变更提交中可能会设置有描述标签“Feature or Bugfix”,这个描述标签可以描述该代码变更提交的用途,即该代码变更提交是对代码的功能性优化、功能修改或功能实现的提交,还是缺陷性修复的提交。在该描述标签显示为“Bugfix(缺陷修复)”的情况下,电子设备可以确定该代码变更提交是缺陷性修复的提交,即该代码变更提交为BFC。
然而,基于“Bugfix”描述标签获取BFC时,通常还会获取到与缺陷性修复无关的数据,从而导致对BFC的筛选不够准确,降低了筛选BFC的准确性。
发明内容
本申请提供了一种代码变更类型的筛选方法、电子设备及可读存储介质,可以用于提高筛选缺陷性修复提交的准确性。所述技术方案如下:
第一方面,提供了一种代码变更类型的筛选方法,所述方法包括:
获取描述标签为指定标签的多个代码变更提交,所述描述标签用于指示对应的代码变更提交的用途;
根据非缺陷性修复变更的特征,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据,所述非缺陷性修复变更包括至少一种类型,所述至少一种类型中每种类型的非缺陷性修复变更均与缺陷bug的修复无关。
如此,在获取到描述标签为指定标签的多个代码变更提交后,可以根据非缺陷性修复变更的特征,从获取的多个代码变更提交中依次筛除属于非缺陷性修复变更的数据,由于对非缺陷性修复变更的数据精准地进行了筛除,且无需额外投入精力和成本,从而提高了筛选BFC的准确性和效率。
作为本申请的一个示例,所述至少一种类型包括过多变更、回滚变更、非语义代码变更和重构变更;所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更;所述回滚变更是指将代码回滚至之前状态的变更;所述非语义代码变更是指与代码语义修改无关的变更;所述重构变更是指不改变软件功能特性的情况下对代码进行修改的变更;
所述根据非缺陷性修复变更的特征,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据,包括:
根据非缺陷性修复变更的特征,按照预设筛除顺序,从所述多个代码变更提交中筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据。
如此,通过预设筛除顺序筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据,避免因同时筛除大量数据而给电子设备带来运行负担,也避免了筛除过程中发生错误。
作为本申请的一个示例,所述根据非缺陷性修复变更的特征,按照预设筛除顺序,从所述多个代码变更提交中筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据,包括:
根据所述过多变更的特征,从所述多个代码变更提交中筛除属于所述过多变更的数据;
根据所述回滚变更的特征,从第一变更集合中筛除属于所述回滚变更的数据,所述第一变更集合为所述多个代码变更提交中去除类型为所述过多变更的数据后剩余的代码变更提交构成的集合;
根据所述非语义代码变更的特征,从第二变更集合中筛除属于所述非语义代码变更的数据,所述第二变更集合为所述第一变更集合中去除类型为所述回滚变更的数据后剩余的代码变更提交所构成的集合;
根据所述重构变更的特征,从第三变更集合中筛除属于所述重构变更的数据,所述第三变更集合为所述第二变更集合中去除类型为所述非语义代码变更的数据后剩余的代码变更提交所构成的集合。
如此,通过第一个筛除属于过多变更的数据,可以最大程度保证筛除属于过多变更的数据的准确性,避免了在筛除属于过多变更的数据的过程中发生遗漏。
作为本申请的一个示例,所述根据所述过多变更的特征,从所述多个代码变更提交中筛除属于所述过多变更的数据,包括:
依次遍历所述多个代码变更提交中的每个代码变更提交;
每当遍历到一个代码变更提交时,若当前遍历到的代码变更提交中包括的代码文件的文件数量与所述总代码文件数量之间的比值大于所述预设阈值,则确定当前遍历到的代码变更提交为属于所述过多变更的数据;
从所述多个代码变更提交中删除所确定的代码变更提交。
如此,通过确定每个代码变更提交所包括的文件数量与总代码文件数量之间的比值,使得确定属于过多变更的数据的过程中有具体的数值支持,从而能够准确地确定出多个代码变更提交中属于过多变更的数据,提高了筛除属于过多变更的数据的准确性。
作为本申请的一个示例,所述根据所述回滚变更的特征,从第一变更集合中筛除属于所述回滚变更的数据,包括:
读取所述第一变更集合中的每个代码变更提交的日志信息;
将所述第一变更集合中日志信息包含预设回滚关键字符的代码变更提交确定为属于所述回滚变更的数据;
对于所述第一变更集合中日志信息不包括所述预设回滚关键字符的待筛除的代码变更提交,将所述待筛除的代码变更提交中的每个代码文件分别与所述每个代码文件对应的至少一个历史代码文件进行对比;
在对比过程中,对于所述待筛除的代码变更提交中的任意一个代码文件,若所述任意一个代码文件对应的至少一个历史代码文件中存在与所述任意一个代码文件相同的历史代码文件,则确定所述任意一个代码文件为属于所述回滚变更的数据;
从所述第一变更集合中删除所确定的属于所述回滚变更的数据。
如此,通过预设回滚关键字符和历史代码文件能够准确筛选出所有属于回滚变更的数据,从而提高了筛除属于回滚变更的数据的准确性和全面性。
作为本申请的一个示例,所述根据所述非语义代码变更的特征,从第二变更集合中筛除属于所述非语义代码变更的数据,包括:
过滤所述第二变更集合中每个代码变更提交包括的每个代码文件内的代码注释;
将过滤后的每个代码文件中所有字符变换为第一符号流;
去除变换后的每个代码文件对应的第一符号流中的空白符和换行符,得到所述每个代码文件对应的第二符号流;
将所述每个代码文件对应的第二符号流与所述每个代码文件对应的历史代码文件的符号流进行对比;
在对比过程中,对于所述每个代码文件中的任意一个代码文件,若任意一个代码文件对应的第二符号流与所述任意一个代码文件对应的历史代码文件的符号流相同,则确定所述任意一个代码文件为属于所述非语义代码变更的数据;
从所述第二变更集合中删除所确定属于所述非语义代码变更的代码文件。
如此,在去除代码注释、空白符和换行符后,将每个代码文件中剩余内容构成的第二符号流与对应的历史代码文件的符号流进行对比,能够准确地确定代码语义是否发生变更,进而能够准确地确定属于非代码变更的数据。
作为本申请的一个示例,所述根据所述重构变更的特征,从第三变更集合中筛除属于所述重构变更的数据,包括:
依次遍历所述第三变更集合中的每个代码变更提交;
每遍历到一个代码变更提交时,若当前遍历到的代码变更提交中存在包括预设重构字段的代码文件,则将包括所述预设重构字段的代码文件确定为属于所述重构变更的数据;
从所述第三变更集合中删除属于所述重构变更的代码文件。
如此,通过遍历每个代码变更提交中的每个代码文件,能够快速确定包含预设重构字段的代码文件属于重构变更的数据,提高了确定属于重构变更的数据的准确性和效率。
作为本申请的一个示例,所述根据非缺陷性修复变更的特征,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据之后,还包括:
在从所述多个代码变更提交中筛选出过多变更提交的情况下,将筛选出的所述过多变更提交发送给目标设备,以使所述目标设备显示第一提示信息,所述第一提示信息用于提示用户对所述过多变更提交所包括的代码文件进行拆分后重新提交,所述过多变更提交属于过多变更的数据,所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更。
如此,值得说明的是,通过第一提示信息提醒用户重新对属于过多变更的数据进行提交,从而避免了直接筛除属于过多变更的数据后发生遗漏部分BFC的情况。
第二方面,提供了一种代码变更类型的筛选装置,所述代码变更类型的筛选装置具有实现上述第一方面中代码变更类型的筛选方法行为的功能。所述代码变更类型的筛选装置包括至少一个模块,所述至少一个模块用于实现上述第一方面所提供的代码变更类型的筛选方法。所述装置包括:
获取模块,用于获取描述标签为指定标签的多个代码变更提交,所述描述标签用于指示对应的代码变更提交的用途;
筛除模块,用于根据非缺陷性修复变更的特征,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据,所述非缺陷性修复变更包括至少一种类型,所述至少一种类型中每种类型的非缺陷性修复变更均与缺陷bug的修复无关。
作为本申请的一个示例,所述至少一种类型包括过多变更、回滚变更、非语义代码变更和重构变更;所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更;所述回滚变更是指将代码回滚至之前状态的变更;所述非语义代码变更是指与代码语义修改无关的变更;所述重构变更是指不改变软件功能特性的情况下对代码进行修改的变更;
所述筛除模块用于:
根据非缺陷性修复变更的特征,按照预设筛除顺序,从所述多个代码变更提交中筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据。
作为本申请的一个示例,所述筛除模块用于:
根据所述过多变更的特征,从所述多个代码变更提交中筛除属于所述过多变更的数据;
根据所述回滚变更的特征,从第一变更集合中筛除属于所述回滚变更的数据,所述第一变更集合为所述多个代码变更提交中去除类型为所述过多变更的数据后剩余的代码变更提交构成的集合;
根据所述非语义代码变更的特征,从第二变更集合中筛除属于所述非语义代码变更的数据,所述第二变更集合为所述第一变更集合中去除类型为所述回滚变更的数据后剩余的代码变更提交所构成的集合;
根据所述重构变更的特征,从第三变更集合中筛除属于所述重构变更的数据,所述第三变更集合为所述第二变更集合中去除类型为所述非语义代码变更的数据后剩余的代码变更提交所构成的集合。
作为本申请的一个示例,所述筛除模块用于:
依次遍历所述多个代码变更提交中的每个代码变更提交;
每当遍历到一个代码变更提交时,若当前遍历到的代码变更提交中包括的代码文件的文件数量与所述总代码文件数量之间的比值大于所述预设阈值,则确定当前遍历到的代码变更提交为属于所述过多变更的数据;
从所述多个代码变更提交中删除所确定的代码变更提交。
作为本申请的一个示例,所述筛除模块用于:
读取所述第一变更集合中的每个代码变更提交的日志信息;
将所述第一变更集合中日志信息包含预设回滚关键字符的代码变更提交确定为属于所述回滚变更的数据;
对于所述第一变更集合中日志信息不包括所述预设回滚关键字符的待筛除的代码变更提交,将所述待筛除的代码变更提交中的每个代码文件分别与所述每个代码文件对应的至少一个历史代码文件进行对比;
在对比过程中,对于所述待筛除的代码变更提交中的任意一个代码文件,若所述任意一个代码文件对应的至少一个历史代码文件中存在与所述任意一个代码文件相同的历史代码文件,则确定所述任意一个代码文件为属于所述回滚变更的数据;
从所述第一变更集合中删除所确定的属于所述回滚变更的数据。
作为本申请的一个示例,所述筛除模块用于:
过滤所述第二变更集合中每个代码变更提交包括的每个代码文件内的代码注释;
将过滤后的每个代码文件中所有字符变换为第一符号流;
去除变换后的每个代码文件对应的第一符号流中的空白符和换行符,得到所述每个代码文件对应的第二符号流;
将所述每个代码文件对应的第二符号流与所述每个代码文件对应的历史代码文件的符号流进行对比;
在对比过程中,对于所述每个代码文件中的任意一个代码文件,若任意一个代码文件对应的第二符号流与所述任意一个代码文件对应的历史代码文件的符号流相同,则确定所述任意一个代码文件为属于所述非语义代码变更的数据;
从所述第二变更集合中删除所确定属于所述非语义代码变更的代码文件。
作为本申请的一个示例,所述筛除模块用于:
依次遍历所述第三变更集合中的每个代码变更提交;
每遍历到一个代码变更提交时,若当前遍历到的代码变更提交中存在包括预设重构字段的代码文件,则将包括所述预设重构字段的代码文件确定为属于所述重构变更的数据;
从所述第三变更集合中删除属于所述重构变更的代码文件。
作为本申请的一个示例,所述装置还包括:
发送模块,用于在从所述多个代码变更提交中筛选出过多变更提交的情况下,将筛选出的所述过多变更提交发送给目标设备,以使所述目标设备显示第一提示信息,所述第一提示信息用于提示用户对所述过多变更提交所包括的代码文件进行拆分后重新提交,所述过多变更提交属于过多变更的数据,所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更。
第三方面,提供了一种电子设备,所述电子设备的结构中包括处理器和存储器,所述存储器用于存储支持电子设备执行上述第一方面所提供的代码变更类型的筛选方法的程序,以及存储用于实现上述第一方面所述的代码变更类型的筛选方法所涉及的数据。所述处理器被配置为用于执行所述存储器中存储的程序。所述电子设备还可以包括通信总线,所述通信总线用于在所述处理器与所述存储器之间建立连接。
第四方面,提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的代码变更类型的筛选方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面所述的代码变更类型的筛选方法。
上述第二方面、第三方面、第四方面和第五方面所获得的技术效果与上述第一方面中对应的技术手段获得的技术效果近似,在这里不再赘述。
附图说明
图1是本申请实施例提供的一种代码变更提交的描述标签的示意图;
图2是本申请实施例提供的一种获取BFC的方法示意图;
图3是本申请实施例提供的一种缺陷性修复的数据和非缺陷型修复的数据示意图;
图4是本申请实施例提供的一种应用场景的示意图;
图5是本申请实施例提供的一种代码变更类型的筛选方法的流程图;
图6是本申请实施例提供的一种非语义代码变更的数据示意图;
图7是本申请实施例提供的一种日志信息的示意图;
图8是本申请实施例提供的另一种代码变更类型的筛选方法流程图;
图9是本申请实施例提供的一种代码变更类型的筛选装置的结构示意图;
图10是本申请实施例提供的一种电子设备的结构示意图;
图11是本申请实施例提供的一种电子设备的软件架构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请的实施方式作进一步地详细描述。
应当理解的是,本申请提及的“多个”是指两个或两个以上。在本申请的描述中,除非另有说明,“/”表示或的意思,比如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,比如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,为了便于清楚描述本申请的技术方案,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
在对本申请实施例进行解释说明之前,先对本申请实施例涉及到的名词进行解释说明。
版本控制系统(Version Control System,VCS):是一段时间内帮助跟踪代码中发生的变更的系统。当研发人员编辑代码时,版本控制系统会为文件拍摄快照,并将该快照永久保存,以便后续根据需要重新调用。常见的版本控制系统包括CVS、SVN和GIT等。
问题跟踪系统(Issue Tracking System,ITS):是一种缺陷跟踪软件,用于帮助企业和研发团队建立各种类型的缺陷处理流程,管理所有的缺陷并跟踪记录这些缺陷的处理过程,同时为使用者提供一个分配、流转和协作处理缺陷的工作平台。常见的问题跟踪系统包括Bugzilla和JIRA等。
问题报告(Issue Report):问题跟踪系统中用于记录软件系统中存在的已发现的bug的形式,内容包括问题报告id(标识)、状态、类型、优先级、描述等信息。也可以被称作bug报告(Bug Report)。
缺陷性修复提交(Bug-Fixing Commit,BFC):研发人员修复bug时发生的代码变更提交。
混合目的的缺陷性修复提交(Mixed-purpose bug-Fixing Commit,MFC):将包含非缺陷性修复变更的缺陷修复变提交(BFC),称为混合目的的缺陷性修复提交。非缺陷性修复变更是指与bug修复目的无关的代码变更,如代码重构和维护。
代码变更:是指所修改的代码文件中被修改的代码行变更记录,一个或多个代码文件的代码变更集合可以以代码提交的形式提交到版本控制系统中,变更(change)是以提交(commit)的形式记录在版本控制系统中。
在一些应用场景中,由于在发布软件后,研发人员可能会主动对软件的代码进行功能性优化、修改(该修改包括代码增加、代码移除等)或bug修复(bug修复也称为缺陷性修复),或者,研发人员根据用户使用软件过程中反馈的信息对软件的代码进行功能性优化、修改或者bug修复。研发人员在对软件的代码进行功能性优化、修改或bug修复后,可以通过版本控制系统将代码变更提交上传至代码审查软件(比如,上传至一种名称为Gerrit的软件),在审核人员通过代码审查软件对上传的代码变更提交进行审查且审查通过后,通过代码审查软件可以将审查通过的代码变更提交合并至远端服务器的项目主干中(即保存至软件的代码仓中)。该代码变更提交中可以包括至少一个代码文件,每个代码文件中包括研发人员对代码中需要进行优化、修改或bug修复的内容进行相关变更的数据。另外,在上传代码变更提交时,该代码变更提交对应有日志信息,有的日志信息中设置有描述标签。示例性地,参见图1,该描述标签的名称可以为“Feature or Bugfix”,描述标签可以描述该代码变更提交是对代码的功能性优化还是缺陷性修复。其中,参见图1,在该描述标签的值为“Bugfix”的情况下,说明该代码变更提交是对代码的缺陷性修复。在该描述标签的值为“Feature”的情况下,说明该代码变更提交是对代码的功能性优化或修改。由于不同的描述标签对应的代码变更提交的类型不同,因此,在需要挖掘和分析包含bug的代码文件/模块有哪些特性和特点的情况下,研发人员可以利用该描述标签从代码仓中获取BFC。或者,参见图2,也可以通过挖掘和链接问题跟踪系统中的问题报告和版本控制系统中的历史提交,来识别BFC。在使用这种方式的情况下,电子设备可以通过正则表达式(或类似方法)来匹配版本控制系统中历史提交日志中的特定关键词(如“bug”和“fix”)和bug标识符来识别BFC,该bug标识符可以记录在问题跟踪系统中,如“AMQ-7178”。
但是,由于代码变更提交中通常还会包括多种与缺陷性修复无关的非缺陷性修复的代码文件,因此,按照上述两种方式通常还会获取到与缺陷性修复无关的数据,也即是,可能会获取到MFC。示例性地,参见图3中的(a)图,在一个代码变更提交中,同时修改了A.java和B.java,然而只有A.java的代码变更是真正用于修复bug的变更,B.java的变更用于其他目的(比如,注释修改和格式性修改)。或者,参见图3中的(b)图,在另一个代码变更提交中,修改了A.java,然而对A.java中的函数FUNC1的修改是与修复bug相关的,对函数FUNC2的修改是与修复bug无关的。在图3中,代码行前面的减号“-”表示被修改的代码行在被修改前的原始状态;代码行前面的加号“+”表示被修改的代码行在该提交中被修改后的状态。由于获取的BFC中还包括与缺陷性修复无关的数据,从而导致对BFC的筛选不够准确,降低了筛选BFC的准确性。另外,由于获取的BFC中还包括与缺陷性修复无关的数据,从而导致研发人员还需要额外花费精力从获取的代码变更提交中找出包含bug的代码文件,提高了人力检查成本,降低了获取BFC的效率。
为了提高筛选BFC的准确性和效率,本申请实施例提供了一种代码变更类型的筛选方法,该方法中,电子设备在获取到描述标签为指定标签的多个代码变更提交后,可以根据非缺陷性修复变更的特征,从获取的多个代码变更提交中依次筛除属于非缺陷性修复变更的数据,由于对非缺陷性修复变更的数据精准地进行了筛除,从而提高了筛选BFC的准确性和效率。
为了便于理解,在对本申请实施例提供的代码变更类型的筛选方法进行详细介绍之前,接下来以电子设备是平板电脑为例,对本申请实施例涉及的应用场景进行介绍。
请参考图4,图4是根据一示例性实施例示出的一种应用场景的示意图。在一种可能的场景中,研发人员在需要挖掘和分析包含bug的代码文件/模块有哪些特性和特点的情况下,可以打开过滤非缺陷性修复变更程序界面,平板电脑响应于研发人员的操作,可以显示如图4中的(a)图所示的过滤非缺陷性修复变更程序界面。研发人员可以点击过滤非缺陷性修复变更程序界面中的“开始过滤”选项;响应于对“开始过滤”选项的点击操作,平板电脑可以从代码仓中获取描述标签为“Bugfix”的多个代码变更提交,并从获取的多个代码变更提交中依次过滤属于非缺陷性修复变更的数据。参见图4中的(b)图,平板电脑响应于对“开始过滤”选项的点击操作,还可以在过滤非缺陷性修复变更程序界面中显示数据处理弹窗1,该数据处理弹窗1中可以显示平板电脑当前所进行的操作,比如,平板电脑在从代码仓中获取描述标签为“Bugfix”的多个代码变更提交后,可以在该数据处理弹窗1中显示“识别出BFC数量:100”,在筛除属于过多变更的数据后,显示“过滤过多变更提交数量:3(详情)”;在筛除属于回滚变更的数据后,显示“过滤回滚变更数量:1(详情)”;在筛除属于非语义代码变更的数据后,显示“过滤非语义代码变更数量:15(详情)”;在筛除属于重构变更的数据后,依次显示“过滤重构变更数量:20(详情)”和“剩余BFC数量:62(详情)”。
在一些实施例中,该数据处理弹窗1中的每种代码变更类型后显示的“详情”选项可以被点击,且“详情”选项被点击后,平板电脑可以显示对应代码变更类型的相关信息展示界面,该信息展示界面中可以展示对应代码变更类型的具体数据。
在一些实施例中,参见图4,在显示过滤非缺陷性修复变更程序界面的情况下,在用户点击“开始过滤”选项之前,用户还可以先进行下载代码仓的操作,以及进行相关配置的操作。
作为一个示例,该数据处理弹窗1也可以在平板电脑完成对属于非缺陷性修复变更的数据的过滤后显示,本申请实施例对此不作具体限制。另外,参见图4中的(b)图,该数据处理弹窗1也可以显示属于不同代码变更类型的数据的保存地址。
作为一个示例,过滤非缺陷性修复变更界面可以为任意一个应用程序的功能界面,也可以为任意一个功能网页,本申请实施例对此不作具体限制。
需要说明的是,本申请实施例仅以上述图4所示的应用场景为例进行说明,并不对本申请实施例构成限定。
基于上述实施例提供的执行主体和应用场景,接下来对本申请实施例提供的代码变更类型的筛选方法进行介绍。请参考图5,图5是根据一示例性示出的一种代码变更类型的筛选方法流程示意图,这里以该方法应用于电子设备中为例进行说明,该方法可以包括如下部分或者全部内容:
步骤501:获取描述标签为指定标签的多个代码变更提交。
需要说明的是,该描述标签用于指示对应的代码变更提交的用途,该描述标签的名称可以为“Feature or Bugfix”,该指定标签可以预先设置,该指定标签可以为“Bugfix”。在指定标签为“Bugfix”的情况下,电子设备可以获取所有描述标签为“Bugfix”的代码变更提交。
在一些实施例中,电子设备可以从任意一个代码仓中获取所有的代码变更历史提交;从所有的代码变更历史提交中获取描述标签为指定标签的多个代码变更提交。
作为一个示例,电子设备可以通过主类(Main Class)从任意一个代码仓中获取所有代码变更历史提交。其中,主类可以通过获取命令(该获取命令可以为git log命令,gitlog命令的形式可以为git log --author=xx --after=2015-11-01 --before=2015-12-01--no-merges --shortstat --pretty=format,或者,该获取命令还可以为封装好的函数名,如getGITlog()等),从任意一个代码仓内获取所有的代码变更历史提交;然后通过主类中的搜索函数(比如,tagMatch()函数)获取描述标签为指定标签的多个代码变更提交。
步骤502:根据非缺陷性修复变更的特征,从多个代码变更提交中筛除属于非缺陷性修复变更的数据。
需要说明的是,非缺陷性修复变更包括至少一种类型,该至少一种类型中每种类型的非缺陷性修复变更均与缺陷bug的修复无关。
示例性地,该至少一种类型包括过多变更、回滚变更、非语义代码变更和重构变更。其中,过多变更是指所包括的代码文件的文件数量与代码仓中总代码文件数量之间的比值大于预设阈值的变更;回滚变更是指将代码回滚至之前状态的变更,例如,将某段含有新增代码的代码段变更回滚至增加前的状态;非语义代码变更是指与代码语义修改无关的变更,例如,代码注释、空格和换行的变化,示例性地,参见图6,对于语句if (para>0){System.out.print(“legal”);},该代码变更只增加了代码注释、空格和换行。重构变更是指不改变软件功能特性的情况下对代码进行修改的变更,也即是,重构变更指在不改变软件外部功能特性的情况下通过修改软件内部的代码结构来提高软件的可理解性、可维护性、和可扩展性的变更,例如,对变量名、函数方法名的重构等,且重构变更通常是发送在代码迁移和维护等场景。
需要说明的是,预设阈值可以根据需求预先进行设置,且该预设阈值可以为大于或等于4%的任意一个数值,通常情况下,该预设阈值可以默认为5%。
示例性地,该预设阈值的默认值可以是预先经过试验确定的,比如,将预设阈值设置为任意值,然后在某项目代码仓中抽取500个属于“过多变更”的BFC(标签标识为“Bugfix”且一次性修改的代码文件的数量与总代码文件数量之间的比值大于设置的任意值的BFC),在此基础上,提取一个具有统计学意义的样本,该样本是根据置信度为99%,误差幅度为5%的500个BFC中随机抽样产生的286个BFC的分层样本。对于286个BFC中的每一个,首先由两名具有研发经验的研发人员进行独立评审。如果认为该具有“过多变更”特征的BFC包含非缺陷修复的代码变更或应拆分为多个提交,则标注为1,否则标注为0。然后,对于这286个BFC获得的两套评审结果,计算评审结果的一致性。最后,在不同阈值下重复上述过程,并发现当预设阈值为5%时,评估结果的一致性可以取得最高值,且对于不一致的评审结果异议最小。因此,通常可以默认预设阈值为5%。
通常情况下,电子设备获取的多个代码变更提交中可能会包括至少一种类型的非缺陷性修复变更,因此,电子设备根据非缺陷性修复变更的特征,可以按照预设筛除顺序,从多个代码变更提交中筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据。
需要说明的是,该预设筛除顺序可以根据需求预先进行设置,且预设筛除顺序包括多种可能,示例性地,该预设筛除顺序可以为第一次筛除过多变更,第二次筛除回滚变更、第三次筛除非语义代码变更,最后筛除重构变更的顺序,也可以为第一次筛除回滚变更、第三二筛除非语义代码变更,第三次筛除重构变更,最后筛除过多变更的顺序。本申请实施例对此不作具体限制。
通常情况下,代码变更提交中都包括有至少一个代码文件,在一个代码变更提交中包括的代码文件过多的情况下,根据通常经验,该多个代码文件的变更目的可能会包括对bug的修改,也包括其他的变更目的,这样一来可能会导致研发人员频繁点击代码文件进行代码查看和分析,导致后续对代码进行分析的过程较慢,因此,为了提高获取BFC的效率,以及提高研发人员分析包含bug的代码文件的效率,通常可以将属于过多变更的数据进行筛除。
由上述可知,电子设备可以通过主类获取到多个代码变更提交,电子设备可以通过主类将获取多个代码变更提交中的每个代码变更提交传入四重过滤类中,通过四重过滤类依次调用四个过滤方法子类中的过滤函数,来依次过滤四种非缺陷修复变更。其中,四重过滤类可以表示为QuadrupleFilterClass,该四个过滤方法子类可以分别为过滤过多变更的方法子类:FilterTooMuchChangeCommitClass类、过滤回滚变更的方法子类:FilterRollbackChangeClass类、过滤非语义代码变更的方法子类:FilterNonSemanticCodeChangeClass类和过滤重构变更的方法子类FilterRefactoringChangeClass类。该过滤函数可以表示为quadrupleFilter(BFC)。
作为一个示例,电子设备可以通过四重过滤类调用过滤过多变更的方法子类中封装的过滤过多变更提交函数,以过滤具备过多变更特点的数据,该过多变更提交函数可以为filterTooMuchChangeCommit。在删除属于过多变更的数据之后,电子设备通过四重过滤类调用过滤回滚变更的方法子类中封装的过滤回滚变更函数,以过滤属于回滚变更的数据,该过滤回滚变更函数可以为filterRollbackChange。在删除属于回滚变更的数据之后,电子设备通过四重过滤类调用过滤非语义代码变更的方法子类中封装的过滤非语义代码变更函数,以过滤属于非语义代码变更的数据,该过滤非语义代码变更函数可以为filterNonSe manticCodeChange。在删除属于非语义代码变更的数据之后,电子设备通过四重过滤类调用过滤重构变更的方法子类中封装的过滤重构变更函数,以过滤属于重构变更的数据,过滤重构变更函数可以为filterRefactoringChange。
在一些实施例中,电子设备也可以一次性从多个代码变更提交中,同时筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据。
由于一次性筛除多种非缺陷性修复变更的数据可能会导致电子设备的运行负担较重,导致筛选速度较慢,且可能还会影响其他进程的运行,因此,通常情况下,电子设备可以按照预设筛除顺序筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据。
需要说明的是,筛除的数据中包含三种情况:代码变更对应的一次代码变更提交、代码变更提交中的某个或多个代码文件,以及代码文件中的某一段代码。被删除的对象,可以通过上述图4所示的在类似result.txt结果文件中查看详情,以增加程序的可追溯性。
值得说明的是,通过预设筛除顺序筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据,避免因同时筛除大量数据而给电子设备带来运行负担,也避免了筛除过程中发生错误。
在一些实施例中,在预设筛除顺序可以为第一次筛除过多变更,第二次筛除回滚变更、第三次筛除非语义代码变更,最后筛除重构变更的顺序的情况下,电子设备根据非缺陷性修复变更的特征,按照预设筛除顺序,从多个代码变更提交中筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据的操作包括:根据过多变更的特征,从多个代码变更提交中筛除属于过多变更的数据;根据回滚变更的特征,从第一变更集合中筛除属于回滚变更的数据,第一变更集合为多个代码变更提交中去除类型为过多变更的数据后剩余的代码变更提交构成的集合;根据非语义代码变更的特征,从第二变更集合中筛除属于非语义代码变更的数据,该第二变更集合为第一变更集合中去除类型为回滚变更的数据后剩余的代码变更提交所构成的集合;根据重构变更的特征,从第三变更集合中筛除属于重构变更的数据,第三变更集合为第二变更集合中去除类型为非语义代码变更的数据后剩余的代码变更提交所构成的集合。
值得说明的是,通过第一个筛除属于过多变更的数据,可以最大程度保证筛除属于过多变更的数据的准确性,避免了在筛除属于过多变更的数据的过程中发生遗漏。
接下来,对电子设备依次筛除属于过多变更、回滚变更、非语义代码变更和重构变更的数据的具体方式进行介绍。
在一些实施例中,电子设备根据过多变更的特征,从多个代码变更提交中筛除属于过多变更的数据的操作包括:依次遍历多个代码变更提交中的每个代码变更提交;每当遍历到一个代码变更提交时,若当前遍历到的代码变更提交中包括的代码文件的文件数量与总代码文件数量之间的比值大于预设阈值,则确定当前遍历到的代码变更提交为属于过多变更的数据;从多个代码变更提交中删除所确定的代码变更提交。
由上述可知,过多变更是指所包括的代码文件的文件数量与代码仓中总代码文件数量之间的比值大于预设阈值的变更,因此,在筛除属于过多变更的数据的情况下,对于每个代码变更提交A,电子设备可以获取该代码变更提交A所包括的代码文件的文件数量(该文件数量可以用TotalNum表示),并获取当前代码仓中所有代码文件的总代码文件数量(总代码文件数量可以用NumInCommit表示),将代码变更提交A所包括代码文件的文件数量除以总代码文件数量,得到比值(percent),该过程可以表示为:percent = NumInCommit /TotalNum * 100%。在该比值大于预设阈值的情况下,可以确定该代码变更提交A为属于过多变更的数据,该代码变更提交A可以称为过多变更提交。
作为一个示例,电子设备可以通过四重过滤类调用获取文件数量递归函数,确定总代码文件数量;统计当前代码变更提交A所包括的文件数量。然后,调用判断函数,通过判断函数确定当前代码变更提交A中文件数量与总代码数量之间的比值,判断比值是否大于预设阈值。如果该比值大于预设阈值,则确定代码变更提交A为属于过多变更的数据。如果该比值小于或等于预设阈值,则确定代码变更提交A不为属于过多变更的数据。
需要说明的是,获取文件数量递归函数和判断函数均属于过滤过多变更函数。
在一些实施例中,电子设备从多个代码变更提交中确定过多变更提交后,不仅可以从多个代码变更提交中删除所确定的过多变更提交,还可以将过多变更提交单独进行存储,以便后续查看确定的过多变更提交。
值得说明的是,通过确定每个代码变更提交所包括的文件数量与总代码文件数量之间的比值,使得确定属于过多变更的数据的过程中有具体的数值支持,从而能够准确地确定出多个代码变更提交中属于过多变更的数据,提高了筛除属于过多变更的数据的准确性。
在一些实施例中,电子设备根据回滚变更的特征,从第一变更集合中筛除属于回滚变更的数据的操作包括:读取第一变更集合中的每个代码变更提交的日志信息;将第一变更集合中日志信息包含预设回滚关键字符的代码变更提交确定为属于回滚变更的数据;对于第一变更集合中日志信息不包括预设回滚关键字符的待筛除的代码变更提交,将待筛除的代码变更提交中的每个代码文件分别与每个代码文件对应的至少一个历史代码文件进行对比;在对比过程中,对于待筛除的代码变更提交中的任意一个代码文件,若任意一个代码文件对应的至少一个历史代码文件中存在与任意一个代码文件相同的历史代码文件,则确定任意一个代码文件为属于回滚变更的数据;从第一变更集合中删除所确定的属于回滚变更的数据。
通常情况下,在版本控制系统为GIT的情况下,属于回滚变更的代码变更提交是在执行git revert命令(撤消提交命令)时产生的提交,示例性地,当前待修改的代码的上一个版本为版本C1,当前的版本为C2的情况下,通过git revert命令可以将上一版本C1进行复制,得到版本C3,将版本C3的代码作为一个代码变更提交(即属于回滚变更的代码变更提交),从而可以使待修改的代码的版本由版本C2变更为版本C3(版本C3与版本C1内容相同),通过git revert命令保证了在回滚历史版本后,可以保留每一个版本对应的代码变更提交,使得每个代码变更提交都有迹可查。另外GIT会产生该代码变更提交的日志信息,如此一来,在执行git revert命令时,会产生日志格式为Rever的日志信息,该日志信息可以如图7所示,且为了便于理解,本申请实施例中将图7中与回滚相关的字符用方框框出。因此,电子设备可以读取第一变更集合中每个代码变更提交的日志信息,并将第一变更集合中日志信息包含预设回滚关键字符的代码变更提交确定为属于回滚变更的数据,日志信息包含预设回滚关键字符的代码变更提交也可以称为回滚变更提交。
需要说明的是,预设回滚关键字符可以为revert[ed|ing]、restore[d|ing]、rollback[ed|ing]、reset[ed|ing]或roll[ed|ing]等。
由于在一个代码变更提交中可能会包括多个代码文件,每个代码文件的变更目的可能不相同,从而导致在存在属于回滚变更的代码文件的情况下,该代码变更提交的日志信息中并未记载预设回滚关键字,因此,为了准确筛选出属于回滚变更的数据,对于第一变更集合中日志信息不包括预设回滚关键字符的待筛除的代码变更提交,电子设备可以将待筛除的代码变更提交中的每个代码文件分别与每个代码文件对应的至少一个历史代码文件进行对比。
示例性地,对于待筛除的代码变更提交中的代码文件B,将代码文件B与代码文件B对应的三个历史代码文件(分别为历史代码文件C、历史代码文件D和历史代码文件E)进行对比,在历史代码文件C与代码文件B相同的情况下,或者,在历史代码文件D与代码文件B相同的情况下,或者,在历史代码文件E与代码文件B相同的情况下,确定代码文件B属于回滚变更的数据。
作为一个示例,在对比过程中,对于待筛除的代码变更提交中的任意一个代码文件,若任意一个代码文件对应的至少一个历史代码文件中不存在与任意一个代码文件相同的历史代码文件,则确定待筛除的代码变更提交中不存在属于回滚变更的数据。
在一些实施例中,电子设备可以通过整个代码文件与对应历史代码文件进行对比,以确定该代码文件是否属于回滚变更的数据,电子设备也可以将代码文件的至少一个代码段分别与对应的历史代码文件进行对比;在对比过程中,对于任意一个代码文件,若任意一个代码文件对应的任意一个历史代码文件中存在与任意一个代码文件中的至少一个代码段相同的代码段,则确定该任意一个代码文件中的至少一个代码段为属于回滚变更的数据。
在一些实施例中,电子设备在确定属于回滚变更的数据后,可以将属于回滚变更的数据单独进行存储,以便研发人员后续进行查看。
值得说明的是,通过预设回滚关键字符和历史代码文件能够准确筛选出所有属于回滚变更的数据,从而提高了筛除属于回滚变更的数据的准确性和全面性。
在一些实施例中,电子设备根据非语义代码变更的特征,从第二变更集合中筛除属于非语义代码变更的数据的操作包括:过滤第二变更集合中每个代码变更提交包括的每个代码文件内的代码注释;将过滤后的每个代码文件中所有字符变换为第一符号(Token)流;去除变换后的每个代码文件对应的第一符号流中的空白符和换行符,得到每个代码文件对应的第二符号流;将每个代码文件对应的第二符号流与每个代码文件对应的历史代码文件的符号流进行对比;在对比过程中,对于每个代码文件中的任意一个代码文件,若任意一个代码文件对应的第二符号流与任意一个代码文件对应的历史代码文件的符号流相同,则确定任意一个代码文件为属于非语义代码变更的数据;从第二变更集合中删除所确定属于非语义代码变更的代码文件。
需要说明的是,代码注释包括行注释和段注释。
作为一个示例,电子设备可以通过正则表达式过滤第二变更集合中每个代码变更提交包括的每个代码文件内的代码注释。
由于非语义代码变更是指与代码语义无关的变更,在将代码注释过滤后,该过滤后的代码文件中剩余单词和符号,因此,为了便于进行单词的对比,电子设备可以将过滤后的代码文件中的单词和符号变换为第一符号流,并去除变换后的每个代码文件对应的第一符号流的空白符和换行符,得到每个代码文件对应的第二符号流,该每个代码文件对应的第二符号流为各个单词构成的符号流。
需要说明的是,任意一个代码文件对应的历史代码文件的符号流为各个单词构成符号流,即任意一个代码文件对应的历史代码文件的符号流不包括空白符和换行符。
作为一个示例,在对比过程中,对于每个代码文件中的任意一个代码文件,若任意一个代码文件对应的第二符号流与任意一个代码文件对应的历史代码文件的符号流都不相同,则确定不存在属于非语义代码变更的数据。
在一些实施例中,电子设备可以获取整个代码文件对应的第二字符流,也可以获取任意一个代码文件中至少一个代码段对应的第二字符流,在至少一个代码段分别对应的第二字符流与任意一个代码文件对应的历史代码文件中的任意代码段的符号流相同的情况下,确定任意一个代码文件中至少一个代码段属于非语义代码变更的数据。
在一些实施例中,电子设备在确定属于非语义代码变更的数据后,可以将属于非语义代码变更的数据单独进行存储,以便研发人员后续进行查看。
值得说明的是,在去除代码注释、空白符和换行符后,将每个代码文件中剩余内容构成的第二符号流与对应的历史代码文件的符号流进行对比,能够准确地确定代码语义是否发生变更,进而能够准确地确定属于非代码变更的数据。
在一些实施例中,电子设备根据重构变更的特征,从第三变更集合中筛除属于重构变更的数据的操作包括:依次遍历第三变更集合中的每个代码变更提交;每遍历到一个代码变更提交时,若当前遍历到的代码变更提交中存在包括预设重构字段的代码文件,则将包括预设重构字段的代码文件确定为属于重构变更的数据;从第三变更集合中删除属于重构变更的代码文件。
作为一个示例,电子设备可以调用第三方开源的重构检测工具,通过第三方开源的重构检测工具依次遍历第三变更集合中的每个代码变更提交。该第三方开源的重构检测工具可以为API库(RefactoringMiner2)。
需要说明的是,该预设重构字段可以为下述表1、表2和表3中所示的重构字段中的至少一个,且为了便于理解,表1、表2和表3中还示出了每个重构字段的字段含义。
/>
/>
需要说明的是,本申请实施例中仅以上述表1、表2和表3所示的重构字段和字段含义为例进行说明,并不对本申请实施例构成限定。
在一些实施例中,电子设备可以将包括预设重构字段的代码文件确定为属于重构变更的数据,也可以将任意一个代码文件中包括预设重构字段的至少一个代码段确定为属于重构变更的数据。
作为一个示例,电子设备在确定属于重构变更的数据后,可以将属于重构变更的数据单独进行存储。
值得说明的是,通过遍历每个代码变更提交中的每个代码文件,能够快速确定包含预设重构字段的代码文件属于重构变更的数据,提高了确定属于重构变更的数据的准确性和效率。
在一些实施例中,电子设备根据非缺陷性修复变更的特征,从多个代码变更提交中筛除属于非缺陷性修复变更的数据之后,在从多个代码变更提交中筛选出过多变更提交的情况下,可以将筛选出的过多变更提交发送给目标设备,以使目标设备显示第一提示信息,第一提示信息用于提示用户对过多变更提交所包括的代码文件进行拆分后重新提交,该过多变更提交属于过多变更的数据,过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更。
由上述可知,在过多代码变更包括多个代码文件的情况下,该多个代码文件的变更目的可能会包括对bug的修改,也包括其他的变更目的,为了避免发生对包含bug的代码文件漏分析的情况,电子设备还可以将属于过多变更提交发送给目标设备。目标设备在接收到电子设备发送的过多变更提交的情况下,可以通过第一提示信息提示使用目标终端的用户对过多变更提交所包括的代码文件进行拆分后重新提交。
值得说明的是,通过第一提示信息提醒用户重新对属于过多变更的数据进行提交,从而避免了直接筛除属于过多变更的数据后发生遗漏部分BFC的情况。
在一些实施例中,电子设备根据非缺陷性修复变更的特征,从多个代码变更提交中筛除属于非缺陷性修复变更的数据之后,还可以显示第二提示信息,该第二提示信息用于提示用户对多个代码变更提交中筛除属于非缺陷性修复变更提交的数据后剩余的数据进行审查。
在本申请实施例中,电子设备在获取到描述标签为指定标签的多个代码变更提交后,可以根据非缺陷性修复变更的特征,从获取的多个代码变更提交中依次筛除属于非缺陷性修复变更的数据,由于对非缺陷性修复变更的数据精准地进行了筛除,且无需额外投入精力和成本,从而提高了筛选BFC的准确性和效率。
由上述可知,电子设备可以通过调用不同类中函数的方式来实现代码变更类型的筛选,为了进一步理解本申请实施例,请参考图8,图8是根据另一示例性示出的一种代码变更类型的筛选方法流程示意图,这里以该方法应用于电子设备中,且以电子设备中调用的各种类之间的交互为例进行说明,该方法可以包括如下部分或者全部内容:
步骤801:主类向代码仓发送获取命令。
作为一个示例,主类可以通过获取函数(也可以称为获取命令)获取代码仓中的代码变更历史提交,该获取命令可以为git log命令。示例性地,主类可以向代码仓发送该gitlog命令。
步骤802:代码仓在接收到获取命令的情况下,向主类返回代码变更历史提交。
作为一个示例,代码仓在接收到该获取命令的情况下,可以通过返回函数(或者称为返回命令)向主类返回代码变更历史提交,该返回函数可以为return()。
步骤803:主类从代码变更历史提交中获取描述标签为指定标签的多个代码变更提交。
作为一个示例,主类可以通过搜索函数从代码变更历史提交中获取描述标签为指定标签的多个代码变更提交。该搜索函数可以为tagMatch()。
步骤804:主类将多个代码变更提交传入四重过滤类。
作为一个示例,主类可以通过传入函数将多个代码变更提交传入四重过滤类,该传入函数可以为quadrupleFilte()。
步骤805:四重过滤类将多个代码变更提交发送至过滤过多变更的方法子类中。
步骤806:过滤过多变更的方法子类在接收到多个代码变更提交的情况下,筛除多个代码变更提交中属于过多变更的数据,得到第一变更集合。
作为一个示例,过滤过多变更的方法子类通过封装的过滤过多变更提交函数,筛除多个代码变更中属于过多变更的数据,将筛除属于过多变更的数据后剩余的代码变更提交构成的集合确定为第一变更集合。
步骤807:过滤过多变更的方法子类在筛除属于过多变更的数据的情况下,向四重过滤类返回第一变更集合。
作为一个示例,过滤过多变更的方法子类在不仅可以向四重过滤类返回第一变更集合,还可以向四重过滤类返回属于过多变更的数据,即返回过多变更提交。
步骤808:四重过滤类在接收到第一变更集合的情况下,将第一变更集合发送至过滤回滚变更的方法子类中。
步骤809:过滤回滚变更的方法子类在接收到第一变更集合的情况下,筛除第一变更集合中属于回滚变更的数据,得到第二变更集合。
作为一个示例,过滤回滚变更的方法子类通过封装的过滤回滚变更函数筛除第一变更集合中属于回滚变更的数据,并将第一变更集合中去除属于回滚变更的数据后剩余的代码变更提交所构成的集合确定为第二变更集合。
步骤810:在过滤回滚变更的方法子类筛选出属于回滚变更的数据的情况下,向四重过滤类返回第二变更集合。
步骤811:四重过滤类在接收到第二变更集合的情况下,向过滤非语义代码变更的方法子类发送第二变更集合。
步骤812:过滤非语义代码变更的方法子类在接收到第二变更集合的情况下,筛除第二变更集合中属于非语义代码变更的数据,得到第三变更集合。
作为一个示例,过滤非语义代码变更的方法子类可以通过封装的过滤非语义代码变更函数删除第二变更集合中属于非语义代码变更的数据,并将第二变更集合中去除属于非语义代码变更的数据后剩余的代码变更提交所构成的集合确定为第三变更集合。
步骤813:过滤非语义代码变更的方法子类在筛选出属于非语义代码变更的数据的情况下,向四重过滤类返回第三变更集合。
步骤814:四重过滤类在接收到第三变更集合的情况下,向过滤重构变更的方法子类发送第三变更集合。
步骤815:过滤重构变更的方法子类在接收到第三变更集合的情况下,筛除第三变更集合中属于重构变更的数据,得到第四集合。
作为一个示例,过滤重构变更的方法子类可以通过封装的过滤重构变更函数筛除第三变更集合中属于重构变更的数据,并将第三变更集合中去除属于重构变更的数据后剩余的代码变更提交所构成的集合确定为第四变更集合。
步骤816:过滤重构变更的方法子类在筛选出属于重构变更的数据的情况下,向四重过滤类返回第四变更集合。
步骤817:四重过滤类在接收到第四变更集合的情况下,将第四变更集合和过多变更提交返回给主类。
在本申请实施例中,电子设备在获取到描述标签为指定标签的多个代码变更提交后,可以根据非缺陷性修复变更的特征,从获取的多个代码变更提交中依次筛除属于非缺陷性修复变更的数据,由于对非缺陷性修复变更的数据精准地进行了筛除,且无需额外投入精力和成本,从而提高了筛选BFC的准确性和效率。
图9是本申请实施例提供的一种代码变更类型的筛选装置的结构示意图,该装置可以由软件、硬件或者两者的结合实现成为电子设备的部分或者全部。参见图9,该装置包括:获取模块901和筛除模块902。
获取模块901,用于获取描述标签为指定标签的多个代码变更提交,所述描述标签用于指示对应的代码变更提交的用途;
筛除模块902,用于根据非缺陷性修复变更的特征,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据,所述非缺陷性修复变更包括至少一种类型,所述至少一种类型中每种类型的非缺陷性修复变更均与缺陷bug的修复无关。
作为本申请的一个示例,所述至少一种类型包括过多变更、回滚变更、非语义代码变更和重构变更;所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更;所述回滚变更是指将代码回滚至之前状态的变更;所述非语义代码变更是指与代码语义修改无关的变更;所述重构变更是指不改变软件功能特性的情况下对代码进行修改的变更;
所述筛除模块902用于:
根据非缺陷性修复变更的特征,按照预设筛除顺序,从所述多个代码变更提交中筛除属于过多变更、回滚变更、非语义代码变更和/或重构变更的数据。
作为本申请的一个示例,所述筛除模块902用于:
根据所述过多变更的特征,从所述多个代码变更提交中筛除属于所述过多变更的数据;
根据所述回滚变更的特征,从第一变更集合中筛除属于所述回滚变更的数据,所述第一变更集合为所述多个代码变更提交中去除类型为所述过多变更的数据后剩余的代码变更提交构成的集合;
根据所述非语义代码变更的特征,从第二变更集合中筛除属于所述非语义代码变更的数据,所述第二变更集合为所述第一变更集合中去除类型为所述回滚变更的数据后剩余的代码变更提交所构成的集合;
根据所述重构变更的特征,从第三变更集合中筛除属于所述重构变更的数据,所述第三变更集合为所述第二变更集合中去除类型为所述非语义代码变更的数据后剩余的代码变更提交所构成的集合。
作为本申请的一个示例,所述筛除模块902用于:
依次遍历所述多个代码变更提交中的每个代码变更提交;
每当遍历到一个代码变更提交时,若当前遍历到的代码变更提交中包括的代码文件的文件数量与所述总代码文件数量之间的比值大于所述预设阈值,则确定当前遍历到的代码变更提交为属于所述过多变更的数据;
从所述多个代码变更提交中删除所确定的代码变更提交。
作为本申请的一个示例,所述筛除模块902用于:
读取所述第一变更集合中的每个代码变更提交的日志信息;
将所述第一变更集合中日志信息包含预设回滚关键字符的代码变更提交确定为属于所述回滚变更的数据;
对于所述第一变更集合中日志信息不包括所述预设回滚关键字符的待筛除的代码变更提交,将所述待筛除的代码变更提交中的每个代码文件分别与所述每个代码文件对应的至少一个历史代码文件进行对比;
在对比过程中,对于所述待筛除的代码变更提交中的任意一个代码文件,若所述任意一个代码文件对应的至少一个历史代码文件中存在与所述任意一个代码文件相同的历史代码文件,则确定所述任意一个代码文件为属于所述回滚变更的数据;
从所述第一变更集合中删除所确定的属于所述回滚变更的数据。
作为本申请的一个示例,所述筛除模块902用于:
过滤所述第二变更集合中每个代码变更提交包括的每个代码文件内的代码注释;
将过滤后的每个代码文件中所有字符变换为第一符号流;
去除变换后的每个代码文件对应的第一符号流中的空白符和换行符,得到所述每个代码文件对应的第二符号流;
将所述每个代码文件对应的第二符号流与所述每个代码文件对应的历史代码文件的符号流进行对比;
在对比过程中,对于所述每个代码文件中的任意一个代码文件,若任意一个代码文件对应的第二符号流与所述任意一个代码文件对应的历史代码文件的符号流相同,则确定所述任意一个代码文件为属于所述非语义代码变更的数据;
从所述第二变更集合中删除所确定属于所述非语义代码变更的代码文件。
作为本申请的一个示例,所述筛除模块902用于:
依次遍历所述第三变更集合中的每个代码变更提交;
每遍历到一个代码变更提交时,若当前遍历到的代码变更提交中存在包括预设重构字段的代码文件,则将包括所述预设重构字段的代码文件确定为属于所述重构变更的数据;
从所述第三变更集合中删除属于所述重构变更的代码文件。
作为本申请的一个示例,所述装置还包括:
发送模块,用于在从所述多个代码变更提交中筛选出过多变更提交的情况下,将筛选出的所述过多变更提交发送给目标设备,以使所述目标设备显示第一提示信息,所述第一提示信息用于提示用户对所述过多变更提交所包括的代码文件进行拆分后重新提交,所述过多变更提交属于过多变更的数据,所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更。
在本申请实施例中,电子设备在获取到描述标签为指定标签的多个代码变更提交后,可以根据非缺陷性修复变更的特征,从获取的多个代码变更提交中依次筛除属于非缺陷性修复变更的数据,由于对非缺陷性修复变更的数据精准地进行了筛除,且无需额外投入精力和成本,从而提高了筛选BFC的准确性和效率。
需要说明的是:上述实施例提供代码变更类型的筛选装置在筛选代码变更的类型时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
上述实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请实施例的保护范围。
上述实施例提供的代码变更类型的筛选装置与代码变更类型的筛选方法实施例属于同一构思,上述实施例中单元、模块的具体工作过程及带来的技术效果,可参见方法实施例部分,此处不再赘述。
接下来,先对本申请实施例涉及的电子设备予以说明。
作为示例而非限定,电子设备可以是但不限于平板电脑、桌面型计算机、膝上型计算机、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)、增强现实(augmentedreality,AR)\虚拟现实(virtual reality,VR)设备、服务器等,本申请实施例对此不作限定。
图10是本申请实施例提供的一种电子设备的结构示意图。参见图10,电子设备100可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universalserial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中,传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
处理器110可以包括一个或多个处理单元,比如:处理器110可以包括应用处理器(application processor,AP),调制解调处理器,图形处理器(graphics processingunit,GPU),图像信号处理器(image signal processor,ISP),控制器,存储器,视频编解码器,数字信号处理器(digital signal processor,DSP),基带处理器,和/或神经网络处理器(neural-network processing unit,NPU)等。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。
其中,控制器可以是电子设备100的神经中枢和指挥中心。控制器可以根据指令操作码和时序信号,产生操作控制信号,完成取指令和执行指令的控制。
处理器110中还可以设置存储器,用于存储指令和数据。在一些实施例中,处理器110中的存储器为高速缓冲存储器。该存储器可以保存处理器110刚用过或循环使用的指令或数据。如果处理器110需要再次使用该指令或数据,可从该存储器中直接调用。避免了重复存取,减少了处理器110的等待时间,因而提高了系统的效率。
在一些实施例中,处理器110可以包括一个或多个接口,如可以包括集成电路(inter-integrated circuit,I2C)接口,集成电路内置音频(inter-integrated circuitsound,I2S)接口,脉冲编码调制(pulse code modulation,PCM)接口,通用异步收发传输器(universal asynchronous receiver/transmitter,UART)接口,移动产业处理器接口(mobile industry processor interface,MIPI),通用输入输出(general-purposeinput/output,GPIO)接口,用户标识模块(subscriber identity module,SIM)接口,和/或通用串行总线(universal serial bus,USB)接口等。
可以理解的是,本申请实施例示意的各模块间的接口连接关系,只是示意性说明,并不构成对电子设备100的结构限定。在本申请另一些实施例中,电子设备100也可以采用上述实施例中不同的接口连接方式,或多种接口连接方式的组合。
充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。在一些有线充电的实施例中,充电管理模块140可以通过USB接口130接收有线充电器的充电输入。在一些无线充电的实施例中,充电管理模块140可以通过电子设备100的无线充电线圈接收无线充电输入。充电管理模块140为电池142充电的同时,还可以通过电源管理模块141为电子设备100供电。
电源管理模块141用于连接电池142,充电管理模块140与处理器110。电源管理模块141接收电池142和/或充电管理模块140的输入,为处理器110,内部存储器121,外部存储器,显示屏194,摄像头193和无线通信模块160等供电。电源管理模块141还可以用于监测电池容量,电池循环次数,电池健康状态(漏电,阻抗)等参数。在其他一些实施例中,电源管理模块141也可以设置于处理器110中。在另一些实施例中,电源管理模块141和充电管理模块140也可以设置于同一个器件中。
电子设备100的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。
在一些实施例中,电子设备100的天线1和移动通信模块150耦合,天线2和无线通信模块160耦合,使得电子设备100可以通过无线通信技术与网络以及其他设备通信。无线通信技术可以包括全球移动通讯系统(global system for mobile communications,GSM),通用分组无线服务(general packet radio service,GPRS),码分多址接入(codedivision multiple access,CDMA),宽带码分多址(wideband code division multipleaccess,WCDMA),时分码分多址(time-division code division multiple access,TD-SCDMA),长期演进(long term evolution,LTE),BT,GNSS,WLAN,NFC,FM,和/或IR技术等。GNSS可以包括全球卫星定位系统(global positioning system,GPS),全球导航卫星系统(global navigation satellite system,GLONASS),北斗卫星导航系统(beidounavigation satellite system,BDS),准天顶卫星系统(quasi-zenith satellitesystem,QZSS)和/或星基增强系统(satellite based augmentation systems,SBAS)。
电子设备100通过GPU,显示屏194,以及应用处理器等实现显示功能。GPU为图像处理的微处理器,连接显示屏194和应用处理器。GPU用于执行数学和几何计算,用于图形渲染。处理器110可包括一个或多个GPU,其执行程序指令以生成或改变显示信息。
显示屏194用于显示图像,视频等。显示屏194包括显示面板。显示面板可以采用液晶显示屏(liquid crystal display,LCD),有机发光二极管(organic light-emittingdiode,OLED),有源矩阵有机发光二极体或主动矩阵有机发光二极体(active-matrixorganic light emitting diode,AMOLED),柔性发光二极管(flex light-emittingdiode,FLED),Miniled,MicroLed,Micro-oLed,量子点发光二极管(quantum dot lightemitting diodes,QLED)等。在一些实施例中,电子设备100可以包括1个或N个显示屏194,N为大于1的整数。
电子设备100可以通过ISP,摄像头193,视频编解码器,GPU,显示屏194以及应用处理器等实现拍摄功能。
外部存储器接口120可以用于连接外部存储卡,比如Micro SD卡,实现扩展电子设备100的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。比如将音乐,视频等文件保存在外部存储卡中。
内部存储器121可以用于存储计算机可执行程序代码,计算机可执行程序代码包括指令。处理器110通过运行存储在内部存储器121的指令,来执行电子设备100的各种功能应用以及数据处理。内部存储器121可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统,至少一个功能所需的应用程序(比如声音播放功能,图像播放功能等)等。存储数据区可存储电子设备100在使用过程中所创建的数据(比如音频数据,电话本等)等。此外,内部存储器121可以包括高速随机存取存储器,还可以包括非易失性存储器,比如至少一个磁盘存储器件,闪存器件,通用闪存存储器(universal flash storage,UFS)等。
电子设备100可以通过音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D以及应用处理器等实现音频功能,比如音乐播放,录音等。
压力传感器180A用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180A可以设置于显示屏194。压力传感器180A的种类很多,如电阻式压力传感器,电感式压力传感器,电容式压力传感器等。电容式压力传感器可以是包括至少两个具有导电材料的平行板。当有力作用于压力传感器180A,电极之间的电容改变。电子设备100根据电容的变化确定压力的强度。当有触摸操作作用于显示屏194,电子设备100根据压力传感器180A检测触摸操作强度。电子设备100也可以根据压力传感器180A的检测信号计算触摸的位置。在一些实施例中,作用于相同触摸位置,但不同触摸操作强度的触摸操作,可以对应不同的操作指令。比如:当有触摸操作强度小于压力阈值的触摸操作作用于短消息应用图标时,执行查看短消息的指令。当有触摸操作强度大于或等于压力阈值的触摸操作作用于短消息应用图标时,执行新建短消息的指令。
触摸传感器180K,也称“触控面板”。触摸传感器180K可以设置于显示屏194,由触摸传感器180K与显示屏194组成触摸屏,也称“触控屏”。触摸传感器180K用于检测作用于其上或附近的触摸操作。触摸传感器180K可以将检测到的触摸操作传递给应用处理器,以确定触摸事件类型。可以通过显示屏194提供与触摸操作相关的视觉输出。在另一些实施例中,触摸传感器180K也可以设置于电子设备100的表面,与显示屏194所处的位置不同。
接下来对电子设备100的软件系统予以说明。
电子设备100的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。本申请实施例以分层架构的安卓(Android)系统为例,对电子设备100的软件系统进行示例性说明。
图11是本申请实施例提供的一种电子设备100的软件系统的框图。参见图11,分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统层,以及内核层。
应用程序层可以包括一系列应用程序包。如图11所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,WLAN,蓝牙,音乐,视频,短信息等应用程序。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。如图2所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问,这些数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,比如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序的显示界面,显示界面可以由一个或多个视图组成,比如,包括显示短信通知图标的视图,包括显示文字的视图,以及包括显示图片的视图。电话管理器用于提供电子设备100的通信功能,比如通话状态的管理(包括接通,挂断等)。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如,通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或滚动条文本形式出现在系统顶部状态栏的通知,比如后台运行的应用程序的通知。通知管理器还可以是以对话窗口形式出现在屏幕上的通知,比如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。
Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块,比如:表面管理器(surface manager),媒体库(Media Libraries),三维图形处理库(比如:OpenGL ES),2D图形引擎(比如:SGL)等。表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的融合。媒体库支持多种常用的音频,视频格式回放和录制,以及静态图像文件等。媒体库可以支持多种音视频编码格式,比如:MPEG4,H.264,MP3,AAC,AMR,JPG,PNG等。三维图形处理库用于实现三维图形绘图,图像渲染,合成,和图层处理等。2D图形引擎是2D绘图的绘图引擎。
内核层是硬件和软件之间的层。内核层至少包含显示驱动,摄像头驱动,音频驱动,传感器驱动。
下面结合捕获拍照场景,示例性说明电子设备100软件以及硬件的工作流程。
当触摸传感器180K接收到触摸操作,相应的硬件中断被发给内核层。内核层将触摸操作加工成原始输入事件(包括触摸坐标,触摸操作的时间戳等信息)。原始输入事件被存储在内核层。应用程序框架层从内核层获取原始输入事件,识别原始输入事件所对应的控件。以该触摸操作是单击操作,该单击操作所对应的控件为相机应用图标的控件为例,相机应用调用应用程序框架层的接口,启动相机应用,再调用内核层启动摄像头驱动,通过摄像头193捕获静态图像或视频。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意结合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,比如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(比如:同轴电缆、光纤、数据用户线(Digital Subscriber Line,DSL))或无线(比如:红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质,或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质(比如:软盘、硬盘、磁带)、光介质(比如:数字通用光盘(Digital Versatile Disc,DVD))或半导体介质(比如:固态硬盘(Solid State Disk,SSD))等。
以上所述为本申请提供的可选实施例,并不用以限制本申请,凡在本申请的揭露的技术范围之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (8)

1.一种代码变更类型的筛选方法,其特征在于,所述方法包括:
获取描述标签为指定标签的多个代码变更提交,所述描述标签用于指示对应的代码变更提交的用途;
根据非缺陷性修复变更的特征,按照预设筛除顺序,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据,所述非缺陷性修复变更包括过多变更、回滚变更、非语义代码变更和重构变更;所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更;所述回滚变更是指将代码回滚至之前状态的变更;所述非语义代码变更是指与代码语义修改无关的变更;所述重构变更是指不改变软件功能特性的情况下对代码进行修改的变更;
在从所述多个代码变更提交中筛选出过多变更提交的情况下,将筛选出的所述过多变更提交发送给目标设备,以使所述目标设备显示第一提示信息,所述第一提示信息用于提示用户对所述过多变更提交所包括的代码文件进行拆分后重新提交,所述过多变更提交属于过多变更的数据,所述过多变更是指所包括的代码文件的文件数量与所在代码仓中总代码文件数量之间的比值大于预设阈值的变更。
2.如权利要求1所述的方法,其特征在于,所述根据非缺陷性修复变更的特征,按照预设筛除顺序,从所述多个代码变更提交中筛除属于所述非缺陷性修复变更的数据,包括:
根据所述过多变更的特征,从所述多个代码变更提交中筛除属于所述过多变更的数据;
根据所述回滚变更的特征,从第一变更集合中筛除属于所述回滚变更的数据,所述第一变更集合为所述多个代码变更提交中去除类型为所述过多变更的数据后剩余的代码变更提交构成的集合;
根据所述非语义代码变更的特征,从第二变更集合中筛除属于所述非语义代码变更的数据,所述第二变更集合为所述第一变更集合中去除类型为所述回滚变更的数据后剩余的代码变更提交所构成的集合;
根据所述重构变更的特征,从第三变更集合中筛除属于所述重构变更的数据,所述第三变更集合为所述第二变更集合中去除类型为所述非语义代码变更的数据后剩余的代码变更提交所构成的集合。
3.如权利要求2所述的方法,其特征在于,所述根据所述过多变更的特征,从所述多个代码变更提交中筛除属于所述过多变更的数据,包括:
依次遍历所述多个代码变更提交中的每个代码变更提交;
每当遍历到一个代码变更提交时,若当前遍历到的代码变更提交中包括的代码文件的文件数量与所述总代码文件数量之间的比值大于所述预设阈值,则确定当前遍历到的代码变更提交为属于所述过多变更的数据;
从所述多个代码变更提交中删除所确定的代码变更提交。
4.如权利要求2所述的方法,其特征在于,所述根据所述回滚变更的特征,从第一变更集合中筛除属于所述回滚变更的数据,包括:
读取所述第一变更集合中的每个代码变更提交的日志信息;
将所述第一变更集合中日志信息包含预设回滚关键字符的代码变更提交确定为属于所述回滚变更的数据;
对于所述第一变更集合中日志信息不包括所述预设回滚关键字符的待筛除的代码变更提交,将所述待筛除的代码变更提交中的每个代码文件分别与所述每个代码文件对应的至少一个历史代码文件进行对比;
在对比过程中,对于所述待筛除的代码变更提交中的任意一个代码文件,若所述任意一个代码文件对应的至少一个历史代码文件中存在与所述任意一个代码文件相同的历史代码文件,则确定所述任意一个代码文件为属于所述回滚变更的数据;
从所述第一变更集合中删除所确定的属于所述回滚变更的数据。
5.如权利要求2所述的方法,其特征在于,所述根据所述非语义代码变更的特征,从第二变更集合中筛除属于所述非语义代码变更的数据,包括:
过滤所述第二变更集合中每个代码变更提交包括的每个代码文件内的代码注释;
将过滤后的每个代码文件中所有字符变换为第一符号流;
去除变换后的每个代码文件对应的第一符号流中的空白符和换行符,得到所述每个代码文件对应的第二符号流;
将所述每个代码文件对应的第二符号流与所述每个代码文件对应的历史代码文件的符号流进行对比;
在对比过程中,对于所述每个代码文件中的任意一个代码文件,若任意一个代码文件对应的第二符号流与所述任意一个代码文件对应的历史代码文件的符号流相同,则确定所述任意一个代码文件为属于所述非语义代码变更的数据;
从所述第二变更集合中删除所确定属于所述非语义代码变更的代码文件。
6.如权利要求2所述的方法,其特征在于,所述根据所述重构变更的特征,从第三变更集合中筛除属于所述重构变更的数据,包括:
依次遍历所述第三变更集合中的每个代码变更提交;
每遍历到一个代码变更提交时,若当前遍历到的代码变更提交中存在包括预设重构字段的代码文件,则将包括所述预设重构字段的代码文件确定为属于所述重构变更的数据;
从所述第三变更集合中删除属于所述重构变更的代码文件。
7.一种电子设备,其特征在于,所述电子设备的结构中包括处理器和存储器;
所述存储器用于存储支持所述电子设备执行如权利要求1-6任意一项所述的方法的程序。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行如权利要求1-6任意一项所述的方法。
CN202310625274.9A 2023-05-30 2023-05-30 代码变更类型的筛选方法、电子设备及可读存储介质 Active CN116339818B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310625274.9A CN116339818B (zh) 2023-05-30 2023-05-30 代码变更类型的筛选方法、电子设备及可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310625274.9A CN116339818B (zh) 2023-05-30 2023-05-30 代码变更类型的筛选方法、电子设备及可读存储介质

Publications (2)

Publication Number Publication Date
CN116339818A CN116339818A (zh) 2023-06-27
CN116339818B true CN116339818B (zh) 2023-10-20

Family

ID=86880797

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310625274.9A Active CN116339818B (zh) 2023-05-30 2023-05-30 代码变更类型的筛选方法、电子设备及可读存储介质

Country Status (1)

Country Link
CN (1) CN116339818B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117390727B (zh) * 2023-12-11 2024-02-23 壹仟零壹艺数字科技(合肥)有限公司 一种基于Git系统的CAD图纸数据处理方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109710510A (zh) * 2018-08-20 2019-05-03 中国平安人寿保险股份有限公司 代码提交方法、装置、设备及可读存储介质
CN111913874A (zh) * 2020-06-22 2020-11-10 西安交通大学 一种基于语法结构变更分析的软件缺陷溯源方法
CN112148595A (zh) * 2020-09-03 2020-12-29 北京科技大学 一种去除重复变更的软件变更级缺陷预测方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9729569B2 (en) * 2015-04-21 2017-08-08 International Business Machines Corporation Solution-centric reporting of security warnings

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109710510A (zh) * 2018-08-20 2019-05-03 中国平安人寿保险股份有限公司 代码提交方法、装置、设备及可读存储介质
CN111913874A (zh) * 2020-06-22 2020-11-10 西安交通大学 一种基于语法结构变更分析的软件缺陷溯源方法
CN112148595A (zh) * 2020-09-03 2020-12-29 北京科技大学 一种去除重复变更的软件变更级缺陷预测方法

Also Published As

Publication number Publication date
CN116339818A (zh) 2023-06-27

Similar Documents

Publication Publication Date Title
US20180329690A1 (en) Converting visual diagrams into code
CN111190825A (zh) 自动测试方法、系统及机器人
CN109597621B (zh) 封装Dagger的方法、装置、终端设备及存储介质
CN106648569B (zh) 目标序列化实现方法和装置
CN116339818B (zh) 代码变更类型的筛选方法、电子设备及可读存储介质
US20150089415A1 (en) Method of processing big data, apparatus performing the same and storage media storing the same
CN103226510B (zh) 解析vmcore文件的方法和装置
EP2951680B1 (en) Acquiring identification of an application lifecycle management entity associated with similar code
CN113296786A (zh) 数据处理方法、装置、电子设备及存储介质
US10540415B2 (en) Apparatus and method for managing history information in an electronic device
CN106776342B (zh) 一种对移动应用的内存对象进行分析的方法和装置
CN106201859A (zh) 一种回归测试方法及系统
CN110716804A (zh) 无用资源的自动删除方法、装置、存储介质及电子设备
CN114816772B (zh) 基于兼容层运行的应用的排错方法、排错系统及计算设备
CN111858339A (zh) 内存分析方法、设备和系统以及计算设备、计算机可读存储介质
CN109460234B (zh) 应用程序瘦身方法、装置、终端及存储介质
CN113961534B (zh) 生成日志文件的方法和电子设备
CN113094286B (zh) 页面测试方法和装置、存储介质和电子设备
CN112162954B (zh) 用户操作日志生成、路径的定位方法、装置、设备及介质
CN114647411A (zh) 编程界面加载方法、装置、电子设备及存储介质
CN114706633A (zh) 预加载方法、电子设备及存储介质
CN114077575A (zh) 用于内存快照文件的格式转换方法、设备和系统
CN114510334A (zh) 类实例的调用方法、装置、电子设备及自动驾驶车辆
CN114595449A (zh) 一种安全扫描方法及装置
CN116701320B (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
GR01 Patent grant
GR01 Patent grant