Here are a list of essential topics for mastering Test Driven Development or "TDD" and Refactoring Legacy Code Using Java programming language.

1- Why TDD? Think Twice, Write Production Code Once

  • Utilizing a Safety Net of Automated Testing
  • Agile Development Concepts
  • Eliminating Bugs Early
  • Smoothing Out Production Rollouts
  • Writing Code Faster via Testing
  • Reducing Technical Debt
  • Practicing Emergent Design
  • Making Changes More Safe
  • The Importance of Regression Testing

2- Basic Unit Testing

  • JUnit
  • 3.x vs 4.0 JUnit Testing
  • Adding Complexity to Initial Simple Tests
  • Making Tests Easy to Run
  • The TDD Pattern: Red, Green Refactor
  • Using Methods of the Assert Class
  • Boundary Testing
  • Unit Test Limitations

3- Comprehensive Unit Testing Concepts

  • Using Declarative-Style Attributes
  • Using Hamcrest Matchers for More Complex Scenarios
  • Using Test Categories
  • Exception Handling in Tests
  • JUnit Test Initialization and Clean Up Methods
  • Writing Clean and Dirty Tests
  • Testing with Collections, Generics and Arrays
  • Negative Testing

4- Mocks, Fakes, Stubs and Drivers

  • TDD Development Patterns
  • Naming Conventions for Better Code
  • Using Mock Objects
  • Using Fakes
  • Using Stubs
  • Test Doubles
  • Manual Mocking
  • Mocking with a Mock Framework
  • Self-Shunt Pattern

5- Database Unit Testing

  • Mocking the Data Layer
  • Identifying what Should Be Tested in Databases
  • Stored Procedure Tests
  • Schema Testing
  • Using NDbUnit to Set Up the DB Test Environment

6- Refactoring Basics

  • Refactoring Existing Code
  • Restructuring
  • Extracting Methods
  • Removing Duplication
  • Reducing Coupling
  • Division of Responsibilities
  • Improving Clarity and Maintainability
  • Test First - then Refactor
  • More Complex Refactoring Considerations

7- Patterns and Anti-Patterns in TDD

  • The SOLID Principles
  • Factory Methods
  • Coding to Interface References
  • Checking Parameters for Validity Test
  • Open/Closed Principle: Open to Extension, Closed to Change
  • Breaking Out Method/Object
  • Extract and Override Call
  • Extract and Override Factory Method
  • Singleton Pattern
  • Decorator Pattern
  • Facade Pattern
  • State Pattern
  • MVP, MVC and MVVM Patterns
  • Finding and Removing Code Smells/Antipatterns

8- Refactoring Legacy Code

  • Reducing Risk of Change
    • Eliminating Dependencies
    • Characterization Tests as a Safety Net
    • Introducing Abstractions to Break Dependencies
  • Analyzing Legacy Code
    • Identifying Pinch Points with Effect Analysis
    • Identifying Seams for Expansion and Testing
    • Listing Markup
  • Minimizing Risk of Adding New Behavior
    • Sprout Method
    • Sprout Class
    • Wrap Method
    • Wrap Class
  • Dealing with Code that's Difficult to Test
    • Globals and Singletons in Tests
    • Inaccessible Methods and Fields
  • Using Smells to Identify What to Refactor
    • Dealing with Monster Methods
    • Dealing with Excessively Complex, Large Classes
    • Identifying and Eliminating Duplication
    • Other Smells
  • Dealing with Large Legacy Systems
    • Preserving Signatures

9- Code Coverage

  • White Box vs Black Box Testing
  • Planning to Increase Code Coverage Over Time
    • Goal 80% or More Test Coverage
    • Statement Coverage
    • Condition Coverage
    • Path Coverage
  • Test Harnesses
  • Unit-Testing Harnesses

10- System, Regression and Acceptance Testing

  • Statistical Sampling
  • Usability Testing
  • Test Protocols
  • Regression Testing
  • Acceptance Testing

The following topics may be included at the discretion of your instructor.

11- Continuous Integration Servers/Automated Testing

  • Early Warning of Conflicts
  • Metrics and Tools
  • Checking into Repository
    • Team Foundation Server (TFS)
    • Subversion
  • Continuous Integration Servers
    • CruiseControl.NET
    • Hudson
  • Automating the Build/Deployment

12- Risks Changing Legacy/Production Systems

  • Refactoring
  • Coupling and Cohesion Issues
  • Taking Small Tested Steps
  • Anti-Pattern: Big Bang, Boom