【软件测试】什么是黑盒测试?什么是白盒测试? 灰盒测测试?

目录

  • 一. 白盒测试.
    • 1.1 语句覆盖
    • 1.2 判定覆盖
    • 1.3 条件覆盖
    • 1.4 判定条件覆盖.
    • 1.5 条件组合覆盖
    • 1.6 路径覆盖
  • 二.黑盒测试.
    • 2.1 黑盒测试常用方法
    • 2.2 黑盒测试的优缺点
  • 三. 灰盒测试
    • 3.1 灰盒测试常用的方法
    • 3.2 灰盒测试的优点与挑战

  • 软测测试按照测试的方法分类,可以分为白盒测试, 黑盒测试和灰盒测试, 那么他们分别是什么意思?主要的测试内容和意义是什么?

一. 白盒测试.

  • 白盒测试的定义: 白盒测试又称为结构测试或者逻辑测试, 它一般用来分析程序内部的结构, 针对程序的逻辑结构来设计测试用例.

  • 白盒测试主要有两种:

    1. 静态测试: 常见于桌面检查, 代码审查, 代码扫描工具等.
    2. 动态测试: 语句覆盖, 判定覆盖, 条件覆盖, 判定条件覆盖, 条件组合覆盖, 路径覆盖.

1.1 语句覆盖

  • 语句覆盖定义: 每个语句都至少执行一次.(即代码中的语句都必须被执行到)

  • 现给出如下代码:
    if A and B
    then action1
    if C or D
    then action2

  • 对于第一条语句: A和B都必须为true 才能够执行action1 确保每一条语句都执行.

  • 对于第二条语句: 有三种情况可以执行保证每条语句都执行, C true D true ||
    C true D false || C false D true (即必须保证C or D为真 ) 此时才可以执行action2

  • 此时的语句覆盖可以是 :

    • 语句覆盖测试用例: A true B true C true D false
    • 此时,就可以保证每个语句都执行. 此处只是列举其中的一种情况, 亦可以是其他的覆盖
  • 语句覆盖的优点:

    • 关注判定:判定覆盖主要关注程序中的判定语句,如if-else语句、switch语句等。
    • 真假分支:对于每个判定语句,都需要设计测试用例来覆盖其取“真”和取“假”的情况。
    • 全面覆盖:确保程序中的每一个判定都至少经历一次取“真”和一次取“假”的分支。
  • 语句覆盖的缺点:

    • 测试质量低:语句覆盖只关注语句的执行,而不考虑逻辑路径、条件分支、循环等复杂结构。因此,即使实现了语句覆盖,也可能遗漏很多重要的测试场景,导致测试质量不高。
    • 误导性:语句覆盖可能会给人一种“程序已经测试得很充分”的错觉,而实际上程序可能还存在很多未被发现的错误和缺陷。这是因为语句覆盖没有考虑到程序中的逻辑关系和依赖关系。
    • 缺乏深度:对于包含多个分支、循环和复杂逻辑的程序,语句覆盖的局限性尤为明显。它无法确保程序在所有可能的输入和条件下都能正确运行。
    • 重复代码问题:如果程序中存在大量重复的代码(如函数或方法中的重复语句),语句覆盖可能会导致测试用例的冗余和不必要的重复。这是因为每个重复的语句都需要被单独测试,而实际上它们可能具有相同的逻辑和功能。
    • 忽略异常和错误处理:语句覆盖通常不会特别关注程序的异常和错误处理逻辑。这意味着即使程序中的异常和错误处理语句被覆盖了,也可能无法确保这些逻辑在实际运行时能够正确工作。

