Fundamentals of Software Testing