CN115421831A - 生成活动组件调用关系的方法、装置、设备及存储介质 - Google Patents
生成活动组件调用关系的方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN115421831A CN115421831A CN202211043312.1A CN202211043312A CN115421831A CN 115421831 A CN115421831 A CN 115421831A CN 202211043312 A CN202211043312 A CN 202211043312A CN 115421831 A CN115421831 A CN 115421831A
- Authority
- CN
- China
- Prior art keywords
- target application
- application program
- jump
- relation
- relationship
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
- G06F9/44526—Plug-ins; Add-ons
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Stored Programmes (AREA)
Abstract
本公开提供一种生成活动组件调用关系的方法、装置、设备及存储介质,涉及人工智能技术领域,具体涉及语法分析、自动化、控件识别、软件测试等技术领域,可应用于代码分析、软件测试等场景下。具体实现方案包括:根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树;遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系;根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则;根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系。本公开可以自动获取到更全面的activity组件的调用关系,且能够更快速地更新activity组件的调用关系。
Description
技术领域
本公开涉及人工智能技术领域,具体涉及语法分析、自动化、控件识别、软件测试等技术领域,可应用于代码分析、软件测试等场景下,尤其涉及一种生成活动组件调用关系的方法、装置、设备及存储介质。
背景技术
活动(activity)组件是一种可以包含用户界面的组件,能够用于和用户进行交互。一般而言,一个应用程序中可以包括一个或多个activity组件。对于应用程序而言,可以根据应用程序中activity组件的调用关系,对应用程序进行测试,例如,回归测试、自动化页面稳定性测试、新功能或新页面的测试等。
目前,获取应用程序中activity组件的调用关系的主要方式包括:人工基于页面控件编写自动化实例(case);通过人工编写的自动化case遍历应用程序的activity组件对应的页面,对应用程序的activity组件对应的页面中的控件进行自动化的随机点击,随机触发到达下一个activity组件对应的页面;收集每次随机触发中前后两个activity组件的到达关系,作为这两个activity组件的调用关系,从而得到整个应用程序中activity组件的调用关系。
发明内容
本公开提供了一种生成活动组件调用关系的方法、装置、设备及存储介质,能够自动获取到更全面的activity组件的调用关系,且能够更快速地更新activity组件的调用关系。
根据本公开的第一方面,提供了一种生成活动组件调用关系的方法,所述方法包括:
根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树;遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系;根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则;根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系。
根据本公开的第二方面,提供了一种生成活动组件调用关系的装置,所述装置包括:
语法解析单元,用于根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树;函数调用关系识别单元,用于遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系;跳转识别单元,用于根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则;调用关系生成单元,用于根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系。
根据本公开的第三方面,提供了一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如第一方面所述的方法。
根据本公开的第四方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使计算机执行根据第一方面所述的方法。
根据本公开的第五方面,提供了一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据第一方面所述的方法。
本公开通过根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树;遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系;根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则,并根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系,实现了基于对目标应用程序的分析自动获取目标应用程序中activity组件的调用关系。由于本公开是在获取到目标应用程序的全量函数调用关系后,对目标应用程序的全量函数调用关系进行分析以得到activity组件的调用关系,所以可以更全面地覆盖目标应用程序中所包含的activity组件,能够获取到更全面的activity组件的调用关系。在后续对目标应用程序进行测试时,更全面的activity组件的调用关系可以使得测试结果更加准确。
另外,相比于目前获取activity组件的调用关系的方式而言,本公开中,无需人工编写case,获取activity组件的调用关系的成本和耗时更低。而且,对于新增的activity组件而言,本公开可以更快速地获取到新增activity组件的调用关系,实现对新增的activity组件的及时覆盖,提高activity组件的调用关系的时效性。也即,本公开可以更快速地更新activity组件的调用关系。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1为本公开实施例提供的生成活动组件调用关系的方法的流程示意图;
图2为本公开实施例提供的生成活动组件调用关系的方法的另一流程示意图;
图3为本公开实施例提供的生成活动组件调用关系的方法的又一流程示意图;
图4为本公开实施例提供的生成活动组件调用关系的方法的又一流程示意图;
图5为本公开实施例提供的图2中S204的一种实现流程示意图;
图6为本公开实施例提供的生成活动组件调用关系的装置的组成示意图;
图7示出了可以用来实施本公开的实施例的示例电子设备700的示意性框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
应当理解,在本公开各实施例中,字符“/”一般表示前后关联对象是一种“或”的关系。术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。
活动(activity)组件是一种可以包含用户界面的组件,能够用于和用户进行交互。一般而言,一个应用程序中可以包括一个或多个activity组件。对于应用程序而言,可以根据应用程序中activity组件的调用关系,对应用程序进行测试,例如,回归测试、自动化页面稳定性测试、新功能或新页面的测试等。
目前,获取应用程序中activity组件的调用关系的主要方式包括:人工基于页面控件编写自动化实例(case);通过人工编写的自动化case遍历应用程序的activity组件对应的页面,对应用程序的activity组件对应的页面中的控件进行自动化的随机点击,随机触发到达下一个activity组件对应的页面;收集每次随机触发中前后两个activity组件的到达关系,作为这两个activity组件的调用关系,从而得到整个应用程序中activity组件的调用关系。
目前获取activity组件的调用关系的方式依赖自动化的随机点击,会出现自动化点击无法进入下一层级的activity组件的情况,导致部分activity组件无法覆盖,从而导致获取到的activity组件的调用关系不够全面。而activity组件的调用关系不够全面,可能导致测试页面和场景缺失,使得测试结果并不准确。
另外,对于新增的activity组件而言,目前获取activity组件的调用关系的方式无法快速获取到新增activity组件的调用关系,也即,不能及时覆盖新增的activity组件,实效性较差。
本公开提供了一种生成活动组件调用关系的方法,可以生成目标应用程序中活动组件之间的调用关系。该方法能够自动获取到更全面的activity组件的调用关系,且能够更快速地更新activity组件的调用关系。
该方法的执行主体可以是终端设备、或者计算机、又或者服务器,或者还可以是其他具有数据处理能力的设备。在此对该方法的执行主体不作限制。
可选地,目标应用程序可以是在终端设备、或者计算机、又或者服务器上运行的系统级应用(如电子邮件、短信、日历、地图、浏览器和联系人管理等系统应用)或非系统级应用(如开发人员利用Java语言设计和编写的第三方应用),还可以是操作系统,在此对目标应用程序的具体实现不作限制。
可选地,终端设备可以是手机,也可以是平板电脑、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personaldigital assistant,PDA)等,本公开实施例对终端设备的具体类型不作限制。
一些实施例中,服务器可以是单独的一个服务器,或者,也可以是由多个服务器构成的服务器集群。部分实施方式中,服务器集群还可以是分布式集群。本公开对服务器的具体实现方式也不作限制。
下面对该生成活动组件调用关系的方法进行示例性说明。
图1为本公开实施例提供的生成活动组件调用关系的方法的流程示意图。如图1所示,该方法可以包括:
S101、根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树。
示例性地,以目标应用程序为适配安卓操作系统的应用为例,假设目标应用程序采用java代码和kotlin代码进行编写,则S101中所述的目标应用程序所使用的代码的语法规则可以是指java和kotlin的语法规则。
在本公开实施例中,可以采用antlr4工具结合java和kotlin的antlr4语法规则对目标应用程序进行解析,得到目标应用程序的语法树。例如,可以通过antlr4工具对目标应用程序中的java代码和kotlin代码,根据对应的语法规则进行词法分析、语法分析等,并采用访问模式对代码进行遍历,解析后生成语法树。
需要说明的是,本公开对目标应用程序进行解析时所使用的工具并不作限制。例如,目标应用程序为适配安卓操作系统、鸿蒙操作系统等其他操作系统的应用时,也可以采用其他工具对目标应用程序进行解析。
S102、遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系。
S102中通过对目标应用程序的语法树进行遍历,可以得到目标应用程序中代码的包名、类、方法、参数等相关信息。基于目标应用程序中代码的包名、类、方法、参数等相关信息,可以得到目标应用程序的全量函数调用关系。
例如,同样以目标应用程序为适配安卓操作系统的应用为例,安卓应用中activity组件跳转在开发中通常采用的是显示跳转,如:在源活动组件activity1中设定跳转意图(intent)为目标活动组件activity2中的类activity2.class,并采用startActivity或startActivityForResult方法传入intent,可以进行activity1到activity2的跳转。通过对目标应用程序的语法树进行遍历,可以找到所有包含跳转规则的方法并记录方法所属的类、源activity组件、目标activity组件。通过获取全量的方法所属的类的函数调用关系,即可得到目标应用程序的全量函数调用关系。
其中,全量函数调用关系中包括:类和activity组件的所属关系、方法和类的所属关系、方法调用关系(即跳转方法)、方法和activity组件的跳转规则等。
S103、根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则。
示例性地,通过查找全量函数调用关系,可以得到目标应用程序中哪些活动组件之间存在跳转方法和跳转规则。例如,假设全量函数调用关系中包含如下函数调用关系:classA是在activity1中的类(即类和activity组件的所属关系),classA包含方法funca(即方法和类的所属关系),方法funca调用类classB中的方法funcb(即跳转方法),方法funb中包含跳转activity2的规则(即方法和activity组件的跳转规则);则,基于该函数调用关系可以得到:activity1和activity2之间存在跳转方法和跳转规则。如:跳转方法为方法funca调用方法funb,跳转规则为方法funb中包含跳转activity2的规则。
S104、根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系。
如S103中所述,根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则。在得到目标应用程序中活动组件的跳转方法和跳转规则后,基于目标应用程序中活动组件的跳转方法和跳转规则,可以确定目标应用程序中活动组件之间的调用关系。
示例性地,以S103中的示例activity1和activity2之间存在的跳转方法和跳转规则为例,由于classA是在activity1中的类,且classA包含方法funca;而方法funca又调用了类classB中的方法funcb,且方法funb中包含跳转activity2的规则,所以可以确定activity1可以跳转activity2,也即,activity1和activity2存在activity1调用activity2的关系。
类似地,可以根据目标应用程序中全部活动组件的跳转方法和跳转规则,生成目标应用程序中全部活动组件之间的调用关系。例如,activity1调用activity2,activity3调用activity4等。
由上所述,本公开实施例中,通过根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树;遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系;根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则,并根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系,实现了基于对目标应用程序的分析自动获取目标应用程序中activity组件的调用关系。由于本公开实施例是在获取到目标应用程序的全量函数调用关系后,对目标应用程序的全量函数调用关系进行分析以得到activity组件的调用关系,所以可以更全面地覆盖目标应用程序中所包含地activity组件,能够获取到更全面的activity组件的调用关系。在后续对目标应用程序进行测试时,更全面的activity组件的调用关系可以使得测试结果更加准确。
另外,相比于目前获取activity组件的调用关系的方式而言,本公开实施例中,无需人工编写case,获取activity组件的调用关系的成本和耗时更低。而且,对于新增的activity组件而言,本公开实施例可以更快速地获取到新增activity组件的调用关系,实现对新增的activity组件的及时覆盖,提高activity组件的调用关系的时效性。也即,本公开实施例可以更快速地更新activity组件的调用关系。
从整体实现来看,本公开实施例提供的生成活动组件调用关系的方法,是基于对白盒分析、对目标应用程序进行代码理解的方式,生成目标应用程序中活动组件之间的调用关系。相比于目前获取activity组件的调用关系的方式而言,目前获取activity组件的调用关系的方式是一种后验方案,在新功能和新页面的测试上,面临着没有新页面activity组件调用关系可用的情况。而本公开实施例提供的生成活动组件调用关系的方法可以适用于各种测试场景,为测试场景提供更全面、准确的activity组件的调用关系。
可选地,所述生成活动组件调用关系的方法还包括:监听目标应用程序中活动组件的跳转方法对应的控件,得到目标应用程序中活动组件的跳转方法与控件之间的对应关系。上述根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系的步骤,可以包括:根据目标应用程序中活动组件的跳转方法和跳转规则、以及跳转方法与控件之间的对应关系,生成目标应用程序中活动组件之间的调用关系。
例如,图2为本公开实施例提供的生成活动组件调用关系的方法的另一流程示意图。如图2所示,该方法可以包括:
S201、根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树。
S201可以参见上述S101所述,不再赘述。
S202、遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系。
S202可以参见上述S102所述,不再赘述。
S203、根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则。
S203可以参见上述S103所述,不再赘述。
S204、监听目标应用程序中活动组件的跳转方法对应的控件,得到目标应用程序中活动组件的跳转方法与控件之间的对应关系。
示例性地,以上述S103中的示例activity1和activity2之间的调用关系为例,S204中可以根据控件方法触发获取到通过A控件实现activity1跳转activity2的过程。如:在onClick监听按钮点击的方法中调用activity1跳转activity2的跳转规则,提取出监听方法对应的A控件。从而可以得到activity1跳转activity2的跳转方法与A控件之间的对应关系。
可选地,目标应用程序中活动组件的跳转方法与控件之间的对应关系中可以记录控件的全属性,如:控件名称、控件坐标、控件图片、控件尺寸等。
S205、根据目标应用程序中活动组件的跳转方法和跳转规则、以及跳转方法与控件之间的对应关系,生成目标应用程序中活动组件之间的调用关系。
例如,同样以上述S103中的示例activity1和activity2之间的调用关系为例,S205中可以根据activity1和activity2之间的跳转方法和跳转规则、以及跳转方法与A控件之间的对应关系,生成activity1和activity2之间的调用关系。示例性地,activity1和activity2之间的调用关系可以包括:activity1调用activity2,且当A控件触发时,activity1跳转至activity2。
类似地,根据目标应用程序中全部活动组件的跳转方法和跳转规则、以及跳转方法与控件之间的对应关系,可以生成目标应用程序中全部活动组件之间的调用关系。
本实施例中,根据目标应用程序中活动组件的跳转方法和跳转规则、以及跳转方法与控件之间的对应关系,生成目标应用程序中活动组件之间的调用关系,可以使得调用关系中还包括触发该调用关系的控件的信息,即明确了调用关系和控件的对应关系,如是哪个控件触发该调用关系。从而进一步丰富了活动组件之间的调用关系,可以为后续的测试、修改等提供更好的依据。
图3为本公开实施例提供的生成活动组件调用关系的方法的又一流程示意图。如图3所示,该生成活动组件调用关系的方法,还可以包括:
S301、获取目标应用程序中活动组件的注册文件。
示例性地,以目标应用程序为适配安卓操作系统的应用为例,安卓中activity组件的初始化,可以在Androidmanifest.xml文件中进行注册使用。Androidmanifest.xml文件即目标应用程序中活动组件的注册文件。当目标应用程序为适配其他操作系统的应用时,注册文件也可以是其他文件,在此不作限制。
S302、解析注册文件,得到目标应用程序中的全量活动组件名称。
以注册文件为可扩展标记语言(extensible markup anguage,XML)文档为例,S302中可以采用简化XML文档应用程序接口(simple API for XML,SAX)的方式对注册文件进行解析,得到目标应用程序中的全量活动组件名称(即全量activity组件名)。
其中,SAX解析方式是对XML文档进行顺序扫描,当扫描到文档(document)开始与结束、元素(element)开始与结束、文档(document)结束等地方时通知事件处理函数,由事件处理函数做相应动作,然后继续同样的扫描,直至文档结束。
示例性地,注册文件中可以包括<activity>标签以及android:name,解析注册文件时,可以通过<activity>标签以及android:name获取目标应用程序中的全量活动组件名称。
S303、根据全量活动组件名称,从目标应用程序中活动组件之间的调用关系中,移除名称不包含在全量活动组件名称中的目标活动组件对应的调用关系。
S302中在得到目标应用程序中的全量活动组件名称之后,S303中可以将目标应用程序中活动组件之间的调用关系与全量活动组件名称进行比较,确定目标应用程序中活动组件之间的调用关系中涉及到的哪些目标活动组件的名称并不包含在全量活动组件名称中。然后,可以从目标应用程序中活动组件之间的调用关系中,移除目标活动组件对应的调用关系。
其中,对于名称并不包含在全量活动组件名称中的目标活动组件而言,目标活动组件对应的调用关系实际可以认为是目标应用程序中已经不存在或多余的调用关系。
通过从目标应用程序中活动组件之间的调用关系中,移除名称不包含在全量活动组件名称中的目标活动组件对应的调用关系,可以提高目标应用程序中活动组件之间的调用关系的准确性。
图4为本公开实施例提供的生成活动组件调用关系的方法的又一流程示意图。如图4所示,该生成活动组件调用关系的方法,还可以包括:
S401、检测目标应用程序的代码变化。
示例性地,目标应用程序的代码变化可以包括:修改了目标应用程序的某些代码、或者删除了目标应用程序的某些代码、又或者在目标应用程序中新增了某些代码。
S402、响应于检测到目标应用程序的代码变化,对目标应用程序中活动组件之间的调用关系中,目标应用程序的代码变化影响到的活动组件的调用关系进行更新。
可以理解的,当目标应用程序的代码变化发生变化时,代码的变化可能会影响到目标应用程序中部分活动组件。如:活动组件的调用关系发生变化、或者新增了活动组件、又或者删除了活动组件等。
S402中可以响应于检测到目标应用程序的代码变化,确定代码变化影响到的活动组件。并对目标应用程序中活动组件之间的调用关系中,目标应用程序的代码变化影响到的活动组件的调用关系进行更新。
示例性地,假设目标应用程序中活动组件之间的调用关系包括:activity1调用activity2,activity2调用activity3。目标应用程序的代码变化导致activity1直接跳转activity3。则,S402中可以对目标应用程序中活动组件之间的调用关系中,activity1、activity2、以及activity3对应的调用关系进行更新,如:将“activity1调用activity2,activity2调用activity3”修改为“activity1调用activity3”。
应当理解,对目标应用程序的代码变化影响到的活动组件的调用关系进行更新,可以包括:对调用关系中代码变化影响到的活动组件的名称、跳转路径中的至少一种进行更新。更新的具体内容与代码变化相关,本公开中仅为示例性说明。
本实施例中activity组件之间的调用关系可以随着代码变化进行更新,更进一步提高了activity之间的调用关系的准确性。
图5为本公开实施例提供的图2中S204的一种实现流程示意图。如图5所示,一些实施例中,S204可以包括:
S501、获取目标应用程序中活动组件的注册文件;注册文件包括目标应用程序中活动组件所包含的控件的标识信息。
S501可以参见S301所述,不再赘述。
本公开实施例中,注册文件还可以包括目标应用程序中活动组件所包含的控件的标识信息,如控件ID。
S502、监听目标应用程序中活动组件的跳转方法对应的控件,并从注册文件中获取目标应用程序中活动组件的跳转方法对应的控件的标识信息。
S503、根据目标应用程序中活动组件的跳转方法对应的控件的标识信息,生成目标应用程序中活动组件的跳转方法与控件之间的对应关系。
示例性地,监听目标应用程序中活动组件的跳转方法对应的控件的过程可以参考上述S204中所述。在监听到目标应用程序中活动组件的跳转方法对应的控件之后,S503中可以根据目标应用程序中活动组件的跳转方法对应的控件的标识信息,来生成目标应用程序中活动组件的跳转方法与控件之间的对应关系。如:可以记录跳转方法与控件ID的对应关系。
本公开实施例中,根据目标应用程序中活动组件的跳转方法对应的控件的标识信息,生成目标应用程序中活动组件的跳转方法与控件之间的对应关系,简化了跳转方法与控件之间的对应关系的记录方式。另外,还可以使得后续根据目标应用程序中活动组件的跳转方法和跳转规则、以及跳转方法与控件之间的对应关系,生成目标应用程序中活动组件之间的调用关系时,可以通过跳转方法与控件ID的对应关系,更快速地查找控件ID所标识的控件的信息。
可选地,本公开实施例中,目标应用程序中活动组件之间的调用关系可以采用JS对象简谱树(javaScript object notation,JSON)的方式进行记录。
通过JS对象简谱树的方式记录活动组件之间的调用关系,可以使得活动组件之间的调用关系更加简洁、直观。
其他一些实施例中,目标应用程序中活动组件之间的调用关系也可以采用图数据库或其他数据结构进行记录,本公开对数据结构的形式并不限制。
可选地,在得到目标应用程序中活动组件之间的调用关系之后,本公开还可以根据目标应用程序中活动组件之间的调用关系,对目标应用程序进行测试。
示例性地,对目标应用程序进行测试可以包括:回归测试、自动化页面稳定性测试、新功能或新页面的测试等。
例如,在目标应用程序发生代码变更时,可以根据目标应用程序中活动组件之间的调用关系,评估代码变更影响页面,动态确定测试时长。
通过本公开实施例生成的目标应用程序中活动组件之间的调用关系,对目标应用程序进行测试,可以有效提高测试结果的准确性;通过本公开实施例提供的方法生成目标应用程序中活动组件之间的调用关系,可以提高测试效率。
一些实施例中,上述根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则的步骤,可以包括:采用递归查找的方式,在全量函数调用关系中查找目标应用程序中活动组件的跳转方法和跳转规则。
例如,可以先确定任意一个activity组件,如:activity1。然后,可以在全量函数调用关系中查找activity1相关的跳转方法和跳转规则,得到与activity1相关的activity2。然后,可以采用递归查找的方式,在全量函数调用关系中查找activity2相关的跳转方法和跳转规则,得到与activity2相关的activity3。类似地,可以继续递归查找activity4、activity5等。
采用递归查找的方式,在全量函数调用关系中查找目标应用程序中活动组件的跳转方法和跳转规则,不仅可以有效提高查找效率,而且可以避免遗漏activity组件。
示例性实施例中,本公开实施例还提供一种生成活动组件调用关系的装置,可以用于实现如前述实施例所述的生成活动组件调用关系的方法。图6为本公开实施例提供的生成活动组件调用关系的装置的组成示意图。如图6所示,该装置可以包括:语法解析单元601、函数调用关系识别单元602、跳转识别单元603、调用关系生成单元604。
语法解析单元601,用于根据目标应用程序所使用的代码的语法规则,对目标应用程序进行解析,得到目标应用程序的语法树。
函数调用关系识别单元602,用于遍历目标应用程序的语法树,得到目标应用程序的全量函数调用关系。
跳转识别单元603,用于根据全量函数调用关系,查找目标应用程序中活动组件的跳转方法和跳转规则。
调用关系生成单元604,用于根据目标应用程序中活动组件的跳转方法和跳转规则,生成目标应用程序中活动组件之间的调用关系。
可选地,跳转识别单元603,还用于监听目标应用程序中活动组件的跳转方法对应的控件,得到目标应用程序中活动组件的跳转方法与控件之间的对应关系。
调用关系生成单元604,具体用于根据目标应用程序中活动组件的跳转方法和跳转规则、以及跳转方法与控件之间的对应关系,生成目标应用程序中活动组件之间的调用关系。
可选地,调用关系生成单元604,还用于获取目标应用程序中活动组件的注册文件;解析注册文件,得到目标应用程序中的全量活动组件名称;根据全量活动组件名称,从目标应用程序中活动组件之间的调用关系中,移除名称不包含在全量活动组件名称中的目标活动组件对应的调用关系。
可选地,调用关系生成单元604,还用于检测目标应用程序的代码变化;响应于检测到目标应用程序的代码变化,对目标应用程序中活动组件之间的调用关系中,目标应用程序的代码变化影响到的活动组件的调用关系进行更新。
可选地,跳转识别单元603,具体用于获取目标应用程序中活动组件的注册文件;注册文件包括目标应用程序中活动组件所包含的控件的标识信息;监听目标应用程序中活动组件的跳转方法对应的控件,并从注册文件中获取目标应用程序中活动组件的跳转方法对应的控件的标识信息;根据目标应用程序中活动组件的跳转方法对应的控件的标识信息,生成目标应用程序中活动组件的跳转方法与控件之间的对应关系。
可选地,目标应用程序中活动组件之间的调用关系采用JS对象简谱树的方式进行记录。
可选地,调用关系生成单元604,还用于根据目标应用程序中活动组件之间的调用关系,对目标应用程序进行测试。
可选地,跳转识别单元603,具体用于采用递归查找的方式,在全量函数调用关系中查找目标应用程序中活动组件的跳转方法和跳转规则。
本公开的技术方案中,所涉及的用户个人信息的获取,存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
示例性实施例中,电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行如以上实施例所述的方法。该电子设备可以是上述计算机或服务器。
示例性实施例中,可读存储介质可以是存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使计算机执行根据以上实施例所述的方法。
示例性实施例中,计算机程序产品包括计算机程序,所述计算机程序在被处理器执行时实现根据以上实施例所述的方法。
图7示出了可以用来实施本公开的实施例的示例电子设备700的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图7所示,电子设备700包括计算单元701,其可以根据存储在只读存储器(ROM)702中的计算机程序或者从存储单元708加载到随机访问存储器(RAM)703中的计算机程序,来执行各种适当的动作和处理。在RAM 703中,还可存储设备700操作所需的各种程序和数据。计算单元701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
电子设备700中的多个部件连接至I/O接口705,包括:输入单元706,例如键盘、鼠标等;输出单元707,例如各种类型的显示器、扬声器等;存储单元708,例如磁盘、光盘等;以及通信单元709,例如网卡、调制解调器、无线通信收发机等。通信单元709允许电子设备700通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元701可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元701的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元701执行上文所描述的各个方法和处理,例如生成活动组件调用关系的方法。例如,在一些实施例中,生成活动组件调用关系的方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元708。在一些实施例中,计算机程序的部分或者全部可以经由ROM 702和/或通信单元709而被载入和/或安装到电子设备700上。当计算机程序加载到RAM 703并由计算单元701执行时,可以执行上文描述的生成活动组件调用关系的方法的一个或多个步骤。备选地,在其他实施例中,计算单元701可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行生成活动组件调用关系的方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (12)
1.一种生成活动组件调用关系的方法,所述方法包括:
根据目标应用程序所使用的代码的语法规则,对所述目标应用程序进行解析,得到所述目标应用程序的语法树;
遍历所述目标应用程序的语法树,得到所述目标应用程序的全量函数调用关系;
根据所述全量函数调用关系,查找所述目标应用程序中活动组件的跳转方法和跳转规则;
根据所述目标应用程序中活动组件的跳转方法和跳转规则,生成所述目标应用程序中活动组件之间的调用关系。
2.根据权利要求1所述的方法,所述方法还包括:
监听所述目标应用程序中活动组件的跳转方法对应的控件,得到所述目标应用程序中活动组件的跳转方法与控件之间的对应关系;
所述根据所述目标应用程序中活动组件的跳转方法和跳转规则,生成所述目标应用程序中活动组件之间的调用关系,包括:
根据所述目标应用程序中活动组件的跳转方法和跳转规则、以及跳转方法与控件之间的对应关系,生成所述目标应用程序中活动组件之间的调用关系。
3.根据权利要求1或2所述的方法,所述方法还包括:
获取所述目标应用程序中活动组件的注册文件;
解析所述注册文件,得到所述目标应用程序中的全量活动组件名称;
根据所述全量活动组件名称,从所述目标应用程序中活动组件之间的调用关系中,移除名称不包含在所述全量活动组件名称中的目标活动组件对应的调用关系。
4.根据权利要求1-3任一项所述的方法,所述方法还包括:
检测所述目标应用程序的代码变化;
响应于检测到所述目标应用程序的代码变化,对所述目标应用程序中活动组件之间的调用关系中,所述目标应用程序的代码变化影响到的活动组件的调用关系进行更新。
5.根据权利要求2所述的方法,所述监听所述目标应用程序中活动组件的跳转方法对应的控件,得到所述目标应用程序中活动组件的跳转方法与控件之间的对应关系,包括:
获取所述目标应用程序中活动组件的注册文件;所述注册文件包括所述目标应用程序中活动组件所包含的控件的标识信息;
监听所述目标应用程序中活动组件的跳转方法对应的控件,并从所述注册文件中获取所述目标应用程序中活动组件的跳转方法对应的控件的标识信息;
根据所述目标应用程序中活动组件的跳转方法对应的控件的标识信息,生成所述目标应用程序中活动组件的跳转方法与控件之间的对应关系。
6.根据权利要求1-5任一项所述的方法,所述目标应用程序中活动组件之间的调用关系采用JS对象简谱树的方式进行记录。
7.根据权利要求1-6任一项所述的方法,所述方法还包括:
根据所述目标应用程序中活动组件之间的调用关系,对所述目标应用程序进行测试。
8.根据权利要求1-7任一项所述的方法,所述根据所述全量函数调用关系,查找所述目标应用程序中活动组件的跳转方法和跳转规则,包括:
采用递归查找的方式,在所述全量函数调用关系中查找所述目标应用程序中活动组件的跳转方法和跳转规则。
9.一种生成活动组件调用关系的装置,所述装置包括:
语法解析单元,用于根据目标应用程序所使用的代码的语法规则,对所述目标应用程序进行解析,得到所述目标应用程序的语法树;
函数调用关系识别单元,用于遍历所述目标应用程序的语法树,得到所述目标应用程序的全量函数调用关系;
跳转识别单元,用于根据所述全量函数调用关系,查找所述目标应用程序中活动组件的跳转方法和跳转规则;
调用关系生成单元,用于根据所述目标应用程序中活动组件的跳转方法和跳转规则,生成所述目标应用程序中活动组件之间的调用关系。
10.一种电子设备,包括:至少一个处理器;以及与所述至少一个处理器通信连接的存储器;
其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8任一项所述的方法。
11.一种存储有计算机指令的非瞬时计算机可读存储介质,所述计算机指令用于使计算机执行根据权利要求1-8任一项所述的方法。
12.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-8任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211043312.1A CN115421831A (zh) | 2022-08-29 | 2022-08-29 | 生成活动组件调用关系的方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211043312.1A CN115421831A (zh) | 2022-08-29 | 2022-08-29 | 生成活动组件调用关系的方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115421831A true CN115421831A (zh) | 2022-12-02 |
Family
ID=84200795
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211043312.1A Pending CN115421831A (zh) | 2022-08-29 | 2022-08-29 | 生成活动组件调用关系的方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115421831A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069667A (zh) * | 2023-03-06 | 2023-05-05 | 天津卓朗昆仑云软件技术有限公司 | 基于代码分析的测试用例辅助定位方法及装置 |
-
2022
- 2022-08-29 CN CN202211043312.1A patent/CN115421831A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116069667A (zh) * | 2023-03-06 | 2023-05-05 | 天津卓朗昆仑云软件技术有限公司 | 基于代码分析的测试用例辅助定位方法及装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111506900B (zh) | 漏洞检测方法、装置、电子设备及计算机存储介质 | |
CN111125555B (zh) | 企业信息获取方法以及装置 | |
CN113419740B (zh) | 程序数据流的分析方法、装置、电子设备及可读存储介质 | |
US9760349B1 (en) | Managing different software dependencies associated with source code | |
CN110990346A (zh) | 基于区块链的文件数据处理方法、装置、设备及存储介质 | |
CN111241823A (zh) | 一种依赖配置的管理方法、装置、电子设备及存储介质 | |
CN109446078B (zh) | 代码测试方法及装置、存储介质、电子设备 | |
CN115421831A (zh) | 生成活动组件调用关系的方法、装置、设备及存储介质 | |
CN112947941A (zh) | 一种添加异常处理代码的方法和装置 | |
CN112597012A (zh) | 应用程序的遍历方法、装置、电子设备和存储介质 | |
CN111124627B (zh) | 应用程序的调起者确定方法、装置、终端及存储介质 | |
CN113687880B (zh) | 一种调用组件的方法、装置、设备和介质 | |
CN112000573B (zh) | 代码质量的监控方法、装置、计算机设备及介质 | |
CN111382017A (zh) | 故障查询方法、装置,服务器及存储介质 | |
CN114329149A (zh) | 页面信息自动抓取的检测方法、装置、电子设备及可读存储介质 | |
CN111741046B (zh) | 数据上报方法、获取方法、装置、设备及介质 | |
CN114416029A (zh) | 数据处理方法、装置、设备、存储介质及计算机程序产品 | |
CN114218313A (zh) | 数据管理方法、装置、电子设备、存储介质及产品 | |
CN113138767A (zh) | 代码语言转换方法、装置、电子设备及存储介质 | |
CN112783574A (zh) | 应用程序开发方法、装置、设备和存储介质 | |
CN117033318B (zh) | 一种待测数据的生成方法、装置、存储介质及电子设备 | |
US11941072B1 (en) | Generating a proactive alert for outdated scraping script | |
CN111209225B (zh) | 获取实际地址的方法、装置、介质和电子设备 | |
CN113849170A (zh) | 代码分享方法、装置、电子设备和存储介质 | |
CN115687141A (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 |