1.2 判定覆盖

  • 判定覆盖定义:也称为分支覆盖(Branch Coverage),是软件测试中的一种覆盖技术,它要求设计足够的测试用例,以确保程序中的每一个判定(或分支点)至少获得一次“真”和一次“假”的结果,即程序流程图中的每一个真假分支至少被执行一次。(无论出现集中判定结果, 在测试用例中必须体现出这两种判定结果)
  • 现给出如下代码:
    if A and B
    then action1
    if C or D
    then action2
  • 对于语句一:
    • if判定语句为真: A true B true
    • if判定语句为假: A true B false || A false B true || A false B false
  • 对于语句二:
    • if判定语句为真: C true D true || C true D false || C false D true
    • if判定语句为假: C false D false
  • 此时的判定覆盖可以是:
    • 判定覆盖的测试用例1: A true B true C true D false
    • 判定覆盖的测试用例2: A true B false C false D false
    • 此时,就可以保证每个语句都执行. 此处只是列举其中的一种情况, 亦可以是其他的覆盖
  • 判定覆盖的优点
    • 相比于语句覆盖,判定覆盖能够更全面地测试程序中的逻辑路径,因为它考虑了判定语句的不同结果。
    • 有助于发现由于判定条件错误或遗漏而导致的逻辑错误。
  • 判定覆盖的缺点
    • 判定覆盖仍然可能遗漏某些路径,特别是当多个条件组合时,可能无法覆盖所有可能的条件组合。
    • 对于复杂的程序,设计足够的测试用例以实现判定覆盖可能会比较困难且耗时。

1.3 条件覆盖

  • 条件覆盖定义: 设计足够的测试用例,使得程序中每个判定表达式中的每个条件的每种可能值都至少执行一次。(每个条件的可能值都必须被执行过)

  • 现给出如下代码:
    if A and B
    then action1
    if C or D
    then action2

  • 对于语句一: 它的条件有A和B,他们的情况分别为true或者false.

  • 对于语句二: 它的条件有C和D,他们的情况分别为true或者false.

  • 此时的判定覆盖可以是:

    • 判定覆盖的测试用例1: A true B true C true D true
    • 判定覆盖的测试用例2: A false B false C false D false
    • 此时,就可以保证每个语句都执行. 此处只是列举其中的一种情况, 亦可以是其他的覆盖
  • 条件覆盖的优点:

    • 高效检测条件错误:能够确保每个条件表达式中的每个条件都至少取到其所有可能的结果,有助于发现条件逻辑错误。
    • 提高代码覆盖率:相比于其他覆盖策略,条件覆盖通常能提供更高的代码覆盖率,特别是针对条件表达式丰富的代码段。
    • 促进代码质量:通过细致的条件测试,有助于提升代码质量,减少因条件逻辑不当而导致的软件缺陷。
  • 条件覆盖的缺点:

    • 可能产生冗余测试:有时为了满足条件覆盖的要求,可能会设计一些在实际应用中不太可能出现的测试用例,这些测试用例可能增加测试成本而对软件质量的提升贡献不大。
    • 忽略条件组合:条件覆盖主要关注单个条件的取值,而不考虑条件之间的组合关系,可能无法发现由条件组合错误引起的软件问题。
    • 测试成本较高:为了实现条件覆盖,需要设计更多的测试用例,增加了测试工作的复杂性和成本。
    • 依赖代码实现:条件覆盖测试用例的设计高度依赖于代码的具体实现,代码的任何变动都可能需要重新设计测试用例。

1.4 判定条件覆盖.

  • 判定条件覆盖定义: 顾名思义就是既要包含条件覆盖(每个条件所出现的每种情况都必须包含在测试用例之中), 又要包含判定覆盖(每一个判定的两种情况都必须体现在测试用例之中).
  • 现给出如下代码:
    if A and B
    then action1
    if C or D
    then action2
  • 此处只需要将上面的判定覆盖的用例和 条件覆盖的用例结合, 就可以得出判定条件覆盖的测试用例:
    • 用例1: A true B true C true D true
    • 用例2: A false B false C false D false
  • 判定条件覆盖的优点:
    • 全面测试:判定条件覆盖不仅考虑了判断语句的真假分支,还深入到了判断条件内部,确保了每个条件的不同取值都被测试到,从而提供了更为全面的测试覆盖。
    • 提高测试质量:通过测试每个条件的不同取值和判断的不同结果,判定条件覆盖有助于发现更多的逻辑错误和边界情况,提高测试质量。
    • 促进代码质量:在开发过程中实施判定条件覆盖,可以促使开发人员编写更清晰、更易于测试的代码,从而提高代码质量。
  • 判定条件覆盖的缺点:
    • 测试用例设计复杂:为了实现判定条件覆盖,需要设计更为复杂的测试用例,以覆盖每个条件的不同取值和判断的不同结果,这增加了测试工作的难度和成本。
    • 测试成本较高:由于需要设计更多的测试用例,并且这些测试用例的执行可能涉及更复杂的测试场景和输入数据,因此判定条件覆盖的测试成本相对较高。
    • 可能忽略条件组合:尽管判定条件覆盖考虑了条件的不同取值,但它仍然可能忽略条件之间的组合情况。在某些情况下,可能需要额外的测试用例来覆盖这些条件组合。
    • 依赖代码实现:判定条件覆盖的测试用例设计高度依赖于代码的具体实现,代码的任何变动都可能导致测试用例需要重新设计或修改。

