name: 回归测试 description: “战略性回归测试,包含测试选择、影响分析和持续回归管理。用于验证修复不会破坏现有功能,规划回归套件,或优化测试执行以加快反馈。” category: 专项测试 priority: 高 tokenEstimate: 1000 agents: [qe-regression-risk-analyzer, qe-test-executor, qe-coverage-analyzer] implementation_status: 优化 optimization_version: 1.0 last_optimized: 2025-12-02 dependencies: [] quick_reference_card: 是 tags: [回归测试, 测试选择, 影响分析, ci-cd, 变更基础, 风险基础] trust_tier: 3 validation: schema_path: schemas/output.json validator_path: scripts/validate-config.json eval_path: evals/regression-testing.yaml
回归测试
<default_to_action> 验证更改不会破坏现有功能时:
- 分析更改内容(git diff、影响分析)
- 基于更改和风险选择测试(非全部)
- 按优先级顺序运行(冒烟测试 → 选择性测试 → 完整测试)
- 优化执行(并行、分片)
- 监控套件健康度(稳定性、执行时间)
快速回归策略:
- 每次提交:冒烟测试 + 更改代码测试(5-10分钟)
- 夜间:扩展回归测试(30-60分钟)
- 预发布:完整回归测试(2-4小时)
关键成功因素:
- 智能选择在10%时间内捕获90%的回归问题
- 不稳定的测试浪费的时间比节省的更多
- 每个生产错误都应成为回归测试 </default_to_action>
快速参考卡片
何时使用
- 任何代码更改后
- 发布前
- 依赖更新后
- 环境更改后
回归类型
| 类型 | 何时 | 范围 |
|---|---|---|
| 纠正性 | 无代码更改 | 完整套件 |
| 渐进性 | 新功能 | 现有 + 新 |
| 选择性 | 特定更改 | 更改 + 依赖 |
| 完整性 | 重大重构 | 全部 |
测试选择策略
| 策略 | 方式 | 减少量 |
|---|---|---|
| 变更基础 | Git差异分析 | 70-90% |
| 风险基础 | 按影响优先级 | 50-70% |
| 历史基础 | 频繁失败 | 40-60% |
| 时间预算 | 固定时间窗口 | 可变 |
基于更改的测试选择
// 分析更改文件并选择受影响的测试
function selectTests(changedFiles: string[]): string[] {
const testsToRun = new Set<string>();
for (const file of changedFiles) {
// 直接测试
testsToRun.add(`${file.replace('.ts', '.test.ts')}`);
// 依赖测试(通过覆盖率映射)
const dependentTests = testCoverage[file] || [];
dependentTests.forEach(t => testsToRun.add(t));
}
return Array.from(testsToRun);
}
// 示例:payment.ts 更改
// 运行:payment.test.ts, checkout.integration.test.ts, e2e/purchase.test.ts
回归套件金字塔
/\
/ \ 完整回归(每周)
/ \ - 所有测试(2-4小时)
/------\
/ \ 扩展回归(夜间)
/ \ - 单元 + 集成 + 关键端到端测试(30-60分钟)
/------------\
/ \ 快速回归(每次提交)
/________________\ - 更改代码 + 冒烟测试(5-10分钟)
CI/CD 集成
# .github/workflows/regression.yml
jobs:
quick-regression:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: 分析更改
id: changes
uses: dorny/paths-filter@v2
with:
filters: |
payment:
- 'src/payment/**'
auth:
- 'src/auth/**'
- name: 运行受影响测试
run: npm run test:affected
- name: 冒烟测试(始终运行)
run: npm run test:smoke
nightly-regression:
if: github.event_name == 'schedule'
timeout-minutes: 120
steps:
- run: npm test -- --coverage
优化技术
// 1. 并行执行
module.exports = {
maxWorkers: '50%', // 使用一半CPU核心
testTimeout: 30000
};
// 2. 跨CI工作节点分片
// npm test -- --shard=1/4
// 3. 增量测试(仅运行自上次运行以来的更改)
// 跟踪上次运行状态,跳过未更改的通过测试
// 4. 冒烟测试快速失败
// 先运行关键测试,失败时中止
智能体驱动回归
// 智能测试选择
await Task("回归分析", {
pr: 1234,
strategy: '变更基础带风险',
timeBudget: '15分钟'
}, "qe-regression-risk-analyzer");
// 返回:
// {
// mustRun: ['payment.test.ts', 'checkout.integration.test.ts'],
// shouldRun: ['order.test.ts'],
// canSkip: ['profile.test.ts', 'search.test.ts'],
// estimatedTime: '12分钟',
// riskCoverage: 0.94
// }
// 从生产错误生成回归测试
await Task("错误回归测试", {
bug: { id: 'BUG-567', description: '结算失败 > 100项' },
preventRecurrence: true
}, "qe-test-generator");
智能体协调提示
内存命名空间
aqe/regression-testing/
├── test-selection/* - 影响分析结果
├── suite-health/* - 稳定性、时间趋势
├── coverage-maps/* - 测试到代码映射
└── bug-regressions/* - 来自生产错误的测试
群组协调
const regressionFleet = await FleetManager.coordinate({
strategy: '综合回归',
agents: [
'qe-regression-risk-analyzer', // 分析更改,选择测试
'qe-test-executor', // 执行选定测试
'qe-coverage-analyzer', // 分析覆盖率缺口
'qe-quality-gate' // 通过/不通过决策
],
topology: '顺序'
});
相关技能
记住
回归测试是对抗更改的保险。 每个代码更改都是一个风险。智能回归测试通过基于更改测试重要内容来减轻风险。
良好的回归测试是战略性的,而非穷尽的。 你不能每次测试所有内容。根据更改、风险和时间预算选择。
使用智能体: qe-regression-risk-analyzer 提供智能测试选择,在10%执行时间内实现90%缺陷检测。智能体自动从生产错误生成回归测试。