第一章 introduction to software testing

文章目录

  • 基本概念
    • validation / verification
    • input domain / output domain
    • deterministic / non-deterministic
    • terminate / not-terminate
  • Testing
    • 概念
    • testing 的目的
    • Fault, failure, error
    • 测试三要素 (3 essential pieces of information)
      • 测试输入
      • 预期输出
      • 执行测试 test execution
      • 测试评估 test evaluation
    • testability 可测试性
    • successful test case
    • 软件测试的心理学原则(Principles of software testing psychology)
      • 预期测试结果
      • 不只靠自己测自己的程序
      • 已经被发现很多错误的地方倾向于被发现更多的错误(places with already many discovered errors tend to be discovered even more errors.)
    • input domains
      • 白盒测试的输入来源(什么内容可以构成 input domains)
    • 黑盒 / 白盒测试
      • 黑盒的好处
      • 黑盒的坏处
      • 白盒好处
      • 白盒坏处
    • Error guessing
    • 一些testing的准则

基本概念

validation / verification

  • validation: 是否构建了正确的系统
  • verification: 是否以正确的方式构建系统
    在这里插入图片描述

input domain / output domain

  • input domain & input domain
    在这里插入图片描述
    • 输入类型中的值集称为输入域,
    • 输出类型中的值集称为输出域。
      在这里插入图片描述
  • 上述例子中,输入的类型是 stringchar,因此根据输入域的定义,输入域应该是所有 string 和 char 的组合;可以表示成 (s,c) 的集合,其中 s 是字符串,c 是字符
  • 输出类型是隐式的,因为squeeze的参数是按引用传递的。如果非说 ouput domain,那么 squeeze 函数的 output domain 是所有的 string

在这里插入图片描述

  • fibonacci 的输入域是所有的 unsigned int,而输出域也是所有的 unsigned int
  • 输入域的 value 可能违反 specification,例如如果一个 input 导致了 divided by 0 问题(这是一个规范),那么也是有可能的
  • 输入域在不同的系统上可能是不同的
    在这里插入图片描述
  • 有效地选择输入和输出域是非常重要的,但是并不像上面说的这么容易

deterministic / non-deterministic

  • deterministic / non-deterministic: 如果对于一个 input,输入 function 之后结果总是相同的,那么这个 function 是 deterministic,否则是 non-deterministic 的。

terminate / not-terminate

  • terminate / not terminate:一个程序是否能够正常终止。以下程序是 not-terminate 的
    • 无限循环
    • 等待事件的程序(例如等待用户输入)
  • 上述的 squeezefibonacci 都是 termiate 的程序,也就是他们最终都会终止,只不过对于 fibonacci 有返回值,因此测试程序可以直接用这个返回值来做判断,而 squeeze 没有返回值,因此必须重新查看 input 进去的数组来确定是否正确地执行操作
  • 对于那些 not-terminate 的程序,由于我们无法得到最后的结果(没有 return)因此,有些 not-terminate 可以通过查看其中间的 observable outputs 来查看,或者有些干脆就对外不可见

Testing

概念

在这里插入图片描述

  • testing 的目的是找 failure,找不到 failure 的 testing 没意义
  • 本课题的主题是上述的最后一个 item:测试不仅仅是检测错误存在与否,而且还涉及对系统及其组件属性进行评估。这意味着软件测试方法被用于评估和确保程序满足其所有要求,包括功能性和非功能性要求。
  • testing 必须在程序(或其 components)构建完成时才能进行
    在这里插入图片描述

testing 的目的

在这里插入图片描述

  • 这句引语表明测试的目的是为了 证明实现与规范之间存在差异

  • 并且不能用来证明实现是正确的。大多数测试方法的目标是系统地和积极地发现程序中的这些差异。

  • 也就是说 testing 是为了发现 difference between specification and implementation

  • testing 和 debug 是不同的。调试是

    • 确定程序中怀疑故障的确切性质和位置;
    • 修复该故障。通常,调试始于对故障存在某种迹象。调试的目的是 定位故障并修复它们。

因此,我们说 测试的目标是证明程序中存在错误调试的目标则是找出这些错误产生原因,并消除或修复它们。

程序验证 (program proving) 旨在显示程序不包含任何错误。 问题在于大多数程序员和质量保证人员没有具备证明程序正确性所需技能。

Fault, failure, error

