🔥个人主页: 中草药

 🔥专栏:【Java】登神长阶 史诗般的Java成神之路


测试分类

了解各种各样的测试方法分类,不是为了墨守成规按照既定方法区测试,而是已了解思维为核心,并了解一些专业名词

根据测试方法分类

白盒测试

白盒测试(又称结构测试、透明盒测试)是一种基于对系统内部结构、代码逻辑和实现细节充分了解的测试方法。测试人员需要查看代码、算法或架构设计,针对性地设计测试用例,验证内部逻辑的正确性。白盒测试主要分为两类

静态测试

通过人工或工具分析代码的结构、规范、逻辑,不实际执行程序,发现潜在问题。包括:

  • 桌面检查:人工阅读代码 / 文档,初步检查逻辑错误、代码规范等(最基础的静态自查)。
  • 代码审查:团队(如评审会议)对代码进行正式检查,从逻辑、性能、安全等多维度发现缺陷。
  • 代码走查:模拟代码执行流程(但不运行),“走读” 代码逻辑,检查每一步的合理性。
  • 代码扫描工具:借助自动化工具(如 SonarQube、PMD 等),批量检测语法错误、安全漏洞、代码异味(如重复代码、冗余逻辑)。

动态测试

动态测试通过执行测试用例,观察代码运行时的行为,验证内部逻辑是否正确。主要包含以下六种,我们以代码块为例

if(A && B){func1();
}
if(C && D){func2();
}

语句覆盖

每个语句至少执行一次。

针对A and B:A为T且B为T

针对C or D:C为T或者D为T

得出用例:

用例1: A为T,B为T,C为T,D为F

判定覆盖

A and B 为 T        ->        A=T B=T        (1)

A and B 为 F        ->        A=T B=F 或 A=F B=T 或 A=F B=F        (2)

C or D 为 T        ->        C=T D=T 或 C=T D=F 或 C=F D=T        (3)

C or D 为 F        ->        C=F D=F        (4)

得出用例:

用例1:A=T B=T C=T D=F 满足(1)(3)

用例2:A=T B=F C=F D=F 满足(2)(4)

条件覆盖

A        T        F

B        T        F

C        T        F

D        T        F

        (5)(6)

得出用例:

用例1:A=T B=T C=T D=T 

用例2:A=F B=F C=F D=F

判定条件覆盖

结合判定覆盖和条件覆盖

得出用例:

用例1:A=T B=T C=T D=T 满足(1) (3) (5)

用例2:A=F B=F C=F D=F 满足(2) (4) (6)

条件组合覆盖

A        B        C        D

T        T         T        T

T        F         T        T

F        T         T        T

F        F         T        T

每一行都可以作为一个用例

路径覆盖

以冒泡排序为例

public static void sort(int[] array) {for (int i = 0; i < array.length - 1; i++) {for (int j = 0; j < array.length - 1 - i; j++) {if (array[j] > array[j + 1]) {int temp = array[j];array[j] = array[j + 1];array[j + 1] = temp;}}}
}

需要覆盖的测试路径:

1) 3,12

2) 3,4,3,12

3) 3,4,5,4,3,12

4) 3,4,5,678,4,3,12

黑盒测试

黑盒测试是一种不关注系统内部结构和实现细节的测试方法。

测试人员将系统视为一个 “黑盒子”,只通过输入数据和观察输出结果来验证系统是否符合需求规格说明书的要求。因此黑盒测试又称为数据驱动测试,只注重软件功能

优点:不需要了解程序内部的代码以及实现,不关注软件内部的实现。从用户角度出发设计测试用例,很容易的知道用户会用到哪些功能,会遇到哪些问题,锻炼测试人员的产品思维

缺点:不可能覆盖所有代码

灰盒测试

灰盒测试是介于黑盒测试和白盒测试之间的一种测试方法。测试人员不需要完全了解系统内部的所有细节,但会基于部分内部结构信息(如接口设计、数据库结构、模块交互逻辑)来设计测试用例,兼顾功能验证和内部逻辑检查。

灰盒测试多用于集成测试阶段,不仅关注输入输出的正确性,也关注程序内部的情况


根据测试阶段分类

单元测试

