CN107451050B - 函数获取方法和装置、服务器 - Google Patents

函数获取方法和装置、服务器 Download PDF

Info

Publication number
CN107451050B
CN107451050B CN201710468198.XA CN201710468198A CN107451050B CN 107451050 B CN107451050 B CN 107451050B CN 201710468198 A CN201710468198 A CN 201710468198A CN 107451050 B CN107451050 B CN 107451050B
Authority
CN
China
Prior art keywords
function
node
service system
function identifier
identifier
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
CN201710468198.XA
Other languages
English (en)
Other versions
CN107451050A (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.)
Advanced New Technologies Co Ltd
Advantageous New Technologies Co Ltd
Original Assignee
Alibaba Group Holding 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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201710468198.XA priority Critical patent/CN107451050B/zh
Publication of CN107451050A publication Critical patent/CN107451050A/zh
Application granted granted Critical
Publication of CN107451050B publication Critical patent/CN107451050B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/3684Test management for test design, e.g. generating new test cases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Telephonic Communication Services (AREA)

Abstract

本申请实施例公开了一种函数获取方法和装置、服务器。所述方法包括:获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。

Description

函数获取方法和装置、服务器
技术领域
本申请涉及计算机技术领域,特别涉及一种函数获取方法和装置、服务器。
背景技术
在软件生命周期中,当一个软件自身发生代码升级、版本迭代或者漏洞修复等变化时,或者,与该软件相关联的其它软件发生代码升级、版本迭代或者漏洞修复等变化时,通常需要对该软件进行测试,以保证上述变化不会破坏该软件原有功能。在软件测试过程中,通常需要执行一定数量测试用例。鉴于执行所有测试用例会带来测试效率低下的问题,测试人员通常需要分析受上述变化所影响的接口函数,并根据受影响接口函数来筛选执行部分测试用例,以提高测试效率。
现有技术中,在分析受上述变化所影响的接口函数时,测试人员通常只关注该软件自身接口函数是否发生变化,或者,与该软件相关联其它软件的接口函数是否发生变化。当该软件自身接口函数发生变化时,测试人员可以直接将发生变化接口函数作为受影响的接口函数。当与该软件相关联其它软件的接口函数发生变化时,测试人员可以将其它软件中发生变化的接口函数作为目标函数,可以从该软件中获取与所述目标函数之间具有调用关系的接口函数,可以将获取接口函数作为受影响的接口函数。
在实现本申请过程中,发明人发现现有技术中至少存在如下问题:
上述现有技术中,在分析上述变化所影响的接口函数时,测试人员通常只关注该软件自身接口函数是否发生变化,或者,与该软件相关联其它软件的接口函数是否发生变化。然而,该软件自身非接口函数的变化,或者,与该软件相关联其它软件的非接口函数的变化,也有可能影响到该软件的接口函数。因此,上述现有技术无法准确分析出受软件变化所影响的接口函数,有可能导致测试人员无法筛选出恰当的测试用例。
发明内容
本申请实施例的目的是提供一种函数获取方法和装置、服务器,以准确分析出受软件变化所影响的接口函数,帮助测试人员筛选出恰当的测试用例。
本申请提供的一种函数获取方法和装置、服务器是包括以下方式实现的:
一种函数获取方法,所述方法包括:
获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;
构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;
使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
一种服务器,所述服务器包括存储器和处理器;
所述存储器,用于存储计算机程序指令;
所述处理器,用于读取并执行所述计算机程序指令;获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
一种函数获取装置,所述装置包括:
函数标识获取单元,用于获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;
节点关联网络构建单元,用于构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;
接口节点获取单元,用于使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
由以上本申请实施例提供的技术方案可见,本申请实施例服务器可以获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;可以构建节点关联网络,其中,所述节点关联网络包括至少一个节点,每个节点为第二业务***中一个函数的函数标识,所述节点关联网络包括节点间的有向关联关系;可以使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点,其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。与现有技术相比,所述第一业务***与所述第二业务***可以相同或不同;所述函数标识集合可以包括所述第一业务***中,发生变更的接口函数的函数标识或者非接口函数的函数标识。因此,本申请实施例服务器可以分析出受软件自身接口函数或非接口函数的变更,以及与该软件相关联的其它软件接口函数或非接口函数的变更,所影响的接口函数。因此,本申请实施例可以准确分析出受软件变化所影响的接口函数,从而能够帮助测试人员筛选出恰当的测试用例。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例一种函数获取方法的流程图
图2为本申请实施例一种节点关联网络的示意图;
图3为本申请实施例另一种节点关联网络的示意图;
图4为本申请实施例一种服务器的功能结构示意图;
图5为本申请实施例一种函数获取装置的功能结构示意图;
图6为本申请实施例从节点关联网络中获取至少一个接口节点的流程图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
请参阅图1。本申请实施例提供一种函数获取方法。所述函数获取方法以服务器为执行主体。所述服务器可以为一个服务器,还可以为包括多个服务器的服务器集群。所述函数获取方法可以包括以下步骤。
步骤S11:获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识。
在本实施例中,所述第一业务系数的数量可以为一个或多个。所述第一业务***例如可以为余额宝、基金、定期等业务***。所述函数可以理解为能够实现一定功能的计算机程序指令集合。所述函数标识可以用于标识一个函数,具体可以为函数的名称或编码等。例如,产品信息查询函数QueryProductById()的函数标识可以为产品信息查询函数的名称QueryProductById。
在本实施例中,所述第一业务***中函数的数量可以为一个或多个。所述第一业务***自身源代码的变化,可能导致所述第一业务***接口函数和/或非接口函数的变更。例如,开发人员对所述第一业务***的软件漏洞进行了修复,可能导致所述第一业务***接口函数和/或非接口函数的变更。如此,所述服务器可以通过版本控制工具来获取所述第一业务***当前版本的源代码和历史版本的源代码;可以基于所述第一业务***当前版本的源代码和历史版本的源代码,获取所述第一业务***发生变更函数的函数标识;可以将所述第一业务***发生变更函数的函数标识,作为函数标识集合中的函数标识。其中,所述版本控制工具为用于提供软件版本管理功能,以及用于存储、记录、追踪软件版本修改历史的计算机软件。所述版本控制工具例如可以为SVN(Subversion,一种跨平台的开源版本控制工具)、Git(一种开源的分布式版本控制工具)等。所述第一业务***发生变更函数例如可以为新增的函数、修改的函数、和删除的函数等。
所述服务器可以比较所述第一业务***当前版本的源代码和历史版本的源代码,得到所述第一业务***发生变更函数的函数标识。当然,所述服务器还可以构建所述第一业务***当前版本源代码的抽象语法树和历史版本源代码的抽象语法树;可以基于所述第一业务***当前版本源代码的抽象语法树,获取所述第一业务***当前版本中各个函数的函数标识,作为第一函数标识集合中的函数标识;可以基于所述第一业务***历史版本源代码的抽象语法树,获取所述第一业务***历史版本中各个函数的函数标识,作为第二函数标识集合中的函数标识;可以比较所述第一函数标识集合和所述第二函数标识集合中的函数标识,得到所述第一业务***发生变更函数的函数标识。其中,所述抽象语法树(AST,Abstract Syntax Tree)为源代码抽象语法结构的树状表现形式。
或者,在本实施例中,为了简化第一业务***的实现,对于比较成熟的功能,开发人员可以在所述第一业务***中引入用于实现该功能的第三方计算机程序。所述第三方计算机程序可以为开源的程序包,例如,Spring(一种开源框架)、Struts(一种开源框架)等。这里,可以将所述第一业务***引入的第三方计算机程序,作为所述第一业务***的组成部分。即,可以认为所述第一业务***包括所述第三方计算机程序。如此,所述服务器可以获取所述第三方计算机程序当前版本的源代码和历史版本的源代码;可以基于所述第三方计算机程序当前版本的源代码和历史版本的源代码,获取所述第三方计算机程序发生变更函数的函数标识;可以将所述第三方计算机程序发生变更函数的函数标识,作为函数标识集合中的函数标识。其中,所述第三方计算机程序发生变更函数例如可以为新增的函数、修改的函数、和删除的函数等。
所述服务器可以比较所述第三方计算机程序当前版本的源代码和历史版本的源代码,得到所述第三方计算机程序发生变更函数的函数标识。当然,所述服务器还可以基于所述第三方计算机程序当前版本的源代码,获取所述第三方计算机程序当前版本的字节码;可以通过字节码操纵框架解析所述第三方计算机程序当前版本的字节码,得到所述第三方计算机程序当前版本中各个函数的函数标识,作为第三函数标识集合中的函数标识;可以基于所述第三方计算机程序历史版本的源代码,获取所述第三方计算机程序历史版本的字节码;可以通过字节码操纵框架解析所述第三方计算机程序历史版本的字节码,得到所述第三方计算机程序历史版本中各个函数的函数标识,作为第四函数标识集合中的函数标识;可以比较所述第三函数标识集合和所述第四函数标识集合中的函数标识,得到所述第三方计算机程序发生变更函数的函数标识。其中,所述字节码操纵框架为用于创建、修改、解析计算机程序字节码的计算机软件。所述字节码操纵框架例如可以为ASM、AspectJ、BCEL、Byte Buddy、CGLIB、Cojen、Javassist、Serp等。所述字节码(Byte-code)为一种包含执行程序、并且由一序列op代码和/或数据对组成的二进制文件。所述字节码可以理解为一种中间码,比机器码更抽象。
步骤S12:构建节点关联网络。
在本实施例中,所述节点关联网络可以包括一个或多个节点,每个节点可以对应第二业务***中一个函数的函数标识。所述节点关联网络还可以包括节点间的有向关联关系。所述节点间的有向关联关系可以理解为节点间的指向关系。具体地,在所述节点关联网络中,每个节点可以与一个或多个其它节点具有有向关联关系。即,在所述节点关联网络中,每个节点可以指向0个、1个、或多个其它节点,每个节点还可以被0个、1个、或多个其它节点所指向。可以将所述节点关联网络中,不被其它节点所指向的节点作为接口节点。即,可以将所述节点关联网络中,被0个节点所指向的节点作为接口节点。接口节点在所述第二业务***中对应的函数通常为接口函数。
所述第二业务系数的数量可以为一个或多个。所述第二业务***例如可以为余额宝、基金、定期等业务***。所述第二业务***和所述第一业务***可以相同,也可以不同。在所述第二业务***和所述第一业务***不同时,所述第二业务***和所述第一业务***可以具有关联关系。这里所述第二业务***和所述第一业务***具有关联关系可以理解为:所述第二业务***和所述第一业务***之间可以进行业务数据交互。例如,所述第二业务***可以接收并处理来自所述第一业务***的业务数据,所述业务数据可以包括交易金额、交易数量等。
在本实施例中,所述第二业务***中函数的数量可以为一个或多个。所述服务器可以获取所述第二业务***中函数的函数标识,以及函数间的调用关系;可以以所述第二业务***中函数的函数标识为节点,基于所述第二业务***中函数间的调用关系,构建节点关联网络。
例如,所述第二业务***可以包括函数Function_A()、Function_B()、Function_C()、Function_D()、Function_E()。函数Function_A()可以调用函数Function_B()、Function_C()、Function_D()。函数Function_C()、Function_D()可以分别调用函数Function_E()。函数Function_A()的函数标识可以为Function_A;函数Function_B()的函数标识可以为Function_B;函数Function_C()的函数标识可以为Function_C;函数Function_D()的函数标识可以为Function_D;函数Function_E()的函数标识可以为Function_E。
那么,所述服务器可以以函数标识Function_A为节点Function_A,以函数标识Function_B为节点Function_B,以函数标识Function_C为节点Function_C,以函数标识Function_D为节点Function_D,以函数标识Function_E为节点Function_E,构建如图2所示的节点关联网络。在图2所示的节点关联网络中,节点Function_A可以分别指向节点Function_B、Function_C、Function_D,节点Function_C和节点Function_D可以指向节点Function_E。在图2所示的节点关联网络中,节点Function_A可以为接口节点。
在本实施例中,所述服务器可以获取所述第二业务***的字节码;可以使用字节码操纵框架解析所述第二业务***的字节码,得到所述第二业务***中函数的函数标识,以及函数间的调用关系。
在本实施例的一个实施方式中,所述服务器可以从所述第二业务***的字节码中,获取所述第二业务***中函数的函数标识。例如,所述第二业务***的源代码可以如下。
Figure BDA0001326419100000061
Figure BDA0001326419100000071
相对应地,所述第二业务***的字节码可以如下。
Figure BDA0001326419100000072
那么,所述服务器可以从所述第二业务***的字节码中,获取所述第二业务***中函数的函数标识A、B、C、D、E、F。
在本实施例的一个实施方式中,函数间的调用关系可以包括直接调用关系和间接调用关系。
例如,函数Function_A()函数体包括用于调用函数Function_B()的计算机程序指令。那么,可以认为函数Function_A()直接调用了函数Function_B()。
又如,函数Function_A()函数体包括用于发送消息的计算机程序指令,函数Function_C()函数体包括用于接收该消息的计算机程序指令。那么,可以认为函数Function_A()和函数Function_C()通过该消息相关联,具体地,可以认为函数Function_A()通过该消息间接调用了函数Function_C()。
在本实施方式中,可以使用字节码中的预设关键字来识别函数间的调用关系。
例如,函数Function_A()字节码中包括2个预设关键字invokevirtual,其中一个预设关键字invokevirtual与函数标识Function_B相对应,另一个预设关键字invokevirtual与函数标识Function_D相对应。那么,可以认为函数Function_A()分别直接调用了函数Function_B()和函数Function_D,所述函数Function_B()可以为函数标识Function_B所标识的函数,所述函数Function_D()可以为函数标识Function_D所标识的函数。
又如,函数Function_A()字节码包括预设函数标识、预设关键字TP、预设关键字EC,所述预设函数标识可以为用于发送消息的函数的函数标识。那么,可以认为函数Function_A()用于发送消息。具体地,例如,在函数Function_A()字节码中,预设关键字TP对应的属性值可以为TPXXX,预设关键字EC对应的属性值可以为ECXXX。那么,可以认为函数Function_A()用于发送消息Message_TPXXX_ECXXX,消息Message_TPXXX_ECXXX的属性值可以包括TPXXX和ECXXX。
函数Function_C()字节码包括预设关键字Consumer、预设关键字TP、预设关键字EC。那么,可以认为函数Function_C()用于接收消息。具体地,例如,在函数Function_C()的字节码中,预设关键字TP对应的属性值可以为TPXXX,预设关键字EC对应的属性值可以为ECXXX。那么,可以认为函数Function_C()用于接收消息Message_TPXXX_ECXXX。
继而,可以认为函数Function_A()和函数Function_C()通过消息Message_TPXXX_ECXXX相关联,具体地,可以认为函数Function_A()通过消息Message_TPXXX_ECXXX间接调用了函数Function_C()。
如此,在本实施方式中,对于所述第二业务***中的每个函数,所述服务器可以从所述第二业务***字节码中获取该函数字节码;在该函数字节码中包括至少一个第一预设关键字的条件下,可以获取每个第一预设关键字在该函数字节码中对应的函数标识;可以识别该函数,分别与每个第一预设关键字对应函数标识所标识函数间的调用关系。具体地,所述服务器可以识别该函数分别直接调用了,每个第一预设关键字对应函数标识所标识的函数。所述第一预设关键字例如可以为invokevirtual等。
或者,在本实施方式中,对于所述第二业务***中的每个函数,所述服务器可以从所述第二业务***字节码中获取该函数字节码;在该函数字节码中包括第二预设关键字和第三预设关键字的条件下,可以获取第二预设关键字在该函数字节码中对应的第一属性值;可以获取第三预设关键字在该函数字节码中对应的第二属性值;可以将该函数作为第一函数。其中,所述第二预设关键字例如可以为TP,所述第三预设关键字例如可以为EC。
所述服务器可以从所述第二业务***中获取第二函数。其中,所述第二函数与所述第一函数不同。所述第二函数可以包括第二预设关键字和第三关键字。所述第二预设关键字在所述第二函数字节码中对应的属性值与所述第一属性值相同;第三预设关键字在所述第二函数字节码中对应的属性值与所述第二属性值相同。继而,所述服务器可以识别所述第一函数和所述第二函数间的调用关系。
进一步地,所述服务器可以分别识别所述第一函数字节码和所述第二函数字节码,是否包含预设函数标识或第四预设关键字。其中,所述第四预设关键字例如可以为Consumer,所述预设函数标识可以为用于发送消息的函数的函数标识。在识别到所述第一函数字节码包含预设函数标识、所述第二函数字节码包含第四预设关键字的条件下,所述服务器可以识别所述第一函数间接调用了第二函数。在识别到所述第一函数字节码包含第四预设关键字、所述第二函数字节码包含预设函数标识的条件下,所述服务器可以识别所述第二函数间接调用了第一函数。
步骤S13:基于所述函数标识集合中的函数标识,使用所述节点关联网络中节点间的有向关联关系,从所述节点关联网络中获取至少一个接口节点。
在本实施例中,如前所述,所述节点关联网络可以包括节点间的有向关联关系。所述节点关联网络中不被其它节点指向的节点可以作为接口节点。如此,针对所述函数标识集合中的每个函数标识,所述服务器可以获取该函数标识在所述节点关联网络对应的节点;在获取节点为接口节点的条件下,可以获取该函数标识对应的接口节点;在获取节点不是接口节点的条件下,可以将获取节点作为目标节点,可以从所述节点关联网络中获取有向关联关系为指向目标节点的接口节点。其中,这里所述服务器获取该函数标识在所述节点关联网络中对应的节点,可以理解为;在所述节点关联网络中查找与该函数标识相同的节点;这里有向关联关系为指向目标节点的接口节点,可以包括:有向关联关系为直接指向目标节点的接口节点,或者,有向关联关系为经由一个或多个中间节点间接指向目标节点的接口节点。
请参阅图6。具体地,所述服务器可以获取所述函数标识集合中的一个函数标识;可以获取该函数标识在所述节点关联网络对应的节点;在获取节点为接口节点的条件下,可以获取该函数标识对应的接口节点,可以从所述函数标识集合中删除该函数标识;在获取节点不是接口节点的条件下,可以将获取节点作为目标节点,可以从所述节点关联网络中获取有向关联关系为直接指向目标节点的至少一个节点,可以将所述至少一个节点中的每个节点作为所述函数标识集合中的函数标识,可以从所述函数标识集合中删除该函数标识。所述服务器可以重复执行上述过程,直至所述函数标识集合中函数标识的数量为0为止。
当然,在本实施例中,所述服务器还可以使用预设算法从所述节点关联网络中获取至少一个接口节点。所述预设算法例如可以为广度优先算法(Breadth-First-Search)、深度优先算法(Depth-First-Search)等。
例如,所述节点关联网络可以如图3所示。在图3所示的节点关联网络中,节点CreateTrade和节点CloseTrade为接口节点。所述函数标识集合可以包括函数标识queryProductByld和CreateTrade。
那么,针对所述函数标识集合中的函数标识CreateTrade,所述服务器可以从所述节点关联网络中获取函数标识CreateTrade对应的节点CreateTrade。节点CreateTrade可以为接口节点。从而,所述服务器可以直接获取接口节点CreateTrade,可以从所述函数标识集合中删除函数标识CreateTrade。此时,所述函数标识集合可以包括函数标识queryProductByld。
针对所述函数标识集合中的函数标识queryProductByld,所述服务器可以从所述节点关联网络中获取函数标识queryProductByld对应的节点queryProductByld。节点queryProductByld不是接口节点,所述服务器可以从所述节点关联网络中获取有向关联关系为直接指向节点queryProductByld的节点CreatePartnerP2PTradeAction;可以将节点CreatePartnerP2PTradeAction,作为所述函数标识集合中的函数标识;可以从所述函数标识集合中删除函数标识queryProductByld。此时,所述函数标识集合可以包括函数标识queryProductByld。
针对所述函数标识集合中的函数标识queryProductByld,所述服务器可以从所述节点关联网络中获取函数标识queryProductByld对应的节点queryProductByld。节点queryProductByld不是接口节点,所述服务器可以从所述节点关联网络中获取有向关联关系为直接指向节点queryProductByld的节点CreateTrade;可以将节点CreateTrade,作为所述函数标识集合中的函数标识;可以从所述函数标识集合中删除函数标识CreateTrade。此时,所述函数标识集合可以包括函数标识CreateTrade。
针对所述函数标识集合中的函数标识CreateTrade,所述服务器可以从所述节点关联网络中获取函数标识CreateTrade对应的节点CreateTrade。节点CreateTrade可以为接口节点。从而,所述服务器可以直接获取接口节点CreateTrade,可以从所述函数标识集合中删除函数标识CreateTrade。此时,所述函数标识集合中函数标识的数量可以为0。从而,所述服务器可以结束接口节点获取过程。
在本实施例中,服务器可以获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;可以构建节点关联网络,其中,所述节点关联网络包括至少一个节点,每个节点为第二业务***中一个函数的函数标识,所述节点关联网络包括节点间的有向关联关系;可以使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点,其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。与现有技术相比,所述第一业务***与所述第二业务***可以相同或不同;所述函数标识集合可以包括所述第一业务***中,发生变更的接口函数的函数标识或者非接口函数的函数标识。因此,本实施例服务器可以分析出受软件自身接口函数或非接口函数的变更,以及与该软件相关联的其它软件接口函数或非接口函数的变更,所影响的接口函数。因此,本实施例可以准确分析出受软件变化所影响的接口函数,从而能够帮助测试人员筛选出恰当的测试用例。
请参阅图4。本申请实施例还提供一种服务器。所述服务器可以包括存储器和处理器。
在本实施例中,所述存储器包括但不限于硬盘、U盘、RAM(Random-Access Memory,随机存取存储器)、ROM(Read-Only Memory,只读存储器)等。所述存储器可以用于存储计算机程序指令。
在本实施例中,所述处理器可以按任何适当的方式实现。例如,所述处理器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式等等。
在本实施例中,所述处理器可以用于读取并执行所述计算机程序指令;获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
本申请实施例公开的服务器,其存储器和处理器实现的具体功能,可以与本申请中的前述实施例对照解释。
请参阅图5。本申请实施例还提供一种函数获取装置。所述装置包括函数标识获取单元51、节点关联网络构建单元52、接口节点获取单元53。其中,
函数标识获取单元51,用于获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;
节点关联网络构建单元52,用于构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;
接口节点获取单元53,用于使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
需要说明的是,本说明书中的各个实施方式均采用递进的方式描述,各个实施方式之间相同相似的部分互相参见即可,每个实施方式重点说明的都是与其他实施方式的不同之处。尤其,对于服务器和计算机存储介质实施方式而言,由于其基本相似于方法实施方式,所以描述的比较简单,相关之处参见方法实施方式的部分说明即可。
另外,可以理解的是,所属领域技术人员在阅读本申请文件之后,可以无需创造性劳动想到本申请文件中列举的部分或全部实施例之间可以组合,这些组合也在本申请公开和保护的范围内。
在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(Programmable Logic Device,PLD)(例如现场可编程门阵列(Field Programmable GateArray,FPGA))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字***“集成”在一片PLD上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(Hardware Description Language,HDL),而HDL也并非仅有一种,而是有许多种,如ABEL(Advanced Boolean Expression Language)、AHDL(Altera Hardware DescriptionLanguage)、Confluence、CUPL(Cornell University Programming Language)、HDCal、JHDL(Java Hardware Description Language)、Lava、Lola、MyHDL、PALASM、RHDL(RubyHardware Description Language)等,目前最普遍使用的是VHDL(Very-High-SpeedIntegrated Circuit Hardware Description Language)与Verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
上述实施例阐明的***、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
本申请可用于众多通用或专用的计算机***环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器***、基于微处理器的***、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何***或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
虽然通过实施例描绘了本申请,本领域普通技术人员知道,本申请有许多变形和变化而不脱离本申请的精神,希望所附的权利要求包括这些变形和变化而不脱离本申请的精神。

