功能测试 - 软件测试方法与理论

1. 软件开发流程

软件包含:程序、文件、文档、数据

软件开发流程演变:传统瀑布模型 → 敏捷开发模型 → DevOps 模型

瀑布模型

  • 瀑布模型流程:需求分析 → 设计 → 编码 → 实现 → 软件测试 → 完成 → 维护

  • 瀑布模型特点:线性

  • 瀑布模型优点:阶段清晰、强调早期计划和需求调查、适合需求稳定产品

  • 瀑布模型缺点:增加开发风险、错误发现晚

敏捷开发模型

敏捷开发模型:XP、SCRUM

1、极限编程-XP:分多个周期

编程方法:简单设计、结对编程、测试驱动开发、重构

小组实践:代码集体所有、编码标准、稳定高速的步伐、持续集成、隐喻

交付和管理:小规模发布、计划游戏、完整的团队、现场客户

2、SCRUM:产品backlog、sprint计划会议、sprint backlog→2-4周sprint、潜在交付产品增量

敏捷模型特点:增量迭代、小步快跑

Devops

DevOps:开发、测试、运维

DevOps生命周期:持续开发、持续测试、持续集成、持续部署、持续监控

DevOps特点:减少变更范围、加强发布协调、自动化

持续集成(CI) 持续交付(CD)

2. 系统架构与数据流

理解公司产品的整体架构-测试架构思维

1.业务架构

  • 商业模式

  • 业务流程:角色、资源、数据

  • 系统架构:角色、行为、数据集成关系

2.系统架构

  • 架构角色与技术栈

  • 部署架构

3.使用统一建模语言UML(梳理业务逻辑关系)

  • 用例图-梳理业务流程:商业模式、业务角色

  • 时序图-分析数据流:业务流程、调用关系

  • 部署图:系统架构与集成关系

  • 活动图-分析测试用例:业务逻辑分析

  • 思维导图(活动图)-分析功能点(流程、分类)

3. 软件测试概念

3.1 软件测试原则

  • 测试显示缺陷的存在
  • 穷尽测试是不可能的
  • 测试尽早介入
  • 缺陷集群性(2/8原则)
  • 杀虫剂悖论
  • 测试活动依赖于测试内容
  • 没有错误是好事谬论

3.2 软件测试模型

3.2.1 V模型

V模型:需求分析 → 概要设计 → 详细设计 → 编码 → 单元测试 → 集成测试 → 系统测试 → 验收测试

优点:既有底层测试又有高层测试、开发阶段清晰

缺点:误解为测试是在开发后进行的阶段

3.2.2 W模型

W模型:测试开发并行、测试伴随整个软件开发周期(包括需求、设计)

用户需求 → 需求分析 → 概要设计 → 详细设计 → 编码 → 集成 → 实施 → 交付

验收测试设计 → 确认与系统测试设计 → 集成测试设计 → 单元测试设计 → 单元测试 → 集成测试 → 确认测试系统测试 → 验收测试

优点:测试贯穿整个项目周期、更早介入早发现问题、测试开发并行

缺点:无法支持迭代的开发模型、有些项目无文档产出、对需求和设计的测试技术要求高

3.2.3 H模型

H模型:把测试活动完全独立出来

测试准备→测试就绪点→测试执行→测试流程

优点:完全独立并发进行、尽早准备执行灵活

缺点:测试就绪点分析困难、对人员要求高

4. 测试流程体系(软件项目管理)

项目流程:开发→单元测试→集成测试→持续集成→冒烟测试→系统测试→验收测试→发布→持续监控

测试流程:需求分析→测试计划(计划评审)→测试用例(用例评审)→集成测试(准备测试数据、准备自动化测试用例)→搭建测试环境(补充测试数据、功能测试、自动化测试)→系统测试报告(缺陷报告)

软件测试范围:传统测试流程、测试左移(开发)和测试右移(运维)

4.1 传统测试流程

完整测试流程:单元测试→集成测试→冒烟测试→系统测试→回归测试→验收测试

系统测试流程:需求分析→测试计划→测试设计(用例)→用例评审→测试执行→bug管理→发布维护

Bug管理流程:

提交缺陷→指派缺陷→确认缺陷(是)→推迟处理(是)→遗留缺陷(后续版本处理)→处理缺陷→回归缺陷(通过)→关闭缺陷

确认缺陷(是)→推迟处理(否)→处理缺陷→回归缺陷(通过)→关闭缺陷

确认缺陷(否)→回归缺陷(通过)→关闭缺陷

回归缺陷(未通过)→重新打开→确认缺陷

4.2 测试左移(开发)

测试左移:开发早期介入、代码测试、预防bug

质量保障手段:代码评审、代码审计、单元测试、自动化冒烟测试、研发自测

4.3 测试右移(运维)

测试右移:发布之后、线上监控

质量保障手段:闭环的线上问题反馈检查解决更新流程、查看日志、log 快速定位

5. 需求分析

查看需求文档-模拟宣讲-需求评审

5.1 需求评审

业务场景角度:

  • 用户故事(站在用户使用角度)

  • 业务流程图(业务整体流程逻辑)

功能点角度:

  • 数据约束是否全面、合理

  • 存在分支的逻辑、描述是否覆盖所有路径

  • 多状态流程,状态流转描述是否合理且完整

  • 权限描述是否明确

5.2 需求分析

  • 明确测试范围

  • 明确功能点

  • 明确业务流程

  • 明确输出结果

  • 分析异常流程

  • 预估测试需要的时间和资源

6. 测试技术体系

6.1 软件测试分类

按开发阶段分类

  • 单元测试
  • 集成测试
  • 系统测试(功能测试、兼容性测试、性能测试、安全测试)
  • 验收测试(α测试、β测试)

按是否查看代码分类

  • 黑盒测试
  • 白盒测试
  • 灰盒测试

按测试执行方式分类

  • 静态测试(查看代码文档)
  • 动态测试(运行程序)

按是否手工执行分类

  • 手工测试
  • 自动化测试

其他分类

  • 冒烟测试
  • 回归测试
  • 随机测试
  • 探索性测试

6.2 分层测试体系

70%单元测试、20%服务测试(接口)、10%用户界面测试(UI)

单元测试方法(白盒,开发人员自己编写)

  • java(JUnit、TestNG)
  • python(unittest、pytest)

接口测试(API,灰盒,测试编写)

  • 抓包工具:Charles、Fiddler
  • 自动化测试:postman、python(Requests、HttpRunner)、java(HttpClient、RestAssured)
  • 性能测试:Jmeter、loadRunner

用户界面测试(UI)

  • 人工测试
  • 自动化方式(web:selenium、app:appium)

7. 常用测试平台

测试用例管理与bug管理平台:jira、redmine、testlink、tapd、云效、禅道、gitlab

代码管理平台:gitlabsubversion、github、bitbucket

持续集成管理平台:jenkins、gitlab runner、github action、自建 devops 平台

JIRA基本功能模块

  • Project 项目(产品、用例管理、bug管理)

  • Issue 问题(任务)

  • Field 字段(任务的属性)

  • Workflow 工作流(任务状态)

  • Screen 视图(字段的合集)

8. 测试用例设计

1、测试用例概念:测什么?怎么测?

2、测试用例组成:用例编号、测试模块、测试点、前提条件、测试步骤预期结果、实际结果

3、测试用例等级

  • P0(核心-冒烟)
  • P1(高优先级-基本功能)
  • P2(中优先级-异常、边界、中断、网络、容错、UI)
  • P3(低优先级-性能、压力、兼容性、安全性、可用性)

4、测试用例设计工具

  • 思维导图
  • excel

测试用例设计方法

8.1 白盒测试方法论

根据待测产品的内部实现细节来设计测试用例

白盒测试手段:涵盖单元测试、集成测试

白盒测试度量:代码覆盖率

代码覆盖率常见概念:

  • 语句覆盖:每行代码都要覆盖至少一次

  • 判定覆盖:判定表达式的真假至少覆盖一次

  • 判定/条件覆盖:判定覆盖与条件覆盖都必须覆盖

  • 条件组合覆盖:判定表达式中的所有条件组合都需要覆盖

  • 分支覆盖:控制流中的每条分支都要被覆盖一次

  • 路径覆盖:所有的路径都要尽量覆盖

  • 指令覆盖:一行代码会被编译为多条指令,尽可能的覆盖所有指令

  • 方法覆盖:每个方法至少被覆盖一次

  • 类覆盖:每个类至少被覆盖一次

  • 文件覆盖、模块覆盖等等扩展覆盖

