Software Testing and Quality Assurance : Theory and Practice