Skip to content

Instantly share code, notes, and snippets.

@eltonvs
Created June 22, 2017 03:34
Show Gist options
  • Select an option

  • Save eltonvs/4f44f8d7fa3c09d2edd17830ea483012 to your computer and use it in GitHub Desktop.

Select an option

Save eltonvs/4f44f8d7fa3c09d2edd17830ea483012 to your computer and use it in GitHub Desktop.

Revisions

  1. eltonvs created this gist Jun 22, 2017.
    80 changes: 80 additions & 0 deletions depuracao.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,80 @@
    # 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