测试的分类(2)

目录

按照执行方式分类

静态测试

动态测试

按照测试方法

灰盒测试

按照测试阶段分类

单元测试

集成测试

系统测试

冒烟测试

回归测试


按照执行方式分类

静态测试

所谓静态测试就是不实际运行被测软件,只是静态地检查程序代码, 界面或文档中可能存在错误的过程.

不以测试数据的执行而是对测试对象的分析过程, 仅通过分析或检查源程序的设计, 内部结构, 逻辑, 代码风格和规格等来检查程序的正确性.

常见的静态测试有代码走查, 代码扫描工具等.

动态测试

动态测试, 指的是实际运行被测程序, 输入相应的测试数据,  检查实际输出结果和预期结果是否相符的过程. 所以判断一个测试是否属于静态还是动态, 唯一的方式就是看是否运行了程序

大多数软件测试工作都是动态测试.(毕竟很少人跟葫芦娃二娃一样, 眼睛比较好(doge), 眼过千遍不如手过一遍).

按照测试方法

之前在测试用例中讲了黑盒测试和白盒测试, 这里就不讲了, 呃呃呃....真的很喜欢摸鱼......

灰盒测试

灰盒测试, 是介于白盒测试和黑盒测试之间的一种测试, 灰盒测试多用于集成阶段, 不仅关注输入, 输出的正确性, 同时也关注程序内部的情况

但是灰盒测试没有白盒测试详细和完整, 黑盒测试是覆盖产品范围最广的测试, 因此回合测试甚至不能替代黑盒测试, 否则需要很大的代价, 设计非常多的用例.

面试题: 你知道的测试方法有哪些?哪种用的比较多?

常见的测试方法有黑盒测试, 白盒测试和灰盒测试. 开发人员主要用白盒测试和灰盒测试, 测试人员主要用白盒测试和灰盒测试, 相比于白盒测试, 黑盒测试用的更多一些.

按照测试阶段分类

单元测试

与编码同步进行, 针对软件最小组成单元进行测试, 主要采用白盒测试方法, 从被测对象的内部结构出发设计测试用例.

到底怎么才算"最小单元"呢? 最小单元是认为定义的, 一个方法, 一个类都可以理解为"最小单元".

测试阶段: 编码后或编码前.

测试对象: 最小模块.

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

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

测试方法: 白盒测试.

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

下面根据这个冒泡排序, 我们设计一个简单的单元测试:

import java.util.*;

public class Main {
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n - i - 1; i++) {
                if(arr[j] > arr[j + 1]) {
                    int tmp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = tmp;
                }
            }
        }
    }

    public static void main(String[] args) {
        //排序无序数组
        Test01();
        //排序有序数组
        Test02();
        //排序空数组
        Test03();
        //排序重复数字的数组
        Test04();
    }
    
    private static void Test04() {
        int[] act_array1 = {1, 1, 29, 12, 12, 9, 9};
        int[] act_array2 = {1, 1, 9, 9, 12, 12, 29};
        //排序无序数组
        bubbleSort(act_array1);
        //判断两个数组内容是不是一样
        boolean isSame = Arrays.equals(act_array1, act_array2);
        if(isSame == false) {
            System.out.println("测试不通过");
        } else {
            System.out.println("测试通过");
        }
    }
    
    private static void Test03() {
        int[] act_array1 = {};
        int[] act_array2 = {};
        //排序无序数组
        bubbleSort(act_array1);
        //判断两个数组内容是不是一样
        boolean isSame = Arrays.equals(act_array1, act_array2);
        if(isSame == false) {
            System.out.println("测试不通过");
        } else {
            System.out.println("测试通过");
        }
    }
    
    private static void Test02() {
        int[] act_array1 = {1, 2, 3, 4, 5};
        int[] act_array2 = {1, 2, 3, 4, 5};
        //排序无序数组
        bubbleSort(act_array1);
        //判断两个数组内容是不是一样
        boolean isSame = Arrays.equals(act_array1, act_array2);
        if(isSame == false) {
            System.out.println("测试不通过");
        } else {
            System.out.println("测试通过");
        }
    }
    
    private static void Test01() {
        int[] act_array1 = {64, 34, 25, 12, 22, 11, 90};
        int[] act_array2 = {11, 12, 22, 25, 34, 64, 90};
        //排序无序数组
        bubbleSort(act_array1);
        //判断两个数组内容是不是一样
        boolean isSame = Arrays.equals(act_array1, act_array2);
        if(isSame == false) {
            System.out.println("测试不通过");
        } else {
            System.out.println("测试通过");
        }
    }
}

