包尔固德老师小组1230108112301081-毕业论文_第1页
包尔固德老师小组1230108112301081-毕业论文_第2页
包尔固德老师小组1230108112301081-毕业论文_第3页
包尔固德老师小组1230108112301081-毕业论文_第4页
包尔固德老师小组1230108112301081-毕业论文_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 本科毕业设计(论文)中文题目:基于 Android 的A/B 测试系统智能 SDK 的设计与实现英文题目:Design and Implementation of Intelligent SDKfor A/B Test System Based on Android学院: 软件学院 专业: 软件工程 学生姓名: XXX学号: xxxxxxxx指导教师: XXX北京交通大学2016 年 5 月 学士论文版权使用授权书本学士论文作者完全了解北京交通大学有关保留、使用学士论文的规定。特授权北京交通大学可以将学士论文的全部或部分内容编入有关数据库进行检索,提供阅览服务,并采用影印、缩印或扫描等复制手

2、段保存、汇编以供查阅和借阅。 (保密的学位论文在后适用本授权说明)学位论文作者签名:指导教师签名:签字日期:年月日签字日期:年月日 北京交通大学毕业设计(论文)中要中要摘要: A/B 测试系统的主要的作用是,提供给开发者一种版本优化方案,该方案可以随机将开发应用的不同版本同时投放用户使用,并提供对用户行为的数据统计和分析,帮助开发者作出决策。其本质是互联网产品的抽样试验,是对时下热门的数据挖掘和数据分析概念的具体应用,在互联网日益普及和飞速发展的当下,随着数据的不断积累,人们发现大量数据的变化趋势受到一些因素的影响。具体而言,当应用的版本变化时,因素的改变即会带来用户行为数据的变化,A/B 测

3、试系统以抽样试验提供数据变化的对比, 从而帮助开发者判断版本变化的正确性。 本文讲述的是 A/B 测试系统中的 Android SDK 工具的开发流程,项目从需求分析、概要设计、详细设计、开发工作,到系统测试。SDK 以 Android 为平台开发,包括五个模块的功能:初始化模块,编辑模块,运行模块,数据收集模块和数据发送模块。初始化模块包括抽样版本和运行模式选择的功能,编辑模块包括显示抽样版本和与 Web 协同创建新版本的功能,运行模块完成 SDK 的用户行为监控功能,数据收集模块完成用户行为数据数据并存储到数据库的功能,数据发送模块包括同 Web 端建立数据通道和向 Web 端直接发送数据

4、的功能。同时使用了 OKHttp,GSON,SQLite 数据库等第三方技术,各模块之间相对独立,具有良好的扩展性。 目前该部分已经与公司测试系统的其他部分良好对接,通过了大量的测试,正在积极产品化,不久就能正式上线并投入使用,发挥更大的价值。 关键词:A/B 测试;试验;目标;数据收集; i 北京交通大学毕业设计(论文)英要ABSTRACTABSTRACT:The main role of A / B testing system is to provide developers with a version of the optimization program, which can be

5、 randomly different versions of application development while serving users, and provides user behavior data and statistical analysis to help developers decision-making. Its essence is sampling test of Internet products, is nowadays popular application-specific data mining and data analysis concepts

6、, the growing popularity of the Internet and the rapid development of the moment, with the accumulation of data, it was found that the trend of large amounts of data by some influencing factors. Specifically, when the version of the application changes, the change factor, that will bring about chang

7、es in user behavior data, A / B test systems in order to provide comparative data sampling test changes to help developers make sure that the version change is correct.This article is about the A / B test system development process the Android SDK tools,the project from requirements analysis, outlin

8、e design, detailed design, development, tosystem testing. SDK initialization module,transmission module.develops for Android platform, including five functional modules: editing module, runningmodule, data collection module and dataInitialization module includes sample versions and operating modesel

9、ection function, editing module includes a display sample version and a Web collaboration to create a new version of the function, operation module to complete SDK user behavior monitoring, data collection module complete the functions of user behavior data collection and stores it in the database,

10、data transmission module includes the establishment of a data channel with the Web client and functional data is sent directly to the Web side. Using both OKHttp, GSON, SQLite database and other third-party technologies, the SKD is relatively independent of each module and has good scalability.At pr

11、esent the part has been with the company good docking the rest of the test system,through a large number of tests, is actively prod, may soon be able to formally launched and put into use, to play a greater value.KEYWORDS:A/B Test,Experiment,Goal,Data Collectionii 北京交通大学毕业设计(论文)目录目录中要IABSTRACTII目1录I

