Skip to content

Instantly share code, notes, and snippets.

@eltonvs
Created June 22, 2017 03:34
Show Gist options
  • Save eltonvs/4f44f8d7fa3c09d2edd17830ea483012 to your computer and use it in GitHub Desktop.
Save eltonvs/4f44f8d7fa3c09d2edd17830ea483012 to your computer and use it in GitHub Desktop.

Depuração

Definição

É 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

Diferença entre deupração e teste de software

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 e qualidade de software

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.

Como diagnosticar e corrigir defeitos

Como não diagnosticar e corrigir defeitos:

  • 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)

Como diagnosticar e corrigir defeitos:

  • Estabilizar o erro ->
  • Localizar a causa dele -> Corrigir o erro ->
  • Testar a correção do erro ->
  • Procurar por erros similares -> (loop...)

Estabilizar o erro

  • 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

Localizar a causa do erro, isto é, a falha

  • 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

Corrigir o erro

  • 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)

Testar a correção do erro

  • 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment