【软件工程】测试

目录

  • 前言
  • 软件测试的目标
  • 测试准则
  • 测试方法
  • 测试方案(重点)
  • 白盒测试(重点)
    • 逻辑覆盖测试
      • 语句覆盖
      • 判定覆盖(分支覆盖)
      • 条件覆盖
      • 判定/条件覆盖
      • 条件组合覆盖
      • 总结
    • 基本路径覆盖法
  • 黑盒测试
    • 等价类法
    • 边界值分析法
  • 软件测试
    • 单元测试
      • 单元测试基本测试方法
    • 集成测试
      • 回归测试

前言

软件工程生命周期分为八个阶段:
问题定义—>可行性研究—>需求分析—>概要设计—>详细设计—>编码与单元测试—>综合测试—>软件维护

这节我们讲的是软件开发流程中的一个阶段,测试阶段。


软件测试的目标

  • 测试是为了发现程序中的错误而执行的过程
  • 好的测试方案是尽可能发现迄今为止尚未发现的错误的测试方案;
  • 成功的测试是发现了至今为止尚未发现的错误的测试。

测试准则

  • 所有测试都应该能追溯到用户需求;(测试用例设计依据)
  • 应该远在测试开始之前就制定出测试计划;
  • 80%的错误很可能是由20%的模块造成。
  • 应该从“小规模”测试开始,并逐步进行“大规模”测试;
  • 穷举测试是不可能的;
  • 为了达到最佳的测试效果,可以找独立的第三方公司进行测试工作。

测试方法

软件测试方法分为两种

  • 静态测试
    不实际运行程序,而是通过检查和阅读等手段来发现错误并评估代码质量质量的软件测试技术。也称为静态分析技术。
  • 动态测试
    实际运行程序,并通过观察程序运行的实际结果来发现错误的软件测试技术。
    动态测试有三种
    • 黑盒测试
      在不知道程序内部结构,只知道程序规格的情况下采用的测试技术或策略。
    • 白盒测试
      在知道程序内部结构的情况下采用的测试技术或策略。
    • 灰盒测试
      黑盒测试方法和白盒测试方法综合的策略。

测试方案(重点)

  • 所谓测试方案包括:
    • 具体的测试目的(例如,预定要测试的具体功能)
    • 应该输入的测试数据
    • 预期的结果
  • 通常又把测试数据和预期的输出结果称为测试用例。(记忆)
    在这里插入图片描述

白盒测试(重点)

白盒测试适用于:对单一模块测试内部结构是否和详细设计相同。
常见白盒测试法:逻辑覆盖法、基本路径覆盖法

逻辑覆盖测试

语句覆盖

选择足够的测试用例,使得程序中每一条可执行语句至少被执行一次。

分析:
执行语句sacbed
测试用例:
A=2,B=0,X=任意实数
覆盖sacbed
在这里插入图片描述
语句覆盖特点:
语句覆盖对程序的逻辑覆盖很少。
语句覆盖不能走过所有支路。(没有语句的分支不执行不走)
语句覆盖是很弱的逻辑覆盖标准。

判定覆盖(分支覆盖)

不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次。

分析:
所有判定分支:
(1) a点判定为T
(2) a点判定为F
(3) b点判定为T
(4) b点判定为F
覆盖上面四种需要两个用例
Ⅰ. 满足(aTbF)
A=3,B=0,X=3
覆盖sacbd 结果: x=1
Ⅱ. 满足(aFbT)
A=2,B=1,X=1
覆盖sabed 结果: x=2
在这里插入图片描述

条件覆盖

不仅每个语句至少执行一次,判定表达式中的每个条件都取到各种可能的结果。

分析:
所有条件:
(1)A>1 (2)A≤1
(3)B=0 (4)B≠0
(5)A=2 (6)A≠2
(7)X>1 (8)X≤1
测试用例:
Ⅰ. 满足(1)(3)(5)(7)
A=2,B=0,X=4
覆盖sacbed
Ⅱ. 满足(2)(4)(6)(8)
A=1,B=1,X=1
覆盖sabd
在这里插入图片描述

判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。

判定/条件覆盖

选择足够的测试用例,使得同时满足判定覆盖和条件覆盖。

