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

行业现状

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

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

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

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

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

相关文章

【Windows 常用工具系列 11 -- win11怎么设置不睡眠熄屏 |win11设置永不睡眠的方法】

文章目录 win11 怎么设置不睡眠熄屏 使用笔记本电脑的时候,如果离开电脑时间稍微长一点就会发现息屏了,下面介绍 设置 Win11 永不睡眠息屏的方法,有需要的朋友们快来看看以下详细的教程。 win11 怎么设置不睡眠熄屏 在电脑桌面上&#xff0c…

jenkins传参给robotframework

在做自动化的时候,需要使用jenkins传参给rf,rf根据传来的变量运行,在将变量传递给py脚本文件。特此记录。 一、配置jenkins 构建的命令使用如下格式即可(注意空格): cd D:\xxx\test call pybot --variabl…

leetcode 每日一题复盘(11.20~11.26)

leetcode 746 使用最小花费爬楼梯 虽然是简单题但还是要说一下,感觉做题的思路还是不够清晰,好的是知道状态是最低花费,知道围绕所求的目标进行展开,倒推出递推公式 一开始写的递推公式是dp[i]dp[i-1]min(cost[i-2],cost[i-1]),写出了一个类似贪心算法的东西,归根结底还是对dp…

[Spring Cloud] Nacos 实战 + Aws云服务器

文章目录 前言一、拥有一台Aws Linux服务器1.1、选择Ubuntu版本Linux系统1.2、创建新密钥对1.3、网络设置1.4、配置成功,启动实例1.5、回到实例区域1.6、进入具体的实例1.7、设置安全组 二、在Mac上连接Aws云服务,并安装配置JDK112.1、解决离奇的错误2.2…

Java Enumeration 接口

Java Enumeration 接口 这段代码展示了如何使用 Enumeration 接口来遍历 Properties 对象的键。在这里,foo.getProp() 返回一个 Properties 对象,而 propertyNames() 方法返回一个 Enumeration 对象,它包含了 Properties 对象中所有键的枚举。…

hadoop 配置历史服务器 开启历史服务器查看 hadoop (十)

1. 配置了三台服务器,hadoop22, hadoop23, hadoop24 2. hadoop文件路径: /opt/module/hadoop-3.3.4 3. hadoop22机器配置历史服务器的配置文件: 文件路径:/opt/module/hadoop-3.3.4/etc/hadoop 文件名称:mapred-size.xml 新增历…

uml时序图插件

1,打开pycharm或者idea 2,找到plugins 3,搜索 PlantUML integration 4,安装,重启 5,新建uml文件 6,写代码: startuml participant "APP" as app participant "serve…

WPS或Excel查找A列中有B列没有的值

就这一行代码: 在C列输入: IF(COUNTIF(B:B,A1)>0,"该行A列中值B列有","该行A列中值B列没有")

图像的傅里叶变换

目录 ​编辑 傅里叶基础 傅里叶基础numpy实现 逆傅里叶numpy实现 频域的高通滤波 傅里叶OpenCV实现 傅里叶OpenCV逆变换实现 频域的低通滤波 傅里叶变换有什么应用场景 傅里叶变换matlab实现 傅里叶基础 法国数学家吉恩巴普提斯特约瑟夫傅里叶被世人铭记的最大的贡献…

验证码常见安全问题与测试方法汇总

系统使用验证码主要是意图一般有两个个目的,即辅助身份验证(短信或邮箱验证码)和防止攻击者利用自动化脚本恶意攻击网站(数字,图片,视频,行为式等验证码)。 验证码的生命周期 验证码…

《向量数据库指南》——Range Search 使用方法和参数检查

Range Search 使用方法 如需使用 Range Search,只需要修改搜索请求中的搜索参数。接下来我会讲一下的详细使用指南,在指南的最后还提供了 Python 示例代码。 开始前 请确保已安装并运行 Milvus Cloud。请确保已创建 1 个 Collection,并为该 Collection 创建索引。 Ra…

TensorFlow实战教程(二十六)-什么是生成对抗网络GAN?基础原理和代码普及

从本专栏开始,作者正式研究Python深度学习、神经网络及人工智能相关知识。前一篇文章分享了Keras实现经典的深度学习文本分类算法,包括LSTM、BiLSTM、BiLSTM+Attention和CNN、TextCNN。这篇文章将详细介绍生成对抗网络GAN的基础知识,包括什么是GAN、常用算法(CGAN、DCGAN、…

vue2.0中使用v-if/v-show切换后echarts不显示和宽高问题

vue2.0中使用v-if/v-show切换后echarts不显示和宽高问题 需求描述问题描述问题解析 解决方案使用v-show替代(不推荐)v-if使用$nextTick(推荐) 需求描述 使用ehcarts时,请求数据时加loading,请求结束后取消loading并显示…

XmlElement注解在Java的数组属性上,以产生多个相同的XML元素

例如&#xff0c;下面这段XML数据&#xff0c;有多个data元素&#xff0c;并且它们级别相同: <?xml version"1.0" encoding"UTF-8"?><request><reqtype>05</reqtype><secret>test</secret><body><userid&…

【数据结构】【版本2.0】【树形深渊】——二叉树入侵

目录 引言 一、树的概念与结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念与结构 2.1 二叉树的概念 2.2 特殊二叉树 满二叉树 完全二叉树 2.3 现实中的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 顺序存储 链式…

掌握源码,轻松搭建:一站式建站系统源码 附完整搭建步骤与教程

随着互联网的快速发展&#xff0c;网站已成为人们生活中不可或缺的一部分。然而&#xff0c;对于许多初学者或中小企业来说&#xff0c;搭建一个完整的网站系统并非易事。这涉及到前端和后端的开发、数据库管理等多个环节。为了解决这一痛点&#xff0c;我们推出了一站式建站系…

Redis变慢怎么办?

一、Redis为什么变慢了 1.Redis 真的变慢了吗&#xff1f; 对 Redis 进行基准性能测试 例如&#xff0c;我的机器配置比较低&#xff0c;当延迟为 2ms 时&#xff0c;我就认为 Redis 变慢了&#xff0c;但是如果你的硬件配置比较高&#xff0c;那么在你的运行环境下&#xf…

synchronized锁膨胀过程

轻量级锁&#xff1a; 使用场景&#xff1a;如果一个对象虽然有多线程要加锁&#xff0c;但加锁的时间是错开的&#xff08;也就是没有竞争&#xff09;&#xff0c;那么可以 使用轻量级锁来优化。 轻量级锁原理 1.创建锁记录&#xff08;Lock Record&#xff09;对象&#…

【前端学java】java中的字符串操作(10)

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学 java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08…

抖音电商双11官方数据最全汇总!

11月13日&#xff0c;抖音电商数据发布“抖音商城双11好物节”数据报告&#xff0c;展现双11期间平台全域经营情况及大众消费趋势。 报告显示&#xff0c;10月20日至11月11日&#xff0c;抖音电商里的直播间累计直播时长达到5827万小时&#xff0c;挂购物车的短视频播放了1697亿…