Claims (12)

1.一种函数获取方法,所述方法包括:
获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;
构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;
使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
2.如权利要求1所述的方法,所述获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识,包括:
基于所述第一业务***当前版本的源代码和历史版本的源代码,获取所述第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识。
3.如权利要求1所述的方法,所述第一业务***包括第三方计算机程序;相应地,所述获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识,包括:
基于所述第三方计算机程序当前版本的源代码和历史版本的源代码,获取所述第三方计算机程序中发生变更函数的函数标识,作为函数标识集合中的函数标识。
4.如权利要求1所述的方法,所述构建节点关联网络,包括:
获取所述第二业务***中函数的函数标识,以及函数间的调用关系;
以所述第二业务***中函数的函数标识为节点,基于所述第二业务***中函数间的调用关系,构建节点关联网络。
5.如权利要求4所述的方法,所述获取所述第二业务***中函数的函数标识,以及函数间的调用关系,包括:
使用字节码操纵框架解析所述第二业务***的字节码,得到所述第二业务***中函数的函数标识,以及函数间的调用关系。
6.如权利要求5所述的方法,所述使用字节码操纵框架解析所述第二业务***的字节码,得到所述第二业务***中函数间的调用关系,包括:
使用字节码操纵框架识别所述第二业务***字节码中的预设关键字;
基于所述第二业务***字节码中的预设关键字,识别所述第二业务***中函数间的调用关系。
7.如权利要求6所述的方法,所述预设关键字包括第一预设关键字;相应地,所述基于所述第二业务***字节码中的预设关键字,识别所述第二业务***中函数间的调用关系,包括:
对于所述第二业务***中的每个函数,在该函数字节码中包括至少一个第一预设关键字的条件下,获取每个第一预设关键字在该函数字节码中对应的函数标识;
识别该函数,分别与每个第一预设关键字对应函数标识所标识函数间的调用关系。
8.如权利要求6所述的方法,所述预设关键字包括第二预设关键字和第三预设关键字;相应地,所述基于所述第二业务***字节码中的预设关键字,识别所述第二业务***中函数间的调用关系,包括:
从所述第二业务***中获取第一函数;其中,所述第一函数字节包括第二预设关键字和第三预设关键字;
获取第二预设关键字在所述第一函数字节码中对应的第一属性值,以及第三预设关键字在所述第一函数的字节码中对应的第二属性值;
从所述第二业务***中获取第二函数;其中,所述第二函数字节码中包括第二预设关键字和第三预设关键字;第二预设关键字在所述第二函数字节码中对应的属性值与所述第一属性值相同;第三预设关键字在所述第二函数字节码中对应的属性值与所述第二属性值相同;
识别所述第一函数和所述第二函数间的调用关系。
9.如权利要求1所述的方法,所述从所述节点关联网络中获取至少一个接口节点,包括:
针对所述函数标识集合中的每个函数标识,在该函数标识在所述节点关联网络中对应的节点为接口节点的条件下,获取该函数标识对应的接口节点。
10.如权利要求1所述的方法,所述从所述节点关联网络中获取至少一个接口节点,包括:
针对所述函数标识集合中的每个函数标识,在该函数标识在所述节点关联网络中对应的节点不是接口节点的条件下,以该函数标识在所述节点关联网络中对应的节点为目标节点,从所述节点关联网络中获取有向关联关系为指向目标节点的接口节点。
11.一种服务器,所述服务器包括存储器和处理器;
所述存储器,用于存储计算机程序指令;
所述处理器,用于读取并执行所述计算机程序指令;获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
12.一种函数获取装置,所述装置包括:
函数标识获取单元,用于获取第一业务***中发生变更函数的函数标识,作为函数标识集合中的函数标识;
节点关联网络构建单元,用于构建节点关联网络;其中,所述节点关联网络包括至少一个节点;每个节点为第二业务***中一个函数的函数标识;所述节点关联网络包括节点间的有向关联关系;
接口节点获取单元,用于使用所述节点间的有向关联关系,基于所述函数标识集合中的函数标识,从所述节点关联网络中获取至少一个接口节点;其中,所述接口节点为所述节点关联网络中有向关联关系为不被其它节点指向的节点。
CN201710468198.XA 2017-06-20 2017-06-20 函数获取方法和装置、服务器 Active CN107451050B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710468198.XA CN107451050B (zh) 2017-06-20 2017-06-20 函数获取方法和装置、服务器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710468198.XA CN107451050B (zh) 2017-06-20 2017-06-20 函数获取方法和装置、服务器

