Overview
This three-day course combines engaging lectures, demos, group activities and discussions with machine-based practical programming labs and exercises. Participants will work within a dynamic, learning environment wherein they will experience Test-Driven Development (TDD) first hand. Participants will explore concepts such as development agility and Agile Manifesto to evaluate various development methods with a structured organizational approach.
What You'll Learn
- Introduction to the concept of development agility and the Agile Manifesto
 - Review each of the major agile development methods underscoring their strengths and weaknesses
 - Understand how to manage an agile environment even within a structured organizational approach
 - Learn how to introduce agility into a development organization
 - Examine what unit testing is and how various xUnit frameworks facilitate unit testing
 - Review and work with the xUnit family of unit testing tools
 - Understand the concepts of and motivations for Test-Driven Development
 - Relate unit testing, test driven development, and test coverage to agile processes
 - Understand the 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
 - Understand what Continuous Integration is and what the components of CI are
 - Examine the motivations for CI
 - Review best practices for everything from CI to testing within the context of agile development
 
Curriculum
- Agile rationale and concepts
- Reducing risk through agility
 - The discipline of Timeboxing
 - Incremental delivery and evaluation
 - Agile method: Scrum
 - Agile method: XP
 - Pair programming
 
 - The Agile approach
- Agile software development manifesto
 - The Agile principles
 - Identifying features
 - Managing features
 - Communication dynamics
 
 - Agile iterative development
- Iterative approaches
 - Phased iterative development
 - Iterating
 - Feasibility & planning
 - Development
 - Adaptation & deployment
 
 - Prioritizing and planning
- Features and backlogs
 - FDD process
 - Prioritizing features
 - Release planning
 - Assigning features to iterations
 
 - Building
- Typical Continuous Integration process
 - CI server
 - Automate source code management
 - Automate build process
 - Automate testing
 - Automate deployment
 
 
- JUnit overview
- Purpose of unit testing
 - Good unit tests
 - Test stages
 - Unit testing Vs Integration testing
 
 - Jumpstart: JUnit 4.x
- JUnit overview
 - How JUnit works
 - Launching tests
 - Test suites
 - JUnit test fixture
 
 - @Test annotation
- Test execution cycle
 - Checking for exceptions
 - Using Timeouts
 
 - Hamcrest
- About Hamcrest
 - The Hamcrest Matcher Framework
 - Hamcrest Matchers
 
 - Parameterized tests
- Injecting the parameters
 - Setting the parameters
 - Test execution cycle
 - Observations
 
 - Theories
- Writing theory enabled tests
 - Defining DataPoints
 - Defining theories
 - Observations
 
 - JUnit best practices
- “Good” tests
 - Bad smells
 - White-Box unit testing
 - Black-Box unit testing
 - Automation and coverage
 
 
- Transitioning to Agility
- Agility: Some process, Some mindset
 - Characteristics that enable Agility
 - Characteristics that inhibit Agility
 - Risks associated with migrating
 - Smoothing the transition
 
 - The bottom line
- Agile migration patterns
 - Extending the migration
 - Coding practices
 - Source control
 - Pair programming and code reviews
 - Continuous Integration
 - Legacy code
 
 
Who should attend
This course is highly recommended for:
- Java and JavaScript software engineers
 - Java Quant engineers
 - Software developers
 - Lead software engineers
 



