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

软件测试(平铺版本)

目录

黑盒测试:

定义:

示例:登录功能的黑盒测试

适合使用黑盒测试的情况

几种常见的黑盒测试方法:

1. 等价类划分(Equivalence Partitioning)

2. 边界值分析(Boundary Value Analysis)

3. 决策表测试(Decision Table Testing)

4. 状态迁移测试(State Transition Testing)

5. 场景测试(Scenario Testing)

6. 错误推测(Error Guessing)

常用的黑盒测试工具:

白盒测试:

定义:

示例:成绩计算函数的白盒测试

测试用例

适合使用白盒测试的情况

几种常见的白盒测试方法:

1. 语句覆盖(Statement Coverage)

2. 分支覆盖(Branch Coverage)

3. 路径覆盖(Path Coverage)

4. 条件覆盖(Condition Coverage)

5. 多条件覆盖(Multiple Condition Coverage)

6. 循环覆盖(Loop Coverage)

7. 数据流测试(Data Flow Testing)

常用的白盒测试工具

面试问题:

项目用例类(功能测试):

工作流程类

测试流程


黑盒测试:

定义:

  • 黑盒测试专注于软件的功能性,不考虑内部代码实现。测试人员通过输入和输出来验证软件功能是否符合预期。

应用场景:

黑盒测试用例主要关注软件的功能性,不考虑内部实现。测试用例通常基于需求文档或用户故事来编写。

示例:登录功能的黑盒测试

假设我们在测试一个简单的用户登录功能,功能需求如下:

  • 用户可以输入用户名和密码进行登录。
  • 用户名和密码必须非空。
  • 若输入正确的用户名和密码,用户成功登录,进入主页。
  • 若用户名或密码错误,显示错误信息。
  • 若用户名或密码为空,显示提示信息。

适合使用黑盒测试的情况

  1. 功能验证

    • 当你需要验证软件功能是否符合需求和用户期望时,黑盒测试是理想选择。这包括功能测试、界面测试、用户体验测试等。
  2. 用户视角测试

    • 黑盒测试模拟用户实际操作,不需要了解内部代码,是从用户视角出发进行的测试。
  3. 系统级别的集成测试

    • 当你需要测试不同模块或系统之间的交互时,黑盒测试可以帮助验证集成点是否工作正常。
  4. 回归测试

    • 在软件发生变化或修复缺陷后,黑盒测试常用于回归测试,确保新代码没有引入新的问题。
  5. 验收测试

    • 在项目交付之前进行的最终测试,常用黑盒测试来验证软件是否满足合同或需求文档的所有要求。

几种常见的黑盒测试方法:

1. 等价类划分(Equivalence Partitioning)

**描述**:
将输入数据划分为若干个等价类,每个等价类中的数据在功能上是等效的。测试只需选择每个等价类中的一个代表作为测试用例。

**示例**:
假设有一个输入字段要求用户输入1到100之间的整数。那么可以将输入数据划分为以下等价类:
- 有效等价类:1-100
- 无效等价类:小于1、大于100、非整数输入

2. 边界值分析(Boundary Value Analysis)

**描述**:
边界值分析侧重于测试输入数据的边界值,因为边界值往往是错误的高发区。测试通常选取边界值以及边界值的附近值。

**示例**:
在前述1到100之间的整数输入场景中,边界值可以是:
- 边界值:1, 100
- 边界附近值:0, 2, 99, 101

3. 决策表测试(Decision Table Testing)

**描述**:
决策表是一种系统地表示和分析复杂业务规则的方法,适用于有多种输入条件组合的情况。决策表列出了所有可能的输入条件及其对应的输出。

**示例**:
假设一个登录系统有两个输入条件:用户名和密码。决策表可能如下:
| 用户名有效 | 密码有效 | 输出           |
|------------|----------|----------------|
| 否         | 否       | 登录失败       |
| 否         | 是       | 登录失败       |
| 是         | 否       | 登录失败       |
| 是         | 是       | 登录成功       |

4. 状态迁移测试(State Transition Testing)

**描述**:
状态迁移测试适用于具有不同状态和状态之间转换的软件系统。通过测试不同状态之间的转换,确保系统在不同状态下的行为正确。

