分桶测试方法和提供配置信息的方法、装置及系统转让专利

申请号 : CN201410746167.2

文献号 : CN105740137B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘晓明沈贲寅

申请人 : 阿里巴巴集团控股有限公司

摘要 :

本申请公开了种用于客户端应用程序的分桶测试方法和装置,种用于提供分桶测试配置信息的方法和装置,以及种分桶测试系统。其中用于客户端应用程序的分桶测试方法包括:获取服务端提供的对应于客户端应用程序版本的分桶测试配置信息;根据客户端应用程序代码涉及的分桶测试的功能类别,从分桶测试配置信息中获取对应的功能版本标识;根据功能版本标识执行对应的代码片段。采用本申请提供的技术方案,不仅可以满足基于C/S架构的分桶测试的版本隔离要求,而且便于服务端对不同版本客户端应用程序的分桶测试进行灵活管理与控制,特别是在分桶测试结束后,可以通过对配置信息的调整,控制客户端应用程序自动切换到正式版本,改善用户的使用体验。

权利要求 :

1.一种用于客户端应用程序的分桶测试方法,其特征在于,包括:

获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息;

根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应所述功能类别的功能版本标识;

根据所述功能版本标识执行对应的代码片段。

2.根据权利要求1所述的用于客户端应用程序的分桶测试方法,其特征在于,对应于所述客户端应用程序版本的分桶测试配置信息包括:对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。

3.根据权利要求1所述的用于客户端应用程序的分桶测试方法,其特征在于,所述获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息,包括:获取所述客户端应用程序的版本信息;

判断本地是否未存储对应于所述客户端应用程序版本的分桶测试配置信息,或者,存储了所述分桶测试配置信息但是不具有“最终版本已确定”标识;

若是,从所述服务端获取所述分桶测试配置信息。

4.根据权利要求3所述的用于客户端应用程序的分桶测试方法,其特征在于,所述从所述服务端获取所述分桶测试配置信息包括:向所述服务端发送获取分桶测试配置信息的请求,所述请求中携带所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识,或者,所述客户端应用程序的版本信息、系统类型以及用于唯一识别其宿主设备的标识;

接收所述服务端返回的对应于所述客户端应用程序版本的分桶测试配置信息;

将所述分桶测试配置信息存储在本地。

5.根据权利要求1-4任一所述的用于客户端应用程序的分桶测试方法,其特征在于,所述根据所述功能版本标识执行对应的代码片段是指,通过分支语句执行与所述功能版本对应的代码行。

6.根据权利要求5所述的用于客户端应用程序的分桶测试方法,其特征在于,在获取所述分桶测试配置信息后,执行下述操作:向所述客户端应用程序发送通知消息;

相应的,所述客户端应用程序在对应所述通知消息的回调处理函数中,执行所述根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识,以及根据所述功能版本标识执行对应的代码片段的步骤。

7.根据权利要求1-4任一所述的用于客户端应用程序的分桶测试方法,其特征在于,当采用具备反射特性的开发语言实施本方法时,所述根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识,包括:遍历所述客户端应用程序已注册的每个类,针对每个类中的每个实例方法和成员方法,执行下述操作:判断所述实例方法和所述成员方法中的名称是否符合预先设定的分桶测试方法命名规则,所述分桶测试方法命名规则定义如下命名规范:与分桶测试相关的方法名称中至少应包含分桶测试的功能类别和实现逻辑对应的功能版本标识;

若是,执行下述操作:

按照所述分桶测试方法命名规则,从所述实例方法和所述成员方法名称中提取分桶测试的功能类别;

根据所述功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;

判断所述客户端应用程序预先设定的、调用所述分桶测试方法所采用的功能版本标识、与从所述分桶测试配置信息中获取的功能版本标识是否一致;

若否,利用所述开发语言的反射特性进行所述实例方法和成员方法与所述分桶测试方法实现的动态替换,使所述客户端应用程序在执行阶段执行与所述分桶测试配置信息中的功能版本标识对应的分桶测试方法实现。

8.根据权利要求1-4任一所述的用于客户端应用程序的分桶测试方法,其特征在于,当采用具备反射特性的开发语言实施本方法时,所述根据所述功能版本标识执行对应的代码片段是指,通过所述语言的反射特性动态调用与所述功能版本对应的成员方法。

9.一种用于客户端应用程序的分桶测试装置,其特征在于,包括:

配置信息获取单元,用于获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息;

功能版本获取单元,用于根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应所述功能类别的功能版本标识;

代码片段执行单元,用于根据所述功能版本标识执行对应的代码片段。

10.根据权利要求9所述的用于客户端应用程序的分桶测试装置,其特征在于,所述配置信息获取单元获取的配置信息包括:对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。

11.根据权利要求9所述的用于客户端应用程序的分桶测试装置,其特征在于,所述配置信息获取单元包括:版本信息获取子单元,用于获取所述客户端应用程序的版本信息;

本地存储判断子单元,用于判断本地是否未存储对应于所述客户端应用程序版本的分桶测试配置信息,或者,存储了所述分桶测试配置信息但是不具有“最终版本已确定”标识;

服务端信息获取子单元,用于当所述本地存储判断子单元的输出为“是”时,从所述服务端获取所述分桶测试配置信息。

12.根据权利要求11所述的用于客户端应用程序的分桶测试装置,其特征在于,所述服务端信息获取子单元包括:请求发送子单元,用于向所述服务端发送获取分桶测试配置信息的请求,所述请求中携带所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识,或者,所述客户端应用程序的版本信息、系统类型以及用于唯一识别其宿主设备的标识;

信息接收子单元,用于接收所述服务端返回的对应于所述客户端应用程序版本的分桶测试配置信息;

信息存储子单元,用于将所述分桶测试配置信息存储在本地。

13.根据权利要求9-12任一所述的用于客户端应用程序的分桶测试装置,其特征在于,所述代码片段执行单元具体用于,通过分支语句执行与所述功能版本对应的代码行。

14.根据权利要求13所述的用于客户端应用程序的分桶测试装置,其特征在于,包括:通知消息发送单元,用于在获取所述分桶测试配置信息后,向所述客户端应用程序发送通知消息;

通知消息处理单元,用于当所述客户端应用程序在接收到所述通知消息后,触发所述功能版本获取单元和代码片段执行单元工作。

15.根据权利要求9-12任一所述的用于客户端应用程序的分桶测试装置,其特征在于,所述功能版本获取单元包括:遍历控制子单元,用于遍历所述客户端应用程序已注册的每个类,并针对每个类中的每个实例方法和成员方法,触发下列子单元工作;

命名判断子单元,用于判断所述实例方法和成员方法中的名称是否符合预先设定的分桶测试方法命名规则;

功能类别提取子单元,用于当所述命名判断子单元的输出为“是”时,按照所述分桶测试方法命名规则,从所述实例方法和成员方法名称中提取分桶测试的功能类别;

功能版本提取子单元,用于根据所述功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;

功能版本判断替换子单元,用于判断所述客户端应用程序预先设定的、调用所述实例方法和成员方法所采用的功能版本标识、与从所述分桶测试配置信息中获取的功能版本标识是否一致;若否,利用具备反射特性的开发语言的反射特性进行所述实例方法和成员方法与所述分桶测试方法实现的动态替换,使所述客户端应用程序在执行阶段执行与所述分桶测试配置信息中的功能版本标识对应的分桶测试方法实现。

