CN111782266B - 软件性能基准确定方法及装置 - Google Patents
软件性能基准确定方法及装置 Download PDFInfo
- Publication number
- CN111782266B CN111782266B CN202010596163.6A CN202010596163A CN111782266B CN 111782266 B CN111782266 B CN 111782266B CN 202010596163 A CN202010596163 A CN 202010596163A CN 111782266 B CN111782266 B CN 111782266B
- Authority
- CN
- China
- Prior art keywords
- program
- complexity
- call
- application program
- call chain
- 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
Links
Classifications
-
- 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/77—Software metrics
-
- 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/75—Structural analysis for program understanding
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请提供了一种软件性能基准确定方法及装置,该软件性能基准确定方法包括:对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;根据所述调用链关系及调用路径图生成交易的程序复杂度;根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值。利用本申请,可以在不需要发起大并发的压力的情况下,分析预测得到具体交易基于标准资源服务器的性能基准指标,不需要搭建真实的复杂的性能测试环境,不需要准备和调试性能测试脚本和数据,也不需要发起实际的大并发的性能测试。
Description
技术领域
本申请是关于软件性能测试技术,特别是关于一种软件性能基准确定方法及装置。
背景技术
目前的性能测试大部分都是以项目为单位,一个项目编码完毕,要重新搭建此项目涉及的全流程的模拟生产的测试环境,对软件的交易发起完全真实的高并发测试,得到系统所能承受的压力,并得到稳定情况下的性能指标,包括TPS(每秒交易数)、响应时间等。目前传统的性能测试方法,没有建立起一个标准的基准,纵向相类似的项目之间没有比较关系,横向同类型的应用之间也没有参考作用,导致每一个项目的性能测试基本都是从零开始,目标和结果都存在较大的不确定性。
发明内容
本申请提供了一种软件性能基准确定方法及装置,以在不需要发起大并发的压力的情况下,分析预测得到具体交易基于标准资源服务器的性能基准指标,不需要搭建真实的复杂的性能测试环境,不需要准备和调试性能测试脚本和数据,也不需要发起实际的大并发的性能测试。
根据本申请的一个方面,提供了一种软件性能基准确定方法,该软件性能基准确定方法包括:
对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
根据所述调用链关系及调用路径图生成交易的程序复杂度;
根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值。
一实施例中,所述对应用程序的源代码进行静态分析,得到应用程序的调用链关系,包括:
对所述源代码进行语法分析得到语法节点集合;
根据所述语法节点集合的输入输出元素,分析得到语句执行路线的集合。
一实施例中,所述对应用程序的源代码进行静态分析,得到应用程序的复杂度数值,包括:
对所述源代码进行语法分析得到语法节点集合;
对每一个语法节点进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。
一实施例中,述对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图,包括:记录交易运行期间涉及的应用程序的调用情况,将所述调用情况整理成调用路径图。
一实施例中,所述根据所述调用链关系及调用路径图生成交易的程序复杂度,包括:
利用所述调用链关系及调用路径图分析交易的程序调用链;
根据所述程序调用链计算得到所述程序复杂度。
一实施例中,所述程序调用链包括主干链路及叶子链路,利用所述调用链关系及调用路径图分析交易的程序调用链,包括:将运行调用链确定为所述主干链路的程序集,将所述运行调用链经过应用程序的一级调用确定为叶子链路的程序集。
一实施例中,根据所述程序调用链计算得到所述程序复杂度,包括:
分别计算所述主干链路及叶子链路的复杂度;
将所述主干链路及叶子链路的复杂度进行合并,得到所述程序复杂度。
一实施例中,预先创建所述性能测试结果预测模型的步骤包括:
对交易进行性能测试得到性能测试结果数据;
对比根据所述程序复杂度及性能测试结果数据,训练得到所述性能测试结果预测模型。
根据本申请的一个方面,提供了一种软件性能基准确定装置,该软件性能基准确定装置包括:
静态分析单元,用于对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
动态分析单元,用于对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
程序复杂度生成单元,用于根据所述调用链关系及调用路径图生成交易的程序复杂度;
基准值生成单元,用于根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值。
一实施例中,所述静态分析单元包括:
语法节点集合生成模块,用于对所述源代码进行语法分析得到语法节点集合;
调用链关系生成模块,用于根据所述语法节点集合的输入输出元素,分析得到语句执行路线的集合。
一实施例中,所述静态分析单元包括:
语法节点集合生成模块,用于对所述源代码进行语法分析得到语法节点集合;
复杂度分析模块,用于对每一个语法节点进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。
一实施例中,所述动态分析单元具体用于:记录交易运行期间涉及的应用程序的调用情况,将所述调用情况整理成调用路径图。
一实施例中,所述程序复杂度生成单元包括:
调用链分析模块,用于利用所述调用链关系及调用路径图分析交易的程序调用链;
程序复杂度计算模块,用于根据所述程序调用链计算得到所述程序复杂度。
一实施例中,所述程序调用链包括主干链路及叶子链路,所述调用链分析模块具体用于:将运行调用链确定为所述主干链路的程序集,将所述运行调用链经过应用程序的一级调用确定为叶子链路的程序集。
一实施例中,所述程序复杂度计算模块,包括:
复杂度计算模块,用于分别计算所述主干链路及叶子链路的复杂度;
复杂度合并模块,用于将所述主干链路及叶子链路的复杂度进行合并,得到所述程序复杂度。
一实施例中,所述的软件性能基准确定装置还包括:
性能测试单元,用于对交易进行性能测试得到性能测试结果数据;
模型训练单元,用于对比根据所述程序复杂度及性能测试结果数据,训练得到所述性能测试结果预测模型。
根据本申请的一个方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的软件性能基准确定方法。
根据本申请的一个方面,提供了一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的软件性能基准确定方法。
利用本申请,可以在不需要发起大并发的压力的情况下,分析预测得到具体交易基于标准资源服务器的性能基准指标,不需要搭建真实的复杂的性能测试环境,不需要准备和调试性能测试脚本和数据,也不需要发起实际的大并发的性能测试。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例的软件性能基准确定方法流程图;
图2为本申请一实施例的S101的方法流程图;
图3为本申请实施例的调用链关系图的示例;
图4为本申请另一实施例的S101的方法流程图;
图5为本申请一实施例的S103的方法流程图;
图6为本申请一实施例的S502的方法流程图;
图7为本申请实施例创建所述性能测试结果预测模型的方法流程图;
图8为本申请实施例的电子设备800的系统构成的示意框图;
图9为本申请一实施例的软件性能基准确定装置的结构框图;
图10为本申请一实施例的静态分析单元901的结构框图;
图11为本申请另一实施例的静态分析单元901的结构框图;
图12为本申请实施例的程序复杂度生成单元903的结构框图;
图13为本申请实施例的程序复杂度计算模块1202的结构框图;
图14为本申请另一实施例的软件性能基准确定装置的结构框图;
图15为本申请另一实施例的软件性能基准确定流程图;
图16为本申请实施例的软件性能基准确定系统结构示意图;
图17是本申请实施例的基准分析模块结构框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图1为本申请实施例的软件性能基准确定方法流程图,如图1所示,该软件性能基准确定方法包括:
S101:对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
对于调用链关系的获得,需要从配置管理系统中获取到最新的应用程序的源代码,在不运行待分析的应用程序的前提下,对应用程序的源代码进行语法分析,得到应用程序中所有语法节点的集合,在此基础上,根据语法节点集合的输入输出元素,分析得到语句执行路线的集合,得到程序的调用链关系。
S102:对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
可以采用非注入的方法,记录具体交易运行至结束期间,涉及的所有应用程序的实际调用关系。具体地,在交易启动后,应用程序运行时记录应用程序的调用,然后整理成运行过程的调用路径图,并记录到数据集合中。
S103:根据所述调用链关系及调用路径图生成交易的程序复杂度;
程序复杂度包括:计算复杂度、空间复杂度、圈复杂度、数据访问复杂度等。结合静态代码分析的源码调用链关系和实际动态分析的运行调用路径图进分析,可以得到交易的程序调用链。
S104:根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值。
标准资源服务器是指特定一个规格的资源的服务器,一个例子是统一为4个标准内核Core(2.30GHz)、8G内存Memory的服务器。一般而言,每台计算机都配置有一个或者多个中央处理器CPU(Central Processing Unit),而每个中央处理器,可以配置一个或者多个内核(Core),CPU所有的计算、接受/存储命令、处理数据都由内核执行,即程序的正常运行、测试等过程,一般由中央处理器的内核执行,因此以内核数为基准。
上述流程的执行主体可以为服务器或终端,由上述流程可知,本申请首先对应用程序的源代码进行静态分析及动态分析,分别得到应用程序的调用链关系、复杂度数值及应用程序运行过程中的调用路径图,然后根据所述调用链关系及调用路径图生成交易的程序复杂度;最后根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值,可以在不需要发起大并发的压力的情况下,分析预测得到具体交易基于标准资源服务器的性能基准指标,不需要搭建真实的复杂的性能测试环境,不需要准备和调试性能测试脚本和数据,也不需要发起实际的大并发的性能测试。
一实施例中,如图2所示,S101中,对应用程序的源代码进行静态分析,得到应用程序的调用链关系,包括如下步骤:
S201:对所述源代码进行语法分析得到语法节点集合;
具体实施时,需要从配置管理系统中获取到最新的应用程序的源代码。在不运行待分析的应用程序的前提下,对应用程序的源代码进行语法分析,得到应用程序中所有语法节点的集合。
S202:根据所述语法节点集合的输入输出元素,分析得到语句执行路线的集合。
在得到语法节点集合基础上,根据语法节点集合的输入输出元素,分析得到语句执行路线的集合,得到程序的调用链关系。
以Java语言为例,对源码进行语法分析,得到抽象语法树AST(AbstractSyntaxTree),类节点ClassOrInterfaceBody下是方法节点MethodDeclaration,方法节点下有语句节点Statement,其下的PrimaryPrefix下的Name属性是调用的方法名,而PrimarySuffix下的ArgumentList是调用的方法的参数列表,由此获得当前类下的各个方法的所有调用的方法及其参数,从而分析得到程序的所有的调用链关系图,图3为调用链关系图的示例。
一个简化的语法树示例如下所示:
-CompilationUnit根节点
-ClassOrInterfaceBody方法节点
-Statement语句节点
-PrimaryPrefix:Name调用的方法名
-PrimarySuffix:ArgumentList调用的方法的参数列表。
一实施例中,如图4所示,S101中,对应用程序的源代码进行静态分析,得到应用程序的复杂度数值,包括如下步骤:
S401:对所述源代码进行语法分析得到语法节点集合;
S402:对每一个语法节点进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。
对于复杂度数值的获得,需要从配置管理系统中获取到最新的应用程序的源代码进行语法分析,得到应用程序中所有语法节点的集合,在此基础上,对每一个语法节点,进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。得到应用程序的复杂度后,需要将该复杂度记录到数据集合中。
其中,时间复杂度描述一个算法执行时间与数据规模的增长关系,通常用T(n)=O(f(n))来表示,这里的n表示数据的规模,f(n)是每行代码执行的次数总和,其重点在于增长关系,通常只需要考虑n的增长规模。
类似地,空间复杂度描述一个算法占用空间与数据规模的增长关系,圈复杂度主要是用来衡量一个模块结构的复杂程度。
数据访问复杂度,则是对于程序节点所有的数据访问的语句,根据每种不同类型的语句对应的复杂度系数,进行叠加计算得到。对于不同类型的语句根据实际响应时间等要素,可以定义一种复杂度系数如下参考值,如表1所示。
表1
S102具体实施时,可以记录交易运行期间涉及的应用程序的调用情况,将所述调用情况整理成调用路径图。
在测试环境下,利用应用程序特定的启动参数启动服务,然后发起一笔交易,自动记录程序运行时的调用情况,然后整理成运行过程的调用路径图。
对于不同的程序设计语言,具体的动态分析方法不同,如C语言可以借助gprof的call graph功能(参数-q),也可以利用GCC的-finstrument-functions参数;而JAVA语言则可以使用在JVM启动参数中调用Javaassist等方式,自动在每个程序函数(又称方法)的进入和退出点打探针。动态分析是记录程序实际运行时的程序调用情况,与静态分析相比,它能获得更多的信息,比如程序调用的先后顺序和次数。其缺点,是应用程序中语句的某些分支可能没有执行到,这些分支中调用的应用程序就无法记录下来。
一实施例中,如图5所示,S103包括如下步骤:
S501:利用所述调用链关系及调用路径图分析交易的程序调用链;
所述程序调用链包括主干链路及叶子链路,一实施例中,利用所述调用链关系及调用路径图分析交易的程序调用链,包括:
将运行调用链确定为所述主干链路的程序集,将所述运行调用链经过应用程序的一级调用确定为叶子链路的程序集。该叶子链路的为主干链路的应用程序直接调用的。
叶子链路主要是指交易调用链所经过的应用程序的所有的一级调用,即被主干链路的程序直接调用的、且此被调用程序不是主干链路的程序。对于二级以上的调用,即叶子链路再次调用其它应用程序,并不需要放在叶子链路集合里面。例如,A程序是在交易的实际过程中调用到的,然后A程序里面调用了B程序和C程序,而B程序调用了D程序,那么A程序是属于主干链路的一个程序;B程序和C程序,都是A程序的一级调用,所以B程序和C程序都属于叶子链路的程序;D程序因为是A程序的二级调用(A程序调用B程序,B程序调用D程序),所以D程序既不属于主干链路也不属于叶子链路的程序。
以JAVA语言为例,本申请还根据抽象语法树,进一步限定仅满足处于如下语法节点下的被调用程序,才是特定的叶子链路,如表2所示:
表2
JAVA语言 | 抽象语法树节点ASTNode | 解释 |
If | IfStatement | If语句 |
Case | SwitchCase | SwitchCase语句 |
For | ForStatement | For循环 |
While | WhileStatement | While循环 |
Do | DoStatement | Do..while循环 |
&& | InfixExpression | 逻辑与 |
|| | InfixExpression | 逻辑或 |
:? | ConditionalExpression | 三目运算符 |
此限定的目的是考虑类似如下的代码:
在某次单笔交易运行过程中,因条件1不满足,仅调用了主干路径的B_function,但实际上不同的场景中因数据多样性可能因另一次交易会因条件1被满足而调用到A_function(是叶子链路),因此需要考虑此特定叶子链路的程序的复杂度,而其余非此特定的叶子链路的程序,预计业务流程不会被执行到因此可忽略。
一般来说,交易的总的复杂度(程序复杂度),主要因素是取决于交易的主干链路的复杂度,但是因为主干链路是根据一次交易的实际调用过程得到,对于应用程序中语句的某些分支可能由于数据原因而没有执行到,导致主干链路中没有记录下这些分支中调用的程序,而实际交易过程中因为数据的多样性和复杂性,一些分支尤其是主干链路直接调用到的程序,对于整个交易处理是有一定影响的,因此本申请除了取主干链路的复杂度,还考虑分支叶子链路的复杂度。
S502:根据所述程序调用链计算得到所述程序复杂度。
一实施例中,如图6所示,S502包括如下步骤:
S601:分别计算所述主干链路及叶子链路的复杂度;
分别对主干链路的程序集和叶子链路的程序集,根据其各个程序的复杂度,计算得到主干链路的复杂度main(C)及叶子链路的复杂度branch(C):
主干链路复杂度:
叶子链路复杂度:
S602:将所述主干链路及叶子链路的复杂度进行合并,得到所述程序复杂度。
程序复杂度f(C)如下:
f(C)=p(m×main(C)+n×branch(C))
其中,T是计算复杂度,S是空间复杂度,O是圈复杂度,D是数据访问复杂度,m是主干链路权重,n是叶子链路的权重,而p则是语言类型的调节系数(如C语言编写的程序效率高于JAVA程序,则C语言编写的程序的此值可能就会小)。
一实施例中,如图7所示,预先创建所述性能测试结果预测模型的步骤包括:
S701:对交易进行性能测试得到性能测试结果数据;
具体实施时,可以使用标准资源服务器,对交易做实际的性能测试得到真实的性能测试结果数据。
S702:对比根据所述程序复杂度及性能测试结果数据,训练得到所述性能测试结果预测模型。
对比实际性能测试结果数据和上述得到交易的程序复杂度,尝试得到a、b、c、d等各个变量的最佳值,如此往复,不断训练性能测试结果预测模型。训练过程中,也可以根据之前项目已经完成的性能测试结果数据,由之前的实际测试的服务器的资源,折算成使用标准资源服务器时的性能结果数据,可充分利用已有项目的测试结果,加大训练样本,提高性能测试结果预测模型的准确度。
如果有新的项目的交易需要做性能测试,则利用性能测试结果预测模型,即可预判到该交易在标准资源服务器上的预期的性能指标,为实际性能测试提供参考,同时结合生产预计的交易量所需的性能要求,可提前预判生产资源配置需求。得到新的性能基准值可以存储到数据集合中。
图15为本申请另一实施例的软件性能基准确定流程图,如图15所示,该软件性能基准确定方法包括如下步骤:
步骤S01:获取源代码。从配置管理系统中,获取到最新的应用程序的源代码。
步骤S02:对源码做语法分析。对源码的调用关系做静态分析。在不运行待分析的应用程序的前提下,对应用程序的源代码进行语法分析,得到应用程序中所有语法节点的集合。
步骤S03:在语法分析的基础上,根据语法节点集合的输入输出元素,分析得到语句执行路线的集合,从而得到应用程序的调用链关系。
步骤S04:在语法分析的基础上,对每一个语法节点,进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。
步骤S05:对所述应用程序运行时做动态分析。在测试环境,利用应用程序特定的启动参数,启动服务,然后发起一笔交易,自动记录程序运行时的调用情况,然后整理成运行过程的调用路径图。
步骤S06:对交易的性能做基准分析。结合静态代码分析的源码调用分析图和实际动态分析的运行调用分析图,分析得到交易的应用程序调用链,具体为将运行调用链确定为主干链路,将运行调用链所经过的程序的一级调用认为是叶子链路,然后根据主干链路和叶子链路上所有的程序的复杂度,包括计算复杂度、空间复杂度和圈复杂度,计算得到此交易的总的程序复杂度,进而将根据交易的总复杂度,使用性能测试结果预测模型,换算为在标准资源服务器上的性能基准值。
步骤S07:更新性能基准数据。将具体交易基于标准资源服务器的性能基准指标记录到数据集合中。
本申请结合源代码的静态代码分析和单笔程序实际运行,并不需要发起大并发的压力,即可分析预测得到具体交易基于标准资源服务器的性能基准指标,为实际性能测试提供重要参考,令项目的性能测试从一开始就有明确的标准目标,保障应用性能。
由于本申请不需要搭建真实的复杂的性能测试环境,也不需要准备和调试性能测试脚本和数据,不需要发起实际的大并发的性能测试,因此所需成本较低,且可以快速获取到预测指标,在项目研发前期即可对系统的性能有一定预期。
利用本申请,可以建立已经完成的性能测试的结果的基准参考全视图,对于同类型的应用、相类似的项目,持续发挥参考作用,并构建各个版本的主要性能指标构成的曲线,执行“下一个版本的性能至少不比上一个版本更差”策略,保证应用的性能一直具有变好的趋势。
基于同一发明构思,本申请实施例还提供了一种软件性能基准确定装置,可以用于实现上述实施例所描述的方法,如下面的实施例所述。由于软件性能基准确定装置解决问题的原理与软件性能基准确定方法相似,因此软件性能基准确定装置的实施可以参见基于软件性能基准确定方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的系统较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图9为本申请实施例的软件性能基准确定装置的结构框图,如图9所示,该软件性能基准确定装置包括:
静态分析单元901,用于对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
动态分析单元902,用于对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
程序复杂度生成单元903,用于根据所述调用链关系及调用路径图生成交易的程序复杂度;
基准值生成单元904,用于根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值。
一实施例中,如图10所示,所述静态分析单元901包括:
语法节点集合生成模块1001,用于对所述源代码进行语法分析得到语法节点集合;
调用链关系生成模块1002,用于根据所述语法节点集合的输入输出元素,分析得到语句执行路线的集合。
一实施例中,如图11所示,所述静态分析单元901包括:
语法节点集合生成模块1101,用于对所述源代码进行语法分析得到语法节点集合;
复杂度分析模块1102,用于对每一个语法节点进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。
一实施例中,所述动态分析单元902具体用于:记录交易运行期间涉及的应用程序的调用情况,将所述调用情况整理成调用路径图。
一实施例中,如图12所示,所述程序复杂度生成单元903包括:
调用链分析模块1201,用于利用所述调用链关系及调用路径图分析交易的程序调用链;
程序复杂度计算模块1202,用于根据所述程序调用链计算得到所述程序复杂度。
一实施例中,所述程序调用链包括主干链路及叶子链路。所述调用链分析模块1201具体用于:将运行调用链确定为所述主干链路的程序集,将所述运行调用链经过应用程序的一级调用确定为叶子链路的程序集。
一实施例中,如图13所示,所述程序复杂度计算模块1202,包括:
复杂度计算模块1301,用于分别计算所述主干链路及叶子链路的复杂度;
复杂度合并模块1302,用于将所述主干链路及叶子链路的复杂度进行合并,得到所述程序复杂度。
一实施例中,如图14所示,所述软件性能基准确定装置还包括:
性能测试单元1401,用于对交易进行性能测试得到性能测试结果数据;
模型训练单元1402,用于对比根据所述程序复杂度及性能测试结果数据,训练得到所述性能测试结果预测模型。
本申请结合源代码的静态代码分析和单笔程序实际运行,并不需要发起大并发的压力,即可分析预测得到具体交易基于标准资源服务器的性能基准指标,为实际性能测试提供重要参考,令项目的性能测试从一开始就有明确的标准目标,保障应用性能。
由于本申请不需要搭建真实的复杂的性能测试环境,也不需要准备和调试性能测试脚本和数据,不需要发起实际的大并发的性能测试,因此所需成本较低,且可以快速获取到预测指标,在项目研发前期即可对系统的性能有一定预期。
利用本申请,可以建立已经完成的性能测试的结果的基准参考全视图,对于同类型的应用、相类似的项目,持续发挥参考作用,并构建各个版本的主要性能指标构成的曲线,执行“下一个版本的性能至少不比上一个版本更差”策略,保证应用的性能一直具有变好的趋势。
本申请实施例提供了一种软件性能基准确定系统,如图16所示,软件性能基准确定系统包括:静态分析装置1、运行动态分析装置2及性能基准分析装置3。静态分析装置1可以用来实现静态分析单元901的功能,运行动态分析装置2用来实现动态分析单元902的功能,性能基准分析装置3用来实现程序复杂度生成单元903及基准值生成单元904的功能。
代码静态分析装置1通过对源代码的静态代码分析,获取得到应用程序调用链的全视图关系以及各个程序的复杂度数值。如图16所示,代码静态分析装置1包括:源码调用分析模块11、源码调用记录模块12、复杂度分析模块13以及复杂度记录模块14。
源码调用分析模块11从配置管理系统中获取到最新的应用程序的源代码,在不运行待分析的应用程序的前提下,对应用程序的源代码进行语法分析,得到应用程序中所有语法节点的集合,在此基础上,根据语法节点集合的输入输出元素,分析得到语句执行路线的集合,从而得到应用程序的调用链关系。
源码调用记录模块12负责将源码调用分析模块11分析得到的程序的调用链关系记录到数据集合中。
复杂度分析模块13从配置管理系统中,获取到最新的应用程序的源代码,进行语法分析,得到应用程序中所有语法节点的集合,在此基础上,对每一个语法节点,进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。
复杂度记录模块14负责将复杂度分析模块13分析得到的程序的复杂度记录到数据集合中。
运行动态分析装置2采用非注入的技术方法,记录具体交易运行至结束期间,涉及的所有应用程序的实际调用关系。如图16所示,运行动态分析装置2包括运行调用分析模块21及运行调用记录模块22。
运行调用分析模块21利用应用程序特定的启动参数,在交易启动后,应用程序运行时记录程序的调用,然后整理成运行过程的调用路径图。
运行调用记录模块22负责将运行调用分析模块21分析得到的交易涉及到的所有应用程序的动态的实际运行调用链记录到数据集合中。
性能基准分析装置3根据程序调用关系(源码静态调用和交易运行调用)及复杂度数据,分析得到具体交易基于标准资源服务器的性能基准指标。如图16所示,性能基准分析装置3包括基准分析模块31、基准记录模块32。
基准分析模块31结合静态代码分析的源码调用分析图和实际动态分析的运行调用分析图,分析得到交易的应用程序调用链,具体为将运行调用链确定为主干链路,将运行调用链所经过的程序的一级调用认为是叶子链路,然后根据主干链路和叶子链路上所有的程序的复杂度,包括计算复杂度、空间复杂度和圈复杂度,计算得到此交易的总的程序复杂度,进而将根据交易的总复杂度,使用性能测试结果预测模型,换算为在标准资源服务器上的性能基准值。
一实施例中,如图17所示,所述基准分析模块31包括主干调用链分析模块311、叶子调用链分析模块312、交易复杂度分析模块313、基准值模型分析模块314。
主干调用链分析模块311将实际动态运行分析得到的交易调用链所经过的应用程序,确定为交易的主干链路的程序集。
叶子调用链分析模块312将交易调用链所经过的应用程序,其所有一级调用(被主干链路的程序直接调用的)、且被调用程序不是主干链路的应用程序,纳入到交易的子链路的程序集。
一般来说,交易的总的复杂度,主要因素是取决于交易的主干链路的复杂度,但是因为主干链路是根据一次交易的实际调用过程得到,对于程序中语句的某些分支可能由于数据原因而没有执行到,导致主干链路中没有记录下这些分支中调用的程序,而实际交易过程中因为数据的多样性和复杂性,一些分支尤其是主干链路直接调用到的程序,对于整个交易处理是有一定影响的。因此本申请除了考虑主干链路的复杂度,还考虑分值叶子链路的复杂度。
交易复杂度分析模块313分别对主干链路的程序集,和叶子链路的程序集,根据其各个程序的复杂度,计算得到两条链路的复杂度,并合并为此交易的总的复杂度。
基准值模型分析模块314利用机器学习平台,训练性能测试结果预测模型。训练方法为:使用标准资源服务器,对交易做实际的性能测试得到真实的性能测试结果数据;根据交易复杂度分析模块313得到交易的总复杂度;对比实际性能测试结果数据和上述得到交易的程序复杂度,尝试得到a、b、c、d等各个变量的最佳值,如此往复,不断训练性能测试结果预测模型。训练过程中,也可以根据之前项目已经完成的性能测试结果数据,由之前的实际测试的服务器的资源,折算成使用标准资源服务器时的性能结果数据,可充分利用已有项目的测试结果,加大训练样本,提高性能测试结果预测模型的准确度。
如果有新的项目的交易需要做性能测试,则利用性能测试结果预测模型,即可预判到该交易在标准资源服务器上的预期的性能指标,为实际性能测试提供参考,同时结合生产预计的交易量所需的性能要求,可提前预判生产资源配置需求。
基准记录模块32负责将基准分析模块31分析得到的具体交易基于标准资源服务器的性能基准指标记录到数据集合中。
本申请实施例的软件性能基准确定系统,结合源代码的静态代码分析和单笔程序实际运行,并不需要发起大并发的压力,即可分析预测得到具体交易基于标准资源服务器的性能基准指标,为实际性能测试提供重要参考,令项目的性能测试从一开始就有明确的标准目标,保障应用性能。
由于本申请不需要搭建真实的复杂的性能测试环境,也不需要准备和调试性能测试脚本和数据,不需要发起实际的大并发的性能测试,因此所需成本较低,且可以快速获取到预测指标,在项目研发前期即可对系统的性能有一定预期。
利用本申请,可以建立已经完成的性能测试的结果的基准参考全视图,对于同类型的应用、相类似的项目,持续发挥参考作用,并构建各个版本的主要性能指标构成的曲线,执行“下一个版本的性能至少不比上一个版本更差”策略,保证应用的性能一直具有变好的趋势。
从硬件层面来说,本申请提供一种软件性能基准确定方法中的全部或部分内容的电子设备的实施例,所述电子设备具体包含有如下内容:
处理器(processor)、存储器(memory)、通信接口(Communications Interface)和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于实现信息传输;该电子设备可以是台式计算机、平板电脑及移动终端等,本实施例不限于此。在本实施例中,该电子设备可以参照实施例中的软件性能基准确定方法的实施例,以及软件性能基准确定装置的实施例进行实施,其内容被合并于此,重复之处不再赘述。
图8为本申请实施例的电子设备800的系统构成的示意框图。如图8所示,该电子设备800可以包括中央处理器100和存储器140;存储器140耦合到中央处理器100。值得注意的是,该图8是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
一实施例中,软件性能基准确定功能可以被集成到中央处理器100中。其中,中央处理器100可以被配置为进行如下控制:
S101:对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
S102:对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
S103:根据所述调用链关系及调用路径图生成交易的程序复杂度;
S104:根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值。
从上述描述可知,本申请的实施例提供的电子设备,可以在不需要发起大并发的压力的情况下,分析预测得到具体交易基于标准资源服务器的性能基准指标,不需要搭建真实的复杂的性能测试环境,不需要准备和调试性能测试脚本和数据,也不需要发起实际的大并发的性能测试。
在另一个实施方式中,终端或服务器可以与中央处理器100分开配置,例如可以将终端或服务器为与中央处理器100连接的芯片,通过中央处理器的控制来实现软件性能基准确定功能。
如图8所示,该电子设备1000还可以包括:通信模块110、输入单元120、音频处理器130、显示器160、电源170。值得注意的是,电子设备1000也并不是必须要包括图8中所示的所有部件;此外,电子设备1000还可以包括图8中没有示出的部件,可以参考现有技术。
如图8所示,中央处理器100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器100接收输入并控制电子设备1000的各个部件的操作。
其中,存储器140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器100可执行该存储器140存储的该程序,以实现信息存储或处理等。
输入单元120向中央处理器100提供输入。该输入单元120例如为按键或触摸输入装置。电源170用于向电子设备1000提供电力。显示器160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器140还可以是某种其它类型的装置。存储器140包括缓冲存储器141(有时被称为缓冲器)。存储器140可以包括应用/功能存储部142,该应用/功能存储部142用于存储应用程序和功能程序或用于通过中央处理器100执行电子设备1000的操作的流程。
存储器140还可以包括数据存储部143,该数据存储部143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器140的驱动程序存储部144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块110即为经由天线111发送和接收信号的发送机/接收机110。通信模块(发送机/接收机)110耦合到中央处理器100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)110还经由音频处理器130耦合到扬声器131和麦克风132,以经由扬声器131提供音频输出,并接收来自麦克风132的音频输入,从而实现通常的电信功能。音频处理器130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器130还耦合到中央处理器100,从而使得可以通过麦克风132能够在本机上录音,且使得可以通过扬声器131来播放本机上存储的声音。
本申请的实施例还提供能够实现上述实施例中的执行主体为服务器或客户端的软件性能基准确定方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的执行主体为服务器或客户端的软件性能基准确定的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
S101:对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
S102:对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
S103:根据所述调用链关系及调用路径图生成交易的程序复杂度;
S104:根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值。
从上述描述可知,本申请的实施例提供的电子设备,可以在不需要发起大并发的压力的情况下,分析预测得到具体交易基于标准资源服务器的性能基准指标,不需要搭建真实的复杂的性能测试环境,不需要准备和调试性能测试脚本和数据,也不需要发起实际的大并发的性能测试。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本申请中应用了具体实施例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
Claims (8)
1.一种软件性能基准确定方法,其特征在于,包括:
对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
根据所述调用链关系及调用路径图生成交易的程序复杂度;
根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值;
所述根据所述调用链关系及调用路径图生成交易的程序复杂度,包括:
利用所述调用链关系及调用路径图分析交易的程序调用链;所述程序调用链包括主干链路及叶子链路;
根据所述程序调用链计算得到所述程序复杂度;
所述利用所述调用链关系及调用路径图分析交易的程序调用链,包括:将运行调用链确定为所述主干链路的程序集,将所述运行调用链经过应用程序的一级调用确定为叶子链路的程序集;
所述根据所述程序调用链计算得到所述程序复杂度,包括:
分别计算所述主干链路及叶子链路的复杂度;
将所述主干链路及叶子链路的复杂度进行合并,得到所述程序复杂度。
2.根据权利要求1所述的软件性能基准确定方法,其特征在于,所述对应用程序的源代码进行静态分析,得到应用程序的调用链关系,包括:
对所述源代码进行语法分析得到语法节点集合;
根据所述语法节点集合的输入输出元素,分析得到语句执行路线的集合。
3.根据权利要求1所述的软件性能基准确定方法,其特征在于,所述对应用程序的源代码进行静态分析,得到应用程序的复杂度数值,包括:
对所述源代码进行语法分析得到语法节点集合;
对每一个语法节点进行复杂度分析,判断当前语法节点的时间复杂度、空间复杂度、圈复杂度、数据访问复杂度。
4.根据权利要求1所述的软件性能基准确定方法,其特征在于,所述对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图,包括:记录交易运行期间涉及的应用程序的调用情况,将所述调用情况整理成调用路径图。
5.根据权利要求1所述的软件性能基准确定方法,其特征在于,预先创建所述性能测试结果预测模型的步骤包括:
对交易进行性能测试得到性能测试结果数据;
对比根据所述程序复杂度及性能测试结果数据,训练得到所述性能测试结果预测模型。
6.一种软件性能基准确定装置,其特征在于,包括:
静态分析单元,用于对应用程序的源代码进行静态分析,得到应用程序的调用链关系及复杂度数值;
动态分析单元,用于对所述应用程序进行动态分析,生成应用程序运行过程中的调用路径图;
程序复杂度生成单元,用于根据所述调用链关系及调用路径图生成交易的程序复杂度;
基准值生成单元,用于根据所述程序复杂度及预先创建的性能测试结果预测模型生成基于标准资源服务器的性能基准值;
所述程序复杂度生成单元具体用于:
利用所述调用链关系及调用路径图分析交易的程序调用链;所述程序调用链包括主干链路及叶子链路;
根据所述程序调用链计算得到所述程序复杂度;
所述利用所述调用链关系及调用路径图分析交易的程序调用链,包括:将运行调用链确定为所述主干链路的程序集,将所述运行调用链经过应用程序的一级调用确定为叶子链路的程序集;
所述根据所述程序调用链计算得到所述程序复杂度,包括:
分别计算所述主干链路及叶子链路的复杂度;
将所述主干链路及叶子链路的复杂度进行合并,得到所述程序复杂度。
7.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至5中任一项所述的软件性能基准确定方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至5中任一项所述的软件性能基准确定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010596163.6A CN111782266B (zh) | 2020-06-28 | 2020-06-28 | 软件性能基准确定方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010596163.6A CN111782266B (zh) | 2020-06-28 | 2020-06-28 | 软件性能基准确定方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111782266A CN111782266A (zh) | 2020-10-16 |
CN111782266B true CN111782266B (zh) | 2023-08-25 |
Family
ID=72760165
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010596163.6A Active CN111782266B (zh) | 2020-06-28 | 2020-06-28 | 软件性能基准确定方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111782266B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112862013A (zh) * | 2021-03-31 | 2021-05-28 | 中国工商银行股份有限公司 | 一种量化交易策略的问题诊断方法及装置 |
US11488621B1 (en) * | 2021-04-23 | 2022-11-01 | Tencent America LLC | Estimation through multiple measurements |
CN113127651A (zh) * | 2021-05-19 | 2021-07-16 | 中国银行股份有限公司 | 一种数据处理方法及装置 |
CN113297076B (zh) * | 2021-05-21 | 2023-06-23 | 建信金融科技有限责任公司 | 基于调用链图的服务变更识别方法及装置 |
CN114510419A (zh) * | 2022-01-28 | 2022-05-17 | 清华大学 | 性能分析编程框架、方法和装置 |
CN117992358B (zh) * | 2024-04-03 | 2024-07-09 | 湖南天河国云科技有限公司 | 基于区块链的智能合约跨合约测试方法及装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473171A (zh) * | 2013-08-28 | 2013-12-25 | 北京信息科技大学 | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 |
CN110109702A (zh) * | 2019-05-16 | 2019-08-09 | 福州大学 | 基于代码分析的Android计算迁移在线决策方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2684348A1 (en) * | 2009-11-04 | 2011-05-04 | Ibm Canada Limited - Ibm Canada Limitee | Algorithm complexity identification |
-
2020
- 2020-06-28 CN CN202010596163.6A patent/CN111782266B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103473171A (zh) * | 2013-08-28 | 2013-12-25 | 北京信息科技大学 | 一种基于函数调用路径的覆盖率动态跟踪方法及装置 |
CN110109702A (zh) * | 2019-05-16 | 2019-08-09 | 福州大学 | 基于代码分析的Android计算迁移在线决策方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111782266A (zh) | 2020-10-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111782266B (zh) | 软件性能基准确定方法及装置 | |
US10642721B2 (en) | Generation of automated testing scripts by converting manual test cases | |
US20220318945A1 (en) | Optimizing compilation of shaders | |
CN111369976A (zh) | 测试语音识别设备的方法及测试装置 | |
CN108595342A (zh) | 单元测试方法和装置 | |
CN112783793B (zh) | 自动化接口测试系统及方法 | |
US11093307B2 (en) | Platform for supporting multiple virtual agent applications | |
CN112463634A (zh) | 微服务架构下的软件测试方法及装置 | |
CN117034821B (zh) | 用于芯片设计前端仿真验证的回归验证方法及介质 | |
CN113051163A (zh) | 单元测试方法、装置、电子设备及存储介质 | |
CN110532182A (zh) | 一种虚拟化平台的自动化测试方法及装置 | |
CN117493830A (zh) | 训练数据质量的评估、评估模型的生成方法、装置及设备 | |
CN102426567A (zh) | 一种自动应答系统的图形化编辑调试系统 | |
CN109473121A (zh) | 语音合成质量测试方法及装置 | |
CN113419941A (zh) | 评估方法及装置、电子设备和计算机可读存储介质 | |
CN117827879A (zh) | 一种存储过程的转换方法、装置、设备及介质 | |
CN117235527A (zh) | 端到端容器化的大数据模型构建方法、装置、设备及介质 | |
CN113419957B (zh) | 基于规则的大数据离线批处理性能容量扫描方法及装置 | |
CN113157590B (zh) | 测试案例生成方法及装置 | |
CN115701591A (zh) | 业务流程测试方法、装置、介质及电子设备 | |
CN113609017A (zh) | 接口测试案例生成方法及装置 | |
CN114004057A (zh) | 射频链路快速仿真及器件自动选优的方法和系统 | |
CN112749094A (zh) | 测试案例生成方法及装置 | |
CN113377677B (zh) | 一种单元测试方法及装置 | |
CN118261143B (zh) | Unity环境下的Json数据解析方法、装置、设备及介质 |
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 |