软件测试理论02—测试流程体系
软件测试基础概念。
软件测试
- 通过手工或者工具对"被测对象"进行测试。
- 验证实际结果与预期结果之间是否存在差异。
软件测试作用
- 通过测试工作可以发现并修复软件当中存在的缺陷,从而提高用户对产品的使用信心。
- 测试可以降低同类型产品开发遇到问题的风险。
软件缺陷
- 软件缺陷被测试工程师和开发工程师们称作bug。
- 软件缺陷会导致软件不能正常运行,它的存在会在一定程度上导致软件不能满足用户的需求,甚至有可能破坏或泄漏用户的重要数据。
软件测试原则
- 测试显示缺陷的存在(
Testing shows presence of defects
) - 穷尽测试是不可能的(
Exhaustive testing is impossible
) - 测试尽早介入(
Testing Early
) - 缺陷集群性(2/8原则)(
Defect Clustering
) - 杀虫剂悖论(
Pesticide Paradox
) - 测试活动依赖于测试内容(
Testing is context dependent
) - 没有错误是好是谬论(
Absence of error - Fallacy
)、
软件测试对象
- 需求分析阶段:需求文档、接口文档。
- 编码实现阶段:源代码。
- 系统功能使用:系统程序。
测试用例
- 为特定的目的而设计的一组测试输入、执行步骤和预期的结果,以便测试产品否满足某个特定需求的文档。
软件测试模型:
V 模型
- V 模型是瀑布模型的一种改进。
- V 模型标明了测试过程中的不同阶段。
V模型就像建房子:先画蓝图(需求),再搭骨架(设计),然后砌砖(编码),最后层层检查(测试),确保房子结实又合用;但它不够灵活,一旦设计定稿,改动起来代价大,适合需求明确的项目。
阶段任务
- 需求分析:搞清楚用户要什么。
- 概要设计:规划系统的大框架。
- 详细设计:设计每个部分的细节。
- 编码:动手写代码。
- 单元测试:检查每个小部分是否正常。
- 集成测试:检查所有部分合起来是否正常。
- 系统测试:检查整个软件是否满足要求。
- 验收测试:用户亲自检查是否满意。
优缺点:
- 优点:测试覆盖全面,开发过程清晰。
- 缺点:测试在开发后,问题难改;需求变更成本高。
W 模型
- W 模型明确表示出了测试与开发的并行关系。
- W 模型中测试伴随着整个软件开发周期,并且测试的对象不仅仅是程序,需求和设计同样要测试。
- 优点
- 将测试贯穿到整个软件的生命周期中,且除了代码要测试,需求、设计等都要测试。
- 更早的介人到软件开发中,能尽早的发现缺陷进行修复。
- 测试与开发独立起来,并与开发并行。
- 缺点
- 无法支持迭代的开发模型。
- 对有些项目,开发过程中根本没有文档产生,故 W 模型无法使用。
- 对于需求和设计的测试技术要求很高,实践起来很困难。
H 模型。
H 模型是一种将测试活动完全独立出来的模型,形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。 H 模型相对于 V 模型和 W 模型,更加注重测试的灵活性和独立性。
- 软件开发中需求、设计、编码等活动被分阶段执行、但是实践中,他们并不是完全串行的,它们之间更多时候是交叉进行的,更多的是迭代执行。
- 把测试活动完全独立出来,形成一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。
- 测试在该模式下主要完成三部分工作:测试前期的准备、测试就绪点的预判、测试执行。
- 测试人员需要根据实际项目的特点,及时判断当下测试执行的条件是否满足,然后尽早地投入测试工作中。
H 模型的优缺点
- 优点:
- 软件测试完全独立,贯穿整个生命周期,且与其他流程并发进行。
- 软件测试活动可以尽早准备、尽早执行,具有很强的灵活性。
- 缺点:
- 测试就绪点分析困难。
- 对于整个项目组的人员要求非常高。
软件测试工作流程:传统测试流程、系统测试流程、Bug管理流程。
传统测试流程
单元测试:
通俗解释: 把软件拆成最小零件(比如一个按钮功能),单独检查这个零件好不好用。
核心: 检查“单个小零件”。
集成测试:
通俗解释: 把几个组装好的零件(模块)放在一起,看它们能不能正常合作,接口对不对。
核心: 检查“零件之间合作”。
冒烟测试:
通俗解释: 软件刚做好一个新版本,先快速试一下最基本、最重要的功能(比如能不能登录),看能不能进行更详细的测试。
核心: “快速健康检查”,看能不能“开工”。
系统测试:
通俗解释: 把整个软件装好,像用户一样从头到尾全面测试所有功能(性能、安全、兼容性等),看是否符合要求。
核心: 检查“整个产品”表现。
回归测试:
通俗解释: 软件修了个Bug或加了新功能后,重新测一下以前的功能,确保没把其他地方搞坏。
核心: “修完再查旧功能”,防止倒退。
验收测试:
通俗解释: 老板或客户亲自试试这个软件,看满不满意、能不能上线使用。
核心: “客户点头”才能交工。
系统测试流程
Bug 管理流程
测试左移、测试右移。
核心思想: 提前介入,预防为主。把测试活动和质量保障提前到开发周期的早期阶段。
目标: 尽早发现并预防缺陷,降低后期修复成本,提升代码质量。
关键手段:
代码评审/审计: 人工或工具检查代码质量、安全、规范。
单元测试: 开发者验证最小代码单元的功能。
研发自测: 开发者在提交代码前进行测试(单元、功能、集成)。
自动化冒烟测试: 快速验证每次构建的核心功能。
本质: 在缺陷产生前或刚产生时就拦截它,是主动的质量保障。
测试右移 (Shift-Right Testing)
核心思想: 监控线上,快速响应。把测试和质量关注点延伸到产品发布后的生产环境。
目标: 快速发现、定位并解决线上问题,监控真实用户体验和系统健康,持续优化。
关键手段:
线上监控: 实时收集系统运行数据。
日志分析: 提供丰富、易查的日志,快速定位问题根因。
指标监控:
技术指标: 服务器性能(CPU、内存、网络等)。
业务指标: 关键业务流程(如支付成功率、短信发送状态)、业务异常点。
生产数据监控: 监控关键数据流,设置警报阈值。
闭环反馈流程: 建立从问题反馈->检查->解决->更新的高效流程。
本质: 在真实环境中验证并保障质量,是被动的快速修复 + 主动的持续改进。
一句话总结对比:
测试左移: 开发阶段做测试,预防缺陷(早介入,保质量)。
测试右移: 上线后做监控,快速响应问题(看效果,快修复)。
核心差异归纳表:
特点 | 测试左移 | 测试右移 |
---|---|---|
介入阶段 | 开发早期 (需求、设计、编码) | 发布后 (生产环境) |
核心目标 | 预防缺陷,提升代码质量 | 快速发现并修复线上问题,监控优化 |
主要活动 | 代码评审、单元测试、研发自测 | 线上监控、日志分析、指标告警 |
问题发现 | 缺陷产生前或刚产生时 | 缺陷在用户环境暴露后 |
关注点 | 代码质量、功能正确性 | 系统稳定性、用户体验、业务连续性 |
本质 | 主动防御 | 快速反应 + 持续优化 |
软件测试分类
分层测试体系
自动化测试分层可以理解为将测试任务划分为多个层次,每个层次专注于不同的测试任务和范围。通过这种分层方式,测试人员能够更有效地管理和组织测试工作,确保测试的全面性和准确性。
- 70% 单元测试
- 20% 服务测试
- 10% 用户界面测试
单元测试
执行单元测试框架:
- Java:
- JUnit:
JUnit
是Java
最流行的单元测试框架之一,用于编写和运行重复的测试。它提供了许多有用的注解和断言方法。 - TestNG::
TestNG
是一个功能强大的测试框架,设计灵活,支持单元测试、集成测试和端到端测试。
- JUnit:
- Python:
- unittest:
unittest
是Python
的内建单元测试框架,灵感来自于 `JUnit,提供了编写和执行测试的基本工具。 - pytest:
pytest
是一个流行的Python
测试框架,以其简洁的语法和强大的功能而著称。它支持更复杂的测试需求和插件。
- unittest:
接口测试
- 接口全称
Application Programming Interface
,一般称作API
。 - 是针对软件对外提供服务的接口的输入输出进行测试。
- 检查接口参数传递的正确性,接口功能实现的正确性,输出结果的正确性,以及对各种异常情况的容错处理的完整性和合理性。
选择合适的工具可以帮助更高效地进行接口测试,确保 API
的功能、性能和安全性。
执行接口测试的相关工具:
- Charles:
Charles
是一款HTTP
代理工具,提供了流量监控和调试功能。可以用来捕获、分析和修改HTTP
和HTTPS
请求。 - Fiddler:
Fiddler
是一个功能强大的HTTP
调试代理,可以捕获和分析网络流量。 - postman:
Postman
是一个流行的API
客户端,用于设计、测试和文档化 API。 - Jmeter:
JMeter
是一个开源的负载测试工具,可以用于性能测试和功能测试。 - loadRunner:
LoadRunner
是一个企业级负载测试工具,用于测试应用程序的性能和可伸缩性。 - python:
- Requests:
requests
是一个流行的Python HTTP
库,用于发送HTTP
请求和处理响应。 - HttpRunner:
HttpRunner
是一个基于Python
的开源API
测试工具,支持接口测试、性能测试和测试自动化。
- Requests:
- Java:
- HttpClient:
HttpClient
是Apache
提供的一个用于发送 HTTP 请求和处理响应的 Java 库。 - RestAssured:
RestAssured
是一个用于Java
的库,用于测试RESTful Web
服务。
- HttpClient:
UI 测试
UI 测试(用户界面测试)是软件测试的一种类型,专注于验证应用程序的用户界面是否符合预期。它确保用户界面的各个方面,如布局、功能、交互、以及视觉效果,按照设计规范进行实现。
UI 测试方法:
- 人工方法:
- 人工查看:测试人员手动检查应用程序的用户界面,以确认所有元素(按钮、输入框、菜单等)是否按照需求规格正确显示和布局。
- 人工操作:测试人员手动执行操作(如点击、输入、滚动等),以验证用户界面的功能是否符合预期。
- 自动化方法:
- web:
Selenium
适用于各种Web
浏览器和操作系统。 - app:
Appium
适用于Android
和iOS
移动应用。
- web: