Test-Driven Development and Software Quality