软件测试的方法总结

2023-09-19 15:00:03

根据利用的被测对象信息的不同,可以将软件测试方法分为:黑盒测试、灰盒测试、白盒测试。

1、白盒测试

1)概念:是依据被测软件分析程序内部构造,并根据内部构造分析用例,来对内部控制流程进行测试,可完全不顾程序的整体功能实现情况,即已知软件产品的内部实现过程,可以通过测试证明每种内部操作是否符合设计规格的要求,所有内部成分是否已经过检查。

2)思想:白盒测试又被称为玻璃盒测试、透明盒测试、开放盒测试、结构化测试、逻辑驱动测试、是基于程序结构的逻辑驱动测试。

3)测试对象: 函数、算法与数据结构

4)目的

(1)一般在测试前期进行,通过达到一定的逻辑覆盖率指标,使得软件内部逻辑控制结构上的问题能基本得到消除;

(2)保证内部结构达到一定的覆盖程度,能够给予软件代码质量更大的保证;

(3)白盒测试发现问题后,解决问题的成本较低。

5)白盒测试的常用技术:

(1)静态分析:包括控制流分析、数据流分析、信息流分析

(2)动态分析:逻辑覆盖测试(分支测试、路径测试等)、程序插装等 ,逻辑覆盖测试根据覆盖的对象不同,可以分为:语句覆盖、判定(分支)覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖。 程序插装指调试程序时,在程序中插入一些打印语句,程序执行时打印出我们关心的信息,通过这些信息了解执行过程中程序的一些动态行为。

6)白盒测试的特点:

(1)测试人员需要了解软件的实现;

(2)可以检测代码中的每条分支和路径;

(3)揭示隐藏在代码中的错误;

(4)对代码的测试比较彻底;

(5)实现代码结构上的优化;

(6)投入较大,成本高;

(7)无法检测代码中遗漏的路径和数据敏感性错误; 

(8)不验证规格的正确性。

同时,我也为大家准备了一份软件测试视频教程(含面试、接口、自动化、性能测试等),就在下方,需要的可以直接去观看,也可以直接点击文末小卡片免费领取资料文档

软件测试视频教程观看处:

B站封神的接口测试教程,30天练完70个项目实战(含自动化测试、性能测试),学完即就业,永久白嫖!

2、黑盒测试

1)定义:把测试对象看成是一个黑盒,只考虑其整体特性,不考虑其内部具体实现过程。即已知产品的需求规格,但不知其内部实现,可以进行测试证明每个需求是否实现。

2)思想:基于规格的测试,测试类型都来源于质量模型。

3)测试对象:系统、子系统、模块、子模块、函数等。

4)常用的黑盒测试方法:等价类划分法、边界值分析法、因果图分析法、判定表法、状态迁移法等。

5)目的:减少测试时的测试用例数,用尽量少的测试用例完成测试,发现更多的问题。

6)黑盒测试的特点

(1)对于更大的代码单元来说(子系统甚至系统级)比白盒测试效率要高;

(2)测试人员不需要了解软件的实现细节,包括特定的编程语言;

(3)从用户的视角进行测试,很容易被理解和接受;

(4)有助于暴露任何规格不一致或有歧义的问题;

(5)没有清洗和简明的规格,测试用例很难设计;

(6)不能控制内部执行路径,会有很多内部程序路径没有被测试到;

(7)不能直接针对特定的程序段,这些程序可能非常复杂(因此可能隐藏更多的问题)

3、灰盒测试

利用被测对象的整体特性信息,采用黑盒测试方法;利用被测对象的内部具体实现信息,采用白盒测试方法;介于白盒和黑盒测试之间的测试方法测试方法称之为灰盒测试。

1)定义:如果即利用被测对象的整体特性信息,又利用被测对象的内部具体实现信息,采用得就是灰盒测试方法。两种信息占得比例不同,相应的灰度就不同。

2)适用对象:一般集成测试采用灰盒测试方法。

按照被测试的软件系统是否运行,将测试分为静态测试和动态测试。

1、静态测试

1)定义:不运行被测试的软件系统,而是采用其他手段和技术对被测试软件进行检测的一种测试技术,例如:代码走读、文档评审、程序分析等。

2)常用技术:静态分析技术。

(1)定义:静态分析是一种不通过执行程序而分析程序的技术。

(2)功能:检查软件的表示和描述是否一致,没有冲突或者没有歧义

(3)目的:纠正软件系统在描述、表示和规格上的错误,因此是任何进一步测试的前提。

(4)静态分析技术主要有3种不同的程序测试可能性

