乐于分享
好东西不私藏

软件测试基础

软件测试基础

1.测试原则

  • 尽早并持续测试:测试应在软件开发早期开始,并在整个开发周期中持续进行。
  • 独立测试:测试工作最好由与开发人员不同的小组或人员承担,以保证客观性。
  • 预期结果明确:设计测试方案时,不仅要确定输入数据,还要明确预期输出结果。
  • 覆盖正反场景:测试用例应包括有效、合理的情况,也要包含无效或异常情况。

2.测试核心目标

  • 验证功能:检验程序是否做了该做的事。
  • 防止异常:检验程序是否做了不该做的事。
  • 规范执行:严格按照测试计划进行操作。
  • 文档管理:妥善保存测试计划和测试用例,可重复使用或追加测试。

3.测试方法分类

3.1测试方法(How – 怎么测)

这一维度是实施手段的选择,不同方法可以组合使用。

  • 黑盒 / 白盒 / 灰盒
  • 静态 / 动态(SAST/DAST/SCA 属于静态/动态安全)
  • 人工 / 自动化
  • 探索式测试(有脚本也有探索,补盲区)
  • Fuzz 模糊测试(安全/健壮性)
方法 定义 优势 局限 适用场景
黑盒
只看输入和输出,不关心内部实现
与用户视角一致,能覆盖业务需求
难以覆盖内部死角
功能、兼容、验收测试
白盒
基于源代码和逻辑结构设计用例
可测到逻辑路径和边界条件
成本高、需要开发配合
单元测试、代码审查
灰盒
介于黑盒和白盒之间,了解部分实现
覆盖更全面
对人员技能要求高
接口测试、安全测试
静态
不运行程序分析缺陷(SAST、代码审查、SCA)
早期发现问题
无法测运行时问题
代码质量、安全依赖
动态
运行系统收集结果(DAST、运行时探针)
可测真实运行状态
需可运行环境
安全渗透、性能测试
人工
测试人员执行
灵活、适合探索式
重复性差、易漏测
验收、可用性测试
自动化
工具脚本自动执行
稳定高效
前期成本高
回归、持续集成
探索式测试
在了解系统的同时动态设计和执行用例
补盲区
可重复性差
复杂业务、初期探索
Fuzz 测试
自动生成大量随机或畸形数据输入
找安全和健壮性漏洞
难复现问题
安全、协议解析组件
3.1.1 静态测试方法

静态测试方法是一种不运行程序就进行测试的方式,重点是通过分析、审查或工具扫描来发现缺陷、漏洞和规范偏差。它常用于早期发现问题、降低修复成本,尤其在代码还未部署或上线前就能介入。

(1)静态测试的核心特点

  • 不执行代码:只分析程序的静态形式(源代码、二进制、文档等)。
  • 提前介入:可在开发早期进行,缺陷越早发现,修复成本越低。
  • 适用范围广:不仅限于代码,还包括需求、设计、配置等。
  • 可人工,也可自动化:手工审查和工具扫描可以结合使用。

(2)常见的静态测试方法

① 静态分析(Static Analysis)

  • 自动化工具分析源代码/字节码/二进制,检测潜在缺陷、安全漏洞或不符合规范的写法。
  • 代表工具:
  • 安全类(SAST):Fortify、Checkmarx、SonarQube
  • 质量类:ESLint、Pylint、FindBugs
  • 检查内容:
  • 语法错误、变量未初始化
  • 代码规范问题
  • 潜在的空指针、数组越界
  • 硬编码密码、敏感信息泄露
  • SQL 注入、XSS 等安全风险

② 代码审查(Code Review)

  • 人工逐行检查代码,找出逻辑错误、设计缺陷、安全隐患。
  • 形式:
  • 同行评审(Peer Review)
  • 走查(Walkthrough)
  • 检查表评审(Checklist Review)
  • 优点:能发现自动化工具无法捕捉的业务逻辑问题。
  • 常用平台:GitHub PR、GitLab Merge Request、Gerrit

③ 文档审查(Documentation Review)

  • 审查 需求规格说明书(SRS)、设计文档、接口文档等,确保描述准确、完整、无歧义。
  • 目标:
  • 需求可测性(Testability)
  • 接口定义一致性
  • 业务规则正确性

④ 配置与脚本审查

  • 检查配置文件、基础设施脚本(IaC)、CI/CD Pipeline等,避免错误配置导致的安全/可用性问题。
  • 工具:
  • Terraform/Lambda 配置扫描(Checkov、tfsec)
  • Kubernetes YAML 审查(kube-score、kube-linter)
  • Dockerfile 安全基线检查

