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