本文档《Automated Testing of Android Apps: A Systematic Literature Review》是一篇发表在《IEEE Transactions on Reliability》2019年3月刊(第68卷第1期)上的系统文献综述(Systematic Literature Review, SLR)。主要作者包括Pingfan Kong、Li Li、Jun Gao、Kui Liu、Tegawendé F. Bissyandé 和 Jacques Klein。他们分别来自卢森堡大学跨学科安全、可靠与信任中心和澳大利亚莫纳什大学信息技术学院。
综述主题与研究背景 本文的主题是Android应用的自动化测试。随着Android设备的普及和海量应用的出现,确保应用质量变得至关重要。然而,Android应用开发模型具有其特殊性(如基于事件的机制、碎片化生态系统等),使得传统软件测试技术无法直接有效应用。因此,研究界提出了大量针对Android应用的测试方法。本文旨在通过系统性文献综述,对该领域的研究现状进行一次清晰的梳理,总结主要趋势、应用的方法论、面临的挑战以及未来仍需努力的研究方向。此前,尚没有关于Android测试主题的全面综述文献,因此本研究旨在填补这一空白。
综述方法论与文献筛选过程 本文严格遵循了Kitchenham等人提出的SLR指南。其工作流程主要包括:定义研究问题、制定检索策略、执行检索、应用排除标准筛选文献、数据提取与分析,以及最终的报告撰写。
为了全面收集文献,作者采用了两种互补的检索策略: 1. 在线数据库检索:在ACM数字图书馆、IEEE Xplore数字图书馆、SpringerLink和ScienceDirect四个知名数据库中,使用构建的检索字符串进行检索。检索关键词分为“测试”(如testing, verification, validation)和“Android”(如android, mobile, smartphone)两大类,并进行组合。 2. 重要学术会议/期刊检索:为确保覆盖度,避免因部分顶级会议(如NDSS)不在上述数据库中而遗漏重要文献,作者还基于中国计算机学会(CCF)的排名,在软件工程和安全领域的主要会议和期刊中进行手动检索。
初始检索共获得9259篇文献。随后,作者应用了九项严格的排除标准进行筛选,包括:非英文论文、短文(如工作进展)、与Android应用测试不相关、重复发表、对比评测/调查类论文、测试目标非应用本身(如操作系统)、评估现有测试方法的论文、仅关注搭建测试环境/平台的论文,以及因关键词宽泛而误检的论文(如仅使用机器学习检测恶意软件而非测试的论文)。经过标题、摘要和全文的逐层筛选,最终确定了103篇高度相关的研究论文作为本次综述的“主要出版物”(primary publications),时间截止至2016年。所有相关信息和构建的资料库均已公开,以便后续研究。
主要研究发现与观点阐述
一、 Android应用测试研究的分类体系 为系统分析文献,作者构建了一个涵盖四个维度的分类法(Taxonomy): 1. 测试目标:测试方法旨在解决的具体问题,包括并发性、安全性、性能、能耗、兼容性以及缺陷/漏洞检测。 2. 测试靶向:测试方法重点关注的Android应用特定元素,主要包括图形用户界面/事件(GUI/Event)、组件间/应用间通信(ICC/IAC)以及一般性代码分析。 3. 测试级别:在应用开发过程中执行测试的阶段,包括单元/回归测试、集成测试和系统测试。 4. 测试技术:实现测试所采用的基础方法论(如基于模型、基于搜索、随机、模糊测试等)、测试类型(白盒、灰盒、黑盒)以及测试环境(模拟器、真实设备或两者结合)。
二、 对研究问题的深度分析(基于分类法) RQ1:测试关注点是什么?(目标与靶向) * 测试目标:研究发现,“缺陷/漏洞”检测是研究最多的目标(占23.3%),其次是“安全性”和“性能”。“兼容性”测试虽然对应对Android生态系统碎片化至关重要,但研究相对较少,是需要更多投入的方向。随着应用复杂度的增加,“并发性”测试也应得到更多关注。 * 测试靶向:“GUI/事件”是绝对的研究焦点(占45.6%),这反映了现代软件用户体验的重要性以及Android事件驱动模型的测试挑战。针对“ICC/IAC”的测试论文数量相对较少(12篇),这可能与通信漏洞的复杂性和特定性有关。
RQ2:解决了哪些测试级别? “系统测试”是主导性的测试级别(占近80%),这通常与整个应用的“黑盒”或“灰盒”测试相关联。“单元/回归测试”和“集成测试”的研究则相对有限。这表明研究社区更多关注于评估已发布应用的全局行为,而对帮助开发者在早期开发阶段进行白盒测试的工具和方法投入不足。
RQ3:测试方法是如何构建的?(技术层面) * 测试方法论:“基于模型的测试”是最常见的方法(63%的论文涉及),因为它有助于捕捉应用的整体结构和行为,以指导测试用例生成。“基于搜索的测试”、“随机测试”和“模糊测试”也较为常见。许多研究综合运用了多种方法来提高测试效果。 * 测试类型:“黑盒测试”和“灰盒测试”占主导地位(合计约90%),而“白盒测试”使用最少。这主要是因为市场上分发的Android应用通常以APK形式存在,研究者难以获得源代码。 * 测试环境:使用“真实设备”的论文(68篇)多于仅使用“模拟器”的论文(23篇),另有15篇同时使用了两种环境。真实设备对于测试兼容性、能耗和性能等与环境紧密相关的属性是必要的,但可扩展性差;模拟器则相反。 * 工具支持:综述列出了被广泛使用或借鉴的基础工具,如Robotium(自动UI测试框架,使用最频繁)、Monkey(Google官方随机测试工具)、Emma(代码覆盖率工具)、RERAN(记录与回放工具)、Robolectric(单元测试框架)等。这表明现有工具生态对研究有重要支撑作用。
RQ4:测试方法在多大程度上得到了验证? * 评估指标:“代码行覆盖率”(LOC)是最常用的覆盖率指标。其他还包括块、方法、分支覆盖率,以及发现的漏洞/缺陷数量等。然而,缺乏统一的评估基准和可靠的覆盖率估算工具,使得不同测试方法之间的公平比较面临挑战。 * 数据集规模:与静态分析研究相比,动态测试方法评估时使用的应用数量普遍偏少(中位数为8个,大部分不超过100个),这反映了动态测试在可扩展性上的固有局限。 * 结论:尽管论文都提供了评估部分,但该领域在可复现性方面面临挑战,缺乏公认的基准测试集和“真实基准”(ground truth)是阻碍领域明确进步的一个因素。
三、 趋势分析与开放性问题 * 趋势: * 作者社区:每年都有大量新作者进入该领域,但持续在该领域发表成果的研究者相对较少,这可能意味着该领域研究受机遇驱动较强,或某些挑战使得长期深入探索变得困难。 * 技术演进:“基于模型的测试”趋势与整体论文数量趋势一致,占据主导地位。“系统测试”、“黑盒/灰盒测试”以及针对“GUI/事件”和“缺陷/漏洞”目标的研究是主要潮流。 * 研究产出可用性:大多数测试方法的研究工具并未公开,这限制了后续研究的复用和真正的超越。但也有成功案例,如TEMAA和Sapienz被工业界采纳。 * 开放性问题与未来挑战:综述总结了文献中反复提及的挑战:1) 满足苛刻的前置条件(如登录);2) 对复杂事件(如手势、多用户事件、传感器事件)进行建模;3) 桥接不兼容的指令集(ARM vs. Intel,影响模拟器效率);4) 公平地评估测试方法,亟需可靠的覆盖度估计工具和基准;5) 对可用性缺陷(如响应迟缓)的关注不足。 * 新的研究方向:基于综述发现,作者提出了三个具体的新研究方向:1) 应用更新的验证:利用回归测试和行为等价性技术,快速识别更新中引入的缺陷或安全漏洞。2) 应对生态系统碎片化:在测试中建模框架及其变体,优化测试以覆盖大多数设备和操作系统版本。3) 代码优先级与测试优先级排序:针对体积日益庞大的应用,结合代码优化(识别并优先测试活跃代码)和测试用例优先级排序,以提高测试效率。
综述的价值与意义 本文是首篇对Android应用自动化测试领域进行的系统性文献综述,具有重要的学术价值和实践指导意义: 1. 全面梳理与导航:通过严谨的SLR方法,收集、筛选并分析了截至2016年的103篇核心文献,构建了公开的资料库和清晰的分类法,为研究人员提供了该领域的全景视图和便捷的导航工具。 2. 深度洞察与总结:不仅进行了定量统计,更通过四个研究问题对测试方法的目标、靶向、级别、技术、验证等方面进行了深度定性分析,揭示了主流趋势、方法偏好以及存在的不足。 3. 指明挑战与方向:明确指出了该领域在工具可复现性、评估基准、特定测试挑战(如兼容性、复杂事件)等方面的空白,并基于此提出了具有前瞻性的具体研究建议,为未来研究指明了道路。 4. 促进领域发展:通过总结“什么已经完成”和“什么仍需解决”,本文有助于避免重复研究,鼓励社区集中精力攻克公认的难点,推动Android应用测试研究领域向着更成熟、更实用的方向发展,最终提升整个Android生态系统中的应用质量。