De uma forma ou de outra, todo software vai ser testado. Se não for durante o desenvolvimento, vai ser durante o tempo de vida. Toda vez que o usuário usa o software ele também está executando um "teste de software". Aí, a diferença entre o que era esperado e o que ocorreu tem nome: 'frustração'.

Testar um software é planejar ações que, quando executadas, farão a comparação entre o que foi feito e o que era esperado.

Há testes que são feitos durante o desenvolvimento:

  • teste de unidade
  • teste de integração
  • teste funcional
  • teste de stress
  • teste de performance

Há outros testes que devem ser feitos durante a implantação:

  • teste de sistema
  • teste beta
  • teste de aceitação
  • teste de usabilidade

Se o código for mudado após a implantação, como na refatoração ou na manutenção, então o teste próprio para isso é chamado teste de regressão.

Por mais que se teste um software, o teste nunca vai ser capaz de provocar todos os defeitos que um software possa vir. Há "test cases" (parâmetros de testes) que, supondo fossem feitos automaticamente, e a uma velocidade de milhares por minuto, levariam várias centenas de anos para serem concluídos.

Software é um sistema complexo. Sistema complexo, neste caso, não quer dizer um sistema difícil; é uma expressão científica, e indica que sua modelagem matemática apresenta um comportamento imprevisível ao interagir. Por isso, o teste de software não tem condições de afirmar que um software funcionará plenamente em qualquer lugar; ele só pode afirmar quais as condições em que o software não funciona.

O que o bom desenvolvedor faz é definir e codificar rotinas para tratamento de erro; qualquer problema que eventualmente surgir será então estudado na manutenção e posteriormente na refatoração. Problemas que não aparecem durante o desenvolvimento e ao longo da implantação costumam ser especialmente trabalhosos; o segredo para lidar com eles é, antes de mais nada, não deixar que afetem a trajetória do usuário.

A qualidade de um software não é uma característica subjetiva; qualidade é algo que pode ser testado a qualquer hora, e quanto antes melhor.