Refactoring and SOLID Design for C++ Training

This training course helps you build knowledge, understanding and skill in the engineering practices needed to build great C++ code. You learn how to build flexible and modular software with very few defects, software that can have a long useful life.

Learning Model

We learn new skills by doing, not just reading, listening, and thinking. Engineers are not so interested in changing how they work if the change does not help solve some identified problem. We’ve found this learning cycle to be invaluable to attendees of our courses.

  • Present a problem -- problems motivate change
  • Present a potential solution -- the idea that may help
  • Demonstrate part of the solution -- remove ambiguity
  • Participant does an exercise -- learn by doing
  • Experience debrief -- identify and discuss both positive and negative reactions

In this course, we repeat this learning cycle, growing skills with each iteration. Our goal is to build new skills on top of the attendees' existing skills.


  • Software Developers
  • Technical team leaders
  • Managers that want to know more about the technology they manage


  • Completed one of our Test-Driven Development training courses
  • C++ programming experience

Course Outline

  • Refactoring
  • Module Objective: As requirements and users' needs change, code must change. Design is so important, we don't just do design once at the beginning of the development effort. Design is a continuous process. We accept that changing design is dangerous, and the tests created by the test-driven developer provide a safety-net to lock in code behavior as your product design evolves.

    Refactoring (changing the structure of code, without changing its behavior) is a step in the TDD microcycle used when we need to clean up a mess. We'll also refactor code so that a new feature can be dropped in. This module provides and overview of the mindset and the critical skills needed to evolve designs for a long useful life.

    • Refactoring Defined
    • Critical to a Healthy Business
    • Critical Skills
    • Code Smells
    • Envisioning
    • Transforming
    • TDD's Positive Influence on Design
  • SOLID Design

    Module Objective: There are many guiding principles to help with design. Knowing these principles helps you test-drive or refactor your problem design to a better design. This module helps you understand some of the guiding principles that help transform design decisions from personal preferences to specific design decisions based on specific attributes and tradeoffs.

    • Rules of Simple Design
    • SOLID Design Principles
      • Single Responsibility
      • Open/Closed
      • Liskov Substitution
      • Interface Segregation
      • Dependency Inversion
    • DRY Principle
    • Mind Your Own Business
    • Architectural Vision
    • The Big Picture
    • Vertical Slices
    • From Specific to General
    • Evolution
    • Exercise
  • Breaking Dependencies Dynamically
    • Function Pointer Fake
    • Exercise
  • Evolving to a SOLID Design
    • Identifying Duplicate Conditional Logic
    • Refactoring to a better design
    • Exercise
  • Design Patterns
    • OS Independence
    • Exercise
  • Wrap up Discussion
  • Optional Workshop for your Product Begins for on-site courses.

This course will get you and your team well on the way to applying TDD in your C++ development efforts.