agentic-qe 1.4.4 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/qe-api-contract-validator.md +133 -27
- package/.claude/agents/qe-api-contract-validator.md.backup +1148 -0
- package/.claude/agents/qe-api-contract-validator.md.backup-20251107-134747 +1148 -0
- package/.claude/agents/qe-api-contract-validator.md.backup-phase2-20251107-140039 +1123 -0
- package/.claude/agents/qe-chaos-engineer.md +142 -23
- package/.claude/agents/qe-chaos-engineer.md.backup +808 -0
- package/.claude/agents/qe-chaos-engineer.md.backup-20251107-134747 +808 -0
- package/.claude/agents/qe-chaos-engineer.md.backup-phase2-20251107-140039 +787 -0
- package/.claude/agents/qe-code-complexity.md +111 -23
- package/.claude/agents/qe-code-complexity.md.backup +291 -0
- package/.claude/agents/qe-code-complexity.md.backup-20251107-134747 +291 -0
- package/.claude/agents/qe-code-complexity.md.backup-phase2-20251107-140039 +286 -0
- package/.claude/agents/qe-coverage-analyzer.md +306 -30
- package/.claude/agents/qe-coverage-analyzer.md.backup +467 -0
- package/.claude/agents/qe-coverage-analyzer.md.backup-20251107-134747 +467 -0
- package/.claude/agents/qe-coverage-analyzer.md.backup-phase2-20251107-140039 +438 -0
- package/.claude/agents/qe-deployment-readiness.md +84 -28
- package/.claude/agents/qe-deployment-readiness.md.backup +1166 -0
- package/.claude/agents/qe-deployment-readiness.md.backup-20251107-134747 +1166 -0
- package/.claude/agents/qe-deployment-readiness.md.backup-phase2-20251107-140039 +1140 -0
- package/.claude/agents/qe-flaky-test-hunter.md +277 -35
- package/.claude/agents/qe-flaky-test-hunter.md.backup +1195 -0
- package/.claude/agents/qe-flaky-test-hunter.md.backup-20251107-134747 +1195 -0
- package/.claude/agents/qe-flaky-test-hunter.md.backup-phase2-20251107-140039 +1162 -0
- package/.claude/agents/qe-fleet-commander.md +126 -23
- package/.claude/agents/qe-fleet-commander.md.backup +718 -0
- package/.claude/agents/qe-fleet-commander.md.backup-20251107-134747 +718 -0
- package/.claude/agents/qe-fleet-commander.md.backup-phase2-20251107-140039 +697 -0
- package/.claude/agents/qe-performance-tester.md +314 -57
- package/.claude/agents/qe-performance-tester.md.backup +428 -0
- package/.claude/agents/qe-performance-tester.md.backup-20251107-134747 +428 -0
- package/.claude/agents/qe-performance-tester.md.backup-phase2-20251107-140039 +372 -0
- package/.claude/agents/qe-production-intelligence.md +126 -27
- package/.claude/agents/qe-production-intelligence.md.backup +1219 -0
- package/.claude/agents/qe-production-intelligence.md.backup-20251107-134747 +1219 -0
- package/.claude/agents/qe-production-intelligence.md.backup-phase2-20251107-140039 +1194 -0
- package/.claude/agents/qe-quality-analyzer.md +127 -32
- package/.claude/agents/qe-quality-analyzer.md.backup +425 -0
- package/.claude/agents/qe-quality-analyzer.md.backup-20251107-134747 +425 -0
- package/.claude/agents/qe-quality-analyzer.md.backup-phase2-20251107-140039 +394 -0
- package/.claude/agents/qe-quality-gate.md +148 -33
- package/.claude/agents/qe-quality-gate.md.backup +446 -0
- package/.claude/agents/qe-quality-gate.md.backup-20251107-134747 +446 -0
- package/.claude/agents/qe-quality-gate.md.backup-phase2-20251107-140039 +415 -0
- package/.claude/agents/qe-regression-risk-analyzer.md +78 -27
- package/.claude/agents/qe-regression-risk-analyzer.md.backup +1009 -0
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-20251107-134747 +1009 -0
- package/.claude/agents/qe-regression-risk-analyzer.md.backup-phase2-20251107-140039 +984 -0
- package/.claude/agents/qe-requirements-validator.md +131 -27
- package/.claude/agents/qe-requirements-validator.md.backup +748 -0
- package/.claude/agents/qe-requirements-validator.md.backup-20251107-134747 +748 -0
- package/.claude/agents/qe-requirements-validator.md.backup-phase2-20251107-140039 +723 -0
- package/.claude/agents/qe-security-scanner.md +137 -62
- package/.claude/agents/qe-security-scanner.md.backup +634 -0
- package/.claude/agents/qe-security-scanner.md.backup-20251107-134747 +634 -0
- package/.claude/agents/qe-security-scanner.md.backup-phase2-20251107-140039 +573 -0
- package/.claude/agents/qe-test-data-architect.md +129 -26
- package/.claude/agents/qe-test-data-architect.md.backup +1064 -0
- package/.claude/agents/qe-test-data-architect.md.backup-20251107-134747 +1064 -0
- package/.claude/agents/qe-test-data-architect.md.backup-phase2-20251107-140039 +1040 -0
- package/.claude/agents/qe-test-executor.md +165 -21
- package/.claude/agents/qe-test-executor.md.backup +389 -0
- package/.claude/agents/qe-test-executor.md.backup-20251107-134747 +389 -0
- package/.claude/agents/qe-test-executor.md.backup-phase2-20251107-140039 +369 -0
- package/.claude/agents/qe-test-generator.md +379 -34
- package/.claude/agents/qe-test-generator.md.backup +997 -0
- package/.claude/agents/qe-test-generator.md.backup-20251107-134747 +997 -0
- package/.claude/agents/qe-visual-tester.md +236 -23
- package/.claude/agents/qe-visual-tester.md.backup +777 -0
- package/.claude/agents/qe-visual-tester.md.backup-20251107-134747 +777 -0
- package/.claude/agents/qe-visual-tester.md.backup-phase2-20251107-140039 +756 -0
- package/.claude/agents/subagents/qe-code-reviewer.md +59 -0
- package/.claude/agents/subagents/qe-data-generator.md +60 -0
- package/.claude/agents/subagents/qe-integration-tester.md +77 -0
- package/.claude/agents/subagents/qe-performance-validator.md +55 -0
- package/.claude/agents/subagents/qe-security-auditor.md +51 -0
- package/.claude/agents/subagents/qe-test-implementer.md +371 -0
- package/.claude/agents/subagents/qe-test-refactorer.md +510 -0
- package/.claude/agents/subagents/qe-test-writer.md +603 -0
- package/.claude/skills/accessibility-testing/SKILL.md +764 -777
- package/.claude/skills/agentic-quality-engineering/SKILL.md +0 -6
- package/.claude/skills/api-testing-patterns/SKILL.md +0 -12
- package/.claude/skills/bug-reporting-excellence/SKILL.md +0 -6
- package/.claude/skills/chaos-engineering-resilience/SKILL.md +0 -6
- package/.claude/skills/code-review-quality/SKILL.md +0 -6
- package/.claude/skills/compatibility-testing/SKILL.md +0 -6
- package/.claude/skills/compliance-testing/SKILL.md +0 -6
- package/.claude/skills/consultancy-practices/SKILL.md +0 -6
- package/.claude/skills/context-driven-testing/SKILL.md +0 -6
- package/.claude/skills/contract-testing/SKILL.md +0 -6
- package/.claude/skills/database-testing/SKILL.md +0 -6
- package/.claude/skills/exploratory-testing-advanced/SKILL.md +0 -6
- package/.claude/skills/holistic-testing-pact/SKILL.md +0 -6
- package/.claude/skills/localization-testing/SKILL.md +0 -6
- package/.claude/skills/mobile-testing/SKILL.md +535 -548
- package/.claude/skills/mutation-testing/SKILL.md +0 -6
- package/.claude/skills/performance-testing/SKILL.md +0 -6
- package/.claude/skills/quality-metrics/SKILL.md +0 -12
- package/.claude/skills/refactoring-patterns/SKILL.md +0 -6
- package/.claude/skills/regression-testing/SKILL.md +1033 -1045
- package/.claude/skills/risk-based-testing/SKILL.md +0 -12
- package/.claude/skills/security-testing/SKILL.md +0 -6
- package/.claude/skills/shift-left-testing/SKILL.md +529 -535
- package/.claude/skills/shift-right-testing/SKILL.md +585 -591
- package/.claude/skills/tdd-london-chicago/SKILL.md +0 -6
- package/.claude/skills/technical-writing/SKILL.md +0 -6
- package/.claude/skills/test-automation-strategy/SKILL.md +0 -6
- package/.claude/skills/test-data-management/SKILL.md +1054 -1067
- package/.claude/skills/test-design-techniques/SKILL.md +0 -6
- package/.claude/skills/test-environment-management/SKILL.md +0 -6
- package/.claude/skills/test-reporting-analytics/SKILL.md +0 -6
- package/.claude/skills/visual-testing-advanced/SKILL.md +0 -6
- package/.claude/skills/xp-practices/SKILL.md +0 -6
- package/CHANGELOG.md +397 -5
- package/README.md +24 -19
- package/dist/cli/commands/init.d.ts +4 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +97 -44
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/mcp/handlers/coordination/index.d.ts +14 -14
- package/dist/mcp/handlers/coordination/index.d.ts.map +1 -1
- package/dist/mcp/handlers/coordination/index.js +14 -14
- package/dist/mcp/handlers/coordination/index.js.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.d.ts.map +1 -1
- package/dist/mcp/handlers/phase2/Phase2Tools.js +39 -10
- package/dist/mcp/handlers/phase2/Phase2Tools.js.map +1 -1
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts +63 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.d.ts.map +1 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js +885 -0
- package/dist/mcp/handlers/phase3/Phase3DomainTools.js.map +1 -0
- package/dist/mcp/handlers/phase3/index.d.ts +6 -0
- package/dist/mcp/handlers/phase3/index.d.ts.map +1 -0
- package/dist/mcp/handlers/phase3/index.js +10 -0
- package/dist/mcp/handlers/phase3/index.js.map +1 -0
- package/dist/mcp/handlers/prediction/index.d.ts +10 -10
- package/dist/mcp/handlers/prediction/index.d.ts.map +1 -1
- package/dist/mcp/handlers/prediction/index.js +10 -10
- package/dist/mcp/handlers/prediction/index.js.map +1 -1
- package/dist/mcp/handlers/security/check-authz.d.ts +152 -0
- package/dist/mcp/handlers/security/check-authz.d.ts.map +1 -0
- package/dist/mcp/handlers/security/check-authz.js +434 -0
- package/dist/mcp/handlers/security/check-authz.js.map +1 -0
- package/dist/mcp/handlers/security/generate-report.d.ts +156 -0
- package/dist/mcp/handlers/security/generate-report.d.ts.map +1 -0
- package/dist/mcp/handlers/security/generate-report.js +469 -0
- package/dist/mcp/handlers/security/generate-report.js.map +1 -0
- package/dist/mcp/handlers/security/index.d.ts +80 -0
- package/dist/mcp/handlers/security/index.d.ts.map +1 -0
- package/dist/mcp/handlers/security/index.js +91 -0
- package/dist/mcp/handlers/security/index.js.map +1 -0
- package/dist/mcp/handlers/security/scan-comprehensive.d.ts +66 -0
- package/dist/mcp/handlers/security/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/handlers/security/scan-comprehensive.js +296 -0
- package/dist/mcp/handlers/security/scan-comprehensive.js.map +1 -0
- package/dist/mcp/handlers/security/scan-dependencies.d.ts +148 -0
- package/dist/mcp/handlers/security/scan-dependencies.d.ts.map +1 -0
- package/dist/mcp/handlers/security/scan-dependencies.js +354 -0
- package/dist/mcp/handlers/security/scan-dependencies.js.map +1 -0
- package/dist/mcp/handlers/security/validate-auth.d.ts +128 -0
- package/dist/mcp/handlers/security/validate-auth.d.ts.map +1 -0
- package/dist/mcp/handlers/security/validate-auth.js +294 -0
- package/dist/mcp/handlers/security/validate-auth.js.map +1 -0
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts +95 -0
- package/dist/mcp/handlers/test/generate-integration-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/test/generate-integration-tests.js +286 -0
- package/dist/mcp/handlers/test/generate-integration-tests.js.map +1 -0
- package/dist/mcp/handlers/test/generate-unit-tests.d.ts +89 -0
- package/dist/mcp/handlers/test/generate-unit-tests.d.ts.map +1 -0
- package/dist/mcp/handlers/test/generate-unit-tests.js +273 -0
- package/dist/mcp/handlers/test/generate-unit-tests.js.map +1 -0
- package/dist/mcp/handlers/test/optimize-test-suite.d.ts +97 -0
- package/dist/mcp/handlers/test/optimize-test-suite.d.ts.map +1 -0
- package/dist/mcp/handlers/test/optimize-test-suite.js +282 -0
- package/dist/mcp/handlers/test/optimize-test-suite.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +211 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/deprecated.d.ts +1390 -0
- package/dist/mcp/tools/deprecated.d.ts.map +1 -0
- package/dist/mcp/tools/deprecated.js +859 -0
- package/dist/mcp/tools/deprecated.js.map +1 -0
- package/dist/mcp/tools/qe/api-contract/index.d.ts +138 -0
- package/dist/mcp/tools/qe/api-contract/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/api-contract/index.js +572 -0
- package/dist/mcp/tools/qe/api-contract/index.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts +110 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.js +381 -0
- package/dist/mcp/tools/qe/code-quality/analyze-complexity.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts +115 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js +461 -0
- package/dist/mcp/tools/qe/code-quality/calculate-quality-metrics.js.map +1 -0
- package/dist/mcp/tools/qe/code-quality/index.d.ts +12 -0
- package/dist/mcp/tools/qe/code-quality/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/code-quality/index.js +30 -0
- package/dist/mcp/tools/qe/code-quality/index.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts +58 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js +172 -0
- package/dist/mcp/tools/qe/coverage/analyze-with-risk-scoring.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts +73 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.js +240 -0
- package/dist/mcp/tools/qe/coverage/calculate-trends.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts +38 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js +204 -0
- package/dist/mcp/tools/qe/coverage/detect-gaps-ml.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/index.d.ts +12 -0
- package/dist/mcp/tools/qe/coverage/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/index.js +23 -0
- package/dist/mcp/tools/qe/coverage/index.js.map +1 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts +46 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.js +248 -0
- package/dist/mcp/tools/qe/coverage/recommend-tests.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts +179 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js +554 -0
- package/dist/mcp/tools/qe/flaky-detection/analyze-patterns.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts +172 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js +498 -0
- package/dist/mcp/tools/qe/flaky-detection/detect-statistical.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/index.d.ts +35 -0
- package/dist/mcp/tools/qe/flaky-detection/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/index.js +66 -0
- package/dist/mcp/tools/qe/flaky-detection/index.js.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts +159 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.d.ts.map +1 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js +462 -0
- package/dist/mcp/tools/qe/flaky-detection/stabilize-auto.js.map +1 -0
- package/dist/mcp/tools/qe/fleet/index.d.ts +422 -0
- package/dist/mcp/tools/qe/fleet/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/fleet/index.js +652 -0
- package/dist/mcp/tools/qe/fleet/index.js.map +1 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts +180 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js +347 -0
- package/dist/mcp/tools/qe/performance/analyze-bottlenecks.js.map +1 -0
- package/dist/mcp/tools/qe/performance/generate-report.d.ts +146 -0
- package/dist/mcp/tools/qe/performance/generate-report.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/generate-report.js +354 -0
- package/dist/mcp/tools/qe/performance/generate-report.js.map +1 -0
- package/dist/mcp/tools/qe/performance/index.d.ts +13 -0
- package/dist/mcp/tools/qe/performance/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/index.js +24 -0
- package/dist/mcp/tools/qe/performance/index.js.map +1 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts +120 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.js +215 -0
- package/dist/mcp/tools/qe/performance/monitor-realtime.js.map +1 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.d.ts +68 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.d.ts.map +1 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.js +120 -0
- package/dist/mcp/tools/qe/performance/run-benchmark.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts +239 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js +671 -0
- package/dist/mcp/tools/qe/quality-gates/assess-deployment-risk.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts +219 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js +732 -0
- package/dist/mcp/tools/qe/quality-gates/evaluate-quality-gate.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts +447 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js +551 -0
- package/dist/mcp/tools/qe/quality-gates/generate-quality-report.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/index.d.ts +40 -0
- package/dist/mcp/tools/qe/quality-gates/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/index.js +56 -0
- package/dist/mcp/tools/qe/quality-gates/index.js.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts +226 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.d.ts.map +1 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js +603 -0
- package/dist/mcp/tools/qe/quality-gates/validate-quality-metrics.js.map +1 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.d.ts +212 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.js +617 -0
- package/dist/mcp/tools/qe/regression/analyze-risk.js.map +1 -0
- package/dist/mcp/tools/qe/regression/index.d.ts +36 -0
- package/dist/mcp/tools/qe/regression/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/index.js +63 -0
- package/dist/mcp/tools/qe/regression/index.js.map +1 -0
- package/dist/mcp/tools/qe/regression/select-tests.d.ts +241 -0
- package/dist/mcp/tools/qe/regression/select-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/regression/select-tests.js +601 -0
- package/dist/mcp/tools/qe/regression/select-tests.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts +134 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js +737 -0
- package/dist/mcp/tools/qe/requirements/generate-bdd-scenarios.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/index.d.ts +40 -0
- package/dist/mcp/tools/qe/requirements/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/index.js +84 -0
- package/dist/mcp/tools/qe/requirements/index.js.map +1 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts +196 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.d.ts.map +1 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.js +740 -0
- package/dist/mcp/tools/qe/requirements/validate-requirements.js.map +1 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts +300 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.js +492 -0
- package/dist/mcp/tools/qe/security/detect-vulnerabilities.js.map +1 -0
- package/dist/mcp/tools/qe/security/index.d.ts +34 -0
- package/dist/mcp/tools/qe/security/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/index.js +44 -0
- package/dist/mcp/tools/qe/security/index.js.map +1 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts +240 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.js +535 -0
- package/dist/mcp/tools/qe/security/scan-comprehensive.js.map +1 -0
- package/dist/mcp/tools/qe/security/validate-compliance.d.ts +299 -0
- package/dist/mcp/tools/qe/security/validate-compliance.d.ts.map +1 -0
- package/dist/mcp/tools/qe/security/validate-compliance.js +517 -0
- package/dist/mcp/tools/qe/security/validate-compliance.js.map +1 -0
- package/dist/mcp/tools/qe/shared/types.d.ts +840 -0
- package/dist/mcp/tools/qe/shared/types.d.ts.map +1 -0
- package/dist/mcp/tools/qe/shared/types.js +13 -0
- package/dist/mcp/tools/qe/shared/types.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts +264 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.js +553 -0
- package/dist/mcp/tools/qe/test-data/analyze-schema.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts +167 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.js +336 -0
- package/dist/mcp/tools/qe/test-data/generate-test-data.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/index.d.ts +44 -0
- package/dist/mcp/tools/qe/test-data/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/index.js +90 -0
- package/dist/mcp/tools/qe/test-data/index.js.map +1 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts +165 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js +342 -0
- package/dist/mcp/tools/qe/test-data/mask-sensitive-data.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts +144 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js +432 -0
- package/dist/mcp/tools/qe/test-generation/analyze-test-quality.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts +98 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js +459 -0
- package/dist/mcp/tools/qe/test-generation/generate-integration-tests.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts +83 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js +483 -0
- package/dist/mcp/tools/qe/test-generation/generate-unit-tests.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/index.d.ts +56 -0
- package/dist/mcp/tools/qe/test-generation/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/index.js +97 -0
- package/dist/mcp/tools/qe/test-generation/index.js.map +1 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts +124 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.d.ts.map +1 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js +362 -0
- package/dist/mcp/tools/qe/test-generation/optimize-test-suite.js.map +1 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts +119 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.js +280 -0
- package/dist/mcp/tools/qe/visual/compare-screenshots.js.map +1 -0
- package/dist/mcp/tools/qe/visual/detect-regression.d.ts +138 -0
- package/dist/mcp/tools/qe/visual/detect-regression.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/detect-regression.js +271 -0
- package/dist/mcp/tools/qe/visual/detect-regression.js.map +1 -0
- package/dist/mcp/tools/qe/visual/index.d.ts +16 -0
- package/dist/mcp/tools/qe/visual/index.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/index.js +22 -0
- package/dist/mcp/tools/qe/visual/index.js.map +1 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts +276 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.d.ts.map +1 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.js +413 -0
- package/dist/mcp/tools/qe/visual/validate-accessibility.js.map +1 -0
- package/dist/mcp/tools.d.ts +44 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +1980 -1
- package/dist/mcp/tools.js.map +1 -1
- package/package.json +2 -2
- package/dist/learning/__mocks__/LearningEngine.d.ts +0 -39
- package/dist/learning/__mocks__/LearningEngine.d.ts.map +0 -1
- package/dist/learning/__mocks__/LearningEngine.js +0 -116
- package/dist/learning/__mocks__/LearningEngine.js.map +0 -1
- package/dist/utils/__mocks__/Database.d.ts +0 -85
- package/dist/utils/__mocks__/Database.d.ts.map +0 -1
- package/dist/utils/__mocks__/Database.js +0 -125
- package/dist/utils/__mocks__/Database.js.map +0 -1
- package/dist/utils/__mocks__/Logger.d.ts +0 -26
- package/dist/utils/__mocks__/Logger.d.ts.map +0 -1
- package/dist/utils/__mocks__/Logger.js +0 -44
- package/dist/utils/__mocks__/Logger.js.map +0 -1
|
@@ -1,1045 +1,1033 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: regression-testing
|
|
3
|
-
description: Strategic regression testing with test selection, impact analysis, and continuous regression management. Use when verifying fixes don't break existing functionality, planning regression suites, or optimizing test execution for faster feedback.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
**Strategy:**
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
**
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
-
|
|
155
|
-
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
**
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
test('
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
await
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
const
|
|
309
|
-
expect(
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
//
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
//
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
```
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
//
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
#
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
//
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
name: Regression
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
- name:
|
|
565
|
-
run: npm run
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
//
|
|
727
|
-
//
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
//
|
|
749
|
-
test('
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
//
|
|
809
|
-
//
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
//
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
//
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
//
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
});
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
//
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
}
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
//
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
//
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
//
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
//
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
}
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
//
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
//
|
|
946
|
-
//
|
|
947
|
-
//
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
**
|
|
1003
|
-
- [
|
|
1004
|
-
- [
|
|
1005
|
-
- [
|
|
1006
|
-
|
|
1007
|
-
**
|
|
1008
|
-
- [
|
|
1009
|
-
- [
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
-
|
|
1021
|
-
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
**Good regression testing is strategic, not exhaustive.**
|
|
1036
|
-
|
|
1037
|
-
You cannot test everything, every time. Smart regression testing:
|
|
1038
|
-
- Selects tests based on changes and risk
|
|
1039
|
-
- Runs fast enough for continuous feedback
|
|
1040
|
-
- Maintains reliability (no flaky tests)
|
|
1041
|
-
- Evolves with the product
|
|
1042
|
-
|
|
1043
|
-
**Perfect regression coverage is impossible. Effective regression testing is achievable.**
|
|
1044
|
-
|
|
1045
|
-
**With Agents**: Agents excel at intelligent test selection, impact analysis, automated test generation from bugs, and continuous regression monitoring. Use agents to make regression testing data-driven, efficient, and scalable.
|
|
1
|
+
---
|
|
2
|
+
name: regression-testing
|
|
3
|
+
description: Strategic regression testing with test selection, impact analysis, and continuous regression management. Use when verifying fixes don't break existing functionality, planning regression suites, or optimizing test execution for faster feedback.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Regression Testing
|
|
7
|
+
|
|
8
|
+
## Core Principle
|
|
9
|
+
|
|
10
|
+
**Every fix is a risk. Every change can break something.**
|
|
11
|
+
|
|
12
|
+
Regression testing ensures that new changes don't break existing functionality. It's not about testing everything - it's about smartly testing what matters when changes occur.
|
|
13
|
+
|
|
14
|
+
## What is Regression Testing?
|
|
15
|
+
|
|
16
|
+
**Regression:** Re-running tests after changes to verify existing functionality still works.
|
|
17
|
+
|
|
18
|
+
**Why needed:**
|
|
19
|
+
- Bug fixes can introduce new bugs
|
|
20
|
+
- New features can break old features
|
|
21
|
+
- Refactoring can change behavior
|
|
22
|
+
- Dependency updates can cause failures
|
|
23
|
+
- Environmental changes affect functionality
|
|
24
|
+
|
|
25
|
+
**Goal:** Catch unintended side effects early and cheaply.
|
|
26
|
+
|
|
27
|
+
## Types of Regression Testing
|
|
28
|
+
|
|
29
|
+
### 1. Corrective Regression (No Code Change)
|
|
30
|
+
|
|
31
|
+
**When:** No changes to code, just re-running existing tests
|
|
32
|
+
|
|
33
|
+
**Use case:**
|
|
34
|
+
- Environment change (new database version)
|
|
35
|
+
- Configuration change
|
|
36
|
+
- Infrastructure update
|
|
37
|
+
- Verifying test stability
|
|
38
|
+
|
|
39
|
+
**Strategy:** Re-run full existing test suite
|
|
40
|
+
|
|
41
|
+
**Example:**
|
|
42
|
+
```bash
|
|
43
|
+
# After upgrading Node.js from 18 to 20
|
|
44
|
+
npm test # Run all tests to ensure nothing broke
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### 2. Progressive Regression (New Features)
|
|
48
|
+
|
|
49
|
+
**When:** New features added, existing tests still valid
|
|
50
|
+
|
|
51
|
+
**Strategy:**
|
|
52
|
+
- Run existing regression suite
|
|
53
|
+
- Add new tests for new features
|
|
54
|
+
- Focus on integration points with existing code
|
|
55
|
+
|
|
56
|
+
**Example:**
|
|
57
|
+
```
|
|
58
|
+
New Feature: Social login
|
|
59
|
+
Regression Focus:
|
|
60
|
+
✓ Existing email login still works
|
|
61
|
+
✓ User profile creation unchanged
|
|
62
|
+
✓ Session management compatible
|
|
63
|
+
✓ New social login tests added
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 3. Selective Regression (Targeted Testing)
|
|
67
|
+
|
|
68
|
+
**When:** Specific modules changed, test only impacted areas
|
|
69
|
+
|
|
70
|
+
**Strategy:**
|
|
71
|
+
- Analyze code changes
|
|
72
|
+
- Identify dependent modules
|
|
73
|
+
- Run tests for changed + dependent code
|
|
74
|
+
- Skip unrelated tests
|
|
75
|
+
|
|
76
|
+
**Benefits:**
|
|
77
|
+
- Faster feedback (minutes vs hours)
|
|
78
|
+
- Resource efficient
|
|
79
|
+
- Scales to large codebases
|
|
80
|
+
|
|
81
|
+
**Example:**
|
|
82
|
+
```typescript
|
|
83
|
+
// Payment module changed
|
|
84
|
+
// Run tests for:
|
|
85
|
+
- payment.test.ts ✓
|
|
86
|
+
- checkout.test.ts ✓ (depends on payment)
|
|
87
|
+
- order-confirmation.test.ts ✓ (depends on payment)
|
|
88
|
+
// Skip unrelated:
|
|
89
|
+
- user-profile.test.ts ✗ (no dependency)
|
|
90
|
+
- search.test.ts ✗ (no dependency)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 4. Complete Regression (Full Suite)
|
|
94
|
+
|
|
95
|
+
**When:**
|
|
96
|
+
- Major refactoring
|
|
97
|
+
- Before release
|
|
98
|
+
- After significant changes
|
|
99
|
+
- Periodic confidence check
|
|
100
|
+
|
|
101
|
+
**Strategy:** Run every test in the suite
|
|
102
|
+
|
|
103
|
+
**Timing:**
|
|
104
|
+
- Nightly builds
|
|
105
|
+
- Weekly full regression
|
|
106
|
+
- Pre-release validation
|
|
107
|
+
|
|
108
|
+
### 5. Partial Regression (Risk-Based)
|
|
109
|
+
|
|
110
|
+
**When:** Time-constrained, need quick validation
|
|
111
|
+
|
|
112
|
+
**Strategy:**
|
|
113
|
+
- Run critical path tests
|
|
114
|
+
- Run high-risk area tests
|
|
115
|
+
- Run frequently failing tests
|
|
116
|
+
- Skip low-priority tests
|
|
117
|
+
|
|
118
|
+
**Example:**
|
|
119
|
+
```
|
|
120
|
+
High Priority (always run):
|
|
121
|
+
✓ Login/authentication
|
|
122
|
+
✓ Payment processing
|
|
123
|
+
✓ Data integrity checks
|
|
124
|
+
|
|
125
|
+
Medium Priority (run if time):
|
|
126
|
+
✓ User profile management
|
|
127
|
+
✓ Search functionality
|
|
128
|
+
|
|
129
|
+
Low Priority (skip in quick regression):
|
|
130
|
+
✗ Admin panel features
|
|
131
|
+
✗ Reporting dashboards
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## Test Selection Strategies
|
|
135
|
+
|
|
136
|
+
### Strategy 1: Change-Based Selection
|
|
137
|
+
|
|
138
|
+
**Analyze what changed, test accordingly**
|
|
139
|
+
|
|
140
|
+
```typescript
|
|
141
|
+
// PR changes:
|
|
142
|
+
- src/services/payment.ts
|
|
143
|
+
- src/utils/currency.ts
|
|
144
|
+
|
|
145
|
+
// Select tests covering:
|
|
146
|
+
- payment.test.ts ✓
|
|
147
|
+
- currency.test.ts ✓
|
|
148
|
+
- integration/checkout.test.ts ✓ (uses payment)
|
|
149
|
+
- e2e/purchase-flow.test.ts ✓ (exercises payment)
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**Tools:**
|
|
153
|
+
- Git diff analysis
|
|
154
|
+
- Code coverage mapping
|
|
155
|
+
- Dependency graphs
|
|
156
|
+
|
|
157
|
+
**Benefits:**
|
|
158
|
+
- Fast feedback (5-10 min vs 2 hours)
|
|
159
|
+
- 70-90% defect detection
|
|
160
|
+
- Scalable to large suites
|
|
161
|
+
|
|
162
|
+
### Strategy 2: Risk-Based Selection
|
|
163
|
+
|
|
164
|
+
**Prioritize based on failure risk and impact**
|
|
165
|
+
|
|
166
|
+
```typescript
|
|
167
|
+
Risk Score = Probability of Failure × Impact
|
|
168
|
+
|
|
169
|
+
High Risk:
|
|
170
|
+
- Payment processing (critical + complex)
|
|
171
|
+
- Authentication (critical + frequently changed)
|
|
172
|
+
- Data migration (high impact)
|
|
173
|
+
|
|
174
|
+
Medium Risk:
|
|
175
|
+
- User profile (moderate impact)
|
|
176
|
+
- Search (stable code)
|
|
177
|
+
|
|
178
|
+
Low Risk:
|
|
179
|
+
- Help documentation (low impact + stable)
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### Strategy 3: Historical Failure Analysis
|
|
183
|
+
|
|
184
|
+
**Test what breaks frequently**
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// Track test failures over last 30 days
|
|
188
|
+
const flakyTests = [
|
|
189
|
+
'checkout.test.ts - 15 failures',
|
|
190
|
+
'auth.test.ts - 12 failures',
|
|
191
|
+
'api-integration.test.ts - 8 failures'
|
|
192
|
+
];
|
|
193
|
+
|
|
194
|
+
// Always include in regression
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### Strategy 4: Code Coverage-Based
|
|
198
|
+
|
|
199
|
+
**Test code with poor existing coverage**
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
// Coverage analysis
|
|
203
|
+
payment.ts: 45% coverage → High priority for regression
|
|
204
|
+
checkout.ts: 85% coverage → Medium priority
|
|
205
|
+
utils.ts: 95% coverage → Low priority
|
|
206
|
+
|
|
207
|
+
// Focus regression on under-tested code
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Strategy 5: Time-Budget Selection
|
|
211
|
+
|
|
212
|
+
**Fixed time window, maximize value**
|
|
213
|
+
|
|
214
|
+
```typescript
|
|
215
|
+
// You have 15 minutes
|
|
216
|
+
const testPriority = [
|
|
217
|
+
{ test: 'critical-paths', time: '5 min', value: 'high' },
|
|
218
|
+
{ test: 'payment-flows', time: '3 min', value: 'high' },
|
|
219
|
+
{ test: 'auth-flows', time: '2 min', value: 'high' },
|
|
220
|
+
{ test: 'search', time: '2 min', value: 'medium' },
|
|
221
|
+
{ test: 'profiles', time: '3 min', value: 'medium' }
|
|
222
|
+
];
|
|
223
|
+
|
|
224
|
+
// Run until time budget exhausted
|
|
225
|
+
// Total: 15 min, covering all high-value tests
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Building a Regression Suite
|
|
229
|
+
|
|
230
|
+
### Phase 1: Seed with Critical Tests
|
|
231
|
+
|
|
232
|
+
Start with smoke tests - does basic functionality work?
|
|
233
|
+
|
|
234
|
+
```javascript
|
|
235
|
+
// Smoke test suite (5-10 min)
|
|
236
|
+
describe('Smoke Tests', () => {
|
|
237
|
+
test('App starts without errors', () => {
|
|
238
|
+
expect(app.isRunning()).toBe(true);
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
test('Database connection works', () => {
|
|
242
|
+
expect(db.isConnected()).toBe(true);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
test('Critical API endpoints respond', () => {
|
|
246
|
+
expect(api.health()).toBe('OK');
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
test('User can login', () => {
|
|
250
|
+
login('test@example.com', 'password');
|
|
251
|
+
expect(session.isActive()).toBe(true);
|
|
252
|
+
});
|
|
253
|
+
});
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
### Phase 2: Add Happy Path Tests
|
|
257
|
+
|
|
258
|
+
Cover main user workflows end-to-end.
|
|
259
|
+
|
|
260
|
+
```javascript
|
|
261
|
+
// Happy path suite (20-30 min)
|
|
262
|
+
describe('Core User Journeys', () => {
|
|
263
|
+
test('User can sign up and verify email', async () => {
|
|
264
|
+
await signup('new@example.com', 'SecurePass123!');
|
|
265
|
+
const email = await getLatestEmail('new@example.com');
|
|
266
|
+
await verifyEmail(email.verificationLink);
|
|
267
|
+
expect(user.isVerified()).toBe(true);
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
test('User can complete purchase', async () => {
|
|
271
|
+
await login();
|
|
272
|
+
await addToCart(product);
|
|
273
|
+
await checkout();
|
|
274
|
+
await submitPayment(validCard);
|
|
275
|
+
expect(order.status()).toBe('completed');
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Phase 3: Add Edge Cases and Error Scenarios
|
|
281
|
+
|
|
282
|
+
```javascript
|
|
283
|
+
// Edge case suite (30-45 min)
|
|
284
|
+
describe('Edge Cases', () => {
|
|
285
|
+
test('Handles expired credit card', async () => {
|
|
286
|
+
await checkout();
|
|
287
|
+
await submitPayment(expiredCard);
|
|
288
|
+
expect(error.message()).toContain('Card expired');
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
test('Handles concurrent checkout attempts', async () => {
|
|
292
|
+
const promises = [
|
|
293
|
+
checkout(user1),
|
|
294
|
+
checkout(user1) // Same user, same time
|
|
295
|
+
];
|
|
296
|
+
const results = await Promise.all(promises);
|
|
297
|
+
expect(results.filter(r => r.success).length).toBe(1);
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### Phase 4: Add Integration Tests
|
|
303
|
+
|
|
304
|
+
```javascript
|
|
305
|
+
// Integration suite (45-60 min)
|
|
306
|
+
describe('System Integration', () => {
|
|
307
|
+
test('Payment gateway integration works', async () => {
|
|
308
|
+
const result = await paymentGateway.charge(card, amount);
|
|
309
|
+
expect(result.status).toBe('succeeded');
|
|
310
|
+
expect(db.transaction).toHaveBeenRecorded();
|
|
311
|
+
expect(email.receipt).toHaveBeenSent();
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
test('Inventory sync with warehouse', async () => {
|
|
315
|
+
await purchaseProduct(product);
|
|
316
|
+
const inventory = await warehouse.checkStock(product.id);
|
|
317
|
+
expect(inventory.quantity).toBe(originalQuantity - 1);
|
|
318
|
+
});
|
|
319
|
+
});
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Regression Suite Pyramid
|
|
323
|
+
|
|
324
|
+
```
|
|
325
|
+
/\
|
|
326
|
+
/ \ Full Regression (weekly)
|
|
327
|
+
/ \ - All tests (2-4 hours)
|
|
328
|
+
/------\
|
|
329
|
+
/ \ Extended Regression (nightly)
|
|
330
|
+
/ \ - All unit + integration + critical E2E (30-60 min)
|
|
331
|
+
/------------\
|
|
332
|
+
/ \ Quick Regression (per commit)
|
|
333
|
+
/________________\ - Changed code tests + smoke tests (5-10 min)
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
## Test Impact Analysis
|
|
337
|
+
|
|
338
|
+
### Mapping Tests to Code
|
|
339
|
+
|
|
340
|
+
**Build dependency graph:**
|
|
341
|
+
|
|
342
|
+
```typescript
|
|
343
|
+
// Track which tests cover which code
|
|
344
|
+
const testCoverage = {
|
|
345
|
+
'payment.ts': [
|
|
346
|
+
'payment.test.ts',
|
|
347
|
+
'checkout.integration.test.ts',
|
|
348
|
+
'e2e/purchase.test.ts'
|
|
349
|
+
],
|
|
350
|
+
'user.ts': [
|
|
351
|
+
'user.test.ts',
|
|
352
|
+
'auth.integration.test.ts',
|
|
353
|
+
'e2e/signup.test.ts'
|
|
354
|
+
]
|
|
355
|
+
};
|
|
356
|
+
|
|
357
|
+
// When payment.ts changes, run all related tests
|
|
358
|
+
function selectTests(changedFiles) {
|
|
359
|
+
const testsToRun = new Set();
|
|
360
|
+
changedFiles.forEach(file => {
|
|
361
|
+
testCoverage[file]?.forEach(test => testsToRun.add(test));
|
|
362
|
+
});
|
|
363
|
+
return Array.from(testsToRun);
|
|
364
|
+
}
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
### Transitive Dependencies
|
|
368
|
+
|
|
369
|
+
**Account for indirect dependencies:**
|
|
370
|
+
|
|
371
|
+
```typescript
|
|
372
|
+
// Direct dependency
|
|
373
|
+
payment.ts → uses → currency.ts
|
|
374
|
+
|
|
375
|
+
// Transitive dependency
|
|
376
|
+
checkout.ts → uses → payment.ts → uses → currency.ts
|
|
377
|
+
|
|
378
|
+
// When currency.ts changes, test:
|
|
379
|
+
- currency.test.ts (direct)
|
|
380
|
+
- payment.test.ts (direct dependency on currency)
|
|
381
|
+
- checkout.test.ts (transitive dependency)
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### Static Analysis for Test Selection
|
|
385
|
+
|
|
386
|
+
```typescript
|
|
387
|
+
// Analyze imports to build dependency graph
|
|
388
|
+
import ts from 'typescript';
|
|
389
|
+
|
|
390
|
+
function findDependencies(sourceFile: string): string[] {
|
|
391
|
+
const program = ts.createProgram([sourceFile], {});
|
|
392
|
+
const checker = program.getTypeChecker();
|
|
393
|
+
|
|
394
|
+
// Extract all imports
|
|
395
|
+
const dependencies = [];
|
|
396
|
+
const sourceFileObj = program.getSourceFile(sourceFile);
|
|
397
|
+
|
|
398
|
+
ts.forEachChild(sourceFileObj, node => {
|
|
399
|
+
if (ts.isImportDeclaration(node)) {
|
|
400
|
+
dependencies.push(node.moduleSpecifier.text);
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
|
|
404
|
+
return dependencies;
|
|
405
|
+
}
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
## Regression Test Optimization
|
|
409
|
+
|
|
410
|
+
### Technique 1: Test Parallelization
|
|
411
|
+
|
|
412
|
+
**Run tests concurrently for faster feedback**
|
|
413
|
+
|
|
414
|
+
```javascript
|
|
415
|
+
// Sequential: 60 min
|
|
416
|
+
test1(); // 20 min
|
|
417
|
+
test2(); // 20 min
|
|
418
|
+
test3(); // 20 min
|
|
419
|
+
|
|
420
|
+
// Parallel: 20 min
|
|
421
|
+
Promise.all([
|
|
422
|
+
test1(), // 20 min
|
|
423
|
+
test2(), // 20 min
|
|
424
|
+
test3() // 20 min
|
|
425
|
+
]);
|
|
426
|
+
|
|
427
|
+
// Jest configuration
|
|
428
|
+
module.exports = {
|
|
429
|
+
maxWorkers: '50%', // Use half CPU cores
|
|
430
|
+
testTimeout: 30000
|
|
431
|
+
};
|
|
432
|
+
```
|
|
433
|
+
|
|
434
|
+
### Technique 2: Test Sharding
|
|
435
|
+
|
|
436
|
+
**Distribute tests across multiple machines**
|
|
437
|
+
|
|
438
|
+
```yaml
|
|
439
|
+
# CI pipeline with 4 workers
|
|
440
|
+
jobs:
|
|
441
|
+
test:
|
|
442
|
+
strategy:
|
|
443
|
+
matrix:
|
|
444
|
+
shard: [1, 2, 3, 4]
|
|
445
|
+
steps:
|
|
446
|
+
- run: npm test -- --shard=${{ matrix.shard }}/4
|
|
447
|
+
|
|
448
|
+
# Each worker runs 25% of tests
|
|
449
|
+
# Total time: 60 min / 4 = 15 min
|
|
450
|
+
```
|
|
451
|
+
|
|
452
|
+
### Technique 3: Incremental Testing
|
|
453
|
+
|
|
454
|
+
**Test only what changed since last run**
|
|
455
|
+
|
|
456
|
+
```typescript
|
|
457
|
+
// Track test results
|
|
458
|
+
const lastRun = {
|
|
459
|
+
timestamp: '2025-10-24T10:00:00Z',
|
|
460
|
+
passed: ['test1', 'test2', 'test3'],
|
|
461
|
+
failed: []
|
|
462
|
+
};
|
|
463
|
+
|
|
464
|
+
// Current run
|
|
465
|
+
const currentChanges = ['payment.ts', 'checkout.ts'];
|
|
466
|
+
|
|
467
|
+
// Run:
|
|
468
|
+
// 1. Tests for changed code (payment, checkout)
|
|
469
|
+
// 2. Tests that failed last time (if any)
|
|
470
|
+
// Skip tests that passed last time for unchanged code
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
### Technique 4: Smoke Test Fast Fail
|
|
474
|
+
|
|
475
|
+
**Run fastest, most critical tests first**
|
|
476
|
+
|
|
477
|
+
```yaml
|
|
478
|
+
# CI Pipeline
|
|
479
|
+
stages:
|
|
480
|
+
- smoke-test: # 2 min
|
|
481
|
+
- critical-paths
|
|
482
|
+
- fail-fast: true # Stop if smoke fails
|
|
483
|
+
|
|
484
|
+
- quick-regression: # 10 min
|
|
485
|
+
- changed-code-tests
|
|
486
|
+
- fail-fast: true
|
|
487
|
+
|
|
488
|
+
- full-regression: # 60 min
|
|
489
|
+
- all-tests
|
|
490
|
+
- fail-fast: false # Run all to find all issues
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
### Technique 5: Test Flakiness Removal
|
|
494
|
+
|
|
495
|
+
**Eliminate unreliable tests**
|
|
496
|
+
|
|
497
|
+
```typescript
|
|
498
|
+
// Track test stability over 100 runs
|
|
499
|
+
const testStability = {
|
|
500
|
+
'reliable-test': { runs: 100, passes: 100, passRate: 1.00 },
|
|
501
|
+
'flaky-test': { runs: 100, passes: 87, passRate: 0.87 },
|
|
502
|
+
'unstable-test': { runs: 100, passes: 64, passRate: 0.64 }
|
|
503
|
+
};
|
|
504
|
+
|
|
505
|
+
// Strategy:
|
|
506
|
+
// passRate >= 0.98 → Keep in regression suite
|
|
507
|
+
// passRate 0.90-0.98 → Fix flakiness
|
|
508
|
+
// passRate < 0.90 → Quarantine until fixed
|
|
509
|
+
|
|
510
|
+
// Flaky tests waste time and reduce confidence
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
## Continuous Regression Testing
|
|
514
|
+
|
|
515
|
+
### Regression in CI/CD Pipeline
|
|
516
|
+
|
|
517
|
+
```yaml
|
|
518
|
+
# .github/workflows/regression.yml
|
|
519
|
+
name: Regression Testing
|
|
520
|
+
|
|
521
|
+
on:
|
|
522
|
+
pull_request:
|
|
523
|
+
branches: [main]
|
|
524
|
+
push:
|
|
525
|
+
branches: [main]
|
|
526
|
+
schedule:
|
|
527
|
+
- cron: '0 2 * * *' # Nightly at 2 AM
|
|
528
|
+
|
|
529
|
+
jobs:
|
|
530
|
+
quick-regression:
|
|
531
|
+
name: Quick Regression (per PR)
|
|
532
|
+
runs-on: ubuntu-latest
|
|
533
|
+
timeout-minutes: 15
|
|
534
|
+
steps:
|
|
535
|
+
- uses: actions/checkout@v3
|
|
536
|
+
- name: Changed file analysis
|
|
537
|
+
id: changes
|
|
538
|
+
uses: dorny/paths-filter@v2
|
|
539
|
+
with:
|
|
540
|
+
filters: |
|
|
541
|
+
payment:
|
|
542
|
+
- 'src/payment/**'
|
|
543
|
+
auth:
|
|
544
|
+
- 'src/auth/**'
|
|
545
|
+
|
|
546
|
+
- name: Run affected tests
|
|
547
|
+
run: |
|
|
548
|
+
npm run test:payment
|
|
549
|
+
npm run test:auth
|
|
550
|
+
if: steps.changes.outputs.payment == 'true' || steps.changes.outputs.auth == 'true'
|
|
551
|
+
|
|
552
|
+
- name: Smoke tests (always)
|
|
553
|
+
run: npm run test:smoke
|
|
554
|
+
|
|
555
|
+
nightly-regression:
|
|
556
|
+
name: Nightly Full Regression
|
|
557
|
+
runs-on: ubuntu-latest
|
|
558
|
+
timeout-minutes: 120
|
|
559
|
+
if: github.event_name == 'schedule'
|
|
560
|
+
steps:
|
|
561
|
+
- name: Run all tests
|
|
562
|
+
run: npm test
|
|
563
|
+
|
|
564
|
+
- name: Coverage report
|
|
565
|
+
run: npm run coverage
|
|
566
|
+
|
|
567
|
+
- name: Upload results
|
|
568
|
+
uses: actions/upload-artifact@v3
|
|
569
|
+
with:
|
|
570
|
+
name: regression-results
|
|
571
|
+
path: test-results/
|
|
572
|
+
```
|
|
573
|
+
|
|
574
|
+
### Pre-Commit Regression
|
|
575
|
+
|
|
576
|
+
**Local regression before committing**
|
|
577
|
+
|
|
578
|
+
```bash
|
|
579
|
+
# .git/hooks/pre-commit
|
|
580
|
+
#!/bin/bash
|
|
581
|
+
|
|
582
|
+
echo "Running quick regression tests..."
|
|
583
|
+
|
|
584
|
+
# Get staged files
|
|
585
|
+
STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep ".ts$")
|
|
586
|
+
|
|
587
|
+
if [ -z "$STAGED_FILES" ]; then
|
|
588
|
+
echo "No TypeScript files changed, skipping tests"
|
|
589
|
+
exit 0
|
|
590
|
+
fi
|
|
591
|
+
|
|
592
|
+
# Run tests for changed files
|
|
593
|
+
npm run test:changed -- $STAGED_FILES
|
|
594
|
+
|
|
595
|
+
if [ $? -ne 0 ]; then
|
|
596
|
+
echo "❌ Regression tests failed. Commit aborted."
|
|
597
|
+
exit 1
|
|
598
|
+
fi
|
|
599
|
+
|
|
600
|
+
echo "✅ Regression tests passed"
|
|
601
|
+
exit 0
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
### Pre-Deployment Regression
|
|
605
|
+
|
|
606
|
+
**Final validation before production**
|
|
607
|
+
|
|
608
|
+
```yaml
|
|
609
|
+
# Deployment pipeline
|
|
610
|
+
deploy:
|
|
611
|
+
steps:
|
|
612
|
+
- name: Production smoke tests
|
|
613
|
+
run: npm run test:smoke:production
|
|
614
|
+
env:
|
|
615
|
+
API_URL: https://staging.example.com
|
|
616
|
+
|
|
617
|
+
- name: Critical path regression
|
|
618
|
+
run: npm run test:critical-paths
|
|
619
|
+
|
|
620
|
+
- name: Security regression
|
|
621
|
+
run: npm run test:security
|
|
622
|
+
|
|
623
|
+
- name: Performance baseline check
|
|
624
|
+
run: npm run test:performance
|
|
625
|
+
|
|
626
|
+
- name: Deploy to production
|
|
627
|
+
if: success()
|
|
628
|
+
run: ./deploy.sh production
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
## Regression Test Maintenance
|
|
632
|
+
|
|
633
|
+
### Anti-Pattern: Test Rot
|
|
634
|
+
|
|
635
|
+
**Problem:** Tests become outdated, irrelevant, or broken
|
|
636
|
+
|
|
637
|
+
```javascript
|
|
638
|
+
// BAD: Outdated test
|
|
639
|
+
test('User can pay with PayPal', () => {
|
|
640
|
+
// PayPal integration removed 6 months ago
|
|
641
|
+
// Test still exists but is meaningless
|
|
642
|
+
});
|
|
643
|
+
|
|
644
|
+
// GOOD: Remove obsolete tests
|
|
645
|
+
// Delete test when feature is removed
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
### Strategy: Regular Test Review
|
|
649
|
+
|
|
650
|
+
```markdown
|
|
651
|
+
## Quarterly Test Audit
|
|
652
|
+
|
|
653
|
+
Review each test:
|
|
654
|
+
- [ ] Is feature still in product?
|
|
655
|
+
- [ ] Does test provide value?
|
|
656
|
+
- [ ] Is test reliable (not flaky)?
|
|
657
|
+
- [ ] Is test documented/understandable?
|
|
658
|
+
- [ ] Execution time acceptable?
|
|
659
|
+
|
|
660
|
+
Actions:
|
|
661
|
+
- Delete: Obsolete tests
|
|
662
|
+
- Fix: Flaky tests
|
|
663
|
+
- Optimize: Slow tests
|
|
664
|
+
- Document: Unclear tests
|
|
665
|
+
- Consolidate: Duplicate tests
|
|
666
|
+
```
|
|
667
|
+
|
|
668
|
+
### Strategy: Test Suite Metrics
|
|
669
|
+
|
|
670
|
+
```typescript
|
|
671
|
+
interface TestSuiteHealth {
|
|
672
|
+
totalTests: number;
|
|
673
|
+
executionTime: string;
|
|
674
|
+
passRate: number;
|
|
675
|
+
flakiness: number;
|
|
676
|
+
coverage: number;
|
|
677
|
+
lastUpdated: Date;
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
const regressionHealth: TestSuiteHealth = {
|
|
681
|
+
totalTests: 1247,
|
|
682
|
+
executionTime: '18 min',
|
|
683
|
+
passRate: 0.987, // 98.7% pass rate
|
|
684
|
+
flakiness: 0.013, // 1.3% flaky tests (target: <2%)
|
|
685
|
+
coverage: 0.82, // 82% code coverage
|
|
686
|
+
lastUpdated: new Date('2025-10-24')
|
|
687
|
+
};
|
|
688
|
+
|
|
689
|
+
// Track over time
|
|
690
|
+
// Trend: execution time ↑ → need optimization
|
|
691
|
+
// Trend: flakiness ↑ → need stabilization
|
|
692
|
+
// Trend: coverage ↓ → add tests for new code
|
|
693
|
+
```
|
|
694
|
+
|
|
695
|
+
### Strategy: Test Ownership
|
|
696
|
+
|
|
697
|
+
```typescript
|
|
698
|
+
// tests/payment/checkout.test.ts
|
|
699
|
+
/**
|
|
700
|
+
* @owner team-payments
|
|
701
|
+
* @created 2025-06-15
|
|
702
|
+
* @criticality high
|
|
703
|
+
* @executionTime 45s
|
|
704
|
+
* @lastReview 2025-09-20
|
|
705
|
+
*
|
|
706
|
+
* Tests the complete checkout flow including:
|
|
707
|
+
* - Cart validation
|
|
708
|
+
* - Payment processing
|
|
709
|
+
* - Order confirmation
|
|
710
|
+
* - Email receipt
|
|
711
|
+
*/
|
|
712
|
+
|
|
713
|
+
// Benefits:
|
|
714
|
+
// - Clear responsibility for maintenance
|
|
715
|
+
// - Context for why test exists
|
|
716
|
+
// - Trigger for regular review
|
|
717
|
+
```
|
|
718
|
+
|
|
719
|
+
## Regression Testing Best Practices
|
|
720
|
+
|
|
721
|
+
### ✅ DO: Automate Regression Tests
|
|
722
|
+
|
|
723
|
+
**Manual regression doesn't scale**
|
|
724
|
+
|
|
725
|
+
```typescript
|
|
726
|
+
// Automated regression runs on every PR
|
|
727
|
+
// Catches issues in minutes, not days
|
|
728
|
+
```
|
|
729
|
+
|
|
730
|
+
### ✅ DO: Use Descriptive Test Names
|
|
731
|
+
|
|
732
|
+
```javascript
|
|
733
|
+
// BAD
|
|
734
|
+
test('test1', () => { ... });
|
|
735
|
+
|
|
736
|
+
// GOOD
|
|
737
|
+
test('checkout fails gracefully when payment gateway is down', () => {
|
|
738
|
+
mockPaymentGateway.simulateOutage();
|
|
739
|
+
const result = await checkout(cart);
|
|
740
|
+
expect(result.status).toBe('payment-failed');
|
|
741
|
+
expect(result.userMessage).toContain('payment service unavailable');
|
|
742
|
+
});
|
|
743
|
+
```
|
|
744
|
+
|
|
745
|
+
### ✅ DO: Keep Tests Independent
|
|
746
|
+
|
|
747
|
+
```javascript
|
|
748
|
+
// BAD: Tests depend on execution order
|
|
749
|
+
test('create user', () => {
|
|
750
|
+
user = createUser('test@example.com');
|
|
751
|
+
});
|
|
752
|
+
|
|
753
|
+
test('user can login', () => {
|
|
754
|
+
login(user); // Fails if previous test didn't run
|
|
755
|
+
});
|
|
756
|
+
|
|
757
|
+
// GOOD: Each test independent
|
|
758
|
+
test('user can login', () => {
|
|
759
|
+
const user = createUser('test@example.com'); // Setup in test
|
|
760
|
+
login(user);
|
|
761
|
+
expect(session.isActive()).toBe(true);
|
|
762
|
+
});
|
|
763
|
+
```
|
|
764
|
+
|
|
765
|
+
### ✅ DO: Use Setup/Teardown
|
|
766
|
+
|
|
767
|
+
```javascript
|
|
768
|
+
describe('Payment Tests', () => {
|
|
769
|
+
beforeEach(async () => {
|
|
770
|
+
// Clean slate for each test
|
|
771
|
+
await db.clean();
|
|
772
|
+
await db.seed(testData);
|
|
773
|
+
});
|
|
774
|
+
|
|
775
|
+
afterEach(async () => {
|
|
776
|
+
// Cleanup
|
|
777
|
+
await db.clean();
|
|
778
|
+
});
|
|
779
|
+
|
|
780
|
+
test('payment succeeds with valid card', async () => {
|
|
781
|
+
// Test has clean environment
|
|
782
|
+
});
|
|
783
|
+
});
|
|
784
|
+
```
|
|
785
|
+
|
|
786
|
+
### ❌ DON'T: Test Everything, Every Time
|
|
787
|
+
|
|
788
|
+
```typescript
|
|
789
|
+
// DON'T run 4-hour full regression on every commit
|
|
790
|
+
// DO run smart selection based on changes
|
|
791
|
+
```
|
|
792
|
+
|
|
793
|
+
### ❌ DON'T: Ignore Flaky Tests
|
|
794
|
+
|
|
795
|
+
```typescript
|
|
796
|
+
// DON'T keep flaky tests and ignore failures
|
|
797
|
+
// DO fix or quarantine flaky tests immediately
|
|
798
|
+
```
|
|
799
|
+
|
|
800
|
+
### ❌ DON'T: Duplicate Test Coverage
|
|
801
|
+
|
|
802
|
+
```typescript
|
|
803
|
+
// DON'T test same thing at multiple levels
|
|
804
|
+
// Unit test: currency conversion logic
|
|
805
|
+
// Integration test: currency conversion in payment
|
|
806
|
+
// E2E test: full purchase with currency conversion
|
|
807
|
+
|
|
808
|
+
// DO test each concern at appropriate level
|
|
809
|
+
// Unit: Conversion logic
|
|
810
|
+
// Integration: Payment service uses conversion correctly
|
|
811
|
+
// E2E: Happy path only (one currency conversion example)
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
## Using with QE Agents
|
|
815
|
+
|
|
816
|
+
### Intelligent Test Selection
|
|
817
|
+
|
|
818
|
+
**qe-regression-risk-analyzer** performs smart test selection:
|
|
819
|
+
|
|
820
|
+
```typescript
|
|
821
|
+
// Analyze PR for regression risk
|
|
822
|
+
const analysis = await agent.analyzeRegressionRisk({
|
|
823
|
+
pr: 1234,
|
|
824
|
+
strategy: 'change-based-with-risk',
|
|
825
|
+
timebudget: '15min'
|
|
826
|
+
});
|
|
827
|
+
|
|
828
|
+
// Returns:
|
|
829
|
+
// {
|
|
830
|
+
// mustRun: ['payment.test.ts', 'checkout.integration.test.ts'],
|
|
831
|
+
// shouldRun: ['order.test.ts', 'inventory.test.ts'],
|
|
832
|
+
// canSkip: ['profile.test.ts', 'search.test.ts'],
|
|
833
|
+
// estimatedTime: '12 min',
|
|
834
|
+
// riskCoverage: 0.94
|
|
835
|
+
// }
|
|
836
|
+
```
|
|
837
|
+
|
|
838
|
+
### Automated Test Generation for Regression
|
|
839
|
+
|
|
840
|
+
**qe-test-generator** creates regression tests from bugs:
|
|
841
|
+
|
|
842
|
+
```typescript
|
|
843
|
+
// Bug found in production
|
|
844
|
+
const bug = {
|
|
845
|
+
id: 'BUG-567',
|
|
846
|
+
description: 'Checkout fails when user has > 100 items in cart',
|
|
847
|
+
severity: 'high'
|
|
848
|
+
};
|
|
849
|
+
|
|
850
|
+
// Agent generates regression test
|
|
851
|
+
await agent.generateRegressionTest({
|
|
852
|
+
bug: bug,
|
|
853
|
+
preventRecurrence: true
|
|
854
|
+
});
|
|
855
|
+
|
|
856
|
+
// Creates:
|
|
857
|
+
// tests/regression/BUG-567-large-cart.test.ts
|
|
858
|
+
test('checkout succeeds with 100+ items in cart', async () => {
|
|
859
|
+
const cart = generateCart(150); // Edge case that failed
|
|
860
|
+
const result = await checkout(cart);
|
|
861
|
+
expect(result.status).toBe('success');
|
|
862
|
+
});
|
|
863
|
+
```
|
|
864
|
+
|
|
865
|
+
### Continuous Regression Monitoring
|
|
866
|
+
|
|
867
|
+
**qe-quality-analyzer** tracks regression suite health:
|
|
868
|
+
|
|
869
|
+
```typescript
|
|
870
|
+
// Monitor regression suite metrics
|
|
871
|
+
const health = await agent.analyzeRegressionHealth({
|
|
872
|
+
suite: 'main-regression',
|
|
873
|
+
period: '30d'
|
|
874
|
+
});
|
|
875
|
+
|
|
876
|
+
// Returns insights:
|
|
877
|
+
// {
|
|
878
|
+
// executionTimeTrend: 'increasing', // ⚠️ Getting slower
|
|
879
|
+
// flakinessRate: 0.03, // ⚠️ Above 2% threshold
|
|
880
|
+
// coverageTrend: 'stable', // ✅ Maintaining coverage
|
|
881
|
+
// recommendations: [
|
|
882
|
+
// 'Parallelize slow tests',
|
|
883
|
+
// 'Fix 12 flaky tests',
|
|
884
|
+
// 'Remove 5 obsolete tests'
|
|
885
|
+
// ]
|
|
886
|
+
// }
|
|
887
|
+
```
|
|
888
|
+
|
|
889
|
+
### Regression Testing in CI/CD
|
|
890
|
+
|
|
891
|
+
**qe-test-executor** orchestrates regression runs:
|
|
892
|
+
|
|
893
|
+
```typescript
|
|
894
|
+
// Execute smart regression in CI pipeline
|
|
895
|
+
await agent.executeRegression({
|
|
896
|
+
trigger: 'pull-request',
|
|
897
|
+
strategy: 'selective',
|
|
898
|
+
changedFiles: ['src/payment/stripe.ts', 'src/models/order.ts'],
|
|
899
|
+
parallel: true,
|
|
900
|
+
failFast: false
|
|
901
|
+
});
|
|
902
|
+
|
|
903
|
+
// Execution plan:
|
|
904
|
+
// 1. Analyze changed files
|
|
905
|
+
// 2. Select impacted tests (change-based)
|
|
906
|
+
// 3. Add critical path tests (risk-based)
|
|
907
|
+
// 4. Run in parallel across 4 workers
|
|
908
|
+
// 5. Report results with coverage metrics
|
|
909
|
+
```
|
|
910
|
+
|
|
911
|
+
### Visual Regression Testing
|
|
912
|
+
|
|
913
|
+
**qe-visual-tester** catches UI regressions:
|
|
914
|
+
|
|
915
|
+
```typescript
|
|
916
|
+
// Detect visual changes after code update
|
|
917
|
+
await agent.visualRegression({
|
|
918
|
+
baseline: 'main-branch',
|
|
919
|
+
current: 'feature-branch',
|
|
920
|
+
pages: ['checkout', 'product-detail', 'cart'],
|
|
921
|
+
threshold: 0.01 // 1% pixel difference tolerance
|
|
922
|
+
});
|
|
923
|
+
|
|
924
|
+
// Returns:
|
|
925
|
+
// {
|
|
926
|
+
// changed: ['checkout-page'],
|
|
927
|
+
// diff: {
|
|
928
|
+
// 'checkout-page': {
|
|
929
|
+
// pixelDifference: 234,
|
|
930
|
+
// percentageChange: 0.023,
|
|
931
|
+
// screenshot: 'diff-checkout.png',
|
|
932
|
+
// verdict: 'review-required'
|
|
933
|
+
// }
|
|
934
|
+
// }
|
|
935
|
+
// }
|
|
936
|
+
```
|
|
937
|
+
|
|
938
|
+
### Fleet-Coordinated Regression
|
|
939
|
+
|
|
940
|
+
```typescript
|
|
941
|
+
// Multiple agents collaborate on regression testing
|
|
942
|
+
const regressionFleet = await FleetManager.coordinate({
|
|
943
|
+
strategy: 'comprehensive-regression',
|
|
944
|
+
agents: [
|
|
945
|
+
'qe-regression-risk-analyzer', // 1. Analyze changes, select tests
|
|
946
|
+
'qe-test-generator', // 2. Generate missing regression tests
|
|
947
|
+
'qe-test-executor', // 3. Execute selected tests
|
|
948
|
+
'qe-coverage-analyzer', // 4. Analyze coverage gaps
|
|
949
|
+
'qe-visual-tester', // 5. Check visual regressions
|
|
950
|
+
'qe-quality-gate' // 6. Make GO/NO-GO decision
|
|
951
|
+
],
|
|
952
|
+
topology: 'sequential'
|
|
953
|
+
});
|
|
954
|
+
|
|
955
|
+
// Execute full regression workflow
|
|
956
|
+
const result = await regressionFleet.execute({
|
|
957
|
+
pr: 1234,
|
|
958
|
+
release: 'v3.2.0',
|
|
959
|
+
riskTolerance: 'low'
|
|
960
|
+
});
|
|
961
|
+
|
|
962
|
+
// Returns comprehensive regression report
|
|
963
|
+
```
|
|
964
|
+
|
|
965
|
+
### Production Regression Detection
|
|
966
|
+
|
|
967
|
+
**qe-production-intelligence** detects regressions in production:
|
|
968
|
+
|
|
969
|
+
```typescript
|
|
970
|
+
// Monitor production for regression signals
|
|
971
|
+
await agent.detectProductionRegression({
|
|
972
|
+
baseline: 'v3.1.0',
|
|
973
|
+
current: 'v3.2.0',
|
|
974
|
+
metrics: ['error-rate', 'latency', 'conversion'],
|
|
975
|
+
alertThreshold: 0.1 // 10% degradation
|
|
976
|
+
});
|
|
977
|
+
|
|
978
|
+
// Alerts if:
|
|
979
|
+
// - Error rate increases > 10%
|
|
980
|
+
// - Latency degrades > 10%
|
|
981
|
+
// - Conversion drops > 10%
|
|
982
|
+
|
|
983
|
+
// Enables fast rollback before major impact
|
|
984
|
+
```
|
|
985
|
+
|
|
986
|
+
---
|
|
987
|
+
|
|
988
|
+
## Related Skills
|
|
989
|
+
|
|
990
|
+
**Core Quality Practices:**
|
|
991
|
+
- [agentic-quality-engineering](../agentic-quality-engineering/) - Agent-driven regression orchestration
|
|
992
|
+
- [holistic-testing-pact](../holistic-testing-pact/) - Regression across test quadrants
|
|
993
|
+
- [risk-based-testing](../risk-based-testing/) - Risk-based regression prioritization
|
|
994
|
+
|
|
995
|
+
**Testing Approaches:**
|
|
996
|
+
- [test-automation-strategy](../test-automation-strategy/) - Building automation pyramid with regression
|
|
997
|
+
- [api-testing-patterns](../api-testing-patterns/) - API regression testing
|
|
998
|
+
- [exploratory-testing-advanced](../exploratory-testing-advanced/) - Exploratory regression sessions
|
|
999
|
+
- [performance-testing](../performance-testing/) - Performance regression testing
|
|
1000
|
+
- [security-testing](../security-testing/) - Security regression scans
|
|
1001
|
+
|
|
1002
|
+
**Development Practices:**
|
|
1003
|
+
- [tdd-london-chicago](../tdd-london-chicago/) - Test-first creates regression safety
|
|
1004
|
+
- [xp-practices](../xp-practices/) - Continuous integration with regression
|
|
1005
|
+
- [refactoring-patterns](../refactoring-patterns/) - Safe refactoring with regression coverage
|
|
1006
|
+
|
|
1007
|
+
**Communication:**
|
|
1008
|
+
- [quality-metrics](../quality-metrics/) - Regression test effectiveness metrics
|
|
1009
|
+
- [bug-reporting-excellence](../bug-reporting-excellence/) - Regression test creation from bugs
|
|
1010
|
+
|
|
1011
|
+
---
|
|
1012
|
+
|
|
1013
|
+
## Remember
|
|
1014
|
+
|
|
1015
|
+
**Regression testing is insurance against change.**
|
|
1016
|
+
|
|
1017
|
+
Every code change is a risk. Regression testing mitigates that risk by:
|
|
1018
|
+
- Verifying existing functionality still works
|
|
1019
|
+
- Catching unintended side effects early
|
|
1020
|
+
- Building confidence for continuous deployment
|
|
1021
|
+
- Enabling safe refactoring and evolution
|
|
1022
|
+
|
|
1023
|
+
**Good regression testing is strategic, not exhaustive.**
|
|
1024
|
+
|
|
1025
|
+
You cannot test everything, every time. Smart regression testing:
|
|
1026
|
+
- Selects tests based on changes and risk
|
|
1027
|
+
- Runs fast enough for continuous feedback
|
|
1028
|
+
- Maintains reliability (no flaky tests)
|
|
1029
|
+
- Evolves with the product
|
|
1030
|
+
|
|
1031
|
+
**Perfect regression coverage is impossible. Effective regression testing is achievable.**
|
|
1032
|
+
|
|
1033
|
+
**With Agents**: Agents excel at intelligent test selection, impact analysis, automated test generation from bugs, and continuous regression monitoring. Use agents to make regression testing data-driven, efficient, and scalable.
|