细心的伙伴可能发现了, 这个程序跑出来是错的.(我偷偷把j++写成i++了, 没想到吧hhhhh) 

java中也有很多单元测试框架, 如JUnit, JUnit提供了非常多注解和断言函数, 有效提升单元测试脚本的效率. 

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;

public class JUnitTest2 {
    @Test
    public void testBubbleSort() {
        //测试用例: 正常情况下的冒泡排序
        int[] arr = {5, 3, 9, 1, 5};
        int[] expected = {1, 3, 5, 7, 9};
        BubbleSort.bubbleSort(arr);
        assertArrayEquals(expected, arr);
    }

    @Test
    public void testBubbleSortEmptyArray() {
        //测试用例: 空数组的冒泡排序
        int[] arr = {};
        int[] expected = {};
        BubbleSort.bubbleSort(arr);
        assertArrayEquals(expected, arr);
    }

    @Test
    public void testBubbleSortAlreadySorted() {
        //测试用例: 已经排序后的数组, 排序时应保持不变.
        int[] arr = {5, 3, 9, 1, 7};
        int[] expected = {1, 3, 5, 7, 9};
        BubbleSort.bubbleSort(arr);
        assertArrayEquals(expected, arr);
    }
}

运行结果:

发现排序正确的没有信息, 而排序不正确的则报错了(呃呃...实际上是我把用例故意写错了) 

集成测试

集成测试也称联合测试(联调), 组装测试, 将程序模块采用适当的集成策略组装起来, 对系统的接口及集成后的功能进行正确性检测的测试工作. 集成的主要目的是检查软件单位之间的接口是否正常. 

 

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

测试对象: 模块间的接口.

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

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

测试方法: 黑盒测试和白盒测试相组合.

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

系统测试

对通过集成测试的系统进行整体测试, 验证系统功能性和非功能性需求的实现.

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

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

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

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

测试方法: 黑盒测试

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

冒烟测试

这一术语来自硬件行业. 对一个硬件组件进行更改或修复以后, 直接给设备加电. 如果没有冒烟, 则该组件就通过了测试. 在软件中, "冒烟测试"这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程. 在检查了代码后, 冒烟测试是确定和修复软件缺陷最经济有效的方法. 冒烟测试设计用于确认代码中的更改会按预期运行, 且不会破坏整个版本的稳定性

冒烟测试的对象是每一个新编译的需要正式测试的软件版本, 目的是确认软件主要功能和核心流程正常, 在正式进行系统测试之前执行. 冒烟测试一般在开发人员开发完毕后提交给测试人员来进行测试时, 先进行冒烟测试, 保证基本功能正常, 不阻碍后面的测试.

如果冒烟测试通过, 则测试人员开始进行正式的系统测试, 如果不通过,则测试人员可以让开发人员重新修复代码直到冒烟测试通过, 再进行系统测试.

在生活中,

购买一个电视, 首先会通电, 查看电视是否正常运行.

购买一个水杯, 首先会装水, 查看水杯是否漏水.

回归测试

回归测试是指修改了旧代码之后, 重新进行测试以确认修改没有引入新的错误或导致其它代码产生错误.

在整个软件测试的过程中占有很大的工作量比重, 软件开发的各个阶段都会进行多次回归测试. 随着系统的庞大, 回归测试的成本越来越大, 通过选择正确的回归测试策略来改进回归测试的效率和有效性有很大意义.

回归测试主要由人工测试和自动化测试进行.

