软件测试之测试的分类(重点:黑盒测试、白盒测试、单元测试、集成测试、系统测试)

简介: 1. 按照测试对象进行划分1)界面测试2)可靠性测试3)容错性测试4)文档测试5)兼容性测试6)易用性测试7)软件安装卸载的测试8)安全测试9)性能测试10)内存泄漏测试2. 按照是否查看代码划分1)黑盒测试2)白盒测试3)灰盒测试3. 按照开发阶段划分1)单元测试(结合 V 模型)2)集成测试3)系统测试4)验收测试5)将上面四种测试方法同 V 模型的阶段进行对应4. 按照测试实施组织划分1)α 测试2)β 测试3)第三方测试5. 按照是否运行进行划分1)静态测试2)动态测试6. 按照是否手工划分1)手工测试2)自动化测试

1. 按照测试对象进行划分

1)界面测试

界面是直接和用户进行交互的,界面设计的好坏决定了用户使用软件的直观感受


界面测试(UI 测试)一般包括以下内容:


对比 UI 设计稿,验证系统显示界面的一致性和正确性

验证界面上每个功能的正确性

验证界面排版布局是否合理。字体大小、图片排版、清晰程度等

验证界面控件的功能是否正常。滚动条、按钮、文本框等

对不同分辨率下的界面进行测试

保证页面从大变小(或从小变大)的变化过程是丝滑顺畅、不卡顿的

保证页面的字体不模糊、不重影、不消失

保证页面中的图片不消失、排版布局合理

保证页面的功能正常使用

2)可靠性测试

可靠性 是指系统正常运行的能力或者程度,一般用百分比表示


可靠性 = 正常运行时间 / (正常运行时间 + 非正常运行时间)


影响软件可靠性的因素:


软件本身

外界因素,包括电、网络、硬件设备等

3)容错性测试

容错性 是指因为自身或者外部一些异常的操作使得系统发生异常,系统能够自我处理异常或者错误的能力


容错性测试包含以下几个方面:


用户输入异常数据时,系统会不会给出提示,或者系统内部是否做一些处理


在用户做出一些复杂操作或者可能危害数据安全的操作时,会不会给出提示信息


断电、断网或者硬件设备出问题了,是否可以无缝切换到备用服务器


灾难恢复性测试


人为使服务器发生故障,测试软件系统的环境恢复能力、系统数据恢复能力、以及恢复的时间


4)文档测试

对整个开发过程中产生的各种文档,需求文档、设计文档、功能文档、用户使用手册进行测试,验证文档的正确性、一致性和完整性


5)兼容性测试

平台的兼容: 验证系统对不同浏览器、操作系统、不同品牌手机或者电脑的兼容性

软件本身的兼容: 验证软件新功能对旧功能的兼容性,新开发的功能不能影响旧功能的使用

软件对用户数据的兼容性: 比如数据库中的一张表新增加一个字段,不能影响用户之前数据的存储

软件对第三方软件的兼容性: 在与第三方软件有功能或者数据交互时,不能影响第三方软件的使用

6)易用性测试

易用性测试 是指验证用户在使用软件过程中的是否灵活舒适、简单易用


易用性测试一般包括以下几点:


符合标准和规范


对于现在的软件,其 UI 设计的标准已经慢慢被确立,多数用户已经习惯了这种标准和规范。比如,软件发生严重错误时给出提示时图片或者字体的颜色


直观性


要求界面布局合理,软件功能操作简单、清晰易懂


灵活性


用户可以根据自己的习惯选择适合自己的操作方式


比如,手机上的键盘可以切换九宫格、全键盘、手写和五笔输入


舒适性


让用户对自己的操作有感知,不产生焦虑情绪


安装或者下载软件时,添加上进度条


7)软件安装卸载的测试

主要的测试点有以下几点:


是否可以使用不同方式正常安装和卸载软件

安装或者卸载时是否可以手动暂停或者取消

安装空间不足时,是否给出提示

卸载中途,取消卸载,软件是否可以正常使用

卸载或者安装过程中的异常测试(如:断网、断电、死机等)

卸载完成之后,软件的数据文件信息是否清理干净

8)安全测试

安全性 是指信息安全,指网络和系统保护用户的数据和隐私不被侵犯和泄露


