tdd-workflows-tdd-refactor

Tests & Qualité

"Use when working with tdd workflows tdd refactor"

Documentation

Use this skill when

●Working on tdd workflows tdd refactor tasks or workflows
●Needing guidance, best practices, or checklists for tdd workflows tdd refactor

Do not use this skill when

●The task is unrelated to tdd workflows tdd refactor
●You need a different domain or tool outside this scope

Instructions

●Clarify goals, constraints, and required inputs.
●Apply relevant best practices and validate outcomes.
●Provide actionable steps and verification.
●If detailed examples are required, open resources/implementation-playbook.md.

Refactor code with confidence using comprehensive test safety net:

[Extended thinking: This tool uses the tdd-orchestrator agent (opus model) for sophisticated refactoring while maintaining all tests green. It applies design patterns, improves code quality, and optimizes performance with the safety of comprehensive test coverage.]

Usage

Use Task tool with subagent_type="tdd-orchestrator" to perform safe refactoring.

Prompt: "Refactor this code while keeping all tests green: $ARGUMENTS. Apply TDD refactor phase:

Core Process

1. Pre-Assessment

●Run tests to establish green baseline
●Analyze code smells and test coverage
●Document current performance metrics
●Create incremental refactoring plan

2. Code Smell Detection

●Duplicated code → Extract methods/classes
●Long methods → Decompose into focused functions
●Large classes → Split responsibilities
●Long parameter lists → Parameter objects
●Feature Envy → Move methods to appropriate classes
●Primitive Obsession → Value objects
●Switch statements → Polymorphism
●Dead code → Remove

3. Design Patterns

●Apply Creational (Factory, Builder, Singleton)
●Apply Structural (Adapter, Facade, Decorator)
●Apply Behavioral (Strategy, Observer, Command)
●Apply Domain (Repository, Service, Value Objects)
●Use patterns only where they add clear value

4. SOLID Principles

●Single Responsibility: One reason to change
●Open/Closed: Open for extension, closed for modification
●Liskov Substitution: Subtypes substitutable
●Interface Segregation: Small, focused interfaces
●Dependency Inversion: Depend on abstractions

5. Refactoring Techniques

●Extract Method/Variable/Interface
●Inline unnecessary indirection
●Rename for clarity
●Move Method/Field to appropriate classes
●Replace Magic Numbers with constants
●Encapsulate fields
●Replace Conditional with Polymorphism
●Introduce Null Object

6. Performance Optimization

●Profile to identify bottlenecks
●Optimize algorithms and data structures
●Implement caching where beneficial
●Reduce database queries (N+1 elimination)
●Lazy loading and pagination
●Always measure before and after

7. Incremental Steps

●Make small, atomic changes
●Run tests after each modification
●Commit after each successful refactoring
●Keep refactoring separate from behavior changes
●Use scaffolding when needed

8. Architecture Evolution

●Layer separation and dependency management
●Module boundaries and interface definition
●Event-driven patterns for decoupling
●Database access pattern optimization

9. Safety Verification

●Run full test suite after each change
●Performance regression testing
●Mutation testing for test effectiveness
●Rollback plan for major changes

10. Advanced Patterns

●Strangler Fig: Gradual legacy replacement
●Branch by Abstraction: Large-scale changes
●Parallel Change: Expand-contract pattern
●Mikado Method: Dependency graph navigation

Output Requirements

●Refactored code with improvements applied
●Test results (all green)
●Before/after metrics comparison
●Applied refactoring techniques list
●Performance improvement measurements
●Remaining technical debt assessment

Safety Checklist

Before committing:

●✓ All tests pass (100% green)
●✓ No functionality regression
●✓ Performance metrics acceptable
●✓ Code coverage maintained/improved
●✓ Documentation updated

Recovery Protocol

If tests fail:

●Immediately revert last change
●Identify breaking refactoring
●Apply smaller incremental changes
●Use version control for safe experimentation

Example: Extract Method Pattern

Before:

class OrderProcessor {
  processOrder(order: Order): ProcessResult {
    // Validation
    if (!order.customerId || order.items.length === 0) {
      return { success: false, error: "Invalid order" };
    }

    // Calculate totals
    let subtotal = 0;
    for (const item of order.items) {
      subtotal += item.price * item.quantity;
    }
    let total = subtotal + (subtotal * 0.08) + (subtotal > 100 ? 0 : 15);

    // Process payment...
    // Update inventory...
    // Send confirmation...
  }
}

After:

class OrderProcessor {
  async processOrder(order: Order): Promise<ProcessResult> {
    const validation = this.validateOrder(order);
    if (!validation.isValid) return ProcessResult.failure(validation.error);

    const orderTotal = OrderTotal.calculate(order);
    const inventoryCheck = await this.inventoryService.checkAvailability(order.items);
    if (!inventoryCheck.available) return ProcessResult.failure(inventoryCheck.reason);

    await this.paymentService.processPayment(order.paymentMethod, orderTotal.total);
    await this.inventoryService.reserveItems(order.items);
    await this.notificationService.sendOrderConfirmation(order, orderTotal);

    return ProcessResult.success(order.id, orderTotal.total);
  }

  private validateOrder(order: Order): ValidationResult {
    if (!order.customerId) return ValidationResult.invalid("Customer ID required");
    if (order.items.length === 0) return ValidationResult.invalid("Order must contain items");
    return ValidationResult.valid();
  }
}

Applied: Extract Method, Value Objects, Dependency Injection, Async patterns

Code to refactor: $ARGUMENTS"

Utiliser l'Agent tdd-workflows-tdd-refactor - Outil & Compétence IA | Skills Catalogue | Skills Catalogue