CN111338618A - 应用场景驱动的Android应用微服务自动生成方法 - Google Patents

应用场景驱动的Android应用微服务自动生成方法 Download PDF

Info

Publication number
CN111338618A
CN111338618A CN202010096139.6A CN202010096139A CN111338618A CN 111338618 A CN111338618 A CN 111338618A CN 202010096139 A CN202010096139 A CN 202010096139A CN 111338618 A CN111338618 A CN 111338618A
Authority
CN
China
Prior art keywords
service
application
micro
user
event
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.)
Granted
Application number
CN202010096139.6A
Other languages
English (en)
Other versions
CN111338618B (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.)
Fuzhou University
Original Assignee
Fuzhou University
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 Fuzhou University filed Critical Fuzhou University
Priority to CN202010096139.6A priority Critical patent/CN111338618B/zh
Publication of CN111338618A publication Critical patent/CN111338618A/zh
Priority to PCT/CN2020/100966 priority patent/WO2021164189A1/zh
Application granted granted Critical
Publication of CN111338618B publication Critical patent/CN111338618B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/35Creation or generation of source code model driven
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/34Graphical or visual programming

Abstract

本发明涉及一种应用场景驱动的Android应用微服务自动生成方法,包括以下步骤:步骤S1:基于应用接口信息,重建应用运行时软件体系结构;步骤S2:多次执行目标功能,录制目标功能的方法调用序列,形成基于运行时模型的多个目标功能的调用实例;步骤S3:分析得到的调用实例,获得目标功能的微服务的服务模块;步骤S4:于是给定用户输入,执行微服务的服务模块,得到与原功能相同的结果。本发明够在无源码、无标注情况下,通过监听Android框架和应用中所有的方法来录制用户调用序列,并通过对多个用户调用序列分析得到微服务的调用模板,重建应用运行时软件体系结构,从而实现Android应用微服务的自动生成。

Description

