软件测试基础教程学习4

news2024/12/24 9:04:43

文章目录

  • 软件测试技术和方法
    • 4.1 静态测试和动态测试
    • 4.2 黑盒测试和白盒测试概述
    • 4.3 黑盒测试技术
      • 4.3.1 等价类划分
      • 4.3.2 边值分析
      • 4.3.3 因果图法
      • 4.3.4 正交实验设计法
      • 4.4.5 决策表驱动测试
      • 4.5.6 错误推荐法
    • 4.4 白盒测试技术
      • 4.4.1 程序结构分析测试
      • 4.4.2 逻辑覆盖测试
      • 4.4.3 路径分析测试
      • 4.4.4 程序插装测试
      • 4.4.5 程序变异测试

软件测试技术和方法

4.1 静态测试和动态测试

根据程序是否运行,可以把软件测试分为静态测试和动态测试两大类。

静态测试主要针对不运行的部分进行检查和审阅;
动态测试是指通常意义上的测试及运行和使用软件。
在实际工作中,代码检查为静态测试,而黑盒测试和白盒测试都是动态测试。

静态测试包括:

  • 代码审查(包括代码评审和走查)。代码审查一般是按代码检查单阅读程序,查找错误。其内容包括:检查代码和设计的一致性;检查代码的标准性、可读性;检查代码逻辑表达的正确性和完整性;检查代码结构的合理性等。
  • 静态分析。主要对程序进行控制流分析、数据流分析、接口分析和表达式分析等。
  • 文档检查。主要是指文档测试。

通过静态测试,一般可以发现软件中的如下缺陷:

  1. 错误的局部变量和全局变量。
  2. 不匹配的参数。
  3. 不适当的循环嵌套和分支嵌套。
  4. 不适当的处理顺序。
  5. 无终止的死循环。
  6. 未定义的变量。
  7. 不允许的递归。
  8. 调用不存在的子程序。
  9. 遗漏了标号或代码。
  10. 不适当的连接。

引起以上缺陷的原因可能是:

  1. 未使用过的变量。
  2. 不会执行到的代码。
  3. 未引用过的标号。
  4. 可疑的计算。
  5. 潜在的死循环。

动态测试是通过原程序运行时所体现出来的特征来进行执行跟踪,时间分析以及测试覆盖等方面的测试。动态测试时真正运行被测程序,在执行过程中通过输入有效的测试用例,对其输入与输出的对应关系进行分析,以达到检测的目的。

4.2 黑盒测试和白盒测试概述

**黑盒测试:**已知产品的用户需求规格,可以通过测试证明整个软件系统是否符合用户的最终需求。
**白盒测试:**已知产品的详细设计过程,可以通过测试证明所有内部操作是否符合设计规格要求,所有内部成分是否已经通过检查。

在这里插入图片描述
黑盒测试的出发点是用户需求,而白盒测试的出发点是程序实现。

4.3 黑盒测试技术

黑盒测试的检查点一般包括:

  1. 根据需求规格说明书检查是否有不正确或遗漏的功能;是否忽略了用户的隐含需求。
  2. 在软件的外部接口上输入信息能否被正确的接受,能否输出正确的结果。
  3. 是否有数据结构错误或外部信息(如数据文件)访问错误。
  4. 性能上能否满足要求。
  5. 易用性和其他功能特性能否满得到满足。
  6. 是否有初始化或终止性缺陷,是否会出现用户不能接受的缺陷。

4.3.1 等价类划分

采用等价类划分方法,主要是根据需求规格中对程序的输入和输出要求区别开来并加以分解,从而进一步设计出测试用例。

等价类划分的方法是把程序的输入域划分成若干部分,然后从每个部分中选取少数代表性数据作为测试用例。其中每一部分代表测试相同目标或者暴露相同软件缺陷的一组测试用例,具体划分为有效等价类和无效等价类。

  • 有效等价类:对程序的规格说明是有意义的,合理的输入数据所构成的集合。在具体问题中,有效等价类可以是一个,也可以是多个。

  • 无效等价类;对程序的规格说明是不合理的或无意义的输入数据所构成的集合。一般来讲,无效等价类会有多个,对于输入数据较多的情况,无效等价类要比有效等价类的数量多。

  1. 确定等价类的原则
  • 如果输入条件规定了取值范围或取值的个数,则可确定一个有效等价类和两个无效等价类。
  • 输入条件规定了输入值的集合,或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类。
  1. 确定测试用例步骤
  • 为每个等价类规定一个唯一的编号。
  • 设计一个测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。
  • 设计一个新的测试用例,使其只覆盖一个无效等价类。

4.3.2 边值分析

