【软件工程】测试

目录

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

前言

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

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


软件测试的目标

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

测试准则

  • 所有测试都应该能追溯到用户需求;(测试用例设计依据)
  • 应该远在测试开始之前就制定出测试计划;
  • 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)也可能是因为在集成或维护阶段加入了新的模块。
回归测试:重新执行已经做过的测试的某个子集。以保证上述这些变化没有带来非预期的副作用。(已测过的一部分黑盒和白盒)

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

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

相关文章

速卖通ip地址会相互影响吗?如何防止账号关联?

在跨境电商行业,大部分平台都是不允许一个卖家操作多个店铺的,如果被平台检测出账户关联,可能会被封店。在速卖通平台,会通过IP地址来判断是否经营多个账号吗?IP地址会使店铺相互影响吗? 一、速卖通IP地址会关联吗? 首先各位卖…

从零开始学习生成树实验:一步一步走向精通

大家好,这里是G-LAB IT实验室。 ⭕5月18日 CCNAHCIA 新开班来啦👏 现在报名有早鸟价,感兴趣的可咨询 👇👇👇 敲重点! 可小窗客服咨询课程价格 本课程包含线下面授、线上直播、录播、实验、考试习题、…

【数据库原理及应用】期末复习汇总高校期末真题试卷08

试卷 一、选择题(每题 2 分,共 30 分)    1. ___ ____是长期存储在计算机内的有组织,可共享的数据集合. A.数据库管理系统 B.数据库系统 C.数据库 D.文件组织 2. 数据库类型是按照 来划分…

Java医院绩效考核系统源码maven+Visual Studio Code一体化人力资源saas平台系统源码

Java医院绩效考核系统源码mavenVisual Studio Code一体化人力资源saas平台系统源码 医院绩效解决方案包括医院绩效管理(BSC)、综合奖金核算(RBRVS),涵盖从绩效方案的咨询与定制、数据采集、绩效考核及反馈、绩效奖金核…

1.基于python的单细胞数据预处理-归一化

目录 归一化的引入移位对数皮尔森近似残差两个归一化方法的总结 参考: [1] https://github.com/Starlitnightly/single_cell_tutorial [2] https://github.com/theislab/single-cell-best-practices 归一化的引入 在质量控制中,已经从数据集删除了低质…

力扣HOT100 - 739. 每日温度

解题思路&#xff1a; 单调栈 class Solution {public int[] dailyTemperatures(int[] temperatures) {int length temperatures.length;int[] ans new int[length];Deque<Integer> stack new LinkedList<>();for (int i 0; i < length; i) {int temperatu…

【NLP练习】使用seq2seq实现文本翻译

使用seq2seq实现文本翻译 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 from __future__ import unicode_literals, print_function, division from io import open import unicodedata import string impo…

Star-CCM+分配零部件至区域2-根据零部件的特性分组分配零部件至区域

前言 前文已经讲解了将零部件分配至区域的方法。其中有一种方法是"将所有部件分配到一个区域"。在工程应用中&#xff0c;有时会把同一种类型的部件分配到一个区域&#xff0c;因此在一个项目中有可能需要多次进行"将所有部件分配到一个区域"。如在电机温…

分布式与一致性协议之MySQL XA协议

MySQL XA协议 概述 相信很多人都知道MySQL支持单机事务&#xff0c;那么在分布式系统中&#xff0c;涉及多个节点&#xff0c;MySQL又是怎样实现分布式事务的呢&#xff1f; 举个例子&#xff0c;一个业务系统需要接收来自外部的指令&#xff0c;然后访问多个内部其他系统来执…

OpenBayes 一周速览|Apple 开源大模型 OpenELM 上线;字节发布 COCONut 首个全景图像分割数据集,入选 CVPR2024