**示例**:
一个简单的自动售货机可以有以下状态:
- 空闲
- 接受硬币
- 选择商品
- 退币
- 出货

状态迁移测试会验证在每个状态下的行为以及状态之间的转换。

5. 场景测试(Scenario Testing)

**描述**:
场景测试通过模拟用户的实际使用场景,来验证软件在真实使用情况下的工作情况。这种方法特别适合用户体验和集成测试。

**示例**:
对于一个电商网站的购物车功能,一个测试场景可能包括:
- 用户登录
- 浏览商品
- 添加商品到购物车
- 修改购物车中的商品数量
- 结算并支付

6. 错误推测(Error Guessing)

**描述**:
错误推测依赖于测试人员的经验和直觉,通过推测可能发生错误的地方来设计测试用例。这种方法常用于发现潜在的隐蔽错误。

**示例**:
测试人员可能会猜测在用户输入特殊字符(如`$`、`%`、`#`)或极端数据(如空字符串、极长字符串)时,系统可能会出现问题。

### 7. 正交排列测试(Orthogonal Array Testing)

**描述**:
正交排列测试是一种系统的测试方法,用于减少测试用例的数量而不降低测试覆盖率。它通过数学模型来选择能覆盖所有参数组合的最小测试集。

**示例**:
假设有三个输入参数,每个参数有三个可能的值。正交排列测试会选择一组测试用例,使得所有参数组合尽可能被覆盖。

常用的黑盒测试工具:

Selenium:用于Web应用的自动化测试。
QTP/UFT:用于功能和回归测试的自动化工具。
Postman:用于API测试。
JMeter:用于性能测试和负载测试。

白盒测试:

定义:

  • 白盒测试关注软件的内部结构和实现,测试人员需要了解代码逻辑,重点在于代码路径、循环和条件。

应用场景:

白盒测试用例关注软件的内部实现,测试代码逻辑、分支和路径。通常基于代码结构编写。

示例:成绩计算函数的白盒测试

假设我们在测试一个计算学生成绩的函数,代码如下:

def calculate_grade(score):if score >= 90:return "A"elif score >= 80:return "B"elif score >= 70:return "C"elif score >= 60:return "D"else:return "F"
测试用例

用例1:成绩为95

  • 用例编号:WBT001
  • 用例名称:成绩为95
  • 前置条件:无
  • 测试步骤
    1. 调用函数calculate_grade,传入参数95
  • 预期结果
    • 返回"A"

适合使用白盒测试的情况

  1. 单元测试

    • 白盒测试广泛用于单元测试,开发人员对代码的每个单元(如函数、方法)进行彻底检查,确保逻辑正确。
  2. 代码覆盖率

    • 当你需要确保代码的所有路径、分支和条件都被测试覆盖时,白盒测试是必不可少的。
  3. 性能优化

    • 在需要进行代码优化或性能调优时,通过白盒测试可以深入了解代码的执行路径和瓶颈。
  4. 安全测试

    • 需要验证内部实现是否存在安全漏洞(如SQL注入、缓冲区溢出)时,白盒测试可以检查代码的潜在风险点。
  5. 复杂逻辑验证

    • 对于包含复杂算法或业务逻辑的代码,白盒测试有助于全面验证逻辑的正确性和健壮性。

几种常见的白盒测试方法:

1. 语句覆盖(Statement Coverage)

**描述**:
语句覆盖测试的目标是确保程序中的每个语句至少被执行一次。通过这种方式,可以发现一些基本的语法错误和异常。

**示例**:
```python
def check_even_odd(num):
    if num % 2 == 0:
        return "Even"
    else:
        return "Odd"
```
测试用例:
- 输入4,得到"Even"
- 输入5,得到"Odd"

2. 分支覆盖(Branch Coverage)

**描述**:
分支覆盖测试的目标是确保程序中每个条件分支(如`if`和`else`)至少被执行一次。通过测试所有分支路径,可以检查条件判断的正确性。