考虑程序是否满足编码规则,语法上是否具有一致性和完整性;
考虑文档描述是否规范、准确、便于查阅;
考虑程序和文档之间的一致性。

(5)静态分析技术有:控制流分析、数据流分析和信息流分析,下面一一介绍:

1、控制流分析

(控制流相关概念)

程序元素:一个程序元素通常是一个条件,一个简单的语句或者一块语句(多个连续语句)。
控制流关系:一个程序的控制流关系(Control Flow Relation)叙述了程序元素和他们执行的次序之间的关系。
控制流图:对应于控制流关系的图被称为控制流图。
控制流矩阵:有控制流图得到,反映相邻程序元素之间的先后顺序关系。
(控制流分析能发现的问题 )

通过对控制流信息进行分析,确保写出的程序不应包含:转向并不存在的标号;没用的语句标号;从程序入口进入后无法达到的语句;不能达到停机语句的语句。

2、数据流分析

(数据流相关概念 )

数据流分析最初是随着编译系统要生成有效的目标码而出现的,这类方法主要用于代码优化(代码优化主要包含:结构优化即可读性、时间效率和空间效率优化、可移植性优化)。数据流分析法关键是数据的引用和定义。 数据的定义:如果程序中某一语句执行时能改变某程序变量V的值,则称V是被该语句定义的。

数据的引用:如果程序中一语句的执行引用了内存中变量V的值,则称V是被该语句引用的。

(数据流分析步骤 )

根据代码得到数据流表
分析数据流表找到以下两种错误:变量未定义但被引用
变量定义但未被引用

2、动态测试

1)定义:按照预先设计的数据和步骤去运行被测软件系统,从而对被测试软件进行检测的一种测试技术。

2)特点:主要分析软件系统在模拟或是真实的环境中执行之前、之中、之后的动态行为。

3)常用技术:动态分析技术

(1)定义:对软件系统运行行为进行分析,包含程序在受控的环境下使用特定的输入进行正式的运行,和期望的结果比较以检查系统运行是正确还是不正确。

(2)常用动态分析技术:

路径测试
分支测试
性能测试

(3)常用动态分析工具及功能

测试覆盖率分析:用于测试对代码的检测范围;
跟踪:跟踪程序执行期间的所有路径
调整:度量程序执行过程中所有的资源
模拟:模拟系统的部分

3、所有测试方法都可以归类为手工测试和自动化测试

1、手工测试

1)定义:手工测试是传统的测试方法,由测试人员手工编写测试用例,执行,观察结果。

2)缺点:测试工作量大,重复多,回归测试难以实现

2、自动化测试

1)定义

自动化测试指利用软件测试工具自动实现全部或者部分测试工作:管理、设计、执行和报告,自动化测试节省大量的测试开销,并能够完成一些手工测试无法实现的测试。

2)自动化测试的意义

(1)对程序新版本运行前一版本执行的测试,提高回归测试效率

(2)可以运行更多更频繁的测试

(3)可以执行手工测试困难或不可能做到的测试,比如大量的重复操作或者集成测试

(4)更好的利用资源,比如测试仪器或者被测对象

(5)测试具有一致性和可重复性,及自动化测试的步骤和结果完全一样的测试的复用性,及自动化测试甲苯可以拆分开给其他测试脚本使用

(6)可以更快地将软件推向市场,软件发布前进行高效的回归测试,减少软件发布的时间

(7)增加软件的信任度,通过自动化测试提高了测试效率,可以吧节约的时间拿出来做更多的测试

3)自动化测试的限制

(1)不能取代手工测试,自动化测试只能提高测试效率,不能提高测试有效性,即不可能发现更多缺陷更多

(2)对测试设计依赖性极大,测试设计的不好会遗漏问题

(3)自动化测试对软件开发具有很大的依赖性,开发出现变更可能导致前面的自动化测试完全失效

(4)工具本身并不具备想象力,工具不具有智能

4)自动化测试的误区

(1)不现实的期望,希望自动化能取代手工测试

(2)缺乏测试实践经验,手工测试都做不好,或者经验积累不够,就尝试自动化,很难成功

(3)期望自动化测试发现大量新缺陷,自动化只能保证测试执行效率,确保已有的问题不会再发生,发现新缺陷不是其目的

(4)安全性错觉,认为进行了自动化测试的软件就是安全的、质量有保证的只有手工测试做好了,明确了测试的观察点,才能把自动化测试做好,所以手工测试是自动化测试的一个基础

总结

PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。

☑ 240集-零基础到精通全套视频课程
☑ [课件+源码]-完整配套的教程
☑ 18套-测试实战项目源码
☑ 37套-测试工具软件包
☑ 268道-真实面试题
☑ 200个模板-面试简历模板、测试方案模板、软件测试报告模板、测试分析模版、测试计划模板、性能测试报告、性能测试报告、性能测试脚本用例模板(信息完整)

