Software Testing
Testing is a core part of the software development life-cycle: it's how a team gets confidence that the software actually meets its users' needs. It can be done by hand or automated, and it draws on a wide set of concepts and techniques.
Errors
When software doesn't behave correctly, we say an error was found. That doesn't only mean a crash — a program that runs to completion but produces the wrong result, or behaves unexpectedly, has also failed: an error is any departure from the specification.
Bugs
In the early days of computing, machines used physical relays and contacts. An IBM operator once found a moth trapped between a relay's contacts, causing a malfunction — and "bug" has meant a hidden software defect ever since. Software doesn't literally have insects in it; it's just the word we use for a defect that makes a program misbehave.