分析:
所有判定
aT aF bT bF
所有条件:
(1)A>1 (2)A≤1
(3)B=0 (4)B≠0
(5)A=2 (6)A≠2
(7)X>1 (8)X≤1
测试用例:
Ⅰ. 满足条件(1)(3)(5)(7)
和判定(a真,b真)
A=2,B=0,X=4
结果:A=2,B=0,X=3
Ⅱ. 满足条件(2)(4)(6)(8)
和判定(a假,b假)
A=1,B=1,X=1
结果: A=1,B=1,X=1
在这里插入图片描述

条件组合覆盖

选择足够的测试用例,使得每个判定表达式中条件中的各种可能组合都至少出现一次。
在这里插入图片描述
在这里插入图片描述
特点:

  • 条件组合覆盖是前述几种覆盖标准中最强的。
  • 满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。
  • 但是,条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。(测试数据都没有测试到sacbd )

总结

  • 语句覆盖发现错误能力最弱。
  • 判定覆盖包含了语句覆盖,但它可能会使一些条件得不到测试。
  • 条件覆盖对每一条件进行单独检查,一般情况它的检错能力较判定覆盖强,但有时达不到判定覆盖的要求。
  • 判定/条件覆盖包含了判定覆盖和条件覆盖的要求,但实际上不一定达到条件覆盖的标准。
  • 条件组合覆盖发现错误能力较强, 凡满足其标准的测试用例,也必然满足前 4 种覆盖标准。
  • 以上五种覆盖方法,基本上是依次增强的(除少数如:条件覆盖和判定覆盖) 。随覆盖级别的提高,所需设计的测试用例数量也急剧增加,开销数量级的加大。

在这里插入图片描述

基本路径覆盖法

设计足够的测试用例,使得程序中的所有可能路径都至少被执行一次。

路径覆盖标准最高,但是测试用例数量级以幂次方增加测试用例数量。

分析路径:
(1)Sacbed (2)Sacbd
(3)Sabed (4)Sabd

(1)A=2,B=0,X=1
预期结果: x=3
(2)A=3 B=0 X=3
预期结果:x=1
(3)A=3,B=0, X=4
预期结果:x=5
(4)A=3,B=1,X=1
预期结果: x=1
在这里插入图片描述

黑盒测试

在这里插入图片描述
常用黑盒测试方法:

  • 等价类法
  • 边界值分析

等价类法

等价类有:有效的等价类,无效的等价类。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 设计测试用例时两个步骤:
    • 设计一个新的测试用例以尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步骤直到所有有效等价类都被覆盖为止;
    • 设计一个新的测试用例,使它覆盖一个而且只覆盖一个尚未被覆盖的无效等价类,重复这一步骤直到所有无效等价类都被覆盖为止。
      在这里插入图片描述
      在这里插入图片描述

边界值分析法

边界值:指输入等价类和输出等价类边界上的数据

  • 思想:设计边界值测试方案进行分析
    在这里插入图片描述
  • 边界值分析法步骤
    • (1)划分等价类
      (2) 找等价类的边界
  • 一个用例尽量覆盖多的有效边界
  • 一个用例只能覆盖一个无效边界
    在这里插入图片描述

软件测试

单元测试

1、目的
保证每个模块作为一个单元能正确运行;
发现的往往是编码和详细设计的错误。
2、基于的文档和测试方法:
详细设计说明书、
主要使用白盒测试技术

单元测试基本测试方法

  • 模块本身不是一个程序,不能直接运行,需要靠其它模块来驱动和调用,因此需要为其设计驱动程序(模拟其功能)。
  • 同时,一个模块运行中又调用到它的下属模块,则需为其设计多个存根程序(支持模块)。
    在这里插入图片描述

集成测试

  • 在单元测试的基础上,将所有模块按照设计要求组装成为子系统或系统,进行集成测试。
    1)功能性测试。使用黑盒测试技术针对被测模块的接口规格说明进行测试。
    2)非功能性测试。对模块的性能或可靠性进行测试。

  • 基于文档及使用方法:
    概要设计说明书
    黑盒测试法

  • 由模块组装成程序时有两种方法:

    • 非渐增式测试方法
      在这里插入图片描述

    • 渐增式测试方法
      在这里插入图片描述
      在这里插入图片描述

在这里插入图片描述

回归测试

在软件生命周期的任何一个阶段,只要软件发生了改变,就可能给软件带来问题。
(1)可能源于发现了错误并做了修改。
(2)也可能是因为在集成或维护阶段加入了新的模块。
回归测试:重新执行已经做过的测试的某个子集。以保证上述这些变化没有带来非预期的副作用。(已测过的一部分黑盒和白盒)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从自定义一个作用域开始来了解SpringBean的作用域

你好,这里是codetrend专栏“Spring6全攻略”。 在 Spring 框架中,Bean 的作用域(Scope)定义了 Bean 实例在容器中如何创建、管理和销毁的策略。 Spring 提供了多种 Bean 作用域,每种作用域都有其特定的生命周期和适用…

spi 驱动-数据发送流程分析

总结 核心函数是spi_sync, 设备驱动->核心函数-> 控制器驱动 实例分析 (gdb) c Continuing.Thread 115 hit Breakpoint 1, bcm2835_spi_transfer_one (master0xffffffc07b8e6000, spi0xffffffc07b911800, tfr0xffffff8009f53c40) at drivers/spi/spi-bcm2835…

Day45代码随想录动态规划part07:70. 爬楼梯(进阶版)、322. 零钱兑换、279.完全平方数、139.单词拆分

Day45 动态规划part07 完全背包 70. 爬楼梯&#xff08;进阶版&#xff09; 卡码网链接&#xff1a;57. 爬楼梯&#xff08;第八期模拟笔试&#xff09; (kamacoder.com) 题意&#xff1a;假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬至多m (1 < m < n)个…

导数和偏导数练习

导数题目列表 偏导数题目列表 这里是上述50个导数和偏导数练习题的答案&#xff1a; 导数答案列表 偏导数答案列表 更多问题咨询 Cos机器人

Linux之命令行参数与环境变量

命令行参数&环境变量 命令行参数 main函数也是一个函数&#xff0c;其实也可以携带参数的 int main( int argc, char *argv[ ], char *envp[ ] ) {program-statements } 那这里是有三个参数的: 第一个参数&#xff1a; argc 是个整型变量&#xff0c;表示命令行参数的个数…

ABAP 第二代增强-采购申请子屏幕增强

文章目录 第二代增强-采购申请子屏幕增强需求实现过程创建项目运行效果客户屏幕的PBO全局变量获取数据更新数据运行效果查询底表修改数据 第二代增强-采购申请子屏幕增强 需求 实现过程 创建项目 运行效果 客户屏幕的PBO 全局变量 *&------------------------------------…

关于Docker的数据管理

文章目录 一、Docker的数据管理1、数据卷1.1 数据卷定义1.2 数据卷配置 2、数据卷容器2.1 创建数据卷容器2.2 使用--volume-from来挂载luck02 二、端口映射三、容器互联1、创建容器互联2、进入luck02测试&#xff08;ping 容器名/别名&#xff09; 四、Docker镜像的创建1、基于…

Java类文件.class详解

一、编译型语言和解释型语言的区别 1、编译型语言&#xff1a; 在编译型语言中&#xff0c;源代码会被整个编译成机器码或者中间代码&#xff08;比如Java的字节码&#xff09;&#xff0c;生成可执行文件。 运行程序时&#xff0c;不需要再对源代码进行解释&#xff0c;而是…

vue3怎么使用i18n

在 Vue 3 中使用国际化&#xff08;i18n&#xff09;通常涉及到使用 Vue I18n Next&#xff0c;这是 Vue 3 的官方国际化插件。以下是如何设置和使用 Vue I18n Next 的步骤&#xff1a; 1. 安装 Vue I18n Next 使用 npm 或 yarn 安装 Vue I18n Next&#xff1a; npm install …

Yarn的安装及使用

YARN的安装及使用主要分为以下几个步骤&#xff1a; 一、安装YARN YARN的安装依赖于Node.js的运行环境&#xff0c;因此需要先安装Node.js。 下载并安装Node.js&#xff1a;可以从Node.js官网下载并安装适合你操作系统的Node.js安装包。安装YARN&#xff1a; 在Windows系统…