覆盖率统计工具:emma、cobertura、jacoco

流程覆盖

  • 利用代码执行流代表流程

  • 流程覆盖用路径覆盖率表达

  • 对流程进行裁剪获得一个适合业务的小规模的业务子集

  • 流程覆盖率=测试经过的路径/业务子集路径

精准化测试(控制流延申)

  • 代码调用链与黑盒测试用例的关联

  • 根据代码变更自动分析影响范围

  • 黑盒测试过程中借助代码流程覆盖数据指导探索式测试

  • 利用线上数据推导有效测试用例

  • 代码流程分析与覆盖率统计

8.2 黑盒测试方法论

常用测试方法:等价类划分、边界值分析、因果图与判定表(决策树-流程图)、场景法

8.2.1 等价类划分法

等价类划分设计步骤:先划分等价类、有效等价类、无效等价类,挑选测试用例数据

可能数据:整数、小数、字母、汉字、符号、空格、回车、不输入

示例

需求:1~100 加法测试

  • 1-100 整数
  • 两个输入框

有效等价类:[1,100] 整数

无效等价类:负数、0、小数、字母、汉字、特殊符号、空

边界值: 0、1、2、99、100、101

8.2.2 边界值分析法

等价类划分的补充方法,通常同时使用

编号所属等价类输入框1输入框2预期结果
1有效1100101
2有效299101
3有效992101
4有效100100200
5无效040给出错误提示
6无效400给出错误提示
7无效10150给出错误提示
8无效50101给出错误提示
9无效3.2345给出错误提示
10无效453.23给出错误提示
11无效ab11给出错误提示
12无效11ab给出错误提示
13无效34给出错误提示
14无效34给出错误提示
15无效%56给出错误提示
16无效56%给出错误提示
17无效78给出错误提示
18无效78给出错误提示
8.2.3 因果图

利用图解法分析输入的各种组合情况,从而设计测试用例的方法,适合检查程序输入条件的各种组合情况。

  • 因 - 输入条件
  • 果 - 输出结果

基本符号

  • c1-e1 恒等
  • c1~e1 非
  • c1/c2/c3ve1或 c1/c2^e1 与

约束条件

  • E 互斥(至多 1 个)
  • I 包含(至少 1 个)
  • O 唯一(有且只有 1 个)
  • M 屏蔽(有 a 无 b)
  • R 要求(有 a 必有 b)

因果图设计步骤

  1. 找出所有输入条件(因)
  2. 找出所有输出条件(果)
  3. 输入条件之间的制约和组合关系
  4. 输出条件之间的制约和组合关系
  5. 输入条件组合产生的输出结果
  6. 因果图转化为判定表

设计测试用例

充值条件:投币50/100,充值50/100

输入条件输出条件
1、投币50a、完成充值,退卡
2、投币100b、提示充值成功
3、充值50c、找零(退钱)
4、充值100d、提示错误

输入条件:1 和 2 互斥、3 和 4 互斥,共 8 种情况:1、2、3、4、13、14、23、24

输出条件:a 和 d 互斥、b 和 d 互斥,共 4 种情况:ab、abc、cd、d

1、2→cd;3、4→d;13、24→ab;14→cd;23→abc

编号12345678
输入
1. 投币50元111
2. 投币100元111
3. 充值50元111
4. 充值100元111
输出
a. 完成充值退卡111
b. 提示充值成功111
c. 找零(退钱)1111
d. 提示错误11111
8.2.4 判定表组成
  • 条件桩 - 问题的所有条件
  • 动作桩 - 问题的所有输出
  • 条件项 - 针对条件桩的取值
  • 动作项 - 条件项的各种取值情况下的输出结果

判定表设计步骤:列出所有的条件桩和动作桩、确定规则数-每个条件桩的取值个数^条件桩个数、填入条件项、填入动作项得到初始判定表、简化判定表。

示例

判断三角形:三条边a、b、c,判断是否构成三角形、三角形的类型

条件桩 条件项2^4

C1:a、b、c是否构成三角形 1、0

