askill
qa-refactoring

qa-refactoringSafety 95Repository

Safe refactoring for legacy or complex codebases: preserve behavior while improving structure, reducing technical debt, and tightening quality gates. Use for characterization tests, seams/adapters, incremental refactor loops, strangler migrations, refactor PR sizing, and CI guardrails (lint/type/contract tests).

36 stars
1.2k downloads
Updated 2/24/2026

Package Files

Loading files...
SKILL.md

QA Refactoring Safety

Use this skill to refactor safely: preserve behavior, reduce risk, and keep CI green while improving maintainability and delivery speed.

Defaults: baseline first, smallest safe step next, and proof via tests/contracts/observability instead of intuition.

Quick Start (10 Minutes)

  • Confirm baseline: main green; reproduce the behavior you must preserve.
  • Choose a boundary: API surface, module boundary, DB boundary, or request handler.
  • Add a safety net: characterization/contract/integration tests at that boundary.
  • Refactor in micro-steps: one behavior-preserving change per commit/PR chunk.
  • Prove: run the smallest relevant suite locally, then full CI; keep failures deterministic.

Core QA (Default)

Safe Refactor Loop (Behavior First)

  • Establish baseline: get main green; reproduce the behavior you must preserve.
  • Define invariants: inputs/outputs, error modes, permissions, data shape, performance budgets.
  • Add a safety net: write characterization/contract/integration tests around the boundary you will touch.
  • Create seams: introduce injection points/adapters to isolate side effects and external dependencies.
  • Refactor in micro-steps: one behavior-preserving change at a time; keep diffs reviewable.
  • Prove: run the smallest relevant suite locally, then full CI; keep failures debuggable and deterministic.
  • Ship safely: use canary/dark launch/feature flags when refactors touch production-critical paths.

Risk Levels (Choose Safety Net)

RiskExamplesMinimum required safety net
Lowrename, extract method, formatting-onlyunit tests + lint/type checks
Mediummoving logic across modules, dependency inversionunit + integration/contract tests at boundary
Highauth/permission paths, concurrency, migrations, money/data-loss pathsintegration + contract tests, observability checks, canary + rollback plan

Test Strategy for Refactors

  • Prefer contract and integration tests around boundaries to preserve behavior.
  • Use snapshots/golden masters only when outputs are stable and reviewed (avoid "approve everything" loops).
  • For invariants, consider property-based tests or table-driven cases (inputs, edge cases, error modes).
  • Avoid making E2E/UI tests the primary safety net for refactors; keep most safety below the UI.
  • For flaky areas: fix determinism first (seeds, time, ordering, network) before trusting results.

CI Economics and Debugging Ergonomics

  • Keep refactor PRs small and reviewable; avoid refactor + feature in one PR.
  • Require failure artifacts for tests guarding refactors (logs, trace IDs, deterministic seeds, repro steps).
  • Reduce diff noise: isolate formatting-only changes (or apply formatting repo-wide once with buy-in).
  • Keep git bisect viable: avoid mixed "mechanical + semantic" changes unless necessary.

Do / Avoid

Do:

  • Add missing tests before refactoring high-risk areas.
  • Add guardrails (linters, type checks, contract checks, static analysis/security checks) so refactors don't silently break interfaces.
  • Prefer "branch by abstraction" / adapters when you need to swap implementations safely.

Avoid:

  • Combining large structural refactors with behavior changes.
  • Using flaky E2E as the primary safety net for refactors.

Quick Reference

TaskTool/PatternCommand/ApproachWhen to Use
Long method (>50 lines)Extract MethodSplit into smaller functionsSingle method does too much
Large class (>300 lines)Split ClassCreate focused single-responsibility classesGod object doing too much
Duplicated codeExtract Function/ClassDRY principleSame logic in multiple places
Complex conditionalsReplace Conditional with PolymorphismUse inheritance/strategy patternSwitch statements on type
Long parameter listIntroduce Parameter ObjectCreate DTO/config objectFunctions with >3 parameters
Legacy code modernizationCharacterization Tests + Strangler FigWrite tests first, migrate incrementallyNo tests, old codebase
Automated quality gatesESLint, SonarQube, Prettiernpm run lint, CI/CD pipelinePrevent quality regression
Technical debt trackingSonarQube, CodeClimateTrack trends + hotspotsPrioritize refactoring work

Decision Tree: Refactoring Strategy

Code issue: [Refactoring Scenario]
    ├─ Code Smells Detected?
    │   ├─ Duplicated code? → Extract method/function
    │   ├─ Long method (>50 lines)? → Extract smaller methods
    │   ├─ Large class (>300 lines)? → Split into focused classes
    │   ├─ Long parameter list? → Parameter object
    │   └─ Feature envy? → Move method closer to data
    │
    ├─ Legacy Code (No Tests)?
    │   ├─ High risk? → Write characterization tests first
    │   ├─ Large rewrite needed? → Strangler Fig (incremental migration)
    │   ├─ Unknown behavior? → Characterization tests + small refactors
    │   └─ Production system? → Canary deployments + monitoring
    │
    ├─ Quality Standards?
    │   ├─ New project? → Setup linter + formatter + quality gates
    │   ├─ Existing project? → Add pre-commit hooks + CI checks
    │   ├─ Complexity issues? → Set cyclomatic complexity limits (<10)
    │   └─ Technical debt? → Track in register, 20% sprint capacity

Related Skills

Operational Deep Dives

Shared Foundation

Skill-Specific

See references/operational-patterns.md for detailed refactoring catalogs, automated quality gates, technical debt playbooks, and legacy modernization steps.

Templates

Use copy-paste templates in assets/ for checklists and quality-gate configs:

Resources

Use deep-dive guides in references/ (load only what you need):

Optional: AI / Automation

Do:

  • Use AI to propose mechanical refactors (rename/extract/move) only when you can prove behavior preservation via tests and contracts.
  • Use AI to summarize diffs and risk hotspots; verify by running targeted characterization tests.
  • Prefer tool-assisted refactors (IDE/compiler-aware, codemods) over freeform text edits when available.

Avoid:

  • Accepting refactors that change behavior without an explicit requirement and regression tests.
  • Letting AI "fix tests" by weakening assertions to make CI green.

See data/sources.json for curated external references.

Install

Download ZIP
Requires askill CLI v1.0+

AI Quality Score

93/100Analyzed 2/19/2026

Excellent quality SKILL.md for QA Refactoring. Comprehensive content covering safe refactoring methodologies, risk-based safety nets, test strategies, CI guardrails, decision trees, and operational deep dives. Well-structured with clear hierarchy, tables, and actionable steps. Tags improve discoverability. Located in shared-skills folder indicating cross-project reusability. Strong safety emphasis throughout with risk matrices and verification practices. Minor扣分 for relative path references to internal skill files, but overall highly reusable and actionable."

95
95
88
98
92

Metadata

Licenseunknown
Version-
Updated2/24/2026
Publishervasilyu1983

Tags

apici-cdlintingobservabilitysecuritytesting