**示例**:
```python
def check_positive_negative(num):
    if num > 0:
        return "Positive"
    elif num < 0:
        return "Negative"
    else:
        return "Zero"
```
测试用例:
- 输入1,得到"Positive"
- 输入-1,得到"Negative"
- 输入0,得到"Zero"

3. 路径覆盖(Path Coverage)

**描述**:
路径覆盖测试的目标是确保程序中所有可能的执行路径都被测试过。这种方法比分支覆盖更严格,因为它不仅检查分支,还检查分支的组合路径。

**示例**:
```python
def complex_condition(a, b):
    if a > 0:
        if b > 0:
            return "A and B are positive"
        else:
            return "A is positive, B is non-positive"
    else:
        return "A is non-positive"
```
测试用例:
- 输入a=1, b=1,得到"A and B are positive"
- 输入a=1, b=-1,得到"A is positive, B is non-positive"
- 输入a=-1, b=1,得到"A is non-positive"

4. 条件覆盖(Condition Coverage)

**描述**:
条件覆盖测试的目标是确保每个条件表达式的每个布尔子表达式都至少取过一次`True`和一次`False`值。这种方法可以发现复杂逻辑中的问题。

**示例**:
```python
def check_conditions(a, b):
    if (a > 0 and b > 0):
        return "Both positive"
    else:
        return "One or both non-positive"
```
测试用例:
- 输入a=1, b=1,得到"Both positive"
- 输入a=1, b=-1,得到"One or both non-positive"
- 输入a=-1, b=1,得到"One or both non-positive"
- 输入a=-1, b=-1,得到"One or both non-positive"

5. 多条件覆盖(Multiple Condition Coverage)

**描述**:
多条件覆盖测试的目标是确保每个条件表达式中所有可能的布尔子表达式组合都被测试过。这种方法比条件覆盖更严格。

**示例**:
```python
def check_multi_conditions(a, b):
    if (a > 0 or b > 0):
        return "At least one positive"
    else:
        return "Both non-positive"
```
测试用例:
- 输入a=1, b=1,得到"At least one positive"
- 输入a=1, b=-1,得到"At least one positive"
- 输入a=-1, b=1,得到"At least one positive"
- 输入a=-1, b=-1,得到"Both non-positive"

6. 循环覆盖(Loop Coverage)

**描述**:
循环覆盖测试的目标是确保程序中的每个循环结构(如`for`、`while`)在不同的循环次数下(如0次、1次、多次)都被测试过。这种方法有助于发现循环相关的错误。

**示例**:
```python
def sum_up_to(n):
    total = 0
    for i in range(n):
        total += i
    return total
```
测试用例:
- 输入n=0,循环执行0次
- 输入n=1,循环执行1次
- 输入n=5,循环执行多次

7. 数据流测试(Data Flow Testing)

**描述**:
数据流测试的目标是检查程序中变量的定义和使用是否正确。它关注变量在代码中的生命周期,从定义、赋值到最后使用。

**示例**:
```python
def compute_sum(a, b):
    sum = a + b  # 定义和赋值
    return sum  # 使用
```
测试用例:
- 输入a=2, b=3,检查sum的定义和使用

常用的白盒测试工具

JUnit:用于Java应用的单元测试框架。
pytest:用于Python应用的单元测试框架。
CUnit:用于C语言的单元测试框架。
Emma、Jacoco**:用于Java的代码覆盖率分析工具。
gcov:用于C/C++代码覆盖率分析。

白盒测试方法多种多样,每种方法都有其特定的目标和适用场景。通过合理选择和组合这些测试方法,可以深入验证软件的内部逻辑和实现,确保代码的质量和可靠性。

面试问题:

项目用例类(功能测试):

通过场景法和等价类划分,详细讲解了如何针对功能点设计测试用例,特别是针对淘宝购物车等常见功能的测试设计。

给你一个功能让你去设计测试用例?

微信发红包?

淘宝购物车?

你发现的最严重的bug

边界值问题?第三方接口问题?

遇见的最印象深刻的bug?

之前的测试因为偷懒只测试了一天的发放数据,没有去跑批,小伙伴们切记,跟时间周期相关的功能一定要多跑几个周期

工作流程类

