SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Aumentando a produtividade:
         DEBUG
      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;


       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
   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
• 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ó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 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:
  – 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
   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 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:
• 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 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,
  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 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
•   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
  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;
• 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.
• 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.
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
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.
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ó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)

Contenu connexe

Tendances

Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Inael Rodrigues
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaChristian Cunha
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilBruno Eustáquio
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador PragmaticoLeonardo Fernandes
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de SoftwareIgor Takenami
 
Testando seus testes com Stryker.NET
Testando seus testes com Stryker.NET Testando seus testes com Stryker.NET
Testando seus testes com Stryker.NET Robson Soares Amorim
 
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...minastestingconference
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHPCezar Souza
 
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...Elias Souza
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação Icaro Camelo
 
Básico sobre Debugging com Java
Básico sobre Debugging com JavaBásico sobre Debugging com Java
Básico sobre Debugging com JavajesuinoPower
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Robson Agapito Correa
 
Automação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas WebAutomação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas WebRodrigo Veiga
 

Tendances (20)

Metodologias Ágeis
Metodologias ÁgeisMetodologias Ágeis
Metodologias Ágeis
 
Debugging node
Debugging nodeDebugging node
Debugging node
 
Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7Livro Código Limpo: Tratamento de Erros - Cap 7
Livro Código Limpo: Tratamento de Erros - Cap 7
 
TDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian CunhaTDD no Community Launch 2010 - Christian Cunha
TDD no Community Launch 2010 - Christian Cunha
 
TDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software ÁgilTDD - Pós Graduação em Engenharia de Software Ágil
TDD - Pós Graduação em Engenharia de Software Ágil
 
Seja Um Programador Pragmatico
Seja Um Programador PragmaticoSeja Um Programador Pragmatico
Seja Um Programador Pragmatico
 
Introdução a Testes de Software
Introdução a Testes de SoftwareIntrodução a Testes de Software
Introdução a Testes de Software
 
Testando seus testes com Stryker.NET
Testando seus testes com Stryker.NET Testando seus testes com Stryker.NET
Testando seus testes com Stryker.NET
 
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
[MTC 2021] Tests smells: aquele cheirinho de que algo não está bom no seu cód...
 
Test-Driven Development with PHP
Test-Driven Development with PHPTest-Driven Development with PHP
Test-Driven Development with PHP
 
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...TDC Florianópolis 2013  - Refatorar! porque ninguém gosta de código que cheir...
TDC Florianópolis 2013 - Refatorar! porque ninguém gosta de código que cheir...
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
Testes de Sofware
Testes de SofwareTestes de Sofware
Testes de Sofware
 
Básico sobre Debugging com Java
Básico sobre Debugging com JavaBásico sobre Debugging com Java
Básico sobre Debugging com Java
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Coding dojo
Coding dojoCoding dojo
Coding dojo
 
Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.Mutant Testing: um mundo para um X-Testing.
Mutant Testing: um mundo para um X-Testing.
 
Programação Orientada a Gambiarra
Programação Orientada a GambiarraProgramação Orientada a Gambiarra
Programação Orientada a Gambiarra
 
Automação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas WebAutomação de Testes de Aceitação em Sistemas Web
Automação de Testes de Aceitação em Sistemas Web
 

En vedette

Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.Deana Soto
 
Nilpan Panetone e suas variações
Nilpan Panetone e suas variaçõesNilpan Panetone e suas variações
Nilpan Panetone e suas variaçõesAntonio Freitas
 
campañas en Paraguay 2005
campañas en Paraguay 2005campañas en Paraguay 2005
campañas en Paraguay 2005hernu76
 
marta perez y rebeca pardo
marta perez y rebeca pardomarta perez y rebeca pardo
marta perez y rebeca pardomartayrebe
 
E L T R E N Y E L S O L
E L  T R E N  Y  E L  S O LE L  T R E N  Y  E L  S O L
E L T R E N Y E L S O Lrevistasiringa
 
marta perez y rebeca pardo
marta perez y rebeca pardomarta perez y rebeca pardo
marta perez y rebeca pardomartayrebe
 
Influenza A( H1 N1) Medidas De Prevención(3)
Influenza  A( H1 N1) Medidas De Prevención(3)Influenza  A( H1 N1) Medidas De Prevención(3)
Influenza A( H1 N1) Medidas De Prevención(3)juaninmtb
 
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.Deana Soto
 
Las Universidadesde Harvardy Cambridge
Las Universidadesde Harvardy CambridgeLas Universidadesde Harvardy Cambridge
Las Universidadesde Harvardy Cambridgeguestbcab05
 
