质量保障之精准测试!

一、背景与概念

随着软件测试行业的长足发展,测试理念、技术都在发生着日新月异的变化。因此一套完整的自动化测试用例对于每个软件公司都是不可或缺的,然而虽然有如此规模宏大的自动化案例集资源投入,同时也有大量人力的投入,但是当版本更新时,无法精确知晓哪些功能受到影响,进而不能精准选取测试用例。

而金融科技更是发展迅猛,服务于银行业的软件越来越多,需求迭代越来越快,系统架构越来越复杂,测试周期也越来越短;而银行业务系统有着业务链条长、系统结构复杂、无法完全解耦等特性,因此基于经验是无法精准选取测试用例的,不足以保障测试范围准确。

为了解决这些难点,精准测试在2012年被提出,所谓精准测试是一种可追溯的软件测试技术,就是借助一定的技术手段,通过算法辅助对传统的软件测试过程进行可视化、分析和优化的流程,其核心思想就是对测试过程的活动进行监测,将采集到的监控数据进行分析,得到精准的量化数据进行质量评价。

程序的微小变动也会带来新的测试工作,通过经验进行质量评估很容易引入问题,而全量的回归测试也难以负荷。下图是目前的测试工作现状。

图片

因此使用精准的数据来判断,让测试人员精准地知道程序变更、测试范围、测试覆盖完整性等等,最终提供更加有效地测试分析结果。精准测试的目标如下图所示。

图片

目标一是通过识别变更代码获取变更程序。精准测试可以更精确地圈定需要回归测试的用例范围。

目标二是精准测试基于变更程序或调用链维度提供测试度量结果,用以判断本次测试的变更程序代码是否覆盖完全,进而帮助测试更精准地评估测试风险,并形成测试准出标准。

目标三是精准定位错误原因,在测试用例执行时,精准测试针对失败案例,提供可视化调用关系,帮助测试快速定位问题,提升开发测试的协同效能。

综上,精准测试在测试范围分析、测试度量和定位错误等方面提供分析手段,使得测试工作事半功倍。

二、业界实践

(一)爱奇艺精准测试体系

爱奇艺精准测试支持客户端和服务端多端使用,支持手工和自动化场景,内部多个平台联动,打通整体使用流程,可以准确获取单个用例的代码覆盖。服务端能做到系统级别串联,客户端则能实现多组件整合,已经实现用例和代码分支或代码块级别的关联。

下图为爱奇艺精准测试体系整体架构图:精准测试服务是核心,负责建立用例和代码映射关系知识库并根据git提交记录计算测试范围和影响范围。不同的终端用到的代码覆盖率工具也不相同,在与外围平台的集成上,服务端可以和环境平台相结合,通过环境平台实现代码覆盖率工具的安装;客户端则可以和构建平台做集成。

图片

(二)字节跳动精准测试实践

图片

上图为字节跳动研发团队常见的研发流程。需求研发分为了五个阶段,精准测试主要在自测和功能验收测试和回归测试节点。在三个节点中,业务通过请求SmartEye服务,可以分别获取到自测推荐用例、功能测试推荐用例以及回归测试推荐用例。其中,自测用例和功能测试推荐用例用于验证代码变更是否引起存量程序功能异常,将功能缺陷发现前置,为研发团队争取更多的修复时间。回归测试用例推荐用来精简回归测试人力,帮助业务节省回归测试人效。

图片

上图为精准测试整体方案,Code Graph平台为SmartEye提供数据支撑,Code Graph平台的双端静态代码调用链分析能力与整体调用链路拓扑数据,完成基于MR的变动DIFF分析以及上下游调用链分析,并针对变动DIFF部分,完成代码变动率的统计。

三、行内现状及发展

总体而言行内(中国工商银行)的精准测试目前缺少用例录制以及用例推荐功能。

1、覆盖率采集类型

我行在覆盖率采集方面有较深入的探索,目前支持多语言的覆盖率采集,包括JAVA、存储过程、CTP与MYBATIS。

2、使用覆盖率工具代码染色系统辅助测试

从GIT提交的JAVA变更获取到变更方法的维度,并支持采集变更存过,变更Mybatis方法,变更CTP文件。目前的覆盖率工具通过代码染色直观地展现了配置应用多种语言的增量覆盖率情况,为降低系统上线风险提供支持。

图片