12、II引言11.1 项目背景和意义11.1.1 项目背景11.1.2 项目意义1.5国内外研究现状2笔者的主要工作2论文的组织结构3本章小结32相关技术介绍42.1 ANDROID 概述42.2 OKHTTP 概述42.3 JSON 与 GSON 概述42.4 SOCKET 概述52.5 SQLITE 数据库52.6 本章小结6系统需求分析63.1 功能性需求分析63.1.1 Android SDK 功能结构6.33.1.4编辑模块7数据收集模块8数据发送模块93.2 非功能性需求分析103.3 本章小结11系统概要设计124.1 整体架构设计124.2 功

13、能模块运行设计13.24.2.3编辑模块运行设计13数据收集模块运行设计14数据发送模块运行设计144.3 本章小结15系统详细设计165iii 北京交通大学毕业设计(论文)目录编辑模块的设计16数据收集模块的设计17数据发送模块的设计185.3.1 普通模式下的数据发送模块185.3.2 编辑模式下的数据发送模块19系统实现216.1 编辑模块的实现216.1.1 普通模式下的编辑模块216.1.2 编辑模式下的编辑模块236.2 数据收集模块的实现256.3 数据发送模块的实现296.3.1 普通模式下的数据发送模块296.3.2 编辑模式下的数据发送模

14、块326.4 本章小结33系统测试346功能性测试用例设计34非功能性测试用例设计36本章小结378总结与展望38参考文献39致附谢40录41iv 北京交通大学毕业设计(论文)正文1 引言本章第一部分介绍了项目的背景与意义,之后通过分析了相似项目在国内外的发展情况,描述了项目研究在国内外发展的现状,同时分模块说明了本人在毕业设计中的主要工作,最后阐述了论文的组织结构。 1.1项目背景和意义1.1.1 项目背景作为一种新出现的互联网优化方案1,A/B 测试,本质上是被广泛应用于各个行业的对照实验,通过适当的实验设计和随机化的控制,构建科学的实验因果关系。在以前, 互联网想要进

15、行 A/B 测试往往需要较高的技术成本和资源成本,但随着技术的不断成熟, A/B 测试已经越来越成为互联网优化的常用方法。 在互联网行业中,当一个新项目即将推出时,选择何种式样更能够吸引使用者;当一个产品的新版本准备发布时,新的更新和优化是否一定比原来的好,长久以来这些问题并没有一个有效且花费低的验证方式。而 A/B 测试,作为一种科学的可视化方法,针对不同版本的变量控制,可以让开发者更好的分析和理解正在进行的项目,帮助其作出更加准确的判断。因而可以说,能够以较小的成本和代价,进行 A/B 测试是大多数开发者的共同需求,旨在开发一个简单易行的 A/B 测试系统的项目也就应运而生了。 Andro

16、id 开发是互联网应用开发的主力军,一个高适配性的A/B 测试系统,就不可能忽略对 Android 平台的适配,而将 A/B 测试的各项功能在应用中实现,以嵌入 SDK 结合 Web 端进行控制的方式实现,符合以较小成本和代价进行 A/B 测试的初衷,是一 个很好的解决方案。 1.1.2 项目意义A/B 测试可以说是一种产生预测型结论的实验体系,我们可以称之为“先验”,与归纳性结论的试验体系,即“后验”有着本质的不同。A/B 测试的意义也就在于此。它通过以下的环节控制来保证实验结论的代表性,并确保这一结论可以推广到更大的范围。第一是实验设计的科学性,第二是随机化的控制方式,第三是具有代表性的抽

17、样样 本,第四是流量分割与小流量测试的测试方法2。 1 北京交通大学毕业设计(论文)正文而选择以 SDK 的作为 Android 端的 A/B 测试系统的工具有以下考量: 首先,下载和引用的便利。将功能代码打包,提供下载,并且用明确的文字引导应用开发者使用,操作简单。 其次,不需要开发者了解内部的功能,只是提供接口供开发者引用,减少了使用新功能的繁琐过程,降低了开发的时间成本。 最后,可以使应用保持原本的开发结构,不需要做架构上的修改,降低执行 A/B 测 试给项目开发带来的风险。 1.2国内外研究现状而在国外,有一件相对较为成熟的公司Optimizely,该公司的已经拥有了超过7000 家的