边值可能涉及的数据类型包括数值、速度、尺寸、字符、地址、位置,数量等。在对这些数据进行边值分析时,重点考虑具有以下特征的数据:

(1)第一个和最后一个。
(2)最小值和最大值。
(3)开始和完成。
(4)超过和在内。
(5)空和满。
(6)最短和最长。
(7)最慢和最快。
(8)更早和更迟。
(9)最大和最小。
(10)最高和最低。
(11)相邻和最远。

边值分析原则:

(1)如果输入条件规定了取值范围,或是规定了值的个数,则应以该范围的边界内即刚刚超出该范围的边界外的值,或是分别对最大,最小个数及稍小于最小、稍大于最大个数作为测试用例。
(2)如果程序规格说明中提到的输入或输出域是个有序的集合(如顺序文件、表格等)则应注意选取有序集的第一个和最后一个元素作为测试用例。
(3)分析规格说明,找出其他的可能边界条件。

4.3.3 因果图法

因果图法不仅要考虑输入情况的各种组合,也要考虑各个输入情况之间的制约关系。

在实际问题中,输入状态之间相互还可能存在某些依赖关系,称为约束。例如,某些输入条件不可能同时出现。输出状态之间也存在约束。

注:因果图最终要生成决策表。

4.3.4 正交实验设计法

在正交实验设计法中,判断实验结果优劣的标准称为实验的指标,可能影响实验指标的条件称为因子,而因子影响实验的程度称为因子的水平(或状态)。

正交实验设计饭,首先要根据被测软件的规格说明书,找出影响其功能实现的操作对象和外部因素,把它们当做因子,把各个因子的取值当做状态构造出二元的因素分析表。然后利用正交表进行各因子的状态组合,构造有效的测试输入数据集,并由此建立因果图。

4.4.5 决策表驱动测试

在一些数据处理问题中,某些操作是否可以实施依赖于多个逻辑条件的取值,即在这些逻辑条件取值的组合所构成的多种情况下,分别执行不同的操作。处理这类问题的一个非常有力的分析和表达工具是决策表。其一般由以下四个部分组成,

(1)条件桩:列出了问题的所有条件,通常认为列出的条件的先后次序无关紧要。
(2)动作桩:列出了问题规定的可能采取的操作,这些操作的排列顺序没有约束。
(3)条件项:针对条件中给出的条件列出所有可能的取值。
(4)动作项:与条件项紧密相关,列出在条件下的各组取值情况下应该采取的动作。

在这里插入图片描述
决策表的建立步骤:

  • 确定规则的个数,假如有n个条件,每个条件有两个取值(0,1),则有n种规则。
  • 列出所有的条件项和动作项。
  • 填入条件取值。
  • 填入集体动作,得到初始决策表。
  • 简化合并相似规则(相同动作)。

任何一个条件组合的特定取值及其相应要执行的操作称为规则。在决策表中贯穿条件项和操作项的一列就是一条规则。

4.5.6 错误推荐法

错误推荐法靠经验和直觉来推测程序中可能存在的各种错误,从而有针对性的编写测试用例,可以列举出可能的错误和可能发生错误的位置,然后选择测试用例。

4.4 白盒测试技术

白盒测试技术主要应用于单元测试阶段,一般由编码人员完成。

白盒测试又称为结构测试或逻辑驱动测试,主要是测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序的所有逻辑路径进行测试,确定实际的状态是否与预期的状态一致。

白盒测试遵循的原则:

(1)对程序模块的所有独立的执行路径至少测试一次。
(2)对所有的逻辑判定,取“真” 与“假” 的两种情况都至少测试一次。
(3)在循环的边界和运行界限内执行循环体。
(4)测试内部数据结构的有效性。

白盒测试技术的内容主要包括:

(1)程序结构分析。
(2)逻辑覆盖。
(3)域测试
(4)符号测试。
(5)路径测试。

4.4.1 程序结构分析测试

  1. 控制流分析

控制流分析主要是检查程序的控制结构,只需要把程序设计中的流程图转化为流图(也称为控制流图)。
在这里插入图片描述

  1. 数据流分析

数据流分析最初是随着编译系统要生成有效的目标代码而出现的,主要用于代码优化。

  1. 信息流分析

信息流分析主要用于验证程序变量间信息的传输是否遵循了保密要求。

4.4.2 逻辑覆盖测试

逻辑覆盖测试方法包括:

1. 语句覆盖

语句覆盖:在测试时,首先设计若干个测试用例,然后运行被测程序,使程序中的每个语句至少执行一次。