应用场景驱动的Android应用微服务自动生成方法
技术领域
本发明涉及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,methodParameters分别填充到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:对于点击操作,将method定为dispatchTouchEvent,Paramters表示当前组件在屏幕中的位置,其值不需要从Input中获取,可以直接通过调用组件对象MotionEvent本身的方法得到;
步骤S333:对于输入操作,将method定为setText,Paramters表示为用户的输入数据,Paramter的来源是输入input,且用户输入参数的顺序和setText方法出现的顺序相同;
步骤S334:因此输入类型参数算法将遍历模板中的序列,如果是setText方法,则将Paramters中的<Ti,Vi>替换为<Ti,j>,即该方法的参数为第j个用户输入的数据,以表示Input与Paramters中的数据映射。
进一步的,所述步骤S4具体为:
步骤S41:根据用户输入来实例化服务的Events;
步骤S42:执行微服务的服务模板的的Events,完成微服务的服务模板所有Event执行完成之后呈现页面即为微服务的Output。
进一步的,所述步骤S41具体为:
步骤S411:根据之前得到的API服务模板中Input与Eventi中Paramters的映射关系来确定Paramters的具体值;
步骤S412:对于一个具体的用户输入Input′,当Eventi中的method为setText时,如果Paramters中的某个参数为<Ti,j>,则将Input′中的第j个数据Vj赋值给它,即Paramters中的参数变为具体值<Ti,Vj>;当Eventi中的method为dispatchTouchEvent时,规定Paramters中的参数只有一个,并根据componentId对应的页面上view组件的位置,来生成一个MotionEvent对象,赋值给Paramters中的参数。
进一步的,所述步骤S42具体为
步骤S421:设定每个服务的Eventi都是从应用的首页面开始的,即Event1的activityId所指示的页面就是应用的首页面,然后依次执行Events;
步骤S422::对于每个Eventi的执行,首先在activityId所指示的页面进行,然后根据componentId和path确定界面中用来模拟用户操作的对象view,并通过setText方法或dispatchTouchEvent方法来模拟用户操作;
步骤S423:在模拟完用户的操作之后,对应用接下来进行的方法调用进行监听,得到ExecutionInvokeTree,并与当前执行的Eventi的InvokeTree中的方法进行比较;如果这两个InvokeTree完全相同,就认为当前Eventi的执行已经结束,可以执行下一个Eventi+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={Vi1,Vi2……Vin}。Vin表示第n个参数值;
输出的集合为Output={activityId}其中activityId:表示页面的Id;
方法调用的集合为Invoke=<Caller,Method,Args,Result>其中Caller表示这个方法的调用者,,Method表示调用的方法,Args表示方法调用时传入的所有参数,Args={arg1,arg2……argn},argj表示方法调用时传入的某个参数,Result表示调用方法的返回值。
事件的集合为Events={Event1,Event2,…Eventn},其中Eventi代表第i个用户操作Eventi={activityId,componentId,path,method,Paramters,InvokeTree}其中activityId表示这个操作执行所在的页面,componentId表示触发这个操作的组件的ID;path表示视图中从根节点到触发操作节点的路径;method表示模拟用户操作的方法,如输入文字(setText)和点击屏幕(dispatchTouch);Paramters表示执行时需要的参数,其中Paramters={<T1,V1>,<T2,V2>…<Tn,Vn>};如{<String,Ironman>},可以从Input中获取。InvokeTree:表示用户执行完当前操作后,应用的后继调用序列。
InvokeTree={Invoke1{Invoke1,1{…},Invoke1,2{…},…},Invoke2{…},…};
用户调用序列的集合为Instance=<Input,Output,Events>其中Input表示微服务的输入;Output表示服务的输出结果,即服务最后呈现的页面;Events表示微服务执行过程中的用户操作。
应用调用日志的集合为MethodLogs={method1,method2,……metodn}其中methodi={calleri,methodNamei,methodParametersi,activityIdi,methodChildsi}calleri表示方法的调用者;methodNamei表示方法的名字,methodParametersi={<P1,V1>,<P2,V2>……<Pn,Vn>}Pi表示第i个参数的类型,Vi表示第i个参数的值;activityIdi表示发在方法调用的页面的Id;methodChildsi表示此方法中调用的其他方法的集合;methodChildsi={methodi1,methodi2……methodin}
微服务服务模板的集合为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,methodParameters分别填充到event的activityId,method和paramter。第二,生成event的InvokeTree(第5-8行)
对于接下来的方法,且在下一个dispatchTouchEvent或setText方法之前的方法,认为它们是用户当前操作触发的方法调用,并将它们添加到event的InvokeTree中。
第三,将event添加到Events中(第10行)
在经过上面2步之后,就生成了一个用户操作的形式化表示,即event,并将此event添加到Events中。
对于一个用户操作产生方法调用日志,通过上面的方法就可以得到此过程的用户操作形式化表示,即Events。再加上用户给定的Input与Output,就完成了此服务对应的一个用户调用序列的录制。
在本实施例中,在服务模板中,Output为执行完模板中所有Event后得到的页面。所以只需要生成服务模板的每一个Eventi。通过对多组执行相同微服务的用户调用序列进行分析,能够得到该服务的服务模板。生成Event的算法如图4所示:
将对多个实例进行分析,从而生成该服务的服务模板的Event,通过3步生成服务模板的Event,算法如图4所示:
第一:生成activityId,componentId,path部分(2-6行):
这一部分指明了,要用哪个页面中的哪个组件来模拟用户的操作。activityId指明了用户所在的页面,componentId,path指明了页面中的组件。同时假设用户在使用某个服务时,做的操作是固定的。所以对于这个服务的多个实例来说,Event的数量是相同的,且相同位置Eventi(如,都是第i个Eventi)的activityId,componentId,path这三个元素都是相同的。这样只需要将一个实例的Eventi中的这三个元素,放到模板中对应的位置就可以了。可以从日志中获得这些元素。
第二:生成InvokeTree部分(7-11行):
这一部分说明了模拟用户操作完成后,应用会调用的一系列的方法。正是通过监听这一部分方法调用,来检测当前操作是否完成,是否可以进行下一步的操作。通过两步来完成InvokeTree的生成。第一步,对InvokeTree进行预处理。应用通常为了响应用户的操作,通常会进行一系列的方法调用。但是用户操作后,应用中发生的这些方法调用,其中有一部分与用户的操作无关。接下来就要根据数据的传递性来去除这一部分无关的方法调用。第二步,获取InvokeTree的公共子序列。在这一步,按照求字符串公共子序列的思路,来求解InvokeTree的公共子序列。
第三:生成method,Paramters部分(13-14行):
这一部分指明了,要模拟用户的哪种操作。因为用户操作基本上都是输入操作或点击操作(滑动操作可以看作连续的点击操作),所以也将操作分为输入操作和点击操作。对于点击操作,将method定为dispatchTouchEvent,Paramters表示当前组件在屏幕中的位置,其值不需要从Input中获取,可以直接通过调用组件对象MotionEvent本身的方法得到。对于输入操作,将method定为setText,Paramters表示为用户的输入数据。Paramter的来源只可能是输入input,且用户输入参数的顺序和setText方法出现的顺序相同。因此输入类型参数算法将遍历模板中的序列,如果是setText方法,则将Paramters中的<Ti,Vi>替换为<Ti,j>,即该方法的参数为第j个用户输入的数据,以表示Input与Paramters中的数据映射。
其中,分两步来生成服务模板的Event的InvokeTree部分。首先要根据数据的传递性来去除这一部分无关的方法调用,再求InvokeTree的公共子序列。
第一部分,通过如图5所示的算法来去除无关的方法调用,完成对InvpkeTree的预处理:
通过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了。
这样,按照上面的步骤,就得到了对应微服务的服务模板。
在本实施例中,模拟用户的操作来执行对应服务。将从打开应用开始的每一个用户操作记为服务中的一个Eventi,所以我们要做的就是依次执行这些Eventi。通过以下算法来执行微服务:分为2个部分来执行服务。算法如图7所示:
第一,使用用户输入来实例化服务的Events(2-18行)
根据之前得到的API服务模板中Input与Eventi中Paramters的映射关系来确定Paramters的具体值。对于一个具体的用户输入Input′来说,当Eventi中的method为setText时,如果Paramters中的某个参数为<Ti,j>,那么就将Input′中的第j数据的Vj,赋值给它,即Paramters中的参数变为具体值<Ti,Vj>;当Eventi中的method为dispatchTouchEvent时,规定Paramters中的参数只有一个,并根据componentId对应的页面上view组件的位置,来生成一个MotionEvent对象,赋值给Paramters中的参数。
第二,执行服务的Events(第10、17行)
规定每个服务的Eventi都是从应用的首页面开始的,即Event1的activityId所指示的页面就是应用的首页面,然后依次执行Events。对于每个Eventi的执行,首先要在activityId所指示的页面进行。然后根据componentId和path确定界面中用来模拟用户操作的对象view,然后通过setText方法或dispatchTouchEvent方法来模拟用户操作。
在模拟完用户的操作之后,对应用接下来进行的方法调用进行监听,得到ExecutionInvokeTree,并与当前执行的Eventi的InvokeTree中的方法进行比较。如果这两个InvokeTree完全相同,那么就认为当前Eventi的执行已经结束,可以执行下一个Eventi+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)

