测试分类:详解各类测试方式与方法
前言:
为什么要将测试进行分类呢?
软件测试是软件生命周期中的⼀个重要环节,具有较高的复杂性,对于软件测试,可以从不同的角度加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试工作进行更好的执行和管理测试的分类方法。
按照测试目标进行分类
界面测试
肉眼所能看见的任何元素都要进行测试。
- 验证界⾯内容显示的完整性,⼀致性,准确性,友好性。⽐如界⾯内容对屏幕大小的自适应,换 行,内容是否全部清晰展示;
- 验证整个界⾯布局和排版是否合理,不同板块字体的设计,图⽚的展示是否符合需求;
- 对界⾯不同控件的测试,比如,对话框,⽂本框,滚动条,选项按钮等是否可以正常使用,有效 和无效的状态是否设计合理;
- 界面的布局和⾊调符合当下时事的发展。
功能测试
功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要 求的功能。
如何进行功能测试? 设计功能测试用例,参考产品规格说明书进行用例的编写,具体的测试用例需要使用黑盒设计测试用例的方法,如等价类、边界值、判定表法、正交法、场景法、错误猜测法等。
性能测试
我们在使用软件的时候有时会碰到软件网页打开时越来越慢,查询数据时很长时间才显示列表,软件运行越来越慢等问题,这些问题都是系统的性能问题引起的。
要进行软件产品的性能问题,要对产品的性能需求进行分析,然后基于系统的性能需求和系统架构, 完成性能测试的设计和执行,最后要进行持续的性能调优。
可靠性测试
可靠性(Availability)即可用性,是指系统正常运行的能力或者程度,一般用正常向用户提供软件 服务的时间占总时间的百分比表示。 可靠性=正常运行时间/(正常运行时间+非正常运行时间)*100%
系统⾮正常运⾏的时间可能是由于硬件,软件,网络故障或任何其他因素(如断电)造成的,这些因素能让系统停止⼯作,或者连接中断不能被访问,或者性能急剧降低导致不能使⽤软件现有的服务 等。
可用性指标⼀般要求达到4个或5个“9”,即99.99%或者99.999%,如果可用性达到99.99%,对于⼀个全年不间断(7*24的⽅式)运行的系统,意味着全年 (252600min)不能正常⼯作的时间只有52min,不到⼀个小时。如果可用性达到99.999%,意味着全年不能正常⼯作的时间只有5min。不同的应⽤系统,可用性的要求是不⼀样的,非实时性的信息系统或⼀般网站要求都很低,99%和 99.5%就可以了,但是军事系统,要求则很高;
安全性测试
安全性是指信息安全,是指计算机系统或网络保护用户数据隐私,完整,保护数据正常传输和抵御 黑客,病毒攻击的能力。
- 安全性测试属于非功能性测试很重要的⼀个方面,系统常见的安全漏洞和威胁如下
- 输⼊域,如输⼊恶性或者带有病毒的脚本或长字符串;
- 代码中的安全性问题,如SQL/XML注⼊
- 不安全的数据存储或者传递
- 数据文件,邮件文件,系统配置文件等⾥⾯有危害系统的信息或者数据;
- 有问题的访问控制,权限分配等
- 假冒ID:⾝份欺骗
- 篡改,对数据的恶意修改,破坏数据的完整性
安全性测试的方法有代码评审,渗透测试,安全运维等,常⽤的静态安全测试工具有,Coverity, IBM、Appscan、Source,HPFortify,常用的动态安全测试有OWASP的ZAP,HP、WebInspect等。其 中静态安全测试是常用的安全性测试的方法。
易用性测试
许多产品都应用人体工程学的研究成果,是产品在使用起来更加灵活和,舒适。软件产品也始终关注用户体验,让用户获得舒适,易⽤的体验,针对软件这方面的测试称之为易用性测试。
易⽤性在ISO25020标准中指容易发现,容易学习和容易使⽤。易⽤性包含七个要素:符合标准和规范,直观性,⼀致性,灵活性,舒适性,正确性和实⽤性。我们主要讨论以下几个方面
1.标准性和规范性
对于现有的软件运⾏平台,通常其UI标准已经不知不觉地被确⽴了,成为⼤家的共识。多数用户已 经习惯并且接受了这些标准和规范,或者说已经认同了这些信息所代表的的含义。⽐如安装软件的 界⾯的外观,在什么场合使⽤恰当的对话框等。
所以用户界⾯上的各中信息应该符合规范和习惯,否则用户使⽤起来会不舒适,并得不到⽤⼾的认 可。测试⼈员需要把与标准规范,习惯不⼀致的问题报告为缺陷
举个例子:八宝粥都是罐装的,你一下整个盒装的,用户已经潜移默化的适应了罐装的,这时候就容易出现用户反馈。
2.直观性
用户界面的直观性,要求软件功能特性易懂,清晰。用户界⾯布局合理,对操作的响应在用户的预期 之中。比如数据统计结果⽤报表的形式(条形图,扇形图等)展⽰清晰直观;现在主流的很多搜索引 擎和日历的设计也有直观性的特点;
3.灵活性
软件可以有不同的选项以满⾜不同使⽤习惯的⽤⼾来完成相同的功能。但是灵活性的设计要把握好 度,不然可能由于太多的⽤⼾状态和⽅式的选择,增加了软件设计的复杂性,和程序实现的难度。
例如 ⼿机键盘有九宫格和全键盘,还⽀持⼿写,满⾜了不同⽤⼾的需求
4.舒适性
舒适性主要强调界⾯友好,美观,操作过程顺畅,⾊彩⽤运恰当,按钮的⽴体感等。例如左⼿⿏标的 设置给习惯⽤左⼿的⼈带来了便利,也为右⼿⼗分劳累时提供了另⼀种途径; 舒适性主要强调界⾯友好,美观,操作过程顺畅,⾊彩⽤运恰当,按钮的⽴体感等。例如左⼿⿏标的 设 置给习惯⽤左⼿的⼈带来了便利,也为右⼿⼗分劳累时提供了另⼀种途径;
按照执行方式进行分类
静态测试
静态测试 就是不运行程序,而是通过检查代码、设计文档或者其他软件结构来找出潜在的问题。就像你在做作业之前,先认真读一遍题目,确保每个细节都没错。这种方式的好处是你不用实际运行程序,就能找到一些明显的错误。
动态测试
动态测试 则是实际运行程序,输入数据,查看输出结果是否符合预期。这就像你完成了作业后,直接去考试,看看自己在实际情境下表现得如何。动态测试是大多数软件测试的主要方式。
按照测试方法进行测试
白盒测试
白盒测试也称为结构测试或逻辑测试,主要关注程序内部结构,通过分析程序的逻辑路径来设计测试用例。它的目的是确保软件的各个逻辑路径被覆盖,程序能够按照预期运行。
常见的白盒测试方法:
语句覆盖:确保程序中的每个语句至少被执行一次。
判定覆盖:测试程序中的条件判断语句,确保每个条件都得到了测试。
路径覆盖:确保程序的每条执行路径都被测试。
条件组合覆盖
条件覆盖
总结
- ⽩盒测试主要应⽤于单元测试阶段
- 先执⾏静态设计⽤例的⽅法,再执⾏动态设计测试⽤例的⽅法
- 设计⽤例⼀般使⽤路径测试,重点模块追加使⽤逻辑覆盖⽅法
黑盒测试
黑盒测试与白盒测试不同,它不关注程序的内部实现,而是关注软件的功能是否满足需求。黑盒测试的重点是验证软件的输入和输出是否符合预期,确保软件能够按照需求正常工作。
常见的黑盒测试方法:
等价类划分:通过将输入数据分为多个等价类来减少测试数据的数量。
边界值分析:特别关注输入数据的边界值,比如最大值、最小值、越界值等。
因果图法:根据需求规格定义输入和输出之间的关系,设计测试用例。
举个例子:假设你有一个登陆表单,黑盒测试时,你会测试以下几种情况:
输入正确的用户名和密码,检查是否能够成功登陆。
输入错误的用户名或密码,检查是否会给出错误提示。
灰盒测试
灰盒测试是介于白盒测试和黑盒测试之间的一种方法。它通常用于集成测试阶段,不仅关注输出和输入的正确性,还会检查程序的内部情况。灰盒测试可以基于部分内部实现进行设计,但不需要完全了解程序的内部结构。
举个例子:你正在测试一个电商平台的购物车功能,灰盒测试人员知道购物车和支付模块如何交互,但不需要完全了解支付模块的内部实现。测试的重点是确保数据能够正确从购物车模块流向支付模块。
按照测试阶段进行分类
单元测试
与编码同步进⾏,针对软件最⼩组成单元进⾏测试,主要采⽤⽩盒测试⽅法,从被测对象的内部结构出发设计测试⽤例
所谓的最小单元就是人为规定的方法、接口、功能。
- 测试阶段:编码后或者编码前(TDD)
- 测试对象:最小模块
- 测试⼈员:白盒测试⼯程师或开发⼯程师
- 测试依据:代码和注释+详细设计⽂档
- 测试⽅法:⽩盒测试
- 测试内容:模块接⼝测试、局部数据结构测试、路径测试、错误处理测试、边界测
集成测试
集成测试也称联合测试(联调)、组装测试,将程序模块采⽤适当的集成策略组装起来,对系统的接⼝及集成后的功能进⾏正确性检测的测试⼯作。集成主要⽬的是检查软件单位之间的接是否正确。
- 测试阶段:⼀般单元测试之后进⾏
- 测试对象:模块间的接⼝
- 测试⼈员:⽩盒测试⼯程师或开发⼯程师
- 测试依据:单元测试的模块+概要设计⽂档
- 测试⽅法:⿊盒测试与⽩盒测试相结合
- 测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模缺陷对系统的影响
系统测试
在软件开发生命周期中,系统测试是确保软件系统整体功能和性能达到预期要求的关键环节。它不仅验证了软件各个模块的正确性,还确保不同模块之间的协作无缝进行,从而提升了软件的可靠性和稳定性。
系统测试的目标
全面检查功能:系统测试的首要目标是验证软件是否按照需求文档所描述的功能执行。
验证集成模块的协同工作:系统测试会检查所有子系统或模块是否能够顺利协作,确保系统在集成后的运行效果。
性能与安全性验证:除了基本功能外,系统测试还包括对性能的测试(如负载测试、压力测试)以及安全性的检测。
系统测试的分类
系统测试通常分为几类不同的测试方式:
冒烟测试(Smoke Testing)
定义:冒烟测试又称为基本功能测试,通常在开发过程中或新版本发布时进行,目的是验证软件是否能够顺利启动并且执行最基本的操作。
目的:通过冒烟测试,开发团队能够迅速发现显而易见的重大问题。
实施方式:通常由开发人员进行,测试的重点是是否能顺利打开系统,执行一些基本的功能。
回归测试(Regression Testing)
定义:回归测试用于确认新代码的变更没有破坏现有功能。
目的:保证代码的修改没有引入新的问题,确保软件的稳定性。
实施方式:每当系统更新时,回归测试会重新测试相关功能,确保系统在更新后依旧能够正常工作。
验收测试
针对⽤⼾需求,对通过系统测试的软件进⾏交付性测试,以确定系统是否满⾜验收标准,由⽤⼾或其他授权机构决定是否接受系统。验收测试是部署软件之前的最后⼀个测试操作。它是技术测试的最后⼀个阶段,也称为交付测试。验收测试的⽬的是确保软件准备就绪,按照项⽬合同、任务书、双⽅约定的验收依据⽂档,向软件购买都展⽰该软件系统满⾜原始需求。
- 测试阶段:系统测试通过之后
- 测试对象:整个系统(包括软硬件)。
- 测试⼈员:主要是最终⽤⼾或者需求⽅。
- 测试依据:⽤⼾需求、验收标准
- 测试⽅法:⿊盒测试
- 测试内容:同系统测试(功能...各类⽂档等)
单元测试,集成测试,系统测试,回归测试之间的关系
类比开上小汽车的过程
造⻋需要原材料,如⻋轮、发动机等零部件不是⻋企⾃⼰制造出来的,⽽是通过购买零部件来造⻋。对买来的零部件进⾏检查,零部件是否符合造⻋标准(单元测试)
零件确认完毕,接下来就是复杂的造⻋⼯艺,将零部件集成起来构成了⼀辆⻋,并初步检查拼⻋的⻋是否能正常运作(集成测试)
⼀辆⻋成型之后并不意味着就可以直接销售给客⼾了,需要⻋企专业的测试⼈员进⾏详细⽽完整的测试。(系统测试)
专业的测试⼈员对企业测试完毕,通过测试的汽⻋将会在⻋展或者4S店进⾏展⽰,供⽤⼾进⾏选择和购买。⽤⼾在选择汽⻋的过程中也会对⻋外观以及性能等⽅⾯进⾏校验(验收测试)
按照是否手工测试
手工测试
⼿⼯测试就是由⼈去⼀个⼀个的输⼊⽤例,然后观察结果,和机器测试相对应,属于⽐较原始但是必须的⼀个步骤。
自动化测试
就是在预设条件下运⾏系统或应⽤程序,评估运⾏结果,预先条件应包括正常条件和异常条件。简单说
⾃动化测试是把以⼈为驱动的测试⾏为转化为机器执⾏的⼀种过程。
⾃动化测试⽐如功能测试⾃动化、性能测试⾃动化、安全测试⾃动化。
⾃动化测试按照测试对象来分,还可以分为接
测试、UI测试等。接⼝测试的ROI(产出投⼊⽐)要⽐UI测试⾼。(这⾥了解⼀下,等到将⾃动化的时候再详细展开)
测试类型 | 优点 | 缺点 |
---|---|---|
自动化测试 | - 节省成本 - 提高测试人员执行工作效率 - 保障软件的质量 | - 对测试人员技术要求较高 - 不能进行发散性测试 |
手工测试 | - 对测试人员技术要求较低 - 可以进行发散性测试 | - 效率低 - 人员和时间成本较高,相比自动化测试更为昂贵 |
按照实施组织划分
α测试
β测试
测试类型 | Alpha测试 | Beta测试 |
---|---|---|
实施地点 | 在公司内部进行 | 在用户环境中进行 |
测试人员 | 内部开发团队或QA团队 | 真实用户或外部参与者 |
测试阶段 | 软件开发的初期阶段 | 接近产品发布时进行 |
测试目标 | 检查核心功能和性能 | 收集用户反馈,检查软件是否满足用户需求 |
测试规模 | 小规模、内部测试 | 大规模、面向真实用户 |
技术要求 | 对测试人员的技术要求较高 | 测试人员的技术要求较低,主要关注用户体验 |