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

在日常的测试过程当中,不管是人工进行接口测试还是接口自动化,以及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 在软件测试领域中的应用将对代码覆盖测试和测试覆盖测试产生积极的影响,帮助测试人员更好地评估软件的质量并提高测试效率。

总结:

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

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

软件测试面试文档

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

 

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

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

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

相关文章

“非遗+全身动作捕捉设备”如何打造交互式叙事新消费场景?

在数字化时代,非遗传承渠道逐渐数字化、科技化,利用“虚拟人全身动作捕捉设备”技术提升了非遗文化的社会能见度,让非遗文化重新吸引年轻人的目光。 “虚拟人全身动作捕捉设备”,可以让虚拟人化身虚拟主持人、虚拟主播、虚拟嘉宾…

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

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

HarmonyOS 页面路由(Router)

1. HarmonyOS页面路由(Router) 页面路由指在应用程序中实现不同页面之间的跳转和数据传递。HarmonyOS提供了Router模块,通过不同的url地址,可以方便地进行页面路由,轻松地访问不同的页面。本文将从页面跳转、页面返回和页面返回前增加一个询问…

Python安装失败,报0x80070643-安装时发生严重错误。

背景 之前安装了3.12.4,因为没用到,就用Revo Uninstaller Pro卸载了,连注册表都清理了。后面看到别人写的一个工具不符合预期,想对源码修改下,用到了Python,于是重新安装,出现上面报错。 解决方法尝试 因…

在Pycharm使用Github Copilot

文章目录 1.GitHub Copilot 是什么2.注册GitHub Copilot3.官方使用文档4.安装 GitHub Copilot插件5.在Pycharm中使用6.相关功能键7.启用或禁用 GitHub Copilot 1.GitHub Copilot 是什么 GitHub Copilot 是一款 AI 编码助手,可帮助你更快、更省力地编写代码&#xff…

基于javassm实现的物流管理系统

开发语言:Java 框架:ssm 数据库:mysql 系统页面展示 4.1登陆页面 平台登录:主要是做权限分配和安全限制等操作。可以把快递员,客户,派单员等人员角色区分开来。 4.2注册页面 用户注册界面:…

固定式土壤墒情监测仪—土壤状况进行长期跟踪和分析

TH-TS600 固定式土壤墒情监测仪是一种专门用于长期、连续、自动监测土壤墒情的设备。能够实时监测土壤的水分、温度、湿度等关键参数,确保农民和管理者能即时获取土壤状况信息,便于及时做出农业决策。由于是自动监测,数据采集的准确性和可靠性…

目标检测数据集 - 手机屏幕表面表面缺陷检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:手机屏幕表面缺陷检测数据集,真实采集高质量手机屏幕表面含缺陷图片数据,数据集含多款不同型号和品牌的手机屏幕表面图片数据,包括苹果手机屏、三星手机屏、华为手机屏等数据。数据标注标签包括 Bubble 气泡/水滴、Scr…

动手学深度学习(Pytorch版)代码实践 -深度学习基础-13Kaggle竞赛:2020加州房价预测

13Kaggle竞赛:2020加州房价预测 # 导入所需的库 import numpy as np import pandas as pd import torch import hashlib import os import tarfile import zipfile import requests from torch import nn from d2l import torch as d2l# 读取训练和测试数据 train_…

GIT回滚

1. 使用 git revert git revert 命令会创建一个新的提交,这个提交会撤销指定提交的更改。这通常用于公共分支(如 main 或 master),因为它不会重写历史。 git revert HEAD # 撤销最近的提交 # 或者指定一个特定的提交哈希值 …

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

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

成熟制程新周期:华虹半导体股价飙升,大摩超配背后的逻辑是何?

半导体全线异动,新周期确定已到? 今年以来,在众多利好消息驱动下,华虹半导体(01347.HK)、中芯国际(00981.HK)、复旦微电(01385.HK)等港股芯片概念标的&#…

分享一个自己写的PC版的Ai指令保存工具

今天给大家分享下我用非常古老的VB写的一个小工具。纯粹是每次电脑使用指令太麻烦了,所以写了一个小工具。这个工具支持5条指令,作为一般的应该够用了。使用场景:比如你要经常使用指令,但是觉得复制指令麻烦,那么你可以…

Thinkphp校园新闻发布系统源码 毕业设计项目实例

Thinkphp校园新闻发布系统源码 毕业设计项目实例 校园新闻发布系统模块: 用户模块:注册,登陆,查看个人信息,修改个人信息,站内搜索,新闻浏览等功能, 后台管理员模块:会员…

月薪没到20K,必啃的WebGIS系统技术栈,你练到哪一步了?

WebGIS(网络地理信息系统)是目前地理信息系统(GIS)开发的主流,它利用互联网技术来发布、共享和交互地理空间数据。 一个完整的WebGIS项目通常涉及以下几个主要环节:具备一定的理论知识,数据生产…

Spring是如何设计IOC容器的?BeanFactory ApplicationContext

BeanFactory是Spring框架中最底层的接口,用于实例化、配置和管理bean。它使用控制反转(IOC)模式,将对象的创建、管理和装配的职责从应用程序代码中转移给Spring容器。这样,应用程序代码就无需关心对象如何创建和装配&a…

【区块链】POS(Proof of Stake)权益证明算法深度解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 POS(Proof of Stake)权益证明算法深度解析引言1. POS基本…

基于Matlab的细胞计数图像处理系统(GUI界面有报告) 【含Matlab源码 MX_003期】

简介: 本文旨在解决生物血细胞数目统计的挑战,提出了基于图像处理的综合方案。通过MATLAB平台,我们设计并实现了一套完整的细胞图像处理与分析流程。在预处理阶段,采用图像增强和阈值分割等方法,有效地提高了细胞图像的…

Linux---rpm/yum包管理器

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一.RPM概述 RPM(Red Hat Package Manager)是Linux中的一种软件包管理格式也可以称为软件包管理器;它可以将软件包以二进制形式打包,并提供工具来安…

Conmi的正确答案——Vue默认加载方式设置为Yarn后怎么修改

Vue版本:3 1和2主要是搜索文件所在位置,Windows的这个文件一般在“C:\Users\{当前用户}”下,linux的非root情况下一般在“/home/{当前用户}”下。 1、打开“Everything”; 2、搜索“vuerc”; 3、打开“.vuerc”&#…