1.5 条件组合覆盖

  • 条件组合覆盖定义:(Condition Combination Coverage)是白盒测试中的一种高级测试策略,它要求设计足够的测试用例,使得每个判定语句中所有条件的各种可能组合都至少被执行一次。这种测试方法不仅关注单个条件的取值,还关注条件之间的组合关系,从而提供更全面的测试覆盖。
  • 条件组合覆盖的优点:
    • 提供更全面的测试覆盖,有助于发现更多潜在的逻辑错误和边界情况。
    • 提高测试质量,增强软件的可靠性和稳定性。
  • 条件组合覆盖的缺点:
    • 测试用例设计复杂,需要投入更多的时间和资源。
    • 在条件较多或组合复杂的情况下,测试用例数量可能非常庞大,导致测试成本增加。

1.6 路径覆盖

  • 路径覆盖的定义: 其核心思想是设计足够多的测试用例,以确保程序中的每条可能路径都至少被执行一次。如果程序图中有环,则要求每个环也至少经过一次。路径覆盖是白盒测试法中的一种重要技术,因为它覆盖了程序中所有可能的执行路径,因此其覆盖程度非常高。

  • 路径覆盖的优点:

    • 高代码覆盖率:路径覆盖致力于确保程序中的每条可能路径都被执行至少一次。这有助于发现那些只在特定路径上才会出现的问题,从而提高代码的整体覆盖率。
    • 发现潜在错误:通过测试所有可能的执行路径,路径覆盖能够揭示那些在常规测试(如语句覆盖或判定覆盖)中可能遗漏的逻辑错误或异常处理不当的问题。
    • 增强软件可靠性:通过确保所有路径都被测试,路径覆盖有助于增强软件的可靠性和稳定性,因为它减少了软件中隐藏的错误和漏洞。
    • 提高测试质量:路径覆盖要求测试人员深入理解程序的结构和逻辑,从而设计出能够覆盖所有路径的测试用例。这种深入的测试设计有助于提高测试的质量和有效性。
  • 路径覆盖的缺点:

    • 测试成本高:对于复杂的程序,可能的执行路径数量可能非常庞大,甚至是指数级的。这意味着为了实现路径覆盖,需要设计并执行大量的测试用例,从而导致测试成本显著增加。
    • 实现难度大:在实际应用中,完全实现路径覆盖可能非常困难。程序中的循环、条件分支和函数调用等因素都可能增加路径的复杂性和数量。此外,由于程序的动态性和不确定性,某些路径可能在实际运行中很难被触发。
    • 冗余测试:在某些情况下,路径覆盖可能会产生冗余的测试。例如,某些路径可能在实际应用中很少被触发,或者它们的执行结果对程序的整体功能没有显著影响。为这些路径设计测试用例可能会浪费测试资源。
    • 对测试人员要求高:路径覆盖要求测试人员具有深入的程序分析能力和良好的测试用例设计能力。测试人员需要能够准确识别所有可能的执行路径,并设计出能够覆盖这些路径的测试用例。这对测试人员的技能和经验提出了较高的要求。

