This seems to be a human problem in general not specifically related to software development. We find it difficult to spot errors in our own work products. Some of the reasons for this are:
– We make assumptions
– We are emotionally attached to the product (it’s our baby and there’s nothing wrong with it).
– We are so familiar with the product we cannot easily see the obvious faults.
– We’re humans.
– We see exactly what we want to see.
– We have a vested interest in passing the product as ok and not finding faults.
Generally it is thought that objective independent testing is more effective. There are several levels of independence as follows:
– Test cases are designed by the person(s) writing the software.
– Test cases are designed by another person(s).
– Test cases are designed by a person(s) from a different section.
– Test cases are designed by a person(s) from a different organization.
– Test cases are not chosen by a person.
The discussion of independence test groups and outsourcing is left to another section.