Campaña en Barrio lindo
Campaña en Barrio lindoCampaña en Barrio lindo
Campaña en Barrio lindohernu76
 
Anexos Para Cd. Final
Anexos Para Cd. FinalAnexos Para Cd. Final
Anexos Para Cd. Finaljuaninmtb
 
reclamacao-disciplinar-caso-tiririca
reclamacao-disciplinar-caso-tiriricareclamacao-disciplinar-caso-tiririca
reclamacao-disciplinar-caso-tiriricaClaudio Oliveira
 

En vedette (20)

Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
 
Nilpan Panetone e suas variações
Nilpan Panetone e suas variaçõesNilpan Panetone e suas variações
Nilpan Panetone e suas variações
 
campañas en Paraguay 2005
campañas en Paraguay 2005campañas en Paraguay 2005
campañas en Paraguay 2005
 
marta perez y rebeca pardo
marta perez y rebeca pardomarta perez y rebeca pardo
marta perez y rebeca pardo
 
E L T R E N Y E L S O L
E L  T R E N  Y  E L  S O LE L  T R E N  Y  E L  S O L
E L T R E N Y E L S O L
 
HTML5 & CSS3
HTML5 & CSS3HTML5 & CSS3
HTML5 & CSS3
 
marta perez y rebeca pardo
marta perez y rebeca pardomarta perez y rebeca pardo
marta perez y rebeca pardo
 
Ambito Real
Ambito RealAmbito Real
Ambito Real
 
Historieta
HistorietaHistorieta
Historieta
 
Influenza A( H1 N1) Medidas De Prevención(3)
Influenza  A( H1 N1) Medidas De Prevención(3)Influenza  A( H1 N1) Medidas De Prevención(3)
Influenza A( H1 N1) Medidas De Prevención(3)
 
BióNica[1]
BióNica[1]BióNica[1]
BióNica[1]
 
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
Casa Fallingwater.Sobre Su DiseñAdor Y La Obra.
 
CSS & JQquery
CSS & JQqueryCSS & JQquery
CSS & JQquery
 
Las Universidadesde Harvardy Cambridge
Las Universidadesde Harvardy CambridgeLas Universidadesde Harvardy Cambridge
Las Universidadesde Harvardy Cambridge
 
ANTONIA LIMA DE MOURA
ANTONIA LIMA DE MOURAANTONIA LIMA DE MOURA
ANTONIA LIMA DE MOURA
 
Campaña en Barrio lindo
Campaña en Barrio lindoCampaña en Barrio lindo
Campaña en Barrio lindo
 
Anexos Para Cd. Final
Anexos Para Cd. FinalAnexos Para Cd. Final
Anexos Para Cd. Final
 
reclamacao-disciplinar-caso-tiririca
reclamacao-disciplinar-caso-tiriricareclamacao-disciplinar-caso-tiririca
reclamacao-disciplinar-caso-tiririca
 
ISLAM NO BRASIL
ISLAM NO BRASILISLAM NO BRASIL
ISLAM NO BRASIL
 

Similaire à Debug Otimizado

Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitDomingos Teruel
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de softwareHeider Lopes
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmáticaelliando dias
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionLeonardo Molinari
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionLeonardo Molinari
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionLeonardo Molinari
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaFabrício Campos
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com PythonDorneles Treméa
 
Quero ser um caçador de bugs
Quero ser um caçador de bugsQuero ser um caçador de bugs
Quero ser um caçador de bugsSarah Pimentel
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IVJoão Lourenço
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaRogerio Fontes
 
50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidos50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidosEdvan Mateó
 
Verdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaVerdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaLivia Gabos
 

Similaire à Debug Otimizado (20)

Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnitQualidade no desenvolvimento de Software com TDD e PHPUnit
Qualidade no desenvolvimento de Software com TDD e PHPUnit
 
1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software1 2 3 - Testando - Automatizando os testes de software
1 2 3 - Testando - Automatizando os testes de software
 
Programação Pragmática
Programação PragmáticaProgramação Pragmática
Programação Pragmática
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
At Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final VersionAt Ma Qualidade Molinari V11 Final Version
At Ma Qualidade Molinari V11 Final Version
 
Introdução ao Teste de Software
Introdução ao Teste de SoftwareIntrodução ao Teste de Software
Introdução ao Teste de Software
 
Introdução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem práticaIntrodução ao Teste de Software - Uma abordagem prática
Introdução ao Teste de Software - Uma abordagem prática
 
O programador pragmático
O programador pragmáticoO programador pragmático
O programador pragmático
 
