Debug Otimizado

343 visualizações

Publicada em

Projeto Capacitar: Setembro de 2011
Apresentação: Rodrigo Aguas

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
343
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Debug Otimizado

  1. 1. Aumentando a produtividade: DEBUG Rodrigo Aguas da Silva
  2. 2. 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; Mas não precisa ser assim!
  3. 3. 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?
  4. 4. Estratégia supersticiosa1. 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 programa até que pareça funcionar.Dicas:• Não perca tempo entendendo o problema• Não faça backup do código original
  5. 5. FAIL!Sintomas do uso:• Defeitos ocultos da linguagem (quando é lua cheia)• Editores de código possuídos• 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.
  6. 6. 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.
  7. 7. Método Científico1. Reúna dados por meio de experimentos repetidos2. Formule uma hipótese considerando esses dados3. Elabore um experimento para provar ou não a hipótese4. Prove ou não a hipótese5. Repita tantas vezes quanto for necessário
  8. 8. Aplicando ao Debug1. Estabilize o erro2. Localize a causa do erro: 1. Reúna cenários que produzem o erro 2. Formule uma hipótese sobre o defeito 3. Planeje a prova da hipótese 4. Prove ou não a hipótese3. Corrija o defeito4. Teste5. Procure erros semelhantes
  9. 9. Estabilize o erro• Se um defeito não ocorre de modo repetitivo, é quase impossível diagnosticá-lo.• Causas comuns de instabilidade: – valores iniciais – encadeamento temporal
  10. 10. Estabilize o erroSimplificar 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 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;
  11. 11. Exemplo 1
  12. 12. Aplicando ao Debug1. Estabilize o erro2. Localize a causa do erro: 1. Reúna cenários que produzem o erro 2. Formule uma hipótese sobre o defeito 3. Planeje a prova da hipótese 4. Prove ou não a hipótese3. Corrija o defeito4. Teste5. Procure erros semelhantes
  13. 13. Localize a fonte do erro• Você também pode utilizar o método científico nesse caso.Dicas:• Código de qualidade• Testes unitários• Uso adequado das ferramentas• Não ignore os resultados negativos
  14. 14. Localize a fonte do erroDicas:• Organize-se• Reduza a região suspeita• Suspeite de trechos com antecedentes• Suspeite de alterações recentes• Considere os problemas comuns• Explique o problema a outra pessoa• Afaste-se do problema
  15. 15. Limite o tempo• Estabeleça um limite de tempo para mudar de estratégia;• Até para partir para uma solução mais radical, como reescrever o código.
  16. 16. Aplicando ao Debug1. Estabilize o erro2. Localize a causa do erro: 1. Reúna cenários que produzem o erro 2. Formule uma hipótese sobre o defeito 3. Planeje a prova da hipótese 4. Prove ou não a hipótese3. Corrija o defeito4. Teste5. Procure erros semelhantes
  17. 17. 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;
  18. 18. Dicas para a correção• Entenda o problema• Relaxe• Corrija o problema, não o sintoma• Salve o código original• Faça uma alteração por vez• Faça alterações conscientemente
  19. 19. Dicas para a correção• Verifique sua correção• Crie um teste novo para o erro corrigido• Procure defeitos semelhantes
  20. 20. 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.
  21. 21. Por que otimizar?• Só otimize, se houver um problema de 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.
  22. 22. 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;• Ou menos de 4% do código são responsáveis por 50% do tempo de execução.
  23. 23. Mitos da otimização• Quanto menos linhas de código, melhor será o desempenho.• Você deve otimizar à medida que escreve o código.• Um programa rápido é tão importante quanto um correto.
  24. 24. Quando otimizar1. 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.3. Se for pesado, otimize. Mas nunca antes de ter certeza de que o precisa fazer.
  25. 25. Causas comuns de gargalo• Entrada e saída• Chamadas de sistema• Linguagens interpretadas• Erros
  26. 26. Medições• Antes da otimização;• Depois da otimização;• Medidas devem ser precisas;• Tenha certeza que está medindo apenas o código a ser otimizado.
  27. 27. 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] = ......; }}
  28. 28. Resumo de otimização1. Desenvolva o software com qualidade2. 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ó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 salvo3. Repita a partir do passo 2
  29. 29. Comentários
  30. 30. Referências• Code Complete (Steve McConnell)

×