【软件测试】学习笔记-精准测试

news2024/12/25 9:35:21

软件测试行业从最开始的手工测试到自动化测试,从黑盒测试到白盒测试,测试理念和技术都发生了日新月异的变化。现如今,几乎所有的软件公司都有一套强大且复杂的自动化测试用例,用来夜以继日地保证产品的正确性和稳定性。

然而,你有没有想过,现在你所掌握的软件测试技术和用例,真的是最准确、最适合你的产品的吗?这其中,是不是存在很多冗余的测试数据、根本用不上的测试用例、永远成功不了的测试场景?

更糟糕的是,当产品代码有更新时,你根本不知道这些更新到底影响了哪些功能,也无法精准地选取测试用例,而不得不执行完整的全回归测试。

针对这类问题,精准测试的概念在2016年被提了出来。所谓精准测试,就是借助一定的技术手段、通过算法的辅助对传统软件测试过程进行可视化、分析以及优化的过程。也就是说,精准测试可以使得测试过程可视、智能、可信和精准。

为什么要有精准测试,以及它可以解决什么问题,先分析传统软件测试正面临着哪些痛点,而精准测试又是如何解决这些痛点的。

传统软件测试的主要短板

现如今,软件产品的规模以及复杂度的发展速度,可谓超乎想象,而传统的软件测试方法,在面临这些挑战时已经表现出了些许力不从心。这些力不从心,也就是传统软件测试的短板,归纳为了下面这五大类:

第一大短板,测试的维护成本日益升高。

当传统测试的用例逐渐增加时,需要花费越来越大的时间和人力成本,去维护一个庞大的测试用例集,以此保证产品新特性和老功能的正确性和稳定性。

而在这成千上万的测试用例中,有很多陈旧的用例已经失效了(不再能满足现有产品的测试需求了),但是整个团队还是要花费很多精力去维护这个庞大的测试用例集。

第二大短板,测试过程的低效。

随着软件功能不断丰富,相应的测试用例集也愈加庞大,这时难免会出现“杀虫剂”效应,即:测试用例越来越多,而产品的“免疫力”也越来越强。

造成这种问题的原因是,我们在测试早期已经发现了80%的软件缺陷,除非再花费巨大的人力和时间成本去分析和增加大批量的测试用例,否则后期新增的测试用例已经很难再发现新的缺陷了。

而精准测试可以通过对已有测试数据的跟踪分析,来定位或者缩小测试范围,以此减少发现剩下20%的软件缺陷的工作量。

第三大短板,缺乏有效的回归用例选取机制。

在传统测试理念中,每次添加新功能或者修复缺陷,一般都需要在产品上线前进行一轮全回归测试,哪怕这次的改动只有一行代码。但是,全回归测试的测试用例数量以及执行代价一般都比较大。

这里,我们之所以要采用全回归测试,是因为我们无法准确地知道这次的更新到底会影响哪些功能,也无法知道应该从回归测试中选取哪些必要的测试用例,无奈之下只能两眼一抹黑地执行全部用例。

第四大短板,测试结果的可信度不高。

在传统的软件测试中,测试数据的统计分析人工因素占据了绝大部分比重,由此导致测试数据本身的技术公信力不够高,进而需要依靠管理手段来保证真实的测试数据被准确地记录。

这种做法不仅可靠性差,而且执行成本高。

第五大短板,无论是白盒测试技术还是黑盒测试技术都有其局限性。

如果完全基于黑盒测试,那么注定无法深入代码实现的细节,也就无法做到有的放矢地设计测试;而如果基于白盒测试技术,为了保证代码质量,往往会采用代码级测试和代码覆盖率技术。

但是,这些测试方法都强依赖于产品代码,一旦代码发生改变,很多测试都会因此失效,因此很难适应高速迭代的开发流程。

另外,由于目前的代码级测试和代码覆盖率技术还不支持测试用例级别的覆盖率分析,而是要将所有测试结果混在一起,导致白盒测试时无法区分代码覆盖率的贡献到底来自于哪个测试用例,这将极大地限制白盒测试工具在测试结果分析上的应用。

