A rationale for teaching source control and testing practice in undergraduate Computer Science