1. Refactoring: Introduction. The notion of refactoring, the purpose of refactoring. Test-driven development [2h theory, 0h practice]
2. Code smells. Overview. Definition of code smell. Good design principles. Code smells in tests, and smells in databases (overview). Smells in architecture, smells in personnel management [2.5h theory, 1.5h practice]
3. Common problems in code. Organizing data. Fields. Data arrays. References and values. Code fields. Simplifying conditional expression. Simplifying method calls. Dealing with generalization. Composing methods. [2.5h theory, 1.5h practice]
4. Smells inside class. Easily discovered problems. Names. Excessive complexity. Duplication. Conditional logic [2.5h theory, 1.5h practice]
5. Moving feature between objects. Single responsibility principle. Cohesion. The Law of Demeter. Moving methods/fields. Extract class. Inline class. Hiding delegates. Remove the middle man [2.5h theory, 1.5h practice]
6. Problems in communication between classes. Data. Inheritance. Responsibility. Adopting changes. Library classes [2.5h theory, 1.5h practice]
7. Refactoring to modern C++ [2h theory, 0h practice]