CN116830081A - 信息处理装置、信息处理方法、计算机程序和信息处理系统 - Google Patents

信息处理装置、信息处理方法、计算机程序和信息处理系统 Download PDF

Info

Publication number
CN116830081A
CN116830081A CN202180092771.6A CN202180092771A CN116830081A CN 116830081 A CN116830081 A CN 116830081A CN 202180092771 A CN202180092771 A CN 202180092771A CN 116830081 A CN116830081 A CN 116830081A
Authority
CN
China
Prior art keywords
code
test
repository
commit
information processing
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
CN202180092771.6A
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.)
Sony Group Corp
Original Assignee
Sony Group Corp
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 Sony Group Corp filed Critical Sony Group Corp
Publication of CN116830081A publication Critical patent/CN116830081A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Artificial Intelligence (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • Medical Informatics (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Stored Programmes (AREA)

Abstract

提供了执行与处于中间状态的软件的代码分析相关的处理的信息处理装置。该信息处理装置设置有:差异信息获取部,其获取关于存储在第一存储库中的代码与存储在第二存储库中的和所述代码对应的代码之间的差异信息;以及代码分析部,其基于差异信息根据存储在第二存储库中的代码再现存储在第一存储库中的代码,并且对再现的代码执行代码分析。该信息处理装置将代码分析部的分析结果报告给代码的开发者。

Description

信息处理装置、信息处理方法、计算机程序和信息处理系统
技术领域
本文献(在下文中称为“本公开内容”)中公开的技术涉及执行关于软件代码分析的处理的信息处理装置、信息处理方法、计算机程序和信息处理系统。
背景技术
近来,随着ICT(信息和通信技术)的发展,对软件的需求越来越多,每天都有大量的软件被开发。应该注意的是,本文献中提到的软件和计算机程序几乎是同义的。除非另有说明,否则假设软件和计算机程序是由开发者开发的,即以源代码形式存在。
通常对所开发的软件执行代码分析。执行代码分析是为了分析程序控制流和结构、类继承性以及函数与变量之间的关系,并且验证功能脆弱性(例如,参考专利文献1)。代码分析方法大致可以分为两类,即用软件开发者使用的本地PC(个人计算机)执行代码分析的方法以及在云环境中执行代码分析的方法。
每当在本地环境中进行提交(更新经编辑或者更新的文件的内容)时,用本地PC执行代码分析的前一种方法能够在短时间段内执行代码分析,并且在早期阶段向开发者报告代码分析的结果。近来,本地PC提供了与云环境提供的分析功能类似的分析功能,但存在诸如许多功能限制和计算资源有限的问题。同时,在云环境中执行代码分析的后一种方法能够通过有效利用丰富的计算资源来执行例如并行处理,从而提高计算速度。
例如,CircleCI不仅提供了在云中执行代码分析的服务,而且还提供了用本地PC执行代码分析的工具。此外,GitHub公司提供了在云中执行CI和代码分析的“GitHubActions”服务。此外,第三方开发者还提供了名为“Act”的工具,该工具用于在本地环境中执行“GitHub Actions”。
[引用列表]
[专利文献]
[专利文献1]
日本专利特许公开第2019-168753号。
[非专利文献]
[非专利文献1]
Mateusz Machalica、Alex Samylkin、Meredith Porth、Satish Chandra的“Predictive Test Selection”。
[非专利文献2]
Claire Leong、Abhayendra Singh、Mike Papadakis、Yves Le Traon、John Micco的“Assessing Transition-based Test Selection Algorithms at Google”。
发明内容
[技术问题]
本公开内容的目的是提供执行关于在上传到云环境之前处于中间状态的软件的代码分析的处理的信息处理装置、信息处理方法、计算机程序和信息处理系统。
[问题的解决方案]
为了解决上述问题,根据本公开内容的第一方面,提供了一种信息处理装置,该信息处理装置包括差异信息获取部和代码分析部。差异信息获取部获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在第一存储库中的代码对应的代码之间的差异信息。代码分析部参考参考差异信息根据存储在第二存储库中的代码再现存储在第一存储库中的代码,并且对再现的代码执行代码分析。
差异信息获取部参考尚未推送到第二存储库的提交列表来获取差异信息。更具体地,在代码历史中存在分支的情况下,差异信息获取部参考从分支再现存储在第一存储库中的最新代码所需的提交列表来获取差异信息。
随后,代码分析部参考关于包括在提交列表中的各个提交的信息再现存储在第一存储库中的最新代码,并且对再现的最新代码执行代码分析。
此外,代码分析部通过使用从关于代码定义的多个测试代码中选择的测试代码来进行测试。在进行测试代码选择时,代码分析部使用机器学习模型,该机器学习模型已经学习了从代码修改得到的更改文件的历史和基于测试代码的测试的历史,并且另外采用基于规则的选择。
根据本公开内容的第二方面,提供了信息处理方法,该信息处理方法包括差异信息获取步骤和代码分析步骤。差异信息获取步骤获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在第一存储库中的代码对应的代码之间的差异信息。代码分析步骤参考差异信息根据存储在第二存储库中的代码再现存储在第一存储库中的代码,并且对再现的代码执行代码分析
根据本公开内容的第三方面,提供了以计算机可读格式编写的计算机程序,该计算机程序用于使计算机充当差异信息获取部和代码分析部。差异信息获取部获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在第一存储库中的代码对应的代码之间的差异信息。代码分析参考差异信息根据存储在第二存储库中的代码再现存储在第一存储库中的代码,并且对再现的代码执行代码分析。
根据本公开内容的第三方面的计算机程序是通过定义以计算机可读格式编写的用于在计算机上实现预定处理的计算机程序而获得的。即,当根据本公开内容的第三方面的计算机程序被安装在计算机上时,在计算机上执行协同操作,以提供与由根据本公开内容的第一方面的信息处理装置提供的操作优点类似的操作优点。
此外,根据本公开内容的第四方面,提供了包括提交信息获取装置和代码分析装置的信息处理系统。提交信息获取装置获取关于提交的提交信息,所述提交信息表示在本地环境中开发的最新代码与推送到远程存储库的和最新代码对应的代码之间的差异。代码分析装置参考由提交信息获取装置获取的提交信息根据推送到远程存储库的代码再现最新代码,并且对再现的代码执行代码分析。
然而,本文献中使用的术语“系统”表示多个装置(或者实现特定功能的功能模块)的逻辑聚合,并且无论各个装置和功能模块是否在单个壳体内都适用。
[本发明的有利效果]
本公开内容提供了基于单个提交来执行关于软件的代码分析的处理的信息处理装置、信息处理方法、计算机程序和信息处理系统。
应该注意的是,本文献中描述的优点只是说明性的而不是限制性的。本公开内容提供的优点不限于本文献中描述的优点。此外,在某些情况下,本公开内容还可以另外提供除本文献中描述的优点之外的其他优点。
本公开内容的另外的目标、特征和优点将从以下基于后面描述的实施方式和附图的更详细描述中变得明显。
附图说明
[图1]图1是示出要在云环境中提供代码分析服务的软件的开发环境100的图。
[图2]图2是示出在软件开发环境100中执行的过程的图,该过程用于对处于开发的中间状态的源代码执行代码分析。
[图3]图3是示出对处于开发的中间状态的源代码执行代码分析的过程的流程图。
[图4]图4是示出用于进行代码测试的功能配置的示例的图。
[图5]图5是示出根据机器学习模型进行测试选择的示例的图。
[图6]图6是示出测试选择部403的内部配置的示例的图。
[图7]图7是示出应用与条件匹配的规则的测试选择部403的内部配置的示例的图。
[图8]图8是示出基于失败概率进行测试目标文件选择的具体示例的图。
[图9]图9是示出测试选择部403在生成机器学习模型的学习阶段中的功能配置的示例的图。
[图10]图10是示出测试选择部403在预测阶段中进行测试选择的功能配置的示例的图。
[图11]图11是示出在图10中描绘的测试选择部403中应用规则来进行测试选择的应用示例的图。
[图12]图12是示出其中在图10中描述的测试选择部403中应用规则进行测试选择的另一应用示例的图。
[图13]图13是示出包括关于规则的定义的描述的设置文件的示例的图。
[图14]图14是示出包括分支的软件开发项目的示例流程的图。
具体实施方式
现在将参考附图,按以下顺序描述本公开内容。
A.概述
B.中间状态下的代码分析
C.测试代码选择
D.关于测试代码选择的具体示例
A.概述
在软件开发中,优选的是在丰富的计算资源和功能可用的云环境中执行代码分析。图1示意性地示出了要在云环境中提供代码分析服务的软件开发环境100。软件开发环境100可以大致分为两种类型,即本地环境110和云环境120。应该注意的是,为了简单起见,图1描绘了仅一个本地环境110和仅一个云环境120。然而,在现实中,假设一个云环境120向许多未描绘的本地环境提供代码分析服务。
本地环境110对应于软件开发现场,并且包括本地PC 111和本地存储库112。本地PC 111由开发者使用以执行软件开发任务,例如源代码创建和修改。本地存储库112是存储源代码的地方。
同时,云环境120包括远程存储库121和代码分析服务部122。远程存储库121是用于在云中存储源代码的地方。代码分析服务部122对远程存储库中的源代码执行代码分析。代码分析包括例如对程序控制流和结构、类继承、以及函数与变量之间的关系的分析,以及对功能脆弱性的验证。然而,假设由代码分析服务部122提供的分析功能不限于上述功能。此外,还假设可以向代码添加功能并且改变代码的功能。
开发者使用本地PC 111新创建或者编辑和更新源代码(例如,向源代码添加功能或者修复源代码中的错误),并且进行与频繁的源代码更新相关联的版本更改。将在本地PC111上编辑和更新的源代码文件存储在本地存储库112中被称为“提交”。此外,为了将源代码从本地环境110上传到远程存储库121而执行的操作也被称为“推送”。反之,为了从远程存储库121下载源代码而执行的操作也被称为“拉取”。
此外,为了维护当前在软件开发环境100中开发的软件的完整性,在本地环境110中设置版本控制系统(VCS)113。每当向本地存储库112进行提交时,版本控制系统113发布提交ID,并且使提交ID与关于提交内容的说明(例如功能添加、错误修复和版本维护)相关联。在源代码被提交到本地存储库112的情况下,源代码以及关于与提交ID相关联的提交的历史信息二者被记录。此外,在源代码被上传到远程存储库121的情况下,与提交ID相关联的源代码被记录在远程存储库121中。
此外,引入提交分支功能以同时开发软件的多个版本。在使用提交分支功能的情况下,假设提交的历史具有树状结构,并且本地存储库112以树状结构形式管理提交的历史。
图14示出了包括分支的软件开发项目的示例流程。图14的横轴表示时间轴。假设时间从左向右流动。软件开发项目的主体是主分支1401。在主分支1401上,要开发的软件(源代码)的版本被重复地改变。每当改变版本时,向本地存储库112进行提交,并且向远程存储库121进行上传(推送)。此外,预计在该版本内进行一次或更多次提交。然而,每次提交后并不进行推送。例如,为了对源代码进行功能添加和错误修复,主分支1401被分离成其他分支1402和1403。由此产生的分支的内容不影响其他分支,并且相关工作可以由多人同时执行。此外,只要每个分支的历史被存储,遇到的问题(如失败)就可以容易地被隔离和处理。例如,包括提交信息(开发者、消息、补丁等)的开发历史被记录在每个存储库中。应当注意的是,尽管在图14中未描绘,但分支1402和1403在将来可以被整合到主分支1401中。
现在,将再次详细讨论在云环境120中执行代码分析的情况下要解决的问题。
在要在云环境120中执行代码分析的情况下,在要分析的源代码的文件已经上传到远程存储库121的前提下在云环境120中执行代码分析。在这种情况下,要上传到远程存储库121的源代码需要是包括测试代码的最终源代码,并且不能对在正在开发的并且处于一般所说的“中间状态”的源代码执行代码分析。也就是说,不能在云环境120中对仅提交到本地存储库112的处于“中间状态”的源代码执行代码分析。因此,不能在很短的时间段内执行代码分析。因此,代码分析的结果不能在早期阶段报告给开发者。
另一方面,对处于开发的中间状态的源代码执行代码分析是在本地环境110中执行代码分析。因此,存在可用计算资源和功能有限的问题。
此外,在对处于开发的中间状态的源代码执行代码分析的情况下,需要根据源代码的经修改的部分正确有效地选择需要的测试代码,并且进行充分的测试。
B.中间状态下的代码分析
图2示出了在软件开发环境100中执行以对仍未上传到远程存储库121并且处于开发的中间状态的源代码执行代码分析的过程。下面参考如下示例来描述执行代码分析的过程:每当软件的开发者提交源代码时都启动代码分析处理。
软件的开发者对在本地PC 111上编辑和更新的源代码进行提交。响应于此,版本控制系统113发布新的提交ID,并且记录关于与提交ID相关联的提交的内容的描述。随后,使在本地PC 111上编辑和更新的源代码与发布的提交ID相关联,并且将源代码存储在本地存储库112中。
版本控制系统113在发布新的提交ID时生成提交事件。响应于生成的提交事件,提交信息获取部114验证本地环境110中的最新提交ID,即要分析的源代码的提交ID。
接下来,提交信息获取部114检查存储在远程存储库121中的源代码,并且验证历史上与要分析的源代码相关联的最新提交ID。
接下来,提交信息获取部114参考关于版本控制系统113中管理的提交的历史信息,以找到本地环境110中的最新提交ID与远程环境120中的最新提交ID之间的分支(分叉点),并且根据找到的分支的提交ID创建再现本地环境110中的最新提交ID所需的提交列表。该提交列表等同于仍未推送到远程存储库121的提交列表。
随后,对于创建的提交列表中的各个提交,提交信息获取部114从本地环境110(更具体地,从本地存储库112等)获取包括例如关于开发者的信息、与提交相关的消息以及对提交信息打补丁,并且将所获取的提交信息发送到云环境120中的代码分析服务部122。
响应于此,在从远程存储库121获取(下载)与要分析的源代码对应的最新代码时,代码分析服务部122参考从提交信息获取部114接收的提交信息,再现要分析的处于中间状态的最新源代码。
随后,代码分析服务部122对再现的源代码执行代码分析处理,并且将关于代码分析处理的结果的分析结果报告发送到本地PC 111。
因此,遵循图2中描述的过程使得可以对仅被提交到本地存储库112的处于“中间状态”的源代码执行代码分析,并且在早期阶段将代码分析的结果报告给开发者。
应该注意的是,图1和图2中描绘的版本控制系统113例如被配置成Git或者记录并跟踪源代码变化的历史的其他分散版本控制系统。
此外,提交信息获取部114包括例如Shell Script或者在由版本控制系统113创建提交的阶段被调用的其他脚本,并且将源代码再现所需的信息发送到云(代码分析服务部122)。
此外,代码分析服务部122提供例如用于执行代码分析的实际服务如Rocro的Inspecode。在图2中描绘的软件开发环境100中,代码分析服务部122再现等同于本地环境中的代码。
此外,远程存储库121对应于例如设置在云环境120中的git服务器或者具有VCS功能的网络服务(GitHub)。
图3是示出在软件开发环境100中执行的过程的流程图,该过程用于对处于开发的中间状态的源代码执行代码分析。
当对在本地PC 111上编辑和更新的源代码进行提交时(步骤S301中的“是”),版本控制系统113发布新的提交ID。此外,版本控制系统113记录关于与所发布的提交ID相关联的提交的内容的描述。
响应于在发布新的提交ID时产生的提交事件,提交信息获取部114在版本控制系统113中验证本地环境110中的最新提交ID,即要分析的源代码的提交ID(步骤S302)。
接下来,提交信息获取部114检查存储在远程存储库121中的源代码,并且验证历史上与要分析的源代码相关联的最新提交ID(步骤S303)。
接下来,提交信息获取部114参考关于本地存储库112或版本控制系统113中管理的代码的历史信息,以找到本地环境110中的最新提交ID与远程环境120中的最新提交ID之间的分支(分叉点)(步骤S304)。
接下来,提交信息获取部114根据找到的分支的提交ID创建再现本地环境110中的最新提交ID所需的提交列表,即仍未推送到远程存储库121的提交列表(步骤S305)。
随后,提交信息获取部114获取关于所创建的提交列表中的各个提交的提交信息,并且将获取的提交信息发送给云环境120中的代码分析服务部122(步骤S306)。
参考从提交信息获取部114接收到的提交信息,代码分析服务部122在本地环境110中再现最新提交的内容,即,处于中间状态的最新源代码(步骤S307)。
接下来,代码分析服务部122对再现的源代码执行代码分析处理(步骤S308)。随后,代码分析服务部122将关于再现的最新源代码的分析结果报告发送到本地PC 111(步骤S309),并且终止本处理。
如上所述,本地环境110能够参考关于例如由版本控制系统113管理的提交的历史信息,识别关于本地环境110中的最新提交与远程环境120中的最新提交之间的差异信息,并且将识别的差异信息提供给远程环境120。同时,允许代码分析服务部122参考从本地环境110提供的差异信息实现源代码再现,使得远程环境120可以对仍未上传到远程存储库121并且处于中间状态的源代码实现代码分析服务。
C.测试代码选择
采用在上述B项下所述的代码分析方法使得可以在源代码被上传到远程存储库121之前,对处于中间状态即开发中的源代码进行测试。因此,进一步要求减少频繁的测试执行所需的时间长度。
如果对于每个代码分析(例如,对于基于单个提交执行的每个代码分析),代码分析服务部122执行关于要分析的源代码的预定义的所有测试代码,则测试执行所需的时间长度增加。因此,优选的是自适应地选择一些测试代码进行测试执行,而不是针对每个代码分析执行所有的测试代码。
图4示意性地示出了用于在代码分析服务部122中进行代码测试的功能配置的示例。下面将描述各个功能块。
代码获取部401获取针对代码分析(或测试)的源代码。这里,假设源代码是根据图2中描述的处理流程在代码分析服务部122中再现的最新源代码。
测试信息获取部402获取关于所有测试代码的信息(例如,测试目标文件名),这些测试代码是关于针对测试的源代码预定义的。例如,将要应用于源代码的测试代码的文件名写在源代码中,并且测试信息获取部402从源代码内获取关于测试代码的信息。当然,关于针对每个源代码定义的测试代码的信息可以被存储在源代码的位置以外的地方。
测试选择部403选择此次应该用于测试的测试代码。该测试代码选择是从由测试信息获取部402获取的所有测试代码中进行的,并且是关于源代码预定义的。此外,测试执行部404通过使用由测试选择部404选择的测试代码来测试源代码。由测试执行部404获得的测试结果例如连同由代码分析服务部122获得的其他代码分析结果一起报告给开发者。
如上所述,优选的是测试选择部403自适应地选择一些测试代码进行测试执行,而不是每次都允许执行所有测试代码。
例如,提出了通过使用机器学习模型选择测试代码的方法(参考非专利文献1和非专利文献2)。
在非专利文献1中提出如下方法:通过从经修改的源代码(更改文件)、测试代码以及关于经修改的源代码(更改文件)和测试代码二者的信息中提取特征量来创建机器学习模型,并且通过使用所创建的机器学习模型来选择相对于更改文件而言具有高失败概率的测试代码。根据非专利文献1,源代码管理是以这样的方式进行:只有在测试中成功的源代码才会被登记到存储库中,而在测试中失败的修改不会作为源代码被引入。具体地,非专利文献1可能假设在测试中失败的代码不被包括在存储库中,并且测试执行结果被单独存储以生成用于机器学习的数据集。因此,确认由于因提交而导致的文件更改会导致测试失败(在测试中失败的源代码已经存在于储存库中的情况下,测试失败有可能是由于旧提交而非因提交而导致的文件更改造成的)。换句话说,根据非专利文献1,先前失败的测试代码可能不会针对更改文件来执行。此外,非专利文献1指出,所有的测试都是定期进行的,而不做测试选择。
同时,非专利文献2指出,如非专利文献1的情况一样,通过使用机器学习模型对源代码进行测试代码选择。非专利文献2中描述的方法对一定数量的文件更改同时进行源代码测试。这就造成了测试结果未知的状态。非专利文献2指出,在测试结果转换的每个更改(例如从成功到失败、从成功到未实现以及从未实现到失败)之后,通过创建模型来评估测试选择。
一种可能的方法是,通过使用已更改文件和测试历史(指示测试代码的测试是成功还是失败)作为学习数据,创建机器学习模型,以从由开发者修改的更改文件中选择合适的测试代码。在上述情况下,如果源代码(文件)在测试失败后被修改,则如上所述创建的机器学习模型不能用于测试选择。因此,不仅需要通过使用开发者在测试失败前的情况下修改的更改文件和测试历史作为学习数据来创建机器学习模型,而且还需要通过使用开发者在测试成功前的情况下修改的更改文件和测试历史作为学习数据来创建另外的机器学习模型。因此,需要如上所述地创建两个不同的机器学习模型(参见图5)。创建这样两个不同的机器学习模型是很麻烦的。
鉴于上述情况,本公开内容提出了通过将机器学习模型的预测与基于规则的选择进行结合的简化测试选择方法。
图6示出了测试选择部403的内部配置的示例,该测试选择部403在图4的功能框图中被描绘,并且根据本公开内容进行配置。
机器学习模型601已经预先学习了从源代码修改得到的更改文件和先前测试历史。在学习了更改文件和先前测试历史的情况下,机器学习模型601预测适合于从源代码修改得到的更改文件的一个或更多个测试代码。
评估部602根据预定的规则评估由机器学习模型601预测的一个或更多个测试代码,并且输出要对更改文件执行的一个或更多个测试代码作为最终测试选择结果。
如图6所示,测试选择部403被配置成使得不仅基于机器学习模型601的预测进行测试选择,而且可以进行基于规则的测试选择。因此,例如,通过在评估部602中应用用于优先进行先前失败测试的规则,可以实现用于优先选择先前失败测试并且对在先前测试中失败的更改文件进行所选择的先前失败的测试的操作。
根据图6中描绘的配置,一个机器学习模型将足以用于测试选择。这利于管理和校准(模型再学习)。
可以在评估部602中附加地应用下面描述的规则(1)至(3)。
(1)基于分支名称的规则
例如,关于主分支的存储库,准备了用于选择所有测试而不是进行测试选择的规则。当应用该规则时,不必如非专利文献1中描述的那样定期进行所有测试,并且可以实现仅对必要的分支进行所有测试的操作。
(2)用于调整关于特定分支名称的持续集成(CI)的测试选择率的规则
持续集成是软件开发方法,用于通过使软件开发过程自动化来自动执行构建和测试的过程,从而允许开发者提交源代码并且将提交的源代码合并到共享存储库中。当应用该规则时,可以避免测试选择中的假否定。
(3)给予特定测试优先权的规则
通过向机器学习模型601的预测结果相加偏移量,可以给特定测试以优先权。测试是否为特定测试可以参考例如测试目标文件名的字符串来确定。
在准备了多个规则的情况下,可以针对每个规则预设条件,并且可以通过应用与条件匹配的规则来进行测试选择。
图7示出了测试选择部403的功能配置的示例,测试选择部403被配置成根据与条件匹配的规则进行测试选择。然而,与图6中描绘的部件元件相同的部件元件由与图6中相同的附图标记表示。
在测试代码选择的情况下要应用的多个规则被累积在规则累积部702中。规则应用的条件是针对每个规则设置的。当要进行测试选择时,规则读出部701从规则累积部702读出与条件匹配的规则。
随后,评估部602根据由规则读出部701读出的规则,对由机器学习模型601预测的一个或更多个测试代码进行评估,并且输出针对目前更改文件要执行的一个或更多个测试代码作为最终的测试选择结果。由规则定义的操作是例如调整预测的偏好或者调整测试选择率。评估部602参考与条件匹配的规则选择测试选择率,并且根据测试失败预测值选择测试。
需要注意的是,在规则读出部701无法从规则累积部702读出与条件匹配的规则的情况下(即,在不存在与条件匹配的现有规则的情况下),评估部602不参考规则对由机器学习模型601预测的测试代码进行评估,而是按原样使用机器学习模型601的预测结果,并且输出该预测结果作为最终测试选择结果。
D.关于测试代码选择的具体示例
这里,在项目D下,描述了关于测试代码选择的具体示例。
D-1.测试选择方法
可取的是在使用更改文件(源代码)的情况下,只选择性地进行被识别为具有高失败概率的测试,而不浪费地进行被识别为具有高成功概率的测试。图8示出了基于失败概率进行测试选择的示例。图8的上部指示使用预定算法执行计算以确定每个测试代码(测试目标文件)中的分析目标文件(源代码)的失败概率的结果。同时,图8的下部指示因此从定义的测试目标文件中选择包括被确定为具有高失败概率的两个测试目标文件的子集,即aaa/eee_test.go和aaa/fff/ggg_test.go。
D-2.学习阶段
在机器学习模型601的学习阶段中,根据从通过修改源代码和关于测试目标文件的元数据而获得的更改文件中提取的特征量以及根据测试目标历史(测试结果)学习机器学习模型。通过使用以上述方式学习的机器学习模型,可以预测关于每个测试目标文件的测试失败概率。
D-3.特征量生成
作为用于机器学习模型601的学习的特征量,可以列举以下四个特征量(1)至(4)。
(1)在过去14天内应用于更改文件的更改数目
(2)过去14天内测试目标文件失败的概率
(3)更改文件与测试目标文件之间的文件路径匹配程度
(4)通过使关于测试目标文件的特征量的ID和值的列表以及测试目标文件的测试结果作为学习数据被学习来生成模型。
D-4.特征量生成
可以从储存库中获得两个提交之间关于在过去14天内应用于更改文件的更改数目的文件列表,如下所示。
[数学式1]
$git diff--numstat--name-only commit1 commit2
server/frontend/reports/files.go
server/frontend/reports/utils.go
server/storage/coverage.go
此外,提交创建的日期和时间可以如下所示地获得。
[数学式2]
$git show--format=″%ai″commit1
2017-012-17 01:23:35+0900
此外,可以获得过去14天内关于每个更改文件的提交的数目,如下所示。
[数学式3]
$git log-format=online-before=″提交创建之前14日″-after=″提交创建日期和时间″server/backend/unregister.go|we-|
随后,通过用冒号连接每个特征量的ID和值,创建特征量的列表。
D-5.模型学习
对于每个测试目标文件,如下所示,生成指示单行标签加上LibSVM(支持矢量机的库)格式中的特征量ID和值的列表。要注意的是,LibSVM格式是许多机器学习库中作为学习数据所需的特征矢量的文件格式。
[数学式4]
0 100:16.00 101:117.00 102:254.00 110:35.00 120:8.00 130:8650757.00140:12.00 200:0.00
201:0.00 202:0.00 203:0.00 210:1.00 211:1.00 220:1.00 300:0.00 310:9.00 311:0.22
0 100:16.00 101:117.00 102:254.00 110:35.00 120:8.00 130:8650757.00140:12.00 200:0.00
201:0.00 202:0.00 203:0.00 210:2.00 211:4.00 220:2.00 300:0.00 310:9.00 311:0.22
1 100:16.00 101:117.00 102:254.00 110:35.00 120:8.00 130:8650757.00140:12.00 200:0.08
201:0.02 202:0.01 203:0.01 210:3.00 211:5.00 220:10.00 300:0.00 310:9.00 311:0.27
1 100:16.00 101:117.00 102:254.00 110:35.00 120:8.00 130:8650757.00140:12.00 200:0.08
201:0.02 202:0.01 203:0.01 210:3.00 211:6.00 220:10.00 300:0.00 310:9.00 311:0.27
在上述列表的每个条目中,第一个数字是标签。标签为0指示测试成功,而标签为1指示测试失败。
参考上述学习数据,通过使用提升决策树(boosting decision tree)创建模型。然后用这里创建的模型来预测每个测试目标文件的失败。
D-6.预测阶段
在预测阶段中,根据请求将源代码推送到远程存储库121或者从远程存储库121拉取源代码时更改的文件以及根据测试目标文件创建特征量列表,然后使用上述已学习模型根据特征量列表预测每个测试目标文件的失败。
[数学式5]
100:16.00 101:117.00 102:254.00 110:35.00 120:8.00 130:8650757.00140:12.00 200:0.00
201:0.00 202:0.00 203:0.00 210:1.00 211:1.00 220:1.00 300:0.00 310:9.00 311:0.22
从已学习模型中,针对每个测试目标文件输出0与1之间的失败预测分值。评估部602根据测试选择率或得分阈值选择测试目标文件的子集。
D-7.问题
通过使用已学习机器学习模型601,可以预测测试更改文件的失败概率。然而,在更改文件不是通过修改源代码的导致先前测试失败的部分而获得的情况下,不能通过使用机器学习模型601预测先前失败测试中重复失败的概率。
非专利文献1中描述的技术不会产生上述情况,也就是说,不会应对上述情况。此外,非专利文献2中描述的方法针对每个类型的转换(Transition)创建学习模型。相应地,由于需要针对各个模型收集学习模型,因此造成了重大的麻烦,并且难以实现管理和校准。
同时,本公开内容能够通过应用向机器学习模型601的预测结果相加偏移量的规则,针对先前失败测试设置高概率。
D-8.功能配置
图9示出了测试选择部403在用于生成机器学习模型的学习阶段中的功能配置的示例。
当包括源代码的元数据和先前测试结果(测试历史)的数据集作为学习数据从存储库中被读出时,特征量生成部901根据该数据集生成特征矢量文件。该特征矢量文件为LibSVM格式,并且要被输入到模型生成部902。模型生成部902包括梯度提升框架,通过使用上述数据集进行学习,并且生成机器学习模型903,该机器学习模型903根据源代码的元数据和先前测试结果预测测试失败的概率。
图10示出了测试选择部403用于在预测阶段中进行测试选择的功能配置的示例。在预测阶段中,使用在图9中描绘的学习阶段中生成的机器学习模型。测试选择是在软件的源代码被更改的情况下进行的。
特征量生成部1001根据包括经修改的源代码的元数据和先前测试结果(测试历史)的数据集生成特征矢量文件。上述特征矢量文件为LibSVM格式,并且要被输入到已学习机器学习模型。
预测得分生成部1002通过使用在图9中描绘的学习阶段中生成的机器学习模型903,根据输入的LibSVM格式的特征矢量文件生成经修改的源代码(更改文件)的测试的失败预测得分。
同时,比较部1003通过比较先前测试的状态(成功或失败)、要测试的源代码的分支名称和源代码中描述的测试目标,输出与条件匹配的规则。
操纵部1004也操纵对由预测得分生成部生成的每个测试代码的失败预测得分和测试选择率。此外,参考这种操纵的结果,最终选择部1005最终选择相对于目标源代码要执行的测试代码。
图11示出了其中在图10中描绘的测试选择部403中应用规则来进行测试选择的具体应用示例。这里,假设应用的规则是用于将基于先前测试的状态的偏移量相加到失败预测得分。
特征量生成部1001根据包括经修改的源代码的元数据和先前测试的结果(测试历史)的数据集生成特征矢量文件。该特征矢量文件为LibSVM格式,并且要被输入到学习的机器学习模型中。随后,预测得分生成部1002根据输入的LibSVM格式的特征矢量文件生成更改文件的测试的失败预测得分。在该示例中,在更改文件中的更改与测试无关的情况下,失败预测得分被预测为0.1。
同时,比较部1003将上述规则与先前测试的状态进行比较。在这种情况下,由于先前测试的状态是失败,所以比较部1003输出与条件匹配的规则,并且将0.8相加到测试的失败预测得分。
相应地,操纵部1004应用将0.8相加到先前失败测试的失败预测得分即0.1的规则,因此将测试的失败预测得分设置为0.9。
因此,尽管测试目标与更改文件无关,但是由于测试目标处于在先前测试中失败的状态,因此加上偏移量。因此,由于失败预测得分变为高达0.9,因此最终选择部1005选择测试目标。
图12示出了其中在图10中描绘的测试选择部403中应用规则来进行测试选择的另一应用示例。这里,假设选择所有测试的规则被应用于主分支的存储库。
特征量生成部1001根据包括经修改的源代码的元数据和先前测试结果(测试历史)的数据集生成特征矢量文件。该特征矢量文件为LibSVM格式,并且要被输入到学习的机器学习模型中。随后,预测得分生成部1002根据输入的LibSVM格式的特征矢量文件生成更改文件的测试的失败预测得分。
同时,比较部1003将上述规则与先前测试的状态进行比较。在这种情况下,由于检查了输入的源代码的分支名称并且发现是与条件匹配的主分支,因此比较部1003输出选择所有测试的规则,即把选择率设置为100%。
相应地,操纵部1004在最终选择部1005中设置选择率为100%。因此,最终选择部1005选择所有测试目标,而不考虑由预测得分生成部1002预测的得分的值。
应当注意的是,可以允许用户(例如,源代码开发者或管理员)通过执行UI(用户界面)操作来选择要在测试选择部403中应用的规则。
例如,如图13所示,关于适用于测试选择的规则的定义的描述可以以yami(YAMLAin't Markup Language)格式添加到设置文件中。在图13中描绘的定义的示例中,针对每个规则描述规则名称(name),规则应用条件(condition)和要应用的操作(action)。例如,在代码分析开始时,可以显示列出规则名称的UI画面(未描绘),以提示用户指定要应用于测试选择的规则。
[工业适用性]
上面已经参考具体实施方式详细描述了本公开内容。然而,明显的是,本领域技术人员能够在不脱离本公开内容的精神和范围的情况下修改或改变具体实施方式。
根据本公开内容,可以使用云中提供的代码分析服务例如基于单个提交对处于中间状态的源代码执行代码分析,并且在早期阶段向开发者报告代码分析结果。由于使用了云中提供的代码分析服务,因此可以在代码开发过程的早期阶段进行代码分析,而不受可用的计算资源和功能的限制。显然,可以在本地环境中提供类似的代码分析服务。
换句话说,已经以说明性的方式描述了本公开内容。因此,本文献中的描述不应该以限制性的方式来解释。应考虑所附权利要求书的范围来理解本公开内容的精神。
应该注意的是,本公开内容也可以采用以下配置。
(1)一种信息处理装置,包括:
差异信息获取部,其获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在所述第一存储库中的代码对应的代码之间的差异信息;以及
代码分析部,其参考所述差异信息根据存储在所述第二存储库中的代码再现存储在所述第一存储库中的代码,并且对再现的代码执行代码分析。
(2)根据上述(1)所述的信息处理装置,其中,所述代码分析部的分析结果被报告给所述代码的开发者。
(3)根据上述(1)或(2)所述的信息处理装置,其中,所述差异信息获取部参考尚未推送到所述第二存储库的提交列表来获取所述差异信息。
(4)根据上述(3)所述的信息处理装置,其中,在代码历史中存在分支的情况下,所述差异信息获取部参考从所述分支再现存储在所述第一存储库中的最新代码所需的提交列表来获取所述差异信息。
(5)根据上述(4)所述的信息处理装置,其中,所述代码分析部参考关于包括在所述提交列表中的每个提交的信息再现存储在所述第一存储库中的最新代码,并且对再现的最新代码执行代码分析。
(6)根据上述(1)至(5)中任一项所述的信息处理装置,其中,所述代码分析部通过使用从关于所述代码定义的多个测试代码中选择的测试代码来进行测试。
(7)根据上述(6)所述的信息处理装置,其中,所述代码分析部通过使用已经学习了从代码修改得到的更改文件和基于测试代码的测试的历史的机器学习模型进行测试代码选择。
(8)根据上述(7)所述的信息处理装置,其中,所述代码分析部通过对所述机器学习模型的预测结果应用规则来进行测试代码选择。
(9)根据上述(8)所述的信息处理装置,其中,所述规则包括以下规则中的至少一个:
(a)用于优先进行先前失败测试的规则;
(b)用于根据分支名称进行所有测试的规则;
(c)用于调整针对关于特定分支名称的持续集成的测试选择率的规则;或者
(d)用于优先考虑特定测试的规则。
(10)根据上述(8)或(9)所述的信息处理装置,
其中,针对多个规则中的每一个设置条件,并且
所述代码分析部通过将与所述条件匹配的规则应用于所述机器学习模型的预测结果进行测试代码选择。
(11)一种信息处理方法,包括:
差异信息获取步骤:获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在所述第一存储库中的代码对应的代码之间的差异信息;以及
代码分析步骤:参考所述差异信息根据存储在所述第二存储库中的代码再现存储在所述第一存储库中的代码,并且对再现的代码执行代码分析。
(12)一种以计算机可读格式编写的计算机程序,所述计算机程序用于使计算机充当:
差异信息获取部,其获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在所述第一存储库中的代码对应的代码之间的差异信息;以及
代码分析部,其参考所述差异信息根据存储在所述第二存储库中的代码再现存储在所述第一存储库中的代码,并且对再现的代码执行代码分析。
(13)一种信息处理系统,包括:
提交信息获取装置,其获取关于提交的提交信息,所述提交信息表示在本地环境中开发的最新代码与推送到远程存储库的和所述代码对应的代码之间的差异;以及
代码分析装置,其参考由所述提交信息获取装置获取的提交信息根据推送到所述远程存储库的代码再现所述最新代码,并且对再现的代码执行代码分析。
[附图标记列表]
100:软件开发环境
110:本地环境
111:本地PC
112:本地存储库
113:版本控制系统
114:提交信息获取部
120:云环境
121:远程存储库
123:代码分析服务部
401:代码获取部
402:测试信息获取部
403:测试选择部
404:测试执行部
601:机器学习模型
602:评估部
701:规则读出部
702:规则累积部
901:特征量生成部
902:模型生成部
903:机器学习模型
1001:特征量生成部
1002:预测得分生成部
1003:比较部
1004:操纵部
1005:最终选择部

Claims (13)

1.一种信息处理装置,包括:
差异信息获取部,其获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在所述第一存储库中的代码对应的代码之间的差异信息;以及
代码分析部,其参考所述差异信息根据存储在所述第二存储库中的代码再现存储在所述第一存储库中的代码,并且对再现的代码执行代码分析。
2.根据权利要求1所述的信息处理装置,其中,所述代码分析部的分析结果被报告给所述代码的开发者。
3.根据权利要求1所述的信息处理装置,其中,所述差异信息获取部参考尚未推送到所述第二存储库的提交列表来获取所述差异信息。
4.根据权利要求3所述的信息处理装置,其中,在代码历史中存在分支的情况下,所述差异信息获取部参考从所述分支再现存储在所述第一存储库中的最新代码所需的提交列表来获取所述差异信息。
5.根据权利要求4所述的信息处理装置,其中,所述代码分析部参考关于包括在所述提交列表中的每个提交的信息再现存储在所述第一存储库中的最新代码,并且对再现的最新代码执行代码分析。
6.根据权利要求1所述的信息处理装置,其中,所述代码分析部通过使用从针对所述代码定义的多个测试代码中选择的测试代码来进行测试。
7.根据权利要求6所述的信息处理装置,其中,所述代码分析部通过使用已经学习了从代码修改得到的更改文件和基于测试代码的测试的历史的机器学习模型进行测试代码选择。
8.根据权利要求7所述的信息处理装置,其中,所述代码分析部通过对所述机器学习模型的预测结果应用规则来进行测试代码选择。
9.根据权利要求8所述的信息处理装置,其中,所述规则包括以下规则中的至少一个:
(a)优先进行先前失败测试的规则;
(b)根据分支名称进行所有测试的规则;
(c)针对关于特定分支名称的持续集成调整测试选择率的规则;或者
(d)对特定测试给予优先权的规则。
10.根据权利要求8所述的信息处理装置,
其中,针对多个规则中的每一个设置条件,并且
所述代码分析部通过将与条件匹配的规则应用于所述机器学习模型的预测结果进行测试代码选择。
11.一种信息处理方法,包括:
差异信息获取步骤:获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在所述第一存储库中的代码对应的代码之间的差异信息;以及
代码分析步骤:参考所述差异信息根据存储在所述第二存储库中的代码再现存储在所述第一存储库中的代码,并且对再现的代码执行代码分析。
12.一种以计算机可读格式编写的计算机程序,所述计算机程序用于使计算机充当:
差异信息获取部,其获取关于存储在第一存储库中的代码与存储在第二存储库中的和存储在所述第一存储库中的代码对应的代码之间的差异信息;以及
代码分析部,其参考所述差异信息根据存储在所述第二存储库中的代码再现存储在所述第一存储库中的代码,并且对再现的代码执行代码分析。
13.一种信息处理系统,包括:
提交信息获取装置,其获取关于提交的提交信息,所述提交信息表示在本地环境中开发的最新代码与推送到远程存储库的和所述代码对应的代码之间的差异;以及
代码分析装置,其参考由所述提交信息获取装置获取的提交信息根据推送到所述远程存储库的代码再现所述最新代码,并且对再现的代码执行代码分析。
CN202180092771.6A 2021-02-24 2021-12-28 信息处理装置、信息处理方法、计算机程序和信息处理系统 Pending CN116830081A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2021-027165 2021-02-24
JP2021027165 2021-02-24
PCT/JP2021/048935 WO2022181052A1 (ja) 2021-02-24 2021-12-28 情報処理装置及び情報処理方法、コンピュータプログラム、並びに情報処理システム

Publications (1)

Publication Number Publication Date
CN116830081A true CN116830081A (zh) 2023-09-29

Family

ID=83048824

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180092771.6A Pending CN116830081A (zh) 2021-02-24 2021-12-28 信息处理装置、信息处理方法、计算机程序和信息处理系统

Country Status (5)

Country Link
US (1) US20240232061A9 (zh)
EP (1) EP4300289A4 (zh)
JP (1) JPWO2022181052A1 (zh)
CN (1) CN116830081A (zh)
WO (1) WO2022181052A1 (zh)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7068752B2 (ja) 2018-03-22 2022-05-17 三菱電機株式会社 ソースコード解析装置およびソースコード解析プログラム
US10705832B2 (en) * 2018-09-28 2020-07-07 Atlassian Pty Ltd Efficient storage and analysis of source code modification history data

Also Published As

Publication number Publication date
EP4300289A1 (en) 2024-01-03
US20240134783A1 (en) 2024-04-25
WO2022181052A1 (ja) 2022-09-01
US20240232061A9 (en) 2024-07-11
JPWO2022181052A1 (zh) 2022-09-01
EP4300289A4 (en) 2024-07-31

Similar Documents

Publication Publication Date Title
US11733975B1 (en) System and method for migrating legacy software to a system common architecture
US20190108001A1 (en) Correction of code errors using machine learning
US11221942B2 (en) System and methods for amalgamation of artificial intelligence (AI) and machine learning (ML) in test creation, execution, and prediction
US10572249B2 (en) Software kit release management
US20230137131A1 (en) Computing system for training, deploying, executing, and updating machine learning models
EP2228726B1 (en) A method and system for task modeling of mobile phone applications
CN105144088A (zh) 元数据与源代码的关联以及基于其的应用和服务
WO2019056720A1 (zh) 自动化测试用例管理方法、装置、设备及存储介质
CN115658452A (zh) 埋点校验方法、埋点校验装置、可读存储介质、电子设备
CN117931620A (zh) 一种降低智能终端系统测试技术门槛的自动化测试方法
CN111966382A (zh) 机器学习模型的在线部署方法、装置及相关设备
CN117290236A (zh) 软件测试方法、装置、计算机设备及计算机可读存储介质
CN114911492A (zh) 推理服务部署方法、装置、设备以及存储介质
CN114647416A (zh) 基于注解的业务流实现方法及装置、存储介质、电子设备
CN117971267A (zh) 一种基于分层架构的程序无线升级的方法
CN116088846A (zh) 一种持续集成代码格式的处理方法、相关装置及设备
CN116830081A (zh) 信息处理装置、信息处理方法、计算机程序和信息处理系统
US11775291B2 (en) Automated updates to code deployment pipelines
CN115587048A (zh) 回归测试方法、终端设备及计算机可读存储介质
CN115599683A (zh) 自动化测试方法、装置、设备及存储介质
CN117908847B (zh) 一种可编程式ai开发平台
CN118708321A (zh) 一种应用程序的迁移方法、装置、设备和存储介质
US20240134777A1 (en) Graphical Neural Network for Error Identification
CN118363872A (zh) 低代码平台的数据处理方法及系统
US20240338203A1 (en) Artificial intelligence (ai) supported graph enabled method to manage upgrades for applications

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