软件测试笔记(五)- 动态黑盒测试

2023-10-27

了解在没有代码的情况甚至不懂得编程的情况下的软件测试技术。

一、动态黑盒测试:戴上眼罩测试软件

不深入代码细节测试软件的方法称为 动态黑盒测试 。它是动态的,因为程序在运行——软件测试员像用户一样使用它。同时,它是黑盒子,因为测试时不知道程序如何工作——带上了眼罩。动态黑盒测试常常被称为 行为测试 ,因为测试的是软件在使用过程中的实际行为。

  1. 有效的动态测试需要关于软件行为的一些定义——即需求文档或者产品说明书。
  2. 清楚了被测试软件的输入和输出之后,开始定义测试用例。准确评估风险,把无穷尽的可能性减少到可以控制的范围是成功的诀窍。
  3. 测试用例(testing cases) :是指进行测试时使用特定输入,以及测试软件的过程步骤。
  4. 在没有产品说明书时使用 探索测试 :了解软件、设计测试、执行测试同时进行。把软件产品当作产品说明书来对待。系统地逐项了解软件的功能、记录软件的执行情况、详细描述功能。

二、通过性测试和失效性测试

  1. 通过性测试(test-to-pass) :在通过性测试中,实际上是确认软件至少能做什么,而不会考验其能力。测试包括审查软件、描述状态、尝试各种合法可能性、确认状态及其转换正常。
  2. 失效性测试(test-to-fail) :纯粹为了破坏软件而设计和执行的测试用例,或者又叫错误强制性测试。蓄意攻击软件最薄弱环节。

注意:在设计和执行测试用例时,总是首先进行通过性测试。在破坏性测试之前看看软件基本功能是否实现很重要,软件测试员可能会吃惊的发现仅仅正常使用软件就会发现那么多软件缺陷。

三、等价类划分

选择测试用例的方法是 等价类划分(equivalence partition) ,或者称为 等价分类(equivalence classing) :分步骤地把海量(无限)的测试用例集间的很小,但过程同样有效。

注意:

  1. 一个等价类或者等价分类是指测试相同目标或者暴露相同软件缺陷的一组测试用例。
  2. 在寻找等价划分是,考虑把软件具有相似输入、相似输出、相似操作的分一组。
  3. 等价划分的目标是把可能的测试用例集缩减到可控制且仍然足以测试软件的小范围内。因为选择了不完全测试,就要冒一定的风险,所以在选择分类时必须仔细。

四、数据测试

对软件最简单的认识就是将其分成两部分:数据(或其范围)和程序。

  1. 数据(data) :键盘输入、鼠标单击、磁盘文件、打印输出等。
  2. 程序(program) :是指可执行的流程、转换、逻辑和运算。

技巧:对数据进行软件测试,就是在检查用户输入的信息,返回的结果以及中间计算结果是否正确。可以根据一些关键的原则进行等价划分,以合理减少测试用例。

  • 边界条件

如果对一定范围的数据惊醒操作,程序员往往在处理大量中间数值时都是对的,但是可能在边界处出现错误。

边界条件(boundary condition) :是指软件在运行在计划操作界限的边界的情况。

  1. 边界条件类型,考虑以下数据类型:
    数值
    速度
    字符
    地点
    位置
    尺寸
    数量

    同时,考虑这些类型的下述特征:
    开始/完成
    超过/在内
    空/满
    相邻/最远

技巧:如果选择在等价划分中包含哪些数据,就根据边界来选择。

  1. 测试边界
  • 为软件操作的各种数据集合建立等价划分,从等价划分中心选择包含的数据,从边界条件中选择会找出更多的软件缺陷。
  • 建立两个等价划分就可以找出更多的软件缺陷。第一个划分包含认为应该正确的数据——在边界内部最后一两个合法的数据点。第二个区间包含认为可能出现错误的数据——边界之外——一到两个非法的数据点。

技巧:提出边界条件时,一定要测试临近边界的有效数据,测试最后一个可能有效的数据,同时测试刚超过边界的无效数据。

注意:缓冲区溢出(buffer overrun) :是由边界条件缺陷引起的,它是指造成软件安全问题的头号原因。

  • 次边界条件

有些边界在软件内部,最终用户几乎看不到,但是软件测试仍然很有必要。这样的边界条件叫做 次边界条件(sub-boundary condition) 或者 内部边界条件(internal boundary condition)

