CN114924762A - 一种组件升级适配检测方法及装置 - Google Patents
一种组件升级适配检测方法及装置 Download PDFInfo
- Publication number
- CN114924762A CN114924762A CN202210435009.XA CN202210435009A CN114924762A CN 114924762 A CN114924762 A CN 114924762A CN 202210435009 A CN202210435009 A CN 202210435009A CN 114924762 A CN114924762 A CN 114924762A
- Authority
- CN
- China
- Prior art keywords
- component
- upgraded
- software system
- sequence
- function
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/368—Test management for test version control, e.g. updating test cases to a new software version
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例提供一种组件升级适配检测方法及装置,该方法包括:确定第一软件系统中存在待升级组件;其中,所述第一软件系统中包括依赖于所述待升级组件的依赖组件;确定所述依赖组件对所述待升级组件的第一调用函数序列;所述第一调用函数序列用于表征所述依赖组件按序调用的所述待升级组件的各函数;确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列;所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的;若存在匹配的第二调用函数序列,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。上述方法用于提高对组件升级适配性检测的准确性,降低预警误报情况。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种组件升级适配检测方法及装置。
背景技术
近年来,随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(Fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出更高的要求。如,为了保证金融行业的软件系统的各项功能应用质量,软件系统中的组件在不断地迅速更迭升级。
软件组件(Component)定义为可重用的软件单元,是对数据和方法的简单封装。软件组件可以很容易的地应用于组装应用程序。组件可以有自己的属性和方法。属性是组件数据的简单访问者。方法则是组件的一些简单而可见的功能。在编程语言比如Java、C++和C#中,通过“类”和“接口”的各个方法定义实现方法调用接口(API)。软件系统通常由多个互相依赖的组件结合而成,这些组件大多是由不同团队独立开发,若某个软件系统中包括团队1开发的组件A以及团队2开发的组件B,组件A会调用组件B,即组件A依赖于组件B。若团队2对组件B迭代升级,为了确保软件系统的正常运行,需要确保组件A在组件B升级后依然能正常调用组件B。目前,将众多组件组成一个第三方库,来对外提供被调用服务。许多软件开发者为避免被依赖的组件的升级对软件系统造成负面影响,不会在软件系统中对被依赖的组件进行升级。然后,延迟升级的组件实际上会造成不可忽视的安全隐患。
现有技术为解决这一问题,相关研究团队提出了一些技术方案,如,Dependabot(可以用于检测软件系统是否存在待更新组件的工具)。Dependabot利用大规模的组件历史升级数据对于可能发生的不适配升级作出预警。该方式虽然可以发现部分组件升级存在不适配问题,但是仍然存在较多预警误报的情况。
因此,现在亟需一种组件升级适配检测方法及装置,用于提高对组件升级适配性检测的准确性,降低预警误报情况。
发明内容
本发明实施例提供一种组件升级适配检测方法及装置,用于提高对组件升级适配性检测的准确性,降低预警误报情况。
第一方面,本发明实施例提供一种组件升级适配检测方法,该方法包括:
确定第一软件系统中存在待升级组件;其中,所述第一软件系统中包括依赖于所述待升级组件的依赖组件;
确定所述依赖组件对所述待升级组件的第一调用函数序列;所述第一调用函数序列用于表征所述依赖组件按序调用的所述待升级组件的各函数;
确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列;所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的;
若存在匹配的第二调用函数序列,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
上述方法中,第一软件系统中存在待升级组件,第一软件系统中包括依赖于该待升级组件的依赖组件。如此,可以获取包含待升级组件的软件系统,对该软件系统的被依赖的待升级组件升级为更新版本组件是否存在升级不适配问题进行检测。确定该依赖组件对该待升级组件的第一调用函数序列;第一调用函数序列用于表征依赖组件按序调用的待升级组件的各函数。如此,可以获取依赖组件在调用待升级组件时,出现的函数调用序列的特征。确定该待升级组件的状态机中是否具有与该第一调用函数序列匹配的第二调用函数序列,若存在匹配的第二调用函数序列,则确定该第一软件系统存在针对该待升级组件的升级不适配。其中,因为,状态机是通过对该待升级组件具有升级不适配的各软件系统进行调用测试得到的。也就是说,状态机中包含待升级组件升级不适配的可能存在的各种函数调用序列特征。如此,通过比较该依赖组件对该待升级组件的第一调用函数序列和状态机中的第二调用函数序列的匹配性,可以确定该第一调用函数序列的特征是否更贴近状态机中的第二调用函数序列。相比于现有技术中检测工具Dependabot仅仅针对待升级组件的接口相关参数进行升级不适配问题的检测来说,本申请针对依赖待升级组件的依赖组件特殊性质(调用接口的函数调用序列)与更新版本组件特征(调用接口的函数调用序列)的匹配性来判断该待升级组件是否可进行升级,以此根据依赖组件特性和更新版本组件特性进行升级不适配问题检测,准确率更高。
可选的,确定所述第一软件系统存在针对所述待升级组件的升级不适配,包括:
通过所述状态机获取所述第二调用函数序列中各函数的输入输出值;
根据所述第二调用函数序列中各函数的输入输出值,构建第一测试用例;
在第二软件系统中运行所述第一测试用例,所述第二软件系统为基于对所述第一软件系统中的所述待升级组件进行升级后的软件系统;
若所述第一测试用例运行失败,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
上述方法中,确定依赖组件的第一函数调用序列与状态机的第二函数调用序列匹配后,根据第二调用函数序列中各函数的输入输出值,构建第一测试用例,通过第一测试用例对第一软件系统中待升级组件升级后获得的第二软件系统进行测试,若第一测试用例运行失败,则可以确定第一软件系统存在针对该待升级组件的升级不适配的问题。如此,在第一函数调用序列与第二函数调用序列匹配后,认为该软件系统中的依赖组件特性与更新版本组件升级失败的特征适配,大概率会出现升级不适配问题,则后续根据第一测试用例进一步验证,可以节约不执行匹配过程时,对适配升级的软件系统也生成对应的测试用例导致的资源浪费和检测效率低的问题。
可选的,所述测试用例运行失败之后,还包括:根据所述测试用例运行时对所述待升级组件的已更新组件中各函数的调用,生成第三调用函数序列;通过所述第三调用函数序列对所述状态机进行更新。
上述方法中,在确定待升级组件不适合升级后,即,依赖组件对应待升级组件的升级存在升级不适配问题,将该待升级组件的更新版本组件的执行失败的第三调用函数序列更新到状态机中,使得状态机包含更新版本组件和依赖组件(和更新版本组件组合得到软件系统的组件)具有不适配特性的各调用函数序列,保证状态机的全面性和准确性。
可选的,所述第一软件系统处于上线应用状态;所述第二软件系统是通过对所述第一软件系统对应的线下测试版本中的所述待升级组件进行升级后得到;若所述第一测试用例运行成功,则对所述第一软件系统中的所述待升级组件进行升级。
上述方法中,为了保证业务的正常运行,可以基于第一软件系统对应的线下测试版本中的待升级组件进行升级后,得到第二软件系统。在第一测试用例运行成功,可以对第一软件系统中的待升级组件进行升级。如此,防止将线上应用中的第一软件系统升级,导致可能出现升级失败、回滚等影响业务运行的情况。
可选的,所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的,包括:
确定所述待升级组件的版本号对;所述版本号对为升级前后的版本号;
针对具有所述待升级组件的任一软件系统,通过第二测试用例确定所述软件系统具有升级不适配后,获取所述第二测试用例执行的第三函数调用序列及所述第三函数调用序列中各函数的输入输出值;
基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及所述版本号对,生成所述状态机。
上述方法中,确定包含待升级组件升级前后的版本号的版本号对,针对具有待升级组件的任一软件系统,通过第二测试用例确定该软件系统具有升级不适配后,获取第二测试用例执行的第三函数调用序列及该第三函数调用序列中各函数的输入输出值,基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值、版本号对,生成状态机。如此,保证获取更多包含待升级组件的软件系统,这些软件系统中的依赖于待升级组件的各组件不完全相同。如,这些软件系统中依赖于待升级组件的组件可以是来自于不同开发方的,不同软件项目(不同的依赖于待升级组件的组件),获取不同软件项目中该更新版本组件的各第三函数调用序列、各第三函数调用序列中各函数的输入输出值、版本号对,以生成的状态机。如此,使得状态机中包含的更新版本组件的执行失败特征更完整。
可选的,基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及所述版本号对,生成所述状态机,包括:
将所述版本号对作为所述状态机的入口允许条件,将所述各第三函数调用序列和所述各第三函数调用序列中各函数的输入输出值整合,得到状态机的应用状态条件,所述应用状态条件包含所述已更新组件基于各软件系统升级不适配产生的函数调用序列及其中各函数的输入输出值。
上述方法中,将版本号对作为状态机的入口允许条件。如此,保证使用状态机时,获取的状态机与待升级组件和更新版本组件是对应的。将各第三函数调用序列和各第三函数调用序列中各函数的输入输出值整合,得到状态机的应用状态条件。如此,使得状态机中包含已更新组件基于各软件系统升级不适配产生的函数调用序列及其中各函数的输入输出值,提高将第一函数调用序列和第二函数调用序列匹配的准确度和全面性。
可选的,确定所述依赖组件对所述待升级组件的第一调用函数序列,包括:对所述依赖组件进行代码分析,确定所述依赖组件对所述待升级组件的第一调用函数序列。
上述方法中,依赖组件对待升级组件的第一调用函数序列可以直接通过对代码进行分析确定,加快检测速度。
第二方面,本发明实施例提供一种组件升级适配检测装置,该装置包括:
获取模块,用于确定第一软件系统中存在待升级组件;其中,所述第一软件系统中包括依赖于所述待升级组件的依赖组件;
检测模块,用于确定所述依赖组件对所述待升级组件的第一调用函数序列;所述第一调用函数序列用于表征所述依赖组件按序调用的所述待升级组件的各函数;
所述检测模块还用于,确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列;所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的;
所述检测模块还用于,若存在匹配的第二调用函数序列,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
第三方面,本申请实施例还提供一种计算机设备,包括:存储器,用于存储程序;处理器,用于调用所述存储器中存储的计算机程序,按照获得的程序执行如第一方面的各种可能的设计中所述的方法。
第四方面,本申请实施例还提供一种计算机可读非易失性存储介质,包括计算机可读程序,当计算机读取并执行所述计算机可读程序时,使得计算机执行如第一方面的各种可能的设计中所述的方法。
本申请的这些实现方式或其他实现方式在以下实施例的描述中会更加简明易懂。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种组件升级适配检测的架构示意图;
图2为本发明实施例提供的一种组件升级适配检测方法的流程示意图;
图3为本发明实施例提供的一种组件升级适配检测方法的流程示意图;
图4为本发明实施例提供的一种组件升级适配检测方法的流程示意图;
图5为本发明实施例提供的一种组件升级适配检测装置示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
目前,生产的软件系统通常由多个互相依赖的组件结合而成。这些组件大多是不同团队独立开发,一个开发好的组件大概率被应用到不同的软件系统中。也就是说,这个组件(因为基于该组件说明组件升级引发软件系统升级不适配问题。因此,后续将该组件称为待升级组件,该待升级组件对应的升级后的组件为更新版本组件)需要能够被多种不同的软件系统应用,这个待升级组件需要能够被这些不同的软件系统中依赖于该待升级组件的依赖组件(为了便于说明,将软件系统中依赖于该待升级组件的组件称为依赖组件)调用,而不同的软件系统中的依赖组件实现对该待升级组件的接口调用的方法并不完全相同(需要说明的是,依赖组件和待升级组件之间的接口调用可以是通过一个或多个函数调用实现的)。因此,在待升级组件迭代升级中,检测更新版本组件是否能被对应的依赖组件实现接口调用-软件系统是否存在升级不适配问题,成为目前组件开发方的重要研究问题。
待升级组件的升级改动大致可以分为两类,一种是影响API的改动,一种是不影响API的改动。影响API的改动指的是API所要求的参数个数或类型出现了改变,如原API要求整数型参数,而改动后的API要求字符串型参数。现行方法可以较容易地发现影响API的改动,然而对于不影响API的改动则需要依赖足够的测试用例,大量现实中的软件项目并不具备这样的条件。
Dependabot利用大规模的历史升级数据对于可能发生的不适配升级作出预警。例如,若在过去依赖组件A对应的待升级组件X升级中产生了已知错误(如,升级前待升级组件中包含影响API的参数为时间上限为10min,若升级后,更新版本组件中包含影响API的参数为时间上限为5min,导致依赖组件A无法基于该API参数-时间上限为10min,正确调用更新版本组件X的API参数-时间上限为5min。为了便于理解,进一步说明,依赖组件为语音采集组件,待升级组件为语音分析组件,语音采集组件中设置API参数为可以采集时间上限为10min的语音,语音分析组件设置API参数为可以分析时间上限为10min的语音。若升级后的语音分析组件设置API参数为可以分析时间上限为5min的语音,则该升级后的语音分析组件不能适配语音采集组件,语音采集分析软件系统存在升级不适配问题。这里只是一种示例,并不对具体API参数种类及其应用等做限制),那么在依赖组件B中对应的待升级组件X进行同样的升级时,Dependabot会对依赖组件B发出预警。但是在依赖组件B并不会被待升级组件X的升级部分数据(在上述示例中,依赖组件B-语音采集模块中设置API参数为可以采集时间上限为5min的语音)影响时,该预警时误报。相应的,在大量依赖组件使用该种方式进行检测,则可能出现大量误报预警,这样的误报会大大增加开发者的维护成本,需要大量时间投入到确认预警问题是否在依赖组件中会实际出现。因此,对于软件系统升级不适配问题还需要进一步研究。
图1为本发明实施例提供的一种组件升级适配检测的系统架构,用于提高软件系统升级不适配检测的准确性。其中,数据获取模块101用于针对具有待升级组件的任一软件系统,通过第二测试用例确定软件系统具有升级不适配后,获取第二测试用例执行的第三函数调用序列及第三函数调用序列中各函数的输入输出值,确定该待升级组件升级前后的版本号的版本号对。基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及版本号对,生成状态机。其中,各软件系统中依赖于待升级组件的组件可以不完全相等。后续还可以进行状态机更新,即,在存在软件系统(包含待升级组件的软件系统)升级(即,待升级组件更新为更新版本组件后)后,并在其对应的测试用例下运行失败,确定该软件系统具有升级不适配问题,根据该软件系统在其对应的测试用例下执行的第三函数调用序列及第三函数调用序列中各函数的输入输出值更新状态机。数据获取模块101在生成状态机或更新状态机后,将该最新的状态机存储在数据库102中。需要说明的是,这里状态机更新的过程可以在检测模块103中进行,也可以在数据获取模块101中进行,这里具体不做限制。
数据库102用于存储数据获取模块101中获取的状态机,还可以存储各软件系统对应的第三函数调用序列、第三函数调用序列中各函数的输入输出值及版本号对等相关信息。这里对数据库102中存储的数据具体不做限制。
检测模块103用于获取存在待升级组件的第一软件系统,该第一软件系统中还包括依赖于该待升级组件的依赖组件。确定表征该依赖组件按序调用该待升级组件的各函数的第一调用函数序列。从数据库102中确定该待升级组件对应的状态机,进一步确定状态机中是否具有与第一调用函数序列匹配的第二调用函数序列,若存在匹配的第二调用函数序列,则该第一软件系统大概率存在升级不适配问题。之后,通过该状态机获取该第二调用函数序列中各函数的输入输出值,根据该第二调用函数序列中各函数的输入输出值,构建第一测试用例(这里还可以根据该第二调用函数序列中各函数的输入输出值,以及第一软件系统中的依赖组件构建第一测试用例)。对该第一软件系统中的待升级组件进行升级后得到第二软件系统,在第二软件系统中运行第一测试用例,若运行成功,则确定该第一软件系统不存在针对该待升级组件的升级不适配问题,可以对第一软件系统中的待升级组件进行升级;若运行失败,则证明该第一软件系统存在针对该待升级组件的升级不适配。之后,根据第二软件系统中运行第一测试用例运行失败时,第二软件系统中待升级组件的已更新组件中各函数的调用,生成第三调用函数序列,通过所述第三调用函数序列对状态机进行更新,将更新后的状态机放回至数据库。需要说明的是,这里的状态机更新的过程可以在检测模块103中进行,也可以在数据获取模块101中进行,这里具体不做限制。为了保证软件系统中业务的正常运行,则基于对第一软件系统对应的线下测试版本中的待升级组件进行升级,得到用于测试的第二软件系统。
基于上述系统架构,本申请实施例提供了一种组件升级适配检测方法的流程,如图2所示,包括:
步骤201、确定第一软件系统中存在待升级组件;其中,所述第一软件系统中包括依赖于所述待升级组件的依赖组件;
此处,需要说明的是,第一软件系统可以是应用软件,也可以是操作系统,还可以是小程序,或者是客户端等基于撰写的代码程序可以运行的软件系统,这里对软件系统的具体类型不做限制。
第一软件系统中包含待升级组件和依赖于该待升级组件的依赖组件,如,待升级组件和依赖组件之间通过一定的函数调用序列实现待升级组件和依赖组件之间的接口调用。
步骤202、确定所述依赖组件对所述待升级组件的第一调用函数序列;所述第一调用函数序列用于表征所述依赖组件按序调用的所述待升级组件的各函数;
此处,第一函数调用序列可以为依赖组件用于实现针对待升级组件的接口调用可能涉及的各函数的调用序列。
步骤203、确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列;所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的;
此处,状态机中可以包含各种第二调用函数序列,该第二调用函数序列是各软件系统对待升级组件升级失败时获取的,包含待升级组件升级失败(各软件系统中依赖于该待升级组件的组件,无法成功调用待升级组件的更新版本组件的接口)时调用函数的特性。
步骤204、若存在匹配的第二调用函数序列,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
此处,这里匹配的判断方式可以为,设置匹配度阈值,若第一调用函数序列与第二调用函数序列的匹配度超过该匹配度阈值,则认为该第一调用函数序列存在匹配的第二调用函数序列,也可以为关键特征匹配等,这里对匹配的判断方式具体不做限制。
上述方法中,第一软件系统中存在待升级组件,第一软件系统中包括依赖于该待升级组件的依赖组件。如此,可以获取包含待升级组件的软件系统,对该软件系统的被依赖的待升级组件升级为更新版本组件是否存在升级不适配问题进行检测。确定该依赖组件对该待升级组件的第一调用函数序列;第一调用函数序列用于表征依赖组件按序调用的待升级组件的各函数。如此,可以获取依赖组件在调用待升级组件时,出现的函数调用序列的特征。确定该待升级组件的状态机中是否具有与该第一调用函数序列匹配的第二调用函数序列,若存在匹配的第二调用函数序列,则确定该第一软件系统存在针对该待升级组件的升级不适配。其中,因为,状态机是通过对该待升级组件具有升级不适配的各软件系统进行调用测试得到的。也就是说,状态机中包含待升级组件升级不适配的可能存在的各种函数调用序列特征。如此,通过比较该依赖组件对该待升级组件的第一调用函数序列和状态机中的第二调用函数序列的匹配性,可以确定该第一调用函数序列的特征是否更贴近状态机中的第二调用函数序列。相比于现有技术中检测工具Dependabot仅仅针对待升级组件的接口相关参数进行升级不适配问题的检测来说,本申请针对依赖待升级组件的依赖组件特殊性质(调用接口的函数调用序列)与更新版本组件特征(调用接口的函数调用序列)的匹配性来判断该待升级组件是否可进行升级,以此根据依赖组件特性和更新版本组件特性进行升级不适配问题检测,准确率更高。
基于上述组件适配检测方法,步骤204中,确定存在匹配的第二调用函数序列后,进一步,确定所述第一软件系统存在针对所述待升级组件的升级不适配,具体可以包括:通过所述状态机获取所述第二调用函数序列中各函数的输入输出值;根据所述第二调用函数序列中各函数的输入输出值,构建第一测试用例;在第二软件系统中运行所述第一测试用例,所述第二软件系统为基于对所述第一软件系统中的所述待升级组件进行升级后的软件系统;若所述第一测试用例运行失败,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
也就是说,确定第一软件系统中存在待升级组件,并获取依赖组件对待升级组件的第一调用函数序列。确定待升级组件的状态机中具有与该第一调用函数序列匹配的第二调用函数序列后,确定第一软件系统大概率存在对待升级组件存在升级不适配问题,为了进一步确认,提高检测结果的准确性,通过状态机获取第二调用函数序列中各函数的输入输出值,基于该第二调用函数序列中各函数的输入输出值构建第一测试用例(为了提高第一测试用例更贴合该第一软件系统中依赖组件的特性,可以根据依赖组件和第二调用函数序列中各函数的输入输出值构建第一测试用例)。之后,在基于第一软件系统中待升级组件升级后得到的第二软件系统中运行该第一测试用例,获取检测结果。若第一测试用例运行失败,则确定该第一软件系统存在针对该待升级组件的升级不适配问题。另外,这里可以基于自动化测试生成工具生成第一测试用例,将第二调用函数序列中各函数的输入输出值和依赖组件输入自动化测试生成工具,得到自动化测试生成工具输出的第一测试用例。
进一步的,本申请实施例基于上述组件升级适配检测方法流程,还提供了一种状态机的更新方法流程,即,在所述测试用例运行失败之后,还包括:根据所述测试用例运行时对所述待升级组件的已更新组件中各函数的调用,生成第三调用函数序列;通过所述第三调用函数序列对所述状态机进行更新。为了便于理解,列举基于上述组件升级适配检测方法流程的状态机更新方法流程,即,若第一测试用例运行失败,获取该第一测试用例运行时对待升级组件的已更新组件(即,上述待升级组件对应的更新版本组件)中各函数的调用,生成第三调用函数序列,通过该第三调用函数序列对状态机进行更新。
这里提供一种示例,结合上述图1中的架构和图2中的方法流程对组件升级适配方法和架构进行说明,如图3所示,
a、检测模块303可以对用户提供的软件系统进行定期扫描,发现待升级组件。例如,已有待升级组件为版本1.0.1,而存在该待升级组件存在对应的更新版本1.0.2的更新版本组件。
b.若该版本对(待升级组件版本1.0.1-更新版本组件版本1.0.2)在数据库302中已存在,则对该软件系统中的依赖组件的接口调用(依赖组件的代码中用于调用待升级组件的函数,还可以包含其他相关函数参数等,这里具体不做限制)进行匹配。匹配过程中确定数据库302中的对应该待升级组件和更新版本组件的状态机(包含待升级组件升级失败涉及的多种第二函数调用序列)是否接收依赖组件的接口调用。
这里接口调用相当于上述方法流程中的第一函数调用序列,依赖组件中包含的对待升级组件和\或更新版本组件等的第一函数调用序列,以用于依赖组件实现待升级组件和\或更新版本组件接口调用。需要说明的是,这里描述第一函数调用序列是对待升级组件和\或更新版本组件进行接口调用涉及的函数调用序列,只是为了便于理解。而待升级组件和\或更新版本组件是为了实现某一个或多个功能,依赖组件中可能还包含用于该实现某一个或多个功能的组件(可以实现该一个或多个功能的待升级组件和更新版本组件以外的其他组件)的接口调用的其他相关函数或参数。因此,这里的第一函数调用序列并不仅限于对待升级组件和\或更新版本组件的接口调用,是基于依赖组件的代码编写程度(代码编写程度是指,依赖组件对该实现某一个或多个功能的组件可能存在的函数调用、参数调用等信息编写的普适度和复杂度),也因此,对第一函数调用序列具体不做限制。
c、匹配过程中确定数据库302中的对应该待升级组件和更新版本组件的状态机中的第二函数调用序列接收依赖组件的第一函数调用序列(可以认为第一函数调用序列与第二函数调用序列的匹配相似度超过匹配相似度阈值,其中,匹配相似度阈值可根据实际使用要求调节)。匹配成功的第一函数调用序列对应的软件系统对待升级组件的升级存在潜在的升级不适配风险。另外,若检测模块303确定第一函数调用序列与第二函数调用序列匹配失败(可以认为第一函数调用序列与第二函数调用序列的匹配相似度未超过匹配相似度阈值),则将处于上线应用状态的第一软件系统中的待升级组件升级为更新版本组件,使得第二软件系统处于上线应用状态。这里需要说明的是,在一种实施例中,为了保证第一软件系统运行的业务,可以令第一软件系统处于上线应用状态;而根据第一软件系统对应的线下测试版本中的待升级组件进行升级后得到第二软件系统。也就是说,如何进行测试,都不会影响第一软件系统的业务处理。
d、进一步的,检测模块303将状态机中的第二函数调用序列中各函数的输入输出值和依赖组件代码输入自动化测试生成工具,自动化测试生成工具根据第二函数调用序列中各函数的输入输出值和依赖组件代码构建第一测试用例(如此,第一测试用例中融合到依赖组件的特性,第一测试用例更贴合依赖组件的运行情况,提高组件升级不适配检测的准确率)。第一测试用例在第二软件系统(第一软件系统中的待升级组件升级为更新版本组件得到的第二软件系统)中成功触发升级不适配问题。即,第一测试用例在第一软件系统中执行成功,而在第二软件系统中执行失败。另外,若检测模块303确定第一测试用例在第二软件系统中执行成功,则将处于上线应用状态的第一软件系统中的待升级组件升级为更新版本组件,使得第二软件系统处于上线应用状态。
e.若不适配问题确认成功,检测模块303根据第一测试用例在第二软件系统中运行失败的接口调用(第三函数调用序列)更新该状态机,将该状态机放回数据库302。
基于上述组件适配检测方法,步骤203中,确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列之前,即,使用状态机之前,该方法流程中还可以包括如何获取状态机的方法流程,即,所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的,包括:确定所述待升级组件的版本号对;所述版本号对为升级前后的版本号;针对具有所述待升级组件的任一软件系统,通过第二测试用例确定所述软件系统具有升级不适配后,获取所述第二测试用例执行的第三函数调用序列及所述第三函数调用序列中各函数的输入输出值;基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及所述版本号对,生成所述状态机。也就是说,针对存在更新版本组件的待升级组件,获取包含该待升级组件的多个软件系统,通过第二测试用例确定该多个软件系统中任一软件系统具有升级不适配问题后,获取第二测试用例在该软件系统运行失败的接口调用-第三函数调用序列,以及该第三函数调用序列中各函数的输入输出值。基于具有升级不适配问题的多个软件系统的第三函数调用序列、该第三函数调用序列中各函数的输入输出值,以及版本号,生成状态机。
这里提供一种示例,结合上述图1中的架构和图2中的方法流程对组件升级适配方法和架构进行说明,如图3所示,
a、数据采集模块301获取大量软件项目库(可选开源项目)中已有的单元测试(可认为相当于第二测试用例)且包含待升级组件的软件系统,对这些软件系统中的待升级组件逐一进行升级,得到包含更新版本组件的各软件系统,并在该各软件系统中运行第二测试用例,若发现某软件系统在升级前运行第二测试用例成功,但在升级后运行第二测试用例失败,则发现一个升级不适配案例。
b、接着对升级不适配案例进行更新版本组件的接口动态信息提取。
其中,接口动态信息包括:(1)待升级组件和更新版本组件的版本对,如,“(待升级组件-1.0.1,更新版本组件-1.0.2)”。(2)动态执行轨迹,包含测试用例执行失败时所调函数序列。如,“obj.m1->obj.m2->obj.m3”,其中“obj”代表涉及的对象,“m1,m2,m3”代表所调函数名。(3)中间执行状态,包含执行轨迹中每个函数被调前后的所有参数以及返回值。如,“r=obj.m1(2,obj2,‘test’)”,其中“2”,“obj2”,和“test”代表函数调用的具体参数值,“r”代表函数返回值。
c、最后,基于上述各软件系统的接口动态信息(包括各软件系统的第三函数调用序列,以及该第三函数调用序列中各函数的输入输出值),确定同一待升级组件版本对的多个接口动态信息进行合并提炼。将多条第三函数调用序列,以及该第三函数调用序列中各函数的输入输出值合并成为一个状态机。该状态机将接收所有符合基于多条第三函数调用序列,以及该第三函数调用序列中各函数的输入输出值整合得出的第二调用序列(第二调用序列可以与第三函数相同或不用,这里对第二调用序列具体不做限制)的待升级组件的接口调用,并拒绝不符合第二函数调用序列的调用。因此,合并的多条第三函数调用序列,以及该第三函数调用序列中各函数的输入输出值可用来表示在依赖组件中发现的升级不适配案例中的待升级组件使用场景。数据采集模块301把该状态机存储于数据库302中。
基于上述示例,本申请还提供了一种获取状态机的方法流程,即,基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及所述版本号对,生成所述状态机,包括:将所述版本号对作为所述状态机的入口允许条件,将所述各第三函数调用序列和所述各第三函数调用序列中各函数的输入输出值整合,得到状态机的应用状态条件,所述应用状态条件包含所述已更新组件基于各软件系统升级不适配产生的函数调用序列及其中各函数的输入输出值。也就是说,需要检测升级适配的组件的版本号,需要符合状态机中入口允许条件的版本号才允许应用状态机。根据各第三函数调用序列和所述各第三函数调用序列中各函数的输入输出值整合生成的状态机中,包含多个第二函数调用序列的应用状态条件;需要检测升级适配的组件对应的依赖组件中的第一函数调用序列匹配上状态机的第二函数调用序列的应用状态条件,状态机才会接收该依赖组件的第一函数调用序列,否则不会接收。另外,说明性的,上述依赖组件对待升级组件的第一调用函数序列,可以是对依赖组件进行代码分析确定的。
基于上述组件升级适配检测的系统结构和各方法流程,本申请实施例还提供了一种组件升级适配检测方法,如图4所示,包括:
步骤401、针对具有待升级组件的任一软件系统,通过第二测试用例确定该软件系统具有升级不适配后,获取该第二测试用例执行的第三函数调用序列及所述第三函数调用序列中各函数的输入输出值。
此处,上述软件系统和第二测试用例可以是从各软件项目库中获取的。如,可以是从公网的外部开源仓库,如,GitHub,也可以是从内网的内部开源仓库获取的,这里对上述软件系统的获取方式,具体不做限制。
步骤402、将上述待升级组件的版本号对作为该状态机的入口允许条件,将上述各第三函数调用序列和各第三函数调用序列中各函数的输入输出值整合,得到状态机的应用状态条件,其中,应用状态条件包含所述已更新组件基于各软件系统升级不适配产生的函数调用序列及其中各函数的输入输出值。
步骤403、确定第一软件系统中存在待升级组件,该第一软件系统中还包括依赖于所述待升级组件的依赖组件。
步骤404、对依赖组件的代码进行分析,确定依赖组件对待升级组件的第一调用函数序列。该第一调用函数序列用于表征依赖组件按序调用的待升级组件的各函数。补充性的,第一调用函数序列中还可以包含其他函数或参数,即,用于按序调用与待升级组件功能相同或相似的其他组件的函数或参数。
步骤405、确定对应待升级组件的状态机中是否具有与该第一调用函数序列匹配的第二调用函数序列。
步骤406、若不存在匹配的第二调用函数序列,则执行步骤407,若存在匹配的第二调用函数序列,则执行步骤408。
步骤407、将处于上线应用状态的第一软件系统中的待升级组件进行升级,令升级得到的第二软件系统处于上线应用状态。
步骤408、通过该状态机获取第二调用函数序列中各函数的输入输出值,根据第二调用函数序列中各函数的输入输出值,构建第一测试用例。
步骤409、在第二软件系统中运行该第一测试用例,第二软件系统为基于对第一软件系统中的待升级组件进行升级后的软件系统。
此处,第二软件系统是通过对第一软件系统对应的线下测试版本中的待升级组件进行升级后得到的。
步骤410、若第一测试用例运行失败,执行步骤411,若第一测试用例运行成功,执行步骤407。
步骤411、则确定该第一软件系统存在针对待升级组件的升级不适配问题,根据第一测试用例运行时对该待升级组件的已更新组件中各函数的调用,生成第三调用函数序列,通过该第三调用函数序列对所述状态机进行更新。
需要说明的是,上述流程步骤并不唯一,如,步骤401和步骤401不需要在每次执行步骤403至步骤411时都执行。
基于同样的构思,本发明实施例提供一种组件升级适配检测装置,图5为本申请实施例提供的一种组件升级适配检测装置,如图5示,包括:
获取模块501,用于确定第一软件系统中存在待升级组件;其中,所述第一软件系统中包括依赖于所述待升级组件的依赖组件;
检测模块502,用于确定所述依赖组件对所述待升级组件的第一调用函数序列;所述第一调用函数序列用于表征所述依赖组件按序调用的所述待升级组件的各函数;
所述检测模块502还用于,确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列;所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的;
所述检测模块502还用于,若存在匹配的第二调用函数序列,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
可选的,所述检测模块502具体用于,通过所述状态机获取所述第二调用函数序列中各函数的输入输出值;根据所述第二调用函数序列中各函数的输入输出值,构建第一测试用例;在第二软件系统中运行所述第一测试用例,所述第二软件系统为基于对所述第一软件系统中的所述待升级组件进行升级后的软件系统;若所述第一测试用例运行失败,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
可选的,所述检测模块502还用于,根据所述测试用例运行时对所述待升级组件的已更新组件中各函数的调用,生成第三调用函数序列;通过所述第三调用函数序列对所述状态机进行更新。
可选的,所述第一软件系统处于上线应用状态;所述第二软件系统是通过对所述第一软件系统对应的线下测试版本中的所述待升级组件进行升级后得到;若所述第一测试用例运行成功,所述检测模块502还用于对所述第一软件系统中的所述待升级组件进行升级。
可选的,所述检测模块502具体用于,确定所述待升级组件的版本号对;所述版本号对为升级前后的版本号;针对具有所述待升级组件的任一软件系统,通过第二测试用例确定所述软件系统具有升级不适配后,获取所述第二测试用例执行的第三函数调用序列及所述第三函数调用序列中各函数的输入输出值;基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及所述版本号对,生成所述状态机。
可选的,所述检测模块502具体用于,将所述版本号对作为所述状态机的入口允许条件,将所述各第三函数调用序列和所述各第三函数调用序列中各函数的输入输出值整合,得到状态机的应用状态条件,所述应用状态条件包含所述已更新组件基于各软件系统升级不适配产生的函数调用序列及其中各函数的输入输出值。
可选的,所述检测模块502具体用于,对所述依赖组件进行代码分析,确定所述依赖组件对所述待升级组件的第一调用函数序列。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (10)
1.一种组件升级适配检测方法,其特征在于,所述方法包括:
确定第一软件系统中存在待升级组件;其中,所述第一软件系统中包括依赖于所述待升级组件的依赖组件;
确定所述依赖组件对所述待升级组件的第一调用函数序列;所述第一调用函数序列用于表征所述依赖组件按序调用的所述待升级组件的各函数;
确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列;所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的;
若存在匹配的第二调用函数序列,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
2.如权利要求1中所述的方法,其特征在于,确定所述第一软件系统存在针对所述待升级组件的升级不适配,包括:
通过所述状态机获取所述第二调用函数序列中各函数的输入输出值;
根据所述第二调用函数序列中各函数的输入输出值,构建第一测试用例;
在第二软件系统中运行所述第一测试用例,所述第二软件系统为基于对所述第一软件系统中的所述待升级组件进行升级后的软件系统;
若所述第一测试用例运行失败,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
3.如权利要求2中所述的方法,其特征在于,所述测试用例运行失败之后,还包括:
根据所述测试用例运行时对所述待升级组件的已更新组件中各函数的调用,生成第三调用函数序列;
通过所述第三调用函数序列对所述状态机进行更新。
4.如权利要求1中所述的方法,其特征在于,所述第一软件系统处于上线应用状态;
所述第二软件系统是通过对所述第一软件系统对应的线下测试版本中的所述待升级组件进行升级后得到;
若所述第一测试用例运行成功,则对所述第一软件系统中的所述待升级组件进行升级。
5.如权利要求1-4中任一所述的方法,其特征在于,所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的,包括:
确定所述待升级组件的版本号对;所述版本号对为升级前后的版本号;
针对具有所述待升级组件的任一软件系统,通过第二测试用例确定所述软件系统具有升级不适配后,获取所述第二测试用例执行的第三函数调用序列及所述第三函数调用序列中各函数的输入输出值;
基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及所述版本号对,生成所述状态机。
6.如权利要求5中所述的方法,其特征在于,基于各第三函数调用序列、各第三函数调用序列中各函数的输入输出值及所述版本号对,生成所述状态机,包括:
将所述版本号对作为所述状态机的入口允许条件,将所述各第三函数调用序列和所述各第三函数调用序列中各函数的输入输出值整合,得到状态机的应用状态条件,所述应用状态条件包含所述已更新组件基于各软件系统升级不适配产生的函数调用序列及其中各函数的输入输出值。
7.如权利要求1中所述的方法,其特征在于,确定所述依赖组件对所述待升级组件的第一调用函数序列,包括:
对所述依赖组件进行代码分析,确定所述依赖组件对所述待升级组件的第一调用函数序列。
8.一种组件升级适配检测装置,其特征在于,所述装置包括:
获取模块,用于确定第一软件系统中存在待升级组件;其中,所述第一软件系统中包括依赖于所述待升级组件的依赖组件;
检测模块,用于确定所述依赖组件对所述待升级组件的第一调用函数序列;所述第一调用函数序列用于表征所述依赖组件按序调用的所述待升级组件的各函数;
所述检测模块还用于,确定所述待升级组件的状态机中是否具有与所述第一调用函数序列匹配的第二调用函数序列;所述状态机是通过对所述待升级组件具有升级不适配的各软件系统进行调用测试得到的;
所述检测模块还用于,若存在匹配的第二调用函数序列,则确定所述第一软件系统存在针对所述待升级组件的升级不适配。
9.一种计算设备,其特征在于,包括:
存储器,用于存储程序指令;
处理器,用于调用所述存储器中存储的程序指令,按照获得的程序执行权利要求1至7任一项所述的方法。
10.一种计算机可读非易失性存储介质,其特征在于,包括计算机可读指令,当计算机读取并执行所述计算机可读指令时,使得计算机执行如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210435009.XA CN114924762A (zh) | 2022-04-24 | 2022-04-24 | 一种组件升级适配检测方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210435009.XA CN114924762A (zh) | 2022-04-24 | 2022-04-24 | 一种组件升级适配检测方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114924762A true CN114924762A (zh) | 2022-08-19 |
Family
ID=82805720
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210435009.XA Pending CN114924762A (zh) | 2022-04-24 | 2022-04-24 | 一种组件升级适配检测方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114924762A (zh) |
-
2022
- 2022-04-24 CN CN202210435009.XA patent/CN114924762A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11163731B1 (en) | Autobuild log anomaly detection methods and systems | |
US8516443B2 (en) | Context-sensitive analysis framework using value flows | |
US8954930B2 (en) | System and method for reducing test effort by object risk analysis | |
US8312440B2 (en) | Method, computer program product, and hardware product for providing program individuality analysis for source code programs | |
CN109032825B (zh) | 一种故障注入方法、装置及设备 | |
US10565089B2 (en) | Identification of code features potentially associated with code behavior | |
US20140130016A1 (en) | Offline type checking in programming languages | |
US20210191845A1 (en) | Unit testing of components of dataflow graphs | |
US11307975B2 (en) | Machine code analysis for identifying software defects | |
US20110320876A1 (en) | Systems and methods for processing source code during debugging operations | |
CN112527674B (zh) | Ai框架的安全评测方法、装置、设备及存储介质 | |
US9652358B1 (en) | Type widening for source code analysis | |
Santolucito et al. | Learning CI configuration correctness for early build feedback | |
US11755458B2 (en) | Automatic software behavior identification using execution record | |
CN111352631A (zh) | 一种接口兼容性检测方法及装置 | |
Nguyen et al. | Interaction-based tracking of program entities for test case evolution | |
Lavoie et al. | A case study of TTCN-3 test scripts clone analysis in an industrial telecommunication setting | |
US11556444B1 (en) | Electronic system for static program code analysis and detection of architectural flaws | |
CN114924762A (zh) | 一种组件升级适配检测方法及装置 | |
CN113031964B (zh) | 一种大数据应用的管理方法、装置、设备及存储介质 | |
Novendra et al. | Emerging Trends in Code Quality: Introducing Kotlin-Specific Bad Smell Detection Tool for Android Apps | |
US20240248691A1 (en) | Detecting software code anomalies based on organizational information | |
US20230169170A1 (en) | Techniques for fixing configuration and for fixing code using contextually enriched alerts | |
US20240061675A1 (en) | Source code correction system | |
CN117827268A (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 |