É o processo de encontrar e reduzir erros em um software (ou hardware). // É o processo de identificar a causa-raiz de um erro e corrigi-lo.
Erros de software podem ser os que impedem a execução ou os que geram um resultado inesperado
Bug = programador cometeu um erro
Teste de Software:
- Detecta a presença de defeitos na execução de um programa
- Idealmente realizado por uma equipe própria de testes
Depuração
- Diagnostica a causa/Corrige os defeitos já detectados em um programa
- Geralmente realizada pela equipe de desenvolvimento.
Depuração não é uma maneira de melhorar a qualidade de um software (assim como os testes). É um último recurso, pois os erros já ocorreram e os defeitos já estão presentes no código, logo a qualidade já está comprometida.
Nem todo programador sabe realizar uma depuração de forma correta, eficiente e eficaz. Em alguns projetos, metade do tempo de desenvolvimento é apenas de depuração.
Para alguns programadores, a depuração é a parte mais difícil da programação.
- Usando
print()
em pontos aleatorios do codigo para ir acompanhando a execução do programa. (no-console rule) - Mexer no código e ver o que acontece até o ele funcionar direito...
- Ignorar a necessidade de entender o problema
- Corrigir o erro de forma simplista
- Se Iludir (se ausentar da culpa)
- Estabilizar o erro ->
- Localizar a causa dele -> Corrigir o erro ->
- Testar a correção do erro ->
- Procurar por erros similares -> (loop...)
- Saber como reproduzir o erro ou torná-lo previsível caso seja intermitente
- Encontrar casos de teste que sejam capazer de fazer como que o erro se manifeste durante a execução. (devem ser os mais simples possíveis...)
- Manter um ambiente de depuração controlável, facilitando a detecção do erro
-
Coletar e analisar dados relacionados à ocorrência de erro
- Se os dados não forem suficientes para gerar evidências acerca da possível causa do erro, provavelmente seja necessário redefinir novos casos de teste
- Tentar reproduzir o erro de diferentes formas e fazer eliminações
-
Formular hipóteses sobre a possível causa do erro
-
Confirmar ou rejeitar as hipóteses levantadas
- Identificar a proção de código suspeita, expandindo ou restringindo-a
- Utilizar ferramentas (depurador, breakpoints, stacktraces, profiling...)
-
Realizar o logging para registrar o que ocorre na execução do programa
- Entender bem o problema e o programa antes de corrigi-lo
- Confirmar o diagnóstico do defeito
- Implementar a correção do defeito
- Primeiro analisar todas os possíveis efeitos das alterações a serem feitas
- Fazer um backup da versão original (antes da correção)
- Atestar se a correção implementada realmente resolve o defeito
- Utilizar casos de teste previamente estabelecidos
- Delinear novos casos de teste
- Verificar se a correção do defeito não gerou novos defeitos e erros