Publications (2)

Publication Number Publication Date
CN107451050A CN107451050A (zh) 2017-12-08
CN107451050B true CN107451050B (zh) 2020-07-03

Family

ID=60486527

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710468198.XA Active CN107451050B (zh) 2017-06-20 2017-06-20 函数获取方法和装置、服务器

Country Status (1)

Country Link
CN (1) CN107451050B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111176857B (zh) * 2018-11-12 2024-06-11 北京数安鑫云信息技术有限公司 一种智能提供数据的方法及装置
CN111382070B (zh) * 2020-03-03 2022-03-04 腾讯科技(深圳)有限公司 兼容性测试方法、装置、存储介质和计算机设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6553429B1 (en) * 1998-06-05 2003-04-22 Microsoft Corporation Fast conditional thunk utility
CN102831060A (zh) * 2012-08-24 2012-12-19 东南大学 一种基于修改影响分析的部件软件回归测试用例更新方法
CN104834603A (zh) * 2015-05-26 2015-08-12 牟永敏 一种面向回归测试的控制流变更影响域分析方法和***
CN105205000A (zh) * 2015-10-12 2015-12-30 用友网络科技股份有限公司 定位软件开发中代码受影响范围的方法及***
CN105389262A (zh) * 2015-12-23 2016-03-09 北京奇虎科技有限公司 一种针对界面测试生成测试建议的方法和装置
CN106020848A (zh) * 2016-06-07 2016-10-12 北京信息科技大学 面向c#的函数调用路径生成方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6553429B1 (en) * 1998-06-05 2003-04-22 Microsoft Corporation Fast conditional thunk utility
CN102831060A (zh) * 2012-08-24 2012-12-19 东南大学 一种基于修改影响分析的部件软件回归测试用例更新方法
CN104834603A (zh) * 2015-05-26 2015-08-12 牟永敏 一种面向回归测试的控制流变更影响域分析方法和***
CN105205000A (zh) * 2015-10-12 2015-12-30 用友网络科技股份有限公司 定位软件开发中代码受影响范围的方法及***
CN105389262A (zh) * 2015-12-23 2016-03-09 北京奇虎科技有限公司 一种针对界面测试生成测试建议的方法和装置
CN106020848A (zh) * 2016-06-07 2016-10-12 北京信息科技大学 面向c#的函数调用路径生成方法

