A reality check for those who consider software testing an easy job! There are a large number of unknown factors and variables involved. Sometimes the requirements are not well-defined or sometimes the system ends up behaving unexpectedly. Then there is the difference of environments, platforms, devices and network capacities on which the software system might be used and different types of users who would be using it. It is almost always impossible to provide 100% test coverage, yet you have to be sure that it will not break.