Agile Software Development Introduction
- Defining the developer role in an agile process
- Identifying software development roles and activities
- Supporting the requirements engineering process
- Decomposing and estimating requirements
- Using test automation to drive development
- Applying SOLID design principles
- Exploiting design patterns
- Integrating systems
- Branching and merging version controlled code
- Managing defects efficiently
- Supporting Agile Projects
Gathering software requirements
- Eliciting requirements from users
- Adopting Agile values and principles
- Identifying user stories from stakeholder requirements
Planning Agile Projects
- Prioritising and estimating work
- Dividing features into tasks
- Estimating stories and tasks
Tracking Team Progress
- Tracking progress with burn down charts
- Calculating velocity and adjusting to change
- Monitoring work in progress with task boards
Defining test levels
- Acceptance, system, integration and unit testing
- Employing both automated and manual testing
- Specifying boundary conditions
- Driving development through constant testing
Ensuring software meets requirements with user acceptance testing
- Scripting user acceptance tests
- Specifying acceptance criteria
- Determining conditions of satisfaction
- Automating the user story acceptance tests with Gherkin
Minimising bugs through automated programmer unit testing
- Utilising tools for automated unit testing
- Writing unit test code
- Isolating classes for testing
- Programming mock objects
- Refactoring for improved design
Applying SOLID design principles
- Ensuring classes have a single responsibility
- Maintaining extensibility through the open-closed principle
- Using inheritance correctly
- Inverting dependencies to obtain the correct interfaces
- Injecting dependencies using injection frameworks
Short-circuiting design with patterns
- Understanding the role of design patterns
- Applying well-known patterns: Strategy and observer
Protecting code with version control
- Locking versus multiple checkout version control systems
- Single store versus distributed version control
- Employing GIT for distributed multiple checkout control
- Pushing and pulling changes from central repositories
Applying multi-team agile versioning policy
- Branching and merging code developed by multiple teams
- Choosing agile branching and merging strategies
- Continuous Improvement of Development
Monitoring development
- Knowing what to track in development
- Identifying common agile development pitfalls
Participating in retrospectives
- The developer’s role in agile process improvement
- Continuous improvement through learning