name: shift-left-testing description: “将测试活动提前到开发生命周期早期,以便在修复成本最低时捕获缺陷。在实施TDD、CI/CD或早期质量实践时使用。” category: testing-methodologies priority: high tokenEstimate: 900 agents: [qe-test-generator, qe-requirements-validator, qe-regression-risk-analyzer] implementation_status: optimized optimization_version: 1.0 last_optimized: 2025-12-02 dependencies: [] quick_reference_card: true tags: [shift-left, early-testing, tdd, bdd, ci-cd, prevention] trust_tier: 3 validation: schema_path: schemas/output.json validator_path: scripts/validate-config.json eval_path: evals/shift-left-testing.yaml
左移测试
<default_to_action> 实施早期测试实践时:
- 在编码前验证需求(可测试性、BDD场景)
- 在实现前编写测试(TDD红-绿-重构循环)
- 在CI流水线中自动化(每次提交触发测试)
- 遵循测试金字塔:大量单元测试(70%)、部分集成测试(20%)、少量端到端测试(10%)
- 立即修复缺陷——永不累积
快速左移级别:
- 级别1:每个PR中的单元测试(开发者责任)
- 级别2:TDD实践(测试先于代码)
- 级别3:细化中的BDD/示例映射(需求测试)
- 级别4:设计中的风险分析(架构测试)
关键成功因素:
- 在需求阶段发现的缺陷成本为1倍;在生产中为100倍
- 每次提交必须运行自动化测试
- 质量是内置的,而非测试后添加的 </default_to_action>
快速参考卡
使用时机
- 降低缺陷成本
- 实施CI/CD流水线
- 启动TDD实践
- 提高需求质量
各阶段缺陷成本
| 阶段 | 相对成本 | 示例 |
|---|---|---|
| 需求 | 1倍 | 修复文档:30分钟 |
| 设计 | 5倍 | 重新设计:几小时 |
| 开发 | 10倍 | 代码修复:1天 |
| 测试 | 20倍 | 修复+重测:2天 |
| 生产 | 100倍 | 热修复+回滚+调查 |
测试金字塔
/\ 端到端测试(10%)- 关键用户旅程
/ \
/ \ 集成测试(20%)- 组件交互
/ \
/________\ 单元测试(70%)- 快速、隔离、全面
左移级别
| 级别 | 实践 | 时机 |
|---|---|---|
| 1 | PR中的单元测试 | 合并前 |
| 2 | TDD | 实现前 |
| 3 | BDD/示例映射 | 细化期间 |
| 4 | 风险分析 | 设计期间 |
级别1:每个PR中的测试
# CI流水线 - 每次提交运行测试
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run test:unit
- run: npm run test:integration
- run: npm run lint
quality-gate:
needs: test
steps:
- name: 覆盖率检查
run: npx coverage-check --min 80
- name: 无新警告
run: npm run lint -- --max-warnings 0
级别2:TDD实践
// 红:先编写失败测试
test('计算订单超过100美元的折扣', () => {
const order = new Order([{ price: 150 }]);
expect(order.discount).toBe(15); // 10%折扣
});
// 绿:最小实现
class Order {
get discount() {
return this.total > 100 ? this.total * 0.1 : 0;
}
}
// 重构:改进并保持绿色
级别3:细化中的BDD
# 编码前的示例映射
特性:忠诚度折扣
场景:黄金会员获得15%折扣
给定一个具有“黄金”会员资格的客户
当他们结账时购物车中有200美元商品
那么应用的折扣是30美元
且订单总额是170美元
场景:新客户无折扣
给定一个无会员资格的客户
当他们结账时购物车中有200美元商品
那么无折扣应用
级别4:设计中的风险分析
// 架构评审期间
await Task("风险分析", {
phase: 'design',
component: 'payment-service',
questions: [
'支付网关超时时会发生什么?',
'我们如何处理重复提交?',
'结账期间库存变化怎么办?'
]
}, "qe-requirements-validator");
// 输出:可测试性需求、故障模式测试
智能体辅助的左移
// 验证需求可测试性
await Task("需求验证", {
requirements: userStories,
check: ['INVEST标准', '可测试性', '歧义性'],
generateBDD: true
}, "qe-requirements-validator");
// 从需求生成测试
await Task("生成测试", {
source: 'requirements',
types: ['unit', 'integration', 'e2e'],
coverage: '全面'
}, "qe-test-generator");
// 为变更智能选择回归测试
await Task("选择回归测试", {
changedFiles: prFiles,
algorithm: '基于风险',
targetReduction: 0.7 // 70%时间节省
}, "qe-regression-risk-analyzer");
智能体协调提示
内存命名空间
aqe/shift-left/
├── requirements/* - 已验证需求
├── generated-tests/* - 自动生成测试
├── coverage-targets/* - 组件覆盖率目标
└── pipeline-results/* - CI/CD测试历史
舰队协调
const shiftLeftFleet = await FleetManager.coordinate({
strategy: 'shift-left',
agents: [
'qe-requirements-validator', // 级别3-4
'qe-test-generator', // 级别2
'qe-regression-risk-analyzer' // 智能选择
],
topology: 'sequential'
});
相关技能
- tdd-london-chicago - TDD实践
- holistic-testing-pact - 主动测试
- cicd-pipeline-qe-orchestrator - 流水线集成
- shift-right-testing - 生产反馈
记住
越早越便宜。 需求缺陷成本为1倍;生产缺陷为100倍。测试金字塔:70%单元、20%集成、10%端到端。每次提交运行测试。TDD内置质量。
使用智能体: 智能体验证需求可测试性,从规范生成测试,并选择最优回归套件。使用智能体一致实施左移实践。