这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。

 

更多推荐

网络安全(红客)自学

前言1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.一、什么是网络安全网络安全可以基于攻击和防御

【C++】内联函数 ④ ( C++ 编译优化 - 没有 inline 关键字修饰的函数也可能被内联 | C++ 编译器内联限制 | 内联失败的几种情况 )

文章目录一、C++编译优化-没有inline关键字修饰的函数也可能被内联1、函数内联的不确定性2、C++编译器的内联优化3、内联优化细节二、C++编译器内联限制1、内联失败的几种情况2、内联失败的本质分析一、C++编译优化-没有inline关键字修饰的函数也可能被内联1、函数内联的不确定性现在的C++编译器能够进行编译

6.3 应用动态内存补丁

动态内存补丁可以理解为在程序运行时动态地修改程序的内存,在某些时候某些应用程序会带壳运行,而此类程序的机器码只有在内存中被展开时才可以被修改,而想要修改此类应用程序动态补丁将是一个不错的选择,动态补丁的原理是通过CreateProcess函数传递CREATE_SUSPENDED将程序运行起来并暂停,此时程序会在内存中被

【LeetCode题目详解】第十章 单调栈part03 84.柱状图中最大的矩形(day60补)

本文章代码以c++为例!一、力扣第84题:柱状图中最大的矩形题目:给定n个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为1。求在该柱状图中,能够勾勒出来的矩形的最大面积。示例1:输入:heights=[2,1,5,6,2,3]输出:10解释:最大的矩形为图中红色区域,面积为10示例2:输入:hei

前端自定义导出PPT

1、背景前端导出PPT,刚接触这个需求,还是比较懵逼,然后就在网上查找资料,最终确认是可行的;这个需求也是合理的,我们做了一个可视化数据报表,报表导出成PPT,将在线报表转成文档类型留存;2、技术方案实现这种复杂的功能,都得依赖前辈匠人,还好有一个比较完善好用的库:pptxgenjs只有英文文档:QuickStartG

代码大全阅读随笔(七)

循环控制循环控制会出现什么样的错误,任何一种答案都可以归结到下面所说的问题之一:忽略或者错误的对循环执行初始化,忽略了对累加变量或者其他与循环有关变量执行初始化,不正确的嵌套,不正确的循环终止,忽略或者错误的增加了循环变量的值,以及用不正确的循环下标访问数组元素等等。要点:循环很复杂。保持循环简单将有助于别人阅读你的代

Linux下的buff/cache

目录一、buff/cache二、buff/cache与内存管理三、buff/cache对系统性能的影响四、优化buff/cache1、调整vm.dirty_ratio和vm.dirty_background_ratio2、配置vm.swappiness3、配置vm.vfs_cache_pressure五、释放buff/

5G相关信息

5G(第五代移动通信技术)是一种高级的通信技术,包括了多种算法和协议,用于实现高速、低延迟、可靠的无线通信。要实现5G算法,需要深入了解各种子系统和协议的工作原理,并根据需要编写相应的代码。以下是一些与5G相关的核心算法和技术,以及简要的描述:1.**OFDM(OrthogonalFrequencyDivisionMu

【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

文章目录一、Socket套接字简介1、Socket套接字概念2、Socket套接字类型3、Socket套接字使用步骤4、Socket套接字服务端与客户端二、Socket服务端与客户端开发1、服务端2、客户端3、执行结果一、Socket套接字简介1、Socket套接字概念Socket套接字是一种进程之间的通信机制,通过套

人工智能安全-2-非平衡数据处理(2)

5算法层面代价敏感:设置损失函数的权重,使得少数类判别错误的损失大于多数类判别错误的损失;单类分类器方法:仅对少数类进行训练,例如运用SVM算法;集成学习方法:即多个分类器,然后利用投票或者组合得到结果。6代价敏感算法6.1相关问题经典分类方法一般假设各个类别的错分代价是相同的,并且以全局错分率最低为优化目标。以入侵检

Observability:使用 OpenTelemetry 手动检测 Go 应用程序

作者:LucaWintergerstDevOps和SRE团队正在改变软件开发的流程。DevOps工程师专注于高效的软件应用程序和服务交付,而SRE团队是确保可靠性、可扩展性和性能的关键。这些团队必须依赖全栈可观察性解决方案,使他们能够管理和监控系统,并确保问题在影响业务之前得到解决。整个现代分布式应用程序堆栈的可观察性

热文推荐