There are some glossary terms for software testers regarding how they should label the result of their testing, namely error, fault, bug, or failure. These do not completely apply to test automation. As the terms fault and bug are interchangeable, I would consider the list antiquated.
As programmers, we see the code from an inside-out perspective and do not think of familiarizing ourselves with software testers' terms. This is also why we have one common name for a fault, and that is bug. The problem with this term appears when clients find a bug and you as a developer insist it's the intended behavior.
The following image is a map around quality in a software project:
A software failure can come from missing or vague requirements. It can also come from weak specifications that don't make it clear what to expect of...