【软件工程】软件测试
软件测试的对象
软件=程序+文档
测试对象:各个阶段产生的源程序和文档。
软件测试的目的
基于不同的立场,对软件测试的目的存在着两种完全对立的观点。
(1)一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度);
(2)另一种是希望测试成为表明软件产品中不存在错误的过程,验证该软件中已正确地实现了用户的要求,因此,它们倾向于选取导致程序失败概率最小的测试实例和数据。
显然,第二种观点对完善和提高软件质量和可靠性毫无价值,因此测试的目的应该是通过软件测试尽可能多地发现并改正软件种存在的错误。
软件测试的定义
Glenford J. Myers把这一观点归纳为:
⑴测试是程序执行的过程,其目的在于发现错误。
⑵一个好的测试实例在于发现至今未发现的错误。
⑶一个成功的测试是发现了至今未发现的错误的测试。
因此,软件测试(Software Testing)是从引起和发现错误的目的出发执行某一程序的过程。
错误的类型
(1)功能错误:处理功能说明不完整或不确切,致使编程时对功能有误解而产生的错误。
(2)系统错误:与外部接口错误、子程序调用错误、参数使用错误等。
(3)过程错误:算术运算错误和逻辑运算错误
(4)数据错误:数据结构、实体、属性错误。
(5)编程错误:语法错误、程序逻辑错误、编程书写错误等。
软件测试过程模型
(1)测试设计
(2)测试执行
(3)测试结果比较
软件测试技术
测试法分为黑盒法和白盒法。
1.黑盒(Black-box Testing)法
黑盒法又称为功能测试法,它是根据程序功能的分析,推演出由函数
定义域中有代表性的元素组成测试集,这些数据应包括对程序是有效的和无效的输入,极端的、正常的和特殊的数据元素。因此,黑盒测试法是从外界来检查模块或程序的功能,也即根据模块的输入和输出,得出所得结果得差异。这种测试无须知道模块的内部逻辑,而是给定一输入,检查是否会得到所期望的输出。功能测试法又具体分为等价类法,边值分析法,因果图法和错误猜测法等。
2.白盒法
白盒法也称之为结构测试或逻辑覆盖法。它是根据对软件内部逻辑结构的分析,选取测试数据集(即测试用例:Testing Case),而测试数据集对程序逻辑的覆盖程度决定了测试完全性的程度。常用的几个覆盖标准有:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖。
【例题▪填空题】黑盒法又称为_______法,黑盒测试法是从外界来检查模块或程序的功能,也即
根据模块的输入和输出,得出所得结果得差异。
【答案】功能测试
路径测试技术(白盒测试)★依据的是程序的逻辑结构。
(1)控制流程图
基本元素:过程块、节点、判定。
链、路径的概念。
注意:控制流程图和程序流程图的差别。
(2)测试策略
a)路径覆盖:执行所有可能穿过程序控制流程的路径。最强的测试度量。
b)语句覆盖:至少执行程序中所有语句一次。最低的测试度量。
c)分支覆盖:至少将程序中的每个分支执行一次。
d)条件覆盖与条件组合覆盖
语句覆盖≤分支覆盖≤条件组合覆盖≤路径覆盖
(3)路径选取与用例设计
最小的强制性测试需求是语句覆盖率。
【例题】根据下列程序流程图,设计不超过2组的测试用例,使之满足语句覆盖,要求给出每组测试数据的执行路径、输入值、输出值及两个判定(3)和(5)的判定结果。
【解析】此类题目属于综合应用题(每题10分),考核知识点为路径测试技术。
在本题中,要求设计测试用例,满足语句覆盖,即所有语句都必须执行一遍。
A、B、C的值决定了程序执行的顺序
A、B、C的值执行顺序结果
路径选取的一般原则
(1)选择最简单的、具有一定功能含义的入口/出口路径
(2)在已选取的基础上,选择无循环的路径,选取短路径、简单路径
(3)选取没有明显功能含义的路径,要研究该路径为什么存在
基于事务流的测试技术
事务流测试的步骤
a)获得事务流程图
b)浏览、复审
c)用例设计
d)测试执行
等价类法
是根据程序的I/O特性,将程序的输入划分为有限个等价区段,使得从每个区段内抽取的代表性数据进
行的测试等价于该区段内任何数据的测试。对于每个输入条件存在着程序有效输入的有效等价类和对程序错
误输入的无效等价类。例如,某实数X的取值范围假设为a<X<b,则所有[a+1,b-1]之间的实数构成了有效
等价类,而任何[-∞,a]或[b,+∞]之间的实数构成了两个无效等价类。
边值分析法
是一种根据I/O边界等价类上或紧靠边界的条件,选择测试用例的更有效的方法。例如,给定三个点,
判定能否构成三角形,可选取两边之和等于第三边的实例作为边值分析法的测试用例。
【例题】有一个学生选课系统:程序的输入条件为:每个学生可以选修1至3门课程,试用黑盒测试法完成
测试。
(1)按等价类划分法,设计测试用例(要求列出设计过程);
(2)按边界值分析法,设计测试用例。
【解析】
(1)等价类法:
课程门数<1
课程门数>3
课程门数1~3
(2)边界值分析法
课程门数=1
课程门数=3
因果图法
是通过从用自然语言书写的功能说明表中找出因—输入条件和果—输出结果,通过因果图将功能说明转
换成一张判定表,然后为每种输出条件的组合设计测试用例。
错误推测法是根据测试人员的经验和直觉推测程序种可能存在的各种错误。
软件测试步骤
软件测试是按照与系统开发相反的方向来进行的。依次为:单元测试(模块测试)、集成测试、有效性测试和系统测试
1.单元测试
单元测试(Unit Testing)又称模块测试(Module Testing),或模块分调,用于测试单个程序模块,确定模
块的逻辑和功能是否正确。
单元测试采用白盒测试技术。
(1)模块接口
(2)局部数据结构
(3)重要的执行路径
(4)错误执行路径
驱动模块和承接模块。
2.集成测试
集成测试(Integration Testing)用来测试模块之间接口的正确性,也即模块之间的数据和控制传递。集成测
试是与单元测试平行进行的。
集成测试采用黑盒测试技术。
(1)自顶向下的集成测试:需要设计承接模块
(2)自底向上的集成测试:需求设计驱动模块
3.有效性测试
目的:发现软件实现的功能与需求规格说明书不一致的错误。
方法:采用黑盒测试技术
相关文章:
【软件工程】软件测试
软件测试的对象 软件程序文档 测试对象:各个阶段产生的源程序和文档。 软件测试的目的 基于不同的立场,对软件测试的目的存在着两种完全对立的观点。 (1)一种观点是通过测试暴露出软件中所包含的故障和缺陷(从用户的角度)…...
Android性能优化——内存优化
一、内存问题 内存抖动,锯齿状,GC导致卡顿内存泄漏,可用内存减少,频繁GC 内存溢出,OOM,程序异常 二、内存分析工具 Memory ProfilerMemory Analyzer LeakCanary Memory Profiler 实时图表展示应用内存使…...
Android Studio实现图形验证码
源代码 源代码MainActivity 效果图32行需要修改,不修改会报错:需要常量表达式,我的代码已修改 点击后 MainActivity import static com.example.graphicverificationcode.RxCaptcha.TYPE.NUMBER;import android.annotation.SuppressLint; …...
JAVA面试数据库篇
目录 一.优化 1.MYSQL中,如何定位慢查询? 2.SQL语句执行慢,如何分析呢? 3.索引 了解过索引吗?(什么是索引) 索引的底层数据结构了解过吗? B树和B树的区别是什么呢? 什么是聚…...
Android高手进阶教程(三)之----Android 中自定义View的应用.
大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"htt…...
第一百一十三回 dart中的getter/setter方法
文章目录 概念介绍使用方法示例代码使用扩展 我们在上一章回中介绍了 flutter_screenutil包相关的内容,本章回中将介绍 dart中的setter/getter方法.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在这里介绍的setter/getter方法属于编程语言中的…...
搭建Docker环境
目录 一、docker环境搭建 1、卸载旧版本docker 2、安装依赖和设置仓库 3、安装docker 4、启动并加入开机启动 5、验证是否安装成功 二、利用docker搭建nginx 1、拉取镜像 2、启动容器,部署nginx 一、docker环境搭建 1、卸载旧版本docker yum remove docke…...
微服务08-多级缓存
1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈 •Redis缓存失效时,会对数据库产生冲击 多级缓存就是充分利用请求处理的每个环节,分…...
Intel汇编和ATT汇编的区别?
一、前缀不同 在 Intel 语法中,没有寄存器前缀或立即前缀。 然而,在 AT&T 中,寄存器的前缀是“%”,而 immed 的前缀是“$”。 Intel 语法十六进制或二进制即时数据分别带有“h”和“b”后缀。 此外,如果第一个十六…...
MongoDB 备份与恢复
1.1 MongoDB的常用命令 mongoexport / mongoimport mongodump / mongorestore 有以上两组命令在备份与恢复中进行使用。 1.1.1 导出工具mongoexport Mongodb中的mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。可以通过参数指定导出的数据项,…...
探讨uniapp的网络通信问题
uni-app 中有很多原生的 API,其中我们经常会用到的肯定有:uni.request(OBJECT) method 有效值 注意:method有效值必须大写,每个平台支持的method有效值不同,详细见下表。 success 返回参数说明 data 数据说明 最终…...
【左神算法刷题班】第18节:汉诺塔问题、岛屿问题、最大路径和问题
第18节 题目1:汉诺塔问题(变体) 体系学习班18节有讲暴力递归的汉诺塔原题。 给定一个数组arr,长度为N,arr中的值只有1,2,3三种 arr[i] 1,代表汉诺塔问题中,从上往下第…...
网络安全体系架构介绍
网络安全体系是一项复杂的系统工程,需要把安全组织体系、安全技术体系和安全管理体系等手段进行有机融合,构建一体化的整体安全屏障。针对网络安全防护,美国曾提出多个网络安全体系模型和架构,其中比较经典的包括PDRR模型、P2DR模…...
JSP实训项目设计报告—MVC简易购物商城
JSP实训项目设计报告—MVC简易购物商城 文章目录 JSP实训项目设计报告—MVC简易购物商城设计目的设计要求设计思路系统要求单点登录模块商品展示模块购物车展示模块 概要设计Model层View层Controller层 详细设计Model层View层登录界面系统主界面 Controller层 系统运行效果项目…...
41、可靠传输——停等ARQ
前面两节内容我们学习了传输层的基本概况的一些知识,包括传输层在TCP/IP协议栈中负责的任务、传输层的两大协议,以及端口号、套接字等一些基本的概念。从这一节开始,我们将开启两大协议中TCP协议的学习。 但是,经过之前的学习&am…...
RK3568 cmake编译
一.简介 CMake是开源、跨平台的构建工具,可以让我们通过编写简单的配置文件去生成本地的Makefile,这个配置文件是独立于运行平台和编译器的,这样就不用亲自去编写Makefile了,而且配置文件可以直接拿到其它平台上使用,…...
详细安装配置django
安装配置使用Django。 1,下载安装 django pip install django 2.创建设置项目 先进入要放置项目的文件夹下 2.1, 创建项目 django-admin startproject Api_project 2.2, 创建app命令 cd Api_project dir看一下是否有 manage.py 文件…...
HTTP之cookie基础学习
目录 Cookie 什么是Cookie Cookie分类 Cookie版本 Cookie工作原理 Cookie详解 创建cookie cookie编码 cookie过期时间选项 Cookie流程 Cookie使用 会话管理 个性化信息 记录用户的行为 Cookie属性 domain选项 path选项 secure选项 cookie…...
观察者模式和发布订阅模式
观察者模式与发布订阅模式的区别: 1、观察者模式中只有观察者和被观察者,发布订阅模式中有发布者、订阅者、调度中心 2、观察者模式是被观察者发生变化时自己通知观察者,发布订阅模式是通过调度中心来进行分布订阅操作 发布订阅模式 class …...
利用ViewModel和LiveData进行数据管理
利用ViewModel和LiveData进行数据管理 1. 引言 在当今移动应用开发的世界中,数据管理是一个至关重要的方面。随着应用的复杂性不断增加,需要有效地管理和维护应用中的数据。无论是从服务器获取数据、本地数据库存储还是用户界面的状态,数据…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Golang dig框架与GraphQL的完美结合
将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...


