A Hands-on Introduction to Test-Driven Development