(3)静态测试的优势

  • 早期发现问题,降低修复成本
  • 无需运行环境,速度快
  • 易于集成到 CI/CD 流程
  • 能发现潜在的安全漏洞和质量问题

(4)静态测试的局限

  • 无法验证运行时行为(需配合动态测试)
  • 工具可能出现误报或漏报
  • 某些业务逻辑缺陷只能在运行时发现
3.1.2 动态测试方法

(1) 按测试策略分类

① 黑盒测试(功能测试)

  • 定义:只关注软件功能和输出是否符合预期,不考虑内部实现。
  • 目标:验证功能正确性、业务规则、输入输出关系。
  • 方法
  • 等价类划分
  • 边界值分析
  • 决策表测试
  • 状态转换测试
  • 随机测试 / 错误推测
  • 典型用途:功能测试、系统测试、验收测试

② 白盒测试(结构测试)

  • 定义:基于程序内部逻辑结构进行测试。
  • 目标:覆盖代码路径,发现逻辑错误、潜在缺陷。
  • 方法
  • 语句覆盖
  • 判定覆盖(分支覆盖)
  • 条件覆盖
  • 路径覆盖
  • 循环覆盖
  • 典型用途:单元测试、集成测试

③ 灰盒测试

  • 定义:部分了解内部结构,同时关注输入输出。
  • 目标:结合黑盒和白盒优点,既考虑业务功能,也关注内部逻辑。
  • 典型用途:Web 应用安全测试、API 测试

(2) 按执行方式分类

① 手工测试

  • 测试人员手动执行用例。
  • 优点:灵活,可发现隐藏缺陷。
  • 缺点:效率低,难以重复执行。

(2) 自动化测试

  • 使用测试工具或脚本执行用例。
  • 优点:高效、可重复、便于回归测试。
  • 常用工具:
  • 单元测试框架:JUnit、pytest、TestNG
  • UI 自动化:Selenium、Appium
  • 接口自动化:Postman、RestAssured
  • 性能测试:JMeter、LoadRunner

(3) 特殊类型动态测试

① 探索式测试

  • 测试人员在执行过程中动态设计测试步骤,发现未知缺陷。
  • 强调经验与灵活性。

② Fuzz 测试(模糊测试)

  • 输入大量随机或异常数据,检测程序的健壮性和安全性。
  • 适用于安全测试、边界条件测试。

③ 性能/压力测试

  • 验证系统在高负载、长时间运行下的稳定性和响应速度。
  • 工具:LoadRunner、JMeter

④ 安全测试

  • 动态检测应用在运行时的安全漏洞,如 SQL 注入、XSS、权限绕过等。

💡 实战建议

  • 黑/白/灰盒可以结合使用,比如功能测试用黑盒、接口测试用灰盒、单元测试用白盒。
  • 静态+动态安全扫描(SAST+DAST+SCA)是 DevSecOps 的核心。
  • 自动化优先覆盖回归、高频执行、容易出错的场景。

3.2 测试目标(What – 测什么)

这一维度是关注的质量属性,可以映射到非功能/功能需求。

3.2.1 功能
  • 校验业务逻辑正确性(正向用例)
  • 边界条件(最大值、最小值、空值)
  • 异常场景(网络断开、输入非法)
3.2.2 性能
子类 目标 关注指标
负载
稳态下的表现
p95 响应时间、错误率
压力
极限条件下的瓶颈
最大并发、崩溃点
容量
系统最大处理能力
最大连接数、存储容量
稳定性(Soak)
长时间运行的稳定性
内存泄漏、重连成功率
弹性/扩展/Spike
异常突发的恢复能力
峰值延迟、恢复时间
3.2.3 安全
  • 渗透测试(黑客模拟攻击)
  • 漏洞扫描(已知漏洞检测)
  • 权限/越权验证
  • 鉴权与会话安全
  • Web 安全(CSRF、XSS、SQL 注入)
  • 供应链安全(依赖扫描 SCA)
  • 配置基线检查
  • 隐私合规(GDPR、等保)
3.2.4 兼容性/移植性
  • OS、浏览器、设备、芯片、网络类型、分辨率、向后兼容
3.2.5 可用性/可达性
  • 用户体验(UX):导航流畅、可读性好
  • 无障碍(a11y):键盘可达、屏幕阅读器支持
3.2.6 可靠性/恢复性
  • 异常注入(Chaos Testing)
  • 断网/断电恢复
  • 备份/还原
  • 故障转移(Failover)
3.2.7 安装/升级/回滚
  • 版本迁移
  • 灰度升级
  • 数据迁移一致性
