目 录CONTENT

文章目录

软件测试的四大法宝:单元测试、系统测试、集成测试、E2E测试的区别与应用场景

萧瑟
2023-04-23 / 0 评论 / 16 点赞 / 1,415 阅读 / 3,441 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-08-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

测试示意图片

在软件开发中,测试是一个重要的环节,它可以保证软件的质量和功能。测试的类型有很多,但是常见的有:单元测试,集成测试,系统测试,E2E测试,验收测试。这几种测试有什么区别呢?

简介

1. 单元测试

单元测试是针对软件的最小可测试单元进行的测试,例如一个函数,一个类,一个模块等。单元测试的目的是检查单元是否符合设计要求,是否能够正确执行,是否有逻辑错误或者缺陷。单元测试通常由开发人员编写,因为他们对软件的内部结构最为了解。单元测试通常是自动化的,这意味着可以在不需要人工干预的情况下进行测试。这种测试的好处是可以更快地发现和修复错误,并且可以在软件开发周期的早期阶段检测到问题,从而减少修复成本。

单元测试在实际工作中,是由开发人员在开发完成后自行进行的测试

在这里先要明确一个概念,单元测试是一种测试,它需要独立设计测试用例及执行bug修复的过程,而不是开发在完成程序的调试工作。调试是调试,测试是测试,希望大家不要混淆这两种不同的概念。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。单元测试方法包括:控制流测试数据流测试、排错测试等。

站在测试的角度,测试人员希望开发人员能够在开发程序后进行单元测试。原因有二:

  1. 对于程序员,单元测试能保证一定程度的开发质量,对于程序员自身能力的提高和自我约束能起到很好的作用。很多情况下,整体测试执行中的bug数会被体现在开发的绩效中。而在单元测试环节,开发就能够通过自测修复一部分bug。

  2. 对于测试员,单元测试在保证开发质量的基础上,也减少了测试执行的成本。这个成本分为两方面。

测试执行不仅包括测试人员执行测试用例,很多时间是花费在程序员与测试员的交互上。这种交互是由于bug管理而产生的。因为bug数的减少,这部分测试执行的成本会被压缩。

测试执行大约占整个测试过程1/3的比例。由于开发质量问题造成测试增大工作量或者被推翻重来的情况很多。为了让测试成本可控并且有效地减少项目的成本代价,单元测试就是有效维护开发质量的方式。

当开发做了单元测试后,测试人员就利用冒烟测试检查单元测试成果。如果冒烟测试通过,项目正式进入测试阶段。 如果不通过,则程序被退回,需要开发自行测试通过后,再交于测试人员进行冒烟测试流程。

还有另外两种情况如下。

  1. 单元测试并不是由开发完成的。而是由专业的单元测试人员完成的。
  2. 单元测试是由测试人员提供测试用例,但测试执行由程序员自己完成。

这两种情况虽然和我们常规的单元测试定义不同。但理论是死的人是活的,只要测试部与开发部能够达成一致,对该项目有推进作用,那就是可行的方法。

2.集成测试

集成测试 (又称接口联调) 是在单元测试的基础上,将多个单元组合起来进行的测试,例如一个子系统,一个接口,一个流程等。集成测试的目的是检查单元之间的交互是否正确,是否有冲突或者不一致。集成测试通常由开发人员或者测试人员编写和执行,并且需要确保系统的各个部分能够协同工作。集成测试通常不是自动化的,因为它需要人工干预来确保系统的正确性。

集成测试的步骤如下:

  1. 确定集成测试的策略和方法。常见的集成测试策略有自顶向下、自底向上、大融合、小融合等,不同的策略有各自的优缺点,需要根据软件的结构和特点选择合适的策略。集成测试的方法有增量式、非增量式、回归测试等,需要根据软件的变化情况选择合适的方法。

  2. 设计集成测试用例。集成测试用例应该覆盖所有的模块间接口,以及可能出现的异常和错误情况。集成测试用例应该具有清晰的输入、输出、预期结果和判断标准,以便于执行和评估。

  3. 执行集成测试用例。根据集成测试策略和方法,按照一定的顺序和步骤,将各个模块逐渐组合起来,执行集成测试用例,观察输出结果和系统行为,记录测试过程中发现的问题和缺陷。

  4. 分析集成测试结果。对比输出结果和预期结果,判断集成测试是否通过,如果发现问题或缺陷,需要分析原因,定位责任模块,提出修改建议或解决方案,进行修复或重测。

3.系统测试

系统测试是对整个软件系统进行的测试,例如一个应用程序,一个网站,一个平台等。系统测试的目的是检查系统是否满足用户需求,是否能够在不同的环境和条件下正常运行,是否有性能或者安全问题。系统测试通常由测试人员或者用户编写和执行,使用一些专门的工具和框架,例如Selenium,LoadRunner等。

