一种可度量的测试体系-精准测试

news2024/11/20 10:35:00

行业现状

软件行业长期存在一个痛点,即测试效果无法度量。通常依赖于测试人员的能力和经验,测试结果往往不可控,极端情况下同一个业务功能,即使是同一个人员在不同的时间段,测试场景和过程也可能不一致,从而无法有效地保障软件产品质量。

质量总监总是抱怨:每一次版本发布时,时间并不是很充分,我们不确定这些需求代码变动到底影响范围有多大,无法精准地评估出测试范围,要么执行完整的全回归测试,花费大量的时间,严重影响交付效率;要么靠个人经验和主观能力,有选择的验证部分功能,很容易忽略出问题的业务场景,导致漏测现象和bug泄露。

测试人员总是抱怨:这个任务明明只需要改A需求,为啥会影响到B需求?咨询对应的开发人员,反馈为所有功能都需要重测。

多年来,许多大型企业都尝试过各种不同的方法,比如提升测试人员技能、标准化流程、加大需求评审的投资等等,但这些措施只能暂时缓解问题,最终软件产质量还是不尽人意。

有没有一种解决方案或者工具可以量化、数字化地解决这个问题呢?

可度量的测试体系-精准测试

先来回答一下什么叫精准测试,它涉及软件测试、数据分析、机器学习等多个交叉领域。其目的是通过收集和分析测试数据,预测软件缺陷的位置和严重程度,从而提高测试效率和准确性。

精准测试主要包括以下几个方面:

1.测试数据收集与管理

收集覆盖面广、质量高的测试数据是实现精准测试的基础。测试数据包括测试用例、代码变动、业务工单、API接口等所有过程数据,这需要采用自动化测试工具、人工测试等手段,在不同的测试阶段获取足够的有效数据。同时,建立测试数据管理平台,对测试数据进行分类、存储、分析和共享,以便在测试过程中为测试人员提供支持。

2.测试用例优化

基于机器学习和数据挖掘技术,分析历史测试数据,挖掘出潜在的测试用例覆盖不足和冗余。通过对测试用例进行优化,可以提高测试覆盖率和降低测试成本。

3.缺陷预测

通过对测试数据的分析,建立软件缺陷预测模型。该模型可以根据测试数据预测软件中可能存在的缺陷位置和严重程度,从而帮助测试人员优先处理高风险的缺陷,提高测试效率。

4.测试人员辅助

通过大数据和机器学习技术,为测试人员提供辅助决策支持。例如,在测试过程中,根据测试数据为测试人员推荐合适的测试策略、测试用例和缺陷处理方法等。

5.可视化分析与展示

将测试数据进行可视化处理,使测试人员能够更直观、快速地了解软件测试状况。可视化分析可以帮助测试人员发现测试过程中的问题和改进方向,提高测试效果。

精准测试的目标?

将需求、代码、用例建立映射关系,通过数字化、可量化的数据判断,实现代码覆盖率的可衡量性,从而提高测试效率,提高版本质量。

精准测试从2012年开始提出和发展,至今已经过了10年多的历程,越来越多的企业发现它的价值点,但是落地却很困难,行业内的质疑声也一直存在,并没有形成一个通用、完整的解决方案,无法适配不同公司的产品业务。

总结一下,难点主要有如下方面:

如何解决这些难点?

打造精准测试框架是解决这些难点的最重要和有用的方案。为了实现这一目标,我们可以围绕三个核心特征来定义企业级平台:平台底座、价值变现和用户体验。

平台底座是技术架构的基础构建,它包括四个主要部分:数据采集、代码插桩、正向追溯和数据存储。

数据采集:通过过多种消息中间件,利用流量隔离的技术并行采集,自动化采集数据并入库,提升执行效率,解决数据采集困难的问题。

- 使用调用链做流量隔离,实现并行采集,这也是精准测试落地到人工测试的基础条件,其最大的优势为:

  • 有效隔离不同业务、不同IP、不同人员的流量,减少流量之间的干扰,实现个人测试流量的单独采集。

  • 可以有效优化系统性能,减少资源浪费,提高采集的效率。