技巧:寻找这样的边界不要求软件测试员称为程序员或者具有阅读源代码的能力,但是确实要求大体了解软件的工作方式。所以,软件测试员应该和开发小组的程序员交流,看看他们能否对其他应该测试的次边界条件提供建议。

  1. 2的幂:
    计算机和软件的基础时二进制数——用位(bit)来表示0和1,一个字节(byte)有8位组成,(在32位系统上)一个字(words)由4个字节组成。
  2. ASCII表:
    / :47
    0 ~ 9 :48 ~ 57
    :58
    @:64
    A ~ Z :65~ 90
    [ :91
    ’ :96
    a ~ z :97 ~ 122
    { :123
  • 默认、空白、空值、零值和无

技巧:一定要考虑建立默认值、空白、空值、零值或者无输入等条件的等价划分。因为这些值在软件中通常进行不同的处理,所以,不要把它们和合法情况和非法情况混在一起,而要建立单独的等价划分。

  • 非法、错误、不正确和垃圾数据

数据测试的最后一种类型是垃圾数据。这是失效行测试的对象。

在经过边界测试、次边界测试、默认值测试等通过性测试证实软件可以工作之后,就该进行垃圾数据测试了。在现实中,考虑到软件要应付用户千奇百怪的使用方式,对软件进行破坏实验肯定没错。

五、状态测试

  1. 软件状态(Software state) :是指软件当前所处的条件或者模式。

一旦选中了其中使软件改变了外观、菜单或者某些操作,就是改变了该软件的状态。软件通过代码执行进入某个分支,出发某些数据位,设置某些变量,读取某些数据,转入一个新的状态。

  • 测试软件的逻辑流程

软件的日益复杂化,尤其是为了迎合日益丰富的用户界面,提供太多的选择和选项,致使程序分支数量呈指数式增长。

对于软件测试,解决方法是运用等价划分技术选择状态和分支。因为选择不做完全测试,所以要承担一定的风险,但是通过合理选择减少风险。

  1. 建立状态转换图
    状态状态转换图应该表示出以下项目:
    (1)软件可能进入的每一种独立状态。
    (2)从一种状态转入另一种状态所需的输入和条件。
    (3)进入或者推出某种状态时的设置条件及输出结果。

  2. 减少要测试的状态及转换的数量
    将大量的可能性减少到可以操作的测试用例集合,有以下5种方式:
    (1)每种状态至少访问一次。
    (2)测试看起来时最常见和最普遍的状态转换。
    (3)测试状态之间最不常用的分支。
    (4)测试所有错误状态及其返回值。
    (5)测试随即状态转换。

  3. 进行具体测试
    测试状态及其转换包括检查所有的 状态变量(state variables) ——与进入和退出状态相关的静态条件、信息、值、功能等。
    技巧:把对状态及其转换的假定与项目小组的产品说明书作者和程序员讨论是个好主意。他们可以提供软件测试员可能想不到的、表面现象背后的状态内幕。

  • 失败状态的测试

找到使测试软件失败的案例:竞争条件、重复、压迫和重负。

  1. 竞争条件和时序错乱。
    (1)多任务(multitasking) :是指操作系统设计用来同时执行多个独立的进程。
    (2)设计多任务操作系统并不繁琐,设计充分利用多任务的软件才是艰巨的任务。在真正的多任务环境中,软件设计绝不能想当然,必须处理随时被中断的清理,能够与其他任何软件在操作系统中同时运行,并且共享内存、磁盘、通信以及其他硬件资源。
    (3)竞争条件(race condition)问题 :是指几个事件恰巧挤在一起,由于软件未预料到运行过程会被中断,一致造成混乱,也就是说,时序发生错乱。

  2. 重复、压迫和重负。
    (1)反复测试(repetition testing) :是不断执行同样的操作。最简单的是不停地启动、关闭程序。
    目的:检查是否存在***内存泄漏(memory leaks)*** ,如果计算机内存被分配进行某些操作,但是操作完成时,欸有完全释放,就会产生一个常见的软件问题。
    (2)压迫测试(stress testing) :是使软件在不够理想的条件下运行——内存小、磁盘空间小、CPU速度慢、调制调节器速率低等。观察软件对外部资源的要求和依赖的程度。
    目的:尽可能地压制软件地必要条件。
    (3)重负测试(load testing) :与压迫测试相反。压迫测试是尽量限制软件,而重负测试时尽量提供条件任其发挥。让软件处理尽可能大地数据文件。
    目的:最大限度地发掘软件地能力,让他不堪重负。

注意:重复、压迫和重负测试应该联合使用,同时进行。这是找出以其他方式难以发现的严重缺陷的一个可靠的方法。

对于重复、压迫、重负测试有两个重要事项:

  1. 项目经理和小组程序员可能不完全接受软件测试员这样破坏软件的做法。软件测试员的任务时确保软件在这样恶劣的条件下仍能正常工作,否则就报告软件缺陷。
  2. 无数次打开和关闭程序对于手工操作时不可能的。

六、其他黑盒测试技术

  • 像无经验的用户那样做
  1. 无经验的用户(inexperienced user) 或者 新用户(new user) :这些用户不遵循任何规则,也不做任何假定。

技巧:如果可能,找一个其他专业的朋友来整理思路。假设他什么也不会。把这些测试用例加入到已经设计好的测试用例库中。就会更加全面。

  • 在已经找的软件缺陷的地方再找找

在已经找到软件缺陷的地方再找的原因:

  1. ”找到的软件缺陷越多,就说明哪里的软件缺陷越多“。
  2. 许多程序员倾向于只修复报告出来的软件缺陷,不多不少。在这个范围之外极有可能存在其他可能的内存泄漏问题。
  • 像黑客一样考虑问题

想一想软件里面有哪些有价值的东西,为什么有人要像获得其访问权限,黑客进入的方法有哪些。不要绅士,黑客不会绅士。

  • 凭借经验、直觉和预感

随着在职业生涯中逐步提高,学习测试不同类型和规模的软件产品,就会得到各种提示和技巧以便更有效地找出令人棘手的软件缺陷。

参考文献

  1. 《软件测试(原书第2版)》
  2. 《软件测试的艺术(原书第3 版)》
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

软件测试笔记(五)- 动态黑盒测试 的相关文章

  • 1分钟学会在C++中将图像转换为Word文档,快速入手光学字符处理控件Aspose.OCR

    图像和扫描的文档可能包含您可能需要进一步处理的文本信息 可能已经使用智能手机拍摄了文本文档的图片 并将其转换为可编辑的文档 为此 对图像执行 OCR 可以证明是有帮助的 使用 OCR 可以将图像转换为可搜索和可编辑的 Word 文档 为此
  • c 语言软链接函数,C++/C链接过程详解

    头文件可以被多个编译单元包含 如果头文件里有定义 那么每个包含这个头文件的编译单元就都会对同一个符号 进行定义 如果该符号为外部链接 则会导致duplicated external simbols 因此如果头文件里要定义 必须保证定义的符号
  • 刷题day51:重新安排行程 ***

    题意描述 给你一份航线列表 tickets 其中 tickets i fromi toi 表示飞机出发和降落的机场地点 请你对该行程进行重新规划排序 所有这些机票都属于一个从 JFK 肯尼迪国际机场 出发的先生 所以该行程必须从 JFK 开
  • pip install 出现HHTP链接有问题

    Could not fetch URL https pypi org simple seaborn There was a problem confirming the ssl certificate HTTPSConnectionPool
  • linux 命令执行的判断依据

    linux 命令执行的判断依据 一 指令与指令中间利用分号 来隔开 分号前的指令执行完后就会立刻接着执行后面的指令了 二 和 每个指令执行结束后 都会有一个指令回传值 如果指令执行正确 返回0 如果执行错误 则返回错误的对应数字 和 会通过
  • 2218. Maximum Value of K Coins From Piles

    There are n piles of coins on a table Each pile consists of a positive number of coins of assorted denominations In one
  • HTML 制作表格案例

    1 运行要求 2 示例代码 table align center border 1 cellspacing 0 tr th 排名 th th 趋势 th th 关键词 th th 今日搜索 th tr table
  • 彻底理解NodeJs中的回调(Callback)函数

    究竟什么是回调函数 Callback 网上有许许多多的文章 大部分看得人云里雾外 这些文章大概分成两类 第一类堆砌了太多的术语 基本上不明白术语就没法看 另一类反过来 不讲术语 完全是举一些脱离编程的生活化例子来类比 看的人更加晕头转向 作
  • Ubuntu 20.04 下Fabric V2.2.0 和 V1.1.0 运行及配置说明(均可运行)

    ubuntu 20 04 下Fabric V2 2 0 和 V1 1 0 运行及配置说明 ubuntu 20 04 下Fabric运行及配置说明 注 本文是对 hyperledger fabric 区块链快速入门教程 错误解决 良好用户体验
  • 趣图丨前端后端接口联调的时候……

    是不是感觉数据永远都对不上 看完此文 你有什么想法或观点呢 欢迎在留言区留言评论 更多精彩
  • 华为录屏全攻略,从入门到高手

    求助 华为录屏在哪里呀 找了一上午了 平时的时候也看见过 就没在意 现在需要用到了 就找不到了 真的离谱 有没有人知道的 教教我 在智能手机时代 录制屏幕成为了我们生活中必不可少的一部分 无论是录制游戏过程 在线课程还是演示教程 录屏功能都
  • [大模型] LLaMA系列大模型调研与整理-llama/alpaca/lora(部分)

    文章目录 LLaMA大模型及其衍生模型 1 LLaMA 2 stanford alpaca 3 ChatDoctor 4 alpaca lora 5 Chinese LLaMA Alpaca 6 BELLE 大模型综述 A Survey o
  • 深度学习模型部署学习一

    深度学习模型部署 学习链接 模型部署入门教程 一 模型部署简介 写在前面 本文档为学习上述链接的相关记录 基本内容一致 仅用于学习用途 若侵权请联系我删除 目 录 深度学习模型部署 1 为什么需要部署 2 部署难题 3 部署流程 4 实战模
  • js实现右键弹出自定义的菜单

    js实现右键弹出自定义的菜单 实现的步骤 1 首先阻止右键弹出系统默认的菜单 2 自定义菜单并隐藏 3 点击右键弹出自定义菜单 4 点击桌面除菜单任意位置 菜单隐藏 点击菜单 菜单不隐藏
  • MySQL——数据库、表的操作

    文章目录 数据库的操作 创建数据库 创建数据库例子 字符集和校验规则 查看数据库支持的字符集 查看默认的字符校验规则 校验规则对数据库的影响 查看数据库 显示详细的创建数据库语句 修改数据库 删除数据库 查看连接情况 表的操作 创建表 显示
  • Python格式化输出之format函数

    format函数是Python中一个很强大的格式化输出函数 使用花括号 来占位 下面结合代码来讲述format函数的用法 一 匹配顺序 print 姓名 年龄 format 张三 25 运行结果 姓名 张三 年龄 25 可以看出 forma
  • 26.UART串口接收过程与配置

    UART串口接收过程与配置 参考资料 STM32Fx中文参考手册 第26章 通用同步异步收发器章节 开发板配套教程 STM32Fx开发指南 串口实验章节 笔记基于正点原子官方视频 视频连接https www bilibili com vid

随机推荐

  • O-RAN专题系列-42:管理面-WG4.MP.V07-规范解读-第9章-文件管理

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122588292 目录 第9章 Fil
  • 分解质因数(线性筛)

    https ac nowcoder com acm contest 923 B 我真是个辣鸡 现在才知道线性筛 思路 对于每个数字的阶乘 开一个一维数组记录每个数字出现的个数 先利用一维差分将每个数字的阶乘中出现都得数字累加个数 然后再利用
  • 详细记下Flutter开发遇到的各种坑-带你走出入门弯路

    目录 flutter安装 设置环境变量 Android studio安装 解决install emulator问题 安装Flutter和Dart插件 gradle构建错误 分析原因 解决问题 设置gradle全局变量 生成APK问题 解决方
  • 《代码大全2》第1章 欢迎进入软件构建的世界

    目录 前言 1 1 什么是软件构建 1 1 1 构建活动 与 非构建活动 1 1 2 构建活动 相对于其他软件开发活动的地位 1 1 3 构建活动 的具体任务 1 2 构建活动 为何如此重要 1 2 1 构建活动 重要的原因 1 3 如何阅
  • mysqldump where子句使用

    mysqldump 的 where 条件子句适用于这种情况 导出某张表的部分数据 where name 参数详情 w where name Dump only selected records Quotes are mandatory 使用
  • python下复制excel某行数据,xlwings

    不是专业码农 朋友课题遇到一个问题 调研了90个人 有14个sheet的数据 每个人的数据在14个sheet里面都有 位置也相同 比如张三的数据 在14个sheet里面都是在18行 需要把其中16个人的数据拿出来 还是这14个sheet都要
  • spring如何做到循环引用

    spring如何做到循环引用 总结 源码中的流程 如果看官觉得有点用 点赞一下 鼓励一下我吧 总结 spring的循环引用只有一种情况 单例且无参构造 多例情况不支持 有参构造不支持 原因 无参构造可以完成创建在堆内存中的引用 即使这个引用
  • spring-boot配置slf4j日志

    SLF4J 即简单日志门面 Simple Logging Facade for Java 不是具体的日志解决方案 它只服务于各种各样的日志系统 按照官方的说法 SLF4J 是一个用于日志系统的简单 Facade 允许最终用户在部署其应用时使
  • socks5代理ip账号密码_VMlogin中文版配置使用911S5代理

    一 911 S5代理设置 打开911 S5代理并去往 程序 Program 页面 在程序列表 program list 中随机添加一个程序 911 S5程序需要用户选择一个程序 请您不要在此处添加VMlogin 因为它会收到干扰 前往 设置
  • Dynamic Region-Aware Convolution

    旷视提出 DRConv 动态区域感知卷积 提升分类 检测 分割性能 Dynamic Region Aware Convolution 是2020年旷视在arXiv上的新论文 该论文实际上是在动态卷积 local形式 上引入了空间上的分组 从
  • 亚马逊云科技上实现 “端到端”安全

    亚马逊云科技认为 安全是构建生成式 AI 不可回避的重要议题 企业只有在 AI 旅程中做好数据 模型和应用的安全防护 才能更好地借助 AI 加速业务创新 同时在全球业务规划做好战略布局 亚马逊云科技在五大领域为用户提供全方位的云安全服务 威
  • Qt环境生成dump解决异常崩溃

    背景 对于经常使用C C 的伙伴来说 程序有问题动不动就罢工崩溃的问题简直不能太熟悉了 比如本地测试通过打包发布的release版本Qt程序 在客户环境下仍可能出现异常崩溃的问题 一般通过客户反馈以及分析系统运行日志 问题基本都能够得到快速
  • 洛谷表达式求值

    题目描述 给定一个只包含加法和乘法的算术表达式 请你编程计算表达式的值 输入输出格式 输入格式 一行 为需要你计算的表达式 表达式中只包含数字 加法运算符 和乘法运算符 times 且没有括号 所有参与运算的数字均为 000 到 231 1
  • CentOS 7下启动、关闭、重启、查看MySQL服务

    1 启动命令 root xufeng Desktop service mysqld start Redirecting to bin systemctl start mysqld service 2 关闭命令 root xufeng ser
  • 栈系列之 递归实现一个栈的逆序

    算法专题导航页面 算法专题 栈 栈系列之 栈排序 栈系列之 最小栈的实现 栈系列之 用栈实现队列 栈系列之 递归实现一个栈的逆序 题目 使用递归来完成一个栈的逆序操作 其他限制 不能借助任何其他数据结构 图示 无 分析 递归思想原本就和栈这
  • 力扣第五十三道最大子数组和

    题目 给你一个整数数组 nums 请你找出一个具有最大和的连续子数组 子数组最少包含一个元素 返回其最大和 子数组 是数组中的一个连续部分 输入 nums 2 1 3 4 1 2 1 5 4 输出 6 解释 连续子数组 4 1 2 1 的和
  • Exploring Large Language Models for Knowledge Graph Completion

    本文是LLM系列文章 针对 Exploring Large Language Models for Knowledge Graph Completion 的翻译 探索用于知识图谱补全的大型语言模型 摘要 1 引言 2 相关工作 3 方法 4
  • C/C++中的日期和时间

    C C 中的日期和时间 撰文 周翔 摘要 本文从介绍基础概念入手 探讨了在C C 中对日期和时间操作所用到的数据结构和函数 并对计时 时间的获取 时间的计算和显示格式等方面进行了阐述 本文还通过大量的实例向你展示了time h头文件中声明的
  • 数据结构---单链表的增删改查(C语言实现)

    链表的创建 链表元素插入 头插 尾插 指定位置插入 链表元素的删除 链表元素的查看 1 链表的创建 有头链表 有头链表的创建就是创建一个头结点代表此链表 用一个结构体指针指向头结点 通常称为头指针 方便找到此链表 头结点的数据域一般不做处理
  • 软件测试笔记(五)- 动态黑盒测试

    了解在没有代码的情况甚至不懂得编程的情况下的软件测试技术 一 动态黑盒测试 戴上眼罩测试软件 不深入代码细节测试软件的方法称为 动态黑盒测试 它是动态的 因为程序在运行 软件测试员像用户一样使用它 同时 它是黑盒子 因为测试时不知道程序如何