在这里插入图片描述

  • fault 是代码中出现错误的行(位置);可能是一行代码,也可能是多行代码
  • failure 是有 fault 导致的最终结果和预期的偏差
  • error 是 fault 导致的程序在中间过程进入了错误的状态
  • 因此 error 和 failure 都是 fault 导致的,他们都是 fault 的结果
    在这里插入图片描述
  • specification 是想要实现 n ∗ n n*n nn 但是最终的实现是 x ∗ 2 x*2 x2 因此 return 这一行是一个 fault
  • 当 input 是 2 以外的值都会导致 failure,因为会造成预期与程序的结果不符,此程序不会导致 error
  • 当 input=2 的时候,出现的现象叫 coincidental correctness (偶然正确性)
  • coincidental correctness 是一种经常出现的情况;testing 的目的是发现错误,因此选择 input 就变得非常重要,这些 input 最好能够让所有的 failure 都暴露出来,而减少 coincidental correctness 的发生
  • 通常 testing 和 debugging 的步骤如下:
    • 选择好的 input 来暴露 failure
    • 定位导致 failure 的 faults
    • 修复或者移除这些 faults
    • 重新测试
      在这里插入图片描述
  • 但上述过程中的 2,3 步骤本来就是容易出错的,在修改 faults 的时候就很容易引入新的错误

测试三要素 (3 essential pieces of information)

  • **测试输入:**一组测试输入(set of test inputs),这是对于 terminate 的程序,对于 not-terminate 的程序,需要一组测试输入的序列
  • **预期输出:**需要设定预期的 output
  • 测试环境

测试输入

  • 后面的 2-5 章节讲的就是如何选择合适的 test input 可以以覆盖率更高的情况下更加全面地进行测试(这里的覆盖率由多种衡量标准,例如 branch, condition 等;总之要根据某个覆盖率标准来决定 test input 的集合)

预期输出

  • 必须提供生成的每个测试输入的预期行为(只有知道预期行为才知道这个 test 是否 failure 还是 success)。这被称为 oracle问题。在许多情况下,可以从正在测试的程序的需求中直接推导出该oracle。例如,评估系统性能的测试用例可能与该系统需求规范中关于性能的特定要求相关联。例如如果面对一个排序算法,那么你的 test 输入是 [1,3,2,5,4] 那么你的预期输出就可以是 [1,2,3,4,5] 因为我的 specification 已经规定了这是个排序算法,因此这样产生的 oracle 往往简单

执行测试 test execution

一旦准备好可执行的测试用例,下一步是在被测程序上执行测试输入,**并记录软件的实际行为。**例如,记录功能测试输入产生的输出,或者测量执行性能测试输入所需的时间。

  • 测试执行是测试过程中通常可以自动化的一个步骤。这不仅节省了测试人员的时间,还允许以最小案例进行回归测试。

测试评估 test evaluation

  • 将测试输入下程序的实际行为与该测试输入下程序的预期行为进行比较,并确定实际行为是否满足要求。例如,在性能测试中,确定运行一个测试所需时间是否小于所需阈值。

testability 可测试性

  • 可测试性 testability 完全取决于 controllability 可控性observability 可观测性
    在这里插入图片描述
  • 可控性就是 tester 能够提供输入的程度
  • 可观测性就是 tester 能够观察软件行为的程度
  • squeeze 程序的可控性和可观测性都很强, 因为 tester 完全可以掌控输入的内容,并且也可以自由地观察输入(通过其他函数可以调用他最后生成的数组来观察 output)
  • 带 user interface 的程序更难以 控制观测
  • 嵌入式软件就更难

successful test case

  • 一个测出了 failure 的 test case 才是成功的

软件测试的心理学原则(Principles of software testing psychology)

预期测试结果

在这里插入图片描述

  • 对预期的 output 和结果的定义是必要的

不只靠自己测自己的程序

在这里插入图片描述

已经被发现很多错误的地方倾向于被发现更多的错误(places with already many discovered errors tend to be discovered even more errors.)

在这里插入图片描述

input domains

白盒测试的输入来源(什么内容可以构成 input domains)

在这里插入图片描述

黑盒 / 白盒测试

在这里插入图片描述

  • 黑盒测试是基于 specification 的 (仅测试其功能和程序的 features)
    在这里插入图片描述
  • 白盒测试是 specification + 程序的设计和代码

黑盒的好处

  • 可以在 program 完成之前就开始测试
  • 擅长于测试缺失的功能和程序行为与规范不符。