- 使用类似kafka做消息管道,利用其高可靠,高性能的优势,支撑了每秒百万级的消息处理。

代码插桩:使用JAVA Instrumentation,无侵入的对业务代码插桩,在容器化基础上,进一步标准化启动脚本,只需修改环境变量即可控制是否插桩使用调用链数据或者Agent插件注入来形成插桩方式。

- 无侵入性:此技术不会改变业务代码,不会对应用程序的功能产生负面影响。

- 灵活性:通过容器化、环境变量控制动态插桩的方式,可以在不修改代码的情况下,根据环境轻松切换不同的插桩策略。

- 标准化和可扩展性:使用容器化技术和标准化启动脚本,可以使插桩过程可复制,方便在多个项目或环境中应用。

正向追溯、反向追溯:通过数据采集和存储建立的映射关系以及覆盖率报告,可以更好地理解业务需求与代码实现之间的关系,评估测试的效果,并扩展建立需求、用例、代码片段(块/行)和版本基线的基础映射关系,通过正向追溯和反向追溯的方式增强项目管理、变更管理和持续改进的能力。

数据存储:精准测试过程中会产生大量数据,链路结构的特性使得数据存储和管理变得复杂。为了应对这种情况,建议使用非关系型数据库进行数据存储。例如,可以使用类似ElasticSearch、Neo4j、ClickHouse等数据库来支持精准测试数据。这些数据库能够处理百亿级别的数据量,并实时维护覆盖率数据的追溯关系。通过使用这些数据库,我们可以提高数据存储和查询的性能,更好地管理精准测试数据。

- 高性能:ElasticSearch具有强大的全文搜索功能和数据分析能力,而Neo4j则擅长处理图结构数据,ClickHouse具备高压缩比,低存储成本,都是为处理大规模数2据和复杂查询而设计的。

- 可扩展性:具有水平扩展的能力,可以随着数据量的增加自动进行分片和负载均衡,确保系统的可伸缩性。

- 实时性:可以实时更新和查询数据,对于需要实时反馈的场景非常适用。

- 开放性:开源组件,可以自由使用和定制,同时也提供了丰富的API和工具,方便进行二次开发和维护。

价值变现:精准测试平台的价值主要表现在针对企业不同实际业务,通过多元化业务场景功能来实现。例如覆盖率视图等基本价值能力在此不再赘述,本段重点介绍代码染色和用例智能推荐。

代码染色:代码染色是一种通过分析代码逻辑和结构,为代码片段赋予颜色标记的技术。精准测试平台利用代码染色技术,通过Bug泄露情况,代码变动频率等多种维度的数据聚合,将代码中的重要程度直观地展示出来,帮助开发人员快速发现和定位问题。同时,代码染色还可以提示开发人员某些代码片段可能存在的潜在风险,从而提前预防和解决潜在问题。

- 故障率维度:根据数据积累,每个故障泄露对应的代码文件,可以定义文件引起的故障率,一般来讲,此类高危定义的权重最高。

- 外部依赖维度:核心程序被调用情况,可以在一定程度上定义代码的重要程度,通用的就是扇入扇出。

- 修改频率:每个文件的修改频率,在一定范围内会影响Bug的泄露,一般修改频率越高,引起问题的几率会增大。

- 自身代码复杂程度:代码的易维护程度,越难维护出问题几率越大,比如圈复杂度,重复代码度。

用例智能推荐和变更范围分析:常见的技术是使用建模语言(UML)和工具来创建业务模型、用例模型和代码模型,通过类图和业务模型之间的关联来建立业务和用例与代码之间的映射。

- 根据需求、用例和代码变动,从追溯映射数据库中智能匹配现有场景用例,用例最小集+有效场景覆盖,并反馈给开发和测试人员,让测试更清晰和准确,有效提升测试效率。

- 依据代码变动片段信息,分析出关联影响,提供变更的函数、接口、功能、菜单以及对应的业务列表,精准地评估影响范围,同用例智能推荐融合使用。

