Software Design, Automated Testing, and Maintenance