《软件测试》[(美)Ron Patton]第七章阅读总结

第七章 带上X光眼镜测试软件

一、动态白盒测试

  • 定义:又称结构化测试(软件测试员可以查看使用代码的内部结构,从而设计和执行测试),指利用查看代码功能(做什么)和实现方式(怎么做)得到的信息来确定哪些需要测试、哪些不要测试、如何开展测试。
  • 可查看代码运行情况还包括直接测试和控制软件。
  • 具体包括:
    1)直接测试底层函数、过程、子程序和库。在微软中这称为应用程序编程接口(API)
    2)以完整程序的方式从顶层测试软件,但是根据对软件运行的了解调整测试用例
    3)从软件获得读取变量和状态信息的访问权,以便确定测试与预期结果是否相符,同时,强制软件以正常测试难以实现的方式运行
    4)估算执行测试时“命中”的代码量和具体代码,然后调整测试,去掉多余的测试用例,补充遗漏的用例

二、动态白盒测试和调试

  • 动态白盒测试目标:寻找软件缺陷
  • 调试目标:修复缺陷

三、分段测试

(大爆炸模式)测试产生高额费用的原因
1)难以有时甚至不可能找出导致问题的原因
2)某些软件缺陷掩盖了其他软件缺陷

1、单元测试和集成测试
  • 单元测试(模块测试):在底层进行
  • 集成测试:对模块的组合进行
  • 两种途径:
    1)自底向上
    方法:测试驱动模块以和将来真正模块同样的方式挂接,向处于测试的模块发送测试用例数据,接受返回结果,验证结果是否正确
    优点:可对整个软件进行全面测试,提供全部类型和数量的数据,甚至高层难以发送的数据
    2)自顶向下
    类似于小规模的的大爆炸测试
2、单元测试示例

:在进行白盒测试之前,要根据说明书建立盒测试用例。用这种方式可以真正测试模块的功能和作用。

四、数据覆盖

首先考虑数据。数据包括所有的变量、常量、数组、数据结构、键盘和鼠标输入、文件、屏幕输入/输出,以及调制解调器、网络等其他设备的输入和输出。

1、数据流
  • 定义;数据流覆盖主要是指在软件中完全跟踪一批数据。
2、次边界
  • 软件的各个部分都有自己独特的次边界
  • 进行白盒测试就要仔细检查代码找到次边界条件,建立能测试的测试用例
3、公式和等式
  • 公式和等式常深藏于代码中,从外部看形势和影响都不是非常明显
  • 技巧:撇开代码中的公式和等式,查看他们使用的变量,在程序正常输入和输出之外,为其建立测试用例和等价划分
4、错误强制
  • 注:在使用错误强制时,小心不要设置现实世界中不可能出现的情况。
  • 如果选择错误强制并和程序员一起反复检查以确认他们是合法的,错误强制就是一个有效工具。借此可以执行其它方式难以实现的测试用例。

五、代码覆盖

  • 定义:为全面覆盖必须测试程序的状态以及程序流程,必须设法进入和退出每一个模块,执行每一行代码,进入软件每一条逻辑和决策分支。
  • 要求:通过完全访问代码以查看运行测试用时经过了哪些部分。
  • 最简单形式:利用编译环境的调试器通过单步执行程序查看代码。
  • 代码覆盖率分析器:对大多数程序进行代码覆盖测试要用到的专用工具。
    执行测试用例时代码覆盖率分析器获得的数据显示:
    1)测试用例没有覆盖软件的哪些部分
    2)哪些测试用例是多余的
    3)为了使覆盖率更好,需要建立什么样的新测试用例
1、程序语句和代码行覆盖
  • 代码覆盖最直接的形式称为语句覆盖代码行覆盖
  • 目标:保证程序中每一条语句最少执行一次,但没有走遍软件的所有路径
2、分支覆盖
  • 路径覆盖的定义:试图覆盖软件中的所有路径
  • 分支覆盖是路径覆盖的最简形式
  • 代码覆盖率分析器未测试所有分支
3、条件覆盖

条件覆盖测试将分支语句的条件考虑在内。

小结

  • 静态黑盒测试:检查产品说明书,并在软件编写之前找出问题
  • 动态黑盒测试:在不了解软件如何工作的前提下进行测试
  • 静态白盒测试:通过正式审查和检验检查代码的细节
  • 动态白盒测试:在看到软件的工作方式时,根据获得的信息对软件进行测试

小测验

1、为什么了解了软件的工作方法会影响测试的方式和内容?
如果仅从黑盒的角度测试软件,就无法知道测试用例是否足以覆盖软件的各个部分,以及测试用例是否多余。有经验的黑盒测试员能够为程序设计相当有效的测试用例,但是没有白盒测试知识,他就不知道这一套测试的好坏程度。
2、动态白盒测试和调试有何区别?
这两个过程存在交叉。但是动态白盒测试的目的是发现软件缺陷,而调试的目的是修复软件缺陷。在分离和查找软件缺陷原因时发生交叉。
3、在大爆炸软件开发模式下几乎不可能进行测试的两个原因是什么?如何解决?
一股脑交付软件,即使能够找出软件出现缺陷的原因,也非常困难——这是大海捞针的问题。第二个原因是软件缺陷众多、相互隐藏。顾此失彼,即使发现了缺陷,还是会发现软件仍然不行。
像构建软件时那样有步骤和条理地集成、测试模块,可以在软件缺陷相互重叠、隐藏之前将其找出。
4、判断是非:如果匆忙开发产品,就可以跳过模块测试而直接进行集成测试。
错。软件测试员可以这样做,但是不应该这样做。这样做的结果是会遗漏应该在早期发现的软件缺陷。跳过或推迟测试一般都会使项目完成时间延长、费用增加。
5、测试桩和测试驱动有何差别?
测试桩用于自顶向下的测试。它用自己替换低级模块。其对于要测试的高级代码,外表和行为就像低级模块一样。
测试驱动和测试桩相反,用于自底向上的测试,他是代替高级软件,更有效地运行低级模块的测试代码。
6、判断是非:总是首先设计黑盒测试用例。
对。基于对软件行为操作的认识程度来设计测试用例,然后利用白盒测试技术进行检查使其更加有效。
7、在本章描述的三种代码覆盖中,哪一种最好?为什么?
条件覆盖是最好的。因为他综合了分支覆盖和语句覆盖,它保证决策逻辑中的所有条件(例如if-then语句等)。以及来自这些语句的所有分支和代码行都得到验证。
8、静态和动态白盒测试最大的问题是什么?
很容易形成偏见。看到代码可能会说:“啊,我知道了,不要测试这个案例,代码处理是对的。”实际上这是被表面蒙蔽了,去掉了必要的测试用例,一定要小心。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值