软件测试及 AI+测试
软件测试培训:破冰 · 为什么需要测试 · 概念 · 方法 · 阻碍 · AI
程序员一半的代码都在防止你这种人
🎬 破冰:四格漫画
- 你永远猜不到用户会怎么使用你的产品
酒吧点餐系统:唯独防不住干饭人
第 1 格
第 2 格
第 3 格
第 4 格
🛡️ 为什么需要测试
1) 做测试带来什么好处
- 降低业务与合规风险,避免资金/数据事故
- 加速交付:问题左移,重构有“安全网”
- 质量可量化:覆盖率、SLO、错误率可度量
- 稳定回归:CI 门禁 + 自动化回归
- 成本最小化:缺陷越早发现修复成本越低
2) 不做测试有什么坏处
- 线上事故频发,紧急回滚/补救成本高
- 交付节奏混乱,需求返工与技术债堆积
- 不可观测:无法定位问题与复现场景
- 团队信任下滑:发布恐惧、协作效率下降
🔍 测试的概念
1) 测试的分类
- 黑盒测试:基于外部行为与输入输出,关注需求与场景
- 白盒测试:基于代码结构与路径(行/分支/条件)
- 回归测试:变更后验证既有功能不被破坏(自动化优先)
2) 测试的名词
- 边界:极小/极大/临界转折点(含空、零、负、超长、编码)
- 覆盖率:行/分支/条件/MC-DC;场景覆盖与数据覆盖
- 缺陷/需求占比:每个需求关联缺陷数与严重度占比
- 缺陷密度与逃逸率:每千行/功能点缺陷量;生产逃逸缺陷比
- 稳定性术语:Flaky(偶现不稳定)、MTTR/MTBF、P95/P99
- 契约与依赖:Provider/Consumer 契约、变更影响面
3) 测试的不同阶段
- 单元测试:函数/类级别,隔离外部依赖
- 集成测试:组件/接口/契约/消息链路的组合验证
- Web 测试:API/页面交互、兼容性与可用性
- 系统测试:端到端业务流程与非功能(性能/可靠性/安全)
- 交付/验收测试:基于验收标准与 DoD 的最终确认
4) 缺陷修复成本呈指数上升(Boehm)
阶段 | 相对成本(×需求阶段) | 参考 |
---|---|---|
需求 | 1 | Boehm |
设计 | 3–6 | — |
开发 | ≈10 | — |
内部测试 | 20–40 | — |
外部测试 | 30–70 | — |
大规模使用 | 40–1000 | — |
缺陷在不同阶段修复的成本(示意)
5) 测试的心理学
- 趋利避害:人们倾向期待“顺利”,测试需刻意寻找异常
- 人无完人:软件亦然;测试能发现错误,难以证明“无错”
- 心理预期:预期困难会使成功率下降(约 18%)
- 避免自测偏见:程序员不应只由自己测试;鼓励交叉测试
- 开放性:以用户视角与非常规路径进行探索,避免开发者思维定式
后端实践提示:JUnit5/Mockito、Testcontainers、Rest Assured/Pact、JMeter/Gatling、Resilience4j。
🧭 如何进行测试
1) 手动测试
- 探索式/验收测试:围绕用户场景与边界行为
- 清单化:步骤、预置数据、期望结果、回滚方式
- 记录证据:截图/日志/请求回放,保证可追溯
2) 自动化测试
- 单元:JUnit5/Mockito;组件:Testcontainers(MySQL/Redis/Kafka)
- API/契约:Rest Assured/Pact;端到端:按关键业务链路
- 非功能:JMeter/Gatling(吞吐、P95、错误率)
3) 什么时候需要测试
- 代码变更/依赖升级/配置与灰度开关变更
- 发布前(预发布/演练)、紧急修复后(回归)、容量变化前
- 关键指标异常(监控告警)触发回归与定位
4) 测试的结果如何评定
- 覆盖率:核心模块 ≥ 70%,关键分支必测
- 契约校验:消费侧依赖 100%
- 性能:P95 ≤ 目标;错误率 ≤ 0.2%
- 可靠性:超时/重试/熔断有断言;幂等与补偿
5) 如何衡量测试的效果
- 缺陷逃逸率与修复周期(MTTR)
- 回归用例覆盖关键路径的比例
- 流水线时长与稳定性(Flaky 率)
6) 测试过程、数据分析、数据挖掘
- 过程:需求 → 用例/数据 → 执行 → 报告 → 回归
- 分析:日志/指标/链路追踪(慢查询、高错误段)
- 挖掘:聚类相似缺陷、识别高频问题模块,驱动优化
7) 接口测试(API)
- 用例编排:正常流、异常流、幂等与重放、权限边界
- 环境与数据:多环境变量、鉴权 Token、前置/后置脚本
- 断言:状态码、Schema、业务字段、契约(Pact)
- 工具:Postman/Apifox、Rest Assured、Testcontainers
8) 浏览器测试(Web/E2E)
- 定位策略:可访问性选择器,避免脆弱 XPath
- 稳定性:显式等待、网络拦截与 Mock、数据隔离
- 覆盖点:关键链路、跨浏览器、视口与国际化
- 工具:Playwright/Cypress;可配合 AI + Playwright MCP 辅助
9) 性能测试(P95/P99/SLO)
- 模型:并发/到达率、升温/恒载/冲击、思考时间
- 指标:吞吐、P95/P99、错误率、资源利用率、下游 QPS
- 断言:SLA、熔断/限流、缓存命中率
- 工具:JMeter/Gatling + Prometheus/Grafana
10) 安全测试(OWASP)
- 风险:SQL 注入、XSS、CSRF、IDOR、弱鉴权、SSRF
- 策略:最小权限、速率限制、输入校验、脱敏与审计
- 自动化:依赖/镜像漏洞扫描、SAST/DAST、Secrets 扫描
- 工具:OWASP ZAP/Burp、Trivy/Grype、Checkov/Gitleaks
🧱 测试常见阻碍(与解决思路)
- 缺乏测试环境:容器化与 IaC;Testcontainers + 脱敏快照
- 缺少测试人员:开发自测清单 + 基础自动化;培训与轮值
- 缺少测试目标:从 PRD/契约提炼验收准则,形成 DoD/验收表
- 测试耗时耗力:冒烟+关键路径优先;并行与数据工厂复用
- 回归影响原有功能:契约稳定性;特性开关/灰度;回滚预案
- 汇总:分层测试策略 + 自动化门禁 + 可观测性闭环;资产化用例/数据
🤖 AI 测试
- 生成:用例草案、边界值、Mock 数据与负面输入(人工评审与留痕)
- 辅测:日志根因聚类、相似缺陷归并、Fuzz 输入生成
- 评审:PR 变更影响面与推荐测试清单
- 度量:AI 解读覆盖率、逃逸率、P95 趋势,提示异常段
- 风险:隐私/代码出境、幻觉与可追溯性;必须引入人工把关
🔗 延展链接
- APIFOX AI 生成测试用例(可能需验证):链接
- AI + Cursor + Playwright 测试(腾讯云开发者社区):链接
- 测试技术栈(牛客):链接