Jump to your Course Outline
Design Patterns Thinking
Day 1:
- Examination of typical causes of project failure
- Example of a failed design
- Qualities of changeable code
- Testability as a Trim-Tab in development
- The principles and practices of professional development: The Strategy Pattern
- Wisdom from our field
Day 2:
- Commonality-Variability Analysis (CVA)
- The Template Method as an example of CVA
- Using CVA to derive the Bridge Pattern
- Patterns in context: Adapter and Façade Patterns
- Re-solving the problem from Day 1 in a new, better way: The Flyweight Pattern
- Emergence through encapsulation and patterns: Refactoring to the Open-Closed
- Group design exercise, Part 1
Day 3:
- Group design exercise, Part 2
- Aspects of flexibility
- The Analysis Matrix and the Abstract Factory
- Separation of use and creation
- Encapsulating construction
- The Singleton Pattern
- The Proxy Pattern
- The Decorator Pattern
- The Chain of Responsibility Pattern
Advanced Software Design
Day 1:
- The nature of software development
- Discovering the “patterns in the problem”
- Discussion of qualities, practices and principles, patterns, and the design paradigm
- Encapsulation of varying behavior
- Encapsulation of entities
- Encapsulation of structure
- Revisiting the Dependency Inversion and Liskov Substitution design principles
Day 2:
- Encapsulation of construction
- Encapsulation of sequence and cardinality
- Encapsulation of responsibility
- Meta Pattern: Hiding the Composite Pattern with Iterator and Value Object Patterns and Forces
- Meta Pattern: Optimizing RAD tools using Mediator, Observer, and Command
- Encapsulation of relationships
- Conclusions and recommendations for further study and support options
Sustainable Test-Driven Development
Day 1:
- A brief overview of the motivations behind agility, and TDD specifically
- Understanding what passing and failing tests actually mean
- Review code qualities, and how they relate to testing and testability
- The definition of a “good” test in TDD
- Demonstration code: what tests to write, and what tests not to write
- A unit-testing/TDD exercise
Day 2:
- The unit-testing/TDD exercise continues
- Controlling dependencies in TDD
- TDD as Test-Driven Design
- Mock Objects, with an exercise
- Code Smells, and Refactoring introduction
Day 3:
- Legacy code refactoring exercise
- Refactoring to the open-closed, just in time design
- Address test architecture through test refactoring
- Putting it all together: a final project
Acceptance Test-Driven Development
Day 1:
- Motivation for acceptance test-driven development (ATDD)
- Defining and expressing business value
- Product focus: Identifying stakeholders, context, and business process
- Requirements analysis
- Specification of behavior, and acceptance testing
Day 2:
- Specification of behavior, and acceptance testing, continued
- Scenario breakdown techniques
- Domain-specific languages
- Placing ATDD in context
- Automating ATDD (overview only)