【软件测试专栏】测试分类篇


  • 博客主页:Duck Bro 博客主页
  • 系列专栏:软件测试专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍

测试分类篇

关键词:测试方法的概念、测试类型、先后顺序

目录

  • 测试分类篇
    • 一、为什么需要分类?
    • 二、测试目标分类
      • [1. 界面测试](#1. 界面测试)
      • [2. 功能测试](#2. 功能测试)
      • [3. 性能测试](#3. 性能测试)
      • [4. 可靠性测试](#4. 可靠性测试)
      • [5. 安全性测试](#5. 安全性测试)
      • [6. 易用性测试](#6. 易用性测试)
    • 三、执行方式分类
      • [1. 静态测试](#1. 静态测试)
      • [2. 动态测试](#2. 动态测试)
    • 四、测试方法分类
      • [1. 白盒测试](#1. 白盒测试)
      • [2. 黑盒测试](#2. 黑盒测试)
      • [3. 灰盒测试](#3. 灰盒测试)
    • 五、测试阶段分类
      • [1. 单元测试](#1. 单元测试)
      • [2. 集成测试](#2. 集成测试)
      • [3. 系统测试](#3. 系统测试)
        • [3.1 冒烟测试](#3.1 冒烟测试)
        • [3.2 回归测试](#3.2 回归测试)
        • [3.3 冒烟和回归测试的区别](#3.3 冒烟和回归测试的区别)
      • [4. 验收测试(交付测试)](#4. 验收测试(交付测试))
    • 六、手工测试&自动化测试
      • [1. 手工测试](#1. 手工测试)
      • [2. 自动化测试](#2. 自动化测试)
    • 七、实施组织划分
      • [1. α测试](#1. α测试)
      • [2. β测试](#2. β测试)
      • [3. α测试与β测试的区别](#3. α测试与β测试的区别)
    • 八、测试地域划分
      • [1. 软件国际化](#1. 软件国际化)
      • [2. 国际化测试](#2. 国际化测试)
      • [3. 本地测试](#3. 本地测试)

一、为什么需要分类?

软件测试是软件⽣命周期中的⼀个重要环节,具有较⾼的复杂性,对于软件测试,可以从不同的⻆度

加以分类,使开发者在软件开发过程中的不同层次、不同阶段对测试工作进行更好的执行和管理测试

的分类方法

各分类如下:测试目标分类、执行方式分类、测试方法分类、测试阶段分类、手工测试&自动化测试、实施组织划分、测试地域划分


二、测试目标分类

1. 界面测试

界面测试(简称UI测试)是对软件或应用程序的界面进行测试的过程。这种测试确保用户界面的设计(⼀般是UI设计稿)和布局符合预期,功能按钮和菜单项的位置和功能正确,以及界面元素的交互和响应正常。

界面测试通常包括以下方面的测试:

  • 布局测试:确保界面元素的布局和对齐正常,没有错位或重叠的问题。
  • 样式测试:验证界面的颜色、字体、图标等样式是否符合设计规范。
  • 交互测试:测试各种按钮、链接和表单等界面元素的交互是否正常,并确保用户可以正确地使用它们。
  • 响应测试:测试界面对用户的操作是否能够正确地响应,并确保界面的响应时间在可接受的范围内。
  • 兼容性测试:测试界面在不同浏览器、操作系统和设备上的表现是否一致,并解决兼容性问题。
  • 多语言测试:如果软件支持多语言界面,还需测试不同语言环境下的界面翻译和显示是否正确。
    如何进行界面测试,通俗些就是"找不同",根据给定的设计图找出实现的页面有哪些界面问题

2. 功能测试

功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。

功能测试是一种软件测试方法,旨在验证软件的各个功能是否按照设计要求正常工作。 根据产品特性、操作描述和用户方案,测试⼀个产品的特性和可操作行为以确定它们满足设计需求。本地化软件的功能测试,用于验证应用程序或网站对⽬标用户能正确工作。使用适当的平台、浏览器和测试脚本,以保证⽬标用户的体验将足够好,就像应用程序是专⻔为该市场开发的⼀样。

功能测试是为了确保程序以期望的方式运行而按功能要求对软件进行的测试,通过对⼀个系统的所有的特性和功能都进行测试确保符合需求和规范

如何进行功能测试可以查看专栏文章 》》》软件测试 --- 用例篇

3. 性能测试

性能测试是一种测试应用程序、系统或网络的性能和稳定性的过程。它通常用来评估系统在不同负载条件下的响应时间、吞吐量、资源利用率和容量。

性能测试可以帮助发现系统中的瓶颈和性能问题,并为系统的优化提供数据和指导。常见的性能测试方法包括负载测试、压力测试、容量测试和稳定性测试。

性能测试通常使用专业的性能测试工具和技术,并结合测试目标和需求进行规划和实施。

4. 可靠性测试

可靠性(Availability)即可用性,是指系统正常运行的能力或者程度,⼀般用正常向用户提供软件服务 的时间占总时间的百分比表示。

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

系统非正常运行的时间可能是由于硬件,软件,网络故障或任何其他因素(如断电)造成的,这些因

素 能让系统停⽌工作,或者连接中断不能被访问,或者性能急剧降低导致不能使用软件现有的服务

等。

可用性指标⼀般要求达到4个或5个"9",即99.99%或者99.999%

如果可用性达到99.99%,对于⼀个全年不间断(7*24的方式)运行的系统,意味着全(252600min),不能正常工作的时间只有52min,不到⼀个小时。如果可用性达到99.999%,意味着全年不能正常工作的时间只有5min。

5. 安全性测试

安全性是指信息安全,是指计算机系统或网络保护用户数据隐私,完整,保护数据正常传输和抵御黑客,病毒攻击的能力。

系统常见的安全漏洞和威胁如下

  • 输入域,如输入恶性或者带有病毒的脚本或长字符串;
  • 代码中的安全性问题,如SQL/XML注入
  • 不安全的数据存储或者传递
  • 数据⽂件,邮件⽂件,系统配置⽂件等⾥面有危害系统的信息或者数据;
  • 有问题的访问控制,权限分配等
  • 假冒ID:身份欺骗
  • 篡改,对数据的恶意修改,破坏数据的完整性
    安全性测试的方法有代码评审,渗透测试,安全运维等,常用的静态安全测试工具有,Coverity,IBM Appscan Source,HPFortify,常用的动态安全测试有OWASP的ZAP,HP WebInspect等。其中静态安全测试是常用的安全性测试的方法

6. 易用性测试

易用性测试是一种评估软件、网站或其他技术产品的用户友好性和易用性的方法。它旨在确定用户在使用产品时是否能轻松地完成任务,以及他们对产品界面和功能的满意程度。

易用性包含七个要素:符合标准和规范,直观性,⼀致性,灵活性,舒适性,正确性和实用性。

标准性和规范性

对于现有的软件运行平台,通常其UI标准已经不知不觉地被确立了,成为⼤家的共识。多数用户已经习 惯并且接受了这些标准和规范,或者说已经认同了这些信息所代表的的含义。比如安装软件的界面的外观,

直观性

用户界面的直观性,要求软件功能特性易懂,清晰。用户界面布局合理,对操作的响应在用户的预期之中。

灵活性

软件可以有不同的选项以满足不同使用习惯的用户来完成相同的功能。但是灵活性的设计要把握好

度,不然可能由于太多的用户状态和方式的选择,增加了软件设计的复杂性,和程序实现的难度。 例如手机键盘有九宫格和全键盘,还⽀持手写,满足了不同用户的需求

舒适性

舒适性主要强调界面友好,美观,操作过程顺畅,⾊彩用运恰当,按钮的立体感等


三、执行方式分类

1. 静态测试

静态测试(static testing)是一种软件测试技术,通过对软件源代码、设计文档和其他可视化模型进行分析和检查,以发现潜在的问题和错误。

静态测试不涉及运行软件或执行测试用例,而是依赖于人工检查和工具支持来评估软件的质量和可靠性。

常见的静态测试方式有代码走查,代码扫描工具等。

2. 动态测试

动态测试(dynamic testing),指的是实际运行被测程序,输入相应的测试数据,检查实际输出结

果和预期结果是否相符的过程,所以判断⼀个测试属于动态测试还是静态的,唯⼀的标准就是看是否运行程序。

目前大部分软件测试工作都属于动态测试


四、测试方法分类

1. 白盒测试

白盒测试是一种软件测试方法,也被称为结构测试或透明测试。它的目的是检查和评估软件内部的结构、逻辑和代码,以揭示可能存在的错误和缺陷。

白盒测试通常由开发人员或测试团队执行,他们熟悉软件的内部工作原理和代码实现。这种测试方法通过检查程序的源代码、设计文档和程序执行路径,来验证软件是否按照设计规范和预期工作。

在白盒测试中,测试人员通常使用一系列的测试用例来覆盖软件的不同代码路径和逻辑分支。这些测试用例可涵盖语句覆盖、分支覆盖、路径覆盖等不同的覆盖准则。

白盒测试主要分为静态测试和动态测试两种。
静态测试常见于桌面检查、代码审查、代码走查、代码扫描工具
动态测试方法主要包含:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖

(这里不过多介绍,后面专门写一篇博客进行白盒测试介绍)

总结:

  • 白盒测试主要应用于单元测试阶段
  • 先执行静态设计用例的方法,再执行动态设计测试用例的方法
  • 设计用例⼀般使用路径测试,重点模块追加使用逻辑覆盖方法

2. 黑盒测试

黑盒测试就是在完全不考虑程序逻辑和内部结构的情况下,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当的接收输入数据而输出正确的结果,满足规范需求。

黑盒测试又称之为数据驱动测试,只注重软件的功能

优缺点

优点:

  • 不需要了解程序内部的代码以及实现,不关注软件内部的实现。
  • 从用户⻆度出发设计测试用例,很容易的知道用户会用到哪些功能,会遇到哪些问题,锻炼测试人员的产品思维
  • 测试用例是基于软件需求开发⽂档,不容易遗漏软件需求⽂档中需要测试的功能。

缺点:

  • 不可能覆盖所有代码。

3. 灰盒测试

灰盒测试,是介于白盒测试与黑盒测试之间的⼀种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。

但是,灰盒测试没有白盒测试详细和完整,黑盒测试是覆盖产品范围最⼴的测试,因此灰盒测试基本是不能够替代黑盒测试,否则需要很⼤的代价,设计非常多的用例。


五、测试阶段分类

1. 单元测试

与编码同步进行,针对软件最小组成单元进行测试,主要采用白盒测试方法,从被测对象的内部结构出发设计测试用例

  • 测试阶段:编码后或者编码前(TDD)
  • 测试对象:最小模块
  • 测试人员:白盒测试工程师或开发工程师
  • 测试依据:代码和注释+详细设计⽂档
  • 测试方法:白盒测试
  • 测试内容:模块接口测试、局部数据结构测试、路径测试、错误处理测试、边界测试

2. 集成测试

集成测试也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接

口 及集成后的功能进行正确性检测的测试工作。集成主要⽬的是检查软件单位之间的接口是否正确。

  • 测试阶段:⼀般单元测试之后进行
  • 测试对象:模块间的接口
  • 测试人员:白盒测试工程师或开发工程师
  • 测试依据:单元测试的模块+概要设计⽂档
  • 测试方法:黑盒测试与白盒测试相结合
  • 测试内容:模块之间数据传输、模块之间功能冲突、模块组装功能正确性、全局数据结构、单模块缺陷对系统的影响

3. 系统测试

对通过集成测试的系统进行整体测试,验证系统功能性和非功能性需求的实现。

  • 测试阶段:集成测试通过之后
  • 测试对象:整个系统(软、硬件)
  • 测试人员:黑盒测试工程师
  • 测试依据:需求规格说明⽂档
  • 测试方法:黑盒测试
  • 测试内容:功能、界面、可靠性、易用性、性能、兼容性、安全性等

回归测试和冒烟测试都属于系统测试。

3.1 冒烟测试

冒烟测试的对象是每⼀个新编译的需要正式测试的软件版本,⽬的是确认软件主要功能和核⼼流程正

常,在正式进行系统测试之前执行。冒烟测试⼀般在开发人员开发完毕后提交给测试人员来进行测试

时,先进行冒烟测试,保证基本功能正常,不阻碍后续的测试

如果冒烟测试通过,则测试人员开始进行正式的系统测试,如果不通过,则测试人员可以让开发人 员重新修复代码直到冒烟测试通过,再开始进行系统测试

3.2 回归测试

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产⽣错

误。在整个软件测试过程中占有很⼤的工作量比重,软件开发的各个阶段都会进行多次回归测试。随着系统的庞⼤,回归测试的成本越来越⼤,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。

回归测试主要由人工测试和⾃动化测试进行。

3.3 冒烟和回归测试的区别

冒烟测试(Smoke Testing):

◦ 阶段: 通常在软件开发的早期阶段进行,主要用于验证基本功能是否正常工作。

◦ ⽬的: 确保软件的主要功能能够基本运行,以便在后续的详细测试阶段发现更深层次的问题。

回归测试(Regression Testing):

◦ 阶段: 在软件开发的后期,通常在每次代码修改或新增功能后执行。

◦ ⽬的: 确保已有的功能仍然正常工作,并且新的更改没有引入新的错误。⽬的是防⽌已有功能因为代码修改而出现问题

虽然它们都属于系统测试,但冒烟测试注重最基本的功能,而回归测试关注全面的功能,包括已有功能和新添加的功能。这两种测试类型在测试策略中起到了不同的作用,帮助确保软件质量和稳定性。

4. 验收测试(交付测试)

针对用户需求,对通过系统测试的软件进行交付性测试,以确定系统是否满足验收标准,由用户

或其他授权机构决定是否接受系统。验收测试是部署软件之前的最后⼀个测试操作。它是技术测试的

最后⼀个阶段,也称为交付测试。验收测试的⽬的是确保软件准备就绪,按照项⽬合同、任务书、

双方约定的验收依据⽂档,向软件购买都展示该软件系统满足原始需求。

  • 测试阶段:系统测试通过之后
  • 测试对象:整个系统(包括软硬件)。
  • 测试人员:主要是最终用户或者需求方。
  • 测试依据:用户需求、验收标准
  • 测试方法:黑盒测试
  • 测试内容:同系统测试(功能...各类⽂档等)

六、手工测试&自动化测试

1. 手工测试

手工测试(Manual Testing),就是由人去⼀个⼀个的输入用例,然后观察结果,和机器测试相对应,属于比较原始但是必须的⼀个步骤。

优缺点

手工测试优点

  • 对测试人员技术要求没有⾃动化技术要求⾼

  • 可以进行发散性测试
    手工测试缺点

  • 效率低

  • 人员,时间成本比起⾃动化测试都比较⾼

2. 自动化测试

自动化测试(Automation Testing)是指使用软件工具或脚本来执行测试任务的一种测试方法。它可以自动化执行一系列测试步骤、输入和验证预期结果,节省了人工执行测试的时间和精力。自动化测试能够降低测试的成本,提高测试的效率和一致性,并且可以在短时间内执行大量的测试用例。

自动化测试可以应用于各种不同的软件测试阶段,包括单元测试、集成测试、系统测试和回归测试等。它可以用于测试不同的软件应用,包括Web应用、移动应用和桌面应用等。(后续会单独出一期关于自动化测试的内容,查看》》》软件测试专栏

优缺点

⾃动化测试优点

  • 节省成本

  • 提⾼测试人员执行工作效率

  • 保障软件的质量
    ⾃动化测试缺点

  • 对测试人员技术要求较⾼

  • 不能发散性测试


七、实施组织划分

1. α测试

α测试(Alpha Testing)又叫内测或者叫a测

α测试通常是公司内部的用户在模拟实际操作环境下进行的测试。α测试的⽬的是评价软件产品的FLURPS(即功能、可使用性、可靠性、性能和⽀持)。 α测试不能由程序员或测试员完成。

2. β测试

β测试(Beta Testing)又叫公测或者叫b测

β测试由软件的最终用户们在⼀个或多个场所进行,这⾥就可以理解为,β测试是正式用户中的⼀部分,他们在任意的场合来使用软件,⽬的是为了发现软件是否存在⼀系列的问题。β测试通常会发送⼀些邀请码,来邀请用户参与项⽬测试

3. α测试与β测试的区别

测试的场所不同:α测试是在公司内部进行测试的,但是β测试是在用户环境下进行测试的

α测试的环境是受开发方控制的,用户的数量相对比较少,时间比较集中。

β测试的环境是不受开发方控制的,用户数量相对比较多,时间不集中。
测试执行时机不同 :α测试先于β测试执行。通常是α测试通过后,在进行β测试
测试持续时间长短不同:α测试时间没有β测试持续时间长


八、测试地域划分

按照测试地域划分,⼀般会将测试划分为国际化测试本地测试

1. 软件国际化

这里以抖音和Tik Tok举例

抖音,是由字节跳动孵化的音乐创意短视频社交软件,上线于2016年9月,是一个面向全年龄的音乐短视频社区平台。

Tik Tok(抖音短视频国际版本)是字节跳动旗下一款短视频社交平台,属于抖音全球化战略的产物,于2017年5月上线。

测试人员需要测试软件在不同语⾔和地区是否能正常工作

2. 国际化测试

国际化测试是指针对软件、网站或应用程序进行的测试,以确认其在多个语言和文化环境下的正确性、适应性和可用性。通常包括以下方面:

  1. 语言测试:测试软件是否能正确显示和处理多种语言,包括各种语言字符和字体的支持等。
  2. 地区测试:测试软件是否能适应不同的地区和国家的文化差异,例如日期和时间格式、数字格式、货币符号等。
  3. 字符编码测试:测试软件是否能正确处理各种字符编码,如ASCII、Unicode等。
  4. 本地化测试:测试软件的界面和文本是否能够被翻译成不同的语言,并且保持正确的语法和语义。
  5. 健壮性测试:测试软件在各种特殊字符和语言环境下的容错能力,确保不会因为输入特殊字符或语言导致崩溃或错误。
  6. 国际化兼容性测试:测试软件是否能够兼容各种操作系统和硬件平台,以及不同的浏览器和设备。

3. 本地测试

本文上面几章都是本地测试


相关推荐
网络安全(king)5 分钟前
【Python】【持续项目】Python-安全项目搜集
开发语言·python·安全
工业甲酰苯胺6 分钟前
Python脚本消费多个Kafka topic
开发语言·python·kafka
Str_Null9 分钟前
Seatunnel运行时报错Caused by: java.lang.NoClassDefFoundError: com/mysql/cj/MysqlType
java·seatunnel
小鹿撞出了脑震荡12 分钟前
SQLite3语句以及用实现FMDB数据存储的学习
数据库·学习·sqlite
麻花201317 分钟前
C#之WPF的C1FlexGrid空间的行加载事件和列事件变更处理动态加载的枚举值
开发语言·c#·wpf
lcintj20 分钟前
【WPF】Prism学习(九)
学习·wpf·prism
麻花201323 分钟前
WPF里面的C1FlexGrid表格控件添加RadioButton单选
java·服务器·前端
_黎明29 分钟前
【Swift】字符串和字符
开发语言·ios·swift
理想不理想v37 分钟前
【经典】webpack和vite的区别?
java·前端·javascript·vue.js·面试