测试方法—软件测试核心技术(6)

发表于:2020-8-24 11:03

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:51testing教研组    来源:51Testing软件测试网原创

  第4章 测试方法
  测试过程中提到每个测试阶段都可以细分为测试计划、测试设计、测试实现、测试执行这4个测试活动,其中测试设计活动需要考虑如何测试,包含测试方法的选用。测试方法可以分成白盒测试(whiteboxtesting)、黑盒测试(blackboxtesting)和灰盒测试(grayboxtesting),以及静态测试和动态测试。
  4.1 白盒测试
  针对代码通常可以使用白盒测试方法,通过对代码内部逻辑的测试来保证代码质量。
  4.1.1 什么是白盒测试
  以生活中的自动售货机为例,在对一个自动售货机进行测试时,我们可以准备大量的硬币,如1元的、5角的,甚至游戏币来对自动售货机进行黑盒测试和白盒测试。
  如果进行黑盒测试,测试人员并不清楚自动售货机内部的机械结构,但是测试人员很清楚售货机要实现的功能。下面给出几个示例。
  如果投入1元钱,购买价值5角钱的货物,售货机会送出货物并且找零。
  如果投入5角钱,购买价值5角钱的货物,售货机只送出货物。
  如果投入游戏币,售货机会识别并退还游戏币。
  ……
  对于测试人员而言,只要了解了售货机的功能,就完全可以站在用户即消费者的角度进行测试。
  给售货机投入不同组合的硬币,分别选择不同的货物,然后观察自动售货机将送出什么。将售货机的输入和输出一一对应起来,检测售货机的功能是否正确。
  这就是对自动售货机的黑盒测试。
  接下来,测试人员换一个角度,对自动售货机进行白盒测试。这时需要把自动售货机外围的一层铁皮全部拿走,看清楚售货机内部的机械结构,确定有多少个机械结构,每个机械结构由哪些零配件组成,零配件和零配件之间的触发是否正常,并针对每个机械结构开展测试。通过这种测试方法可以测试每种机械结构,一般不会存在漏测的可能。这就是对自动售货机的白盒测试。
  回到软件测试领域,当对一个被测对象(如函数)进行测试时,也可以分别采用黑盒方法和白盒测试方法。
  从黑盒测试的角度来讲,函数内部的逻辑结构不需要了解,测试人员只需要了解其功能即可,如该函数实现的是排序功能,即不必关心排序是如何实现的,用了什么样的算法,只需要输入若干数据,检测函数处理后的结果是不是进行了排序就可以了。
  而从白盒测试的角度看,就需要分析函数内部的逻辑结构(包括函数的结构、局部数据的定义和引用、函数内部各个控制语句组成的不同路径等)是否合法。
  在测试类图书中,白盒测试有多种叫法,如玻璃盒测试(glassboxtesting)、透明盒测试(clearboxtesting)、开放盒测试(openboxtesting)、结构化测试(structuredtesting)、基于代码的测试(code-basedtesting)、逻辑驱动测试(logic-driventesting)等。白盒测试是一种测试用例设计方法,在这里盒子指的是被测试的软件。顾名思义,白盒是可视的,你可以看到盒子内部的东西及里面是如何运作的,因此白盒测试需要你对系统内部的结构和工作原理有一个清楚的了解,并且基于这个知识来设计你的用例。
  白盒测试的原理如图4-1所示。
  使用白盒测试方法得到的测试用例能够达到以下目的。
  ●保证一个模块中的所有独立路径至少使用一次。
  ●对所有逻辑值均测试true和false。
  ●在上下边界及可操作范围内运行所有循环。
  ●检查内部数据结构以确保其有效性。
图4-1白盒测试的原理
  4.1.2 为什么要进行白盒测试
  我们应该保证程序需求的实现,为什么要花费时间和精力来担心(和测试)逻辑细节?答案在于软件自身的缺陷。
  ●逻辑错误和不正确假设与一条程序路径被覆盖的可能性成反比。当我们设计和实现主流之外的功能、条件或控制时,错误往往开始出现在我们工作中。日常处理往往易于了解,而特殊情况下的处理则难以理解。
  ●我们经常相信某逻辑路径不可能执行,而事实上,它可能在正常的基础上执行。程序的逻辑流有时是违反直觉的,这意味着我们关于控制流和数据流的一些无意识的假设可能导致设计错误,只有通过路径测试才能发现这些错误。
  ●笔误是随机的。当编写一个程序的源代码时,有可能产生某些笔误,很多将通过语法检查机制发现,但是其他的在测试开始时才会被发现。笔误出现在主流程上和不明显的逻辑路径上的概率是一样的。
  正如Beizer所说的,“错误潜伏在角落里,聚集在边界上”,而通过白盒测试更可能发现它。
  4.1.3 白盒测试的常用技术
  白盒测试技术一般可分为静态分析和动态分析技术两类。
  ●静态分析技术:主要有控制流分析技术、数据流分析技术、信息流分析技术。
  ●动态分析技术:主要有逻辑覆盖率测试(分支测试、路径测试等)、程序插装等。
  1.覆盖率
  在白盒测试中另一个经常用到的技术是覆盖率技术。一方面,覆盖率技术可以指导测试用例的设计;另一方面,可以通过覆盖率来衡量白盒测试的力度。
  白盒测试中经常用到的覆盖率是逻辑覆盖率,主要有语句覆盖率、判定覆盖率、条件覆盖率、判定条件覆盖率、路径覆盖率。
  2.程序插装
  在动态分析技术中,最重要的技术是路径测试、分支测试和程序插装。
  为了判断程序中的路径和分支测试是否充分,我们可以使用程序插装技术对其进行度量。程序插装好比我们在调试程序时常常要在程序中插入一些print语句。print语句用于在执行程序时,输出我们最关心的信息,我们可进一步通过这些信息了解执行过程中程序的一些动态特性,如程序的实际执行路径或者特定变量在特定时刻的取值。
  从这一思想发展出的程序插装技术能够按用户的要求,获取程序的各种信息,因而这成为测试工作的有效手段。简单来说,程序插装技术就是通过向被测程序中插入操作来实现测试目的的技术。
  例如,一个求最大公约数的案例如图4-2所示。在程序的不同路径或分支上,我们分别插入了不同的检查点,即C(1)、C(2)、C(3)、C(4)、C(5)、C(6)。令6个变量的初始值都为0,每当这个变量所在的路径或分支被执行一次,这个变量就会自动增1。当所有针对这个程序的用例都执行完毕的时候,根据这6个变量的取值,我们就可以判断,哪些路径或者分支测试了,哪些没有测试,或者说,哪些测试得相对比较充分,哪些测试得不够充分。
  4.1.4 白盒测试的优缺点
  白盒测试的优点如下。
  ●迫使测试人员仔细地思考软件的实现方式。
  ●可以检测代码中的每条分支和路径。
  ●揭示隐藏在代码中的错误。
  ●对代码的测试比较彻底。
图4-2求最大公约数的案例
  ●可以优化测试。
  白盒测试的缺点如下。
  ●成本昂贵。
  ●无法检测代码中遗漏的路径和数据敏感性错误。
  ●无法验证规格的正确性。

查看《软件测试核心技术 从理论到实践》全部连载章节
版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。
任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号