​优酷质量保障系列(四)—客户端测试有效性分析

简介: 如何来衡量测试有效性,评估体系的建设中有哪些坑和重点?本文分享优酷客户端测试有效性评估能力建设经验,如何辅助测试人员调整方向和策略。


背景

移动互联网浪潮中,To C的移动应用迭代速度非常之快,应用的玩法也是层出不穷,那么相应的对于应用质量的保障也提出了更高的要求:响应迅速、目标明确、手段有效等。质量保障团队为了更好地达成上述要求,需要制定一系列的流程、系统或者工具来辅助测试的展开,但无论测试侧要建立的是什么,都有一个明确的原则贯穿始终,即有效性(由于流程、系统或工具等都用于测试,也称为测试有效性)。

那么如何来衡量测试有效性变得尤为重要,其评估体系的建设则是重中之重。本着从实践中来到实践中去的原则,建设了优酷客户端测试有效性评估能力去辅助测试人员调整测试方向,改变测试策略等。

方案选型

不同团队会定义自己的规则去衡量测试有效性,这些规则几乎包罗万象,例如:Bug数量和趋势、测试用例的评审、测试策略的评审亦或代码覆盖率的数据等等。

评价测试的有效性是无法脱离开发的实现及项目的上下文的,测试从来就不是独立存在的,测试和开发密不可分。

结合优酷质量保障体系的现状,我们优先选择最直接的,也最能从数据化的角度评估测试有效性的规则入手:即代码测试覆盖率。

代码测试覆盖率工具(Android端)

  • JaCoCo - 通过代码注入的方式来实现获取覆盖率的功能
  • 优酷内部覆盖率采集工具 - 优酷自研的类覆盖统计工具

【工具对比】

工具名称 代码侵入 性能损耗 可否用于灰度发布 统计范围
JaCoCo 需要侵入并针对每个模块进行打包 性能损耗较大,可以会引入非功能性bug 不可以用于灰度发布 模块、类、方法和行级别
优酷内部覆盖率采集工具 无代码侵入且无须进行单模块重新打包 几乎无性能损耗,不会引入额外bug 可用于灰度发布,用户无感知 模块和类级别

通过两个版本的线下测试覆盖率数据的收集,优酷客户端测试在类这个纬度上的覆盖率数据当前是不尽如人意的,当前只有40%左右。

结合工具对比结论和客户端测试现状,优酷内部覆盖率采集工具作为当前的首选方案进行实施。

从宏观到微观地进行测试有效性分析。

整体架构及流程

image.png

参考上图,具体获取类是否被加载的流程概述如下:

  • 通过Native层的ClassTable获取所有ClassLoader的ClassTable对象
  • 通过ClassTable对象获取类名列表
  • 通过libart.so中ClassTable的Lookup方法判断类是被加载

整体方案的设计参考下图:

image.png

示例结果

优酷客户端测试平台

  • 综述结果

image.png

  • TOP模块类覆盖率对比结果

image.png

  • 模块细节对比数据

image.png

技术实现

1. 数据下载与分析部分使用Python3开发完成

2. 30万zip * (10万-12万)个类,分析统计时间在1小时左右完成。

分析机器为8*CPU,16GRAM Ubuntu20.04LTS

3. 主要包四个部分

  • 数据反混淆逻辑
  • 类覆盖统计算法相关
  • 元数据下载,基于pyspark对模块与类调用次数进行分析统计

> 下载逻辑基于multiprocessing与asyncio实现

> 进程间(下载&分析)通信基于队列实现

  • 基于测试平台的任务创建与定时机制进行任务触发

结果收益

  • 建立了Android端主客模块/类纬度的测试有效性评估手段
  • 由于使用了线上代码热度分析机制,基于其性能无损性,可以直接用于日常自动化测试及灰度测试
  • 有效地收集了优酷主客多个版本的测试有效性数据
  • 有效地针对业务模块进行测试覆盖优化

后续计划

  • 推动测试有效性分析能力落地优酷主客TOP模块,提升单模块覆盖率不低于10%。
  • 全链路自动化,基于优酷客户端测试平台进行的自动化测试专项任务,都可以进行测试覆盖率统计。
  • 结合优酷主客技术图谱进行覆盖率可视化输出,更加直观地展示测试链路覆盖情况。
  • And more...