1.一种应用场景驱动的Android应用微服务自动生成方法,其特征在于,包括以下步骤:
步骤S1:基于应用接口信息,重建应用运行时软件体现结构;
步骤S2:多次执行目标功能,录制目标功能的方法调用序列,形成基于运行时模型的多个目标功能的调用实例;
步骤S3:分析得到的调用实例,获得目标功能的微服务的服务模块;
步骤S4:于是给定用户输入,执行微服务的服务模块,得到与原功能相同的结果。
2.根据权利要求1所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S2具体为:
步骤S21:当检查到当前的方法为dispatchTouchEvent或setText方法,根据当前method的信息创建event;
步骤S22:用户当前操作触发的方法调用,并将它们添加到event的InvokeTree中;
步骤S23:将event添加到Events中。
3.根据权利要求2所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S21中根据当前method的信息创建event,具体为:
步骤S211:调用method中的caller对象的方法,获取componentId和path;
步骤S212:将method的activityId和methodName,methodParameters分别填充到event的activityId,meyhod和paramter。
4.根据权利要求1所述的的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S3具体为:
步骤S31:生成activityId,componentId,path部分,其中activityId指明了用户所在的页面,componentId,path指明了页面中的组件;指明哪个页面中的哪个组件来模拟用户的操作;
步骤S32:生成InvokeTree,并求解InvokeTree的公共子序列,从而得到模拟用户操作完成后,应用会调用的一系列的方法;
步骤S33:生成method,Paramters部分,指明要模拟用户的哪种操作,得到了对应微服务的服务模板。
5.根据权利要求1所述的的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S32具体包括如下步骤:
步骤S321:将InvokeTree中特定方法的数据填充到数据池中,所述特定的方法为方法调用者为页面中组件的方法及其子方法;填充的数据为特定方法和其子方法的调用者,调用参数,调用的返回值;
步骤S322:根据收集的数据对InvokeTree中的方法调用进行删减;
步骤S323:将InvokeTree转化为字符串序,得到了n个字符串调用序列;
步骤S324:找到长度最短的字符串序列,并以此字符串序列为依据,依次检查其他字符串序列中相同位置的字符串是否相同,如果相同位置的字符串序列全部相同,将此字符串加入到最终的结果中,直到检查完最短字符串序列的全部位置的字符串,得到了最后的公共子序列的字符串形式;
步骤S325:将最后的公共子序列的字符串形式反向解析为一个InvokeTree。
6.根据权利要求1所述的的应用场景驱动的Android应用微服务自动生成方法,其特征在于,
所述步骤S33具体为:
步骤S331:将操作分为输入操作和点击操作;
步骤S332:对于点击操作,将method定为dispatchTouchEvent,Paramters表示当前组件在屏幕中的位置,其值不需要从Input中获取,可以直接通过调用组件对象MotionEvent本身的方法得到;
步骤S333:对于输入操作,将method定为setText,Paramters表示为用户的输入数据,Paramter的来源是输入input,且用户输入参数的顺序和setText方法出现的顺序相同;
步骤S334:因此输入类型参数算法将遍历模板中的序列,如果是setText方法,则将Paramters中的<Ti,Vi>替换为<Ti,j>,即该方法的参数为第j个用户输入的数据,以表示Input与Paramters中的数据映射。
7.根据权利要求1所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S4具体为:
步骤S41:根据用户输入来实例化服务的Events;
步骤S42:执行微服务的服务模板的的Events,完成微服务的服务模板所有Event执行完成之后呈现页面即为微服务的Output。
8.根据权利要求7所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S41具体为:
步骤S411:根据之前得到的API服务模板中Input与Eventi中Paramters的映射关系来确定Paramters的具体值;
步骤S412:对于一个具体的用户输入Input′,当Eventi中的method为setText时,如果Paramters中的某个参数为<Ti,j>,则将Input′中的第j数据的Vj,赋值给它,即Paramters中的参数变为具体值<Ti,Vj>;当Eventi中的method为dispatchTouchEvent时,规定Paramters中的参数只有一个,并根据componentId对应的页面上view组件的位置,来生成一个MotionEvent对象,赋值给Paramters中的参数。
9.根据权利要求7所述的应用场景驱动的Android应用微服务自动生成方法,其特征在于,所述步骤S42具体为
步骤S421:设定每个服务的Eventi都是从应用的首页面开始的,即Event1的activityId所指示的页面就是应用的首页面,然后依次执行Events;
步骤S422::对于每个Eventi的执行,首先在activityId所指示的页面进行,然后根据componentId和path确定界面中用来模拟用户操作的对象view,并通过setText方法或dispatchTouchEvent方法来模拟用户操作;
步骤S423:在模拟完用户的操作之后,对应用接下来进行的方法调用进行监听,得到ExecutionInvokeTree,并与当前执行的Eventi的InvokeTree中的方法进行比较;如果这两个InvokeTree完全相同,就认为当前Eventi的执行已经结束,可以执行下一个Eventi+1
步骤S424:当微服务模板中所有Event执行完成之后,应用所呈现的页面即为微服务的Output。
CN202010096139.6A 2020-02-17 2020-02-17 应用场景驱动的Android应用微服务自动生成方法 Active CN111338618B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010096139.6A CN111338618B (zh) 2020-02-17 2020-02-17 应用场景驱动的Android应用微服务自动生成方法
PCT/CN2020/100966 WO2021164189A1 (zh) 2020-02-17 2020-07-09 应用场景驱动的Android应用微服务自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010096139.6A CN111338618B (zh) 2020-02-17 2020-02-17 应用场景驱动的Android应用微服务自动生成方法