二.黑盒测试.

  • 黑盒测试的定义: 又称功能测试或数据驱动测试,是基于需求规格和用户文档来测试软件系统的功能是否按照预期工作。在测试中,将程序看作一个不能打开的黑盒子,测试人员不需要了解程序内部的代码或结构,只需通过程序的接口进行测试,验证其功能是否满足需求规格说明书的要求

2.1 黑盒测试常用方法

  • 黑盒测试的方法:
    • 等价类划分法:将程序的输入域划分成若干部分(子集),然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值。
    • 边界值分析法:对输入或输出的边界值进行测试,通常与等价类划分法结合使用,以提高测试的覆盖率和有效性。
    • 错误推测法:基于测试人员的经验和直觉,推测程序中可能存在的错误,并设计相应的测试用例来验证这些错误是否存在。
    • 场景设计法:通过模拟特定场景边界发生的事件,触发某个动作的发生,并观察事件的最终结果,从而发现需求中存在的问题。
    • 因果图法:一种简化了的逻辑图,能直观地表明程序输入条件(原因)和输出动作(结果)之间的相互关系,从而设计测试用例。
    • 判定表法:通过条件桩、动作桩、条件项、动作项构建整体过程,将复杂的问题按照各种可能的情况全部列举出来,从而设计完整的测试用例集合。
    • 正交试验设计法:研究多因素多水平的一种设计方法,通过少数的试验替代全面试验,提高测试效率。

注:
如有想了解更多关于黑盒测试方法具体内容的可以去我前的一篇博客进行深入的了解: https://blog.csdn.net/m0_74105656/article/details/142360590?fromshare=blogdetail&sharetype=blogdetail&sharerId=142360590&sharerefer=PC&sharesource=m0_74105656&sharefrom=from_link

2.2 黑盒测试的优缺点

  • 黑盒测试的优点:
    • 独立性:黑盒测试不需要了解软件系统的内部代码或结构,测试人员可以独立进行测试,不受开发人员的影响。
    • 用户角度:黑盒测试更加贴近用户的使用场景,能够模拟用户的行为,更容易发现用户体验方面的问题。
    • 全面性:通过黑盒测试可以测试软件系统的各个功能模块,并确保各个功能之间的交互正常,从而提高软件系统的整体质量。
    • 容错性:黑盒测试能够帮助发现软件系统中隐藏的潜在问题和异常情况,从而提前修复问题,保证软件的稳定性和可靠性。
    • 易于理解:黑盒测试案例通常基于需求规格和用户文档,易于理解和执行,既能帮助测试人员更好地理解软件功能,也方便其他项目成员了解测试情况。
  • 黑盒测试的缺点:
    • 覆盖率较低:黑盒测试不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%左右,有些bug可能检测不出来。
    • 自动化测试的复用性较低:由于黑盒测试主要关注于软件的功能,而不是代码细节,因此自动化测试脚本的复用性可能较低。
    • 依赖需求规格说明书:黑盒测试直接依赖于需求规格说明书,如果需求规格说明书不全面或存在错误,得到的测试结果也可能不完善。

三. 灰盒测试

  • 灰盒测试的定义: 它在对应用程序内部结构有部分了解的情况下对软件产品或应用程序进行测试。灰盒测试不仅关注输出、输入的正确性,同时也关注程序内部的情况,但不像白盒测试那样详细、完整地了解内部逻辑,而是基于部分内部知识和外部表现来设计测试用例。

3.1 灰盒测试常用的方法

  • 确定程序的所有输入和输出:这是测试的基础,需要明确程序接收哪些输入,以及期望的输出结果。
  • 确定程序所有状态:了解程序在不同操作下的状态变化,有助于设计更全面的测试用例。
  • 确定程序主路径:识别程序的主要执行路径,确保这些路径被充分测试。
  • 确定程序的功能:明确程序需要实现的具体功能,并设计测试用例来验证这些功能。
  • 产生实验子功能的输入:针对程序的子功能,设计特定的输入数据。
  • 制定验证子功能的输出:预期子功能在给定输入下的输出结果,以便验证其正确性。
  • 执行测试用例:运行测试用例,观察程序的实际输出与预期输出是否一致。
  • 检验测试用例的结果正确性:分析测试结果,确认程序是否按预期工作。
  • 回归测试:在程序修改后重新执行测试用例,确保修改没有引入新的错误。