相关文章
|
5月前
|
机器学习/深度学习 人工智能 测试技术
深入分析自动化测试中的挑战与机遇
【5月更文挑战第27天】 随着软件开发周期的不断缩短和发布频率的增加,自动化测试成为确保软件产品质量的关键手段。本文将探讨在实施自动化测试过程中面临的主要挑战,包括维护成本、测试用例设计、与持续集成的融合等,并讨论如何通过最新的技术趋势如人工智能(AI)和机器学习(ML)来克服这些挑战,以及它们为自动化测试带来的新机遇。
|
13天前
|
监控 测试技术 持续交付
软件测试中的性能瓶颈分析与优化策略
性能瓶颈,如同潜伏于软件深处的隐形障碍,悄然阻碍着系统的流畅运行。本文旨在揭示这些瓶颈的形成机理,剖析其背后的复杂成因,并汇聚一系列针对性的优化策略,为软件开发者提供一套系统性的解决方案。
|
15天前
|
测试技术 持续交付 UED
软件测试的艺术与科学:平衡创新与质量的探索在软件开发的波澜壮阔中,软件测试如同灯塔,指引着产品质量的方向。本文旨在深入探讨软件测试的核心价值,通过分析其在现代软件工程中的应用,揭示其背后的艺术性与科学性,并探讨如何在追求技术创新的同时确保产品的高质量标准。
软件测试不仅仅是技术活动,它融合了创造力和方法论,是软件开发过程中不可或缺的一环。本文首先概述了软件测试的重要性及其在项目生命周期中的角色,随后详细讨论了测试用例设计的创新方法、自动化测试的策略与挑战,以及如何通过持续集成/持续部署(CI/CD)流程优化产品质量。最后,文章强调了团队间沟通在确保测试有效性中的关键作用,并通过案例分析展示了这些原则在实践中的应用。
41 1
|
19天前
|
监控 算法 测试技术
软件测试中的性能瓶颈分析与优化策略
本文旨在深入探讨软件测试过程中性能瓶颈的识别与优化方法。通过对性能瓶颈的概念、分类及其成因进行分析,结合实际案例,提出一套系统的性能瓶颈诊断流程和针对性的优化策略。文章首先概述了性能瓶颈的基本特征,随后详细介绍了内存泄漏、资源竞争、算法效率低下等常见瓶颈类型,并阐述了如何通过代码审查、性能监测工具以及负载测试等手段有效定位问题。最后,结合最佳实践,讨论了代码级优化、系统配置调整、架构改进等多方面的解决措施,旨在为软件开发和测试人员提供实用的性能优化指导。
|
2月前
|
前端开发 测试技术 UED
【测试效率对比】深入分析:为何UI自动化测试的投资回报率通常低于接口自动化测试?
这篇文章深入分析了UI自动化测试与接口自动化测试的投资回报率(ROI)问题,指出UI自动化测试在某些情况下的ROI并不低,反驳了没有实施过UI自动化就轻易下结论的观点,并强调了实践的重要性和自动化测试在项目迭代中的作用。
60 1
|
27天前
|
SQL 搜索推荐 测试技术
ChatGPT与测试分析
本产品需求文档(PRD)针对论坛网站的搜索功能优化,旨在提升搜索结果的准确性和速度,增强用户体验。文档涵盖项目背景、目标、功能需求(如搜索结果准确性、搜索速度优化、过滤和排序等)、非功能需求(如兼容性、性能、安全性等)、用户界面设计和技术架构等内容,并制定了详细的测试和上线计划,确保项目顺利实施。
16 0
|
4月前
|
存储 缓存 NoSQL
Redis性能测试实操记录与分析
Redis性能测试实操记录与分析
52 3
|
4月前
|
SQL 监控 中间件
【应急响应】拒绝服务&钓鱼指南&DDOS压力测试&邮件反制分析&应用日志
【应急响应】拒绝服务&钓鱼指南&DDOS压力测试&邮件反制分析&应用日志
|
4月前
|
安全 测试技术
软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)
软件测试项目式学习二(认识软件测试及软件测试分类与案例分析)
72 1
|
5月前
|
JSON 数据管理 测试技术
自动化测试工具Selenium Grid的深度应用分析深入理解操作系统的内存管理
【5月更文挑战第28天】随着互联网技术的飞速发展,软件测试工作日益复杂化,传统的手工测试已无法满足快速迭代的需求。自动化测试工具Selenium Grid因其分布式执行特性而受到广泛关注。本文旨在深入剖析Selenium Grid的工作原理、配置方法及其在复杂测试场景中的应用优势,为测试工程师提供高效测试解决方案的参考。