name: quality-metrics description: “通过可操作的指标有效衡量质量。适用于建立质量仪表板、定义KPIs或评估测试有效性。” category: testing-methodologies priority: high tokenEstimate: 900 agents: [qe-quality-analyzer, qe-test-executor, qe-coverage-analyzer, qe-production-intelligence, qe-quality-gate] implementation_status: optimized optimization_version: 1.0 last_optimized: 2025-12-02 dependencies: [] quick_reference_card: true tags: [metrics, dora, quality-gates, dashboards, kpis, measurement] trust_tier: 3 validation: schema_path: schemas/output.json validator_path: scripts/validate-config.json eval_path: evals/quality-metrics.yaml
质量度量
<default_to_action> 衡量质量或构建仪表板时:
- 衡量结果(bug逃逸率、MTTD),而不是活动(测试数量)
- 关注DORA指标:部署频率、变更前置时间、MTTD、MTTR、变更失败率
- 避免虚荣指标:如果测试不能发现bug,100%覆盖率毫无意义
- 设置驱动行为的阈值(质量门阻挡坏代码)
- 随时间趋势:方向比绝对数字更重要
快速指标选择:
- 速度:部署频率、变更前置时间
- 稳定性:变更失败率、MTTR
- 质量:bug逃逸率、缺陷密度、测试有效性
- 流程:代码审查时间、不稳定测试率
关键成功因素:
- 没有行动的指标是作秀
- 你衡量的就是你优化的
- 趋势比快照更重要 </default_to_action>
快速参考卡片
何时使用
- 构建质量仪表板
- 定义质量门
- 评估测试有效性
- 证明质量投资合理性
有意义 vs 虚荣指标
| ✅ 有意义 | ❌ 虚荣 |
|---|---|
| Bug逃逸率 | 测试用例数量 |
| MTTD(检测) | 测试代码行数 |
| MTTR(恢复) | 测试执行次数 |
| 变更失败率 | 覆盖率%(单独) |
| 变更前置时间 | 需求追溯 |
DORA指标
| 指标 | 精英 | 高 | 中 | 低 |
|---|---|---|---|---|
| 部署频率 | 按需 | 每周 | 每月 | 每年 |
| 前置时间 | < 1 小时 | < 1 周 | < 1 个月 | > 6 个月 |
| 变更失败率 | < 5% | < 15% | < 30% | > 45% |
| MTTR | < 1 小时 | < 1 天 | < 1 周 | > 1 个月 |
质量门阈值
| 指标 | 阻塞阈值 | 警告 |
|---|---|---|
| 测试通过率 | 100% | - |
| 关键覆盖率 | > 80% | > 70% |
| 安全关键 | 0 | - |
| 性能p95 | < 200ms | < 500ms |
| 不稳定测试 | < 2% | < 5% |
核心指标
Bug逃逸率
Bug逃逸率 = (生产Bug / 总Bug发现) × 100
目标:< 10%(90%在生产前捕获)
测试有效性
测试有效性 = (测试发现的Bug / 总Bug) × 100
目标:> 70%
缺陷密度
缺陷密度 = 缺陷 / 千行代码
良好:< 每千行代码1个缺陷
平均检测时间(MTTD)
MTTD = 时间(Bug报告) - 时间(Bug引入)
目标:< 1 天(关键),< 1 周(其他)
仪表板设计
// 代理生成质量仪表板
await Task("生成仪表板", {
metrics: {
delivery: ['deployment-frequency', 'lead-time', 'change-failure-rate'],
quality: ['bug-escape-rate', 'test-effectiveness', 'defect-density'],
stability: ['mttd', 'mttr', 'availability'],
process: ['code-review-time', 'flaky-test-rate', 'coverage-trend']
},
visualization: 'grafana',
alerts: {
critical: { bug_escape_rate: '>20%', mttr: '>24h' },
warning: { coverage: '<70%', flaky_rate: '>5%' }
}
}, "qe-quality-analyzer");
质量门配置
{
"qualityGates": {
"commit": {
"coverage": { "min": 80, "blocking": true },
"lint": { "errors": 0, "blocking": true }
},
"pr": {
"tests": { "pass": "100%", "blocking": true },
"security": { "critical": 0, "blocking": true },
"coverage_delta": { "min": 0, "blocking": false }
},
"release": {
"e2e": { "pass": "100%", "blocking": true },
"performance_p95": { "max_ms": 200, "blocking": true },
"bug_escape_rate": { "max": "10%", "blocking": false }
}
}
}
代理辅助指标
// 计算质量趋势
await Task("质量趋势分析", {
timeframe: '90d',
metrics: ['bug-escape-rate', 'mttd', 'test-effectiveness'],
compare: 'previous-90d',
predictNext: '30d'
}, "qe-quality-analyzer");
// 评估质量门
await Task("质量门评估", {
buildId: 'build-123',
environment: 'staging',
metrics: currentMetrics,
policy: qualityPolicy
}, "qe-quality-gate");
代理协调提示
内存命名空间
aqe/quality-metrics/
├── dashboards/* - 仪表板配置
├── trends/* - 历史指标数据
├── gates/* - 门评估结果
└── alerts/* - 触发警报
舰队协调
const metricsFleet = await FleetManager.coordinate({
strategy: 'quality-metrics',
agents: [
'qe-quality-analyzer', // 趋势分析
'qe-test-executor', // 测试指标
'qe-coverage-analyzer', // 覆盖率数据
'qe-production-intelligence', // 生产指标
'qe-quality-gate' // 门决策
],
topology: 'mesh'
});
常见陷阱
| 陷阱 | 问题 | 解决方案 |
|---|---|---|
| 覆盖率崇拜 | 100%覆盖率,bug仍逃逸 | 测量bug逃逸率代替 |
| 测试数量焦点 | 许多测试,反馈慢 | 测量执行时间 |
| 活动指标 | 忙碌工作,无结果 | 衡量结果(MTTD、MTTR) |
| 点时间 | 无上下文的快照 | 随时间跟踪趋势 |
相关技能
- agentic-quality-engineering - 代理协调
- cicd-pipeline-qe-orchestrator - 质量门
- risk-based-testing - 基于风险的指标
- shift-right-testing - 生产指标
记住
衡量结果,而不是活动。 Bug逃逸率 > 测试数量。 MTTD/MTTR > 覆盖率%。 趋势 > 快照。 设置阻挡坏代码的门。 你衡量的就是你优化的。
与代理一起: 代理自动跟踪指标、分析趋势、触发警报并做出门决策。 使用代理保持持续质量可见性。