
Erro
O erro está mais ligado à ação humana. Acontece quando o desenvolvedor escreve o código incorreto, define uma lógica errada ou interpreta errado um requisito.
Alguns exemplos são:
- Usar > ao invés de >=
- Implementar uma regra de negócio com uma interpretação equivocada
- Ou, usar uma condicional enquanto não há necessidade
O erro acontece sempre no processo de desenvolvimento. Com isso, ele pode ou não gerar um bug visível no sistema.
Bug
Partindo para o termo mais utilizado. O bug representa qualquer comportamento inesperado do software em relação ao que foi especificado.
Exemplos:
- Um botão que deveria salvar dados, mas não faz nada
- Um cálculo que retorna um valor incorreto
- Um modal que não abre
Bug é um termo informal. Não explica a causa do problema em si, mas indica que algo não está funcionando corretamente.
Aliás, o uso deste termo é interessante, apesar que há algumas controvérsias de sua origem. Mas resumindo, a mãe da computação, Grace Hopper encontrou uma mariposa real dentro do computador, isso lá nos anos 40, e estava fazendo com que o computador apresentasse falhas. Recomendo vocês procurarem saber, é interessante. Pelo menos para mim é interessante.
Defeito
Já o defeito é a materialização do erro no código, design ou na documentação. É algo concreto que pode ser especificado e corrigido. É como se fosse a instanciação de algum mal entendido, a instanciação de um erro.
Acontece assim:
- O desenvolvedor comete um erro.
- Esse erro gera um defeito no código.
- O defeito resulta em um bug percebido pelo usuário.
Em metodologias de QA, o termo defeito é mais preciso que bug.
Falha
A falha ocorre em tempo de execução. É quando o sistema deixa de cumprir sua função enquanto está rodando.
Exemplos:
- A aplicação cai ao tentar abrir uma tela.
- Um servidor para de responder após um pico de acessos.
- Ao enviar um formulário, o sistema quebra.
Nem todo defeito pode gerar uma falha imediata. Mas algumas falhas só aparecem em cenários específicos.
Exceção
Exceção é um evento inesperado que, também, ocorre durante a execução do programa e interrompe o fluxo normal.
Exemplos:
- Divisão por zero.
- Acesso a um recurso inexistente.
Lembrando que as exceções podem ser tratadas e, quando bem tratadas, evitam que cheguem ao famigerado usuário final.
Resumindo
Só para resumir para vocês, aqui vai uma definição mais direta:
- Erro: ação humana incorreta.
- Defeito: problema existente no código ou design.
- Bug: comportamento incorreto observado.
- Falha: quebra do sistema em execução.
- Exceção: evento inesperado em tempo de execução.
Por que saber essas diferenças importa?
Bom, enquanto estamos em um time, a clareza da informação é fundamental, sendo assim, a precisão de linguagem faz parte da qualidade do software. Saber diferenciar estes termos, além de melhorar a comunicação entre a equipe pode melhorar:
- Qualidade de relatórios de QA.
- Análise de causa raiz.
- Maturidade técnica do time.