C2:a=b? 1、0

C3:a=c? 1、0

C4:b=c? 1、0

动作桩 动作项

A1:不是三角形 1

A2:普通三角形 1

A3:等腰三角形 1

A4:等边三角形 1

A5:不可能出现 1

条件桩
C1:a、b、c是否构成三角形0000000011111111
C2:a=b?0000111100001111
C3:a=c?0011001100110011
C4:b=c?0101010101010101
动作桩
A1:不是三角形11111111
A2:普通三角形1
A3:等腰三角形111
A4:等边三角形1
A5:不可能出现111

简化后的判定表为:

条件桩
C1:a、b、c是否构成三角形011111
C2:a=b?-00111
C3:a=c?-01011
C4:b=c?-01101
动作桩
A1:不是三角形1
A2:普通三角形1
A3:等腰三角形
A4:等边三角形1
A5:不可能出现111
8.2.5 场景法

模拟用户操作软件时的场景,主要用于测试系统的业务流程。

用例场景定义

  • 基本流-按照正确的业务流程来实现的一条操作路径
  • 备选流-导致程序出现错误的操作流程

场景法用例设计步骤

  • 根据需求规格说明画出功能模块流程图
  • 根据流程图描述程序的基本流和备选流
  • 根据基本流备选流生成不同场景构造场景列表
  • 每个场景生成测试用例
  • 生成的测试用例复审去掉多余用例
  • 为测试用例确定测试数值

示例

淘宝网购物流程:流程图

确定基本流和备选流

基本流

  • 进入淘宝网、不注册、浏览物品、选择物品购买、直接购买、是会员、填写验证码、付款到支付宝、等待收货、确认收货

备选流

  • 注册,填写注册信息,验证通过

  • 注册,填写注册信息,验证未通过

  • 加入购物车,直接购买

  • 加入购物车,继续选购

  • 不是会员,填写注册信息,验证通过

  • 不是会员,填写注册信息,未通过验证

8.3 测试方法的选择

  • 需要输入数据的地方,考虑使用等价类划分法,将无限测试变成有限测试

  • 任何情况下都必须采用边界值分析法

  • 关注程序的主要功能、业务流程和业务逻辑是否正确实现,考虑使用场景法

  • 如果含有输入条件的组合情况,考虑因果图判定表

  • 采用错误推断法再追加测试用例

8.4 测试用例的编写

测试用例的粒度

掌握好用例复杂和简单的程度。

过于简单失去测试用例意义,过于复杂会降低效率、增加维护成本

测试用例的作用

指导测试的实施、规划测试数据的准备、编写测试脚本的“设计规格说明书”、测试结果的度量基准、分析缺陷的标准

测试用例编写步骤

1.步骤:划分功能模块→正向功能验证→单个功能项验证→功能之间交互验证→隐形需求

2.数据约束:数据长度验证、数据类型验证、是否必填验证、限制约束验证

3.面试测试用例设计思路:需求分析、界面、功能、易用性、兼容性、性能、安全性

9. 测试策略概念

在特定环境约束下,描述软件开发周期中关于测试原则、方法、方式的纲要,并阐述了它们之间如何配合,以高效地减少缺陷、提升质量。测试策略关注重点:

  • 测试的目的

  • 测试可能存在的风险

  • 测试对象和范围

  • 如何安排测试活动

  • 如何评价测试效果

BUG 定位方法

1、常见 BUG 分类

  • 功能:业务流程是否正确

  • 性能:业务流程是否顺畅

  • 安全:是否符合安全标准与规范

  • 专项质量:用户体验 UX 兼容性 稳定性 可靠性

2、BUG 定位能力

  • 明确bug问题的现象与复现步骤

  • 分层分析关键过程的数据与问题特征

  • 积累bug特征与问题根源特性,丰富测试经验,提高发现 bug 能力

10. 测试环境搭建

被测系统AUT

1、常见被测系统类型:UI、service、code

2、部署方法

  • 打包部署:apk、app、ipa、jar、war

  • 脚本部署:自动化脚本与自动化平台

  • 容器部署:基于容器镜像 docker k8s(自动化构建-bash 容器构建-docker 容器编排-k8s 持续集成-jenkins)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无心六神通

你的鼓励是我持续创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值