Software Testing and Analysis: Process, Principles and Techniques