Publications (2)

Publication Number Publication Date
CN111338618A true CN111338618A (zh) 2020-06-26
CN111338618B CN111338618B (zh) 2021-09-24

Family

ID=71183458

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010096139.6A Active CN111338618B (zh) 2020-02-17 2020-02-17 应用场景驱动的Android应用微服务自动生成方法

Country Status (2)

Country Link
CN (1) CN111338618B (zh)
WO (1) WO2021164189A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021164189A1 (zh) * 2020-02-17 2021-08-26 福州大学 应用场景驱动的Android应用微服务自动生成方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114385150B (zh) * 2021-09-18 2022-09-02 北京能科瑞元数字技术有限公司 基于智能引擎的低代码开发方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180039565A1 (en) * 2016-08-05 2018-02-08 International Business Machines Corporation Automated test input generation for integration testing of microservice-based web applications
CN108762749A (zh) * 2018-05-24 2018-11-06 福州大学 基于代码分析的系统对象图自动生成方法
CN109189469A (zh) * 2018-06-22 2019-01-11 北京大学 基于反射的安卓应用微服务化方法及系统
US20190108067A1 (en) * 2017-10-11 2019-04-11 International Business Machines Corporation Decomposing monolithic application into microservices
CN110659206A (zh) * 2019-08-30 2020-01-07 平安普惠企业管理有限公司 基于微服务的模拟架构建立方法、装置、介质及电子设备

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10613878B2 (en) * 2018-02-27 2020-04-07 Avid Technology, Inc. Plug-ins as microservices
CN110099099B (zh) * 2019-03-28 2021-11-16 中国电子科技集团公司电子科学研究院 针对地面信息港的空间信息微服务封装及服务集成方法
CN110427174B (zh) * 2019-08-05 2024-01-16 浪潮云信息技术股份公司 一种基于数据库的微服务构建方法
CN111338618B (zh) * 2020-02-17 2021-09-24 福州大学 应用场景驱动的Android应用微服务自动生成方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180039565A1 (en) * 2016-08-05 2018-02-08 International Business Machines Corporation Automated test input generation for integration testing of microservice-based web applications
US20190108067A1 (en) * 2017-10-11 2019-04-11 International Business Machines Corporation Decomposing monolithic application into microservices
CN108762749A (zh) * 2018-05-24 2018-11-06 福州大学 基于代码分析的系统对象图自动生成方法
CN109189469A (zh) * 2018-06-22 2019-01-11 北京大学 基于反射的安卓应用微服务化方法及系统
CN110659206A (zh) * 2019-08-30 2020-01-07 平安普惠企业管理有限公司 基于微服务的模拟架构建立方法、装置、介质及电子设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
XING CHEN等: "Refactoring Java Code for Automatic API Generation", 《 2018 INTERNATIONAL CONFERENCE ON CLOUD COMPUTING, BIG DATA AND BLOCKCHAIN 》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021164189A1 (zh) * 2020-02-17 2021-08-26 福州大学 应用场景驱动的Android应用微服务自动生成方法