与编码同步进行,针对软件的最小组成单元(通常是函数、方法、类或模块)进行测试,主要采用白盒测试方法,从被测对象的内部结构出发设计测试用例。它是测试金字塔(单元测试→集成测试→系统测试)的基石,也是敏捷开发、持续集成(CI)等流程的核心支撑。

核心目标

  • 验证单元功能正确性:确保单个函数 / 方法在各种输入下返回预期结果,符合设计逻辑。
  • 早期发现缺陷:在开发初期(编码阶段)暴露问题,避免缺陷流入后续集成或系统测试阶段,降低修复成本。
  • 支持快速迭代:为代码重构、优化或需求变更提供 “安全网”,确保修改后原有功能不受影响。

java中提供很多单元测试框架,如Junit提供很多注解与断言函数,有效提升开发单元测试脚本效率

测试阶段:编码后或者编码前(TDD)

测试对象:最小模块

测试人员:白盒测试工程师或开发工程师

测试依据:代码和注释+详细设计文档

测试方法:白盒测试

测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试


集成测试

集成测试(也称 “组装测试”)是在单元测试通过后,将多个已测试的模块(或组件)按照设计要求组合起来,验证模块之间的接口、交互逻辑是否正确的测试过程。

核心目标

  • 发现模块间交互的问题:例如模块 A 传递给模块 B 的数据格式错误、接口参数不匹配、依赖关系冲突(如模块 A 未完成时模块 B 提前调用)等。
  • 验证 “模块组合” 是否符合设计预期:单个模块功能正确≠组合后功能正确,集成测试确保模块协作时整体逻辑无误。

测试阶段:一般单元测试之后进行

测试对象:模块间的接口

测试人员:白盒测试工程师或开发工程师

测试依据:单元测试的模块+概要设计文档

测试方法:黑盒测试与白盒测试相结合

测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响


系统测试

系统测试是在集成测试通过后,将整个软件系统作为一个完整的实体,在接近真实的环境中,验证系统是否满足需求规格说明书(用户需求)的测试过程。

测试阶段:集成测试通过之后

测试对象:整个系统(软、硬件)

测试人员:吴黑盒测试工程师

测试依据:旁需求规格说明文档

测试方法:黑盒测试

测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等


冒烟测试

冒烟测试起源于硬件测试:如果电路板通电后 “冒烟”(无法正常启动),就无需进行后续复杂测试。在软件中,它是对软件最核心、最基础功能的快速验证

通常在软件开发早期阶段进行,目的是判断软件是否 “可测”—— 即是否稳定到足以支持后续更详细的测试(如集成测试、系统测试)

核心目标

  • 快速排查阻断性缺陷:验证软件的核心流程是否能跑通,是否存在导致测试无法进行的严重问题(如无法启动、登录失败、核心功能崩溃等)。
  • 过滤 “无效版本”:避免将时间浪费在明显不稳定的版本上(例如开发刚提交的版本连基本功能都用不了,就无需进行耗时的系统测试)。

回归测试

回归测试是指在软件发生修改(如修复 bug、新增功能、优化代码)后,重新验证原有功能是否依然正常的测试过程。其核心逻辑是:“修改可能引入新问题,需要确认历史功能未受影响”。

在软件开发的后期,通常在每次代码修改或新增功能后执行

核心目标

  • 发现 “修改后遗症”:防止因代码变更(即使是微小修改)导致原有正常功能出现异常(例如修复了支付 bug,却导致订单状态更新失败)。
  • 保障软件稳定性:确保软件在迭代过程中,历史功能的正确性不被破坏,维持整体质量。

根据实施组织分类

α 测试(Alpha Testing)

α 测试是软件开发接近完成时,由开发团队内部或指定的内部用户(如公司员工、QA 团队)在模拟的用户环境中进行的测试。

核心特点

  • 测试人员:以内部人员为主,不对外开放。
  • 测试环境:通常是开发方搭建的 “模拟用户环境”(尽量接近真实使用场景,但仍受开发方控制)。
  • 测试阶段:在软件功能基本完成、但可能仍有较多缺陷时进行(早于 β 测试)。
  • 主要目的:发现软件的功能性缺陷、逻辑错误、界面问题等,验证核心功能是否可用,排除明显的 “硬伤”。
  • 结果处理:测试中发现的问题会直接反馈给开发团队,快速修复后再进入下一阶段。