3.2 灰盒测试的优点与挑战

  • 灰盒测试的优点:
    • 增强测试覆盖率:灰盒测试能够结合内部知识和外部表现,增加测试的全面性。
    • 便于bug定位:通过部分了解内部逻辑,灰盒测试可以更快地定位问题根源。
    • 提高测试效率:相比白盒测试,灰盒测试不需要深入了解所有代码细节,降低了测试复杂度。
  • 灰盒测试的挑战:
    • 测试成本:灰盒测试可能需要更多的时间和资源,特别是对于复杂的系统。
    • 测试人员要求:灰盒测试要求测试人员具备一定的编程和系统设计知识,增加了学习成本。
    • 系统依赖性:灰盒测试依赖于对系统内部结构的部分了解,如果系统结构复杂或频繁变化,测试难度会增加。

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

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

相关文章

速度与安全:边缘计算如何改变游戏规则

Ⅰ初探边缘计算 1. 边缘计算是什么? 边缘计算,就像是城市里的便利店,它让数据处理不再需要长途跋涉到市中心的“超级计算机”超市,而是在你身边的每个角落就能快速完成。想象一下,你急需一杯冰咖啡,边缘计…

【ArcGIS Pro实操第三期】多模式道路网构建(Multi-model road network construction)原理及实操案例