详细介绍了从需求评审到项目上线的整个测试流程,包括测试计划的制定、测试用例的编写、bug的跟踪和测试报告的编写。

之前的测试因为偷懒只测试了一天的发放数据,没有去跑批,小伙伴们切记,跟时间周期相关的功能一定要多跑几个周期

测试流程

产品组织开发和测试进行需求评审(熟悉需求或提意见),
制定测试计划(什么人、怎么测试、测试多久),
开发完成接口后制作接口测试,
功能测试(提BUG、修复BUG),
专项测试(弱网测试、兼容测试、安全测试、回归测试)
编写测试报告
线上发布后再进行线上验证测试
注:功能测试可展开为:

有效情况、无效情况(商品限购后还是否能继续添加),边界值测试

**处理开发不认可的bug**:提供了不同情况下的应对策略,如通过演示bug、与开发领导沟通或寻求产品明确需求等方法。
- 📈 **应对产品需求变更**:讨论了在不同时间点遇到需求变更时的应对措施,包括建议延期发布、在测试报告中记录变更影响等。

测试技术类

相关文章:

软件测试(平铺版本)

目录 黑盒测试&#xff1a; 定义: 示例&#xff1a;登录功能的黑盒测试 适合使用黑盒测试的情况 几种常见的黑盒测试方法&#xff1a; 1. 等价类划分&#xff08;Equivalence Partitioning&#xff09; 2. 边界值分析&#xff08;Boundary Value Analysis&#xff09; …...

树控件QTreeWidget

树控件跟表格控件类似&#xff0c;也可以有多列&#xff0c;也可以只有1列&#xff0c;可以有多行&#xff0c;只不过每一行都是一个QTreeWidgetItem&#xff0c;每一行都是一个可以展开的树 常用属性和方法 显示和隐藏标题栏 树控件只有水平标题栏 //获取和设置标题栏的显…...

Python酷库之旅-第三方库Pandas(139)

目录 一、用法精讲 626、pandas.plotting.scatter_matrix方法 626-1、语法 626-2、参数 626-3、功能 626-4、返回值 626-5、说明 626-6、用法 626-6-1、数据准备 626-6-2、代码示例 626-6-3、结果输出 627、pandas.plotting.table方法 627-1、语法 627-2、参数 …...

昇思学习打卡营学习记录:CycleGAN壁画修复

按照提示&#xff0c;运行实训代码 进入实训平台&#xff1a;https://xihe.mindspore.cn/projects 选择“jupyter 在线编辑器” 启动“Ascend开发环境” &#xff1a;Ascend开发环境需要申请&#xff0c;大家可以申请试试看 启动开发环境后&#xff0c;在左边的文件夹中&am…...

南京大学《软件分析》李越, 谭添——1. 导论

导论 主要概念: soundcompletePL领域概述 动手学习 本节无 文章目录 导论1. PL(Programming Language) 程序设计语言1.1 程序设计语言的三大研究方向1.2 与静态分析相关方向的介绍与对比静态程序分析动态软件测试形式化(formal)语义验证(verification) 2. 静态分析:2.1莱斯…...

使用seata管理分布式事务

做应用开发时&#xff0c;要保证数据的一致性我们要对方法添加事务管理&#xff0c;最简单的处理方案是在方法上添加 Transactional 注解或者通过编程方式管理事务。但这种方案只适用于单数据源的关系型数据库&#xff0c;如果项目配置了多个数据源或者多个微服务的rpc调用&…...

浏览器指纹