16.根据权利要求9-12任一所述的用于客户端应用程序的分桶测试装置,其特征在于,所述代码片段执行单元具体用于,通过具备反射特性的开发语言的反射特性动态调用与所述功能版本对应的成员方法。

17.一种用于提供分桶测试配置信息的方法,其特征在于,所述方法在负责管理分桶测试的服务端实施,包括:接收客户端应用程序发送的获取分桶测试配置信息的请求,所述请求中至少包含所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识;

根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识;

将所述功能类别以及所述功能版本标识返回给所述客户端应用程序。

18.根据权利要求17所述的用于提供分桶测试配置信息的方法,其特征在于,初次接收某客户端应用程序发送的获取分桶测试配置信息的请求时,所述根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识,包括:按照预先设定的分桶测试规则,选择对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识,使得参与各功能版本分桶测试的客户端应用程序的数量满足所述分桶测试规则中设定的分桶测试比例;

存储所述请求中包含的客户端应用程序的版本信息、用于唯一识别其宿主设备的标识、以及所述功能类别、功能版本标识之间的对应关系。

19.根据权利要求18所述的用于提供分桶测试配置信息的方法,其特征在于,所述根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识是指,在已存储的上述对应关系中,根据所述请求中包含的用于唯一识别宿主设备的标识,查找对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。

20.根据权利要求17-19任一所述的用于提供分桶测试配置信息的方法,其特征在于,在将所述功能类别以及功能版本标识返回给所述客户端应用程序之前,执行下述操作:判断对应于所述客户端应用程序版本的分桶测试是否已结束;

若是,用最终发布版本所采用的功能版本标识替换将要返回给所述客户端应用程序的相应功能版本标识,并添加“最终版本已确定”标识;

相应的,所述将所述功能类别以及功能版本标识返回给所述客户端应用程序是指,将上述执行替换操作后的信息以及添加的“最终版本已确定”标识一并发送给所述客户端应用程序。

21.一种用于提供分桶测试配置信息的装置,其特征在于,所述装置在负责管理分桶测试的服务端设备上部署,包括:请求接收单元,用于接收客户端应用程序发送的获取分桶测试配置信息的请求,所述请求中至少包含所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识;

信息获取单元,用于根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识;

信息返回单元,用于将所述功能类别以及所述功能版本标识返回给所述客户端应用程序。

22.根据权利要求21所述的用于提供分桶测试配置信息的装置,其特征在于,当所述请求接收单元接收到的是某客户端应用程序初次发送的获取分桶测试配置信息的请求时,所述信息获取单元包括:配置信息选择子单元,用于按照预先设定的分桶测试规则,选择对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识,使得参与各功能版本分桶测试的客户端应用程序的数量满足所述分桶测试规则中设定的分桶测试比例;

配置信息存储子单元,用于存储所述请求中包含的客户端应用程序的版本信息、用于唯一识别其宿主设备的标识、以及所述功能类别、功能版本标识之间的对应关系。

23.根据权利要求22所述的用于提供分桶测试配置信息的装置,其特征在于,所述信息获取单元具体用于,在所述配置信息存储子单元存储的对应关系中,根据所述请求中包含的用于唯一识别宿主设备的标识,查找对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。

24.根据权利要求21-23任一所述的用于提供分桶测试配置信息的装置,其特征在于,包括:测试结束判断单元,用于在触发所述信息返回单元之前,判断对应于所述客户端应用程序版本的分桶测试是否已结束;

信息替换单元,用于当所述测试结束判断单元的输出为“是”时,用最终发布版本所采用的功能版本标识替换将要返回给所述客户端应用程序的相应功能版本标识,并添加“最终版本已确定”标识;

相应的,所述信息返回单元具体用于,将上述执行替换操作后的信息以及添加的“最终版本已确定”标识一并发送给所述客户端应用程序。

25.一种分桶测试系统,其特征在于,包括:根据上述权利要求21所述的用于提供分桶测试配置信息的装置,以及根据上述权利要求9所述的用于客户端应用程序的分桶测试装置。

说明书 :

分桶测试方法和提供配置信息的方法、装置及系统

技术领域

[0001] 本申请涉及分桶测试领域,具体涉及一种用于客户端应用程序的分桶测试方法。本申请同时提供一种用于客户端应用程序的分桶测试装置、一种用于提供分桶测试配置信息的方法和装置、以及一种分桶测试系统。

背景技术

[0002] A/B测试(A/B Test),通常是指对某一个特定的页面或者页面上的一部分,制作两个或两个以上版本,然后将网站的访问流量分发到不同的版本上,继而观察网站该页面或者该部分带来的转化率,或者一些重要指标的变化,从而得出其中的一个版本比另一个版本更好的结论,并以此决定最终上线的版本。
[0003] 分桶测试(Bucket Test,也称Split Test)则是A/B Test概念的扩展,通常是指针对某个应用版本的某个待测试功能类别(也称为功能点或者功能key),例如:网页显示的按钮颜色,同时执行多个A/B Test,即:不是只有一个待测试版本B,而是B1、B2......多个待测试版本(通常也称为与功能类别对应的功能版本),通过做一次分桶测试就可以在多个功能版本中选出一个最优的版本。
[0004] 上述A/B测试或者分桶测试技术,最初都是为网站而设计的,由于网站通常采用B/S架构(浏览器/服务器架构),具有实时发布版本不敏感的特性,只要服务端进行升级,所有客户端访问的功能都是最新的。然而对于基于C/S架构(客户端/服务器架构)的无线客户端应用程序(简称APP)来说,由于客户端用户可以根据自己的意愿决定是否升级或者下载最新版本的客户端应用程序,导致了多个APP应用版本并存的状况,这就要求无线客户端APP的分桶测试需要具备版本隔离的特性,保证各个应用版本之间的分桶测试不会相互干扰,因此传统的分桶测试方式对无线客户端APP而言并不适合。
[0005] 现有技术对于上述无线客户端APP的分桶测试通常采用Beta发布方式,即:针对分桶测试的特定功能点,提供不同功能版本的安装包(非正式发布版本的安装包),并筛选活跃且愿意尝新的用户在其客户端设备上安装上述安装包,对各个功能版本进行小范围测试,并根据测试结果来评估多个功能版本的优劣,确定最终上线发布的功能版本。
[0006] 采用上述在有限的客户群体中安装固定安装包的Beta发布方式,服务端无法对分桶测试过程进行必要的控制与管理,而且在分桶测试结束后,参与分桶测试的用户只能通过重新下载的方式,才能使用正式发布版本的客户端应用程序,影响用户的使用体验。

发明内容