ArcGIS Pro实操第三期:多模式道路网构建原理及实操案例 1 概述1.1 原理 2 GIS实操2.1 新建文件并导入数据2.2 创建网络数据集2.3 设置连接策略(Setting up connectivity policies)2.4 添加成本(Adding cost attributes&#xff09…

如何在 Windows 台式机或笔记本电脑上恢复未保存的 Excel 文件

您的汗水很容易化为灰烬,如果您没有保存长时间编写的项目报告或电子表格,这可能会令人心碎。丢失 Windows PC 上未保存的 Excel 文件可能是导致这种情况的原因。但您不应该惊慌。仍然有机会恢复未保存的 Excel 文件。 在本指南中,我们将向您…

细说硫酸钙防静电地板的材质结构和优势特点

防静电地板有全钢基材的、硫酸钙基材的、铝合金基材的,在一些防静电要求、承载要求、铺设要求、铺装效果要求很高的场合,如银行、电信机房、移动机房、智能化办公室、部队指挥中心,通常都会使用硫酸钙防静电地板。那么什么是硫酸钙防静电地板…

《大学编译原理:语言翻译的艺术与科学》

在大学的计算机科学课程中,编译原理无疑是一门充满挑战与魅力的重要学科。它就像是一座连接高级编程语言和计算机硬件的桥梁,让程序员能够用人类易于理解的语言编写代码,而计算机则能高效地执行这些指令。 一、编译原理的重要性 编译原理是…

基于springboot vue 大学生竞赛管理系统设计与实现

博主介绍:专注于Java vue .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑主从博弈多套餐定价与分布鲁棒机会约束的新能源共享储能优化配置研究》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

C语言:编译,链接和预处理详解

目录 一.翻译环境和运行环境 二.翻译环境 ​编辑 1.预处理(预编译) (1).#和##运算符 ①.#运算符 ②## 运算符 (2).#undef (3).条件编译 ①单分支的条件编译 ②多个分支的…

由动静压之比求马赫数的MATLAB函数

函数介绍 输入:动静压之比 p r e pre pre 输出:马赫数 M a c h Mach Mach 【注】仅适合亚音速的情况,如果动静压之比过大或过小,会有相应的提示 函数源代码 function [m] pre2mach(pre) m(5*(pre1).^0.2857-5).^0.5; if pre&l…

封装左侧抽屉可拖拽组件【可多个】

一、案例效果 二、案例代码 封装抽屉组件 <template><div class"drag-drawer"><div class"out-box" :style"style"><mtd-tooltip:content"collapse ? 展开面板 : 收起面板"class"tool-tip":placeme…

AI漏扫工具:SmartScanner

SmartScanner 是一款先进的 AI 漏洞扫描工具&#xff0c;旨在帮助用户识别和修复软件、系统及网络中的安全漏洞。以下是 SmartScanner 的一些主要特点&#xff1a; 1.智能识别 通过机器学习和深度学习技术&#xff0c;SmartScanner 能够快速识别已知和未知的漏洞&#xff0c;提…

推荐一个移动端支持多框架的UI组件库

支持的前端框架&#xff1a;Vue、React、Angular 地址&#xff1a;https://ionicframework.com/docs/

Web端云剪辑解决方案,提供前端产品源码

美摄科技作为业界领先的视频技术服务商&#xff0c;匠心打造Web端云剪辑解决方案&#xff0c;以前沿技术赋能企业用户&#xff0c;开启视频创作与编辑的新纪元。 【云端赋能&#xff0c;重塑剪辑体验】 美摄科技的Web端云剪辑解决方案&#xff0c;颠覆了传统视频编辑的局限&a…

一文说透RTMP、RTSP、RTP、HLS、MPEG-DASH

实时视频传输协议 1. RTMP&#xff08;Real Time Messaging Protocol&#xff09; 简介&#xff1a;RTMP是由Adobe公司开发的实时消息传输协议&#xff0c;主要用于流媒体数据的传输。它基于TCP传输&#xff0c;具有低延迟、高可靠性的特点。特点&#xff1a;RTMP支持多种视频…

【Mysql】Centos 安装 Mysql8.0

官网下载安装包 官网地址&#xff1a;MySQL :: Download MySQL Community Server 查看服务器的名称和版本号 lsb_release -a 查看服务的架构 uname -m 下载对应的版本&#xff0c;这里操作系统选择 Red Hat 就可以了。&#xff08;CentOS 就是将 RHEL 发行的源代码从新编译…

828华为云征文 | 华为云 X 实例服务器存储性能测试与优化策略

目录 引言 1 华为云 X 实例服务器概述 2 存储性能测试方法与工具 2.1 测试方法 2.2 测试工具 3 FIO&#xff08;Flexible I/O Tester&#xff09;读写性能测试 3.1 顺序读写测试 3.2 随机读写测试 4 hdparm性能测试 4.1 实际读取速度测试 4.2 缓存读取速度测试 4.3…

最大似然估计,存在即合理

一、感性认识 认识的第一步来自感性的认识&#xff0c;先来感性的了解一下最大似然估计。现在&#xff0c;假设有两个学院&#xff0c;物理和外语学院。两个学院都各有特点&#xff0c;物理学院的男生占比大&#xff0c;外语学院女生占比大。如果在一次实验从两个学院中随机的…

SPSS26统计分析笔记——3 假设检验

1 假设检验原理 假设检验的基本原理源于“小概率事件”原理&#xff0c;是一种基于概率性质的反证法。其核心思想是小概率事件在一次试验中几乎不会发生。检验的过程首先假设原假设 H 0 {H_0} H0​成立&#xff0c;然后通过统计方法分析样本数据。如果样本数据引发了“小概率事…

《让手机秒变超级电脑!ToDesk云电脑、易腾云、青椒云移动端深度体验》

前言 科技发展到如今2024年&#xff0c;可以说每一年都在发生翻天覆地的变化。云电脑这个市场近年来迅速发展&#xff0c;无需购买和维护额外的硬件就可以体验到电脑端顶配的性能和体验&#xff0c;并且移动端也可以带来非凡体验。我们在外出办公随身没有携带电脑情况下&#x…

Vue3:toRaw与markRaw

目录 一.toRaw 1.性质 2.作用 二.markRaw 1.性质 2.作用 三.toRaw的使用 四.markRaw的使用 五.代码示例 在Vue 3中&#xff0c;toRaw和markRaw是两个用于处理响应式对象的全局函数。 一.toRaw 1.性质 toRaw是一个全局函数&#xff0c;它接受一个由reactive或ref生成…