Testing aims to compare ambiguous and invisible aspects of software to avoid unthinkable outcomes impacting unknown users, as testing is an endless process according to James Bach. The key challenges of testing mentioned are that the work is infinite, parts of the software are invisible, aspects being tested are ambiguous and unclear, the potential problems are unthinkable, and the users impacted may be anonymous.