Also Published As

Publication number Publication date
CN107451050A (zh) 2017-12-08

Similar Documents

Publication Publication Date Title
CN108027722B (zh) 在编译和部署中动态更新应用
Franks et al. Cacheca: A cache language model based code suggestion tool
US10481964B2 (en) Monitoring activity of software development kits using stack trace analysis
US10261889B2 (en) Techniques for edit-and-continue and enhanced optimized debugging on optimized code
CN109032825B (zh) 一种故障注入方法、装置及设备
CN107239392B (zh) 一种测试方法、装置、终端及存储介质
WO2021017735A1 (zh) 一种智能合约的形式化验证方法、电子装置及存储介质
US10203943B2 (en) Static analysis and reconstruction of deep link handling in compiled applications
CN107480476B (zh) 一种基于ELF感染的Android本地层指令编译虚拟化加壳方法
CN108415998B (zh) 应用依赖关系更新方法、终端、设备及存储介质
US20140298290A1 (en) Identification of code changes using language syntax and changeset data
CN109284222B (zh) 软件单元、数据处理***中的项目测试方法、装置及设备
CN107451050B (zh) 函数获取方法和装置、服务器
CN111159040A (zh) 一种测试数据生成方法、装置、设备及存储介质
CN114840427A (zh) 一种代码测试、测试用例生成的方法及装置
CN109582382B (zh) 配置信息的加载方法、装置、存储介质及终端设备
CN112069052A (zh) 一种异常对象检测方法、装置、设备及存储介质
CN114115884B (zh) 一种编程服务的管理方法以及相关装置
CN108073401B (zh) 一种业务逻辑的执行方法、装置及电子设备
CN110941443B (zh) 修改sdk中文件名的方法、装置及电子设备
CN112698867A (zh) 注解信息的动态修改方法、装置、电子设备及介质
CN111385661B (zh) 语音控制全屏播放的方法、装置、终端及存储介质
US10417017B2 (en) Determining candidate patches for a computer software
CN113467815A (zh) 热更新的应用修复方法、装置、终端设备及存储介质
CN109145084B (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
TR01 Transfer of patent right

Effective date of registration: 20201019

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Innovative advanced technology Co.,Ltd.

Address before: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee before: Advanced innovation technology Co.,Ltd.

Effective date of registration: 20201019

Address after: Cayman Enterprise Centre, 27 Hospital Road, George Town, Grand Cayman Islands

Patentee after: Advanced innovation technology Co.,Ltd.

Address before: Greater Cayman, British Cayman Islands

Patentee before: Alibaba Group Holding Ltd.

TR01 Transfer of patent right