Testes e depuração de código com Python
Testes e depuração de código com PythonTestes e depuração de código com Python
Testes e depuração de código com Python
 
Quero ser um caçador de bugs
Quero ser um caçador de bugsQuero ser um caçador de bugs
Quero ser um caçador de bugs
 
Testes Funcionais - Unidade IV
Testes Funcionais - Unidade IVTestes Funcionais - Unidade IV
Testes Funcionais - Unidade IV
 
Testes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicandoTestes de unidade - Conhecendo e aplicando
Testes de unidade - Conhecendo e aplicando
 
Fundamentos de Testes de Software
Fundamentos de Testes de SoftwareFundamentos de Testes de Software
Fundamentos de Testes de Software
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidos50978145 algoritmos-exercicios-resolvidos
50978145 algoritmos-exercicios-resolvidos
 
Verdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostariaVerdades e mitos sobre testes que eu gostaria
Verdades e mitos sobre testes que eu gostaria
 

Plus de ScrumHalf Tool

Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014
Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014
Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014ScrumHalf Tool
 
Workshop Kanban - Aprenda Fazendo
Workshop Kanban - Aprenda FazendoWorkshop Kanban - Aprenda Fazendo
Workshop Kanban - Aprenda FazendoScrumHalf Tool
 
Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013
Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013
Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013ScrumHalf Tool
 
Requisitos do produto - Histórias e o Product Backlog
Requisitos do produto - Histórias e o Product BacklogRequisitos do produto - Histórias e o Product Backlog
Requisitos do produto - Histórias e o Product BacklogScrumHalf Tool
 
O Time Scrum e suas responsabilidades - Papéis do Scrum
O Time Scrum e suas responsabilidades - Papéis do ScrumO Time Scrum e suas responsabilidades - Papéis do Scrum
O Time Scrum e suas responsabilidades - Papéis do ScrumScrumHalf Tool
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração ContínuaScrumHalf Tool
 
Equipes Auto Organizáveis
Equipes Auto OrganizáveisEquipes Auto Organizáveis
Equipes Auto OrganizáveisScrumHalf Tool
 

Plus de ScrumHalf Tool (11)

Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014
Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014
Scrumetes - Uma Comunidade de Práticas - Agile Brazil_2014
 
Workshop Kanban - Aprenda Fazendo
Workshop Kanban - Aprenda FazendoWorkshop Kanban - Aprenda Fazendo
Workshop Kanban - Aprenda Fazendo
 
Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013
Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013
Padrões e Antipadrões da Adoção da Agilidade no Governo - Agile Brazil 2013
 
Hibernate
HibernateHibernate
Hibernate
 
Requisitos do produto - Histórias e o Product Backlog
Requisitos do produto - Histórias e o Product BacklogRequisitos do produto - Histórias e o Product Backlog
Requisitos do produto - Histórias e o Product Backlog
 
O Time Scrum e suas responsabilidades - Papéis do Scrum
O Time Scrum e suas responsabilidades - Papéis do ScrumO Time Scrum e suas responsabilidades - Papéis do Scrum
O Time Scrum e suas responsabilidades - Papéis do Scrum
 
Porque utilizar JBoss
Porque utilizar JBossPorque utilizar JBoss
Porque utilizar JBoss
 
ITIL v3
ITIL v3ITIL v3
ITIL v3
 
Integração Contínua
Integração ContínuaIntegração Contínua
Integração Contínua
 
Equipes Auto Organizáveis
Equipes Auto OrganizáveisEquipes Auto Organizáveis
Equipes Auto Organizáveis
 
Capacitar
CapacitarCapacitar
Capacitar
 

Debug Otimizado

  • 1. Aumentando a produtividade: DEBUG Rodrigo Aguas da Silva
  • 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. 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. 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 programa até que pareça funcionar. Dicas: • Não perca tempo entendendo o problema • Não faça backup do código original
  • 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. 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. 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ótese 4. Prove ou não a hipótese 5. Repita tantas vezes quanto for necessário
  • 8. 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 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
  • 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. 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 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;
  • 12. 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 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
  • 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. Localize a fonte do erro Dicas: • 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. 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. 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 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
  • 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. 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. Dicas para a correção • Verifique sua correção • Crie um teste novo para o erro corrigido • Procure defeitos semelhantes
  • 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. 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. 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. 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. 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. 3. Se for pesado, otimize. Mas nunca antes de ter certeza de que o precisa fazer.
  • 25. Causas comuns de gargalo • Entrada e saída • Chamadas de sistema • Linguagens interpretadas • Erros
  • 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. 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. 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ó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
  • 30. Referências • Code Complete (Steve McConnell)