[0007] 本申请提供的用于客户端应用程序的分桶测试方法和用于提供分桶测试配置信息的方法相互配合,针对客户端应用程序的分桶测试,提出了一种新的技术方案,在满足版本隔离要求的同时,便于服务端对客户端应用程序的分桶测试过程进行控制与管理。本申请另外提供相应的用于客户端应用程序的分桶测试装置和用于提供分桶测试配置信息的装置,以及一种分桶测试系统。
[0008] 本申请提供一种用于客户端应用程序的分桶测试方法,包括:
[0009] 获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息;
[0010] 根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;
[0011] 根据所述功能版本标识执行对应的代码片段。
[0012] 可选的,对应于所述客户端应用程序版本的分桶测试配置信息包括:对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0013] 可选的,所述获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息,包括:
[0014] 获取所述客户端应用程序的版本信息;
[0015] 判断本地是否未存储对应于所述客户端应用程序版本的分桶测试配置信息,或者,存储了所述分桶测试配置信息但是不具有“最终版本已确定”标识;
[0016] 若是,从所述服务端获取所述分桶测试配置信息。
[0017] 可选的,所述从所述服务端获取所述分桶测试配置信息包括:
[0018] 向所述服务端发送获取分桶测试配置信息的请求,所述请求中携带所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识,或者,所述客户端应用程序的版本信息、系统类型以及用于唯一识别其宿主设备的标识;
[0019] 接收所述服务端返回的对应于所述客户端应用程序版本的分桶测试配置信息;
[0020] 将所述分桶测试配置信息存储在本地。
[0021] 可选的,所述根据所述功能版本标识执行对应的代码片段是指,通过分支语句执行与所述功能版本对应的代码行。
[0022] 可选的,在获取所述分桶测试配置信息后,执行下述操作:
[0023] 向所述客户端应用程序发送通知消息;
[0024] 相应的,所述客户端应用程序在对应所述通知消息的回调处理函数中,执行所述根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识,以及根据所述功能版本标识执行对应的代码片段的步骤。
[0025] 可选的,当采用具备反射特性的开发语言实施本方法时,所述根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识,包括:
[0026] 遍历所述客户端应用程序已注册的每个类,针对每个类中的每个实例方法和成员方法,执行下述操作:
[0027] 判断所述方法的名称是否符合预先设定的分桶测试方法命名规则,所述分桶测试方法命名规则定义如下命名规范:与分桶测试相关的方法名称中至少应包含分桶测试的功能类别、和所述方法的实现逻辑对应的功能版本标识;
[0028] 若是,执行下述操作:
[0029] 按照所述分桶测试方法命名规则,从所述方法名称中提取分桶测试的功能类别;
[0030] 根据所述功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;
[0031] 判断所述客户端应用程序预先设定的、调用所述方法所采用的功能版本标识、与从所述分桶测试配置信息中获取的功能版本标识是否一致;
[0032] 若否,利用所述开发语言的反射特性进行方法实现的动态替换,使所述客户端应用程序在执行阶段执行与所述分桶测试配置信息中的功能版本标识对应的方法实现。
[0033] 可选的,当采用具备反射特性的开发语言实施本方法时,所述根据所述功能版本标识执行对应的代码片段是指,通过所述语言的反射特性动态调用与所述功能版本对应的成员方法。
[0034] 相应的,本申请还提供一种用于客户端应用程序的分桶测试装置,包括:
[0035] 配置信息获取单元,用于获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息;
[0036] 功能版本获取单元,用于根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;
[0037] 代码片段执行单元,用于根据所述功能版本标识执行对应的代码片段。
[0038] 可选的,所述配置信息获取单元获取的配置信息包括:对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0039] 可选的,所述配置信息获取单元包括:
[0040] 版本信息获取子单元,用于获取所述客户端应用程序的版本信息;
[0041] 本地存储判断子单元,用于判断本地是否未存储对应于所述客户端应用程序版本的分桶测试配置信息,或者,存储了所述分桶测试配置信息但是不具有“最终版本已确定”标识;
[0042] 服务端信息获取子单元,用于当所述本地存储判断子单元的输出为“是”时,从所述服务端获取所述分桶测试配置信息。
[0043] 可选的,所述服务端信息获取子单元包括:
[0044] 请求发送子单元,用于向所述服务端发送获取分桶测试配置信息的请求,所述请求中携带所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识,或者,所述客户端应用程序的版本信息、系统类型以及用于唯一识别其宿主设备的标识;
[0045] 信息接收子单元,用于接收所述服务端返回的对应于所述客户端应用程序版本的分桶测试配置信息;
[0046] 信息存储子单元,用于将所述分桶测试配置信息存储在本地。
[0047] 可选的,所述代码片段执行单元具体用于,通过分支语句执行与所述功能版本对应的代码行。
[0048] 可选的,所述装置包括:
[0049] 通知消息发送单元,用于在获取所述分桶测试配置信息后,向所述客户端应用程序发送通知消息;
[0050] 通知消息处理单元,用于当所述客户端应用程序在接收到所述通知消息后,触发所述功能版本获取单元和代码片段执行单元工作。
[0051] 可选的,所述功能版本获取单元包括:
[0052] 遍历控制子单元,用于遍历所述客户端应用程序已注册的每个类,并针对每个类中的每个实例方法和成员方法,触发下列子单元工作;
[0053] 命名判断子单元,用于判断所述方法的名称是否符合预先设定的分桶测试方法命名规则;
[0054] 功能类别提取子单元,用于当所述命名判断子单元的输出为“是”时,按照所述分桶测试方法命名规则,从所述方法名称中提取分桶测试的功能类别;
[0055] 功能版本提取子单元,用于根据所述功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;
[0056] 功能版本判断替换子单元,用于判断所述客户端应用程序预先设定的、调用所述方法所采用的功能版本标识、与从所述分桶测试配置信息中获取的功能版本标识是否一致;若否,利用所述开发语言的反射特性进行方法实现的动态替换,使所述客户端应用程序在执行阶段执行与所述分桶测试配置信息中的功能版本标识对应的方法实现。
[0057] 可选的,所述代码片段执行单元具体用于,通过所述语言的反射特性动态调用与所述功能版本对应的成员方法。
[0058] 此外,本申请还提供一种用于提供分桶测试配置信息的方法,所述方法在负责管理分桶测试的服务端实施,包括:
[0059] 接收客户端应用程序发送的获取分桶测试配置信息的请求,所述请求中至少包含所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识;
[0060] 根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识;
[0061] 将所述功能类别以及所述功能版本标识返回给所述客户端应用程序。
[0062] 可选的,初次接收某客户端应用程序发送的获取分桶测试配置信息的请求时,所述根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识,包括:
[0063] 按照预先设定的分桶测试规则,选择对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识,使得参与各功能版本分桶测试的客户端应用程序的数量满足所述分桶测试规则中设定的分桶测试比例;
[0064] 存储所述请求中包含的客户端应用程序的版本信息、用于唯一识别其宿主设备的标识、以及所述功能类别、功能版本标识之间的对应关系。
[0065] 可选的,所述根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识是指,在已存储的上述对应关系中,根据所述请求中包含的用于唯一识别宿主设备的标识,查找对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0066] 可选的,在将所述功能类别以及功能版本标识返回给所述客户端应用程序之前,执行下述操作:
[0067] 判断对应于所述客户端应用程序版本的分桶测试是否已结束;
[0068] 若是,用最终发布版本所采用的功能版本标识替换将要返回给所述客户端应用程序的相应功能版本标识,并添加“最终版本已确定”标识;
[0069] 相应的,所述将所述功能类别以及功能版本标识返回给所述客户端应用程序是指,将上述执行替换操作后的信息以及添加的“最终版本已确定”标识一并发送给所述客户端应用程序。
[0070] 相应的,本申请还提供一种用于提供分桶测试配置信息的装置,所述装置在负责管理分桶测试的服务端设备上部署,包括:
[0071] 请求接收单元,用于接收客户端应用程序发送的获取分桶测试配置信息的请求,所述请求中至少包含所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识;
[0072] 信息获取单元,用于根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识;
[0073] 信息返回单元,用于将所述功能类别以及所述功能版本标识返回给所述客户端应用程序。
[0074] 可选的,当所述请求接收单元接收到的是某客户端应用程序初次发送的获取分桶测试配置信息的请求时,所述信息获取单元包括:
[0075] 配置信息选择子单元,用于按照预先设定的分桶测试规则,选择对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识,使得参与各功能版本分桶测试的客户端应用程序的数量满足所述分桶测试规则中设定的分桶测试比例;
[0076] 配置信息存储子单元,用于存储所述请求中包含的客户端应用程序的版本信息、用于唯一识别其宿主设备的标识、以及所述功能类别、功能版本标识之间的对应关系。
[0077] 可选的,所述信息获取单元具体用于,在所述配置信息存储子单元存储的对应关系中,根据所述请求中包含的用于唯一识别宿主设备的标识,查找对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0078] 可选的,所述装置包括:
[0079] 测试结束判断单元,用于在触发所述信息返回单元之前,判断对应于所述客户端应用程序版本的分桶测试是否已结束;
[0080] 信息替换单元,用于当所述测试结束判断单元的输出为“是”时,用最终发布版本所采用的功能版本标识替换将要返回给所述客户端应用程序的相应功能版本标识,并添加“最终版本已确定”标识;
[0081] 相应的,所述信息返回单元具体用于,将上述执行替换操作后的信息以及添加的“最终版本已确定”标识一并发送给所述客户端应用程序。
[0082] 此外,本申请还提供一种分桶测试系统,包括:根据上述任意一项所述的用于提供分桶测试配置信息的装置;和根据上述任意一项所述的用于客户端应用程序的分桶测试装置。
[0083] 与现有技术相比,本申请具有以下优点:
[0084] 本申请提供的技术方案,针对客户端应用程序的分桶测试提出了一种新的思路:负责管理分桶测试的服务端根据参与分桶测试的客户端应用程序的请求,提供与其应用版本对应的分桶测试配置信息,所述客户端应用程序则根据代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识、并根据所述功能版本标识执行对应的代码片段。采用上述技术方案,不仅可以满足基于C/S架构的分桶测试的版本隔离要求,而且便于服务端对不同版本客户端应用程序的分桶测试进行灵活地管理与控制,特别是在分桶测试结束后,可以通过对分桶测试配置信息的调整,控制客户端应用程序自动切换到正式发布的应用版本(即:执行最终确定的功能版本对应的代码片段),从而用户无需再次下载正式发布版本,有效改善用户的使用体验。

