【测试分类 (下)】测试分类看这篇就够了:彻底告别概念混淆,轻松搞定工作面试 - 指南
艾莉丝努力练剑:个人主页
❄专栏传送门:《C语言》、《数据结构与算法》、C/C++干货分享&学习过程记录、Linux操作系统编程详解、笔试/面试常见算法:从基础到进阶
⭐️为天地立心,为生民立命,为往圣继绝学,为万世开太平
艾莉丝努力练剑的简介:
艾莉丝的测试开发博客简介:
目录
5.4.1 单元测试,集成测试,系统测试,回归测试之间的关系
五、按照测试阶段分类
5.1 单元测试
与编码同步进行,针对软件最小组成单元进行测试,主要采用白盒测试方法,从被测对象的内部结构出发设计测试用例。
那么到底怎么才算“最小单元”呢,最小单元实际是认为定义的,一个方法,一个类都可以理解为“最小单元”。人为规定的最小单元:方法、接口、功能等都可以称之为单元。
测试阶段:编码后或者编码前(TDD)——测试驱动开发(Test Driven Development)
测试对象:最小模块
测试人员:白盒测试工程师或开发工程师
测试依据:代码和注释+详细设计文档
测试方法:白盒测试
测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试
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; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
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[] expect_array1 = { 1, 1, 9, 9, 12, 12, 29 };
//排序⽆序数组
bubbleSort(act_array1);
boolean isSame = Arrays.equals(act_array1, expect_array1);
//判断两个数组内容是不是⼀样
if (isSame == false) {
System.out.println("测试不通过");
}
else {
System.out.println("测试通过");
}
}
private static void Test03() {
int[] act_array1 = {};
int[] expect_array1 = {};
//排序⽆序数组
bubbleSort(act_array1);
boolean isSame = Arrays.equals(act_array1, expect_array1);//判断两个数组
内容是不是⼀样
if (isSame == false) {
System.out.println("测试不通过");
}
else {
System.out.println("测试通过");
}
}
private static void Test02() {
int[] act_array1 = { 1, 2, 3, 4, 5 };
int[] expect_array1 = { 1, 2, 3, 4, 5 };
//排序⽆序数组
bubbleSort(act_array1);
boolean isSame = Arrays.equals(act_array1, expect_array1);
//判断两个数组内容是不是⼀样
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[] expect_array1 = { 11, 12, 22, 25, 34, 64, 90 };
//排序⽆序数组
bubbleSort(act_array1);
boolean isSame = Arrays.equals(act_array1, expect_array1);
//判断两个数组内容是不是⼀样
if (isSame == false) {
System.out.println("测试不通过");
}
else {
System.out.println("测试通过");
}
}
}
java中也有很多单元测试框架,如Junit,Junit提供了非常多注解和断言函数,有效提升开发单元测试脚本的效率,感兴趣的uu可以去了解一下——
//java
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
public class BubbleSortTest {
@Test
public void testBubbleSort() {
// 测试⽤例:正常情况下的冒泡排序
int[] arr = { 5, 3, 9, 1, 7 };
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 = { 1, 2, 3, 4, 5 };
int[] expected = { 1, 2, 3, 4, 5 };
BubbleSort.bubbleSort(arr);
assertArrayEquals(expected, arr);
}
@Test
public void testBubbleSortWithDuplicates() {
// 测试⽤例:包含重复元素的数组
int[] arr = { 4, 2, 4, 1, 3, 2 };
int[] expected = { 1, 2, 2, 3, 4, 4 };
BubbleSort.bubbleSort(arr);
assertArrayEquals(expected, arr);
}
}
5.2 集成测试
集成测试也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。
集成主要目的是检查软件单位之间的接口是否正确。
测试阶段:一般单元测试之后进行
测试对象:模块间的接口
测试人员:白盒测试工程师或开发工程师
测试依据:单元测试的模块+概要设计文档
测试方法:黑盒测试与白盒测试相结合
测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响
5.3 系统测试
对通过集成测试的系统进行整体测试,验证系统功能性和非功能性需求的实现。
测试阶段:集成测试通过之后
测试对象:整个系统(软、硬件)
测试人员:黑盒测试工程师
测试依据:需求规格说明文档
测试方法:黑盒测试
测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等
5.3.1 冒烟测试
这一术语源自硬件行业。对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒
烟,则该组件就通过了测试。在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的
源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。(PS:博主是通信工程专业的,学校有电子实验下面的电路板在焊接电子元器件的时候真的是恶心,400度的电焊枪焊那个锡丝,那个烟熏眼睛、味道还刺鼻,真是大分)
检查当前已经开发好的程序是否具备可测试性。
冒烟测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件主要功能和核心流程正常,在正式进行系统测试之前执行。冒烟测试一般在开发人员开发完毕后提交给测试人员来进行测试时,先进行冒烟测试,保证基本功能正常,不阻碍后续的测试。
如果冒烟测试通过,则测试人员开始进行正式的系统测试,如果不通过,则测试人员可以让开发人员重新修复代码直到冒烟测试通过,再开始进行系统测试。
在生活中,购买一个电视,首先会通电,查看电视是否能够运行;
购买一个水杯,首先会灌水,查看水杯是否漏水。
在工作中,假如有一个博客系统项目提测了,冒烟测试即只需要测试系统是否能够成功打开,主流程是否可以走通即可。
5.3.2 回归测试
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错
误。
在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。随着系统的庞大,回归测试的成本越来越大,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。
回归测试主要由人工测试和自动化测试进行。
在实际工作中,回归测试需要反复进行,当测试者一次又一次地完成相同的测试时,这些回归测试将变得非常令人厌烦,而在大多数回归测试需要手工完成的时候尤其如此,因此,需要通过自动测试来实现重复的和一致的回归测试。通过测试自动化可以提高回归测试效率。为了支持多种回归测试策略,自动测试工具应该是通用的和灵活的,以便满足达到不同回归测试目标的要求。
整体回顾测试一下,自动化测试解决了回归测试的难点。
5.4 验收测试
针对用户需求,对通过系统测试的软件进行交付性测试,以确定系统是否满足验收标准,由用户
或其他授权机构决定是否接受系统。验收测试是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买都展示该软件系统满足原始需求。
测试阶段:系统测试通过之后
测试对象:整个系统(包括软硬件)
测试人员:主要是最终用户或者需求方。
测试依据:用户需求、验收标准
测试方法:黑盒测试
测试内容:同系统测试(功能...各类文档等)
5.4.1 单元测试,集成测试,系统测试,回归测试之间的关系
关于车企生产车到客户开上小汽车的过程中——
单元测试:造车需要原材料,如车轮、发动机等零部件不是车企自己制造出来的,而是通过购买零部件来造车。对买来的零部件进行检查,零部件是否符合造车标准。
集成测试:零件确认完毕,接下来就是复杂的造车工艺,将零部件集成起来构成了一辆车,并初步检查拼车的车是否能正常运作。
系统测试:一辆车成型之后并不意味着就可以直接销售给客户了,需要车企专业的测试人员进行详细而完整的测试。
验收测试:专业的测试人员对企业测试完毕,通过测试的汽车将会在车展或者4S店进行展示,供用户进行选择和购买。用户在选择汽车的过程中也会对车外观以及性能等方面进行校验。
除了以上阶段外,还有两个非常重要,在工作中经常会听到:冒烟测试和回归测试。
六、按照是否手工测试
盒马鲜生的自动化外卖输送机器——
6.1 手工测试(Manual testing)
手工测试就是由人去一个一个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的一个步骤。(业务测试)
6.2 自动化测试(Automation Testing)
自动化测试就是在预设条件下运行系统或应用程序,评估运行结果,预先条件应包括正常条件和异常条件。简单说自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。自动化测试比如功能测试自动化、性能测试自动化、安全测试自动化。自动化测试按照测试对象来分还可以分为接口测试、UI测试(界面)等。接口测试的ROI(产出投入比)要比UI测试高。(这里我们先简单了解一下,等到博主介绍自动化的时候再详细展开)
6.3 自动化测试和手工测试的优缺点对比
现在一些企业要求测试人员的手工测试努力也要很强。
七、按照实施组织划分
大型通用软件,在正式发布前,通常需要执行Alpha(α测试)和Beta测试(β测试)。
7.1 α测试(Alpha Testing)
α测试又叫内测或者叫a测,其实都是一个涵义。
α测试通常是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的
FLURPS(即功能、可使用性、可靠性、性能和支持)。α测试不能由程序员或测试员完成。
7.2 β测试(Beta Testing)
β测试又叫公测或者叫b测。
β测试由软件的最终用户们在一个或多个场所进行,这里就可以理解为,β测试是正式用户中的一部分,他们在任意的场合来使用软件,目的是为了发现软件是否存在一系列的问题。
通常会发送一些邀请码,来邀请用户参与项目测试。
7.3 α测试与β测试的区别
举个例子:
7.4 第三方测试
第三方软件测试是指由独立的第三方公司或组织进行的软件测试活动。
举个例子:卓玛测评
通过第三方测试,可以确保软件的质量,节省成本,确保软件尽快上线。
八、按照测试地域划分
按照测试地域划分,一般会将测试划分为国际化测试和本地测试。
8.1 国际化测试
简而言之,测试人员需要测试软件在不同语言和地区是否能正常工作。
比如说“滴滴点餐”在墨西哥和中国的界面——
墨西哥
中国
国际化测试需要关注软件的哪些特性:
布局
时间
日期
数字格式
货币
机器型号……
8.2 本地测试
我们前面介绍的就都是本地测试了,这里不再赘述。
结尾
本文的内容到这里就全部结束了,感谢您的阅读!
往期回顾:
【测试分类(上)】测试分类看这篇就够了:彻底告别概念混淆,轻松搞定工作面试
结语:本期我们继续学习了测试开发/测试内容中的测试分类篇,希望对学习测试开发/测试相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!
૮₍ ˶ ˊ ᴥ ˋ˶₎ა