Advanced Testing Strategy
Acknowledgement: Shared by Peter Bamuhigire, techguypeter.com, +256 784 464178.
Use When
- Use when designing or reviewing test strategy for production systems, APIs, mobile apps, SaaS platforms, ERP workflows, and AI-enabled systems. Covers unit, integration, contract, end-to-end, regression, release-gate, and risk-based testing decisions.
Evidence Produced
| Category |
Artifact |
Format |
Example |
| Correctness |
Test plan |
Markdown doc per skill-composition-standards/references/test-plan-template.md |
docs/testing/test-plan-checkout.md |
| Correctness |
Latest CI run evidence |
CI URL or archived log |
https://ci.example.com/run/12345 |
References
- Use the
references/ directory for deep detail after reading the core workflow below.
- Load
references/e2e-testing.md when browser, API journey, Playwright/Cypress, or full workflow end-to-end coverage is required.
Use this skill when testing must be designed as an engineering system rather than appended as a final step. The goal is to match test depth to business risk, failure modes, and release confidence.
Load Order
- Load
world-class-engineering.
- Load this skill before declaring architecture or implementation work production-ready.
- Pair it with
deployment-release-engineering for release gates and observability-monitoring for post-deploy verification.
Testing Workflow
1. Identify Risk
Classify the change:
- domain-critical
- security-sensitive
- financially material
- migration-heavy
- high-traffic or high-scale
- UX-critical
- release-control heavy: feature flags, canaries, config flips, or dark launches
- operationally risky: on-call impact, hard rollback, fragile dependencies
Higher risk requires broader validation depth.
2. Map Failure Modes
List what can fail:
- domain logic
- contract mismatch
- integration dependency
- concurrency or retry behavior
- data migration and backward compatibility
- degraded-state UX
- observability blind spots
- flaky timing, clock, or async behavior
- unsafe test data setup or teardown
Tests should prove these failures are either prevented or detected.
3. Choose Test Layers
Use the smallest layer that can prove the behavior, but do not stop below the layer where failure is likely.
- commit-stage tests for fast build feedback on logic, schema, packaging, and static analysis
- unit tests for pure logic and branching rules
- integration tests for DB, API, queue, persistence, and framework seams
- contract tests for service and API compatibility
- acceptance or workflow tests for business journeys at the application boundary
- end-to-end tests for a very small number of high-value user journeys
- manual and exploratory verification for visual, usability, accessibility, or platform-sensitive flows
4. Define Test Data and Determinism
- Prefer production-like fixtures and schemas where integration risk is real.
- Seed data so important scenarios are reproducible.
- Freeze clocks, random sources, and async boundaries where nondeterminism would create flake.
- Treat flaky tests as delivery defects. Fix, quarantine with owner, or remove them quickly.
5. Define Release Evidence
Before shipping, state:
- what was validated automatically
- what was verified manually
- what remains unproven
- what rollback or mitigation exists if the risk materializes
- what telemetry will detect escaped failure quickly after release
Strategy Rules
Unit Tests
- Use for fast feedback on logic, validation, state transitions, and edge cases.
- Do not use unit tests alone as proof of integration correctness.
Integration Tests
- Use for repositories, APIs, data access, queues, workers, and migration-sensitive behavior.
- Prefer real boundaries over excessive mocking in high-risk flows.
- Cover the seams where frameworks, infrastructure, or serialization can invalidate a unit-tested design.
Contract Tests
- Use when service or client compatibility matters.
- Validate request, response, schema, error model, and version evolution.
End-To-End Tests
- Use sparingly for revenue-critical, auth-critical, or workflow-critical flows.
- Focus on a small number of high-signal journeys.
- Keep them stable by limiting them to flows where only full-stack execution can prove the risk.
Manual Verification
- Required for platform behavior, accessibility, visual correctness, and critical degraded states.
- Explicitly list manual checks in release notes or change evidence.
Exploratory Testing
- Use when product ambiguity, cross-browser variation, or user-behavior surprises matter.
- Focus exploratory time on newly complex paths, recent incidents, and areas with weak automated evidence.
AI And Workflow-Specific Testing
For AI-enabled systems, add:
- schema validation checks
- prompt or tool regression sets
- fallback path verification
- unsafe output and abuse-case checks
- cost and latency budget verification
For ERP and workflow systems, add:
- approval and reversal flows
- audit event verification
- period-lock and entitlement checks
- multi-role and multi-tenant scenario coverage
Deliverables
For meaningful changes, produce:
- risk classification
- test matrix by layer
- commit-stage checks
- release evidence summary
- manual verification list
- open risk list
- flake or determinism notes when relevant
See references/test-matrix-template.md.
Review Checklist
References
- references/risk-driven-testing.md: Test-layer selection, determinism, and flake policy.
- references/test-matrix-template.md: Test plan by risk and layer.
- references/release-evidence.md: What must be true before shipping.
Decision Rules
| Condition |
Action |
| Failure has high impact or likelihood |
Test earlier and at multiple boundaries |
| Contract spans services |
Add consumer/provider contract tests |
| Release evidence is incomplete |
Block release or record an authorised exception |
Capability Contract
Read and search are required. Test execution and edits require authorisation.
Domain Anti-Patterns
- Counting test cases instead of covering named risks.
- Using end-to-end tests for isolated logic.
- Mocking the contract under test on both sides.
- Accepting flaky tests without an owner and deadline.
- Claiming readiness without retained evidence.
Inputs
| Artefact |
Required? |
Purpose |
| Requirements, risk model, architecture, change diff, and existing tests |
yes |
Select risk-based coverage |
Outputs
- Produce a test plan, coverage map, executable checks, evidence, and residual-risk statement.
Degraded mode
Fallback without a runnable environment: produce the risk-based plan and mark every unexecuted test as unverified rather than passed.
Book-derived additions
When a metadata-driven platform or AI feature can create cascading workflow,
permission, data, or model changes, load metadata-platform-and-ai-quality.
1---2name: advanced-testing-strategy3description: Use when designing or reviewing test strategy for production systems, APIs, mobile apps, SaaS platforms, ERP workflows, and AI-enabled systems. Covers unit, integration, contract, end-to-end, regression, release-gate, and risk-based testing decisions.4metadata:5 portable: true6 compatible_with:7 - claude-code8 - codex9---1011# Advanced Testing Strategy12Acknowledgement: Shared by Peter Bamuhigire, techguypeter.com, +256 784 464178.1314<!-- dual-compat-start -->15## Use When1617- Use when designing or reviewing test strategy for production systems, APIs, mobile apps, SaaS platforms, ERP workflows, and AI-enabled systems. Covers unit, integration, contract, end-to-end, regression, release-gate, and risk-based testing decisions.1819## Evidence Produced2021| Category | Artifact | Format | Example |22|----------|----------|--------|---------|23| Correctness | Test plan | Markdown doc per `skill-composition-standards/references/test-plan-template.md` | `docs/testing/test-plan-checkout.md` |24| Correctness | Latest CI run evidence | CI URL or archived log | `https://ci.example.com/run/12345` |2526## References2728- Use the `references/` directory for deep detail after reading the core workflow below.29- Load `references/e2e-testing.md` when browser, API journey, Playwright/Cypress, or full workflow end-to-end coverage is required.30<!-- dual-compat-end -->31Use this skill when testing must be designed as an engineering system rather than appended as a final step. The goal is to match test depth to business risk, failure modes, and release confidence.3233## Load Order34351. Load `world-class-engineering`.362. Load this skill before declaring architecture or implementation work production-ready.373. Pair it with `deployment-release-engineering` for release gates and `observability-monitoring` for post-deploy verification.3839## Testing Workflow4041### 1. Identify Risk4243Classify the change:4445- domain-critical46- security-sensitive47- financially material48- migration-heavy49- high-traffic or high-scale50- UX-critical51- release-control heavy: feature flags, canaries, config flips, or dark launches52- operationally risky: on-call impact, hard rollback, fragile dependencies5354Higher risk requires broader validation depth.5556### 2. Map Failure Modes5758List what can fail:5960- domain logic61- contract mismatch62- integration dependency63- concurrency or retry behavior64- data migration and backward compatibility65- degraded-state UX66- observability blind spots67- flaky timing, clock, or async behavior68- unsafe test data setup or teardown6970Tests should prove these failures are either prevented or detected.7172### 3. Choose Test Layers7374Use the smallest layer that can prove the behavior, but do not stop below the layer where failure is likely.7576- commit-stage tests for fast build feedback on logic, schema, packaging, and static analysis77- unit tests for pure logic and branching rules78- integration tests for DB, API, queue, persistence, and framework seams79- contract tests for service and API compatibility80- acceptance or workflow tests for business journeys at the application boundary81- end-to-end tests for a very small number of high-value user journeys82- manual and exploratory verification for visual, usability, accessibility, or platform-sensitive flows8384### 4. Define Test Data and Determinism8586- Prefer production-like fixtures and schemas where integration risk is real.87- Seed data so important scenarios are reproducible.88- Freeze clocks, random sources, and async boundaries where nondeterminism would create flake.89- Treat flaky tests as delivery defects. Fix, quarantine with owner, or remove them quickly.9091### 5. Define Release Evidence9293Before shipping, state:9495- what was validated automatically96- what was verified manually97- what remains unproven98- what rollback or mitigation exists if the risk materializes99- what telemetry will detect escaped failure quickly after release100101## Strategy Rules102103### Unit Tests104105- Use for fast feedback on logic, validation, state transitions, and edge cases.106- Do not use unit tests alone as proof of integration correctness.107108### Integration Tests109110- Use for repositories, APIs, data access, queues, workers, and migration-sensitive behavior.111- Prefer real boundaries over excessive mocking in high-risk flows.112- Cover the seams where frameworks, infrastructure, or serialization can invalidate a unit-tested design.113114### Contract Tests115116- Use when service or client compatibility matters.117- Validate request, response, schema, error model, and version evolution.118119### End-To-End Tests120121- Use sparingly for revenue-critical, auth-critical, or workflow-critical flows.122- Focus on a small number of high-signal journeys.123- Keep them stable by limiting them to flows where only full-stack execution can prove the risk.124125### Manual Verification126127- Required for platform behavior, accessibility, visual correctness, and critical degraded states.128- Explicitly list manual checks in release notes or change evidence.129130### Exploratory Testing131132- Use when product ambiguity, cross-browser variation, or user-behavior surprises matter.133- Focus exploratory time on newly complex paths, recent incidents, and areas with weak automated evidence.134135## AI And Workflow-Specific Testing136137For AI-enabled systems, add:138139- schema validation checks140- prompt or tool regression sets141- fallback path verification142- unsafe output and abuse-case checks143- cost and latency budget verification144145For ERP and workflow systems, add:146147- approval and reversal flows148- audit event verification149- period-lock and entitlement checks150- multi-role and multi-tenant scenario coverage151152## Deliverables153154For meaningful changes, produce:155156- risk classification157- test matrix by layer158- commit-stage checks159- release evidence summary160- manual verification list161- open risk list162- flake or determinism notes when relevant163164See [references/test-matrix-template.md](references/test-matrix-template.md).165166## Review Checklist167168- [ ] Test depth matches business and operational risk.169- [ ] Fast checks exist for every normal integration to trunk.170- [ ] Integration boundaries are tested where failures are plausible.171- [ ] Contracts are validated where clients or services depend on them.172- [ ] Exploratory or manual testing covers ambiguity automation would miss.173- [ ] End-to-end tests are focused on the highest-value flows.174- [ ] Manual verification covers the platform or UX gaps automation cannot.175- [ ] Release evidence makes residual risk explicit.176177## References178179- [references/risk-driven-testing.md](references/risk-driven-testing.md): Test-layer selection, determinism, and flake policy.180- [references/test-matrix-template.md](references/test-matrix-template.md): Test plan by risk and layer.181- [references/release-evidence.md](references/release-evidence.md): What must be true before shipping.182183## Decision Rules184185| Condition | Action |186|---|---|187| Failure has high impact or likelihood | Test earlier and at multiple boundaries |188| Contract spans services | Add consumer/provider contract tests |189| Release evidence is incomplete | Block release or record an authorised exception |190191## Capability Contract192193Read and search are required. Test execution and edits require authorisation.194195## Domain Anti-Patterns196197- Counting test cases instead of covering named risks.198- Using end-to-end tests for isolated logic.199- Mocking the contract under test on both sides.200- Accepting flaky tests without an owner and deadline.201- Claiming readiness without retained evidence.202## Inputs203| Artefact | Required? | Purpose |204|---|---|---|205| Requirements, risk model, architecture, change diff, and existing tests | yes | Select risk-based coverage |206## Outputs207- Produce a test plan, coverage map, executable checks, evidence, and residual-risk statement.208## Degraded mode209Fallback without a runnable environment: produce the risk-based plan and mark every unexecuted test as unverified rather than passed.210211## Book-derived additions212213When a metadata-driven platform or AI feature can create cascading workflow,214permission, data, or model changes, load [metadata-platform-and-ai-quality](references/metadata-platform-and-ai-quality.md).