精准测试的核心思想

而,精准测试便是为了解决传统测试的这些短板。它的核心思想是,借助一些高效的算法和工具,收集、可视化并且分析原生的测试数据,从而建立起一套测试分析系统。

所以,精准测试的主要特征可以概括为以下几个方面:

第一,精准测试是对传统测试的补充。精准测试是基于传统测试数据的,并不会改变传统的软件测试方法,更不会取代传统测试。也就是说,精准测试在不改变原有测试集的基础下,能够优化测试过程和数据,提高测试效率。

第二,精准测试采用的是黑盒测试与白盒测试相结合的模式。在执行黑盒测试时,收集程序自动产生的白盒级别的运行数据,然后通过可视化或者智能算法识别出测试未覆盖的点,继而引导开发人员和测试人员有的放矢地补充测试用例。

同时,在黑盒测试的执行过程中,可以实现测试用例和产品代码的自动关联,将基于黑盒的功能测试直接映射到基于白盒的代码层,这将使智能回归测试用例选取的想法成为可能。

第三,精准测试的数据可信度高。精准测试的数据都是由系统自动录入和管理的,人工无法直接修改数据,因此我们可以直接将传统测试产生的数据导入精准测试系统,用于测试结果的分析,从而使测试结果具有更高的可信度。

第四,精准测试过程中,不直接面对产品代码。精准测试通过算法和软件实现对测试数据和过程的采集,因此并不会直接面向代码,也就不会强依赖于产品代码。

但是,精准测试能够实现测试用例和产品代码的自动关联,也就是说代码覆盖率的统计可以以测试用例为单位来进行,具体实现的核心思想还是基于代码覆盖率的统计,只是在代码覆盖率的元数据上增加了测试用例的信息。

因此,代码的改变并不会影响测试过程,但却能够将功能测试间接映射到代码级别。这样,精准测试就实现了测试用例和被测产品代码的双向追溯

第五,精准测试是与平台无关的、多维度的测试分析算法系统。精准测试系统是一种通用的测试分析系统,独立于任何测试平台,其内部算法和业务无关,因此适用于各种不同的产品。

同时,精准测试为我们提供了多维度的测试分析算法,拓展了白盒测试的范畴。而,精准测试对测试用例和产品代码的自动关联,使得它可以为测试过程提供大量的智能分析结果。

接下来,我们再一起看看精准测试具体有哪些方法。

精准测试的具体方法

目前业界最成熟并且已经产品化的精准测试体系,来自于国内公司“星云测试”。所以,下面关于精准测试的具体方法的分享中,涉及到的很多概念是参考了其官网的《星云精准测试白皮书》。如果你对完整的白皮书内容感兴趣的话,可以参考TestStars星云测试|精准测试|ThreadingTest穿线测试。

目前,由星云测试实现的精准测试平台中,核心组件包括精准测试示波器、测试用例和被测产品代码的双向追溯、智能回归测试用例选取,以及测试用例聚类分析这四项最关键的技术。在这其中,最为核心的技术是测试用例和产品代码的双向追溯。

接下来,依次和你分享这4项核心技术,加强对精准测试的理解。

软件精准测试示波器

软件精准测试示波器,即在软件测试(人工测试或者自动化测试)的过程中,自动分析代码运行的一些数据指标,并将其用图表的方式实时显示出来。其中,这些数据指标包括了代码的逻辑块执行速率、代码的条件执行速率、函数的调用速率等等。

同时,由于示波器记录了每个测试用例的产品代码执行序列,因此可以通过比较两个测试用例的产品代码执行序列来判断两个测试用例是否隶属于同一个等价类,这将有助于精简测试用例的数量。

另外,由于示波器所有的数据都是通过系统自动导入的,因此不存在人工导入可能引入的数据误差,借此保证了所有数据的分析和显示都是真实且可靠的。

最终,示波器以类似心电图的形状实时显示测试过程中被测代码的运行信息,因此我们可以很直观地看到测试中发生的变化。一旦测试过程稍有异常,就会立刻显示在示波器上,我们通过图形的变化就可以轻易地对平时不可见的程序行为进行分析,并作出判断。比如,是否存在计算密集的区域,是否有不该执行的代码在后台运行等。