18、客户,累计 50 万次的试验从这些客户的项目中产生,并对项目顺利的进行起到了积极的影响,这使得 Optimizely 成为了国外数一数二的 A/B 测试平台。使用Optimizely 时你只需要为你的程序添加一段简短的代码,就能够给你的 Web 应用、Android 应用、Ios 应用创建 A/B 测试。该服务 2010 年 7 月份启动,至今已经有近 6 年的不停运营,在这个过程中,该平台得到了不断的完善,并且增加了其他的功能,比如在其模块中整合了 Google Analytics 的功能,让用户能够使用 Google Analytics 进行分析。值得一提的是,一个相对成熟的外国公司,能够

19、给我们的项目带来很多的借鉴。而在国内,受制于开发者对于这项服务的认可度还有待提高,目前还没有一家公司能够称得上在这个领域独树一帜,拥有相对成熟的 A/B 测试平台和系统。因此对于国内市场 来说这是一个需求缺口,这也从侧面反映了这个项目的可行性。 1.3笔者的主要工作A/B 测试系统主要包括两部分:实现 A/B 测试功能的 Web 平台。帮助应用适配 A/B 测试平台的 SDK 工具。具体的 SDK 在 A/B 测试系统中的位置如图 1-1 所示。 2 北京交通大学毕业设计(论文)正文Android SDK 的作用是对接 A/B 测试Web 平台与 Android 应用,帮助应用获取抽样和运行所

20、需数据,帮助 Web 平台创建测试版本和进行数据收集。通过嵌入 SDK,开发者即可在 Web 平台上进行针对应用的 A/B 测试了。笔者参与了项目从需求分析、概要设计、详细设计、开发工作,到系统测试的工作流程,该项目包括:初始化模块,编辑模块, 运行模块,数据收集模块和数据发送模块。笔者参与了以下模块的开发: 1. 编辑模块,主要完成了抽样版本的显示和协助Web 平台创建新版本 2. 数据收集模块,主要完成了针对用户行为的数据收集,并存储到数据库 3. 数据发送模块,主要完成了与Web 平台建立 Socket 连接和发送用户行为数据到Web 平台。 1.4论文的组织结构本论文共分为八章,具体内

21、容安排如下: 第一章介绍了项目的背景与意义,分析了项目的现状,说明了本人在毕业设计中的主要工作,阐述了论文的组织结构。 第二章介绍了毕业设计中用到的相关技术,包括 Android,OKHttp 传输,JSON 数据格式和 GSON 转换工具,Socket 通讯,SQLite 数据库。 第三章介绍了项目的功能性需求和非功能性需求。划分了系统的功能模块,并且进行了简要的介绍说明。 第四章介绍了系统的概要设计。着重阐述了系统整体的架构、各个功能模块的运行设计和数据结构设计的思路。 第五章介绍了系统的详细设计。主要包括编辑模块、数据收集模块、数据发送模块, 由功能类图来具体的说明。 第六章介绍了系统的

22、实现。主要对详细设计的模块结合关键代码进行实现的说明, 并通过运行截图展示实现的最终效果。 第七章通过测试用例,介绍了对系统进行功能性测试和性能测试的过程,对测试结果进行了分析和说明。 第八章是总结与展望,说明了项目在未来的时间计划做出的改进,和对项目的发展 前景的客观预测。 1.5本章小结第一章介绍了项目的背景与意义,分析了项目的现状,说明了本人在毕业设计中的 主要工作,阐述了论文的组织结构。 3 北京交通大学毕业设计(论文)正文2 相关技术介绍2.1Android 概述Android 是基于 Linux 内核的开源移动设备软件平台和操作系统,广泛使用于平板电脑和智能手机。它采用了软件堆层的

23、架构,系统架构分为四层结构: 第一部分为以Linux 核心的内核层,由 c 语言开发,只提供基本功能。第二部分为包含了虚拟机 Virtual Machine 和函数库Library 的系统运行库层,由 C+开发。第三部分为应用程序框架层, 包含各种可以重构的管理器3。第四部分为各种应用软件共同组成的应用程序层,包括了通讯程序,界面交互等,应用软件则由各公司自行开发,主要以 java 编写。但是, Android 虽然使用Java 语言作为开发工具 ,但是在实际开发中发现,还是与Java SDK 有一些不同的地方。Android 原生的SDK 引用了大部分的Java SDK,也有极少数的部分 被

