测试的分类(2)

news2024/11/17 1:43:47

目录

按照执行方式分类

静态测试

动态测试

按照测试方法

灰盒测试

按照测试阶段分类

单元测试

集成测试

系统测试

冒烟测试

回归测试


按照执行方式分类

静态测试

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

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

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

动态测试

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

大多数软件测试工作都是动态测试.(毕竟很少人跟葫芦娃二娃一样, 眼睛比较好(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);
    }
}

运行结果:

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

集成测试

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

 

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

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

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

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

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

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

系统测试

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

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

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

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

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

测试方法: 黑盒测试

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

冒烟测试

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

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

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

在生活中,

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

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

回归测试

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

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

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Git | 分支管理

Git | 分支管理 文章目录 Git | 分支管理1、理解分支2、创建分支&&切换分支3、合并分支4、删除分支5、合并冲突6、分支管理策略合并分支模式实际工作中分支策略bug分支删除临时分支 1、理解分支 分支就类似分身。 在版本回退中&#xff0c;每次提交Git都会将修改以git…

.net core webapi 高颜值的接口管理系统界面取代swagger,更好调试和查看

.net core webapi 高颜值的接口管理系统界面取代swagger&#xff0c;更好调试和查看 安装 dotnet add package IGeekFan.AspNetCore.Knife4jUI --version 0.0.16配置文档&#xff1a; 配置起始页 builder.Services.AddSwaggerGen(c > {// 配置 Swagger 文档相关信息c.Swa…

圣若热城堡、贝伦塔、热罗尼莫斯修道院 BIBM 2024在里斯本等你

会议之眼 快讯 2024年BIBM&#xff08;IEEE International Conference on Bioinformatics and Biomedicine&#xff09;即IEEE生物信息学与生物医学国际会议将于 2024年 12月3日-6日在葡萄牙里斯本举行&#xff01;这个会议由IEEE&#xff08;电气和电子工程师协会&#xff09…

CCF PTA 2023年11月C++卫星发射

【问题描述】 在 2050 年卫星发射技术已经得到极大发展&#xff0c;我国将援助 A 国建立远轨道卫星导航系统&#xff0c;该项目计划第 一个天发射一颗卫星&#xff1b;之后两天&#xff08;第二天和第三天&#xff09;&#xff0c;每天发射两颗卫星&#xff1b;之后三天&#…

牛客 NC205 跳跃游戏(三)【中等 贪心 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/14abdfaf0ec4419cbc722decc709938b 思路 参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** …

面向对象设计模式之概念

设计模式系列的观点结合了《HeadFirst设计模式》(中文版)以及《设计模式&#xff1a;可复用面向对象软件的基础》两本书的知识&#xff0c;以及Sunny(刘伟)的博客 《HeadFirst设计模式》(中文版)&#xff1a; 百度网盘链接&#xff1a;https://pan.baidu.com/s/1osvnUGZZREm8Jb…

abp+ef中,默认配置includeAllEntities=false遇到得坑

在一次偶然使用includeAllEntities=false时,有些实体主键引用得Entity<guid>,没有使用聚合根FullAuditedAggregateRoot等,导致服务中注入这些仓储时,一直报错 配置如下: 实体如下 报错如下: {"error": {"code": null,"message": &q…

GPT与Python结合应用于遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估

如何结合最新AI模型与Python技术处理和分析气候数据。介绍包括GPT-4等先进AI工具&#xff0c;旨在帮助大家掌握这些工具的功能及应用范围。内容覆盖使用GPT处理数据、生成论文摘要、文献综述、技术方法分析等实战案例&#xff0c;能够将AI技术广泛应用于科研工作。特别关注将GP…

Leetcode138_随机链表的复制

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 …

java新冠病毒密接者跟踪系统(springboot+mysql源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的新冠病毒密接者跟踪系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 新冠病毒密接者跟…

【C++】priority_queue(优先级队列介绍、仿函数控制大堆小堆、模拟实现)

一、优先级队列 1.1介绍 优先级队列&#xff08;Priority Queue&#xff09;是一种特殊的数据结构&#xff0c;其并不满足队列先进先出的原则&#xff0c;它结合了队列和堆的特点&#xff0c;允许我们在其中插入元素&#xff0c;并且能够保证任何时候提取出的元素都是当前队列…

网络编程学习——IO多路复用

目录 ​编辑 一&#xff0c;多路复用 1&#xff0c;IO的分类 2&#xff0c;IO的效率 二&#xff0c;Linux环境下实现通信的多路复用 1&#xff0c;select select的特点&#xff1a; 参数&#xff1a; 操作函数&#xff1a; 返回值&#xff1a; 使用select实现网络通信…

面试八股——集合——List

主要问题 数组 如果数组索引从0开始时&#xff0c;数组的寻址方式为&#xff1a; 如果数组索引从1开始时&#xff0c;数组的寻址方式为&#xff1a; 此时对于CPU来说增加了一个减法指令&#xff0c;降低寻址效率。 ArrayList⭐ ArrayList构造函数 尤其说一下第三个构造函数流…

ThreadLocal中为什么使用弱引用

ThreadLocal中为什么使用弱引用 补个概念&#xff1a; ThreadLocalMap中的key就是Entry&#xff0c;Entry是一个弱引用&#xff0c;关联了当前ThreadLocal对象。需要存储的数据为值。调用set方法要传入两个参数ThreadLocal对象和要存入ThreadLocal对象的数据。 如下图&#xf…

MQTT Broker 白皮书:全面实用的 MQTT Broker 选型指南

在智能数字化时代&#xff0c;家居设备、工厂传感器、智能汽车、能源电力计量表等各类设备都已变身为新型的智能终端。为了满足这些海量且持续增长的智能设备之间对于实时、可靠的消息传递的需求&#xff0c;MQTT Broker 消息代理或消息中间件扮演了至关重要的角色。作为新一代…

OSI七层模型、TCP/IP五层模型理解(个人解读,如何理解网络模型)

OSI七层模型 七层模型&#xff0c;亦称OSI&#xff08;Open System Interconnection&#xff09;。参考模型是国际标准化组织&#xff08;ISO&#xff09;制定的一个用于计算机或通信系统间互联的标准体系&#xff0c;一般称为OSI参考模型或七层模型。它是一个七层的、抽象的模…

react 安装教程

1、安装脚手架 脚手架主要分为三个部分&#xff1a; react:顶级库。 react-dom&#xff1a;运行环境。 react-scripts&#xff1a;运行和打包react应用程序的脚本和配置。 npm install -g create-react-app 2、创建项目 #查看版本号 create-react-app -V #创建项目 creat…

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

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

记一次普通的单表查询sql优化,去掉文件排序

一现象&#xff1a; 有空观察了线上某个sql语句执行计划&#xff0c;发现在500多毫秒左右&#xff0c;打算进行下优化。 二步骤&#xff1a; 对查询列assessment_periodic_id、assessment_user_id、create_time添加了组合索引并指定了倒叙。加入create_time 使查询结果不需要在…

【华为OD笔试】2024D卷机考套题汇总【不断更新,限时免费】

有LeetCode算法/华为OD考试扣扣交流群可加 948025485 可上全网独家的 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1441了解算法冲刺训练&#xff08;备注【CSDN】否则不通过&#xff09; 文章目录 2024年4月17日&#xff08;2024D卷&#xff09;2024年4月18日&#xff…