防病毒、防黑客、防 XSS 注入、防 SQL 注入、防爬虫


9)性能测试

在使用软件时,有时会碰到网页打开时越来越慢,查询数据时很长时间才显示列表,这些都是系统的性能问题引起的


常见的性能问题如下:


资源泄露

资源瓶颈

线程死锁,线程阻塞

查询速度慢或效率低

衡量一个系统性能好坏的关键性指标有,用户操作的响应时间、吞吐量、内存和 CPU 的使用率


10)内存泄漏测试

内存泄漏会使软件运行越来越慢,最终停止响应


常见的导致内存泄露的原因:


内存分配后,没有回收

程序的写法有问题,无法回收(比如死循环造成无法执行到回收步骤)

API 函数的使用不正确,无法回收


2. 按照是否查看代码划分

1)黑盒测试

黑盒测试 就是完全不关心软件内部代码的实现和逻辑结构,只关心系统的输入输出是否符合预期,功能是否符合需求说明书的规定


黑盒测试的优点:


不需要了解代码的内部结构,代码能力差的人员也可以进行测试

站在用户的角度对系统功能进行测试,有利于培养测试人员的用户思维

测试用例是按照需求说明书设计的,不容易遗漏需求

黑盒测试的缺点: 由于黑盒测试不关心系统内部代码的实现,导致代码得不到测试


黑盒测试的测试方法:


等价类法、边界值法、错误猜测发、因果图法、场景法、正交法


2)白盒测试

白盒测试 就是针对代码进行测试,根据代码的逻辑结构设计测试用例,验证代码的实际运行状态是否符合预期状态


白盒测试的测试方法:


语句覆盖:


设计足够的测试用例,使得程序中的 每条语句都被至少执行一次


判定覆盖:


设计足够的测试用例,使得程序中 每个判定语句的每个分支都被至少执行一次。


如: if else 语句中 if 条件为真、为假都要被测试;switch case 语句中每个 case 都要被测试


条件覆盖:


设计足够的测试用例,使得判定语句中 每个逻辑条件为真和为假都至少出现一次


如: if (a > 0 && b < 0) 中,要确保 a > 0、b < 0 两个逻辑条件分别为真和为假的情况都至少出现一次


判定 – 条件覆盖:


设计足够的测试用例,使得判定语句中 每个逻辑条件为真为假都至少出现一次,同时 判定语句的所有可能结果也至少出现一次


如: if (a > 0 && b < 0) 中,要确保 a > 0、b < 0 两个逻辑条件分别为真和为假的情况都至少出现一次,同时 if (a > 0 && b < 0) 判定语句为真和为假的情况也至少出现一次


条件组合覆盖:


设计足够的测试用例,使得判定语句中 逻辑条件结果的所有可能组合至少出现一次


如: if (A && B) 中,存在两个条件 A 和 B,则条件组合覆盖要求测试用例包含以下几种情况:


A 为真,B 为真

A 为真,B 为假

A 为假,B 为真

A 为假,B 为假

路径覆盖:


设计足够的测试用例,使得程序中 每一条可能走过的路径都至少执行一次


3)灰盒测试

介于黑盒测试和白盒测试之间的一种测试,多用于集成测试阶段,不仅关注程序的输入和输出,同时也关注程序内部的情况


3. 按照开发阶段划分

测试金字塔: 越往下测试效率越高,定位问题越容易


87.png

87.png


1)单元测试(结合 V 模型)

单元测试 是对软件组成的最小单元 —— 模块进行测试,验证软件基本组成模块的正确性


测试阶段: 编码后或者编码前(TDD)


TDD:测试驱动开发,在开发人员编写功能代码之前,先设计好测试用例的代码,然后根据测试用例的代码编写功能代码,最终目的是让开发前设计的测试用例全部都能执行通过


测试对象: 软件的各个模块


测试方法: 白盒测试


测试人员: 白盒测试工程师或者开发人员


测试依据: 详细设计文档


测试内容: 模块的接口、边界测试、异常测试、路径测试、局部数据结构的测试


Java 中使用 Junit 框架进行单元测试


2)集成测试

按照一定的策略把单元模块组合起来形成一个大的功能模块,对这个大的功能模块进行测试


