精准测试:代码覆盖率与测试覆盖率

在日常的测试过程当中,不管是人工进行接口测试还是接口自动化,以及RD写的单元测试,我们一般使用代码覆盖率来衡量测试的完备程度,这篇文章就带大家认识一下代码覆盖率这个常用质量完备度的指标

代码覆盖率测试与测试覆盖率在软件工程中,存在着对代码覆盖测试和测试覆盖测试的混淆。

代码覆盖测试是一种软件测试技术,用于衡量在运行测试时程序源代码中有多少被执行。这意味着代码覆盖测试衡量了程序源代码被测试的程度,它提供了关于测试期间哪些源代码组件被执行以及哪些部分没有被执行的详细信息。代码覆盖测试应该与测试覆盖测试区分开来,并且不应该互换使用。

测试覆盖率是软件测试过程中执行的测试用例所覆盖的代码和功能需求等比例程度。测试覆盖率测试是一种定量的测试方法,用于衡量测试用例对被测试软件的覆盖程度。它通常由质量保证团队执行,以确保测试已覆盖多个规格文档,如功能需求规格、软件需求规格和用户需求规格等。与代码覆盖测试相比,测试覆盖率测试更加关注软件功能需求的覆盖程度,而不是代码执行的覆盖程度。

下面是代码覆盖和测试覆盖之间的关键区别:

在这里插入图片描述

一、覆盖率与测试策略

代码覆盖率只是测试覆盖率的一种具体实现方式,即通过统计测试用例执行过程中覆盖到的代码行数或代码分支数来计算测试覆盖率。而测试覆盖率是测试用例覆盖到的代码行数或代码分支数与总代码行数或总代码分支数的比例。它是测试质量的一个度量标准,可以用来评估测试的完备性和有效性。

测试策略按测试过程一般分为单元测试、集成测试、系统测试和验收测试四大阶段;按软件内部工作过程又有白盒、灰盒、黑盒;从过程是否执行软件又可将测试方法分为静态和动态。这样白盒测试对应着软件测试过程中的单元测试,一般由开发人员完成,而灰盒测试与黑盒测试一般测试人员介入较多,对应着集成测试、系统测试和验收测试。

二、覆盖率的基本应用

使用代码覆盖测试的好处是可以高效且具体的代码检查,并有高质量代码,还能提高代码的清晰度和信任度。

这里有一些不错的技巧,如:使用自动化代码覆盖率测量工具,使用自动化单元测试生成工具,编写全面的测试用例,编写优先测试,定期审查代码覆盖率结果,将代码覆盖测试集成到软件开发周期中,注意边界情况,持续重构代码。

而一些 “陷阱” 需要注意,如:视角不足,较高的时间成本,解释的挑战。

下面主要说下使用测试覆盖测试,在测试时会有这样一些担心,如:无止境的、没有范围的,代码的改动或调整一个需求,需要全量回归测试,影响范围不清楚,某个功能或功能点是否需要测试,测试的程度如何不清楚等等的问题。

,举个例子:需求是查询 id 与展示 id 相关数据的功能,进一步分析要做(开发)id 输入框,【查询】按钮,显示的列表,涉及 1 个查询接口(HTTP),查库(数据库)的话,需要 1 条 SQL 语句。

开发后得到前端 id 输入框,【查询】按钮和结果列表,

图片

后端是通过一个查询方法调到数据库得到数据,显示在前端页面。

图片

应用测试覆盖率

1、建立测试范围,这里简单些了,只是功能的

在这里插入图片描述

2、需求分析、用例设计、执行、提 bug 等,就是执行测试的过程

3、得到功能测试的结果

在这里插入图片描述

这么看上去没什么问题,双相的追溯(需求、用例、缺陷)已经是全覆盖了,那怕在算上接口,但也仅仅是功能上的覆盖,实则缺失了对代码等层面上的覆盖,

比如:代码中要有对查询 id 的判断,这里可能会有所遗漏,因为仅从功能或黑盒测试来讲,不知道这个判断是否执行。

这时测试覆盖是要由测试需求和测试用例的覆盖或已执行代码的覆盖表示。建立在对测试结果的评估和对测试过程中确定的变更请求(缺陷)的分析的基础上。

在 “2、需求分析、用例设计、执行、提 bug 等,就是执行测试的过程” 要介入代码覆盖率的工具,弥补这一缺失,覆盖率的表格也需要优化下。

后边的类、方法的覆盖率可以根据情况不同自行获取

功能 / 模块 功能点 HTTP 接口类型 HTTP 接口 类名 方法名 覆盖率 测试结果 查询 输入框 无 无 无 无 100% 测试通过 查询 查询按钮 POST /api/queryById query queryById 100% 测试通过 结果列表 显示结果列表 POST /api/results query results 100% 测试通过

覆盖率的计算由浅入深来说一般从功能、功能点、接口、代码中类、方法等得到,如:两个功能、三个功能点,以功能点为覆盖,覆盖率公式为(至少执行一次的功能点 / 功能点总数)* 100% = (1 / 1)*100%,查询按钮的覆盖率为 100%

注:测试结果是否通过,不单是看覆盖率,还要通过测试用例的执行,缺陷的关闭等情况来决定。

三、可视化系统

通过完全手工绘制已经有了初步概念,考虑些许情况,这种已经不能满足于此。

面对复杂的业务系统,经验已经把业务功能、逻辑关系等相关知识点深深的印在当事人的脑子里,而要沉淀、展示于旁人,这就是一个让人很头疼的问题,就像告诉一个人从哪里到哪里一样,讲的人清楚,但听得人却有些一头雾水,此时如果有个地图就一目了然了。

图片

通过一些维度的图形展示,谁都可以直观、更好的加深对系统的了解。“知识库” 中保存着涉及到的功能、接口等信息。简单实现,现在有了共享表格,可以直接维护上去,形式是哪种并不重要,主要是掌握了方法。

链路关系像这样,业务系统 - 页面 - 功能 - 接口 - 代码(拓扑图),业务系统 - 页面 - 功能 - 接口 - 架构(拓扑图)。

图片

功能层面

实现方式上比如可以像文件目录那样实现一颗树,某个页面下有哪些功能,功能中有哪些接口,而接口中有代码的类、方法及覆盖率等信息。

图片
或者可以采用类似知识图谱来构建一个结构化的语义知识库,页面、功能、接口信息,可视为实体 - 节点,而彼此间的关系既是连接的线。或者接口信息也可看做是属性值。图片

代码层面

从接口下去就到了代码层面,可以看到代码的关系拓扑图

图片
这里不仅能看到单个接口中代码和关系图,还能展示出不同接口与代码的关系图片

当关注到代码层面的覆盖后,好处很多,其中之一是可以更好帮助开发提高或约束代码质量,比如:代码中有时判断会使用常量,而不是枚举或宏 / 全局变量。当然也可以看到执行的代码分支,每条代码逻辑分支是否执行到。

架构层面

通过平台获取到的数据,不仅可以做功能、代码层面的覆盖,系统架构也可完成可视化的呈现,

比如:应用服务的环境模块拓扑图

在这里插入图片描述

分布式调用链的拓扑图
图片

还是用查询功能举例,有时因为一些需要,该功能下使用了缓存。当第一次查询是直接从数据库中查询回来的数据,同时也在缓存中记录了该条数据,而在一定时间内再查询,实则是从缓存中查询回来的。同样的,如果只覆盖了功能,这里可能会有所遗漏,从功能来看,查询后数据是返回了,而至于是从数据库还是从缓存获取到的,就不得而知了。再有是获取到的数据可能未必是想要的,奇怪的是,为什么输入 / 请求的数据,功能、接口都是一样的,而返回的数据在一段时间后就发生了变化。中间发生了什么不清楚,真的是 “黑盒子”。想要知道 SQL 语句,只能费劲的从日志、代码或 xml 中查找,还有等等的不便问题。

除此之外,还可以展示不同接口与数据库的关系

图片

只要脑洞够大,通过数据还可以实现出很多覆盖,并呈现出各种可视化图形。

四、未来已来

使用数据驱动将抽象的字符、逻辑等等可视化展示,从而得到想要的效果,但这种效果无论是静态或动态产生的、主动或被动的等等,都会遇到时间的问题,而对时间有着强依赖的我们,无论采用哪种开发方式,即使在快,有着时间的限制和约束,这种苦恼始终会伴随着,在现实世界中目前是无法解决,但有了虚拟世界,现在叫元宇宙,那就不同了,里面有还原现实一切的 1 比 1 模型,在虚拟世界里,可以搭建出想要的系统,每一个环节,无论是从项目或需求、产品设计、开发、测试到生产等各方环节,都可以清晰、透明、可视的关注到,无论功能与非功能均可以进行模拟,原来的项目或开发周期可能要 1 年,而现在可能半年不到的时间,通过虚拟现实和增强现实技术进行交互,最终是通过空间换取时间从而得到这宝贵的经验,然后这种虚拟产物可以搬到现实世界进行应用,从而避免很多试错,也大大压缩、节省了时间。目前这种方式已经慢慢被应用到各个行业、领域,这种虚拟与现实的结合可以更好地服务我们的生活。

而人工智能(AI)在软件测试领域中的应用已经逐渐增多,影响也逐渐显现出来。

• 对于代码覆盖测试,AI 可以帮助测试人员更快地生成测试用例并自动执行测试。AI 可以分析源代码并识别潜在的问题,然后自动生成测试用例。例如,可以使用 AI 来确定哪些代码路径需要测试以及如何最好地测试它们。这种自动化过程可以加快软件测试的速度并提高覆盖率。

• 对于测试覆盖测试,AI 可以帮助测试人员更好地评估测试的效果。AI 可以分析测试结果并根据这些结果推断哪些测试用例提供了最佳的测试覆盖率,哪些测试用例需要进一步改进以提高覆盖率。这种数据驱动的方法可以帮助测试人员更好地优化测试计划,并在最短时间内提供最佳的测试覆盖率。

AI 在软件测试领域中的应用将对代码覆盖测试和测试覆盖测试产生积极的影响,帮助测试人员更好地评估软件的质量并提高测试效率。

总结:

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

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

软件测试面试文档

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

 

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

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

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

相关文章

uniapp滚动加载

uniapp实现滚动加载,先获取10条数据,滚动到底时,再获取10条数据,以此类推,直至没有数据为止。 使用scroll-view,注意一定要给一个固定高度,隐藏滚动条会更美观 2. 在data中定义 3. 获取数据 …

3D三维模型展示上传VR全景创建H5开源版开发

3D三维模型展示上传VR全景创建H5开源版开发 新增三级分类(项目分类、项目、默认场景) 新增热点 前台创建项目、场景 场景跳转、提示信息 新增热点图标选择 新增预览场景是显示关联场景 新增3D模型展示功能 当然可以!以下是一个关于3D三维模…

MySQL Explain 关键字详解

概述 explain 关键字可以模拟执行 sql 查询语句,输出执行计划,分析查询语句的执行性能 使用方式如下:explain sql explain select * from t1执行计划各字段含义 1. id 如果 id 序号相同,从上往下执行如果 id 序号不同&#…

MJ绘画设计基础——如何玩转midjourney?

抽卡的时候经常有一个问题,就是整张图都还不错,但是某些地方有些小问题,比如说手很奇怪,比如下面这个图,哪都挺好看,就是左手有点问题。 这时候就可以局部重绘来拯救一下 第一次生成的图 点击图片下方的V…

Java快速开发:力推开源项目若依RuoYi

在Java开发开源框架中,首屈一指的应该若依,在行业里,不管小公司中公司还是大公司,都能够看到若依项目的身影。足以见得 若依框架的受众之大。 RuoYi-Cloud RuoYi-Cloud 是一个 Java EE 分布式微服务架构平台,基于经典…

基于Spring Boot+VUE简历系统

1管理员功能模块 管理员登录,通过填写用户名、密码、角色进行登录,如图1所示。 图1管理员登录界面图 管理员登录进入简历系统可以查看首页、个人中心、用户管理、简历模板管理、模板类型管理、招聘会管理、报名招聘管理、简历上传管理、求职论坛、我的收…

HarmonyOS角落里的知识:一杯冰美式的时间 -- DragView

一、前言 在学习API9的时候就写了一个DragView,用于展示某个页面的悬浮可拖动的入口,特意丰富了许多的功能,今天分享给大家~。Demo基于API11。 二、思路 因为API本身就带有拖拽的手势,所以直接使用:PanGesture&…

FUANC机器人教程:速度倍率级数与倍率增量设定方法

目录 机器人速度倍率介绍 机器人运行速度倍率切换操作 快速切换速度倍率有效与无效设定 速度倍率级数与增量自定义 速度倍率级数与增量自定义举例 机器人速度倍率介绍 在机器人手动或自动运行时都离不开速度设定,机器人的运行速度由多个要素共同决定&#xff…

拍照翻译软件哪个好用?打破语言壁垒就靠这5款~

还不清楚拍照翻译成中文的软件有哪些的朋友可有福了! 今天便一次性给大家测评5款市面上热门且备受好评的拍照翻译工具~想必总有一款能够满足你的翻译需求、一举带你打破语言壁垒~ **稳定翻译的电脑软件** >>全能翻译官 翻译准确率:☆☆☆☆ 译…

corepack管理包管理器;nvm管理node版本;nrm管理npm源地址

corepack corepack 管理"包管理器",包括 yarn 和 pnpm。corepack 并不能管理 npm。 corepack 是 nodejs 提供的功能,安装 nodejs 时 corepack 就一起安装了。它还是实验性功能,默认是关闭的,具体介绍看官方文档。 注…

产品经理经验分享:电商类项目开发需要了解常用的电商API接口

今天主要分享产品经理设计电商类应用需要了解的常用API? 为什么产品经理需要了解常用电商API接口呢? 1.开需求会,提了新的需求,开发说,你这个需求太复杂,光接口就有20几个,按照排期根本做不完…

对yoloV8进行标签过滤来实现行人检测

前言 上一章我们介绍的通过迁移学习,在新的行人数据集上使用已经学习到的特征和权重,从而更快地实现行人检测任务。模型就会调整其参数以适应新的数据集,以提高对行人的识别性能。接下来介绍一种更快更便捷的方法,依旧是基于yolo…

ES6(ECMAScript 6.0) 新特性

1 ES6 基本介绍 (1)ECMAScript 6.0(简称 ES6)是 JavaScript 语言的下一代标准, 2015 年 6 月发布。 (2)ES6 设计目标:达到 JavaScript 语言可以用来编写复杂的大型程序,成为企业级开发语言 &…

Python机器学习完整流程:从数据清洗到推理落地

目录 一、引言 二、数据清洗 数据加载与初步探索 缺失值处理 异常值处理 特征编码与转换 数据集划分 三、模型训练 四、模型文件生成 五、模型部署与推理落地 六、总结 一、引言 在当今数据驱动的时代,机器学习已成为解决复杂问题的有力工具。而…

预埋螺栓抗滑移系数检测 内六角螺栓扭矩系数检测

螺栓检测范围:螺栓,高强螺栓,地脚螺栓,不锈钢螺栓,六角头螺栓,管片螺栓,膨胀螺栓,化学螺栓,镀锌螺栓,植筋螺栓,普通螺栓,钢结构螺栓&a…

Golang免杀-编码加密-Xor(GG)

go语言环境搭建 Golang学习日志 ━━ 下载及安装_golang下载-CSDN博客 go run xxx.go go build xxx.go 首先,cs.msf生成比特流数据. 放入xor,py脚本中进行xor加密. xor.py def xor(shellcode, key):new_shellcode ""key_len len(key)# 对shellcode的每一位进行…

JAVA台球助教台球教练多端系统源码支持微信小程序+微信公众号+H5+APP

🎱台球助教系统:你的私人教练在线等你🎯 功能介绍 球厅端:球厅认证、教练人数、教练的位置记录、助教申请、我的项目、签到记录、我的钱包、数据统计 教练端:我的页面,数据统计、订单详情、保证金、实名…

CP测试是什么 及名词解释

芯片中的CP一般指的是CP测试,也就是晶圆测试(Chip Probing)。 一、CP测试是什么 CP测试在整个芯片制作流程中处于晶圆制造和封装之间,测试对象是针对整片晶圆(Wafer)中的每一个Die,目的是确保…

群辉DSM7下ZeroTier的安装

目录 一、起因 二、具体操作 1、添加组件源: 2、安装套件 3、开启ssh 4、连接ssh执行修补 5、手工启动ZeroTier 6、使用终端命令加入网络 7、审核通过该节点的加入 三、测试链接 1、PC端测试 2、手机APP测试 ZeroTier是个内网穿透的远程组网系统,它可以将全世界的终…

【电子数据取证】如何快速在CSV中找到涉案手机号码

文章关键词:电子数据取证、聊天记录恢复、数据恢复、手机取证、介质取证 一、前言 在最近的取证工作中,我们遇到很多需要从大量的聊天记录数据中提取特定的信息,例如手机号码,银行号码,交易码。由于数据通常以数据库…