黑盒的坏处

  • 无法检测到已添加到代码中的附加功能或特性。这对于安全关键系统(额外的代码可能会干扰系统的安全性)或需要保密性(额外的代码可能被用来破解安全措施)尤为重要。例如一些安全相关的代码不会出现在 specification 中明确地规定,因此黑盒可能无法测试

在这里插入图片描述

白盒好处

  • 它测试代码的内部细节,并尝试检查程序可以执行的所有路径,以确定是否发生问题。因此,白盒测试用例可以检查已实施但未指定的任何附加代码。

在这里插入图片描述

白盒坏处

  • 白盒测试的主要缺点是必须在设计和编码被测试的程序之后才能选择测试用例。此外,如果系统的某些功能未实现,则使用白盒测试可能无法检测到这一点。
    在这里插入图片描述

Error guessing

  • 错误猜测是一种基于直觉和经验的即兴方法。其思想是识别出可能暴露错误的测试用例。
  • 基于:
    在这里插入图片描述
  • 错误猜测是即兴行动,因此不是系统化的。 这些笔记中描述的其他技术都是系统化的

一些testing的准则

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Excel·VBA工作表导出为图片

《Excel转图片别再截图啦!用这4个方法,高清且无损!》,excel转为图片一般方法较为简单,那么能否使用vba将excel转为图片 选中区域导出为图片 zoom设置为2,导出图片较为清晰 Sub 选中区域导出为图片()Dim …

【案例】3D地球

效果图&#xff1a; 直接放源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0, user-scalableno" …

使用pandas处理excel文件【Demo】

一、代码示例 import pandas as pd from pandas import Series,DataFrame from pandasql import sqldf import matplotlib.pyplotidInfos DataFrame(pd.read_excel(home_data.xlsx))print(idInfos.head(2))print(idInfos.dtypes)# print(idInfos[:][姓名]) # 自定义一个函数s…

EASYX播放音频文件

添加winmm.lib的依赖 选中链接器中的输入选项&#xff1a;添加附加依赖项winmm.lib并且应用即可 添加音频相关代码 #include <easyx.h> #include <stdio.h> #include <math.h> // 宏定义 #define WINDOW_WIDTH 800 #define WINDOW_HEIGHT 600 #define MAX_…

C#知识总结 基础篇(下)

目录 5类和继承 5.1类继承 5.2访问继承的成员 5.3屏蔽基类的成员 5.4访问基类的成员 5.5虚方法与覆写方法 5.6构造函数的执行顺序 5.7成员访问修饰符 5.8抽象类 5.9密封类与静态类 6.表达式与运算符 6.1运算符和重载 7.结构 7.1结构体的感念。 7.2结构构造函数与…

嵌入式系统中的FPGA

举个栗子 假设你有一台智能家居系统&#xff0c;其中的FPGA可以被类比为智能家居中的中央控制器。 智能家居系统&#xff1a; 定制家居逻辑&#xff1a; 你希望智能家居系统能够根据你的生活习惯、时间表和喜好自动控制灯光、温度、窗帘等设备。就像FPGA中可以根据需求重新配置…