语句覆盖的测试可以给人们一种心理上的满足,以为每个语句都经历过,似乎可以放心了,但实际上,语句覆盖在测试过程中,除去对检查不可执行语句有一定的作用外,并没有排除被测程序包含错误的风险,必须看到,被测程序并非是语句的无序堆积,语句之间的的确存在着许多有机的联系。

2. 判定覆盖
判定覆盖:设计若干测试用例,运行被测程序,使得程序中每个判断的真分支和假分支至少经历一次,即判断的真假值曾经均被满足。

同样只做到判定覆盖,仍无法找出内部条件的错误。

3. 条件覆盖
条件覆盖:设计若干测试用例,执行被测程序后,要求每个判断中的每个条件的可能取值均至少满足一次,但覆盖了条件的测试用例不一定覆盖了分支。

4. 判定/条件覆盖

判定条件覆盖:要求设计足够多的测试用例,使得判断中的每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。

但是忽略了路径覆盖的问题,而路径能否全面覆盖在软件测试中是个重要问题,因为程序要取得正确的结果,就必须消除遇到的各种障碍,沿着特定的路径顺利执行,如果程序中的每一条路径都得以测试,那么才能说程序受到了全面的检验。

5. 条件组合覆盖

条件组合覆盖:设计足够多的测试用例,使得每个判断的所有可能的条件取值组合至少执行一次,覆盖了所有判断的可取分支。但同样忽略了路径覆盖的问题。
6. 路径覆盖

路径覆盖:设计足够多的测试用例,要求覆盖程序中的所有可能路径。

在许多情况下,路径数都是个庞大的数字,要全部覆盖是无法实现的,即使都覆盖到了,仍然不能保证对此程序的正确性。

4.4.3 路径分析测试

分析程序中的路径是指检验程序从入口开始,执行过程中经历的各个语句,直到出口。

4.4.4 程序插装测试

程序插装是借助于在被测程序中设置断点或打印语句来进行测试的方法,在执行测试的过程中,可以了解一些程序的动态信息。这样在运行程序时,既能检验测试的结果数据,又能借助插入语句给出的信息掌握程序的动态运行特性,从而把程序执行过程中所发生的重要事件记录下来。

插装技术在软件测试中主要有以下几个应用:

  • 覆盖分析。程序插装可以估计程序在控制流图中被覆盖的程度,确定测试执行的充分性,从而设计更好的测试用例,提高测试覆盖率。

  • 监控。在程序的特定位置设立插装点,插入用于记录动态的语句,监控程序运行的某些特性,从而排除软件故障。

  • 查找数据流异常。程序插装可以记录在程序执行中某些变量值的变化情况和变化范围,掌握了数据变量的取值状况,就能准确的判断是否发生了数据流异常。

4.4.5 程序变异测试

程序变异测试是一种错误驱动测试。所谓错误驱动测试是指该方法是针对某类特定的程序错误的。

错误驱动测试主要有两种:程序强变异和程序若变异。

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

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

相关文章

JSP页面跳转刷新

