WO2021164189A1 - 应用场景驱动的Android应用微服务自动生成方法 - Google Patents
应用场景驱动的Android应用微服务自动生成方法 Download PDFInfo
- Publication number
- WO2021164189A1 WO2021164189A1 PCT/CN2020/100966 CN2020100966W WO2021164189A1 WO 2021164189 A1 WO2021164189 A1 WO 2021164189A1 CN 2020100966 W CN2020100966 W CN 2020100966W WO 2021164189 A1 WO2021164189 A1 WO 2021164189A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- application
- event
- user
- microservice
- input
- Prior art date
Links
Images
Classifications
-
- 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/35—Creation or generation of source code model driven
-
- 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/34—Graphical or visual programming
Definitions
- the invention relates to the field of Android application microservices, in particular to a method for automatically generating Android application microservices driven by application scenarios.
- Android applications have emerged in large numbers. These applications cover all aspects of functions, including life, health, travel, etc., and have become the main channel for people to use the Internet on the mobile terminal.
- a single application has many functions, which can meet the needs of users of the application, but people prefer to combine some functions of multiple applications to meet the needs of personalized services, such as calling the functions developed by the application through a mobile phone voice assistant interface.
- the prerequisite for achieving this goal is that the function of the application can be used to provide external services or perform secondary development, which needs to be implemented by the developer writing code during the development phase. For functions that are not open during application development, after the application is released, users or secondary developers of the application cannot use it.
- the purpose of the present invention is to provide an application scenario-driven automatic generation technology of Android application microservices, which can realize Android by rebuilding the application runtime software architecture and recording user call sequences without source code and no annotations. Automatic generation of application microservices.
- the present invention adopts the following method scheme:
- An application scenario-driven method for automatically generating Android application microservices includes the following steps:
- Step S1 Based on the application interface information, reconstruct the software embodiment of the application runtime
- Step S2 execute the target function multiple times, record the method call sequence of the target function, and form multiple target function call instances based on the runtime model;
- Step S3 Analyze the obtained call instance to obtain the service module of the microservice of the target function
- Step S4 Given user input, execute the service module of the microservice, and obtain the same result as the original function.
- step S2 is specifically:
- Step S21 When it is checked that the current method is dispatchTouchEvent or setText method, an event is created according to the information of the current method;
- Step S22 Method calls triggered by the user's current operation, and add them to the InvokeTree of the event;
- Step S23 Add event to Events.
- the event is created according to the information of the current method, specifically:
- Step S211 Invoke the method of the caller object in method to obtain componentId and path;
- Step S212 Fill the activityId, methodName, and nethodParameters of the method into the activityId, method, and paramter of the event, respectively.
- step S3 is specifically:
- Step S31 Generate activityId, componentId, and path parts to indicate which component in which page to simulate the user's operation.
- the activityId indicates the page where the user is located, and the componentId and path indicate the components in the page;
- Step S32 Generate InvokeTree, and solve the common subsequence of InvokeTree to obtain a series of methods that the application will call after the simulated user operation is completed;
- Step S33 Generate a method, and the Paramters part indicates which operation of the user is to be simulated, and the service template corresponding to the microservice is obtained.
- step S32 specifically includes the following steps:
- Step S321 Fill the data of the specific method in InvokeTree into the data pool, where the specific method is the method caller of the component in the page and its sub-methods; the filled data is the caller of the specific method and its sub-methods, Call parameters, the return value of the call;
- Step S322 Delete the method calls in InvokeTree according to the collected data
- Step S323 Convert InvokeTree into a string sequence, and obtain n string call sequences
- Step S324 Find the string sequence with the shortest length, and based on the string sequence, sequentially check whether the strings at the same position in other string sequences are the same. If the string sequences at the same position are all the same, add this string In the final result, until all the strings in the shortest string sequence are checked, the string form of the last common subsequence is obtained;
- Step S325 Reversely parse the string form of the last common subsequence into an InvokeTree.
- step S33 is specifically:
- Step S331 Divide the operation into input operation and click operation
- Step S332 For the click operation, set nethod as dispatchTouchEvent, and Paramters represent the position of the current component on the screen, and its value does not need to be obtained from Input, but can be obtained directly by calling the method of the component object MotionEvent itself;
- Step S333 For the input operation, set the method as setText, Paramters represents the user's input data, the source of Paramter is input, and the order of the user input parameters is the same as the order in which the setText method appears;
- Step S334 Therefore, the input type parameter algorithm will traverse the sequence in the template. If it is the setText method, replace ⁇ T i ,V i > in Paramters with ⁇ T i ,j>, that is, the parameter of the method is the jth
- the data entered by the user to represent the data mapping between Input and Paramters.
- step S4 is specifically:
- Step S41 Instantiate events of the service according to user input
- Step S42 Execute the Events of the service template of the microservice. After all the events of the service template of the microservice are completed, the page presented is the output of the microservice.
- step S41 is specifically:
- Step S411 Determine the specific value of Paramters according to the mapping relationship between Input in the API service template obtained before and Paramters in Event i;
- Step S412 For a specific user input Input′, when the method in Event i is setText, if a parameter in Paramters is ⁇ T i ,j>, assign the j-th data V j in Input′ Give it, that is, the parameters in Paramters become specific values ⁇ T i ,V j >; when the method in Event i is dispatchTouchEvent, there is only one parameter in Paramters, and according to the position of the view component on the page corresponding to the componentId, To generate a MotionEvent object and assign it to the parameters in Paramters.
- step S42 is specifically
- Step S421 Set the Event i of each service to start from the home page of the application, that is, the page indicated by the activityId of Event 1 is the home page of the application, and then execute Events in sequence;
- Step S422 For the execution of each Event i , first perform on the page indicated by the activityId, and then determine the object view in the interface used to simulate the user operation according to the componentId and path, and simulate the user operation through the setText method or dispatchTouchEvent method;
- Step S423 After simulating the user's operation, monitor the next method call of the application to obtain the ExecutionInvokeTree, and compare it with the method in the InvokeTree of the currently executed Event i ; if the two InvokeTrees are exactly the same, it is considered The execution of the current Event i has ended, and the next Event i+1 can be executed
- Step S424 After all the events in the microservice template are executed, the page presented by the application is the output of the microservice.
- the present invention has the following beneficial effects:
- the present invention can record the user call sequence by monitoring all the methods in the Android framework and the application under the condition of no source code and no annotation, and obtain the call template of the microservice by analyzing the call sequence of multiple users, and rebuild the application runtime software system Structure, so as to realize the automatic generation of Android application microservices.
- FIG. 1 is a schematic diagram of the analysis and conversion process from user operation to microservice invocation sequence in an embodiment of the present invention
- FIG. 2 is a schematic diagram of a process of generating a service template and executing a service according to a calling sequence in an embodiment of the present invention
- FIG. 3 is a schematic diagram of an algorithm for recording a user call sequence in an embodiment of the present invention.
- FIG. 4 is a schematic diagram of an algorithm for generating an Event in an embodiment of the present invention.
- Figure 5 is a schematic diagram of an algorithm for removing irrelevant method calls in an embodiment of the present invention.
- Fig. 6 is a schematic diagram of an algorithm for obtaining a common subsequence of InvokeTree in an embodiment of the present invention
- FIG. 7 is a schematic diagram of an algorithm for executing microservices in an embodiment of the present invention.
- FIG. 8 is a microservice interface of recording QQ music to search for songs in an embodiment of the present invention.
- Figure 9 is an input interface in an embodiment of the present invention.
- Fig. 10 is an output interface in an embodiment of the present invention.
- the present invention provides an application scenario-driven method for automatically generating Android application microservices, which includes the following steps:
- Step S1 Based on the application interface information, reconstruct the application runtime software architecture
- Step S2 execute the target function multiple times, record the method call sequence of the target function, and form multiple target function call instances based on the runtime model;
- Step S3 Analyze the obtained call instance to obtain the service module of the microservice of the target function
- Step S4 Given user input, execute the service module of the microservice, and obtain the same result as the original function.
- V in represents the n parameter values;
- InvokeTree indicates the subsequent invocation sequence of the application after the user has performed the current operation.
- InvokeTree ⁇ Invoke 1 ⁇ Invoke 1,1 ⁇ ... ⁇ ,Invoke 1,2 ⁇ ... ⁇ ,... ⁇ ,Invoke 2 ⁇ ... ⁇ ,... ⁇ ;
- Input and Output can be directly obtained because they are given by the user.
- the events of the call sequence can be obtained by analyzing the call log of the application.
- the call log can be obtained by monitoring all methods in the Android framework and applications. Event is obtained through the algorithm shown in Figure 3:
- an event is created based on the information of the current method. Specifically: call the method of the caller object in the method to obtain the componentId and path; fill the activityId, methodName, and nethodParameters of the method into the activityId, method, and paramter of the event, respectively.
- the formal representation of the user operation of this process can be obtained through the above method, namely Events. Coupled with the Input and Output given by the user, the recording of a user call sequence corresponding to this service is completed.
- Output is the page obtained after executing all Events in the template. So only need to generate each Event i of the service template.
- the service template of the service can be obtained. The algorithm for generating Event is shown in Figure 4:
- the activityId indicates the page where the user is located, and the componentId and path indicate the components in the page.
- the operation performed by the user is fixed when using a certain service. Therefore, for multiple instances of this service, the number of events is the same, and the three elements of the activityId, componentId, and path of the same location Event i (for example, all i-th Event i) are the same. In this way, you only need to place these three elements in the Event i of an instance in the corresponding positions in the template. These elements can be obtained from the log.
- the first step is to preprocess InvokeTree.
- Applications usually make a series of method calls in response to user operations. However, some of the method calls that occur in the application after the user's operation have nothing to do with the user's operation.
- the next step is to remove this part of the irrelevant method calls based on the transitivity of the data.
- the second step is to obtain the common subsequence of InvokeTree. In this step, according to the idea of finding the common subsequence of the string, the common subsequence of InvokeTree is solved.
- This part specifies what kind of user's operation is to be simulated. Because user operations are basically input operations or click operations (slide operations can be regarded as continuous click operations), the operations are also divided into input operations and click operations.
- the method is set as dispatchTouchEvent, and Paramters represent the position of the current component on the screen, and its value does not need to be obtained from Input, but can be obtained directly by calling the method of the component object MotionEvent itself.
- the method is set to setText, and Paramters represent the user's input data. The source of Paramter can only be input, and the order of user input parameters is the same as the order in which the setText method appears. Therefore, the input type parameter algorithm will traverse the sequence in the template.
- the InvokeTree part of the Event of the service template is generated in two steps. First, remove this part of the irrelevant method calls according to the transitivity of the data, and then find the common subsequence of InvokeTree.
- the first part is to remove irrelevant method calls through the algorithm shown in Figure 5 to complete the preprocessing of InvokeTree:
- the method call is deleted.
- An InvokeTree is composed of multiple call trees.
- each tree is traversed in advance.
- the class name of the caller of the method, the method name and the class name corresponding to the parameters in the method are extracted, and they are spliced into a string, and then Concatenate the obtained character strings into a new character string in the order of pre-order traversal. In this way, after the traversal is completed, this string is used to represent the call tree.
- each call tree in InvokeTree is converted into a string, so that the string sequence corresponding to InvokeTree is obtained.
- multiple InvokeTree instances are converted into string sequences, so that n string call sequences are obtained.
- the sequence is reversely parsed into an InvokeTree, and this InvokeTree is the largest common subsequence of these multiple InvokeTree instances. This will get the InvokeTree of the Event.
- the operation of the user is simulated to execute the corresponding service.
- Each user operation from opening the application is recorded as an Event i in the service, so all we have to do is to execute these Event i in turn.
- the microservices are executed through the following algorithm: Divide into 2 parts to execute the service. The algorithm is shown in Figure 7:
- Event i of each service starts from the home page of the application, that is, the page indicated by the activityId of Event 1 is the home page of the application, and then the Events are executed in sequence.
- each Event i For the execution of each Event i , it must first be performed on the page indicated by the activityId. Then determine the object view used to simulate user operations in the interface according to componentId and path, and then simulate user operations through the setText method or dispatchTouchEvent method.
- the page presented by the application is the output of the microservice.
- the development based on the Java language, Android Studio, and the Eclipse platform is divided into two parts: recording user call sequences and generating microservices.
- recording the user call sequence import the recording-related technology source code into the Android Studio workspace, generate and activate the corresponding module on the Android platform installed on xposed, then open the homepage of the application that needs to record the microservice, and click the circle on the bottom left Button area, and then perform the corresponding operations in accordance with the functional steps. When all operations are completed, click the round button again to end this recording.
- Figure 8 shows the interface when recording the QQ music search song microservice.
- microservices can be generated according to the call sequences. Import the relevant technology source code of the analysis sequence into the Eclipse workspace, find the 30th line of StartBuildModel.java and give the location of each txt that saves the user calling sequence, and then run the java file to enter the analysis phase. After the console output is completed, I save the result obtained in a txt file and put it under storage/emulated/0 on the phone, and then import the relevant technology source code of the generated microservice into the Android Studio workspace, and find the 45th line of MethodTrackPool.java and fill in the saved result Txt file name, run the program to generate the corresponding microservice.
- the availability rate of the generated microservices is about 84%.
- the reasons for the unavailability of the generated microservices are: because the execution of the microservices relies on the monitoring of methods in the APP, when some methods of the APP are not monitored, the generated microservices may be defective, which may lead to An error occurred during the execution of the microservice.
- microservice template By analyzing and recording the user call sequence and recording each user operation event, a microservice template is generated. Each Event in the template is re-executed during the execution of the microservice to realize the execution of the microservice. Therefore, when the recorded user call sequence is complete, the corresponding microservice can be realized by re-invoking the Event in the analyzed microservice template.
- the microservice input and output interfaces for the QQ music search function are shown in Figures 9 and 10.
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
一种应用场景驱动的Android应用微服务自动生成方法,包括以下步骤:步骤S1:基于应用接口信息,重建应用运行时软件体系结构;步骤S2:多次执行目标功能,录制目标功能的方法调用序列,形成基于运行时模型的多个目标功能的调用实例;步骤S3:分析得到的调用实例,获得目标功能的微服务的服务模块;步骤S4:于是给定用户输入,执行微服务的服务模块,得到与原功能相同的结果。该方法能够在无源码、无标注情况下,通过监听Android框架和应用中所有的方法来录制用户调用序列,并通过对多个用户调用序列分析得到微服务的调用模板,重建应用运行时软件体系结构,从而实现Android应用微服务的自动生成。
Description
本发明涉及Android应用微服务领域,具体涉及一种应用场景驱动的Android应用微服务自动生成方法。
近年来,随着移动设备的蓬勃发展,Android应用大量涌现。这些应用囊括了各个方面的功能,包括生活、健康、旅游等,已经成为了人们在移动端使用互联网的主要渠道。单个应用的功能众多,能够满足该应用的使用者的需求,但人们更希望能够将多个应用的一些功能组合使用,以达到个性化服务的需求,例如通过手机语音助手来调用应用开发的功能接口。而这个目标实现的前提在于应用的功能要能够用于提供外部服务或进行二次开发,这需要由开发者在开发阶段编写代码实现。对于在应用开发时没有开放的功能,应用发布后,用户或应用的二次开发者是无法使用的。
目前,通过使用Xposed框架监听Android框架和应用中所有的方法,我们能够较为轻松地得到应用所执行的类和方法,从而得到功能执行的调用序列。但想通过这些调用序列生成微服务的问题是,在面对复杂的应用时,如果不对调用序列进行处理,我们往往无法得到正确的微服务来实现相应的功能。
有鉴于此,本发明的目的在于提供一种应用场景驱动的Android应用微服务自动生成技术,能够在无源码、无标注情况下,通过重建应用运行时软件体系结构、录制用户调用序列,实现Android应用微服务的自动生成。
为实现上述目的,本发明采用如下方法方案:
一种应用场景驱动的Android应用微服务自动生成方法,包括以下步骤:
步骤S1:基于应用接口信息,重建应用运行时软件体现结构;
步骤S2:多次执行目标功能,录制目标功能的方法调用序列,形成基于运行时模型的多个目标功能的调用实例;
步骤S3:分析得到的调用实例,获得目标功能的微服务的服务模块;
步骤S4:于是给定用户输入,执行微服务的服务模块,得到与原功能相同的结果。
进一步的,所述步骤S2具体为:
步骤S21:当检查到当前的方法为dispatchTouchEvent或setText方法,根据当前method的信息创建event;
步骤S22:用户当前操作触发的方法调用,并将它们添加到event的InvokeTree中;
步骤S23:将event添加到Events中。
进一步的,所述步骤S21中根据当前method的信息创建event,具体为:
步骤S211:调用method中的caller对象的方法,获取componentId和path;
步骤S212:将method的activityId和methodName,nethodParameters分别填充到event的activityId,method和paramter。
进一步的,所述步骤S3具体为:
步骤S31:生成activityId,componentId,path部分,指明哪个页面中的哪个组件来模拟用户的操作。其中activityId指明了用户所在的页面,componentId,path指明了页面中的组件;
步骤S32:生成InvokeTree,并求解InvokeTree的公共子序列,得到模拟用户操作完成后,应用会调用的一系列的方法;
步骤S33:生成method,Paramters部分,指明要模拟用户的哪种操作,得到了对应微服务的服务模板。
进一步的,所述步骤S32具体包括如下步骤:
步骤S321:将InvokeTree中特定方法的数据填充到数据池中,所述特定的方法为方法调用者为页面中组件的方法及其子方法;填充的数据为特定方法和其子方法的调用者,调用参数,调用的返回值;
步骤S322:根据收集的数据对InvokeTree中的方法调用进行删减;
步骤S323:将InvokeTree转化为字符串序,得到了n个字符串调用序列;
步骤S324:找到长度最短的字符串序列,并以此字符串序列为依据,依次检查其他字符串序列中相同位置的字符串是否相同,如果相同位置的字符串序列全部相同,将此字符串加入到最终的结果中,直到检查完最短字符串序列的全部位置的字符串,得到了最后的公共子序列的字符串形式;
步骤S325:将最后的公共子序列的字符串形式反向解析为一个InvokeTree。
进一步的,所述步骤S33具体为:
步骤S331:将操作分为输入操作和点击操作;
步骤S332:对于点击操作,将nethod定为dispatchTouchEvent,Paramters表示当前组件在屏幕中的位置,其值不需要从Input中获取,可以直接通过调用组件对象MotionEvent本身的方法得到;
步骤S333:对于输入操作,将method定为setText,Paramters表示为用户的输入数据,Paramter的来源是输入input,且用户输入参数的顺序和setText方法出现的顺序相同;
步骤S334:因此输入类型参数算法将遍历模板中的序列,如果是setText方法,则将Paramters中的<T
i,V
i>替换为<T
i,j>,即该方法的参数为第j个用户输入的数据,以表示Input与Paramters中的数据映射。
进一步的,所述步骤S4具体为:
步骤S41:根据用户输入来实例化服务的Events;
步骤S42:执行微服务的服务模板的的Events,完成微服务的服务模板所有Event执行完成之后呈现页面即为微服务的Output。
进一步的,所述步骤S41具体为:
步骤S411:根据之前得到的API服务模板中Input与Event
i中Paramters的映射关系来确定Paramters的具体值;
步骤S412:对于一个具体的用户输入Input′,当Event
i中的method为setText时,如果Paramters中的某个参数为<T
i,j>,则将Input′中的第j个数据V
j赋值给它,即Paramters中的参数变为具体值<T
i,V
j>;当Event
i中的method为dispatchTouchEvent时,规定Paramters中的参数只有一个,并根据componentId对应的页面上view组件的位置,来生成一个MotionEvent对象,赋值给Paramters中的参数。
进一步的,所述步骤S42具体为
步骤S421:设定每个服务的Event
i都是从应用的首页面开始的,即Event
1的activityId所指示的页面就是应用的首页面,然后依次执行Events;
步骤S422::对于每个Event
i的执行,首先在activityId所指示的页面进行,然后根据componentId和path确定界面中用来模拟用户操作的对象view,并通过setText方法或dispatchTouchEvent方法来模拟用户操作;
步骤S423:在模拟完用户的操作之后,对应用接下来进行的方法调用进行监听,得到ExecutionInvokeTree,并与当前执行的Event
i的InvokeTree中的方法进行比较;如果这两个InvokeTree完全相同,就认为当前Event
i的执行已经结束,可以执行下一个Event
i+1
步骤S424:当微服务模板中所有Event执行完成之后,应用所呈现的页面即为微服务的Output。
本发明与现有技术相比具有以下有益效果:
本发明能够在无源码、无标注情况下,通过监听Android框架和应用中所有的方法来录制用户调用序列,并通过对多个用户调用序列分析得到微服务的调用模板,重建应用运行时软件体系结构,从而实现Android应用微服务的自动生 成。
图1是本发明一实施例中从用户操作到微服务调用序列的分析、转换过程示意图;
图2是本发明一实施例中根据调用序列生成服务模板及执行服务的过程示意图;
图3是本发明一实施例中录制用户调用序列的算法示意图;
图4是本发明一实施例中生成Event的算法示意图;
图5是本发明一实施例中去除无关的方法调用的算法示意图;
图6是本发明一实施例中获得InvokeTree的公共子序列的算法示意图;
图7是本发明一实施例中执行微服务的算法示意图;
图8是本发明一实施例中录制QQ音乐搜索歌曲微服务界面;
图9是本发明一实施例中输入界面;
图10是本发明一实施例中输出界面。
下面结合附图及实施例对本发明做进一步说明。
请参照图1,本发明提供一种应用场景驱动的Android应用微服务自动生成方法,包括以下步骤:
步骤S1:基于应用接口信息,重建应用运行时软件体系结构;
步骤S2:多次执行目标功能,录制目标功能的方法调用序列,形成基于运行时模型的多个目标功能的调用实例;
步骤S3:分析得到的调用实例,获得目标功能的微服务的服务模块;
步骤S4:于是给定用户输入,执行微服务的服务模块,得到与原功能相同的结果。
在本实施例中,输入的集合为Input={V
i1,V
i2……V
in}。V
in表示第n个参数值;输出的集合为Output={activityId}其中activityId:表示页面的Id;
方法调用的集合为Invoke=<Caller,Method,Args,Result>其中Caller表示这个方法的调用者,,Method表示调用的方法,Args表示方法调用时传入的所有参数,Args={arg
1,arg
2……arg
n},arg
j表示方法调用时传入的某个参数,Result表示调用方法的返回值。
事件的集合为Events={Event
1,Event
2,…Event
n},其中Event
i代表第i个用户操作Event
i={activityId,componentId,path,method,Paramters,InvokeTree}其中activityId表示这个操作执行所在的页面,componentId表示触发这个操作的组件的ID;path表示视图中从根节点到触发操作节点的路径;method表示模拟用户操作的方法,如输入文字(setText)和点击屏幕(dispatchTouch);Paramters表示执行时需要的参数,其中Paramters={<T
1,V
1>,<T
2,V
2>…<T
n,V
n>};如{<String,Ironman>},可以从Input中获取。InvokeTree:表示用户执行完当前操作后,应用的后继调用序列。
InvokeTree={Invoke
1{Invoke
1,1{…},Invoke
1,2{…},…},Invoke
2{…},…};
用户调用序列的集合为Instance=<Input,Output,Events>其中Input表示微服务的输入;Output表示服务的输出结果,即服务最后呈现的页面;Events表示微服务执行过程中的用户操作。
应用调用日志的集合为MethodLogs={method
1,method
2,……metod
n}其中method
i={caller
i,methodName
i,methodParameters
i,activityId
i,methodChilds
i}caller
i表示方法的调用者;methodName
i表示方法的名字,methodParameters
i={<P
2,V
1>,<P
2,V
2>……<P
n,V
n>}P
i表示第i个参数的类型,V
i表示第i个参数的值;activityId
i表示发在方法调用的页面的Id;methodChilds
i表示此方法中调用的其他方法的集合;methodChilds
i={method
i1,method
i2……method
in}
微服务服务模板的集合为Template=<Output,Events>,其中Output表示服务的输出结果;Events表示微服务执行过程中的用户操作。
在本实施例中,对于一个用户调用序列来说,Input与Output是可以直接获得的,因为它们是用户给定。对于调用序列的Events,可以通过分析应用的调用 日志得到。调用日志可以通过监听Android框架和应用中所有的方法来获得。通过如图3所示的算法获得Event:
不断的遍历检查MethodLogs中的方法调用,分为3步获取Events,算法如图3所示:
第一,根据method的信息创建event(第3-4行)
当检查到当前的方法为dispatchTouchEvent或setText方法,根据当前method的信息创建一个event。具体为:调用method中的caller对象的方法,获取componentId和path;将method的activityId和methodName,nethodParameters分别填充到event的activityId,method和paramter。
第二,生成event的InvokeTree(第5-8行)
对于接下来的方法,且在下一个dispatchTouchEvent或setText方法之前的方法,认为它们是用户当前操作触发的方法调用,并将它们添加到event的InvokeTree中。
第三,将event添加到Events中(第10行)
在经过上面2步之后,就生成了一个用户操作的形式化表示,即event,并将此event添加到Events中。
对于一个用户操作产生方法调用日志,通过上面的方法就可以得到此过程的用户操作形式化表示,即Events。再加上用户给定的Input与Output,就完成了此服务对应的一个用户调用序列的录制。
在本实施例中,在服务模板中,Output为执行完模板中所有Event后得到的页面。所以只需要生成服务模板的每一个Event
i。通过对多组执行相同微服务的用户调用序列进行分析,能够得到该服务的服务模板。生成Event的算法如图4所示:
将对多个实例进行分析,从而生成该服务的服务模板的Event,通过3步生成服务模板的Event,算法如图4所示:
第一:生成activityId,componentId,path部分(2-6行):
这一部分指明了,要用哪个页面中的哪个组件来模拟用户的操作。activityId指明了用户所在的页面,componentId,path指明了页面中的组件。同时假设用户在使用某个服务时,做的操作是固定的。所以对于这个服务的多个实例来说,Event的数量是相同的,且相同位置Event
i(如,都是第i个Event
i)的activityId,componentId,path这三个元素都是相同的。这样只需要将一个实例的Event
i中的这三个元素,放到模板中对应的位置就可以了。可以从日志中获得这些元素。
第二:生成InvokeTree部分(7-11行):
这一部分说明了模拟用户操作完成后,应用会调用的一系列的方法。正是通过监听这一部分方法调用,来检测当前操作是否完成,是否可以进行下一步的操作。通过两步来完成InvokeTree的生成。第一步,对InvokeTree进行预处理。应用通常为了响应用户的操作,通常会进行一系列的方法调用。但是用户操作后,应用中发生的这些方法调用,其中有一部分与用户的操作无关。接下来就要根据数据的传递性来去除这一部分无关的方法调用。第二步,获取InvokeTree的公共子序列。在这一步,按照求字符串公共子序列的思路,来求解InvokeTree的公共子序列。
第三:生成method,Paramters部分(13-14行):
这一部分指明了,要模拟用户的哪种操作。因为用户操作基本上都是输入操作或点击操作(滑动操作可以看作连续的点击操作),所以也将操作分为输入操作和点击操作。对于点击操作,将method定为dispatchTouchEvent,Paramters表示当前组件在屏幕中的位置,其值不需要从Input中获取,可以直接通过调用组件对象MotionEvent本身的方法得到。对于输入操作,将method定为setText,Paramters表示为用户的输入数据。Paramter的来源只可能是输入input,且用户输入参数的顺序和setText方法出现的顺序相同。因此输入类型参数算法将遍历模板中的序列,如果是setText方法,则将Paramters中的<T
i,V
i>替换为 <T
i,j>,即该方法的参数为第j个用户输入的数据,以表示Input与Paramters中的数据映射。
其中,分两步来生成服务模板的Event的InvokeTree部分。首先要根据数据的传递性来去除这一部分无关的方法调用,再求InvokeTree的公共子序列。
第一部分,通过如图5所示的算法来去除无关的方法调用,完成对InvokeTree的预处理:
通过2步对InvokeTree进行预处理,算法如如图5所示:
第一,将数据池中的数据进行初始化(1-5行)
挑选InvokeTree中特定方法的数据填充到数据池中,这些特定的方法为方法调用者为页面中组件的方法及其子方法。填充的数据为特定方法和其子方法的调用者,调用参数,调用的返回值。因为这些数据很可能与页面上的内容相关联,这些数据的变化可能会引起页面内容的变化,所以选择这些数据作为判别方法的依据,即只要方法中不涉及这些数据,那么就可以认为这是一个不重要的方法,可以去除。
第二,根据收集的数据对InvokeTree中的方法调用进行删减(6-10行)
如果InvokeTree中的某个方法调用(包括其子方法调用)的调用者,调用参数或调用的返回值都不存在于之前的数据池中,那么就将这个方法调用删除。
第二部分,通过如图6所示算法来获得InvokeTree的公共子序列:
通过3步来获得InvokeTree的公共子序列,算法如如图6所示:
第一,先将InvokeTree转化为一个字符串序列(2-5行)。
一个InvokeTree是由多个调用树构成的。在这里,对每棵树都进行先序遍历,在遍历树的节点时,提取方法的调用者的类名,方法名和方法中的参数对应的类名,并将其拼接为一个字符串,然后按先序遍历的顺序将所获得的字符串拼接为一个新的字符串。这样在遍历完成后,就用此字符串代表此调用树。然后,按照此方法将InvokeTree中的每个调用树都转化为一个字符串,这样就得到了InvokeTree对应的字符串序列。
第二,获得n个字符串调用序列的公共子序列(6-17)。
按照第一步的方法,将多个InvokeTree实例都转化为字符串序列,这样就得到了n个字符串调用序列。首先找到长度最短的字符串序列,并以此字符串序列为依据,依次检查其他字符串序列中相同位置的字符串是否相同,如果相同位置的字符串序列全部相同,那么就将此字符串加入到最终的结果中。直到检查完最短字符串序列的全部位置的字符串。这样就得到了最后的公共子序列的字符串形式。
第三,将序列反向解析为一个InvokeTree(第18行)。
在得到最大公共子序列后,在将此序列反向解析为一个InvokeTree,此InvokeTree就是这多个InvokeTree实例的最大公共子序列。这样就得到Event的InvokeTree了。
这样,按照上面的步骤,就得到了对应微服务的服务模板。
在本实施例中,模拟用户的操作来执行对应服务。将从打开应用开始的每一个用户操作记为服务中的一个Event
i,所以我们要做的就是依次执行这些Event
i。通过以下算法来执行微服务:分为2个部分来执行服务。算法如图7所示:
第一,使用用户输入来实例化服务的Events(2-18行)
根据之前得到的API服务模板中Input与Event
i中Paramters的映射关系来确定Paramters的具体值。对于一个具体的用户输入Input′来说,当Event
i中的method为setText时,如果Paramters中的某个参数为<T
i,j>,那么就将Input′中的第j数据的V
j,赋值给它,即Paramters中的参数变为具体值<T
i,V
j>;当Event
i中的method为dispatchTouchEvent时,规定Paramters中的参数只有一个,并根据componentId对应的页面上view组件的位置,来生成一个MotionEvent对象,赋值给Paramters中的参数。
第二,执行服务的Events(第10、17行)
规定每个服务的Event
i都是从应用的首页面开始的,即Event
1的activityId所指示的页面就是应用的首页面,然后依次执行Events。
对于每个Event
i的执行,首先要在activityId所指示的页面进行。然后根据componentId和path确定界面中用来模拟用户操作的对象view,然后通过setText方法或dispatchTouchEvent方法来模拟用户操作。
在模拟完用户的操作之后,对应用接下来进行的方法调用进行监听,得到ExecutionInvokeTree,并与当前执行的Event
i的InvokeTree中的方法进行比较。如果这两个InvokeTree完全相同,那么就认为当前Event
i的执行已经结束,可以执行下一个Event
i+1
当微服务模板中所有Event执行完成之后,应用所呈现的页面即为微服务的Output。
在本实施例中,基于java语言和Android Studio以及Eclipse平台开发的,分为录制用户调用序列和生成微服务两个部分。录制用户调用序列时将录制相关技术源代码导入Android Studio工作区间,在装有xposed上的Android平台上生成相应的模块并激活,然后打开需要录制微服务的应用的首页,点击左下方的圆形按钮区域,然后按照功能步骤执行相应操作,当所有操作执行完毕后,再次点击圆形按钮结束本次录制,这样就完成了一个用户调用序列的录制,录制的结果保存在storage/emulated/0下的methodLog.txt文件中。图8为录制QQ音乐搜索歌曲微服务时的界面。
录制成功多个用户调用序列后,就可以根据调用序列生成微服务。将分析序列的相关技术源代码导入Eclipse工作区间,找到StartBuildModel.java的第30行后给出每一个保存用户调用序列的txt的位置,然后运行java文件进入分析阶段,待控制台输出完成后,我将所得到的结果存入txt文件中并放入手机上storage/emulated/0下,然后将生成微服务相关技术源代码导入Android Studio工作区间,找到MethodTrackPool.java的第45行填入保存结果的txt的文件名,运行该程序,就生成了相对应的微服务。
在本实施例中,针对豆瓣电影、QQ音乐等9个应用共计13个功能进行了微服务生成的验证测试,其中有11个验证正确。验证结果如表1所示:
APP | 验证微服务数量 | 验证正确微服务数量 |
库克云车 | 1 | 1 |
店来客生意收银软件 | 2 | 1 |
豆瓣电影 | 2 | 1 |
欧路词典 | 1 | 1 |
QQy音乐 | 2 | 2 |
食谱大全 | 2 | 2 |
TimberX | 1 | 1 |
掌上兼职 | 1 | 1 |
Anki | 1 | 1 |
总计 | 13 | 11 |
表1验证结果
由上表可知,生成的微服务的可用率约为84%。导致生成的微服务不可用的原因为:因为微服务的执行依靠对APP中方法的监听,所以当没有监听到APP的某些方法时,可能会导致生成的微服务是有缺陷的,进而导致在执行微服务时出错。
通过分析录制用户调用序列,记录每一个用户操作Event,从而生成微服务模板。在微服务执行时重新执行模板中的每一个Event来实现微服务的执行,因此当录制的用户调用序列完整时,重新调用分析得到的微服务模板中的Event就能实现相应微服务。针对QQ音乐搜索功能的微服务输入和输出界面如图9和10所示。
通过以上的验证结果以及输入界面和输出界面,我们可以发现通过生成的搜索音乐微服务搜索麻雀得到的结果和我们正常搜索歌曲最终得到的页面一致,同时,在大多数情况下我们能够通过分析多个用户序列来生成正确的微服务,说明该方法的有效性和准确性均能够被满足。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (9)
- 一种应用场景驱动的Android应用微服务自动生成方法,其特征在于,包括以下步骤:步骤S1:基于应用接口信息,重建应用运行时软件体现结构;步骤S2:多次执行目标功能,录制目标功能的方法调用序列,形成基于运行时模型的多个目标功能的调用实例;步骤S3:分析得到的调用实例,获得目标功能的微服务的服务模块;步骤S4:于是给定用户输入,执行微服务的服务模块,得到与原功能相同的结果。
- 根据权利要求1所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S2具体为:步骤S21:当检查到当前的方法为dispatchTouchEvent或setText方法,根据当前method的信息创建event;步骤S22:用户当前操作触发的方法调用,并将它们添加到event的InvokeTree中;步骤S23:将event添加到Events中。
- 根据权利要求2所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S21中根据当前method的信息创建event,具体为:步骤S211:调用method中的caller对象的方法,获取componentId和path;步骤S212:将method的activityId和methodName,methodParameters分别填充到event的activityId,method和paramter。
- 根据权利要求1所述的的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S3具体为:步骤S31:生成activityId,componentId,path部分,其中activityId指明了用户所在的页面,componentId,path指明了页面中的组件;指明哪个页面中的哪个组件来模拟用户的操作;步骤S32:生成InvokeTree,并求解InvokeTree的公共子序列,从而得到模拟用户操作完成后,应用会调用的一系列的方法;步骤S33:生成method,Paramters部分,指明要模拟用户的哪种操作,得到了对应微服务的服务模板。
- 根据权利要求1所述的的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S32具体包括如下步骤:步骤S321:将InvokeTree中特定方法的数据填充到数据池中,所述特定的方法为方法调用者为页面中组件的方法及其子方法;填充的数据为特定方法和其子方法的调用者,调用参数,调用的返回值;步骤S322:根据收集的数据对InvokeTree中的方法调用进行删减;步骤S323:将InvokeTree转化为字符串序,得到了n个字符串调用序列;步骤S324:找到长度最短的字符串序列,并以此字符串序列为依据,依次检查其他字符串序列中相同位置的字符串是否相同,如果相同位置的字符串序列全部相同,将此字符串加入到最终的结果中,直到检查完最短字符串序列的全部位置的字符串,得到了最后的公共子序列的字符串形式;步骤S325:将最后的公共子序列的字符串形式反向解析为一个InvokeTree。
- 根据权利要求1所述的的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S33具体为:步骤S331:将操作分为输入操作和点击操作;步骤S332:对于点击操作,将method定为dispatchTouchEvent,Paramters表示当前组件在屏幕中的位置,其值不需要从Input中获取,可以直接通过调用组件对象MotionEvent本身的方法得到;步骤S333:对于输入操作,将method定为setText,Paramters表示为用户的输入数据,Paramter的来源是输入input,且用户输入参数的顺序和setText方法出现的顺序相同;步骤S334:因此输入类型参数算法将遍历模板中的序列,如果是setText方法,则将Paramters中的<T i,V i>替换为<T i,j>,即该方法的参数为第j个用户输入的数据,以表示Input与Paramters中的数据映射。
- 根据权利要求1所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S4具体为:步骤S41:根据用户输入来实例化服务的Events;步骤S42:执行微服务的服务模板的的Events,完成微服务的服务模板所有Event执行完成之后呈现页面即为微服务的Output。
- 根据权利要求7所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S41具体为:步骤S411:根据之前得到的API服务模板中Input与Event i中Paramters的映射关系来确定Paramters的具体值;步骤S412:对于一个具体的用户输入Input′,当Event i中的method为setText时,如果Paramters中的某个参数为<T i,j>,则将Input′中的第j数据的V j,赋值给它,即Paramters中的参数变为具体值<T i,V j>;当Event i中的method为dispatchTouchEvent时,规定Paramters中的参数只有一个,并根据componentId对应的页面上view组件的位置,来生成一个MotionEvent对象,赋值给Paramters中的参数。
- 根据权利要求7所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S42具体为步骤S421:设定每个服务的Event i都是从应用的首页面开始的,即Event 1的activityId所指示的页面就是应用的首页面,然后依次执行Events;步骤S422::对于每个Event i的执行,首先在activityId所指示的页面进行,然后根据componentId和path确定界面中用来模拟用户操作的对象view,并通过setText方法或dispatchTouchEvent方法来模拟用户操作;步骤S423:在模拟完用户的操作之后,对应用接下来进行的方法调用进行监听,得到ExecutionInvokeTree,并与当前执行的Event i的InvokeTree中的方法进行比较;如果这两个InvokeTree完全相同,就认为当前Event i的执行已经结束,可以执行下一个Event i+1步骤S424:当微服务模板中所有Event执行完成之后,应用所呈现的页面即为微服务的Output。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010096139.6A CN111338618B (zh) | 2020-02-17 | 2020-02-17 | 应用场景驱动的Android应用微服务自动生成方法 |
CN202010096139.6 | 2020-02-17 |
Publications (1)
Publication Number | Publication Date |
---|---|
WO2021164189A1 true WO2021164189A1 (zh) | 2021-08-26 |
Family
ID=71183458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/CN2020/100966 WO2021164189A1 (zh) | 2020-02-17 | 2020-07-09 | 应用场景驱动的Android应用微服务自动生成方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN111338618B (zh) |
WO (1) | WO2021164189A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385150A (zh) * | 2021-09-18 | 2022-04-22 | 北京能科瑞元数字技术有限公司 | 基于智能引擎的低代码开发方法 |
CN118407960A (zh) * | 2024-07-03 | 2024-07-30 | 山东海德尼克液压科技有限公司 | 一种具备性能在线监测的液压阀智能控制方法及系统 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111338618B (zh) * | 2020-02-17 | 2021-09-24 | 福州大学 | 应用场景驱动的Android应用微服务自动生成方法 |
CN114756220A (zh) * | 2022-04-15 | 2022-07-15 | 浙江吉利控股集团有限公司 | 一种微服务代码生成方法及系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109189469A (zh) * | 2018-06-22 | 2019-01-11 | 北京大学 | 基于反射的安卓应用微服务化方法及系统 |
CN110099099A (zh) * | 2019-03-28 | 2019-08-06 | 中国电子科技集团公司电子科学研究院 | 针对地面信息港的空间信息微服务封装及服务集成方法 |
US20190265986A1 (en) * | 2018-02-27 | 2019-08-29 | Avid Technology, Inc. | Plug-ins as microservices |
CN110427174A (zh) * | 2019-08-05 | 2019-11-08 | 浪潮云信息技术有限公司 | 一种基于数据库的微服务构建方法 |
CN111338618A (zh) * | 2020-02-17 | 2020-06-26 | 福州大学 | 应用场景驱动的Android应用微服务自动生成方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10261891B2 (en) * | 2016-08-05 | 2019-04-16 | International Business Machines Corporation | Automated test input generation for integration testing of microservice-based web applications |
US10430250B2 (en) * | 2017-10-11 | 2019-10-01 | International Business Machines Corporation | Decomposing monolithic application into microservices |
CN108762749B (zh) * | 2018-05-24 | 2021-12-21 | 福州大学 | 基于代码分析的系统对象图自动生成方法 |
CN110659206B (zh) * | 2019-08-30 | 2024-05-24 | 深圳市众禧禾立科技有限公司 | 基于微服务的模拟架构建立方法、装置、介质及电子设备 |
-
2020
- 2020-02-17 CN CN202010096139.6A patent/CN111338618B/zh active Active
- 2020-07-09 WO PCT/CN2020/100966 patent/WO2021164189A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20190265986A1 (en) * | 2018-02-27 | 2019-08-29 | Avid Technology, Inc. | Plug-ins as microservices |
CN109189469A (zh) * | 2018-06-22 | 2019-01-11 | 北京大学 | 基于反射的安卓应用微服务化方法及系统 |
CN110099099A (zh) * | 2019-03-28 | 2019-08-06 | 中国电子科技集团公司电子科学研究院 | 针对地面信息港的空间信息微服务封装及服务集成方法 |
CN110427174A (zh) * | 2019-08-05 | 2019-11-08 | 浪潮云信息技术有限公司 | 一种基于数据库的微服务构建方法 |
CN111338618A (zh) * | 2020-02-17 | 2020-06-26 | 福州大学 | 应用场景驱动的Android应用微服务自动生成方法 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114385150A (zh) * | 2021-09-18 | 2022-04-22 | 北京能科瑞元数字技术有限公司 | 基于智能引擎的低代码开发方法 |
CN114385150B (zh) * | 2021-09-18 | 2022-09-02 | 北京能科瑞元数字技术有限公司 | 基于智能引擎的低代码开发方法 |
CN118407960A (zh) * | 2024-07-03 | 2024-07-30 | 山东海德尼克液压科技有限公司 | 一种具备性能在线监测的液压阀智能控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111338618B (zh) | 2021-09-24 |
CN111338618A (zh) | 2020-06-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2021164189A1 (zh) | 应用场景驱动的Android应用微服务自动生成方法 | |
CN110162468B (zh) | 一种测试方法、装置以及计算机可读存储介质 | |
Sene et al. | Organization Communication, and Control in the GALAXY-II Conversational System | |
US10691584B2 (en) | Behavior driven development integration with test tool | |
US7177852B2 (en) | Method and apparatus for extracting knowledge from software code or other structured data | |
US20050147946A1 (en) | Automatic object generation and user interface identification | |
US8024422B2 (en) | Web-based speech recognition with scripting and semantic objects | |
US20040143819A1 (en) | Generic software testing system and mechanism | |
US20050080628A1 (en) | System, method, and programming language for developing and running dialogs between a user and a virtual agent | |
CN104809056B (zh) | 一种接口测试代码的生成方法和装置 | |
CN106471476A (zh) | 用于对经优化代码的编辑并继续以及增强的经优化调试的技术 | |
CN111209185B (zh) | 基于关键词的自动化测试方法及计算机可读存储介质 | |
CN117493158A (zh) | 测试方法及其装置、电子设备、存储介质 | |
CN115454702A (zh) | 日志故障分析方法、装置、存储介质及电子设备 | |
JP5363589B2 (ja) | データ・メタモデルから音声ユーザ・インタフェース・コードを生成するための方法およびシステム | |
CN111158665B (zh) | 代码生成方法及装置、电子设备和存储介质 | |
Glass et al. | Data collection and performance evaluation of spoken dialogue systems: the MIT experience. | |
CN114297057A (zh) | 一种自动化测试用例的设计及使用方法 | |
CN110738384B (zh) | 事件序列的校验方法及系统 | |
US9471890B2 (en) | Enterprise decision management | |
NL2032297B1 (en) | Automatic generation method for android application micro-service driven by application scenario | |
CN108509218B (zh) | 基于Codepedia众包平台的第三方工具优化方法 | |
CN110889028A (zh) | 一种语料处理以及模型训练的方法及系统 | |
US11907110B2 (en) | Methods and systems for automated software testing | |
WO2024113860A1 (zh) | 一种测试方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
121 | Ep: the epo has been informed by wipo that ep was designated in this application |
Ref document number: 20919941 Country of ref document: EP Kind code of ref document: A1 |
|
NENP | Non-entry into the national phase |
Ref country code: DE |
|
122 | Ep: pct application non-entry in european phase |
Ref document number: 20919941 Country of ref document: EP Kind code of ref document: A1 |