在实际工作中, 回归测试需要反复进行, 当测试者一次又一次地完成相同的测试时, 这些回归测试将会变得非常厌烦, 而在大多数回归测试需要手工完成的时候尤其如此, 因此, 需要通过自动测试来实现重复的和一致的回归测试. 通过测试自动化可以提高回归测试效率. 为了支持多种回归测试策略, 自动测试工具应该是通用和灵活的, 以便满足达到不同回归测试目标的要求.

写到这电脑没电了, 下一期更. 

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

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

相关文章

优先级队列(概念理解/底层模拟/时间复杂度分析)

目录 1.概念理解 2.优先级队列的底层模拟 2.1堆的概念 2.2优先队列的模拟实现 2.2.1把Heap类定义好 2.2.2初始化堆 2.2.3创建大堆 1.思路 以此二叉树为例&#xff1a; 图文理解&#xff1a; 2.思路转化为代码 2.2.4堆操作之offer&#xff08;进队列&#xff09; 1…

初识java——jdk?环境变量?及关于安装jdk的步骤

文章目录 JDK的安装在安装JDK时遇到的问题&#xff1a; 背景知识一 什么是jdkjdk简介jdk文件详解&#xff1a;1 bin目录&#xff1a;2 lib目录&#xff1a;3 include目录.exe文件是可执行的应用程序&#xff0c;这个我们都清楚&#xff0c;但.dll文件又是做什么的呢&#xff1f…

Advanced RAG 04:重排序(Re-ranking)技术探讨

编者按&#xff1a;重排序&#xff08;Re-ranking&#xff09;技术在检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;系统中扮演着关键角色。通过对检索到的上下文进行筛选和排序&#xff0c;可以提高 RAG 系统的有效性和准确性&#xff0…

查找算法之顺序查找

目录 前言一、查找算法预备知识二、顺序查找三、总结3.1 查找性能3.2 适用场景 前言 查找算法是一种用于在数据集合中查找特定元素的算法。在计算机科学中&#xff0c;查找算法通常被用于在数组、链表、树等数据结构中查找目标元素的位置或者判断目标元素是否存在。 查找算法的…

爱尔兰启动其首个量子技术国家战略“量子 2030”

内容来源&#xff1a;量子前哨&#xff08;ID&#xff1a;Qforepost&#xff09; 文丨王珩 排版丨沛贤 800字丨5分钟阅读 摘要&#xff1a;爱尔兰推出了“量子 2030”&#xff0c;这是爱尔兰第一个量子技术国家战略。“量子 2030”将爱尔兰量子技术界的努力重点放在爱尔兰可以…

电脑文件加密软件有哪些?文件加密软件哪个好?

某企业的一位员工因不慎将包含敏感客户数据的电脑丢失&#xff0c;导致企业面临巨大的法律风险和经济损失。 这一事件凸显了电脑文件加密的必要性。 如果该企业事先采用了文件加密软件对敏感数据进行保护&#xff0c;即使电脑丢失&#xff0c;攻击者也无法轻易获取到文件内容…

STL_List与萃取

List 参考文章: https://blog.csdn.net/weixin_45389639/article/details/121618243 List源码 List中节点的定义&#xff1a; list是双向列表&#xff0c;所以其中节点需要包含指向前一节点和后一节点的指针&#xff0c; data是节点中存储的数据类型 template <class _Tp&g…

HCIP——MPLS(笔记)

MPLS--多协议标签交换技术 包交换 数据组成数据包&#xff0c;之后&#xff0c;在各个网络节点中不断传递&#xff0c;最终到达目标。包交换转发效率不高的问题所在&#xff1a;1&#xff0c;在整个包交换的过程中&#xff0c;需要先查询路由表之后再查看ARP缓存表两张表来完…

Java:内部类

目录 1.内部类介绍2.实例内部类3.静态内部类4.局部内部类5.匿名内部类 1.内部类介绍 当一个事物的内部&#xff0c;还有一个部分需要一个完整的结构进行描述&#xff0c;而这个内部的完整的结构又只为外部事物提供服务&#xff0c;那么这个内部的完整结构最好使用内部类。在 J…

KDD‘23 | AlphaMix: 高效专家混合框架(MoE)显著提高上证50选股表现

KDD23 | AlphaMix: 高效专家混合框架&#xff08;MoE&#xff09;显著提高上证50选股表现 原创 QuantML QuantML 2024-04-18 09:17 上海 Content 本文提出了一个名为AlphaMix的新型三阶段专家混合&#xff08;Mixture-of-Experts&#xff0c;MoE&#xff09;框架&#xff0c;…

信息流广告大行其是,微博回望“原生”的初心

摘要&#xff1a;有流量的地方&#xff0c;就当有原生信息流广告 信息流广告&#xff0c;自2006年Facebook推出后就迅速火遍全球数字营销界&#xff0c;被誉为实现了广告主、用户、媒体平台三赢。特别是随着OCPM/OCPX大放异彩&#xff0c;信息流广告几乎成为广告主的必选项&…

达梦数据库的AWR报告

达梦数据库的AWR报告 数据库快照是一个只读的静态的数据库。 DM 快照功能是基于数据库实现的&#xff0c;每个快照是基于数据库的只读镜像。通过检索快照&#xff0c;可以获取源数据库在快照创建时间点的相关数据信息。 为了方便管理自动工作集负载信息库 AWR&#xff08;Auto…

数据结构实验(二)

单链表的基本操作 一、总的设计思路(c++实现) 1、首先定义一个包含name、gender、student_number、hobbies的学生信息结构体。 2、接着一一写出:链表初始化(initialize)函数、后插法插入(insert)函数、打印信息(output)函数、对链表结点进行排序(sortList)函数、…

【Qt 学习笔记】Qt常用控件 | 按钮类控件 | Check Box的使用及说明

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 按钮类控件 | Check Box的使用及说明 文章编号&#xff…

华为ensp中MSTP多网段传输协议(原理及配置命令)

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月22日15点29分 在华为ENSP中&#xff0c;MSTP&#xff08;多段传输协议&#xff09;是重要的生成树协议&#xff0c;它扩展了STP&#xff08;生成树协议&#xff09…

跨境电商日报:Tk使用时长全美第一;Shopee发布Z世代购物调查报告

# 平台资讯 PART 1 电商 Shopee调查&#xff1a;六成Z世代购物者看重平台功能多样性 日前&#xff0c;据外媒报道&#xff0c;Shopee发布了《在数字时代吸引Z世代购物者》调查报告。数据显示&#xff0c;60%的Z世代购物者优先考虑搜索简单、具有比较功能和有用评论的平台。据…

代码随想录算法训练营第三十六天|435. 无重叠区间,763.划分字母区间,56. 合并区间

题目&#xff1a;435. 无重叠区间 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi]。返回需要移除区间的最小数量&#xff0c;使剩余区间互不重叠。 题目链接/讲解链接&#xff1a; https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0…

Swin Transformer 浅析

Swin Transformer 浅析 文章目录 Swin Transformer 浅析引言Swin Transformer 的网络结构W-MSA 窗口多头注意力机制SW-MSA 滑动窗口多头注意力机制Patch Merging 图块合并 引言 因为ViT无法实现CNN中的层次化构建以及局部信息&#xff0c;由此微软团队提出了Swin Transformer来…

Linux磁盘及读写数据原理/Raid技术/硬软raid及企业案例/磁盘分区环境搭建/格式化磁盘系列-12213字

高薪思维&#xff1a; 怎么才能一直去坚持下去&#xff1f; 1.做这件事情的好处&#xff0c;对自己一直去放大。 2.不做的坏处&#xff0c;并放大 3.学习痛苦&#xff1f;还是去上班&#xff08;餐饮、外卖痛苦&#xff1f;&#xff09; 用比学习更痛苦的事情&#xff0c;去对抗…

Java后端中如何随意接收参数

目录 一、参数名相同 二、参数名不同&#xff0c;使用RequestParam注解 大概访问流程是&#xff1a;先访问test控制器&#xff0c;test控制器跳转到index页面&#xff08;此时index页面收到了test控制器传来的数据&#xff09;&#xff0c;然后在index页面跳转到t5控制器&…