3.2.8 国际化/本地化
  • 多语言、时区、货币符号
  • 本地日期/姓名/数字格式
3.2.9 数据质量/一致性
  • 幂等性
  • 精度、约束
  • 数据脱敏
3.2.10可观测性
  • 日志级别配置
  • 性能指标采集
  • Trace 链路追踪
  • 告警触发验证
3.2.11 合规性
  • 行业标准(ISO、PCI DSS)
  • 隐私法规(GDPR、CCPA)
  • 审计追溯能力

💡 实战建议

  • 建立”质量属性→测试项→指标”的映射表,每个属性都要有可量化指标(如 p95 延迟 ≤ 1s)。
  • 非功能性测试(性能/安全/兼容等)要早期介入,否则后期修复成本高。

3.3 策略与阶段(When – 什么时候测)

这一维度决定了测试的时机和节奏,直接影响交付风险。

  • 冒烟(Smoke)构建验证(Build Verification)
  • 回归(Regression)(强烈建议自动化)
  • 验收/UAT、Alpha/Beta、A/B 实验
  • 金丝雀/蓝绿/灰度发布灾备演练(演练亦应纳入测试)
策略/阶段 定义 目标
冒烟(Smoke)
构建完成后快速验证核心功能是否可用
防止无效构建进入后续环节
构建验证(BVT)
全自动化、覆盖关键用例的构建级验证
确保每次构建质量可控
回归(Regression)
验证新改动没破坏已有功能
减少引入旧 bug
验收(UAT)
用户参与验证系统满足业务需求
最终上线前业务签字
Alpha/Beta
小范围试用收集反馈
降低上线风险
A/B 实验
同时投放两种版本比较效果
数据驱动决策
金丝雀发布
逐步放量监控表现
快速回滚能力
蓝绿发布
两套环境切换
无缝上线
灰度发布
按比例逐步放量
可控风险上线
灾备演练
模拟灾难恢复流程
验证业务连续性

💡 实战建议

  • CI/CD 管道中冒烟→回归→非功能性测试→预发布→灰度→全量是比较成熟的节奏。
  • 灾备演练不能忽视,特别是高可用/关键业务系统。

✅ 总结:

  • How 解决”用什么手段去测”
  • What 解决”关注哪些质量维度”
  • When 解决”在什么阶段执行哪些测试”
  • 三者结合,就能形成完整的测试策略矩阵,既可指导日常工作,也能作为项目质量管理的蓝本。

4.物联网智能挂锁场景的落地示例

类别 关键用例/校验点 建议度量
功能
绑定/解绑、授权(一次性/时段)、离线密码、指纹/蓝牙/NFC 开锁、日志上报、异常告警
功能通过率、P0/P1 缺陷=0
性能-负载
同时 N=5k 设备心跳+指令下发
p95 指令延迟 ≤ 1.0s,错误率 ≤ 0.1%
性能-压力
持续提升并发到瓶颈
找到 QPS 峰值与资源瓶颈
性能-稳定性
72h Soak 测试(MQTT 断连重连、时钟漂移)
内存泄漏 0、重连成功率 ≥ 99.9%
安全-渗透
BLE 抓包/重放/MITM、越权开锁、接口鉴权、签名与时戳、固件回滚防护
高危/严重漏洞=0,默认口令=0
安全-静态/供应链
服务器/APP/固件 SAST,SCA 组件体检
高危依赖=0
兼容性
Android/iOS 主流版本+不同蓝牙芯片/天线;弱网(1%、5% 丢包)
兼容矩阵通过率 ≥ 98%
恢复性
断电、离线、时钟回拨;云端/设备异常重启
数据不丢、状态一致、自动恢复 ≤ 30s
安装/升级
OTA 升级/失败回滚;App 升级数据迁移
升级成功率 ≥ 99.5%,回滚无数据丢失
可观测性
关键链路打点:命令下发→设备执行→结果回执
追踪覆盖率 ≥ 90%
合规/隐私
日志脱敏、最小权限、访问审计
敏感字段不落盘、审计可追溯
建议的执行顺序

1)冒烟 → 2) 功能(含探索式) → 3) 回归(自动化) → 4) 兼容 → 5) 性能(负载→压力→稳定性) → 6) 安全(DAST/SAST/SCA/渗透) → 7) 验收/UAT → 8) 灰度发布与监控验证。

发布门槛(示例)
  • Smoke 100% 通过;回归通过率 ≥ 98%;P0/P1=0;单测覆盖率(语句/分支)≥ 70%/60%;
  • p95 延迟与错误率达标;高危安全项=0;关键监控/告警就绪。
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 软件测试基础

评论 抢沙发

2 + 4 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