【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析

马肤
摘要:本文详细介绍了白盒测试中的单元测试理论基础及六种用例设计技术。通过深入剖析单元测试的概念和重要性,文章阐述了如何有效地进行白盒测试,以确保软件的质量和可靠性。通过详细解析六种用例设计技术,帮助读者更好地理解和掌握单元测试的实践应用。本文旨在为软件开发者提供有关白盒测试的全面指导,以提高软件开发的效率和质量。

【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第1张

【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第2张

目录

🌞前言

🏞️1. 单元测试的理论基础

🌊1.1 单元测试是什么

🌊1.2 单元测试的好处

🌊1.3 单元测试的要求

🌊1.4 测试框架-Junit4的介绍

🌊1.5 单元测试为什么要mock

🏞️2. 单元测试用例设计技术(6种)

🌊2.1 语句覆盖

🌊2.2 判定覆盖【也称分支覆盖】

🌊2.3 条件覆盖

🌊2.4 判定条件覆盖

🌊2.5 组合覆盖

🌊2.6 路径覆盖


🌞前言

白盒测试【也称透明盒测试、结构测试或逻辑驱动测试】:

  • 定义: 白盒测试是把测试对象看作一个透明白色的盒子,测试人员依据程序内部逻辑结构相关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。
  • 目的: 白盒测试旨在验证程序的内部逻辑是否正确,检查代码覆盖率,并找出可能存在的编程错误、逻辑错误和性能问题。
  • 测试对象: 白盒测试通常由开发人员或专业的测试工程师执行,他们具有编程和软件设计方面的专业知识。
  • 测试方法: 白盒测试通常使用技术性的测试方法,如语句覆盖、分支覆盖、路径覆盖等,以确保对代码的各个部分进行了充分的测试。

    黑盒测试【也称功能测试或规格驱动测试】:

    • 定义: 黑盒测试是把测试对象看作一个黑色不透明的盒子,在不考虑程序内部结构和实现细节的情况下设计和执行测试用例的过程。测试者只关注输入和输出之间的关系,而不考虑内部工作原理。
    • 目的: 黑盒测试旨在验证软件的功能是否符合规格说明和用户需求,检查系统的功能完整性和正确性。
    • 测试对象: 黑盒测试通常由测试人员执行,不用了解系统的内部实现细节,只根据需求文档和功能规格进行测试。
    • 测试方法: 黑盒测试通常使用功能性测试方法,如等价类划分、边界值分析、场景测试等,以验证系统的功能是否符合预期。

      【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第3张

      综上,白盒测试和黑盒测试的主要区别在于测试者对系统内部结构的了解程度。白盒测试关注程序内部逻辑和代码覆盖率,而黑盒测试则关注系统的功能和用户体验。


      🏞️1. 单元测试的理论基础

      🌊1.1 单元测试是什么

      单元测试是软件开发中的一种测试方法(由开发者编写),对程序中的最小可测试单元(通常是函数、方法或类)进行检查和验证。通常一个单元测试是由于判断每个特定条件(或场景)下某个特定函数的行为。


      🌊1.2 单元测试的好处

      • 测试更充分:单元测试属于白盒测试
      • bug修复代价最少
      • 代码自review
      • 代码功能更具易用性
      • 回归测试
      • 快速定位bug

        🌊1.3 单元测试的要求

        • 全自动执行
        • 独立
        • 可重复执行
        • 需要维护

          🌊1.4 测试框架-Junit4的介绍

          JUnit 4 中常用的注解包括:

          • @Test: 用于标识测试方法。
          • @Before: 标识在每个测试方法之前需要执行的方法。
          • @After: 标识在每个测试方法之后需要执行的方法。
          • @BeforeClass: 标识在测试类加载时需要执行的方法。
          • @AfterClass: 标识在测试类销毁时需要执行的方法。
          • @Ignore 或 @Ignore("reason"): 标识忽略测试方法,可以附带原因说明。
          • @RunWith: 指定测试运行器,如 @RunWith(Parameterized.class) 用于参数化测试。
          • @Rule: 用于创建测试规则,如 @Rule public ExpectedException exception = ExpectedException.none() 用于测试异常。

            Junit4的单元测试用例的执行顺序

            @BeforeClass->@Before->@Test->@After->@AfterClass

            每个测试方法的调用顺序

            @Before->@Test->@After


            🌊1.5 单元测试为什么要mock

            单元测试中使用 Mock 的主要目的是解决测试环境的依赖性和复杂性。

            1. 提高测试用例的速度: 在单元测试中,有时无法直接访问外部依赖,或者外部依赖的操作会耗费较长时间。通过 Mocking,可以避免真实的外部调用,从而提高测试的速度。

            2. 解除外部依赖:从而将测试的焦点放在被测试组件本身,而不受外部依赖的影响。比如数据库、第三方接口等,使测试用例可以独立运行。

            3. 减少工作量:减少编写测试用例的工作量,提高效率。

            综上,使用 Mock 是为了更好地隔离测试目标、消除测试环境的不确定性、提高测试速度、模拟异常情况以及降低测试成本,从而使单元测试更加简单、可靠和高效。


            🏞️2. 单元测试用例设计技术(6种)

            单元测试用例设计技术可分成大致6种,由弱至强,工作量由低到高:

            • 语句覆盖:程序中每条语句至少被执行一次。
            • 判定覆盖【也称分支覆盖】:确保每个分支的两个可能的结果都被至少一次执行。即每个判断的取真、取假至少执行一次。
            • 条件覆盖:每一个判断中的每个子句的不同true  false都要取一次。
            • 判定条件覆盖:确保每个分支的两个可能的结果以及每个条件的每个可能的结果都被至少一次执行(即满足条件覆盖+判定覆盖)。
            • 组合覆盖【也称条件组合覆盖】:确保每个条件的每个可能的组合结果都被至少一次执行(比如x>=80 and y>=80,这个判断可拆分成如x>=80、y>=80,那么测试用例需要让其分别满足 T T、T F、F T、F F)。
            • 路径覆盖:覆盖程序的所有可能的路径。

              🌊2.1 语句覆盖

              语句覆盖:程序中每条语句至少被执行一次。

              【案例】语句覆盖

              【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第4张

              语句覆盖的测试用例

              用例序号XY路径
              15050OBDE
              210040OBCE
              39090OAE

              说明:上述示例覆盖了所有语句【1 ->T、2 ->T、3 ->T】。

              • x=50 y=50:覆盖了语句【3 ->T】
              • x=100 y=40:覆盖了语句【2 ->T】
              • x=90 y=90:覆盖了语句【1 ->T】

                🌊2.2 判定覆盖【也称分支覆盖】

                判定覆盖:确保每个分支的两个可能的结果都被至少一次执行。即每个判断的取真、取假至少执行一次。

                 【案例】评定覆盖(也称分支覆盖)

                【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第4张

                判定覆盖的测试用例

                用例序号XY路径
                15050OBDE
                210040OBCE
                39090OAE

                说明:上述示例覆盖了所有分支。

                • x=50 y=50:覆盖了分支【No-No】
                • x=100 y=40:覆盖了分支【No-Yes】
                • x=90 y=90:覆盖了分支【Yes】

                  🌊2.3 条件覆盖

                  条件覆盖:每一个判断中的每个子句的不同true  false都要取一次。

                   【案例】条件覆盖

                  【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第4张

                  条件覆盖的测试用例

                  这里其实有四个判断子句,分别是:x>=80、y>=80、x+y=140、(x>90 or y>90).

                  可以这样设计条件覆盖的测试用例:

                  x取值y取值x>=80y>=80x+y=140(x>90 or y>90)
                  6085FTFF
                  10040TFTT

                  说明:上述示例覆盖了所有判断子句。

                  • x=60 y=85 与 x=100 y=40 覆盖了四个判断子句为 true 和 false 的情况。

                    🌊2.4 判定条件覆盖

                    判定条件覆盖:确保每个分支的两个可能的结果以及每个条件的每个可能的结果都被至少一次执行(即满足条件覆盖+判定覆盖)。

                     【案例】判定条件覆盖

                    【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第4张

                    判定条件覆盖的测试用例

                    XY路径x>=80y>=80x+y=140(x>90 or y>90)覆盖分支
                    9090OAETTFFYes
                    5050OBDEFFFFNo-No
                    10040OBCETFTTNo-Yes

                    说明:上述示例覆盖了所有判断子句+分支。


                    🌊2.5 组合覆盖

                    组合覆盖【也称条件组合覆盖】:确保每个条件的每个可能的组合结果都被至少一次执行(比如x>=80 and y>=80,这个判断可拆分成如x>=80、y>=80,那么测试用例需要让其分别满足 T T、T F、F T、F F)。

                     【案例】组合覆盖

                    【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第4张

                    组合覆盖的测试用例

                    组合覆盖需要拆分判断子句

                    对于第一个判断 x>=80 and y>=80 ,由于不是原子的可进一步拆分成 x>=80 和 y>=80 。

                    那么测试用例需要让第一个判断分别满足下面的条件:

                    【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第9张

                    对于第二个判断x+y=140 and (x>90 or y >90) ,由于不是原子的可进一步拆分成x+y=140 、x>90 和y >90。那么测试用例需要让第二个判断分别满足下面的条件:

                    【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第10张

                    说明:测试示例需要覆盖上面所有的条件。


                    🌊2.6 路径覆盖

                    路径覆盖:覆盖程序的所有可能的路径。

                     【案例】路径覆盖

                    【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第4张

                    路径覆盖的测试用例

                    用例序号XY路径
                    15050OBDE
                    210040OBCE
                    39090OAE

                    说明:上述示例覆盖了所有路径。

                    • x=50 y=50:覆盖了路径【OBDE】
                    • x=100 y=40:覆盖了路径【OBCE】
                    • x=90 y=90:覆盖了路径【OAE】

                      【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第2张

                      【白盒测试】单元测试的理论基础及用例设计技术(6种)详解,白盒测试详解,单元测试理论基础与六种用例设计技术全解析 第13张


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码