Also Published As

Publication number Publication date
WO2021164189A1 (zh) 2021-08-26
CN111338618B (zh) 2021-09-24

Similar Documents

Publication Publication Date Title
CN107861870A (zh) 接口测试及测试数据生成方法、装置、终端和存储介质
US8024422B2 (en) Web-based speech recognition with scripting and semantic objects
US20030217023A1 (en) Method and apparatus for extracting knowledge from software code or other structured data
WO2001073755A1 (en) Web-based speech recognition with scripting and semantic objects
CN111338618B (zh) 应用场景驱动的Android应用微服务自动生成方法
AU2015346261A1 (en) Method and apparatus for facilitating speech application testing
US11074162B2 (en) System and a method for automated script generation for application testing
CN111209185B (zh) 基于关键词的自动化测试方法及计算机可读存储介质
US20050283764A1 (en) Method and apparatus for validating a voice application
CN110765010B (zh) 基于Flink的可视化开发在线调试方法及装置
JP5363589B2 (ja) データ・メタモデルから音声ユーザ・インタフェース・コードを生成するための方法およびシステム
EP1382032B1 (en) Web-based speech recognition with scripting and semantic objects
CN111708712A (zh) 用户行为测试用例的生成方法、流量回放方法及电子设备
NL2032297B1 (en) Automatic generation method for android application micro-service driven by application scenario
CN112597037B (zh) 一种Java和Python结合的自动化脚本开发方法和装置
CN114462376A (zh) 基于rpa和ai的庭审笔录生成方法、装置、设备及介质
CN113609014A (zh) 一种接口字段校验方法、装置、存储介质及电子设备
CN112036576A (zh) 一种基于数据形式的数据处理方法、装置和电子设备
Wang et al. Multi-modal and modality specific error handling in the Gemini Project
CN113742245A (zh) 微服务的测试方法、装置、电子设备及计算机存储介质
CN115221064A (zh) Locust性能测试方法、装置、电子设备及存储介质
CN115206303A (zh) 语音编码方法、装置、计算机设备和存储介质
CN117609040A (zh) 测试页面生成方法、装置、终端设备以及存储介质
CN112597026A (zh) 一种测试用例生成方法及装置
CN117873878A (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