Foundations of Software Testing