In my job I often face this situation.
Something goes wrong in a web application, so an issue is reported, an I’m given the task to fix it.
While debugging, I discover many other bugs and fix them as well.
Sometimes a fix of mine breaks the application elsewhere, far away from where the original issue was detected.
This is quite a common problem for me, and I think for developers at large too. Nonetheless, when it happens my boss reminds me that say: Never change something that works. I don’t share this point of view.
- A bug is to an application, what a mine is to a field.
- A buggy application is like a mined field.
- Running a buggy application is like walking on a mined field.
- A test-passed functionality is like a marked path.
You can safely walk on marked paths. Anyway, as soon as you leave them, you start marking a new path. Not blowing up is only a matter of luck. And, blowing or not blowing up on any new path doesn’t tell anything about the rest of the field. That’s why application testing is a requirement, but exhaustiveness is just a Chimera.