β 测试(Beta Testing)

β 测试是软件基本完成开发、经过 α 测试修复主要问题后,由真实用户在实际使用环境中进行的测试,相当于 “公开试用”。

核心特点

  • 测试人员:外部用户(可能是特定用户群体,也可能是公开招募的试用者)。
  • 测试环境:用户自己的真实环境(如个人电脑、手机等),不受开发方控制。
  • 测试阶段:晚于 α 测试,是发布前的最后一轮大规模测试。
  • 主要目的:收集用户实际使用中的反馈,发现 α 测试中未暴露的问题(如兼容性问题、性能瓶颈、用户体验缺陷等),验证软件在真实场景下的稳定性。
  • 结果处理:用户反馈的问题会被整理后交给开发团队,作为最终优化的依据,修复后即可正式发布。

自动化测试

自动化测试是指通过工具、脚本或代码自动执行测试用例,替代或辅助人工测试的过程。其核心是将重复、机械的测试操作(如点击按钮、输入数据、验证结果等)转化为可自动运行的程序,从而提高测试效率、降低人为误差,并支持软件在快速迭代中持续验证质量。

Web自动化测试

Web 自动化测试是指通过自动化工具或脚本模拟用户在 Web 浏览器中的操作(如点击按钮、输入文本、跳转页面等),对 Web 应用的功能、兼容性、性能等进行自动化验证的测试手段。

要实现Web的自动化测试 我们需要 Web+驱动+Selenium

这三者的交互关系如下所示

1. 通过selenium编写的自动化脚本代码中在ChromeDriverService中创建一个服务

2.通过创建好的服务打开webdriver,安装在本地的驱动服务IP为localhost,PORT为ChromeDriverService中创建的端口号,该服务地址为selenium向webdriver发送请求的服务地址。

3.向浏览器驱动程序发送HTTP请求,浏览器驱动程序解析请求,打开浏览器,并获得sessionid,如果再次对浏览器操作需携带此id

4.打开浏览器后,所有的selenium的操作(访问地址,查找元素等)均通过创建好的服务链接到webdriver,然后使用execute发送请求

5.驱动收到请求并对请求进行解析,转成浏览器能够解析的脚本并发送给浏览器,浏览器通过请求内容执行对应动作

6.浏览器再把执行的动作结果通过浏览器驱动程序返回给测试脚本


<dependencies><dependency><groupId>io.github.bonigarcia</groupId><artifactId>webdrivermanager</artifactId><version>5.8.0</version><scope>test</scope></dependency><dependency><groupId>org.seleniumhq.selenium</groupId><artifactId>selenium-java</artifactId><version>4.0.0</version></dependency>
</dependencies>

WebDriverManager是一个开源Java库,以完全自动化的方式对Selenium WebDriver所需的驱动程序(如chromedriver、geckodriver、msedgedriver等)进行管理(即下载、设置和维护),自版本5起,WebDriverManager还提供了其他相关功能,如发现本地系统中安装的浏览器的能力,构建WebDriver对象(如ChromeDriver、FirefoxDriver、EdgeDriver等)

Selenium 是目前最流行的开源 Web 自动化测试框架,由一系列工具组成,支持跨浏览器、跨平台、多编程语言,广泛用于 Web 应用的功能测试和回归测试。

用一个demo来验证它的功能