测试用例和被测产品代码的双向追溯

顾名思义,测试用例和被测产品代码的双向追溯,就是通过一定的技术手段实现测试用例和被测产品代码的双向关联。这样,我们可以通过测试用例追溯到其执行的代码,也可以通过分析代码的功能为测试提供数据。

这里,测试用例和被测代码的双向追溯,包括正向追溯和反向追溯。

其中,正向追溯,即通过示波器将产品代码和测试用例进行自动关联。这个关联,可精确到方法或者代码块级别。而在关联之后,精准测试系统可以显示每个测试用例实际执行的代码。这样,当我们发现软件缺陷时,便可以快速定位出其所在的代码。

反向追溯是指,如果我要关注程序中的某一块代码,那么就可以通过精准测试系统追溯到所有测试这块代码的测试用例。这样,就使得测试数据便于统计和量化,同时测试和开发工程师之间就可以基于测试数据进行交流,为他们的沟通提供更有效的桥梁,降低沟通成本。

这里我画了一张图,来帮助你更好地理解正向追溯和反向追溯的概念。

图1 测试用例和被测产品代码的双向追溯示意图

总而言之,测试用例和被测产品代码的双向追溯能显著提升测试效率:

  • 当我们发现了软件缺陷和错误时,通过这个方法可以迅速定位到有问题的代码逻辑;
  • 当出现一些难以复现的缺陷时,这个方法可以帮助我们追溯有问题的代码而无需强行复现。

说到这里,你可能会有一个疑问,双向追溯技术后台一定是采用了代码覆盖率的统计工具,但是这个代码覆盖率统计工具和双向追溯又具体有什么区别和联系呢?

事实上,这两者之间最大的区别,体现在测试覆盖率的统计方式上。传统的代码覆盖率统计工具,会把所有测试产生的覆盖率混在一起,并不具备单个测试用例的覆盖率统计功能;而精准测试中的双向追溯技术,则可以将覆盖率的分析和计算精确到每个测试用例针对的产品代码。

另外,从实际工程的角度来看,传统的代码覆盖率统计工具都是单机运行,然后完成数据的统计,无法有效整合一个团队下多人的测试结果,也不能按照日期累计。而,现如今的双向追溯技术,则支持多人异地测试、整合计算覆盖率等功能。

智能回归测试用例选取算法

回归测试,就是在修复了某个错误或缺陷后,再对软件进行测试以确保没有引入新的错误或缺陷。而,智能回归测试用例选取算法便是针对需要执行的回归测试,通过算法得出各个测试用例的权重和优先级,使得在有限的时间和人力下,能够更高效地执行测试用例。

由于精准测试提供了智能算法来自动选取回归测试用例,因此既避免了人工选取回归测试用例时可能存在的测试盲点,也减少了执行回归测试的时间,同时还能够保证计算结果的精确性,大大降低了回归测试的风险。

另外,精准测试中测试用例和被测产品代码的双向追溯性,也使得当有代码变更需要执行回归测试时,可以直接找到具体应该执行哪些测试用例。

测试用例的聚类分析

测试用例的聚类分析,是指通过建立测试用例和代码执行的剖面关系,实现对测试用例的聚类分析。这个聚类分析的结果,将以两维数据呈现出来,即:测试用例ID及其对应的代码执行剖面。

通过聚类数据,我们可以很容易地发现测试用例的执行错误。比如,测试用例A应该执行代码块A,而通过聚类分析,我们发现用例执行完被分在了代码块B上。因此,我们就可以断定该测试用例发生了错误或者测试环境出现了问题。

同时,测试用例的聚类分析能够展示测试用例的分布情况,为我们调整测试用例的分布提供依据。也就是说,我们可以通过这个数据,对测试用例聚集较少的区域予以补充丰富,同时也可以在测试用例聚集丰富的区域内提取出相对重要的用例,然后执行,从而节省时间、提高测试效率。

