本研究由 Tarek Mahmud、Meiru Che、Anne Ngu 及 Guowei Yang 合作完成,相关作者单位信息见文章末页。研究成果以题为 《Why Android App Testing Falls Short: Empirical Insights from Open-Source Projects and a Practitioner Survey》 的学术论文形式,于 2025年 发表在国际期刊 《Empirical Software Engineering》 上。
本研究致力于调查Android应用测试的现状,是一项聚焦于软件工程领域,特别是移动应用测试的实证研究。研究的学术背景在于,尽管Android操作系统在全球移动市场占据超过70%的份额,其设备、屏幕尺寸和操作系统版本的碎片化给应用质量和可靠性保障带来了持续挑战。虽然自动化测试技术已取得长足进步,但对于开发者如何实际测试Android应用、现有工具和框架的有效利用程度,仍缺乏充分的实证证据。先前工作(如Linares-Vásquez等人于2017年提出的CEL移动应用测试愿景)虽描绘了宏观蓝图,但并未实证调查移动开发者的真实测试实践。因此,本研究旨在填补这一空白,通过结合大规模实证分析与从业者调查,揭示Android应用测试中的关键挑战、局限性与最佳实践,评估自动化测试的采用程度、测试覆盖水平以及测试实践对软件质量的影响。
本研究详细的工作流程主要包含两个相互补充的部分:一项针对开源Android应用的实验性研究,以及一项针对Android开发者和测试人员的问卷调查。整个研究流程系统地设计了多个研究问题(Research Questions, RQs),并围绕这些问题进行数据收集、分析和解释。
第一部分:实验性研究 此部分旨在深入理解开源Android应用开发中的测试实践。研究选取了两个数据源:截至2025年6月1日,从F-Droid仓库收集的全部可用应用(共计4,683个),以及从GitHub筛选的500个高星(starred)开源Android应用,总计 5,183个 应用样本,覆盖46个类别,确保了功能的多样性和开发背景的异质性。研究流程主要分为数据收集、有效性度量和关联分析几个环节。 1. 数据收集与初步识别:首先对每个应用的源代码进行静态分析,通过查找包含“test”或“tests”关键词的目录来识别测试文件。 2. 动态执行与度量计算:对于识别出测试文件的项目,研究人员执行其测试套件,并利用JaCoCo(一个广泛使用的Java代码覆盖率分析工具)收集执行数据。度量指标主要包括:测试数量、测试覆盖率(包括语句覆盖率、分支覆盖率)以及API覆盖率。其中,API覆盖率的计算通过结合JavaParser(用于从源代码中提取API调用)和JaCoCo的执行数据,来确定有多少API使用在测试中被执行。此外,为了评估测试质量,研究还引入了测试异味(Test Smell) 这一指标,使用TsDetect工具来检测测试套件中存在的常见不良实践,如冗余断言、神秘的访客(Mystery Guest)等。 3. 测试框架识别:对于包含测试的项目,手动检查其所使用的测试框架(如JUnit、Espresso、Robolectric)。 4. 关联性分析:为了探究测试有效性指标与用户感知质量的关系,研究人员从Google Play商店收集了F-Droid和GitHub应用中可用应用的应用评分。随后,使用方差分析(ANOVA)进行统计分析,其中应用评分为因变量,测试数量、三种覆盖率(语句、分支、API)以及测试异味比率(测试异味数量与总测试数之比)作为自变量,以量化它们对用户评分的影响。 研究共设计了五个研究问题(RQ1.1至RQ1.5),分别对应测试实践的普遍性、测试数量、覆盖率水平、测试异味的程度以及这些指标与评分的相关性。
第二部分:问卷调查 为了弥补纯代码分析无法揭示动机、约束和决策过程等背景因素的不足,研究团队设计并实施了一项针对Android应用开发者和测试人员的调查。该调查旨在从从业者视角获取对测试实践、挑战和看法的深入见解。 1. 调查设计:调查问卷包含人口统计学信息部分,以及围绕五个核心研究问题(RQ2.1至RQ2.5)设计的问题,这些问题涉及测试的关注重点、常用工具、覆盖率处理方式、跨设备/跨OS版本测试策略以及如何保障测试可维护性和效率。 2. 分发与数据收集:调查通过Reddit、Facebook、Twitter等专业社区及联系F-Droid上的开发团队进行分发,最终收集到 47份 有效回复。受访者普遍具有丰富经验(79%拥有两年以上经验)和较高教育水平。 3. 数据分析:对封闭式问题采用定量频率分析,对开放式回答则采用主题分析方法。值得注意的是,分析过程采用了混合方法,即两位作者独立提取初始主题,同时利用GPT-4o大型语言模型辅助识别数据中的重复短语和模式,以提升效率并发现早期编码模式,最终由作者通过迭代讨论手动确定最终编码,确保了分析的严谨性和洞察深度。
本研究取得了多方面的主要结果,实验研究与问卷调查的发现既相互印证,也揭示了一些有趣的差异。
实验研究的主要结果: * 测试实践普遍性有限(RQ1.1):在分析的5,183个应用中,只有2,292个包含测试目录,其中仅有 1,579个(占总数的 30.46% )拥有具有实际覆盖率的“有意义”的测试套件。这表明开源Android开发中自动化测试的采用率较低。 * 测试数量与工具使用集中(RQ1.2):55.78%的应用没有任何测试。在拥有测试的应用中,平均每个应用有26.04个测试。测试类型以单元测试(1489个应用)和UI测试(416个应用)为主,集成测试和系统测试较少。测试框架的使用高度集中,JUnit(462个应用)和Espresso(384个应用)占主导地位,其次是Mockito和MockK。 * 覆盖率水平低下(RQ1.3):即使在有测试的应用中,覆盖率也普遍很低。语句覆盖率平均仅为 9.42%,分支覆盖率平均为 8.26%。最值得关注的是API覆盖率极低,平均仅为 2.14%,这表明应用与Android操作系统交互的关键部分在测试中被严重忽视。 * 测试异味普遍存在(RQ1.4):在1,579个有测试的应用中,78.4% 至少存在一种测试异味,平均每个应用有12.71个测试异味。这表明许多测试套件存在可维护性和质量问题。 * 测试指标与用户评分的关联(RQ1.5):方差分析显示,API覆盖率与用户应用评分呈强正相关(r=0.49, p=0.003),语句覆盖率呈中度正相关(r=0.37, p=0.017)。而测试异味比率与用户评分呈中度至强负相关(r=-0.44, p=0.005)。单纯测试数量与评分无显著相关性。这表明,高质量、高覆盖率的测试(尤其是API层面的覆盖)比单纯的测试数量更能正向影响用户感知的应用质量。
问卷调查的主要结果: * 重视自动化但实践脱节(RQ2.1):80%的受访者认为自动化测试“非常重要”或“有些重要”,测试重点集中在功能性和UI/UX上。然而,这与实验研究中观察到的低采用率形成鲜明对比,表明意图与实践之间存在差距。 * 工具认知广度与实践窄度(RQ2.2):受访者提到的工具范围更广,包括JUnit、Espresso、Appium、Firebase Test Lab、Jest等。但实验研究仅在代码中检测到少数几种主流框架,表明许多工具虽然被从业者知晓,但并未在实际开源项目中被广泛集成使用。 * 对覆盖率态度矛盾且轻视API测试(RQ2.3):受访者对代码覆盖率的重要性看法不一,多数人设定的覆盖率目标较为保守(集中在0-50%)。更重要的是,大部分受访者认为API使用覆盖率“不重要”或持中立态度,这直接解释了实验研究中观察到的极低API覆盖率现象。 * 广泛进行跨设备/版本测试但策略各异(RQ2.4):绝大多数受访者(40/44)会在不同设备上测试应用,多数(29/44)也会在不同OS版本上测试。策略包括使用物理设备、模拟器、云测试服务(如Firebase Test Lab)等,但常受资源限制。 * 关注测试可维护性但面临挑战(RQ2.5):从业者通过持续重构、文档化、模块化设计、CI/CD集成等方式保障测试可维护性和效率。但也报告了遗留低质量测试、预算限制以及自动化UI测试不可靠(如测试不稳定)等挑战。
本研究的核心结论是,当前Android应用测试实践存在显著不足。主要体现在自动化测试采用有限、测试覆盖率(尤其是API覆盖率)低下、测试异味普遍,以及测试工具多样性在实际开发中应用不足。研究揭示了一个关键矛盾:开发者虽在认知上重视自动化测试,但由于时间、资源、工具易用性、团队文化等现实约束,往往无法有效落实。实验证据表明,提升API覆盖率和语句覆盖率、减少测试异味,比单纯增加测试数量更能提升应用的用户满意度。
本研究具有重要的学术价值与应用价值。在科学价值上,它通过结合大规模代码分析与从业者调查的混合方法,首次对Android应用测试实践进行了全面、深入的实证描绘,填补了该领域缺乏大规模实证证据的空白。研究提出的测试有效性指标(如API覆盖率、测试异味比率)及其与用户评分关联的发现,为评估测试实践的质量和影响提供了新的量化视角。在应用价值上,研究结果为Android开发者和测试团队提供了明确的改进方向:应优先确保测试的深度和质量,特别是加强对Android API的测试覆盖;需要采纳更广泛的测试工具和策略,并重视测试代码的可维护性。对于研究者,本研究指出了未来工作的重点,包括开发更用户友好和高效的测试框架(尤其是针对兼容性测试和自动化测试生成的工具)、加强研究成果向工业实践的转化、以及扩展对性能、安全等非功能性测试的研究。
本研究的亮点在于其方法的全面性与三角验证。它并非单一的代码分析或调查,而是将两者有机结合,使得定量发现(如低覆盖率)能够通过定性见解(如开发者对API覆盖率不重视的态度)得到解释和深化,反之亦然,从而增强了研究结论的可靠性和深度。其次,研究引入了API覆盖率和测试异味作为关键评估维度,超越了传统的代码行覆盖率,提供了更丰富的测试质量画像。此外,分析中创新性地使用了大型语言模型辅助主题分析,提升了处理定性数据的效率和洞察力。最后,研究基于超过5,000个应用的大规模数据集,确保了发现的代表性和统计效力,而不仅仅是小样本的案例研究。
其他有价值的内容包括:研究详细讨论了其发现的局限性(如应用样本来源、调查样本量等可能对效度产生的威胁),并系统回顾了相关研究工作,将自身定位在现有文献的演进脉络中。论文还明确阐述了其对学术界和工业界的启示,提出了具体的改进建议。本研究是作者团队在ISSRE 2024上发表初步工作的扩展版本,增加了测试异味分析、扩大了数据集、深化了相关性分析并改进了调查分析方法,从而做出了更实质性的贡献。