配置接入代码染色的应用,可直观获取到对应月度版本的变更程序方法级别覆盖率,将此作为精准测试的实践数据,在后续可展开更深度的分析,并不断扩大推广规模以及深度,增强精准测试的应用效果。

3、支持静态调用链解析,全链路精准上,工行探索异构调用链之间的关系,给出的测试分析更为全面。

4、静态调用链解析包括 CTP、存过、JAVA三大类

5、同行内平台打通部署

在行内环境集成之上,现已嵌入PAAS平台,改造后的应用只需要配置三个PAAS参数即可下载工具包,使用服务。若为非云环境的was,我们会从cmdb上取到配置信息做夜间的自动部署。 

图片

该示意图展现了数据流向,最底层的Docker镜像解析服务通过解析.dockfile文件获取字节码内容;向上是数据采集,客户端采集到的覆盖率结果通过覆盖率集群输送到消息中间件支上,同时静态调用链解析服务,会进行一个静态文件的解析;再向上是数据存储层,将覆盖率数据存在redis上,把海量覆盖数据,调用链数据存在hbase里面,环境相关的方法信息存在oracle里面;然后是服务层,根据拥有的数据提供实时变更方法覆盖率采集展示,投产日维度覆盖率报表,一级入度调用链覆盖报表三大功能。

四、进一步建设

1、目前的变更影响分析中,主要是基于静态调用链分析,但静态代码存在局限性,如反射,未来还需要进一步结合动态代码分析的结果进行修正和补充调用链。

2、精准测试智能化,主要体现在测试用例推荐方面,准确地推荐案例,形成“精准分析->自动化测试->覆盖度量”地测试闭环。目前中国工商银行内也在推进这方面发展,上研已提出“智能规范推送工具”基于现有的需求数据、案例内容、测试规范库的信息进行智能化提取,在无需额外投入的情况下,实现智能化案例推荐,用以提高测试效能。

3、在服务层的三项服务基础上进行拓展,基于数据基础层提供的数据支持,提供全链路精准打通不通异构程序间的关系,支持微服务之间的调度,全方位度量包含调用链的测试分析。

 

总结:

感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/621944.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解Python的类,实例和type函数

问题起源: class t():pass s1 t() s2 type("Student2",(),{}) isinstance(s1, type), isinstance(s2, type)为什么第一个是false,第二个是true呢 根因定位: 在Python中,一切皆对象,类是对象&#xff0c…

AI+新能源充电桩数据集

需要的同学私信联系,推荐关注上面图片右下角的订阅号平台 自取下载。 随着我国新能源汽车市场的蓬勃发展,充电桩的需求量日益增加,充电桩的智能化程度不仅影响充电站运营商的经营效益,也大大影响着用户的充电体验。AI技术可以涵盖…

STK12 RPO模块学习 (1)

一、背景介绍 在STK12中,在Astrogator的模块上开发了新的模块(Rendezvous and proximity operations)。轨道交会接近通常来说是一个很复杂的过程。RPO实现需要对轨道动力学有一个清晰的理解,并且对于Astrogator模块具备很强的背景和经验&…

AI翻唱+视频剪辑全流程实战

目录 一、AI翻唱之模型训练 (1)模型部署 (2)数据集制作——搜集素材 (3)数据集制作——提升音频质量 方法一:使用RVC提供的音频处理功能。 方法二:可以使用音频剪辑工具Ad…

【软设】常见易错题汇总

目录 计算机系统基础 程序语言基础 数据结构 算法设计与分析 计算机网络与信息安全 软件工程基础 开发方法(结构化与面向对象) 数据库 操作系统 知识产权相关的法律法规 🤯🤯🤯🤯🤯&#x1f9…

基于Springboot的实习生管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的实习生管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

APP反抓包 - 客户端证书验证进阶(代码混淆)

1.关于混淆 在安卓开发中,对于第三方的包是可以进行混淆的,例如:OKHttp3.Http.Cert.check 被混淆后可以是a.f.c.b 形式。在安卓开发中,系统包是无法混淆的,例如:java.security.KeyStore不会被混淆。由于这种的情况的存在,再次审示我们之前的通用脚本,就会发现他是不通用…

基于GD32的简易数字示波器(5)- 软件_控制LED

