Duration: 3 Days
Test-Driven Development (TDD) is an evolutionary approach to development where you must first write a test that fails before you write new functional code. It is primarily an agile approach to software development and is one of the core principles of Extreme Programming.
This in-depth Agile-testing course will provide you with a solid introduction to TDD and "test first" design within the context of Agile processes and practices.
What You Will Learn
- Concept of development agility and the Agile Manifesto
- Major agile development methods and their strengths and weaknesses
- Manage an agile environment within a structured organizational approach
- Introduce agility into a development organization
- Examine what unit testing is and how various xUnit frameworks facilitate unit testing
- xUnit family of unit testing tools
- Cconcepts of and motivations for TDD
- Relate unit testing, test-driven development, and test coverage to agile processes
- Importance of refactoring in supporting agile and test driven processes
- Work with both refactoring techniques and tools
- Work with mock objects to understand what problems they solve and how they accomplish that
- Continuous Integration (CI) and components
- Examine the motivations for CI
- Best practices for everything from CI to testing within the context of agile development
Audience
software developers
Prerequistes
- Working knowledge of Java is required
- Knowledge of current development processes, such as structured top-down development and the waterfall method is beneficial
Course Outline
1. Agile Development
- Agile Software Development
- Controlling Risk
- Agile Development
- Motivation - Risk Reduction
- Discipline of Timeboxing
- Incremental Delivery and Evaluation
- Agile Software Development Manifesto
- Same Approach with Documentation
- Change Wins Out Over Following a Set Plan
- Refactoring is Artifact of Change
- Rules
- Extreme Values
- XP Practices
- CI
- Agile Testing
- Lowest Bar of Unit Testing
- Agile Testing Stages
- Test First
- Acceptance Tests
- TDD
- General Agile Principles
- Adopting or Trying Agile
- Setting User Expectations
2. Test-Driven Development
- Unit Testing
- Purpose of Unit Testing
- Successful Unit Testing
- Unit Testing Frameworks
- XUnit
- Reasons tUse XUnit
- How XUnit works
- ROI of TDD
- Rationale for TDD
- Process of TDD
- Advantages tTDD
- Side-Effects of TDD
- Observations About Tests
- Tools tSupport TDD
- Automation and Coverage
- Working with Coverage Analysis
- Concept of Test "Close" Development
3. Improving Code Quality Through Refactoring
- Refactoring
- Refactoring and Testing
- Suggested Refactoring
- Impact of Refactoring
- Advanced Refactoring
- Design Patterns
- Refactoring tDesign Patterns
- Abstract Factory Design Patterns
- Adapter Design Patterns
- Strategy Design Patterns
4. Advanced Topics
- Advanced TDD Topics
- Mock Objects and EasyMock
- Decoupling with Mock Objects
- Mock Object Frameworks
- EasyMock and JUnit
- Dependency Injection, Spring, and Testing
- Dependency Injection and IoC
- Spring Framework
- Mock Objects and Spring
- State-Based vs. Interaction-Based Testing
- State-Based Testing
- Interaction-Based Testing
- Dependencies vs. Mock Objects
- Interaction-Based Testing
- JUnit and Ant
- Running JUnit Tests from Ant
- Generating a JUnitReport
- Continuous Integration
- Typical CI Process
- Local Development Environment
- CI Server
- Potential Benefits of CI
- CI Best Practices
- Automate Source Code Management
- Automate Build Process
- Automate Testing
- Automate Deployment
- Commit Code Early and Often
- Manage the Build Process
- Separate Integration Environment
- Mimic Production Environment
- Increase Visibility
- Agile Testing Best Practices
- Coding Practices
- State- vs. Interaction-Based Testing
- Source Control
- Pair Programming and Code Reviews
- CI
- Legacy Code
Course Labs