测试阶段: 单元测试之后


测试对象: 集成的大模块


测试方法: 灰盒测试


测试依据: 概要设计文档


测试人员: 白盒测试人员或者开发人员


测试内容: 整个模块功能的正确性、单元模块之间接口的正确性、单个模块的缺陷对整个模块功能的影响、模块之间功能的冲突、全局数据结构的测试


3)系统测试

对整个软件系统的功能、性能以及软件运行的软硬件环境进行全面测试


测试阶段: 集成测试通过之后


测试对象: 整个软件系统


测试方法: 黑盒测试


测试人员: 黑盒测试人员


测试依据: 需求规格说明文档


测试内容: 功能、界面、兼容性、安全性、性能、可靠性、易用性、容错性


系统测试中还包含有回归测试和冒烟测试:


回归测试: 当系统引入新的代码或者修改了旧代码之后,重新进行测试以确保系统各项功能正常使用


回归测试一般采用自动化测试


冒烟测试: 正式测试之前,会对系统的基本流程和核心功能进行测试,测试通过之后,才会开始正式测试


4)验收测试

软件上线前的最后一道测试,由用户或者产品交付方依据用户需求进行测试


测试阶段: 系统测试之后


测试对象: 整个系统


测试人员: 用户或者产品交付方


测试依据: 用户需求


测试方法: 黑盒测试


测试内容: 同系统测试


5)将上面四种测试方法同 V 模型的阶段进行对应


88.png

4. 按照测试实施组织划分

1)α 测试

α 测试 是指让用户或 除了开发人员和测试人员之外 的公司内部人员到开发现场去进行测试


2)β 测试

β 测试 是指 实际用户在实际使用环境下 进行测试,不限时间、不限地点


比如:某些游戏在正式上线之前会开启测试服,并邀请一部分玩家进行测试


α 测试和 β 测试的区别:


α 测试在 β 测试之前

两者的测试环境不同,α 测试是在开发环境下,β 测试是在实际用户使用环境下

相较于 α 测试,β 测试的规模较大,测试周期也比较长

3)第三方测试

由第三方软件测试机构 按照业内的标准和规范 对软件进行测试


5. 按照是否运行进行划分

1)静态测试

不运行代码,静态的检查代码中可能出现错误的地方,分析代码的逻辑结构和具体的方法实现是否满足需求


2)动态测试

运行代码,执行测试用例进行测试


6. 按照是否手工划分

1)手工测试

手工的一个一个的执行测试用例,查看测试结果


优点: 有利于做探索性测试,无法被自动化测试替代


缺点: 用例很多时容易出错,效率也比较低


2)自动化测试

机器按照事先设定好的条件去执行测试,这些条件包括正常的和异常的


自动化测试按照测试对象还可分为:UI 自动化、接口自动化、性能自动化


自动化的价值和意义: 节省人力,自动化脚本运用率越高,越有价值


不是所有项目都适合自动化测试


自动化测试不适合于项目不稳定,功能频繁变动的功能,一般多用于回归测试和冒烟测试


7. 按照地域划分

按照地域划分可以划分为:本地化测试 和 国际化测试


软件的国际化: 开发软件时使用的一种工程技术,使得软件在适用不同国家的语言、风俗以及使用习惯的时候不用更改软件的源码就可以做到


软件的国际化和本地化是面向全球不同地区用户使用的软件系统的两个过程,而本地化测试和国际化测试则是针对这类软件产品进行的测试