24、 Android 抛弃。 2.2OKHttp 概述Android 系统存在着 HttpURLConnection 和 HttpClient 两种 HTTP 通信类4,而虽然 Google 在大部分 Android 的版本中都对使用 HttpURLConnection 进行了推崇,但是从实际的工作中来看,这个类比起 HttpClient 来,在易用性和功能方面都要弱势很多。 而 OkHttp,正是针对这个类的改进方案,从实践的验证中我们可以认为这是一个针对此类的比较成熟的解决方案, 甚至有传言称在安卓的 4.4 版本的源码中HttpURLConnection 已经替换成 OkHttp 的实现方式

25、了。所以我们更有理由相信 OkHttp 的强大。 使用 OkHttp 的理由,是它提供了很多网络难题的解决方案,比如:会从很多常用的连接问题中自动恢复。如果您的服务器配置了多个 IP 地址,当第一个 IP 连接失败的时候,OkHttp 会自动尝试下一个IP。OkHttp 还处理了服务器问题和SSL 握手失败问题。OKHttp 还提供了针对许多模块的接口,更加扩大了它的应用范围,使得开发者使 用它时能够更加从容的应对各种情形。 2.3JSON 与 GSON 概述JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 它是ECMAScript 拓展出的一个子

26、模块。JSON 既作为一种彻底独立于语言之外的文本格式, 又沿用了与 C 语言相似的语言习惯。这些特性是JSON 能够成为优秀的数据交换语 4 北京交通大学毕业设计(论文)正文言的关键因素。这些特性既能简化编程人员的阅读和编写过程,同时也能让机器解析和生成变得更有效率5。 Gson 是由 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的一个 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者将一个 Java 对象转成一个JSON 字符串6。Gson 相比较于现存的其他 java JSON 类库,最大的不同就是 Gson 在需要序列化实体类的时候

27、,不需要使用 annotation 来标识需要序列化的字段,却也可以通过对 annotation 的使用来配置需要序列化的字段,使得这能变得十分灵活。同时 Gson 支持变换的 Java 对象可以任意的复杂,甚至包括了对于源码不可见的对象的转化。 2.4Socket 概述Socket 用于描述 IP 地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在 Internet 上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个 Socket,并绑定到一个端口上,不同的端口对应于不同的服务。 Android 与服务器的通信方式主要有两种,一是 Http 通

28、信,一是 Socket 通信。两者的最大差异在于,http 连接使用的是“请求响应方式”,即在请求时建立连接通道, 当客户端向服务器发送请求后,服务器端才能向客户端返回数据。而 Socket 通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。Socket 又称套接字,是一种抽象层,应用程序通过他来发送和接收数据,简单来说就是在程序内部提供了与外界通信的端口,即端口通信。通过建立Socket 连接,可为通信双方的数据传输传提供通道。应用程序在使用Socket 时,相当于将应用程序添加到了网络之中,使其可以与处于同一网络中其他的

29、应 用程序互相通信7。Socket 的主要特点有数据丢失率低,使用简单且易于移植。 2.5SQLite 数据库SQLite 是一个嵌入式库并且实现了零配置、无服务端和事务功能的 SQL 数据库引擎。它在广泛领域内被使用,而且单线程读写性能与 MySQL 比肩,并且保证 ACID 性。 SQLite 的存储后端是采用Btree 实现,多个连接可以并发操作,但是同一时间只允 许一个写着存在8。 SQLite 在硬盘上一个数据库一个文件,每个数据库文件头部保存有这个数据库的元信息,包括版本,大小,Btree 根节点位置等等。 SQLite 将一个数据库以Page 为单位进行管理和读写,每一个 Pag

30、e 默认为 512 字节, 5 北京交通大学毕业设计(论文)正文通常可以看做一个硬盘 sector 大小。2.6本章小结第二章介绍了此毕业设计中用到的相关技术的核心,包括 Android 语言,OKHttp传输工具,JSON 数据格式和 GSON 转换工具,Socket 通讯,SQLite 数据库。 3 系统需求分析本章是对毕业论文基于的项目进行的需求分析,主要分为功能性需求分析和非功能性需求分析两大部分,功能性需求分析包括了针对整个 Android SDK 部分的整体功能结构,以及作者完成的各个模块的功能性需求,同时也分析了针对 SDK 本身性能和其与 Web Server 端交互能力的非功

31、能性需求。 3.1功能性需求分析对接 A/B 测试系统的Android SDK 部分,主要包括以下功能模块:初始化模块,运行模块,编辑模块,数据收集模块和数据发送模块五大部分。笔者将分析 Android SDK 部分的整体功能结构,并对笔者参与的编辑模块,数据收集模块,数据发送模块做具体 的功能性需求分析分析。 3.1.1 Android SDK 功能结构该 SDK 为 A/B 测试系统Android 平台的核心部分,共可分为两大部分的功能,第一个部分的各个功能模块是为了实现 SDK 的运行,初始化各项参数,同时根据设置选择进入 SDK 的两大运行态,普通模式或编辑模式,并维持与之对应的运行模

32、块和编辑模块的运行。第二个部分的各个功能模块则是在进行各项数据的处理,为运行提供支持。 这一部分包括数据收集模块和数据发送模块。具体的功能结构如图 3-1 所示。 6 北京交通大学毕业设计(论文)正文同时由于 Android SDK 的数据处理部分使用了的 A/B 测试系统 Web 端的相关功能所产生的数据,但由于本论文不涉及 Web 端功能的具体实现,故在此对相关概念及 SDK 所使用的数据作简要描述: 1) 创建试验功能 用户可以在 Web 端创建针对应用的试验,并以此为单位进行数据统计,试验区分 Web、Android、ios 三大平台,分为草案、运行中、暂停和结束四种状态,当用户使用

33、Android SDK 时,所有 Android 平台的试验数据将被发送给SDK,供SDK 使用和处理。2) 编辑器功能 用户可以通过编辑器与 SDK 的连接,在Web 端获得应用的界面和界面参数,并可以通过修改界面的参数,生成新的界面,实时修改应用端的界面,最后将修改过的应用保存为新的版本,版本均为某一试验的版本。3) 创建目标功能 用户可以在某一试验的编辑器中创建针对用户的点击操作或视图的数据收集目标,此目标被创建后,所有进行此操作的用户行为都将在应用端被统计, 并生成数据,发送给 Web 端作报表处理。目标的信息将随试验信息一起发送给SDK。4) 流量分配功能 用户可以对试验下的所有版本

34、进行流量分配,总值为 100%,系统将根据此将不同的版本抽样到不同用户手中。 3.1.2 编辑模块编辑模块是实现 A/B 测试的保证,它根据从数据收集模块接收的界面参数,修改现在的界面,实现对不同试验版本的显示,从而在不同应用上进行A/B 测试。其用例图如3-2 所示。 7 北京交通大学毕业设计(论文)正文根据不同的运行态,编辑模块的具体功能需求如下: 1)普通模式 根据初始化模块的筛选结果,将相应的试验版本加载到应用的原始版本上(需要在用户打开应用界面前完成,且需要恒定在应用的生命周期中,保证当用户此次安装应用后只能够看见抽中的试验版本)。 2)编辑模式 编辑模块是编辑模式的核心模块,大部分

35、编辑模式的功能都是由编辑模块执行和调用的,具体包括: 一,应用上界面的切换。 二,接收 Web 端传来的数据,根据参数修改界面。 3.1.3 数据收集模块数据收集模块负责将接收的 Web 端发来的数据解析,提供取得数据的接口,供 SDK 运行时其他模块使用。收集不同的应用数据,并存在数据库中,等待发送模块的使用。其用例图如 3-3 所示。 8 北京交通大学毕业设计(论文)正文数据收集模块只在普通模式下工作,对于数据收集模块的功能需求主要有三部分: 一是在应用运行前根据将要初始化的具体信息,接收从 Web 端发来的对应的试验 数据。 二是在目标被触发和页面切换时,收集相应的用户行为数据。三是将数

36、据存入数据库。 3.1.4 数据发送模块数据发送模块的主要功能,是对各个数据的整理,打包和发送。其用例图 3-4 所示。 既有直接的数据传输,也有通过数据库的间接传输,使用的传输方式也各不相同,9 北京交通大学毕业设计(论文)正文针对不同的运行态有各不相同的功能需求如下: 1)普通模式 在普通模式下,对于数据发送模块的功能需求主要分为三部分。第一部分是将应用每次页面切换的数据发送到 Web 端, 第二部分是将启动在应用上的试验所设置的数据收集目标触发时收集的数据发送到 Web 端。 需要注意的是,以上这两个部分的数据均是从数据库中取出,且传输时需要对原始数据做处理,转换成 Web 端可以接受的

37、数据类型。 第三部分是针对数据发送的保证机制,未发送成功的数据将会被在合适的时机继续尝试发送,保证所有的数据都发送到 Web 端。 2)编辑模式 由于编辑模式的数据发送要求实时高效且准确,因此其第一部分功能是先建立起来Web 平台与应用的数据连接通道,这是数据发送模块在编辑模式下的首要任务。 第二部分功能是在连接编辑器时将应用所有界面的参数发送到 Web 端,并在每一次界面切换触发时及时的将切换页面的具体信息发送给 Web 端,方便其加载相应界面。 3.2非功能性需求分析非功能性需求,是指产品为了充分满足用户在业务方面的需求而硬性要求的,除功能需求以外的需求。产品非功能性需求的定义的完备与否、

