Debug Otimizado
-
Upload
scrumhalf-gpe -
Category
Technology
-
view
144 -
download
1
description
Transcript of Debug Otimizado
Aumentando a produtividade:
DEBUGDEBUG
Rodrigo Aguas da Silva
O que é debugging?
• Debug é o processo de identificação da causa
de um erro de software;
• Consome muito tempo dos desenvolvedores;
• Torna-se a parte mais chata da programação;• Torna-se a parte mais chata da programação;
Mas não precisa ser assim!
Consumo de tempo
• Estudos mostram diferenças de até 20 para 1
no tempo gasto por programadores para
encontrar o mesmo conjunto de defeitos.
• O que ocasiona esse melhor desempenho?
Estratégia supersticiosa
1. Espalhe instruções de impressão aleatoriamente
pelo programa;
2. Examine a saída procurando o defeito;
3. Caso não encontre, mude algumas coisas no 3. Caso não encontre, mude algumas coisas no
programa até que pareça funcionar.
Dicas:
• Não perca tempo entendendo o problema
• Não faça backup do código original
FAIL!
Sintomas do uso:
• Defeitos ocultos da linguagem (quando é lua cheia)
• Editores de código possuídos
• Sumiço de commits importantes• Sumiço de commits importantes
• Defeitos misteriosos do compilador
• Localizar a causa do problema e entendê-lo
normalmente representa 90% do tempo gasto para
a correção.
Solução
• Você não precisa fazer um pacto com o diabo
e usar a estratégia supersticiosa.
• O método científico pode ser usado.
Método Científico
1. Reúna dados por meio de experimentos repetidos
2. Formule uma hipótese considerando esses dados
3. Elabore um experimento para provar ou não a
hipótesehipótese
4. Prove ou não a hipótese
5. Repita tantas vezes quanto for necessário
Aplicando ao Debug
1. Estabilize o erro
2. Localize a causa do erro:
1. Reúna cenários que produzem o erro
2. Formule uma hipótese sobre o defeito2. Formule uma hipótese sobre o defeito
3. Planeje a prova da hipótese
4. Prove ou não a hipótese
3. Corrija o defeito
4. Teste
5. Procure erros semelhantes
Estabilize o erro
• Se um defeito não ocorre de modo repetitivo,
é quase impossível diagnosticá-lo.
• Causas comuns de instabilidade:• Causas comuns de instabilidade:
– valores iniciais
– encadeamento temporal
Estabilize o erro
Simplificar o caso de teste ao máximo:
1. Identifique um cenário de fatores que
produzem o erro;
2. Formule uma hipótese a respeito de quais 2. Formule uma hipótese a respeito de quais
são irrelevantes;
3. Execute o caso de teste
1. Se o erro continuar, elimine esses fatores
2. Se não, refutou a hipótese. Repita o processo;
Exemplo 1
Aplicando ao Debug
1. Estabilize o erro
2. Localize a causa do erro:
1. Reúna cenários que produzem o erro
2. Formule uma hipótese sobre o defeito2. Formule uma hipótese sobre o defeito
3. Planeje a prova da hipótese
4. Prove ou não a hipótese
3. Corrija o defeito
4. Teste
5. Procure erros semelhantes
Localize a fonte do erro
• Você também pode utilizar o método
científico nesse caso.
Dicas:Dicas:
• Código de qualidade
• Testes unitários
• Uso adequado das ferramentas
• Não ignore os resultados negativos
Localize a fonte do erro
Dicas:
• Organize-se
• Reduza a região suspeita
• Suspeite de trechos com antecedentes• Suspeite de trechos com antecedentes
• Suspeite de alterações recentes
• Considere os problemas comuns
• Explique o problema a outra pessoa
• Afaste-se do problema
Limite o tempo
• Estabeleça um limite de tempo para mudar de
estratégia;
• Até para partir para uma solução mais radical, • Até para partir para uma solução mais radical,
como reescrever o código.
Aplicando ao Debug
1. Estabilize o erro
2. Localize a causa do erro:
1. Reúna cenários que produzem o erro
2. Formule uma hipótese sobre o defeito2. Formule uma hipótese sobre o defeito
3. Planeje a prova da hipótese
4. Prove ou não a hipótese
3. Corrija o defeito
4. Teste
5. Procure erros semelhantes
Corrigindo um defeito
• Corrigir é a parte fácil;
• Assim, torna-se propensa a erros;
• As primeiras correções estão erradas em 50%
das vezes;
Dicas para a correção
• Entenda o problema
• Relaxe
• Corrija o problema, não o sintoma
• Salve o código original• Salve o código original
• Faça uma alteração por vez
• Faça alterações conscientemente
Dicas para a correção
• Verifique sua correção
• Crie um teste novo para o erro corrigido
• Procure defeitos semelhantes
Otimização de código
• Otimização de código é a prática de modificar
um código correto, tornando sua execução
mais eficiente.
• Não é a única maneira de melhorar o
desempenho do programa.
Por que otimizar?
• Só otimize, se houver um problema de
desempenho;
• Usuários se incomodam com desempenho • Usuários se incomodam com desempenho
quando interfere no trabalho deles;
• Satisfação pessoal ou inflar o ego não são
motivos para otimizar código.
Princípio de Pareto
• O Princípio de Pareto se aplica perfeitamente
à otimização de código;
• 20% do código consomem 80% do tempo de
execução;execução;
• Ou menos de 4% do código são responsáveis
por 50% do tempo de execução.
Mitos da otimização
• Quanto menos linhas de código, melhor será o
desempenho.
• Você deve otimizar à medida que escreve o
código.código.
• Um programa rápido é tão importante quanto
um correto.
Quando otimizar
1. Faça um projeto de qualidade, desenvolva o
programa, torne-o modular e modificável.
2. Quando estiver concluído e correto, verifique
o desempenho.o desempenho.
3. Se for pesado, otimize. Mas nunca antes de
ter certeza de que o precisa fazer.
Causas comuns de gargalo
• Entrada e saída
• Chamadas de sistema
• Linguagens interpretadas
• Erros• Erros
Medições
• Antes da otimização;
• Depois da otimização;
• Medidas devem ser precisas; • Medidas devem ser precisas;
• Tenha certeza que está medindo apenas o
código a ser otimizado.
Atenção!
• Intuição ou experiência não avaliam
desempenho corretamente, a única base para
avaliação são as medições.
for (int coluna=0; coluna<MAX_COLUNAS; coluna++) {
for (int linha=0; linha < MAX_LINHAS; linha++) {tabela[linha][coluna] = ......;
}
}
Resumo de otimização
1. Desenvolva o software com qualidade
2. Se o desempenho for insatisfatório:
1. Salve a última versão do código
2. Meça para encontrar gargalos
3. Avalie a viabilidade da otimização de código3. Avalie a viabilidade da otimização de código
4. Otimize o gargalo
5. Meça para avaliar a melhoria
6. Se a melhoria não aprimorar o desempenho, volta para o
código salvo
3. Repita a partir do passo 2
Comentários
Referências
• Code Complete (Steve McConnell)