目录
相关文章
|
1天前
|
Java 测试技术 开发者
在软件开发中,测试至关重要,尤以单元测试和集成测试为然
在软件开发中,测试至关重要,尤以单元测试和集成测试为然。单元测试聚焦于Java中的类或方法等最小单元,确保其独立功能正确无误,及早发现问题。集成测试则着眼于模块间的交互,验证整体协作效能。为实现高效测试,需编写可测性强的代码,并选用JUnit等合适框架。同时,合理规划测试场景与利用Spring等工具也必不可少。遵循最佳实践,可提升测试质量,保障Java应用稳健前行。
6 1
|
7天前
|
测试技术
探索软件测试的奥秘:如何构建有效的测试策略
在软件开发的海洋中,测试是确保航船不沉没的灯塔。本文将带你领略测试的魅力,从基础概念到高级策略,我们将一起航行在软件测试的广阔海域,探寻那些隐藏在代码深处的秘密。准备好了吗?让我们启航吧!
20 1
|
13天前
|
jenkins 测试技术 持续交付
探索软件测试的新天地:自动化与持续集成的融合
【8月更文挑战第6天】在这篇文章中,我们深入探讨了软件测试领域内两大趋势——自动化测试和持续集成——如何相互融合,共同推动软件开发过程的效率和质量。文章将通过实际案例分析,展示这一融合对现代软件开发实践的影响,并讨论其对测试人员角色的深远意义。
33 9
|
13天前
|
敏捷开发 测试技术 持续交付
软件测试中的探索性测试方法及其重要性
【8月更文挑战第6天】在软件开发周期中,测试环节是不可或缺的。它确保了产品的质量、性能与可靠性。然而,传统的测试方法往往侧重于预设的测试用例和场景,可能忽略了用户实际使用过程中的非预期行为。探索性测试(ET)应运而生,它强调测试人员的自主性和创造性,通过不断学习和适应来发现软件的潜在缺陷。本文将探讨探索性测试的概念、实施策略及其在现代软件开发中的重要性。
|
14天前
|
测试技术
软件测试中的心理学:如何优化测试流程
【8月更文挑战第6天】本文深入探讨了软件测试过程中的心理学因素,揭示了测试人员的心理动态对测试效率和质量的影响。通过分析测试人员的压力源、动机以及团队间的沟通问题,提出了一系列改善策略,如建立积极的反馈机制、提供持续的职业培训和优化工作环境等,旨在提升软件测试的整体效能。文章最后提出一个开放性问题,邀请读者思考如何在不断变化的技术环境中维持测试团队的心理健康和动力。
|
14天前
|
敏捷开发 搜索推荐 测试技术
探索式测试:软件测试的灵活之道
在软件发展的快速迭代中,传统的测试方法往往显得笨重且效率低下。探索式测试(Exploratory Testing)作为一种敏捷的测试实践,强调测试人员的个人技能与经验,提倡在测试过程中即兴发挥,以更加高效地发现软件缺陷。本文将深入探讨探索式测试的核心理念、实施步骤及其在实际项目中的有效应用,为读者提供一种全新的视角来审视和改进软件测试流程。
|
16天前
|
敏捷开发 测试技术
软件测试的艺术与科学:探索高效测试策略
在数字化时代,软件成为我们日常生活和工作的核心。然而,高质量的软件并非偶然产物,而是经过精心设计和系统测试的结果。本文将深入探讨如何通过艺术性与科学性的结合,制定出高效的软件测试策略。我们将一起走进测试的世界,了解不同类型的测试方法,探索它们在实际项目中的应用场景,并分析如何根据项目需求和资源选择最合适的测试类型。此外,我们还将讨论自动化测试的趋势,以及它如何改变传统的测试流程。让我们一起揭开高效软件测试的神秘面纱,提升测试效率,保障软件质量。
|
16天前
|
Java 测试技术 开发者
探索软件测试的多维度:从单元到系统,再到性能测试
本文深入探讨了软件测试的多个关键维度,包括单元测试、集成测试、系统测试以及性能测试。通过分析每个阶段的目标和方法,本文旨在帮助读者理解如何构建一个全面的测试策略,确保软件产品的质量与性能。我们将通过具体案例和数据来揭示不同测试阶段的重要性及其在软件开发生命周期中的作用。
37 0
|
8天前
|
IDE 测试技术 持续交付
Python自动化测试与单元测试框架:提升代码质量与效率
随着软件行业的发展,代码质量和效率变得至关重要。自动化测试与单元测试是保证质量、提升效率的关键。Python凭借其简洁强大及丰富的测试框架(如Selenium、Appium、pytest和unittest等),成为了实施自动化测试的理想选择。本文将深入探讨这些框架的应用,帮助读者掌握编写高质量测试用例的方法,并通过持续集成等策略提升开发流程的效率与质量。
27 4
|
26天前
|
测试技术 微服务
单元测试策略问题之单元测试和集成测试之间的分工是什么
单元测试策略问题之单元测试和集成测试之间的分工是什么