精准测试的概念和理论体系虽然比较完善,但就目前来看实际落地的案例还比较少。有些公司可能并不会直接去使用星云测试的平台,而是会基于精准测试的理念和方法去开发自己的工具。比如,有些国内互联网公司,就自己实现了基于增量的代码覆盖率统计方案,以及具有双向追溯功能的代码覆盖率方案。

总结

这篇文章先探讨了传统软件测试的方法、理念,因为测试用例数量持续增加而导致的用例维护成本高、测试过程低效、缺乏有效的回归测试用例选取机制等等一系列的问题,而有些力不从心。于是,精准测试应运而生了。

精准测试是通过一系列的智能算法和技术实现了对测试过程的管理。它可以在测试运行时,分析源数据指标以指导传统测试,并在一次次的修正中大幅提升测试效率。并且,精准测试在测试过程中产生的海量精准数据,即使不在测试周期里,也可以进行分析和追溯,让测试变得更加高效和有价值。

所以说,精准测试在节省了人力成本的同时,保证了软件的质量。

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

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

相关文章

Nginx的access_log 状态码499的问题排查

前提:公司的项目网站,运行环境是lnmp环境下 一、起因 如下图,网站请求超过60s(如:导出半年的报表数据到excel)时,报如下错误,且浏览器上没有返回值 二、发展 查找nginx和php-fpm都没有报错日志。于是先把…

万字讲解新一代分布式任务调度框架Power-job

1、简介 Power-Job 的设计目标是成为企业级的分布式任务调度平台,整个公司统一部署调度中心 power-job-server,旗下所有业务线应用只需要依赖 power-job-worker 即可接入调度中心获取任务调度与分布式计算能力。 Power-job官方网址:http:/…

ELK 分离式日志

目录 一.ELK组件 ElasticSearch: Kiabana: Logstash: 可以添加的其它组件: ELK 的工作原理: 二.部署ELK 节点都设置Java环境: 每台都可以部署 Elasticsearch 软件: 修改elasticsearch主配置文件&…

QT-QML2048小游戏

QT-QML2048小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 import QtQuick 2.2 import QtQuick.Controls 1.1 import QtQuick.Controls.Styles 1.1 import QtQuick.Dialogs 1.1 import QtQuick.Window 2.1 import "2048.js" as MyScriptAp…

使用pyechart创建折线图

import json from pyecharts.charts import Line from pyecharts import options# 首先使用文件打开数据 f_us open(Desktop/python/Project/数据可视化/美国.txt,r,encoding"UTF-8") f_rb open(Desktop/python/Project/数据可视化/日本.txt,r,encoding"UTF-8…

基于springboot+vue的蜗牛兼职网的设计与实现系统(前后端分离)

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

Pypputeer自动化

Pyppeteer简介 pyppeteer 是 Python 语言的一个库,它是对 Puppeteer 的一个非官方端口,Puppeteer 是一个 Node 库,Puppeteer是Google基于Node.js开发的一个工具,它提供了一种高层次的 API 来通过 DevTools 协议控制 Chrome 或 Ch…

【XTuner 大模型单卡低成本微调实战】学习笔记

参考学习教程【XTuner 大模型单卡低成本微调实战】 理论 Finetune简介 大语言模型 微调模式 增量预训练 指令跟随微调 LoRA和QLoRA Xtuner介绍 实战 自定义微调 用 Medication QA 数据集进行微调 将数据转为 XTuner 的数据格式 目标格式:(.jsonL) 写提示词请C…

清晰光谱空间:全自动可调波长系统的高光谱成像优势

高光谱成像技术 高光谱成像技术是一种捕获和分析宽波长信息的技术,能够对材料和特征进行详细的光谱分析和识别。高光谱成像技术的实现通过高光谱相机,其工作原理是使用多个光学传感器或光学滤波器分离不同波长的光,并捕获每个波段的图像&…

CSS笔记II

CSS第二天笔记 复合选择器后代选择器子选择器并集选择器交集选择器伪类选择器 三大特性继承性层叠性优先级优先级-叠加计算规则 Emmet写法 背景属性背景图平铺方式位置缩放固定复合属性 显示模式转换显示模式 复合选择器 定义:由两个或多个基础选择器,通…

16.鸿蒙HarmonyOS App(JAVA)滑块组件Slider与评级组件Rating

16.鸿蒙HarmonyOS App(JAVA)滑块组件Slider与评级组件Rating ability_main.xml <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:ohos"http://schemas.huawei.com/res/ohos"ohos:height"match_parent"oh…

格密码基础:最短格基与KZ基

目录 一. 介绍 二. 最短向量长度 三. GapSVP问题的困难性 四. 如何解决近似SVP问题 五. 推荐论文 一. 介绍 KZ基的全称叫Korkine-Zolotarev格基&#xff0c;KZ基也被称之为最短的格基。接下来我们介绍什么是KZ基&#xff1f; 给定任意秩为n的格&#xff0c;首先第一步寻…

解决Python安装库时出现的Requirement already satisfied问题

uirement already satisfied的问题当我们用pip install 库名时&#xff0c;出现了下面 Requirement already satisfied WARNING: Ignoring invalid distribution -ip 的问题 对于这样的问题&#xff0c;解决办法就是在 pip install 后加 - -target你所要添加的库文件地址(注意…

网络知识梳理:HTTP和HTTPS

HTTP&#xff08;超文本传输协议&#xff09;和HTTPS&#xff08;安全超文本传输协议&#xff09;是两种用于在互联网上传输数据的协议&#xff0c;主要用于网页浏览。它们在功能上相似&#xff0c;但在安全性方面有重要区别&#xff1a; 1.HTTP 定义&#xff1a;HTTP是一种用…

Flutter编译报错Connection timed out: connect

背景&#xff1a;用Android Studo 创建了Flutter项目&#xff0c;编译运行报错java.net.ConnectException: Connection timed out: connect 我自己的环境&#xff1a; windows11 Android Studio Flutter 截图如下&#xff1a; 将错误日志展开之后&#xff1a; Exception…

小白准备蓝桥杯之旅(c/c++b组)

前言&#xff1a;省赛获奖比例高达百分之60,只要比一半的人努力&#xff0c;你就能大概率获奖。 寒假做的3件事 1.稳基础 熟练掌握基础语法部分&#xff0c;c比c多个stl库优势&#xff0c;c语言的同学需要会实现c中stl库部分 2.刷真题 大概比赛前30天&#xff0c;坚持每天做…

SD-WAN解决跨国公司海外工厂网络安全问题

在跨境业务蓬勃发展的今天&#xff0c;越来越多的大型企业出于人力成本的考虑&#xff0c;在人力成本较低的发展中国家建立工厂。然而&#xff0c;传统基于路由器的网络架构已无法为这些跨国企业提供可靠的安全网络。那么&#xff0c;如何解决跨国企业海外工厂的网络难题呢&…

JAVA基础-----认识异常

文章目录 1. 异常的概念与体系结构1.1 异常的概念1.2 异常的体系结构1.3 异常的分类 2. 异常的处理2.1 防御式编程2.2 异常的抛出2.3 异常的捕获2.3.1 异常声明throws2.3.2 try-catch捕获并处理2.3.3 finally 2.4 异常的处理流程 3. 自定义异常类 1. 异常的概念与体系结构 1.1…

JavaWeb:Request Response

文章目录 1、Request和Response的概述2、Request继承体系3、Request获取请求数据3.1、获取请求行数据3.2、获取请求头3.3、获取请求体 4、Request通用方式请求参数5、POST请求参数乱码解决6、Request请求转发7、Response的响应状态码和响应头8、Response重定向9、Response响应字…

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock

关于linux 救援模式出现xfs 文件系统挂载报 bad supperblock 一种情况说明 挂载ISO文件进入救援模式&#xff0c;无法挂载XFS文件系统&#xff0c;xfs_repair也是报未知的超级块 使用 xfs_info 可以取到 xfs文件系统分区信息 xfs_db -c “sb 0” -c “p” $your_xfs_dev 也能…