回归测试烟雾测试在系统测试中经常使用。

  • 回归测试包括改变旧的代码并重新测试,以确保这些改变不会引入新的错误或导致其他代码的错误。

  • 烟雾测试是测试软件的基本功能。测试的目的是确保软件的基本功能是正常的,系统已经准备好进行正式测试。

系统测试是测试人员最常遇到的测试类型,功能测试是系统测试的一个主要组成部分。 在测试人员完成功能测试后,如果需求规范中有对系统性能、安全性和兼容性的要求,测试人员需要根据规范中规定的指标进行性能、安全性和兼容性测试。

系统测试可以分为以下几个阶段:

  1. 引出测试需求
  2. 确定测试框架
  3. 创建测试用例
  4. 执行测试用例
  5. 创建测试报告和评估

在创建测试用例时,测试人员需要考虑测试执行的顺序。在测试用例执行阶段,测试人员通常可以将测试用例分为三轮测试和回归测试。将整个测试用例分为三轮,最好是两轮来重复关键功能,这被称为双重保证。这需要测试人员思考如何将测试用例布置得既安全又不影响测试效率。在测试人员完成测试并提交测试基线之前,通常会安排一次整体回归测试,以确保关键业务流程的正确性。

image-1682221415323

4. E2E测试

E2E测试是端到端测试(End To End)的简称,是一种软件测试方法,用于验证整个系统是否按照预期工作。E2E测试涵盖了从用户界面到后端数据库的所有层次,模拟真实用户的操作和场景。E2E测试的目的是确保系统的各个组件能够协同工作,满足用户的需求和期望。

E2E测试的大体步骤如下:

  1. 确定测试范围和目标。根据系统的业务流程和功能,选择要进行E2E测试的场景和用例,明确测试的输入和输出,以及预期的结果。

  2. 设计测试方案和脚本。根据测试范围和目标,设计测试方案,包括测试环境、测试工具、测试数据、测试步骤等。编写测试脚本,可以使用自动化工具或手工编写。

  3. 执行测试和记录结果。按照测试方案和脚本,执行测试,模拟用户的操作,观察系统的反馈。记录测试过程中的问题和异常,以及测试结果。

  4. 分析测试结果和生成报告。根据记录的数据,分析测试结果,评估系统的功能和性能是否符合预期。生成测试报告,包括测试概况、测试细节、问题汇总、改进建议等。

5. 验收测试

验收测试是在系统测试的结果之后进行的测试。它是由客户或最终用户进行的,向软件的购买者证明软件系统满足用户的需求。其测试数据通常是系统测试的测试数据的一个子集。不同的是,验收测试通常由软件系统购买者的代表参加,甚至在软件安装和使用的现场。它是软件投入使用前的最后测试

验收测试通常分为两部分。

  1. 阿尔法测试:这是由用户在开发环境的场所,在测试人员对用户的 "指导 "下进行的。测试人员负责记录在使用过程中遇到的任何错误或问题。换句话说,阿尔法测试是在一个受控环境中进行的。

  2. Beta测试:是由软件的最终用户在一个或多个客户现场进行的。与阿尔法测试不同,在测试现场通常没有开发人员或测试人员,因此测试是在不受测试开发人员控制的环境中对软件的 "真实 "应用。用户记录在测试期间遇到的任何问题,并定期向开发者报告。 测试人员在beta测试期间收到报告的问题后,首先对软件的缺陷进行筛选,开发人员进行必要的修改并向所有客户发布最终产品。

单元测试的局限性

从👆 几种测试类型对比可以看出,单元测试有它的局限性。

  • 单元测试不能覆盖所有的代码路径和场景,可能会遗漏一些边缘情况或异常情况。
  • 单元测试不能保证代码的可维护性和可扩展性,需要配合其他的设计原则和编码规范。
  • 单元测试不能替代其他层次的测试,如集成测试、系统测试和验收测试,需要与之协作和衔接。

由于”目光短浅”,只关注局部,无法保证最终表现。比如👇 的例子:

伞打开弹出去

总结

修复 bug 的成本与测试阶段有关,越早发现 bug 越节省成本。因此,单元测试是最划算的测试方法,应该占据大部分的测试资源。一般来说,建议按照 7:2:1 的比例分配单元测试、集成测试和 E2E 测试的时间和精力。

总之,单元测试,集成测试,系统测试是从不同的层次和角度对软件进行的测试,它们都是为了提高软件的质量和可靠性而进行的。在软件开发中,应该根据实际情况选择合适的测试类型和方法,并且保证测试的覆盖率和有效性。


weixin

16

评论区