Test-driven development, unit-testing and refactoring homeworks.