问题: 当前的jsp页面触发ajax请求后,能够获得新的相应页面,但是浏览器上展示的依然是老的页面,数据不刷新 尝试使用页面重定向依然无效, 最后使用js的window.location.href, 让浏览器的页面url 重加载才ok function submitDate() {var date1 document.getElementById("d…

【uniapp】uniapp反向代理解决跨域问题(devServer)

背景介绍 前段时间,在拿uniapp开发的时候,出现了跨域问题,按理说跨域应该由后端解决,但既然咱前端可以上,我想就上了(顺手装个13) 首先介绍什么是跨域 出于浏览器的同源策略,在发…

docker-使用harbor搭建私有仓库

前提 安装docker-ce 安装docker-compose 安装 安装docker-ce # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce…

金蝶云星空无需代码连接钉钉考勤的方法

金蝶云星空用户使用场景: 企业的销售渠道人员出差之前需要在金蝶云星空上提交出差申请单,并等待审批通过;每当销售任务完成,金蝶云星空上的审批通过后,需要人力在考勤系统中手动修改考勤信息。看似比较简单的流程&…

基于Java+SpringBoot+vue的汽车改装方案网站设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

Bitbucket 新版本的安全限制

新版本的安全限制 是继续按照他给的第二个链接进入Bitbucket仓库后台添加App密码,也就是每个仓库需要单独的秘密码,这样的话就更加安全。 生产新密码: 这一坨务必要妥善保存,因为一旦点了关闭之后你就再也没有机会看到这个密码了…

Hive一分钟

分区和分桶 1.分区表是将大的表文件划分成多个小文件以利于查询,但是如果数据分布不均衡,也会影响查询效率。 2.桶表可以对数据进行哈希取模,目的是让数据能够均匀的分布在表的各个文件中。 3.物理上,每个桶就是表和分区目录里的…

14个在你的WordPress网站上使用OpenAI的最好方法(2003)

您是否想知道如何在您的WordPress网站上使用OpenAI和ChatGPT? OpenAI可以提供一切帮助,从为您的帖子生成元描述到撰写电子邮件销售文案。您可以在您的WordPress网站上使用OpenAI来节省时间、降低成本、改善您的搜索引擎优化和工作流程,并发展…

推荐大型电商项目【谷粒商城】

谷粒商城项目是尚硅谷研究院最新推出的完整大型分布式架构电商平台,技术全面、业务深入,全网无出其右。 技术涵盖:微服务架构分布式全栈集群部署自动化运维可视化CICD,对标阿里P6/P7,冲击40-60w年薪。 项目由业务集群…

吐血整理!可免费使用的国产良心软件分享,几乎满足你办公需求

在这个信息化时代,软件已经成为我们办公和生活的必备工具。然而,市面上的大部分国产软件都需要付费才能使用,给我们的经济负担增加了不少。幸运的是,国内有一些良心软件,它们质量上乘,功能强大,…

myCobot机器人ChatGPT应用:设计原则和模型能力

我们将 ChatGPT 的功能扩展到机器人,并通过语言直观地控制机器人手臂、无人机和家庭助理机器人等多个平台。 你有没有想过用你自己的话告诉机器人该怎么做,就像你对人类一样?只是告诉你的家庭助理机器人:“请加热我的午餐”&…

SpringBoot+ Dubbo + Mybatis + Nacos +Seata整合来实现Dubbo分布式事务

1.简介 “ 本文主要介绍SpringBoot2.1.5 Dubbo 2.7.3 Mybatis 3.4.2 Nacos 1.1.3 Seata 0.8.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据。 ” 如果你还对SpringBoot、Dubbo、Nacos…

数据湖真的能取代数据仓库吗?【SNP SAP数据转型 】

数据湖和数据仓库的存在并不冲突,也并不是取代的关系,而是相互的融合关系。 数据湖是近两年中比较新的技术在大数据领域中,对于一个真正的数据湖应该是什么样子,现在对数据湖认知还是处在探索的阶段,像现在代表的开源产…

(五)复函数积分的定义与性质

本文内容主要如下: 1. 复积分的概念1.1. 复积分的定义1.2. 复积分的存在性与计算1.3. 一个圆周上的重要积分公式1.4. 复积分的基本性质 1. 复积分的概念 1.1. 复积分的定义 定义: 如图,C为平面上一条光滑的简单曲线: z z ( t ) x ( t )…

GAD7980/CL1680/AD7980详解与开发说明

目录 1 概述2 GAD7980简介3 用法时序4 参数计算与参数解释4.1 采样率4.2 转换时间4.3 采集时间5 采样数值折算6 设计注意事项7 代码demo 1 概述 本文用于讲述GAD7980的功能与用法,以及其中一些参数的计算方法,用法时序,输出数值等等&#xf…

chatglm+langchain

目录 chatglmlangchain 1.1. 主要功能: 1.2. Langchain中提供的模块 1.3. Langchain应用场景 2.1. chatglm应用: 1.1. 基于单一文档问答的实现原理 chatglmlangchain GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge bas…

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 在线考试管理系统的设计与实现

一.项目介绍 学生在线考试系统分为三类角色 超管、老师、学生 超级管理员:维护考试管理、提供管理、成绩查询、学生管理以及教师管理 老师:维护考试管理、提供管理、成绩查询以及学生管理 学生:我的试卷…

Linux入门介绍-CentOS和VMware虚拟机下载安装

Linux 学自尚硅谷武晟然老师,结合老师课堂内容和自己笔记所写博文。 文章目录 Linux入门篇Linux概述Linux vs WindowsLinux安装CentOS的版本选择和下载VMware下载VMware安装创建虚拟机安装CentOS 入门篇 Linux概述 Linux是一个操作系统,一切皆文件&…

SpringMVC 程序开发:为什么要学SpringMVC?如何学SpringMVC?

文章目录 🎇前言1.MVC1.1 MVC 的定义1.2 MVC 与 Spring MVC的关系 2.为嘛要学Spring MVC?3.如何学习 Spring MVC?3.1 Spring MVC 创建和连接3.1.1 RequestMapping 注解介绍3.1.2 使用RequestMapping的参数修改请求方法3.1.3 GetMapping 和 Po…

C中的open函数,write函数,read函数

1.创建新文件并保存数据。 #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include <unistd.h> void error_handling(char * message);int main(void) {int fd;char buf[]"Lets go!\n";fdopen("data.txt",O_CREAT…