RockChip Android13 NFC SL6320移植

环境:RK3568 Android13 一:驱动移植 1、驱动 将SL6320驱动代码拷贝至kernel-5.10/drivers/misc/sl6320/ 特殊说明:勿将驱动代码放置于kernel-5.10/drivers/nfc/目录下,会导致sl6320驱动生成设备节点时因/dev/nfc节点以创建而加载失败。 2、DTS 本次硬件设计电路走I2C协…

服务器数据恢复—多块磁盘离线导致阵列瘫痪,上层lun不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌MSA2000存储&#xff0c;该存储中有一组由8块SAS硬盘&#xff08;其中有一块热备盘&#xff09;组建的RAID5阵列&#xff0c;raid5阵列上层划分了6个lun&#xff0c;均分配给HP-Unix小型机使用&#xff0c;主要数据为oracle数据库和O…

【LeetCode刷题】34. 在排序数组中查找元素的第一个和最后一个位置

1. 题目链接 34. 在排序数组中查找元素的第一个和最后一个位置 2. 题目描述 3. 解题方法 找到元素的第一个位置&#xff0c;也就是找大于等于目标的最小值找到元素的最后一个位置&#xff0c;也就是找小于等于目标的最大值可以利用2次二分查找来解决 3.1. 第一次查找 3.2. …

今日详解,教你如何不直播在视频号卖货

大家好&#xff0c;我是电商笨笨熊 视频号作为背靠微信的平台&#xff0c;从不需要考虑自身的流量问题&#xff0c; 因此在视频号推出之后就有大批的主播从其他平台转入视频号&#xff1b; 而这时候很多普通人应该也发现了新的机会&#xff0c;不再去内卷抖音、快手直播&…

【Git】Github创建远程仓库并与本地互联

创建仓库 点击生成新的仓库 创建成功后会生成一个这样的文件 拉取到本地 首先先确保本地安装了git 可以通过终端使用 git --version来查看是否安装好了git 如果显示了版本信息&#xff0c;说明已经安装好了git&#xff0c;这时候我们就可以进入我们想要clone到问目标文件夹 …

【MySQL】4.MySQL的InnoDB引擎深度解析:事务、索引、MVCC、锁机制与性能优化等

InnoDB&#xff0c;作为MySQL数据库系统中的默认存储引擎&#xff0c;以其卓越的事务处理能力和对ACID属性的全面支持&#xff0c;成为了众多开发者和数据库管理员的首选。然而&#xff0c;要充分利用InnoDB的强大功能&#xff0c;就需要深入理解其内部机制&#xff0c;包括事务…

介绍一下std::thread

std::thread 是 C11 标准库中的一个类&#xff0c;它用于表示和控制线程的执行。通过 std::thread&#xff0c;你可以创建和管理多个并发执行的线程&#xff0c;这些线程可以共享应用程序的资源&#xff0c;并执行不同的任务。 创建线程 std::thread 的构造函数用于创建线程。…

C++深入解析锁机制与 CAS 实现

锁机制 在锁机制的应用中&#xff0c;乐观锁和悲观锁是两种常见的并发控制策略&#xff0c;它们主要在处理数据的一致性和并发操作时表现出不同的假设和实现方式。 乐观锁 乐观锁基于这样一个假设&#xff1a;冲突发生的概率很低&#xff0c;因此在数据操作过程中不会主动去…

python-正则表达试-实践1

匹配html标签中的任意标签内数据 匹配所有包含’oo’的单词 import re text "JGood is a handsome boy, he is cool, clever, and so on..." re.findall(r\w*oo\w*, text) 匹配 html中title里面的内容 原文&#xff1a; import re file r./202304.html f open(…

2023数维杯A题原创完整论文思路和求解代码

河流对地下水有着直接地影响,当河流补给地下水时,河流一旦被污染,容易导致地下水以及紧依河流分布的傍河水源地将受到不同程度的污染,这将严重影响工农业的正常运作、社会经济的发展和饮水安全。在地下水污染中最难治理和危害最大的是有机污染,因而对有机污染物在河流-地下…