测试的分类(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 {@Testpublic void testBubbleSort() {//测试用例: 正常情况下的冒泡排序int[] arr = {5, 3, 9, 1, 5};int[] expected = {1, 3, 5, 7, 9};BubbleSort.bubbleSort(arr);assertArrayEquals(expected, arr);}@Testpublic void testBubbleSortEmptyArray() {//测试用例: 空数组的冒泡排序int[] arr = {};int[] expected = {};BubbleSort.bubbleSort(arr);assertArrayEquals(expected, arr);}@Testpublic void testBubbleSortAlreadySorted() {//测试用例: 已经排序后的数组, 排序时应保持不变.int[] arr = {5, 3, 9, 1, 7};int[] expected = {1, 3, 5, 7, 9};BubbleSort.bubbleSort(arr);assertArrayEquals(expected, arr);}
}

运行结果:

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

集成测试

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

 

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

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

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

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

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

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

系统测试

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

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

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

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

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

测试方法: 黑盒测试

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

冒烟测试

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

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

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

在生活中,

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

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

回归测试

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

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

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

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

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

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

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

相关文章

ffmpeg安装使用(详细)

目录结构 前言ffmpeg下载ffmpeg环境变量配置ffmpeg环境变量配置验证ffmpeg使用举例说明.mp4 转 .wav.mp3 转 .wav.ogg 转 .wav 参考链接 前言 本文主要记录ffmpeg在Windows系统中的安装使用方法。 ffmpeg下载 FFmpeg官网下载 ffmpeg环境变量配置 解压后将“.\ffmpeg\bin”…

vscode 如何断点调试ros1工程

在vscode中断点调试ros1工程主要分为以下几步&#xff1a; 1. 第一步就是修改cmakelist.txt&#xff0c;到调试模式。 将CMAKE_BUILD_TYPE原来对应的代码注释掉&#xff0c;原来的一般都不是调试模式。加上下面一行代码&#xff0c;意思是设置调试模式。 # 断点调试 SET(CMAK…

【Linux】文件基本属性

Linux 系统是一种典型的多用户系统&#xff0c;不同的用户处于不同的地位&#xff0c;拥有不同的权限。 为了保护系统的安全性&#xff0c;Linux 系统对不同的用户访问同一文件&#xff08;包括目录文件&#xff09;的权限做了不同的规定。 在 Linux 中我们可以使用 ll 或者 …

《你想活出怎样的人生》上映,AOC带你打开宫崎骏的动画世界大门!

摘要&#xff1a;宫崎骏式美学&#xff0c;每一帧都是治愈&#xff01; 近日&#xff0c;宫崎骏新作《你想活出怎样的人生》正式公映。苍鹭与少年的冒险、奇幻瑰丽的场景、爱与成长的主题&#xff0c;让观众们收获到满满的爱与感动。宫崎骏总能以细腻的画面、温柔的音乐&#…

设计模式——模板方法

1)模板方法模式(Template Method Pattem)&#xff0c;又叫模板模式(Template Patern)&#xff0c;在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现&#xff0c;但调用将以抽象类中定义的方式进行。 2)简单说&#xff0c;模板方法模式 定义一个操作中…

ETLCloud中多并行分支运行的设计技巧

在大数据处理领域&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;流程是至关重要的一环&#xff0c;它涉及数据的提取、转换和加载&#xff0c;以确保数据的质量和可用性。而在ETL流程中&#xff0c;多并行分支的运行设计是一项关键技巧&#xff0c;可以有效…

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

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

猴子摘桃问题(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int sum 1;int i 0;//运算&#xff1b;for (i 1; i < 10; i){//运算&#xff1b;sum …

typecho博客的相对地址实现

typecho其中的博客地址,必须写上绝对地址,否则在迁移网址的时候会出现问题,例如页面记载异常 修改其中的 typecho\var\Widget\Options\General.php 中的165行左右, /** 站点地址 */if (!defined(__TYPECHO_SITE_URL__)) {$siteUrl new Form\Element\Text(siteUrl,null,$this-…

怎么把3d模型旋转加复制---模大狮模型网

在3D设计中&#xff0c;旋转和复制模型是常见且重要的操作&#xff0c;它们可以帮助设计师创建复杂的场景并节省时间。本文将介绍如何在3D建模软件中旋转并复制模型&#xff0c;以及一些技巧和注意事项&#xff0c;帮助您轻松实现这些操作。 旋转3D模型&#xff1a; 旋转3D模型…

心理学|变态心理学健康心理学——躯体疾病患者的一般心理特点

一、对客观世界和自身价值的态度发生改变 患者除了内部器官有器质或功能障碍外&#xff0c;他们的自我感觉和整个精神状态也会发生变化。使人改变对周围事物的感受和态度&#xff0c;也可以改变患者对自身存在价值的态度。这种主观态度的改变&#xff0c;可以使患者把自己置于人…

PaddleSeg开始与搭建

因为使用的比较多,所以来总结一下。 先介绍一下,为什么用PaddleSeg 1、搭建模型更容易,和MMSeg相比,配置更加简单,容易上手 缺点是 1、目前版本还无法生成热力图,我看Paddle官方已经出比赛在解决这个问题了 2、和主流pytorch存在一定差别,模型迁移时需要熟悉两种配置;M…

BFS解决FloodFill算法:(Leetcode:200. 岛屿数量)

题目链接&#xff1a;200. 岛屿数量 - 力扣&#xff08;LeetCode&#xff09; 本题由于没有给出开始搜索的位置&#xff0c;所以每一个位置都要进行一次广度优先搜索 另外为了不修改原数组数据&#xff0c;需要设置一个bool类型的二维数组vis来判断某个位置是否被搜索过 cl…

Numpy方法总结(二)

一. 高级索引 相比于基本索引&#xff0c;高级索引可以访问到数组中的任意元素&#xff0c;并且可以用来对数组进行复杂的操作和修改。 1.整数数组索引 整数数组索引是指使用一个数组来访问另一个数组的元素。这个数组中的每个元素都是目标数组中某个维度上的索引值。 示例…

MapReduce——ReudceTask并行度决定机制

MapReduce——ReudceTask并行度决定机制 1. Reduce任务的数量&#xff08;reduce task count&#xff09;&#xff1a; 这是最基本的决定因素之一。在作业启动时&#xff0c;用户可以指定Reduce任务的数量。更多的Reduce任务意味着更多的并行度&#xff0c;因为每个Reduce任务…

150G全国1米分辨率土地利用数据【2023年】

#1数据摘要 全国1米分辨率土地利用数据 全国范围,分省份分类,1米精度土地利用数据。2023年版本。 数据格式:tif 坐标系:wgs1984 范围:全国各省份 时间:2023年 精度:1米 地类:共计11个地类 中国1m分辨率土地覆盖数据 文件命名与介绍:数据为GeoTIFF栅格格式,每个城市…

Excel 公式的定义、语法和应用(LOOKUP 函数、HLOOKUP 函数、VLOOKUP 函数;MODE.MULT 函数; ROUND 函数)

一、公式的定义和语法 二、公式的应用 附录 查找Excel公式使用方法的官方工具【强烈推荐!!!】:Excel 函数(按字母顺序)【微软官网】 excel 函数说明语法LOOKUP 函数在向量或数组中查找值LOOKUP(lookup_value, lookup_vector, [result_vector])

Webfunny前端监控如何接入飞书单点登录(SSO)

Hello&#xff0c;大家好&#xff0c;欢迎使用**webfunny前端监控和埋点平台**。今天我们将介绍一下如何接入飞书的登录系统。 友情提示&#xff1a;如果飞书侧已经配置好了&#xff0c;可以直接跳到第六步阅读。 一、创建飞书网页项目 进入飞书开发者后台&#xff0c;创建企…

大话设计模式-装饰器模式

大话设计模式书中&#xff0c;作者举了一个穿衣服的例子来为我们引入装饰器模式。 概念 定义 装饰模式在书中的定义是&#xff1a;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更灵活。 这句话直接去理解可能会有点抽象&#…

C语言本身不难,难得是应用场景很多

你学了C语言多半是要做项目的&#xff0c;这个过程中C语言是远远不够的&#xff0c;你把这部分难度加到C语言上&#xff0c;自然就难了在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「C语言的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区…