深度学习框架TensorFlow.NET环境搭建1(C#)

测试环境 visual studio 2017 window10 64位 测试步骤如下&#xff1a; 1 新建.net framework控制台项目&#xff0c;工程名称为TensorFlowNetDemo&#xff0c;.net framework的版本选4.7.2&#xff0c;如下图&#xff1a; 2 分别安装TensorFlow.NET包(先装)和SciSharp.…

unity 使用TriLib插件动态读取外部模型

最近在做动态加载读取外部模型的功能使用了triLib插件&#xff0c;废话不多说直接干货。 第一步下载导入插件&#xff0c;直接分享主打白嫖共享&#xff0c;不搞花里胡哨的。 链接&#xff1a;https://pan.baidu.com/s/1DK474wSrIZ0R6i0EBh5V8A 提取码&#xff1a;tado 导入后第…

6.网络之以太网

以太网协议 文章目录 以太网协议1. 以太网报文格式2. MAC地址3. MTU4. DNS域名解析 1. 以太网报文格式 源地址和目的地址&#xff1a;网卡的硬件地址&#xff08;也叫MAC地址&#xff09;&#xff0c;长度是48位&#xff0c;是在网卡出厂时固化的。帧协议类型&#xff1a;IP协议…

ubuntu20.04配置解压版mysql5.7

目录 1.创建mysql 用户组和用户2.下载 MySQL 5.7 解压版3.解压 MySQL 文件4.将 MySQL 移动到适当的目录5.更改mysql目录所属的用户组和用户&#xff0c;以及权限6.进入mysql/bin/目录&#xff0c;安装初始化7.编辑/etc/mysql/my.cnf配置文件8.启动 MySQL 服务&#xff1a;9.建立…

PS Raw中文增效工具Camera Raw 16

Camera Raw 16 for mac&#xff08;PS Raw增效工具&#xff09;的功能特色包括强大的图像调整工具。例如&#xff0c;它提供白平衡、曝光、对比度、饱和度等调整选项&#xff0c;帮助用户优化图像的色彩和细节。此外&#xff0c;Camera Raw 16的界面简洁易用&#xff0c;用户可…

研读论文之Image Quality-aware Diagnosis via Meta-knowledge Co-embedding

研读论文之 Image Quality-aware Diagnosis via Meta-knowledge Co-embedding 前言一、简介二、主要内容2.1. 图像退化2.2. 图像质量感知诊断(IQAD)2.3. 元知识协同嵌入网络(MKCNet) 三、实现过程3.1. IQAD问题3.2. 元知识协同嵌入网络 (MKCNet)3.2.1功能3.2.2优化策略3.2.3 Ta…

虽迟但到,Postman终于支持Websocket接口了

01 WebSocket 简介 WebSocket是一种在单个TCP连接上进行全双工通信的协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c;两者之间就直接…

基于8086家具门安全控制系统设计

**单片机设计介绍&#xff0c;基于8086家具门安全控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 # 8086家具门安全控制系统设计介绍 8086家具门安全控制系统是一种用于保护家具和保证室内安全的系统。该系统基于808…

1.Netty概述

原生NIO存在的问题(Netty要解决的问题) 虽然JAVA NIO 和 JAVA AIO框架提供了多路复用IO/异步IO的支持&#xff0c;但是并没有提供给上层“信息格式”的良好封装。JAVA NIO 的 API 使用麻烦,需要熟练掌握 ByteBuffer、Channel、Selector等 , 所以用这些API实现一款真正的网络应…

数字化时代,数据仓库是什么?有什么用?

在激烈的市场竞争和全新的数字经济共同作用下&#xff0c;数字化转型成为了大多数企业的共识&#xff0c;也是获取数字经济的最佳方式。在整个数据价值生产链路中&#xff0c;数据仓库的主要作用就是中心化分发&#xff0c;将原始数据与数据价值挖掘活动隔离。 所有的原始数据…

GPT学习笔记

百度的文心一言 阿里的通义千问 通过GPT能力&#xff0c;提升用户体验和产品力 GPT的出现是AI的iPhone时刻。2007年1月9日&#xff0c;第一代iPhone发布&#xff0c;开启移动互联网时代。新一轮的产业革命。 GPT模型发展时间线&#xff1a; Copilot - 副驾驶 应用&#xf…

RT-Thread内核移植

目录 前言一、实验平台简介1.1 W601简介1.2 RT-Thread简介1.3 开发环境 二、W601的SDK移植三、RT-Thread内核移植四、下载验证4.1 串口下载程序4.2 ST-Link下载 前言 本文以正点原子W601开发板为基础&#xff0c;讲解如何移植RT-Thread&#xff0c;本文所用资料见附件资源 一、…

基于ssm车位租赁系统+vue(2023年☆全网唯一)【附开发文档|表结构|万字文档(LW)和搭建文档】

主要功能 前台登录&#xff1a; 注册用户&#xff1a;用户账号、密码、姓名、手机号、身份证号、性别、邮箱 用户&#xff1a; ①首页、车位展示、公告展示、查看更多 ②车位类型、车位介绍、车位收藏、留言、我要租赁、公告、留言板 ③个人中心、车位收藏、车位租赁订单、已到…

C++ AVL树 c语言版本

引入平衡树 假设我们有两个节点&#xff1a;当我们插入第三个节点&#xff0c;就失衡了&#xff1a;此刻我们就要把它平衡一下。 为什么要变平衡 为什么说它失衡了呢&#xff0c;又为什么要把它变平衡&#xff1f; 如图a&#xff0c;假设我们要查找30这个节点就要查3次才能…