附图说明

[0085] 图1是本申请的一种用于客户端应用程序的分桶测试方法的实施例的流程图;
[0086] 图2是本申请实施例提供的获取服务端提供的分桶测试配置信息的处理流程图;
[0087] 图3是本申请实施例提供的向服务端获取分桶测试配置信息的处理流程图;
[0088] 图4是本申请实施例提供的分桶测试配置信息的数据结构示意图;
[0089] 图5是本申请的一种用于客户端应用程序的分桶测试装置的实施例的示意图;
[0090] 图6是本申请的一种用于客户端应用程序的分桶测试方法的另一种实施例的流程图;
[0091] 图7是本申请实施例提供的针对每个实例方法或成员方法进行动态替换的处理流程图;
[0092] 图8是本申请的一种用于客户端应用程序的分桶测试装置的另一种实施例的示意图;
[0093] 图9是本申请的一种用于提供分桶测试配置信息的方法实施例的流程图;
[0094] 图10是本申请的一种用于提供分桶测试配置信息的装置实施例的示意图;
[0095] 图11是本申请的一种分桶测试系统的示意图。

具体实施方式

[0096] 在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
[0097] 在本申请中,分别提供了一种用于客户端应用程序的分桶测试方法和装置、一种用于提供分桶测试配置信息的方法和装置、以及一种分桶测试系统,在后续的实施例中逐一进行详细说明。
[0098] 本申请针对无线APP的分桶测试提出了一种新的解决方案,其核心在于:服务端向客户端应用程序提供与其应用版本对应的分桶测试配置信息,客户端应用程序则从所述分桶测试配置信息中获取与分桶测试功能类别对应的功能版本标识,并执行与所述功能版本标识对应的代码片段。采用该技术方案,不仅可以满足无线APP分桶测试对版本隔离的要求,而且便于服务端对分桶测试过程进行控制与管理。
[0099] 本申请虽然是针对无线APP的分桶测试提出的,但是本申请技术方案的应用场景并不局限于无线APP的分桶测试,只要是基于客户端/服务器架构(C/S架构)的客户端应用程序的分桶测试,就都可以采用本申请提供的技术方案。
[0100] 客户端应用程序根据分桶测试配置信息执行的代码片段,可以是代码行也可以是封装好的方法(method),本文将会通过不同的实施例分别描述这两种情况的具体实施方式。下面对本申请的技术方案进行详细说明。
[0101] 请参考图1,其为本申请的一种用于客户端应用程序的分桶测试方法的实施例的流程图,在本实施例中,采用基于代码行的方式实现客户端应用程序的分桶测试。所述方法包括如下步骤:
[0102] 步骤101:获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息。
[0103] 对于基于C/S架构的系统来说,通常存在多个客户端应用程序版本(也称应用版本)并存的情况,而在分桶测试过程中,不同的应用版本可能包含不同的待测试的功能类别(即:功能点或者功能key),每个功能类别又对应不同的功能版本,通过对这些不同功能版本的测试结果的比较,最终可以选择出针对每个功能类别的最优的功能版本,从而确定最终上线发布的应用版本。
[0104] 是否参加分桶测试以及参加哪些功能类别的测试,对于客户端应用程序来说通常是确定的,本申请提供的技术方案,通过服务端提供的分桶测试配置信息,确定客户端应用程序执行待测试功能类别中的具体功能版本,并执行对应的代码片段。
[0105] 为了实现上述功能,客户端应用程序在初始化阶段(运行其业务代码之前)需要获取服务端提供的对应于客户端应用程序版本(以下简称当前应用版本)的分桶测试配置信息,所述分桶测试配置信息包括:对应于当前应用版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识(指示客户端应用程序应该执行的功能版本)。获取该信息的过程包括如下所述的步骤101-1至步骤101-4,下面结合附图2作进一步说明。
[0106] 步骤101-1:获取所述客户端应用程序的版本信息;
[0107] 每个客户端应用程序都有自己的版本信息,就是本实施例所述的当前应用版本。运行于不同系统平台上的客户端应用程序,获取该信息的方式不同,通常可以利用系统提供的API函数来实现,例如,对于ios操作系统,可以通过info.plist文件中的bundle version或者其他方式获取当前应用版本的相关信息。
[0108] 步骤101-2:判断本地是否未存储对应于当前应用版本的分桶测试配置信息,若是,转到步骤101-4执行,若否,执行步骤101-3。
[0109] 本步骤首先判断本地是否存储了对应于当前应用版本的分桶测试配置信息。在具体实施时,如果所述分桶测试配置信息存储在本地数据文件中,则可以通过读取本地数据文件的方式,判断其中是否存储了与当前应用版本对应的分桶测试配置信息,即:是否存储了与当前应用版本对应的分桶测试的功能类型,以及对应于每个功能类型的功能版本标识;如果本地未存储上述信息,则需要转到步骤101-4从服务端获取最新的分桶测试配置信息,否则执行步骤101-3。
[0110] 步骤101-3:判断本地存储的所述分桶测试配置信息是否具有“最终版本已确定”标识,若否,执行步骤101-4。
[0111] 本步骤在本地存储了所述分桶测试配置信息的基础上,继续判断所述分桶测试配置信息是否具有“最终版本已确定”标识,如果有,说明针对当前应用版本的分桶测试已经结束,当前本地存储的分桶测试配置信息就是与最终上线发布版本对应的配置信息,因此客户端应用程序可以直接使用本地存储的对应于当前应用版本的分桶测试配置信息;否则,说明分桶测试尚未结束,仍然需要执行步骤101-3从服务端获取最新的分桶测试配置信息。
[0112] 采用上述方式,在分桶测试结束前,每次客户端应用程序初始化时都向服务端获取最新的分桶测试配置信息,从而为服务端对分桶测试过程进行控制与管理提供了条件,当分桶测试结束后(分桶测试配置信息已经确定),客户端应用程序就可以直接从本地获取分桶测试配置信息,而不必每次都向服务端获取,从而可以节省网络流量。
[0113] 步骤101-4:从所述服务端获取所述分桶测试配置信息。
[0114] 该步骤包括向服务端发送请求、接收服务端返回的分桶测试配置信息以及将该信息存储在本地这样三个子步骤,下面结合附图3对该过程作进一步说明。
[0115] 步骤101-4-1:向所述服务端发送获取分桶测试配置信息的请求。
[0116] 所述请求中携带当前应用版本和用于唯一识别宿主设备的标识,所述宿主设备标识通常是指宿主设备的设备编号,例如:智能手机的IMEI号码等,服务端可以根据该信息唯一识别所述宿主设备,并为其提供与所述当前应用版本相对应的分桶测试配置信息。
[0117] 在具体实施中,服务端如果还需要参考客户端设备的系统类型来确定分桶测试配置信息,那么在所述请求中还可以携带所述客户端应用程序的系统类型,例如:ios或者android。
[0118] 在本实施例的一个具体例子中,根据上述信息拼装出类似下述形式的URL:http://server/abtest.html?系统类型=ios&设备编号=xxx&app版本=xxx,然后通过HTTP协议向服务端发送该请求。
[0119] 步骤101-4-2:接收所述服务端返回的对应于当前应用版本的分桶测试配置信息。
[0120] 服务端接收客户端应用程序发送的上述请求后,根据请求中携带的宿主设备标识,为其选择对应于所述当前应用版本的分桶测试配置信息,并返回该信息。那么客户端就会接收到所述分桶测试配置信息,该信息的形式类似于如下所示:{‘key1’:‘1’,‘key2’:‘1’},即:所述客户端应用程序针对功能类别key1,应该执行与功能版本1对应的代码行;针对功能类别key2,应该执行与功能版本2对应的代码行。在分桶测试结束后,所述服务端返回的分桶测试配置信息中还可能携带“最终版本已确定”标识。
[0121] 步骤101-4-3:将所述分桶测试配置信息存储在本地。
[0122] 将接收到的分桶测试配置信息存储在本地,这样下次运行所述客户端应用程序时,就可以从本地读取分桶测试配置信息,并执行上面描述的判断和处理过程。
[0123] 存储在本地的分桶测试配置信息,可以仅包含与当前应用版本对应的分桶测试配置信息,即:仅包含类似上述{‘key1’:‘1’,‘key2’:‘1’}这样的信息。考虑到用户可能对客户端应用程序执行一次或者多次升级操作,因此本地存储的分桶测试配置信息,可以包含针对多个应用版本的分桶测试配置信息,请参见附图4,其为分桶测试配置信息的数据结构示意图。在这种情况下,本步骤仅需要根据接收到的分桶测试配置信息更新本地存储的与当前应用版本对应的信息即可。
[0124] 至此,就获取了服务端提供的对应于当前应用版本的分桶测试配置信息。在具体实施中,根据客户端应用程序的需要,还可以主动设置标志位,指示本地存储的分桶测试配置数据是最新的,便于客户端应用程序根据该标志位执行相关操作或者处理。
[0125] 步骤102:根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识。
[0126] 参与分桶测试的客户端应用程序,通常在其业务代码中会涉及分桶测试中的某个或者某些功能类别的具体代码实现,由于针对某个功能类别可以有多种实现方式,即:对应不同的功能版本,因此在执行具体的代码之前,要先从所述分桶测试配置信息中获取与功能类别对应的功能版本标识。
[0127] 下面用一个简单例子加以说明,在某个分桶测试中,需要针对按钮的背景色进行测试,对应的功能类别为“btnColorTest”,对应该功能类别有两个功能版本,功能版本1将按钮背景色设置为红色,功能版本2将按钮背景设置为蓝色。那么在本步骤中就需要从所述分桶测试配置信息中获取与“btnColorTest”对应的功能版本标识,从而才能在后续步骤103中执行对应的分支语句。
[0128] 具体说,在本地存储的所述分桶测试配置信息中查找位于当前应用版本下的功能类别“btnColorTest”,然后再进一步读取与“btnColorTest”对应的功能版本标识。在具体实现时,也可以将上述功能封装在一个函数中实现,以功能类别作为输入调用该函数,获取在当前应用版本下与所述功能类别对应的功能版本标识,例如:
[0129] int version=getVersionByKey("btnColorTest");
[0130] 作为一种完善的技术方案,还需要考虑获取的功能版本标识可能无效的情况,例如:服务端返回的功能版本标识不是有效数值(例如:是字母而非数字),或者服务端返回的是出错应答等情况,那么为了保证客户端应用程序的正常运行,这时可以采用预先设定的缺省值,例如“1”作为功能版本标识。
[0131] 步骤103:根据所述功能版本标识,通过分支语句执行对应的代码片段。
[0132] 获取与功能类别对应的功能版本标识后,就可以通过分支语句执行对应的代码片段了,例如,对于上述简单例子可以采用如下所示的分支语句:
[0133] if(version==1){
[0134] //将按钮背景色设置为红色
[0135] }else{
[0136] //将按钮背景色设置为蓝色
[0137] }
[0138] 这样,上述业务代码就会按照已获取的功能版本标识,执行对应的代码行。当然,这里给出的简单例子仅仅是示意性的,在具体的客户端应用程序代码中,可以根据需求执行更为复杂的代码行。
[0139] 上面描述了基于代码行的分桶测试方法的处理流程。在具体实施中,步骤101的功能可以通过一个独立的信息配置模块来实现,步骤102和步骤103则是在客户端应用程序的业务代码中实现的。所述信息配置模块与客户端应用程序的业务代码可以采用串行工作方式,即每次客户端应用程序启动时,所述信息配置模块可以先启动,获取分桶测试配置信息,随后客户端应用程序的业务代码再开始运行,并且在需要获取功能版本标识时,调用所述信息配置模块提供的类似getVersionByKey()这样的接口函数来实现。
[0140] 考虑到在分桶测试结束前,客户端应用程序每次启动时,所述信息配置模块都要从服务端获取分桶测试配置信息,该过程涉及网络操作相对比较耗时,为了避免客户端应用程序的使用者长时间等待,本申请的技术方案还提供了另外一种基于消息的实施方式,即:在所述信息配置模块启动后,客户端应用程序的业务代码也可以随之运行,并对信息配置模块的通知消息进行侦听;所述信息配置模块获取分桶测试配置信息后,向客户端应用程序发送通知消息;客户端应用程序侦听到该消息后,在已注册的回调处理函数中,根据业务代码的需要,从所述分桶测试配置信息中获取与功能类别对应的功能版本标识,并根据所述功能版本标识执行对应的代码行。
[0141] 在具体的实施中,可以根据需要采用上述基于函数调用的串行实施方式,也可以采用上述基于消息的并行实施方式,这些只是具体实施方式的变更,都不偏离本申请的核心,都在本申请的保护范围之内。
[0142] 在上述的实施例中,提供了一种用于客户端应用程序的分桶测试方法,与之相对应的,本申请还提供一种用于客户端应用程序的分桶测试装置。请参看图5,其为本申请的一种用于客户端应用程序的分桶测试装置的实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
[0143] 本实施例的一种用于客户端应用程序的分桶测试装置,包括:配置信息获取单元501,用于获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息;第一功能版本获取单元502,用于根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;第一代码片段执行单元503,用于通过分支语句执行与所述功能版本对应的代码行。
[0144] 可选的,所述配置信息获取单元获取的配置信息包括:对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0145] 可选的,所述配置信息获取单元包括:
[0146] 版本信息获取子单元,用于获取所述客户端应用程序的版本信息;
[0147] 本地存储判断子单元,用于判断本地是否未存储对应于所述客户端应用程序版本的分桶测试配置信息,或者,存储了所述分桶测试配置信息但是不具有“最终版本已确定”标识;
[0148] 服务端信息获取子单元,用于当所述本地存储判断子单元的输出为“是”时,从所述服务端获取所述分桶测试配置信息。
[0149] 可选的,所述服务端信息获取子单元包括:
[0150] 请求发送子单元,用于向所述服务端发送获取分桶测试配置信息的请求,所述请求中携带所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识,或者,所述客户端应用程序的版本信息、系统类型以及用于唯一识别其宿主设备的标识;
[0151] 信息接收子单元,用于接收所述服务端返回的对应于所述客户端应用程序版本的分桶测试配置信息;
[0152] 信息存储子单元,用于将所述分桶测试配置信息存储在本地。
[0153] 可选的,所述装置包括:
[0154] 通知消息发送单元,用于在获取所述分桶测试配置信息后,向所述客户端应用程序发送通知消息;
[0155] 通知消息处理单元,用于当所述客户端应用程序在接收到所述通知消息后,触发所述第一功能版本获取单元和第一代码片段执行单元工作。
[0156] 此外,本申请还提供了用于客户端应用程序的分桶测试方法的另一种实施例。请参考图6,其为本申请提供的一种用于客户端应用程序的分桶测试方法的另一种实施例的流程图,在本实施例中,利用开发语言的反射特性,基于方法级别实现客户端应用程序的分桶测试。本实施例与第一实施例步骤相同的部分不再赘述,下面重点描述不同之处。
[0157] 本申请提供的一种用于客户端应用程序的分桶测试方法包括:
[0158] 步骤601:获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息。
[0159] 本步骤与第一实施例的步骤101相同,请参照第一实施例的相关说明。
[0160] 步骤602:利用开发语言的反射特性,根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识。
[0161] 本实施例中,采用objective-C作为软件开发语言,并利用该语言的反射特性,从方法级调用的角度实现了本申请提供的用于客户端应用程序的分桶测试方法。
[0162] 为了实现所述功能,要求客户端应用程序代码中与分桶测试相关的方法,采用预先设定的分桶测试方法命名规则进行命名,具体说:方法名称中必须按照预先设定的格式包含分桶测试的功能类别以及该方法的实现逻辑对应的功能版本标识。此外,还要求业务代码在调用与分桶测试相关的方法时,统一调用预先定义好的功能版本对应的方法。
[0163] 在本实施例的一个具体例子中,预先设定的方法命名规则,定义与分桶测试相关的方法采用如下形式命名:abtest_key_version(),其中key为功能类别,version是该方法的实现逻辑对应的功能版本标识。为了便于理解,仍以在第一实施例中所述的设置按钮背景色的分桶测试为例,将设置按钮背景色为红色(功能版本1)和设置按钮背景色为蓝色(功能版本2)的功能代码,分别封装在按照上述方法命名规则命名的两个方法中,下面是代码示例:
[0164]
[0165] 并且预先设定,在业务代码需要对按钮的背景色进行设置时,统一调用与功能版本1对应的方法,即:调用abtest_btnColorTest_1()。
[0166] 在客户端应用程序的业务代码遵循上述命名规则的基础上,本步骤就可以利用开发语言的反射特性,遍历客户端应用程序已注册的每个类,针对每个类中的每个实例方法和成员方法,根据所述命名规则从其方法名中提取与分桶测试相关的功能类别,并从所述分桶测试配置信息中获取对应的功能版本标识,以及进行必要的处理。
[0167] 先对遍历过程作简要说明。利用开发语言的反射特性,可以获取客户端应用程序中已注册的每个类以及每个类中的所有实例方法和成员方法。具备反射特性的开发语言有多种,其提供的获取上述信息的接口通常不同,例如使用objective-C,可以调用objc_getClassList()获取已注册的类定义的列表,针对该列表中的每个已注册类,可以调用class_getClassMethod()获取该类中的所有方法的相关信息。
[0168] 在上述遍历操作的基础上,针对获取的每个实例方法或成员方法,按照如下所示的步骤602-1至步骤602-5进行处理,下面结合附图7作进一步说明。
[0169] 步骤602-1:判断所述方法的名称是否符合预先设定的方法命名规则;若是,执行步骤602-2,否则所述方法处理完毕。
[0170] 将已获取的方法名称与预先设定的方法命名规则进行匹配,如果其命名符合预先设定的方法命名规则,说明该方法是与分桶测试相关的方法,此时可以执行602-2,否则说明该方法与分桶测试无关,不需要进行处理。
[0171] 步骤602-2:按照所述方法命名规则,从所述方法名称中提取分桶测试的功能类别。
[0172] 例如,当前处理的方法名称为abtest_btnColorTest_1,按照预先设定的形如abtest_key_version的方法命名规则,就可以从中提取出分桶测试的功能类别为“btnColorTest”。
[0173] 步骤602-3:根据所述功能类别,从所述分桶测试配置信息中获取对应的功能版本标识。
[0174] 本步骤的处理过程与第一实施例类似,请参见第一实施例的相关部分。
[0175] 步骤602-4:判断所述客户端应用程序预先设定的、调用所述方法所采用的功能版本标识、与从所述分桶测试配置信息中获取的功能版本标识是否一致;若否,执行步骤602-5。
[0176] 仍采用上述设置按钮背景色的例子进行说明,针对当前处理的方法abtest_btnColorTest_1(),如果根据提取的“btnColorTest”从所述分桶测试配置信息中获取的功能版本标识为2,即:服务端指示客户端应用程序针对该功能类别应该执行功能版本为2的代码;而客户端应用程序中预先设定需要对按钮的背景色进行设置时,统一调用与功能版本1对应的方法,即:调用abtest_btnColorTest_1(),即服务端的指示与业务代码统一调用方法的功能版本不一致,这时执行步骤602-5进行替换处理。如果上述两个功能版本一致,则不需要执行步骤602-5。
[0177] 步骤602-5:利用所述开发语言的反射特性进行方法实现的动态替换,使得所述客户端应用程序在执行阶段执行与所述分桶测试配置信息中的功能版本标识对应的方法实现。
[0178] 具体说,就是针对当前方法涉及的功能类别,将客户端应用程序预先设定的统一调用的方法实现替换为分桶测试配置数据中指示的功能版本标识对应的方法实现。
[0179] 继续以步骤602-4中的例子进行说明,在本步骤中用方法abtest_btnColorTest_2()的实现替换方法abtest_btnColorTest_1()的实现,从而所有调用abtest_btnColorTest_1()的业务代码,在执行阶段实际上执行的是方法abtest_btnColorTest_2()的功能。
[0180] 在本实施例中采用objective-C实现上述替换功能,直接调用系统提供的class_replaceMethod()函数即可实现,在其他实施方式中,如果采用其他具有反射特性的语言,则可以调用具有类似功能的其他相应函数。
[0181] 步骤603:利用开发语言的反射特性,根据所述功能版本标识执行对应的代码片段。
[0182] 由于在步骤602-5中,利用开发语言的反射特性,已经执行了必要的实现替换操作,因此本步骤不需要对业务代码进行额外的处理,在业务代码的运行过程中,由系统保证所有与分桶测试相关的方法,执行的都是与分桶测试配置信息中指定的功能版本标识一致的方法实现。
[0183] 至此,通过步骤601-步骤603,从方法级的角度对本申请提供的用于客户端应用程序的分桶测试方法进行了描述。在具体实施时,上述步骤601和步骤602所完成的获取分桶测试配置信息、以及方法遍历和实现替换功能可以封装在一个独立的模块中,该模块在客户端应用程序完成初始化操作后启动,即:在客户端应用程序已经完成所有类的注册后启动,步骤603则对应客户端应用程序业务代码的执行阶段。
[0184] 上面描述了采用具备反射特性的开发语言(例如:objective-C)实施本申请技术方案的一种实施方式,在其他实施方式中,也可以采用其他具有反射机制的语言(例如:Java语言)从方法级的角度实现本申请的技术方案。采用Java语言的实施方式与第一实施例的基本处理流程类似,只是在步骤103中需要基于Java语言的反射机制,根据在步骤102中获取的功能版本标识,确定应该调用的方法名称,然后通过getMethod()和invoke()等调用实现在运行阶段对分桶测试方法的动态选择与执行。
[0185] 与上述一种用于客户端应用程序的分桶测试方法的实施例相对应,本申请还提供一种用于客户端应用程序的分桶测试装置。请参看图8,其为本申请的一种用于客户端应用程序的分桶测试装置的另一种实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
[0186] 本实施例的一种用于客户端应用程序的分桶测试装置,包括:配置信息获取单元801,用于获取服务端提供的对应于所述客户端应用程序版本的分桶测试配置信息;第二功能版本获取单元802,用于利用开发语言的反射特性,根据所述客户端应用程序代码涉及的分桶测试的功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;第二代码片段执行单元803,用于利用开发语言的反射特性,根据所述功能版本标识执行对应的代码片段。
[0187] 可选的,所述配置信息获取单元获取的配置信息包括:对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0188] 可选的,所述配置信息获取单元包括:
[0189] 版本信息获取子单元,用于获取所述客户端应用程序的版本信息;
[0190] 本地存储判断子单元,用于判断本地是否未存储对应于所述客户端应用程序版本的分桶测试配置信息,或者,存储了所述分桶测试配置信息但是不具有“最终版本已确定”标识;
[0191] 服务端信息获取子单元,用于当所述本地存储判断子单元的输出为“是”时,从所述服务端获取所述分桶测试配置信息。
[0192] 可选的,所述服务端信息获取子单元包括:
[0193] 请求发送子单元,用于向所述服务端发送获取分桶测试配置信息的请求,所述请求中携带所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识,或者,所述客户端应用程序的版本信息、系统类型以及用于唯一识别其宿主设备的标识;
[0194] 信息接收子单元,用于接收所述服务端返回的对应于所述客户端应用程序版本的分桶测试配置信息;
[0195] 信息存储子单元,用于将所述分桶测试配置信息存储在本地。
[0196] 可选的,所述第二功能版本获取单元包括:
[0197] 遍历控制子单元,用于遍历所述客户端应用程序已注册的每个类,并针对每个类中的每个实例方法和成员方法,触发下列子单元工作;
[0198] 命名判断子单元,用于判断所述方法的名称是否符合预先设定的分桶测试方法命名规则;
[0199] 功能类别提取子单元,用于当所述命名判断子单元的输出为“是”时,按照所述分桶测试方法命名规则,从所述方法名称中提取分桶测试的功能类别;
[0200] 功能版本提取子单元,用于根据所述功能类别,从所述分桶测试配置信息中获取对应的功能版本标识;
[0201] 功能版本判断替换子单元,用于判断所述客户端应用程序预先设定的、调用所述方法所采用的功能版本标识、与从所述分桶测试配置信息中获取的功能版本标识是否一致;若否,利用所述开发语言的反射特性进行方法实现的动态替换,使所述客户端应用程序在执行阶段执行与所述分桶测试配置信息中的功能版本标识对应的方法实现。
[0202] 此外,与上述的用于客户端应用程序的分桶测试方法实施例相对应,本申请还提供了一种用于提供分桶测试配置信息的方法。请参考图9,其为本申请提供的一种用于提供分桶测试配置信息的方法实施例的流程图。本实施例与第一实施例类似的部分不再赘述,下面重点描述不同之处。
[0203] 本申请提供的一种用于提供分桶测试配置信息的方法包括:
[0204] 步骤901:预先设定分桶测试方案。
[0205] 对于客户端应用程序的分桶测试来说,应该满足各个应用版本相互隔离的基本要求,因此服务端需要具备基于应用版本的分桶测试管理功能。具体说,服务端应该采用以应用版本为顶层数据、每个应用版本下包含多个功能类别分支、每个功能类别下包含多个功能版本这样的分层数据组织方式。
[0206] 针对将要发布的新的分桶测试,需要先设定分桶测试方案,即:该分桶测试隶属的应用版本、该分桶测试包括哪些功能类别,对应于每个功能类别的功能版本,以及参与每个功能版本分桶测试的用户比例。
[0207] 在本实施例的一个具体例子中,要新建一个针对无线APP1.0.0应用版本的分桶测试,在上述分层数据的应用版本1.0.0下,添加一个新的功能类别分支“btnColorTest”,在该功能类别下添加两个功能版本标识,其中版本1设置按钮背景色是红色,版本2设置按钮背景色是蓝色,并且设定使用版本1的用户占比为30%,使用版本2的用户占比为70%。
[0208] 服务端定义好上述分桶测试方案(即:分桶测试规则),并且开发人员按照前面实施例中的描述,对参与分桶测试的客户端应用程序按照代码行或者方法级两种方式进行必要的设置或修改后,该分桶测试方案就可以发布了。
[0209] 步骤902:接收客户端应用程序发送的获取分桶测试配置信息的请求,所述请求中至少包含所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识。
[0210] 分桶测试方案发布后,参与分桶测试的客户端应用程序每次启动时,都会向服务端发送获取分桶测试配置信息的请求。该请求中至少包含所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识,还可以包含客户端应用程序运行的系统类型。
[0211] 步骤903:根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0212] 当服务端初次接收某客户端应用程序发送的获取分桶测试配置信息的请求时,可以按照预先设定的分桶测试方案,选择对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。其中,选择功能版本标识可以采用不同的策略,例如:随机策略、轮询策略或者是预先设定的算法,并且可以参考请求中携带的系统类型等信息,只要从宏观上能够做到参与各功能版本分桶测试的客户端应用程序的数量满足分桶测试方案中设定的分桶测试比例即可。
[0213] 完成上述选择后,为了保证客户端用户有比较稳定、良好的使用体验,可以将初次接收到的所述请求中包含的客户端应用程序的版本信息、用于唯一识别其宿主设备的标识、所述功能类别、以及选定的功能版本标识等信息之间的对应关系,存储在本地的数据库中。
[0214] 此后,如果再接收到同一客户端发送的请求(即:在数据库中已经存储了其宿主设备的标识),则根据请求中携带的宿主设备标识在所述数据库中进行查找,从而获取要返回给客户端的分桶测试配置信息,即:对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0215] 通常情况下,在分桶测试结束之前,服务端针对同一个宿主设备的请求,总是向其返回同样的分桶测试配置信息,但是在某些特殊情况下,例如:需要调整参与不同功能版本的用户比例,这时可以通过修改返回给客户端的分桶测试配置信息中的功能版本标识实现该功能,也就是说服务端可以通过调整分桶测试配置信息实现对客户端分桶测试过程的灵活控制与管理。
[0216] 步骤904:将所述功能类别以及所述功能版本标识返回给所述客户端应用程序。
[0217] 通常可以直接将步骤903获取的分桶测试配置信息返回给客户端。考虑到分桶测试结束后,根据统计得到的各种转化率指标,已经确定了最优的功能版本,这种情况下就可以将确定的功能版本的标识发送给客户端,从而客户端应用程序可以将最佳的实现展现给用户,同时也相当于实现了客户端应用程序的自动更新过程,不必要求用户下载已上线发布的最终版本,从而可以改善用户的使用体验。
[0218] 基于上述考虑,本步骤在将已经获取的分桶测试配置信息返回给客户端之前,要判断对应于所述客户端应用程序版本的分桶测试是否已结束,如果结束,用最终发布版本所采用的功能版本标识替换将要返回给所述客户端应用程序的相应功能版本标识。
[0219] 进一步地,采用上述处理之后,为了节省网络流量,还可以在上述替换后的信息中添加“最终版本已确定”标识,从而告知客户端应用程序本次分桶测试已结束,客户端应用程序后续可以直接使用本次返回的分桶测试配置信息即可,不用再向服务端发送获取分桶测试配置信息的请求。
[0220] 因此,针对已结束的分桶测试,本步骤将上述执行替换操作后的信息以及添加的“最终版本已确定”标识一并发送给所述客户端,否则,直接将步骤903获取的分桶测试配置信息发送给所述客户端即可。
[0221] 在上述的实施例中,提供了一种用于提供分桶测试配置信息的方法,与之相对应的,本申请还提供一种用于提供分桶测试配置信息的装置。请参看图10,其为本申请的一种用于提供分桶测试配置信息的装置实施例示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
[0222] 本实施例的一种用于提供分桶测试配置信息的装置,包括:测试方案设定单元1001,用于预先设定分桶测试方案;请求接收单元1002,用于接收客户端应用程序发送的获取分桶测试配置信息的请求,所述请求中至少包含所述客户端应用程序的版本信息和用于唯一识别其宿主设备的标识;信息获取单元1003,用于根据所述请求中包含的上述信息,获取对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识;信息返回单元1004,用于将所述功能类别以及所述功能版本标识返回给所述客户端应用程序。
[0223] 可选的,当所述请求接收单元接收到的是某客户端应用程序初次发送的获取分桶测试配置信息的请求时,所述信息获取单元包括:
[0224] 配置信息选择子单元,用于按照预先设定的分桶测试规则,选择对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识,使得参与各功能版本分桶测试的客户端应用程序的数量满足所述分桶测试规则中设定的分桶测试比例;
[0225] 配置信息存储子单元,用于存储所述请求中包含的客户端应用程序的版本信息、用于唯一识别其宿主设备的标识、以及所述功能类别、功能版本标识之间的对应关系。
[0226] 可选的,所述信息获取单元具体用于,在所述配置信息存储子单元存储的上述对应关系中,根据所述请求中包含的用于唯一识别宿主设备的标识,查找对应于所述客户端应用程序版本的分桶测试的功能类别、以及对应于所述功能类别的功能版本标识。
[0227] 可选的,所述装置包括:
[0228] 测试结束判断单元,用于在触发所述信息返回单元之前,判断对应于所述客户端应用程序版本的分桶测试是否已结束;
[0229] 信息替换单元,用于当所述测试结束判断单元的输出为“是”时,用最终发布版本所采用的功能版本标识替换将要返回给所述客户端应用程序的相应功能版本标识,并添加“最终版本已确定”标识;
[0230] 相应的,所述信息返回单元具体用于,将上述执行替换操作后的信息以及添加的“最终版本已确定”标识一并发送给所述客户端应用程序。
[0231] 本申请实施例还提供了一种分桶测试系统。请参见附图11,所述系统包括用于提供分桶测试配置信息的装置1101、以及用于客户端应用程序的分桶测试装置1102。所述用于提供分桶测试配置信息的装置通常部署在基于C/S架构的负责管理分桶测试的服务器上,所述用于客户端应用程序的分桶测试装置通常部署在基于C/S架构的客户端设备上,包括:个人电脑、智能手机、PAD、iPad等设备,下面简要说明本系统的基本工作流程。
[0232] 部署于客户端设备上的所述分桶测试装置向负责管理分桶测试的服务器发送获取分桶测试配置信息的请求,所述服务器根据该请求中携带的客户端应用程序的版本信息,向所述分桶测试装置返回分桶测试配置信息,该信息包含客户端应用程序参与分桶测试的功能类别以及对应的功能版本标识;所述分桶测试装置在执行客户端应用程序中与分桶测试相关的代码时,根据分桶测试配置信息中的功能版本信息,执行对应的代码片段。
[0233] 综上所述,本申请提供的技术方案,针对客户端应用程序的分桶测试提出了一种新的思路:参与分桶测试的客户端根据服务端提供的与当前应用版本对应的分桶测试配置信息,执行与特定功能版本对应的代码片段,从而完成服务端指定的分桶测试功能。采用上述技术方案,不仅可以满足对客户端应用程序的分桶测试提出的版本隔离要求,而且便于服务端对不同版本客户端应用程序的分桶测试进行灵活地管理与控制,特别是在分桶测试结束后,可以通过对分桶测试配置信息的调整,控制客户端应用程序自动切换到正式发布的应用版本(即:执行最终确定的功能版本对应的代码片段),从而用户无需再次下载正式发布版本,有效改善用户的使用体验。
[0234] 本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
[0235] 在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
[0236] 内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
[0237] 1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
[0238] 2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。