公共资源速递 This Weekly Snapshots &#xff01; 5 个数据集&#xff1a; * COCONut 大规模图像分割数据集 * THUCNews 新闻数据集 * DuConv 对话数据集 * 安徽电信知道问答数据集 * Sentiment Analysis 中文情感分析数据集 2 个模型&#xff1a; * OpenELM-3B-Inst…

三、配置带HybridCLR的ARCore开发环境

预告 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 专栏&#xff1a; Unity开发AR系列 插件简介 通过热更技术实现动态地加载AR场景&#xff0c;简化了AR开发流程&#xff0c;让用户可更多地关注Unity场景内容的制作。 “EnvInstaller…”支…

【前端基础】CSS样式+Vue中绘制时间轴

深度选择器 在 Vue.js 中&#xff0c;/deep/、>>>、:deep 和 ::v-deep 这些都是深度选择器&#xff0c;用于修改子组件的样式。它们主要用于解决作用域样式和组件样式之间的冲突问题。 1. /deep/ 或 >>> /deep/ 和 >>> 是相同的选择器&#xff0c;…

rider自定义代码片段(以C#为例)

1.先看效果 2.在哪设置 File→Settings→Editor→Live Templates→C#3.咋定义 代码片段中的变量用$$包围&#xff0c;而且我们可以自定义变量名称&#xff0c;如CName。选择我们自定义的变量名称我们可以修改变量是否可以被修改以及变量将自动匹配的值。 比如将CName自动填充…

123. SQL优化技巧汇总

文章目录 1 避免使用select *2 用union all代替union3 小表驱动大表4 批量操作5 多用limit6 in中值太多7 增量查询8 高效的分页9 用连接查询代替子查询10 join的表不宜过多11 join时要注意12 控制索引的数量13 选择合理的字段类型14 提升group by的效率15 索引优化 sql优化是一…

07_Flutter使用NestedScrollView+TabBarView滚动位置共享问题修复

07_Flutter使用NestedScrollViewTabBarView滚动位置共享问题修复 一.案发现场 可以看到&#xff0c;上图中三个列表的滑动位置共享了&#xff0c;滑动其中一个列表&#xff0c;会影响到另外两个&#xff0c;这显然不符合要求&#xff0c;先来看下布局&#xff0c;再说明产生这个…

Nginx rewrite项目练习

Nginx rewrite练习 1、访问ip/xcz&#xff0c;返回400状态码&#xff0c;要求用rewrite匹配/xcz a、访问/xcz返回400 b、访问/hello时正常访问xcz.html页面server {listen 192.168.99.137:80;server_name 192.168.99.137;charset utf-8;root /var/www/html;location / {root …

TDN: Temporal Difference Networks for Efficient Action Recognition 论文阅读

TDN: Temporal Difference Networks for Efficient Action Recognition 论文阅读 Abstract1. Introduction2. Related work3. Temporal Difference Networks3.1. Overview3.2. Short-term TDM3.3. Long-term TDM3.4. Exemplar: TDN-ResNet 4. ExperimentsAblation studiesCompa…

智能创作时代:AI引领下的内容生产革命与效率提升

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

部署xwiki服务需要配置 hibernate.cfg.xml如何配置?

1. 定位 hibernate.cfg.xml 文件 首先&#xff0c;确保您可以在 Tomcat 的 XWiki 部署目录中找到 hibernate.cfg.xml 文件&#xff1a; cd /opt/tomcat/latest/webapps/xwiki/WEB-INF ls -l hibernate.cfg.xml如果文件存在&#xff0c;您可以继续编辑它。如果不存在&#xff…

梅兰日兰NSJ400N断路器NSJ400N可议价

梅兰日兰 NSJ400N 3 极 400 安培 600 伏交流电 紧凑型断路器 制造商的原始标签 脱扣单元&#xff1a;LS 功能 –&#xff08;长时间和短时间&#xff09; 负载侧凸耳 中断额定值&#xff1a;65kA 240 Vac 35kA 480 伏交流电压 18kA 600 伏交流电压 &#xff08;外观可能与照…