38、标准高低,决定着产品质量的好坏,并且还在很大程度上影响着产品的功能需求定义。 对于需要导入应用中的 SDK 来说,对于其非功能性需求的重视程度应该更高,因为作为一个应用产品的置入部分。首先需要的是对于原产品的运行效率几乎没有影响或影响很小,在可以接受的范围内;其次 SDK 的使用不能妨碍应用产品的业务流程,即所有的功能都要在静默实现,不能占用应用程序过多的资源;然后作为 A/B 测试平台的接口,我们也需要 SDK 快速高效的完成功能,提供准确的数据结果;最后我们对于新功能的加入有所期许。上述这些目标若想要达成,就对 SDK 的安全性、稳定性、可靠性、可用性、易用性和可扩展性提出了要求。具体的

39、Android SDK 的非功能性需求如表 3-1 所示。 表 3-1 非功能性需求 10非功能性需求详细要求 安全性 SDK 功能执行单独的线程,不会影响到应用本身的运行,以唯一的ID 识别用户试验,保证试验内容的性,同时支持将数据修改为发送到部署在用户私有服务器上的A/B 测试系统。 北京交通大学毕业设计(论文)正文3.3本章小结本章主要对 Android SDK 的整体功能结构进行了详细的阐述,并对其从功能性需求和非功能性两个方面进行了细致的分析,其中具体的阐述了笔者所涉及的编辑,数据收集和数据发送三个模块,且分别针对 SDK 不同的运行模块做了细致的分析。 11稳定性 一次部署之后,系

40、统会根据部署的内容自动执行,且只要应用不关闭,SDK 将会一直执行其功能。 可靠性 应用或意外中断时数据不会丢失,并且在应用恢复后可以将未发送的数据再次发出。 可用性 SDK 以 Jar 包的形式存在,故可支持任意开发平台的 Android 应用导入此功能。 易用性 SDK 使用简单,在 Web 端有相应的简单说明,按步骤部署即可使用可扩展性 SDK 可以支持不断的进行新功能的迭代,基本的代码框架能够满足新的功能开发。 北京交通大学毕业设计(论文)正文4 系统概要设计在本章内容中,笔者将根据需求分析的内容和结论,对整个 Android SDK 部分进行概要设计,概要设计的内容将包括对 SDK

41、的整体架构设计、相关功能模块的运行设计和数据结构设计。 4.1整体架构设计Android SDK 在功能上主要分为五大模块,分别为初始化模块,运行模块,编辑模块,数据收集模块和数据发送模块。通过获取 Web 端的数据,在 Android 应用上初始化A/B 测试的各个功能模块,实现 A/B 测试功能在测试应用上的部署。SDK 会根据初始化时的标记,让其运行后自动进入两个运行态普通模式和编辑模式的其中之一,根据运行态的不同,以设定好要收集的数据目标和类型,实现 SDK 的正常运行,各个模块 也都执行着其不同的功能,具体的系统架构设计如图 4-1 所示。 12 北京交通大学毕业设计(论文)正文首先

42、,作为一个 Android SDK,必须要引入 Android 应用才能发挥其作用,首先, 系统要求用户正确的将 SDK 导入,进行后续的功能。 在应用运行前,用户必须提供其 Web 端账户工程的唯一标识,否则无法启动 SDK, 同时设置想要进入的运行态,默认进入的运行态为普通模式。 应用运行后,初始化模块最先启动,根据传入的参数,首先标记用户,设置运行态。随后根据运行态,调用数据收集模块,向 Web 端请求对应用户相应运行态的数据,将其设置到系统中。 随后,根据运行态的不同出现了两个分支: 1) 当运行态为普通模式 普通模式将运行模块设置为 SDK 的常驻模块。此模块主要的功能是在应用运行时

43、, 对页面的切换,与目标对应的点击等用户行为做。数据收集模块在触发时被调用,收集这些数据,存入数据库,随后数据发送模块在适当的时机被触发,将收集的数据发送给 Web 端作进一步的处理。需要特别注意的是,普通模式所加载的版本,在第一次安装此应用时被确定,版本的信息会存储在本地数据库中,每次加载应用时,系统都会判断是否存在本地数据,且会优先加载本地数据。 2) 当运行态为编辑模式 编辑模式将编辑模块设置为 SDK 的常驻模块。此模块主要的功能是与 Web 端协调, 完成 A/B 测试的前提,不同版本的应用的创建,和数据收集的目标的创建。在建立连接之后,实时的调用数据收集和数据发送模块。 4.2功能

