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

第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。

●在上下边界及可操作范围内运行所有循环。

●检查内部数据结构以确保其有效性。

53a081fd1b4c294d45e217d4a742c466.png

图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白盒测试的优缺点

白盒测试的优点如下。

●迫使测试人员仔细地思考软件的实现方式。

●可以检测代码中的每条分支和路径。

●揭示隐藏在代码中的错误。

●对代码的测试比较彻底。

e9ffc44118e2f3da40043f9eeb1d4f20.png

图4-2求最大公约数的案例

●可以优化测试。

白盒测试的缺点如下。

●成本昂贵。

●无法检测代码中遗漏的路径和数据敏感性错误。

●无法验证规格的正确性。

查看《软件测试核心技术 从理论到实践》全部连载章节

版权声明:51Testing软件测试网获得人民邮电出版社和作者授权连载本书部分章节。

任何个人或单位未获得明确的书面许可,不得对本文内容复制、转载或进行镜像,否则将追究法律责任。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
软件测试是确保软件质量的关键步骤之一,而软件测试寿险核心项目实战项目则是在寿险核心系统开发过程中进行的实际测试项目。这个项目的目标是验证寿险核心系统的功能、性能和稳定性,以确保系统能够满足业务需求并且能够稳定运行。 在软件测试寿险核心项目实战中,通常会涉及以下几个方面的测试: 1. 功能测试:验证系统的各项功能是否按照需求规格说明书中的要求正常工作。这包括输入输出的正确性、业务逻辑的正确性、界面的正确性等。 2. 性能测试:测试系统在不同负载下的性能表现,包括响应时间、吞吐量、并发用户数等指标。通过性能测试可以评估系统的稳定性和可扩展性。 3. 安全测试:测试系统的安全性,包括身份认证、权限控制、数据加密等方面。通过安全测试可以发现系统中的潜在安全漏洞,并提供相应的修复建议。 4. 兼容性测试:测试系统在不同操作系统、浏览器、设备等环境下的兼容性。通过兼容性测试可以确保系统在不同环境下都能正常运行。 5. 回归测试:在系统进行修改或升级后,重新执行之前的测试用例,以确保修改不会对系统的其他功能产生负面影响。 6. 自动化测试:使用自动化测试工具和脚本来执行测试用例,提高测试效率和准确性。 以上是软件测试寿险核心项目实战中常见的测试方面,具体的测试内容和方法会根据项目需求和实际情况进行调整和补充。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值