debug otimizado

30
Aumentando a produtividade: DEBUG Rodrigo Aguas da Silva

Upload: scrumhalf-gpe

Post on 18-Dec-2014

139 views

Category:

Technology


1 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Debug Otimizado

Aumentando a produtividade:

DEBUGDEBUG

Rodrigo Aguas da Silva

Page 2: Debug Otimizado

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!

Page 3: Debug Otimizado

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?

Page 4: Debug Otimizado

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

Page 5: Debug Otimizado

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.

Page 6: Debug Otimizado

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.

Page 7: Debug Otimizado

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

Page 8: Debug Otimizado

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

Page 9: Debug Otimizado

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

Page 10: Debug Otimizado

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;

Page 11: Debug Otimizado

Exemplo 1

Page 12: Debug Otimizado

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

Page 13: Debug Otimizado

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

Page 14: Debug Otimizado

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

Page 15: Debug Otimizado

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.

Page 16: Debug Otimizado

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

Page 17: Debug Otimizado

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;

Page 18: Debug Otimizado

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

Page 19: Debug Otimizado

Dicas para a correção

• Verifique sua correção

• Crie um teste novo para o erro corrigido

• Procure defeitos semelhantes

Page 20: Debug Otimizado

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.

Page 21: Debug Otimizado

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.

Page 22: Debug Otimizado

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.

Page 23: Debug Otimizado

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.

Page 24: Debug Otimizado

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.

Page 25: Debug Otimizado

Causas comuns de gargalo

• Entrada e saída

• Chamadas de sistema

• Linguagens interpretadas

• Erros• Erros

Page 26: Debug Otimizado

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.

Page 27: Debug 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] = ......;

}

}

Page 28: Debug Otimizado

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

Page 29: Debug Otimizado

Comentários

Page 30: Debug Otimizado

Referências

• Code Complete (Steve McConnell)