当前位置: 首页 > news >正文

测试覆盖率那些事

在测试过程中,会出现测试覆盖不全的情况,特别是工期紧张的情况下,测试的时间被项目的周期一压再压,测试覆盖概率不全就会伴随而来。

网上冲浪,了解一下覆盖率的文章,其中一篇感觉写的很不错,将测试的门派和武侠小说中的门派进行了比较,感觉很有意思;金庸武侠小说的门派大致分为【武当、华山、峨眉、少林、昆仑和崆峒派】,将测试覆盖率使用上分为了六大派【捷径,数据,专利,需求,代码,缺陷】,我比较看好数据派和代码派,嘻嘻;有兴趣的可以了解一下:聊聊测试覆盖率的六大门派

测试覆盖率是软件测试领域中用来量化测试活动对软件产品进行验证的程度的一个关键指标。它提供了关于测试用例集能否有效揭露潜在错误以及是否全面覆盖了软件不同方面的信息。

测试覆盖率有以下几个核心:

  1. 类型:

    • 语句覆盖率:测试是否执行了所有代码行。

    • 分支覆盖率(也称判定覆盖率):测试是否覆盖了所有决策点(如if语句)的所有分支。

    • 条件覆盖率:不仅关注分支,还关注每个逻辑条件是否独立地取真和取假。

    • 判定条件覆盖率(MCDC,Multiple Condition Decision Coverage):确保每个条件都能独立影响决策结果。

    • 路径覆盖率:测试是否覆盖了所有可能的控制流路径。

    • 代码覆盖率:衡量测试用例执行了多少源代码语句或指令。

  2. 需求覆盖率:评估测试用例是否覆盖了所有系统需求或规格说明文档中的功能点。确保每个需求都有对应的测试用例进行验证。

  3. 其他形式的覆盖率:除了上述基于代码和技术实现的覆盖率外,还有可能根据具体的业务需求和场景设定其他的覆盖率标准,比如功能模块覆盖率、接口覆盖率等。

  4. 局限性:虽然高的覆盖率意味着更多的代码或需求得到了测试,但并不能保证发现所有的bug。理论上,100%的覆盖率并不意味着软件完全没有问题,因为它无法检测到逻辑错误、边界条件错误或者未考虑到的异常情况。此外,过分追求高覆盖率会增加测试成本和时间开销。

  5. 应用:测试覆盖率主要用于指导测试策略优化,帮助识别哪些部分的测试还不够充分,进而有针对性地设计新的测试用例以提高整体的质量保障效果。同时,它也是评估软件质量控制过程的重要参考指标,在一些安全关键领域甚至可能是合规要求的一部分。

出现测试覆盖率不全的原因主要有客观和主观

客观因素主要有以下场景:

  1. 项目周期紧张:在快节奏的软件开发过程中,项目进度压力可能导致测试阶段的时间被压缩,测试人员没有足够的时间来详细设计和执行全面的测试计划,特别是对边缘案例和异常处理的测试。

  2. 资源有限:人力、物力和技术资源的限制可能使得测试团队无法对所有可能的场景进行全面测试,特别是在大型复杂的项目中,可能存在大量的交互组合和状态变化。

  3. 测试环境局限:受限于测试环境的搭建和配置,有些特定场景可能在现有环境下难以模拟或复现,造成这些场景得不到有效测试。

  4. 需求变更频繁:快速迭代的开发模式下,需求不稳定或频繁变更,测试人员疲于应对新的需求,可能会忽视对原有功能或新增功能的全面测试覆盖。

  5. 投放渠道众多:尤其是针对 C 端用户的拉新和促活活动,投放渠道非常多,涉及到不同在不同的环境运行,如 App 环境(iOS、安卓、鸿蒙)、H5 环境、小程序环境,同时涉及到不同设备、不同环境、不同操作系统版本、不同浏览器的打开、回流、引导下载等操作,兼容性测试覆盖不足可能导致在某些环境下出现问题。

  6. 流量情况悬殊:各个投放渠道流量差异较大,若上线前没有对各渠道的流量有充分的预估,没有进行压测,在高并发、大数据量或复杂业务场景下,性能问题可能无法被及时发现,从而导致线上问题。

主观因素主要以下场景:

  1. 粗心大意:测试人员可能对需求理解不够深入,误认为某些功能简单易懂,从而未能全面分析并设计出足够的测试场景,尤其是针对异常流程、分支流程和边界条件等。

  2. 侥幸心理:有时测试人员可能对潜在的风险估计不足,存在“应该不会有问题”的心理,不愿意花费更多的时间和精力去深入挖掘和验证那些不太常见或看似不太重要的测试场景。

  3. 需求理解不充分:测试用例只覆盖到了产品 PRD 里的显式功能,没有覆盖隐性需求,只进行了黑盒测试或者黑盒测试覆盖的场景不足。

  4. 经验主义:思维固化,认为老办法同样可以解决新问题,没有进一步思考对测试场景、测试数据、验证方式的不同之处。

  5. 开发知识欠缺:无法熟读代码,无法通过参加代码评审识别出研发代码改动之处及可能影响的范围,望码兴叹,无法熟练进行白盒测试,或者自动化测试代码健壮性较差,无法起到自动化回归的作用。

  6. 测试专业技能薄弱:测试专业技能、经验不足,力所不及,自然无法保证测试的充分性及验证场景的全面性。

  7. 用例颗粒度太大:编写用例的过程也是自己梳理信息的过程,用例颗粒度大,自然梳理的过程就不会太精细,自然遗漏验证场景的几率就会更大(虽然探索式测试的理念是不要求编写详细的测试用例,而是在测试过程中不断调整、优化或细化,但目前我们目前的环境不太适合探索式测试,因为绝大部分需求都要求快速上线,大部分需求都存在挤压排期的现场,在测试阶段很难有充足的时间进行探索式测试)。

  8. 信息互通不到位:与项目组其他成员沟通不到位,遗漏重要信息或没有对齐颗粒度,你以为的实际不是你以为,导致遗漏重要验证场景。

如何提升测试覆盖率?

  1. 详尽的需求理解和分析:确保对需求有全面准确的理解,包括正常流程、异常流程、边界条件等,并在此基础上设计详细的测试用例,尽量覆盖所有可能的操作路径和逻辑分支。

  2. 制定完善的测试策略:根据项目的特性和业务需求,制定包含单元测试、集成测试、系统测试、回归测试等在内的多层次测试策略,保证每个层次都能得到充分的测试覆盖。

  3. 使用自动化测试工具:利用自动化测试工具(如Selenium、JUnit、PyTest等)编写自动化测试脚本,尤其对于重复性高、复杂度大的测试场景,自动化测试能够大幅提升覆盖率和测试效率。

  4. 实施持续集成与持续测试:在代码提交后立即运行自动化测试,发现问题及时反馈,通过这种方式,可以实时保障代码改动后的测试覆盖率不下降。

  5. 探索式测试:鼓励测试人员采用探索式测试方法,即在测试过程中基于对系统的理解进行即时设计和执行测试,发现更多的隐藏问题和未被覆盖的场景。

  6. 静态代码分析和覆盖率工具:借助静态代码分析工具检查代码质量,同时结合动态测试覆盖率工具(如JaCoCo、Cobertura等),直观地了解当前测试覆盖情况,并针对性地补充遗漏的测试点。

  7. 定期审查和维护测试用例库:随着项目的发展和需求变更,应及时更新和优化测试用例库,确保测试用例的有效性和完整性。

  8. 引入缺陷预防机制:通过对历史缺陷的统计分析,找出缺陷高发区域,提前加强该部分的测试覆盖。

  9. 充足的测试资源投入:合理分配测试人力资源,确保有足够的时间和精力投入到测试设计和执行过程中,避免因为赶工而牺牲测试的质量和覆盖率。

  10. 明确测试目标:首先,需要明确测试的目标,即要测试哪些功能和模块。通过深入理解业务需求和产品特性,可以确保测试工作覆盖所有重要的功能点。

  11. 制定详细的测试计划:制定详细的测试计划,包括测试范围、测试方法、测试环境、测试数据等。确保测试计划覆盖所有需求点,并且针对每个需求点都有相应的测试用例。

  12. 编写全面的测试用例:根据测试计划,编写全面的测试用例,包括正常情况和异常情况的测试用例。考虑各种可能的输入和条件,确保测试用例的覆盖面广。

  13. 采用多种测试方法:结合使用黑盒测试、白盒测试、灰盒测试等多种测试方法,以便全面地检测软件的功能和性能。这有助于发现不同类型的问题和缺陷。

  14. 增加测试数据量:增加测试用例的数量和每个测试用例的输入数据量,以便更全面地覆盖软件的各种可能情况。这有助于发现一些与特定数据或数据组合相关的问题。

  15. 进行代码审查:代码审查可以发现代码中的潜在问题和缺陷,从而提高测试覆盖率和软件质量。通过团队协作,进行代码审查,可以确保代码的质量和可维护性。

  16. 持续反馈与改进:在测试过程中,及时收集和分析测试结果,根据反馈进行改进。不断调整测试策略和测试用例,以适应产品变化和新的需求。

  17. 团队协作与沟通:测试工作不是孤立的,需要与其他团队成员密切协作。通过定期沟通、分享经验和知识,可以共同提升测试覆盖率。

综上所述,提升测试覆盖率需要从多个方面入手,包括明确测试目标、制定详细的测试计划、编写全面的测试用例、采用多种测试方法、增加测试数据量、引入自动化测试、进行代码审查以及持续反馈与改进等。通过系统性的工作,可以逐步提升测试覆盖率,确保软件的质量和稳定性。

相关文章:

测试覆盖率那些事

在测试过程中,会出现测试覆盖不全的情况,特别是工期紧张的情况下,测试的时间被项目的周期一压再压,测试覆盖概率不全就会伴随而来。 网上冲浪,了解一下覆盖率的文章,其中一篇感觉写的很不错,将…...

Etcd 介绍与使用(入门篇)

etcd 介绍 etcd 简介 etc (基于 Go 语言实现)在 Linux 系统中是配置文件目录名;etcd 就是配置服务; etcd 诞生于 CoreOS 公司,最初用于解决集群管理系统中 os 升级时的分布式并发控制、配置文件的存储与分发等问题。基…...

Docker 安装 LogStash

关于LogStash Logstash,作为Elastic Stack家族中的核心成员之一,是一个功能强大的开源数据收集引擎。它专长于从各种来源动态地获取、解析、转换和丰富数据,并将这些结构化或非结构化的数据高效地传输到诸如Elasticsearch等存储系统中进行集…...

Selenium笔记

Selenium笔记 Selenium笔记 Selenium笔记element not interactable页面刷新 element not interactable "element not interactable"是Selenium在执行与网页元素交互操作(如点击、输入等)时抛出的一个常见错误。这个错误意味着虽然找到了对应的…...

ChatGPT :确定性AI源自于确定性数据

ChatGPT 幻觉 大模型实际应用落地过程中,会遇到幻觉(Hallucination)问题。对于语言模型而言,当生成的文本语法正确流畅,但不遵循原文(Faithfulness),或不符合事实(Factua…...

linux驱动开发面试题

1.linux中内核空间及用户空间的区别? 记住“22”,两级分段两级权限。 例如是32位的机器,从内存空间看:顶层1G是内核的,底3G是应用的;从权限看:内核是0级特权,应用是3级特权。 2.用…...

【AI】Ubuntu系统深度学习框架的神经网络图绘制

一、Graphviz 在Ubuntu上安装Graphviz,可以使用命令行工具apt进行安装。 安装Graphviz的步骤相对简单。打开终端,输入以下命令更新软件包列表:sudo apt update。之后,使用命令sudo apt install graphviz来安装Graphviz软件包。为…...

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.03.05-2024.03.10—(2)

论文目录~ 1.Debiasing Large Visual Language Models2.Harnessing Multi-Role Capabilities of Large Language Models for Open-Domain Question Answering3.Towards a Psychology of Machines: Large Language Models Predict Human Memory4.Can we obtain significant succ…...

AI解答——DNS、DHCP、SNMP、TFTP、IKE、RIP协议

使用豆包帮助我解答计算机网络通讯问题—— 1、DHCP 服务器是什么? DHCP 服务器可是网络世界中的“慷慨房东”哦🤣 它的全称是 Dynamic Host Configuration Protocol(动态主机配置协议)服务器。 DHCP 服务器的主要任务是为网络中的…...

【TypeScript系列】声明合并

声明合并 介绍 TypeScript中有些独特的概念可以在类型层面上描述JavaScript对象的模型。 这其中尤其独特的一个例子是“声明合并”的概念。 理解了这个概念,将有助于操作现有的JavaScript代码。 同时,也会有助于理解更多高级抽象的概念。 对本文件来讲,“声明合并”是指编…...

zookeeper基础学习之六: zookeeper java客户端curator

简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java…...

MySQL数据库操作学习(2)表查询

文章目录 一、表查询1.表字段的操作①查看表结构②字段的增加③字段长度/数据类型的修改④字段名的修改⑤删除字符段⑥清空表数据⑦修改表名⑧删除表 2、表数据查询3、where 字段4、聚合函数 一、表查询 1.表字段的操作 ①查看表结构 desc 表名; # 查看表中的字段类型&#…...

Java学习

目录 treeSet StringBuilder treeSet TreeSet 是 Java 中实现了 Set 接口的一种集合类,它使用红黑树数据结构来存储元素,放到TreeSet集合中的元素: 无序不可重复,但是可以按照元素的大小顺序自动排序。 TreeSet一般会和Iterator迭代器一起使…...

C#八皇后算法:回溯法 vs 列优先法 vs 行优先法 vs 对角线优先法

目录 1.八皇后算法(Eight Queens Puzzle) 2.常见的八皇后算法解决方案 (1)列优先法(Column-First Method): (2)行优先法(Row-First Method)&a…...

springboot整合swagger,postman,接口规范

一、postman介绍 1.1概述 工具下载 Postman(发送 http 请求的工具) 官网(下载速度比较慢):Download Postman | Get Started for Free 网盘下载:百度网盘 请输入提取码 1.2Http 请求格式 请求地址请求方法状…...

029—pandas 遍历行非向量化修改数据

前言 在 pandas 中,向量化计算是指利用 pandas 对象的内置方法和函数,将操作应用到整个数据结构的每个元素,从而在单个操作中完成大量的计算。 但在一些需求中,我们无法使用向量化计算,就需要迭代操作,本例…...

相机安装位置固定后开始调试设备供电公司推荐使用方法

摄像头安装位置固定后开始调试 设备供电:无电源设备需要连接12V/2A电源并连接到摄像机的DC端口,而有电源的摄像机可以直接连接到220V电源。 连接设备:如果是有线连接,请使用网线将设备连接到电脑(建议直接连接&#…...

AI视频批量混剪系统|罐头鱼AI视频矩阵获客

AI视频批量混剪系统助您轻松管理和编辑视频素材 如今,视频营销已成为企业推广的重要方式。为了满足用户对视频管理、发布和编辑的需求,《罐头鱼AI视频批量混剪系统》应运而生。这款智能化系统集成了多种功能,助您轻松管理和发布精彩视频内容…...

线程池学习-了解,自定义线程池

什么是线程池,这个池字是什么 线程池,主要利用池化思想,线程池,字符串常量池等 为什么要有一个线程池? 正常线程的创建:1,手动创建一个线程 2.给该线程分配任务,线程执行任务 3…...

CentOS7.9 安装SIPp3.6

epel里面的SIPp版本比较旧,先不要epel yum remove -y epel-release okay有很多CentOS软件,可以这样安装: 编辑 /etc/yum.repos.d/okay.repo,内容为: [okay] nameExtra OKay Packages for Enterprise Linux - $basearc…...

DeerFlow效果展示:自动生成的深度研究报告与播客内容惊艳分享

DeerFlow效果展示:自动生成的深度研究报告与播客内容惊艳分享 1. DeerFlow核心能力概览 DeerFlow作为一款深度研究智能助手,整合了语言模型、网络搜索和代码执行能力,能够自动完成从信息收集到内容生成的全流程工作。其核心功能亮点包括&am…...

Wan2.2-I2V-A14B企业应用:法律文书解读AI动画视频生成系统

Wan2.2-I2V-A14B企业应用:法律文书解读AI动画视频生成系统 1. 系统概述与核心价值 法律行业每天需要处理大量文书材料,传统的人工解读和可视化呈现方式效率低下且成本高昂。Wan2.2-I2V-A14B法律文书解读AI动画视频生成系统正是为解决这一痛点而生。 这…...

多品种小批量时代的排产革命:JVS-APS智能排产突破交付周期瓶颈

"紧急订单插入,全产线排程推倒重来"、"设备冲突、物料短缺让排产计划沦为纸上谈兵"、"明明产能充足,订单交付周期却比同行长30%"——这些困境正在困扰着越来越多的制造企业。在现代制造业中,多品种小批量生产模…...

灵毓秀-牧神-造相Z-Turbo进阶玩法:结合提示词生成不同风格的灵毓秀

灵毓秀-牧神-造相Z-Turbo进阶玩法:结合提示词生成不同风格的灵毓秀 1. 认识灵毓秀-牧神-造相Z-Turbo 1.1 模型特点概述 灵毓秀-牧神-造相Z-Turbo是一款基于Xinference部署的专用文生图模型,专注于生成《牧神记》中灵毓秀这一角色的高质量图像。相比通…...

像素剧本圣殿部署指南:Qwen2.5-14B-Instruct在生产环境中稳定运行的GPU显存优化技巧

像素剧本圣殿部署指南:Qwen2.5-14B-Instruct在生产环境中稳定运行的GPU显存优化技巧 1. 项目概述 像素剧本圣殿(Pixel Script Temple)是一款基于Qwen2.5-14B-Instruct大模型深度微调的专业剧本创作工具。它将先进的AI推理能力与独特的8-Bit…...

seo排名大师软件好用吗

SEO排名大师软件好用吗?深入解析其优缺点 在当今数字化营销的环境中,SEO(搜索引擎优化)已成为网站提升流量、吸引潜在客户的重要手段。而SEO排名大师软件作为一种工具,是否真的能帮助我们实现目标?本文将深…...

windows版vasp-6.5.1非Cygwin版

推荐使用oneapi版本,这个版本性能要好一点。 1.解压压缩包。 Gromacs&Vasp软.件.交.流:962946828 2.用VASP安装器添加系统环境变量(选择bin目录所在目录的父级目录)。 3.测试命令(在cmd或者powershell执行&#…...

深入解析STM32 map文件:从编译到内存优化的关键步骤

1. 为什么STM32开发者必须掌握map文件分析 第一次接触STM32的map文件时,我和大多数新手一样感到一头雾水。这个由编译器自动生成的文本文件,乍看就像天书般难以理解。直到有次项目遇到内存不足的紧急情况,我才真正体会到map文件的价值——它不…...

如何用Wi-Fi信号实现非接触检测:ESP-CSI完整指南

如何用Wi-Fi信号实现非接触检测:ESP-CSI完整指南 【免费下载链接】esp-csi Applications based on Wi-Fi CSI (Channel state information), such as indoor positioning, human detection 项目地址: https://gitcode.com/GitHub_Trending/es/esp-csi 想要让…...

ARMv8虚拟化性能优化指南:TLB的ASID和VMID到底怎么用?

ARMv8虚拟化性能优化指南:TLB的ASID和VMID实战解析 虚拟化技术在云计算和容器化场景中已成为基础设施的核心支柱,而ARM架构凭借其能效优势,正逐步渗透到数据中心领域。但在高密度虚拟化环境中,内存访问性能往往成为瓶颈——我们曾…...