44、模块业务逻辑设计4.2.1 编辑模块编辑模块的业务逻辑如下: 1)普通模式 普通模式下,在应用运行前,初始化模块会根据接收的流量分配信息,执行随机抽样功能,确定将要运行的 A/B 测试版本。编辑模式随后接收此版本信息,调用数据收集模块的接口,从中取出相应测试版本的界面参数。随后编辑模块会在应用界面加载前, 按照此参数,修改此应用的原始版本,最终将测试的版本呈现给用户。同时,为此试验与版本的对应添加标记,保证应用在此 A/B 测试者的 Android 操作系统中时,除非因应用本身的更新或卸载重装,或者在 Web 端开发者修改了版本的流量分配,否则在此应用的生命周期中,将始终呈现出抽样确定的测试版

45、本。 2)编辑模式 13 北京交通大学毕业设计(论文)正文编辑模式下,在执行了数据发送模块的相关功能之后,测试应用与 Web 端之间将建立起连接通道,此时可以实现实时的数据往来。在此基础上,编辑模块首先收集应用界面的参数。并发对界面切换的进行,当界面切换时,调用数据发送模块将此信息传递到 Web 端,于此同时,根据历史的接收数据,将修改的界面参数,加载在界面上。Web 端编辑器进行界面修改时,编辑模块能够得到实时的界面修改参数,编辑模块调用相应接口,拿到这些参数之后做相应的修改,但是需要注意的是编辑模式下的界面修改不是永久的,而只是供编辑器保存相应的版本,即当编辑器断开连接时,不会维持修改的界

46、面,而是还原为原始的应用版本,而只有在普通模式中,才会持续的加载某一抽样 版本。 4.2.2 数据收集模块因数据收集模块只在普通模式下运行,故其业务逻辑如下: 进入普通模式时,数据收集模块优先从本地接收并解析 Web 端发来的试验信息,初始化模块首先调取数据收集模块解析的试验的状态来判断是非在应用上运行此试验。当试验状态为需要运行时,根据解析的版本流量分配信息,抽样运行的测试版本,随后编辑模块触发,调用接口获取相应版本的界面参数信息,最后初始化模块取得对应试验的数据收集目标的信息,为所有目标指定的载体设置相应的运行。 ,随后应用开始正常在应用运行的过程中,当目标被触发时,数据收集也随之执行,此

47、时模块将收集目 标数据并存储在数据库中,供发送模块使用。 4.2.3 数据发送模块1)普通模式 发送数据功能在普通模式运行下不断的进行,通过数据库进行间接的传输,完成着作为 A/B 测试系统 SDK 的最基本功能。发送数据的类型主要分为两部分,页面切换的数据,标记为 PageView,以及目标触发的数据。无论哪种数据的类型,将要发送的数据都会以相应的格式存储在数据库中,同时,发送模块将新建一个发送数据的线程。多个线程以队列来排序执行的顺序,依次从数据库中取出数据,整理成 Web 端不同数据的接收格式,以 Http 请求将数据发送到 Web 端,随后接收 Http 请求返回的状态字并作如下判断:

48、当数据发送成功时,将发送成功的数据从数据库中删除。当数据发送未成功时,数据将保留在数据库中,数据发送模块会周期性的将未成功发送的信息再次发送,直到所 有的数据都被发送。 14 北京交通大学毕业设计(论文)正文2)编辑模式 数据发送模块首先会在 SDK 与 Web 编辑器之间建立 Socket 连接,这个建立的连接通道有利于数据的实时传输,随后数据发送模块将应用的界面参数,发送到Web 端。当界面变换时,此模块实时的将应用跳转到哪一个界面的信息,发送到编辑器,用以支持 Web 端的界面呈现。 4.3本章小结本章中,笔者针对毕业设计的作品做了整体的架构设计,对笔者未涉及模块所可能使用的功能进行了描