这期记录的是项目实战,做一个简易的数字示波器。 教程来源于嘉立创,帖子主要做学习记录,方便以后查看。 本期主要介绍GPIO口的输入输出模式,使用其中的输出模式驱动LED。详细教程可观看下方链接。 2.2 LED控制实验 语雀 1、LE…

synchronized 使用及实现原理

synchronized 关键字 如何使用 synchronized 关键字的使用方式主要有下面 3 种: 修饰实例方法 修饰静态方法 修饰代码块 1、修饰实例方法 (锁当前对象实例) 给当前对象实例加锁,进入同步代码前要获得 当前对象实例的锁 。 …

ViewModel 完全指南:实践与背后原理全解

一、引言 在现代Android应用开发中,处理UI数据的有效管理和状态保持是开发者面临的重要挑战之一。Google推出的Jetpack组件库中的ViewModel已成为解决这些问题的关键工具。ViewModel旨在以生命周期意识的方式存储和管理界面相关的数据,从而使数据在配置…

暴力法解决最近对问题和凸包问题-实现可视化

目录 最近对问题 凸包问题 最近对问题 顾名思义就是采用蛮力法求出所有点之间的距离,然后进行比较找出第一个最近对,一个一个进行比较。 大概思路就是如图(每个圈代表一个数对) 第一个和其他四个比较 第二个和其他三个比较 …

C++类和对象下——实现日期类

前言 在学习了类和对象的六大成员函数后,为了巩固我们学习的知识可以手写一个日期类来帮助我们理解类和对象,加深对于其的了解。 默认函数 构造函数 既然是写类和对象,我们首先就要定义一个类,然后根据实际需要来加入类的数据与函…

计算机Java项目|Springboot房产销售系统

作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简…

Windows下安装Node.js、npm和electronic,并运行一个Hello, World!脚本程序

20240510 By wdhuag 目录 简介: 参考: 安装Node.js 安装npm 配置npm: 修改包存放目录和缓存目录 切换镜像源 使用 nrm 切换镜像源 安装Electron 运行一个Hello, World!脚本程序 安装Yarn JavaScript 指南 简介: Nod…

flash attention的CUDA实现探讨-V3

之前关于flash attention的实现参考添加链接描述,添加链接描述,添加链接描述 lash attention的数学变换:给定三个矩阵Q,K,V,形状都是[N,d],计算S=QK.T,然后针对dim=1做softmax,然后和V继续做矩阵乘法得到形状为[N,d]的输出矩阵O,即O=softmax(QK.T,dim=1)V。 下面本人的…

物联网设计竞赛_2_Jetson Nano中文输入法配置安装vscode

1、装ibus和ibus依赖框架 sudo apt-get install ibus ibus-clutter ibus-gtk ibus-gtk3 ibus-qt4 2、启动ibus im-config -s ibus 3、安装拼音引擎 sudo apt-get install ibus-pinyin 4、重启linux系统 shutdown -r now 5、进入ibus设置添加中文 ibus-setup 插入中文p…

四川汇昌联信:拼多多网点怎么开?大概需要多少钱?

想要开一家拼多多网点,你肯定很关心需要准备多少资金。下面,我们就来详细解答这个问题,并从多个角度分析开设网点的要点。 一、 开设拼多多网点,首要任务是确定启动资金。根据不同的经营模式和地区差异,成本会有所不同…

基于SpringBoot + Vue的兼职网站管理系统设计与实现+毕业论文+答辩PPT

系统介绍 本系统包含管理员、用户、企业三个角色。 管理员角色:前台首页、个人中心、用户管理、企业管理、兼职信息管理、职位申请管理、留言板管理、系统管理。 用户角色:前台首页、个人中心、职位申请管理。 企业角色:前台首页、个人中心、…

JUC下的ThreadLocalRandom详解

ThreadLocalRandom 是Java并发包(java.util.concurrent)中提供的一个随机数生成器类,它是从Java 7开始引入的。相较于传统的Math.random()或Random类,ThreadLocalRandom更适用于多线程环境,因为它为每个线程维护了一个…

【spring】application.yml导入额外配置文件

有时候application.yml 已经配置很多配置已经很大很乱了想把他们拆出去放在一个独立的XX.yml文件管理。这时候就用到了 spring.config.import 属性。 spring.config.import spring.config.import 是 Spring Boot 2.4 版本引入的一个配置属性,用于导入额外的配置数…