A course on TDD, BDD and automated testing in general - patterns, principles and guidelines