49、述。对于将要设计和实现的模块进行了功能流程的详细描述,以此来完成对功能模块的概要设计。最后对于需要发送的数据做了数据结构的设计。 15 北京交通大学毕业设计(论文)正文5 系统详细设计本章将具体介绍笔者参与的 Android SDK 功能模块的详细设计,针对每个模块,通过类图来具体描述其功能,在前面的章节中已经提到过 SDK 的两大运行态普通模式和编辑模式不同功能仅在不同的模式下才会进行。同时,需要强调的是,作为一款A/B 测试系统的 SDK,面向的应该是使用这一 SDK,准备对其开发的应用产品进行 A/B 测试的公司,项目组和开发人员,因此我们称 SDK 的使用者为开发者。而我们称测试 的载

50、体,使用应用产品的人为用户,下文将不再赘述。 5.1编辑模块的设计编辑模块的类图如图 5-1 所示。类 LifecycleCallback 继承 Application.ActivityLifecycleCallbacks,并重写其下的各个方法:onActivityCreated,onActivityStarted,onActivityResumed, onActivityPaused,onActivityStoped,onActivityDestroyed。用以用的各个生命周期。 Android 应器类 EditListener。setEditListener 方法用于设置对编辑器修改的on

51、EditListener 方法则在每次编辑器修改并传输数据时被触发执行。 , Views 类下的两个方法applyChangesInEditMode 和applyChanges 是编辑模块的核心方法,均执行对界面的修改,applyChangesInEditMode 实现编辑模式下对界面的实时修改,applyChanges 实现普通模式下对界面的修改。 类 ViewPropertyHandler。 16 北京交通大学毕业设计(论文)正文view 存储应用界面对象,viewUtil 存储界面组件对象,key 存储组件参数的名称, value 存储修改的参数值 setViewProperty(vie

52、w,viewUtils,key,value)方法是类中的一个方法,其主要的 作用就是根据 view 识别到对应的界面,通过 viewUtil 确定组件的修改,根据 key 查找出是组件的哪一参数需要修改,获得其句柄后,将其参数修改为 Value。 5.2数据收集模块的设计数据收集模块的类图如图 5-2 所示。Data 类是数据收集模块的核心类。 loadData 用来标记当前是否已经有数据加载到了应用上,true 表示有数据。loadLocalDataFile 方法尝试执行本地数据加载,加载成功返回true。readDataFile 方法尝试从本地Config 文件中检测是否存在JSON 格式

53、的版本数据。marshallDataFile 方法使用GSON 工具将JSON 格式的数据依据key 和value 提取出 来,并转换为 GSON 的对象返回。 fetchRemoteDataFile 方法创建一个下载任务从Web 端检测是否有对试验的修改, 如果有修改过的新版本,会将获取的 JSON 覆盖到 Config 文件之下,判断 loadData 标记为 false,则会调用parseData。 storeVisitorEventForExperiment 方法用来存储页面切换数据。storeGoalDataForEvent 方法用来存储目标数据。 Event 类是一个抽象类,JSO

54、N 用于存储收集的数据,getJSON 方法构造和获取到JSON。 GoalEvent 和VisitorEvent 都是其继承类,在getJSON 方法的实现上有所区别。 17 北京交通大学毕业设计(论文)正文EventUtils 类是JSON 构造类。putVisitorEventParams 方法构造页面切换数据的JSON。putEventParams 方法构造目标数据的JSON。 5.3数据发送模块的设计5.3.1 普通模式下的数据发送模块Result类的定义是实现并发控制的关键,Result类的类图如 5-3 所示。整个类继承了 Future类,是对于 Runnable 的执行结果进行

55、取消、查询是否完成、获取结果。必要时可以通过 get 方法获取执行结果,该方阻塞直到任务返回结果。Future 类位于java.util.concurrent 包下,是一个接口9,重写之后的 Result 类添加了一些属性和方法,在属性方面。 mStatus 方法用来标记任务是否正在执行,初始化为 1,值为 4 时表示任务正在执行,值为 8 时表示取消该任务。 mPayload 方法与T 的数据类型相同,用来存储执行任务。 mSuccess 方法用来存储任务是否成功,值为 true 时表示成功,false 表示未成功。mHandlers 方法则用来储存并发的多个任务的执行列表。 then 方法用来控制Handler 类中各个方法的执行。 recolve 方法用以设置任务的mStatus 为 4,并将 mPayload 传入。 cancel 方法取消任务和标记执行数据发送执行失败,如果取消任务成功则返回true,且将 mStatus 设置为 8,将 mSuccess 设置为 false,如果取消任务失败则返回false。 isCancelled 方法表示任务是否被取消成功,如果在任务正常完成前被取消成功, 18 北京交通大学毕业设计(论文)正文

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论