Hard Problems in Software Testing