import io.github.bonigarcia.wdm.WebDriverManager;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;public class AutoTest {public void test01(){WebDriverManager.chromedriver().setup();ChromeOptions options = new ChromeOptions();//允许访问所有连接options.addArguments("--remote-allow-origins=*");WebDriver driver = new ChromeDriver(options);//请求地址driver.get("https://www.baidu.com/");driver.findElement(By.xpath("//*[@id=\"chat-textarea\"]")).sendKeys("Java");driver.findElement(By.xpath("//*[@id=\"chat-submit-button\"]")).click();driver.quit();}
}


善于利用零星时间的人,才会做出更大的成绩来。——华罗庚

🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀

以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐

  制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸 

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

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

相关文章

【Python办公】快速比较Excel文件中任意两列数据的一致性

目录 专栏导读 项目背景 技术选型 核心技术栈 选型理由 功能特性 🎯 核心功能 🔧 辅助功能 架构设计 整体架构 设计模式 核心代码解析 1. 类初始化和UI设置 2. 文件选择和数据加载 3. 数据比较核心算法 4. 结果导出功能 界面设计详解 布局结构 UI组件选择 性能优化 1. 内存…

nginx的诞生背景、核心优势、与 Apache 的对比

下面用“3 个 1 分钟”帮你快速建立 Nginx 的整体印象&#xff1a; 1 分钟了解它为何诞生&#xff0c;1 分钟看懂它的 5 大核心优势&#xff0c;再花 1 分钟搞清和 Apache 的关键差异。诞生背景&#xff08;2002-2004&#xff09; • 作者&#xff1a;俄罗斯系统工程师 Igor Sy…

算法题打卡力扣第169题:多数元素(easy)

文章目录题目描述解法一&#xff1a;暴力解解法二 排序法解法三&#xff1a;Boyer-Moore 投票算法 (最优解)题目描述 解法一&#xff1a;暴力解 定义一个数组C用于存放nums数组中每个数出现的次数&#xff0c;然后再遍历C&#xff0c;判断C【i】是否大于⌊ n/2 ⌋&#xff0c;…

A6.0:PCB的设计流程

第一步&#xff1a;导入网表第二步&#xff1a;结构导入和板框定义1.导入结构文件:加载DXF格式的机械结构图(含板框、定位孔、限高区)&#xff0c;确保元件布局符合物理约束。2.固定器件预放置:将接插件、按键、散热器等结构敏感元件锁定到指定位置&#xff0c;避免后期调整冲突…

深度学习在金融订单簿分析与短期市场预测中的应用

金融订单簿记录了市场上买卖双方的委托订单信息&#xff0c;包括价格、数量、订单类型等关键要素。其数据具有以下特点&#xff1a; 高频性&#xff1a;订单在极短时间内不断产生与变化&#xff0c;数据更新速度极快&#xff0c;每秒可能产生大量新订单。序列性&#xff1a;订单…

C++基础算法——贪心算法

思想&#xff1a;总是做出在当前看来是最好的选择 例题一、排队打水问题 n个人&#xff0c;r个水龙头&#xff0c;花费时间最少的安排&#xff1f;&#xff08;包含等待时间&#xff09; #include<iostream> #include <bits/stdc.h> using namespace std; int ma…

事务和锁(进阶)

事务和锁&#xff08;进阶&#xff09;一.回顾事务1.什么是事务2 为什么要使用事务3 怎么使用事务二.InnoDB和ACID模型三. 如何实现原子性四.如何实现持久性五.隔离性实现原理1.事务的隔离性2.事务的隔离级别3.锁1&#xff09;锁信息2&#xff09; 共享锁和独占锁-Shared and E…

【Mentor Xpedition】预习一下

这个软件不同于一般的PCB设计软件&#xff0c;采用独特的中心库形式&#xff0c;相比cadence的SCH和PCB更紧凑&#xff0c;或者说本就是一家人&#xff0c;不像orcad和allegro强行捆在一起。 基本symbol给原理用&#xff0c;cell给PCB用。

通过代码认识 CNN:用 PyTorch 实现卷积神经网络识别手写数字

目录 一、从代码看 CNN 的核心组件 二、准备工作&#xff1a;库导入与数据加载 三、核心&#xff1a;用代码实现 CNN 并理解各层作用 1.网络层结构 2.重点理解&#xff1a;卷积层参数与输出尺寸计算 四、训练 CNN 五、结果分析 卷积神经网络&#xff08;CNN&#xff09;…

基于SpringBoot和Thymeleaf开发的英语学习网站

角色&#xff1a; 管理员、用户 技术&#xff1a; SpringBoot、Thymeleaf、MySQL、MyBatis、jQuery、Bootstrap 核心功能&#xff1a; 这是一个基于SpringBoot的英语学习平台&#xff0c;旨在为用户提供英语学习资料&#xff08;如书籍、听力、单词&#xff09;的管理和学习功能…

把 AI 塞进「智能跳绳」——基于 MEMS 传感器的零样本卡路里估算器

标签&#xff1a;MEMS、卡路里估算、零样本、智能跳绳、TinyML、RISC-V、低功耗、边缘 AI ---- 1. 背景&#xff1a;为什么跳绳要「算卡路里」&#xff1f; 全球 1.5 亿人把跳绳当日常运动&#xff0c;却苦于&#xff1a; • 机械计数器误差大&#xff1b; • 手机 App 需联网…

矿用随钻测量现场应用中,最新的MEMS陀螺定向短节的优势是什么?

在当代矿业开发向深部复杂地层进军的过程中&#xff0c;随钻测量技术是控制钻井定向打孔质量和提升长距离钻探中靶精度的核心手段&#xff0c;煤矿井下定向钻孔、瓦斯抽放孔、探放水孔等关键工程面临着一系列特殊挑战&#xff1a;强磁干扰、剧烈振动、空间受限等恶劣条件。最新…

Spring Boot 使用 RestTemplate 调用 HTTPS 接口时报错:PKIX path building failed 解决方案

在使用 Spring Boot RestTemplate 调用 HTTPS 接口时&#xff0c;很多同学会遇到类似下面的报错&#xff1a;javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certif…

【C语言入门级教学】sizeof和strlen的对⽐

1.sizeof和strlen的对⽐ 1.1 sizeof sizeof 计算变量所占内存空间⼤⼩的&#xff0c;单位是字节&#xff0c;如果操作数是类型的话&#xff0c;计算的是使⽤类型创建的变量所占内存空间的⼤⼩。 sizeof 只关注占⽤内存空间的⼤⼩&#xff0c;不在乎内存中存放什么数据。 ⽐如&a…

线程安全及死锁问题

系列文章目录 初步了解多线程-CSDN博客 目录 系列文章目录 前言 一、线程安全 1. 线程安全问题 2. 问题原因分析 3. 问题解决办法 4. synchronized 的优势 1. 自动解锁 2. 是可重入锁 二、死锁 1. 一个线程一把锁 2. 两个线程两把锁 3. N 个线程 M 把锁 4. 死锁…

2025年8月无人驾驶技术现有技术报告

第1章 引言 无人驾驶技术作为21世纪交通运输领域最具革命性的技术创新之一&#xff0c;正在深刻地改变着人类的出行方式和生活模式。进入2025年&#xff0c;随着人工智能、5G通信、高精度传感器等关键技术的快速发展与成熟&#xff0c;无人驾驶技术已从实验室的概念验证阶段逐…

CETOL 6σ 助力康美医疗(CONMED Corporation)显著提升一次性穿刺器产品合格率

概述 康美医疗 (CONMED Corporation)将 Sigmetrix 的 CETOL 6σ 公差分析软件应用于一次性穿刺器的结构优化。该装置是微创外科技术的一次早期突破。在设计阶段&#xff0c;团队发现“测量临界间隙”存在尺寸偏差、超出预期范围&#xff0c;可能在手术中造成患者皮肤损伤&…

LaunchScreen是啥?AppDelegate是啥?SceneDelegate是啥?ContentView又是啥?Main.storyboard是啥?

虽然我很想挑战一下swiftui,但是精力真的是有限&#xff0c;把精力分散开不是一个很好的选择&#xff0c;so swiftui浅尝则止了&#xff0c;目前的精力在html上面。 AppDelegate todo SceneDelegate todo ContentView 最明显的就是这个&#xff0c;当编辑的时候&#xff0c;页面…

垃圾回收机制(GC)

目录 垃圾回收机制 引用计数法 可达性分析算法 垃圾回收算法 标记清除算法 复制算法 标记压缩算法 JVM中一次完整的GC&#xff08;分代收集算法&#xff09; 在新生代中 在老年代中 空间分配担保原则 对象从新生代进入老年代的几种情况‌ Young GC 和 Full GC 垃…

DNS域名系统

DNS域名系统一、什么是DNS?二、DNS的域名层级1. 根域2. 顶级域3. 二级域4. 三级域&#xff08;子域&#xff09;5. 主机名三、DNS服务器的分类四、DNS的解析过程五、DNS的记录类型六、FQDN&#xff08;完全限定域名&#xff09;一、什么是DNS? DNS&#xff08;Domain Name S…