01 验收测试:开发团队的最后一关
验收测试是开发团队向测试团队交付产品前的最终审核。它基于预先定义好的验收标准,验证系统是否满足业务需求和技术规范。
核心区别在于执行主体:验收测试由开发团队或内部测试团队执行,UAT由最终用户或客户代表执行。
验收测试的输入包括:
- ►需求规格说明书
- ►系统设计文档
- ►验收标准清单
- ►测试用例
验收标准示例(电商系统):
text
验收项:用户注册功能
标准:
1. 注册页面加载时间<2秒
2. 支持手机号+邮箱两种方式注册
3. 密码强度校验:8-16位,包含字母+数字
4. 验证码60秒内有效
5. 注册成功后自动跳转至个人中心
验收测试用例:
python
# 验收测试脚本示例
def test_user_registration():
# 测试场景:正常注册
response = register_user("13800138000", "Test1234")
assert response.status_code == 200
assert response.json()["redirect"] == "/user/profile"
# 测试场景:密码强度不足
response = register_user("13800138000", "1234")
assert response.status_code == 400
assert "密码必须包含字母和数字" in response.text
验收测试通过率通常要求达到95%以上。未通过项必须修复并重新验证,直到满足所有标准。
验收测试不是测试的终点,而是用户测试的起点。
02 UAT:用户说了算的终极验证
用户验收测试(UAT)是软件上线前的最后一道关卡。真实用户在实际业务场景中验证系统,确保产品能解决他们的实际问题。
UAT与验收测试的10个关键差异:
| 维度 | 验收测试 | UAT |
| 执行者 | 测试工程师 | 业务用户 |
| 环境 | 测试环境 | 预生产环境 |
| 数据 | 测试数据 | 脱敏真实数据 |
| 场景 | 技术验证 | 业务流程 |
| 标准 | 技术规范 | 业务满意度 |
| 周期 | 1-2周 | 2-4周 |
| 通过率 | 95%+ | 90%+ |
| 文档 | 测试报告 | 用户签字确认 |
| 工具 | Selenium/JMeter | 手动操作 |
| 输出 | 缺陷清单 | 验收签字 |
UAT典型流程:
text
第1天:用户培训(2小时)
第2-5天:用户执行测试用例(40个场景)
第6天:问题反馈与修复
第7天:回归验证
第8天:用户签字确认
UAT测试用例示例(银行转账系统):
gherkin
场景:用户发起跨行转账
假设用户已登录个人网银
当用户选择"转账汇款"功能
并输入收款人:张三
收款银行:工商银行
转账金额:5000.00
且点击"确认转账"
那么系统显示"转账成功"
且用户收到短信通知
UAT失败率超过15%的项目,上线后用户投诉率高达73%。这是血的教训。
用户说不行,技术再好也是0。
03 为什么90%的团队搞混这两个阶段
混淆根源在于:验收测试和UAT都叫"验收",但验收的对象和标准完全不同。
案例1:某电商平台上线事故
- ►验收测试通过率98%
- ►UAT测试发现:支付流程需要5次点击,用户实际期望3次
- ►结果:上线后用户流失率飙升40%,紧急回滚
案例2:某银行系统升级
- ►开发团队认为"验收测试通过=产品合格"
- ►跳过UAT直接上线
- ►结果:柜员操作界面与原有系统不兼容,导致300家网点停工2天
- ►直接损失:员工工时费+业务损失=300万元
错误认知TOP3:
1. "验收测试做了,UAT可以省略" → 错!UAT是用户视角的最后防线
2. "UAT就是让用户点几下" → 错!UAT需要结构化测试用例
3. "用户签字=测试结束" → 错!签字确认的是业务满足度,不是技术质量
正确做法:
text
阶段1:开发自测(单元测试)→ 通过率100%
阶段2:集成测试 → 通过率95%
阶段3:系统测试 → 通过率98%
阶段4:验收测试 → 通过率95%+ 技术标准
阶段5:UAT → 通过率90%+ 业务标准
阶段6:上线
每个阶段都有独立的目标和通过标准,不能跳过或合并。
跳过UAT的项目,90%会在3个月内出现重大业务问题。
04 实战:5步搞定验收测试+UAT分离
第一步:定义验收标准(开发团队)
markdown
# 验收标准文档模板
## 功能验收
- 所有功能点覆盖需求文档
- API响应时间<500ms
- 数据库CRUD操作正确率100%
## 性能验收
- 并发用户数>=1000
- 页面加载时间<3秒
- 系统可用性>=99.9%
## 安全验收
- 无高危漏洞
- 密码加密存储
- 权限控制正确
第二步:设计UAT测试用例(业务团队)
excel
| 业务场景 | 测试步骤 | 预期结果 | 实际结果 | 用户签字 |
|---------|---------|---------|---------|---------|
| 新用户注册 | 1.输入手机号<br>2.获取验证码<br>3.设置密码 | 注册成功,进入首页 | 通过 | 张三 |
| 商品搜索 | 1.输入关键词<br>2.选择分类<br>3.查看结果 | 显示10条相关商品 | 通过 | 李四 |
第三步:环境准备
- ►验收测试环境:测试服务器,模拟数据
- ►UAT环境:预生产服务器,脱敏真实数据
- ►数据量:验收测试1000条,UAT 10000条
第四步:执行与反馈
python
# UAT问题跟踪系统接口
class UATIssueTracker:
def __init__(self):
self.issues = []
def report_issue(self, user, scenario, severity, description):
issue = {
"user": user,
"scenario": scenario,
"severity": severity, # critical/major/minor
"description": description,
"status": "open",
"timestamp": datetime.now()
}
self.issues.append(issue)
return issue
def resolve_issue(self, issue_id, fix_notes):
for issue in self.issues:
if issue.id == issue_id:
issue.status = "resolved"
issue.fix_notes = fix_notes
return True
return False
第五步:签字确认
- ►验收测试签字:测试经理
- ►UAT签字:业务负责人+用户代表
- ►双签通过才能上线
5步走完,验收测试和UAT不再混淆,上线成功率提升80%。
---
验收测试验证技术正确,UAT验证业务价值。两者缺一不可,顺序不能颠倒。
行动指南:下周开始,在你的项目中明确区分验收测试和UAT阶段,设置不同的测试用例、执行者和通过标准。用户说不行,就是不行。