Software Testing and Quality Assurance: Theory and Practice