In general, software engineers distinguish software faults and software failures. In case of a failure, the software does not do what the user expects. A fault is a programming error that does not actually manifest itself. A fault can turn into a failure when the software is ported to a different hardware platform or a different compiler, or when the software gets extended.
Software testing is a subfield to [software quality assurance]?. In the latter, software engineers take a broader view on software and its development. They examine and change the software engineering process itself to reduce the amount of faults that end up in the code.
See also: