二、测试体系介绍(L2)-数据结构、系统架构、需求理解、测试介入
目录
2.1 被测系统架构与数据流分析
2.2 测试体系与测试方案设计
2.3 被测需求理解
2.4 常用测试策略与测试手段
2.5 bug定位方法
2.6 分层测试策略
2.7 自动化测试策略
2.1 被测系统架构与数据流分析
系统架构:
- 角色与数据
- 用户产品
- 前端技术栈
- 后端技术栈
- 数据存储
快速了解一家公司的架构:
- 业务架构:领域模型:角色、行为、数据;业务流程:角色之间的集成关系
- 系统架构:
- 架构角色与技术栈:
- 网关:apache/nginx/f5/
- 应用开发:spring boot/spring cloud/
- 通讯协议:dubbo/http/pb
- 数据处理:hadoop/spark/flink
- 数据存储:redis/mysql/oracle/redis/es
- 文档存储:mongodb/hbase/neo4j
- 部署架构:架构角色之间的集成关系
- 架构角色与技术栈:
统一建模语言 UML
梳理业务流程、使用思维导图分析功能点、使用时序图分析数据流、使用活动图分析测试用例
- 用例图:商业模式、业务角色
- 时序图:业务流程、调用关系
- 部署图:系统架构与集成关系
- 活动图:业务逻辑分析
测试用例设计总结
- 使用用例图分析角色与资源
- 使用思维导图分析功能点
- 使用时序图分析数据流
- 使用活动图分析业务逻辑
2.2 测试体系与测试方案设计
了解被测系统架构
- 业务架构:业务模型分析
- 技术架构:技术组件、通讯协议分析
- 数据架构:数据模型、数据存储引擎分析
经典技术架构
- 网关产品 Nginx Apache Httpd
- Web 应用开发 Vue.js React
- 移动应用开发 Android iOS RN Flutter
- 后端应用开发 Java(Spring Boot)
- 底层引擎:C/C++ Go Rust
- 消息管道 Kafka RabbitMQ
- 缓存系统 Redis MemCached
- 数据监控 Logstash ElasticSearch Kibana
- 性能监控 Prometheus Grafana
- 大数据处理 Hadoop Spark Flink
- 人工智能深度学习 TensorFlow Pytorch
测试开发技术体系:
2.3 被测需求理解
需求文档
需求评审:
- 业务场景角度
- 用户故事
- 业务流程图
- 功能点角度
- 数据约束是否全面、合理
- 存在分支的逻辑、描述是否覆盖所有路径
- 多状态流程,状态流转描述是否合理且完整
- 权限描述是否明确
需求分析
- 明确测试范围
- 明确功能点
- 明确业务流程
- 明确输出结果
- 分析异常流程
- 预估测试需要的时间和资源
2.4 常用测试策略与测试手段
**测试策略概念 :**在特定环境约束之下,描述软件开发周期中关于测试原则、方法、方式的纲要,并阐述了它们之间如何配合,以高效地减少缺陷、提升质量。
测试策略的关注重点:
- 测试的目标是什么?
- 测试可能存在的风险是什么?
- 测试的对象和范围是什么?
- 如何安排各种测试活动?
- 如何评价测试的效果?
测试手段:
- 黑盒测试
- 白盒测试
- 动态测试
- 静态测试
- 手工测试
- 自动化测试
测试策略模版:测试策略
需求 - 开发 - 冒烟测试 - 测试 - 跟踪测试 - 版本质量评估 - 后续版本测试策略(如回归) - 发布质量评估;
2.5 bug定位方法
常见bug分类
为什么需要掌握 Bug 定位:
- 提交 Bug 时候追加更多有用信息,方便研发更快的解决问题
- 分析 Bug 形成原因,进行溯源并建立特征进行批量追踪、
Bug展现层(BUG复现):
- 条件:测试数据
- 过程:测试步骤
- 结果:测试结果
总结:
- 明确 Bug 问题的现象与复现步骤
- 分层分析关键过程的数据与问题特征
- 积累 Bug 特征与问题根源特征,丰富测试经验,提高 Bug 发现的能力
2.6 分层测试策略
用户端自动化测试分层测试阶段
-
功能测试:
- 研发单元测试:JUnit、Robolectric 不依赖真机或者模拟器
- SDK 测试:Instrumentation 依赖真机或者模拟器
- 集成测试:Espresso 单应用快速集成测试
- 验收测试:Appium、ATX/AirTest、Calabash 跨应用测试
-
非功能测试
- 健壮性测试:Monkey Maxim AppCrawler
- 兼容性测试:多设备分布式测试
- 专项测试:性能测试、弱网测试、耗电量测试、卡顿测试、内存泄漏测试、安全测试
测试金字塔
UI组件的分层测试:
分层:单元测试 → 集成测试 → UI测试
金字塔模型与沙漏模型
微服务测试
2.7 自动化测试策略
2.7.1 用户端测试体系
- 研发单元测试:JUnit、Robolectric 不依赖真机或者模拟器
- 集成测试:Espresso 单应用快速集成测试
- 验收测试:Appium、ATX/AirTest、Calabash 跨应用测试
智能遍历测试(快速回归、兼容测试)
- 通过智能探索业务路径尝试发现问题
- 可以弥补现有自动化手段的不足
- 已经成为测试过程中的关键一环
智能遍历工具
- 百度 SmartMonkey
- 腾讯 NewMonkey
- 头条 fastbot
- 支付宝 Macaca 的 NoSmoke
- Android Monkey、Android App Crawler
- 霍格沃兹测试开发学社 AppCrawler
- OWASP-ZAP Web 漏洞自动探测
自动遍历的价值
- 用例维护成本低 code-less。
- 具备新功能探索能力,可以对未提测产品进行测试实现左移。
- 具备回归能力,可以实现较高的界面与控件覆盖。
- 应用场景多,回归测试、健壮性测试、兼容测试、自动化专项测试。
**稳定测试体系:**如Fastbot(for 稳定性、兼容性)
UI 自动化加速策略
- 并行并发:利用多进程、多线程
- 分布式:分布式执行机制
自动化测试脚本管理
- 版本化管理:YAML Python
- 测试套件管理定制:测试套件的组合、继承管理、模型驱动
- 平台化管理调度:自研平台、Jenkins 平台
2.7.2 服务端测试体系
- 手工测试
- 自动化测试
- DIFF 测试、流量回放
- Mock
使用 Mock 技术解耦与提高测试覆盖
接口测试框架
- Python:Requests
- Java:RestAssured
- 简约的接口测试 DSL
- 支持结构化解析 XML JSON 等
接口自动化测试用例自动生成
- 静态生成:
- 基于文档 Swagger YAPI
- 基于代码分析语法树
- 动态生成、录制、生成、回放:
- 基于 Proxy 生成用例
- 基于插桩框架生成用例 JVM-SandBox ByteBuddy
2.7.3 自动化测试策略总结
分层测试策略
- 系统测试
- 集成测试
- 单元测试
测试手段
- 手工测试
- 自动化测试
- 测试框架