用户体验:用户体验是精准测试落地的关键点,我们可以从易用性和交互性着手,尽可能的降低测试/开发的额外工作量,降低额外的资源和环境,开箱即用,从而帮助用户提高工作效率、增强用户满意度、降低错误率,我们可以在下面两个方面考虑:

系统快照:将用户的测试操作,通过插桩和流量监控,形成step by step的测试用例。

- 一键生成文本测试用例。通过浏览器插件事件监听API,流量监听API,以及本地Gotest流量监听工具,自动记录人工测试的操作过程。

- 采集代码覆盖率信息。将文本用例,手工测试,代码覆盖率三者整合,可以很大程度上提高测试效率,丰富用例代码关系库。

插件能力:提供浏览器插件、任务单一键录制、接口插件等能力,用户无需额外投入学习成本,解决易用性低的痛点。

最终形成DevOps的全场景价值平台,解决价值链单一问题,实现从数据版本匹配覆盖率到整合需求任务单管理、嵌入DevOps流程,形成质量门禁和多维度度量统计视图的全方位改进,实现全链路效率提升。通过精准测试完整体系,可以更高效地管理和监控软件开发过程,提高软件质量,降低开发成本,同时增强团队协作和沟通。

持续思考

采集侧:考虑无调用链应用的接入,适配更多的业务产品情况,进一步提升精准测试的覆盖范围

易用性:易用性能力的进一步提升,在任务单处理环节,用户可以一键式的采集流量信息;根据流量信息自动生成测试用例和测试快照,进一步提升测试效率

AI分析:用例推荐更加AI化,同GPT融合,能够分析出有效用例

缺陷分析能力:基于业务场景、任务单、测试用例数据,能够分析出漏测点,提示并补充测试

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十大最常用电子元器件基础知识

对于电子行业的工程师来说,电子元件,就像人们入口的大米,每天都需要接触和使用。但事实上,许多工程师可能都不完全理解里面的门道。以下是工程师常用的十种电子元件以及相关的基本概念和知识。让我们一起学习了解一下。 一&#…

护眼灯亮度多少合适?亮度适合学生的护眼台灯推荐

护眼灯亮度满足国AA级标准就好了。可以肯定的是,护眼灯一般可以达到护眼的效果。 看书和写字时,光线应适度,不宜过强或过暗,护眼灯光线较柔和,通常并不刺眼,眼球容易适应,可以防止光线过强或过…

【HarmonyOS】低代码平台组件拖拽使用技巧之页签容器

【关键字】 HarmonyOS、低代码平台、Tabs、TabContent、页签导航 1、写在前面 前面几篇分别介绍了低代码平台中的堆叠容器、滚动容器、网格布局等三种容器的使用,实际开发中我们经常会有这样的需求,页面底部是三个Tab按钮点击时会分别切换不同的视图内…

【点云上采样】基于移动最小二乘(MLS)的上采样

文章目录 声明简介代码参考 声明 示例结果比较奇怪,可能是参数没调好,如有问题,望指正! 简介 基于MLS(Moving Least Squares)的上采样是一种常用的点云处理方法,用于增加稀疏点云数据的密度和…

「Qt Widget中文示例指南」如何创建一个计算器?(一)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文将展示如何使用…

Django 入门学习总结8-管理页面的生成

修改polls/admin.py文件为: from django.contrib import admin from .models import Choice, Question class ChoiceInline(admin.StackedInline): model Choice extra 3 class QuestionAdmin(admin.ModelAdmin): fieldsets [ (None, {&q…

如何理解String是不可变的

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏&#xff1a…

天猫超市电商营销系统:无代码开发实现API连接集成

无代码开发实现天猫超市与电商系统的高效连接 天猫超市,作为天猫推出的网络零售超市,为广大网购消费者提供了一站式的购物服务。而通过无代码开发的方式,天猫超市能够实现与各种电商系统的连接和集成,这种方式无需进行繁琐的API开…

最前端|低代码平台轻松设计可视化图表【内含网站资源】

在前端设计中,我们经常需要使用可视化图表来呈现数据和信息。然而,每次都要自己从头开始设计图表未免太过繁琐。为了解决这个问题,我们调研了low code平台上的可视化图表功能。 本篇文章为大家带来以下问题的解答: (1&…

Spark---介绍及安装

一、Spark介绍 1、什么是Spark Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行计算框架,Spark拥有Hadoop MapReduce所具有的优点;但…

python数据结构与算法-07_哈希表

哈希表 不知道你有没有好奇过为什么 Python 里的 dict 和 set 查找速度这么快呢,用了什么黑魔法吗? 经常听别人说哈希表(也叫做散列表),究竟什么是哈希表呢?这一章我们来介绍哈希表,后续章节我们会看到 Python 中的字…

申请注册苹果iOS企业级开发者证书需要公司拥有什么规模条件

在全球范围内,iOS应用市场的规模和影响力不断增长,企业级应用在其中扮演着重要角色。为了在苹果设备上开发和发布内部应用,企业需要获取苹果的iOS企业级开发者证书。文章旨在探讨企业在申请此证书时需要满足的条件、注册流程,以及…

QT 搭建opencv 环境

1. 准备工具CMake 一、CMake介绍 CMake是一个被广泛使用的、开源免费并且完全跨平台的构建工具,可以用简单的语句来描述所有平台的安装(编译过程)。它能够输出各种各样的makefile或者project文件,能测试编译器所支持的C特性,类似UNIX下的aut…

代码随想录 11.20 || 单调栈 LeetCode 503.下一个更大元素Ⅱ、42.接雨水

503.下一个更大元素Ⅱ 本题与 496.下一个更大元素Ⅰ 如出一辙,求在给定一维数组中,每个元素右起第一个更大元素。不同之点在于,本题要求将一维数组视为首尾相连的,最后一个元素的下一个元素是第一个元素。问题的重点在于 如何使用…

正版软件|PhotoPad 照片/图像编辑工具

编辑照片/图像从未如此简单! 关于PhotoPad PhotoPad是本世纪最稳定、最易用且功能最全面的照片编辑器之一。 轻松编辑数码照片和其他图片。支持所有流行的图像格式快速裁剪、旋转、调整大小和翻转照片。 PhotoPad旨在快速打开和编辑照片,轻松无忧&…

Echarts设置环形图中心文字

方式一:title 通过在最外层设置title 配置项 title 同时也是环形图标题的配置项,只是通过left和top强制让其移动到环形图中间位置;提前设置好环形图 title: {// 图形标题(如果想要换行则使用ES6 模板字符串)// 例如: 示例// 这…

ros2工作空间

我们先不管ros2工作空间是什么样子的,如果是我自己来搞一个工作空间,我一定是这样安排 一个文件夹用来放自己存放的文件,。。。。。。。。。。对应src文件夹 一个文件夹用来放编译后的文件,。。。。。。。。。。。对应intall文件…

U4_1:图论之DFS/BFS/TS/Scc

文章目录 一、图的基本概念二、广度优先搜索(BFS)记录伪代码时间复杂度流程应用 三、深度优先搜索(DFS)记录伪代码时间复杂度流程时间戳结构BFS和DFS比较 四、拓扑排序一些概念有向图作用拓扑排序 分析伪代码时间复杂度彩蛋 五、强…

OpenAI一朝领导者山姆·奥尔特曼被解除职务,领导能力不再被认可?

原创 | 文 BFT机器人 在11月17日,OpenAI Inc.宣布CEO山姆奥尔特曼 (Sam Altman) 离职。掌舵人发生重大转变,董事会却在这个时候将公司首席技术官 Mira Murati推举为临时首席执行官,这一操作顿时引起了热议。 这突如其来的变化标志着OpenAI的…

C++实战学习笔记

文章目录 erase()uniquevector的insert()std::string::npos erase() (1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符 (2)erase(position);删除position处的一个字符(position是个string类…