引言 先看下 官网 给的定义。 WebAssembly (abbreviatedWasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server …...

W外链平台有什么优势?

W外链作为一种短网址服务&#xff0c;具备多项功能和技术优势&#xff0c;适用于多种场景&#xff0c;以下是其主要特点和优势&#xff1a; 短域名与高级设置&#xff1a;W外链提供了非常短的域名&#xff0c;这有助于提高用户体验&#xff0c;使其在社交媒体分享时更加便捷。…...

深入理解Spring Cache:加速应用性能的秘钥

一、什么是Spring Cache&#xff1f; Spring Cache是Spring框架中的一部分&#xff0c;它为应用提供了一种统一的缓存抽象&#xff0c;可以轻松集成各种缓存提供者&#xff08;如Ehcache、Redis、Caffeine等&#xff09;。通过使用Spring Cache&#xff0c;开发者可以在方法上…...

C语言入门基础题(力扣):完成旅途的最少时间(C语言版)

1.题目&#xff1a; 给你一个数组 time &#xff0c;其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。 每辆公交车可以 连续 完成多趟旅途&#xff0c;也就是说&#xff0c;一辆公交车当前旅途完成后&#xff0c;可以 立马开始 下一趟旅途。每辆公交车 独立 …...

基于LORA的一主多从监测系统_0.96OLED

关联&#xff1a;0.96OLED hal硬件I2C LORA 在本项目中每个节点都使用oled来显示采集到的数据以及节点状态&#xff0c;OLED使用I2C接口与STM32连接&#xff0c;这个屏幕内部驱动IC为SSD1306&#xff0c;SSD1306作为从机地址为0x78 发送数据&#xff1a;起始…...

C#系统学习路线

分享一个C#程序员的成长学习路线规划&#xff0c;希望能够帮助到想从事C#开发的你。 我一直在想&#xff0c;初学者刚开始学习编程时应该学些什么&#xff1f;学习到什么程度才能找到工作&#xff1f;才能在项目中发现和解决Bug&#xff1f; 我不知道每位初学者在学习编程时是…...

UI开发:从实践到探索

UI开发&#xff1a;从实践到探索 参考博客文章&#xff1a;https://blog.jim-nielsen.com/2024/sanding-ui/ 在现代web开发中&#xff0c;用户界面&#xff08;UI&#xff09;的重要性不言而喻。一个优秀的UI不仅能提升用户体验&#xff0c;还能直接影响产品的成功。 UI开发…...

操作系统 | 学习笔记 | 王道 | 3.1 内存管理概念

3 内存管理 3.1 内存管理概念 3.1.1 内存管理的基本原理和要求 内存可以存放数据&#xff0c;程序执行前需要先放到内存中才能被CPU处理—缓和cpu和磁盘之间的速度矛盾 内存管理的概念 虽然计算机技术飞速发展&#xff0c;内存容量也在不断扩大&#xff0c;但仍然不可能将所有…...

Unity射线之拾取物体

实现效果&#xff1a; 可以移动场景内物品放置到某个位置。通过射线检测&#xff0c;点击鼠标左键&#xff0c;移动物体&#xff0c;再点击左键放下物体。 效果&#xff1a; 移动物体 实现思路&#xff1a; 通过射线检测&#xff0c;将检测到的物体吸附到摄像机前的一个空物…...

Python的numpy库矩阵计算(数据分析)

一、创建矩阵 import numpy as np#创建矩阵anp.arange(15).reshape(3,5) bnp.arange(15,30).reshape(3,5) 使用arrange和reshape创建的二维数组就可以看成矩阵。 此时a和b存储的是&#xff1a; [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] [[15 16 17 18 19]…...

R语言的基本语句及基本规则

0x01 赋值语句 使用 “<-” 或 “” 进行赋值。例如&#xff1a; x <- 5 # 将数值 5 赋值给变量 x y 10 # 另一种赋值方式0x02 输出语句 使用 print() 函数输出内容。例如&#xff1a; print("Hello, R!") print(x)0x03 注释语句 任何在 #之后的内容在…...

网络受限情况下安装openpyxl模块提示缺少Jdcal,et_xmlfile

1.工作需要处理关于Excel文件内容的东西 2.用公司提供的openpyxl模块总是提示缺少jdcal文件,因为网络管控,又没办法直接使用命令下载&#xff0c;所以网上找了资源&#xff0c;下载好后上传到个人资源里了 资源路径 openpyxl jdcal et_xmlfile 以上模块来源于&#xff1a;Py…...

【算法】- 查找 - 散列表查询(哈希表)

文章目录 前言一、哈希表的思想二、哈希表总结 前言 散列技术&#xff1a;在记录的存储位置和它的关键字之间建立一个确定的对应关系f&#xff0c;使得每个关键字key对应一个存储位置f(key) 哈希表&#xff1a;采用散列技术将记录存储在一块连续的存储空间中&#xff0c;这块连…...

货币政策工具

本文为个人学习笔记&#xff0c;内容源于教材&#xff1b;整理记录的同时也作为一种分享。 1. 简介 货币政策工具作为央行实现货币政策目标的经济手段&#xff0c;以期达到最终目标&#xff0c;即物价稳定&#xff0c;充分就业&#xff0c;经济增长&#xff0c;国际收支平衡。…...

std::async概念和使用方法

std::async是 C 标准库中的一个函数模板&#xff0c;用于启动一个异步任务&#xff0c;并返回一个std::future对象&#xff0c;该对象可用于获取异步任务的结果。 1、概念 std::async允许你以异步的方式执行一个函数或者可调用对象&#xff0c;它会在后台启动一个新的线程或者…...

Chatgpt 原理解构

一、背景知识 1. 自然语言处理的发展历程 自然语言处理在不同时期呈现出不同的特点和发展态势。萌芽期&#xff0c;艾伦・图灵在 1936 年提出 “图灵机” 概念&#xff0c;为计算机诞生奠定基础&#xff0c;1950 年他提出著名的 “图灵测试”&#xff0c;预见了计算机处理自然…...

【每日刷题】Day135

【每日刷题】Day135 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 011. 连续数组 - 力扣&#xff08;LeetCode&#xff09; 2. 【模板】二维前缀和_牛客题霸_牛客…...

Linux运维01:VMware创建虚拟机

视频链接&#xff1a;05.新建VM虚拟机_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1nW411L7xm/?p14&spm_id_from333.880.my_history.page.click&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.点击“创建虚拟机” 2.选择“自定义&#xff08;高级&#xff0…...

服务器平均响应时间和数据包大小关系大吗?

服务器的平均响应时间与数据包大小有一定的关系&#xff0c;但这只是影响响应时间的众多因素之一。具体来说&#xff0c;数据包大小对服务器响应时间的影响可以从以下几个方面来理解&#xff1a; 1. 数据传输时间 影响: 较大的数据包需要更多的时间在网络上传输&#xff0c;因此…...

Vue入门-指令学习-v-show和v-if

v-show&#xff1a; 作用&#xff1a;控制元素的显示隐藏 语法&#xff1a;v-show"表达式" 表达式值true显示&#xff0c;false隐藏 v-if 作用&#xff1a;控制元素的显示隐藏&#xff08;条件渲染&#xff09; 语法&#xff1a; vif"表达式" 表达式tr…...

nacos多数据源插件介绍以及使用

概述 在微服务架构中&#xff0c;服务配置的集中管理和动态调整是至关重要的。Nacos 提供了配置管理和服务发现的功能&#xff0c;其中配置管理支持动态数据源的切换&#xff0c;增强了其在复杂环境中的适用性。默认情况下&#xff0c;Nacos 支持 MySQL 和Derby&#xff0c;但…...

国庆档不太热,影视股“凉”了?

今年国庆档票房止步21亿元&#xff0c;属实有点差强人意。 根据国家电影局统计&#xff0c;2024年国庆档&#xff08;2024年10月1日至7日&#xff09;全国电影票房为21.04亿元&#xff0c;观影人次为5209万&#xff0c;总票房成绩、观影总人次同比均有所下滑。 作为传统观影高…...

QtDesign预览的效果与程序运行的结果不一致的解决方法

存在的问题 使用Qt designer软件设计出来的界面&#xff0c;与转换成python程序运行出来的结果不一致&#xff0c;具体看下图 Qt designer预览结果 程序运行出来的结果 原因分析 我自己的电脑是2560*1600分辨率的屏幕&#xff0c;采用的是200%的缩放比例&#xff0c;出现这种…...

模运算和快速幂

文章目录 模运算快速幂 模运算 模运算是大数运算中的常用操作。如果一个数太大&#xff0c;无法直接输出&#xff0c;或者不需要直接输出&#xff0c;则可以对它取模&#xff0c;缩小数值再输出。取模可以防止溢出&#xff0c;这是常见的操作。 取模运算一般要求a和m的符号一…...