Depuração de software

840 visualizações

Publicada em

Aula ministrada no IFPE - Campus Garanhuns na disciplina de teste de software. Abordar conceitos e a prática no uso da depuração de código de software (debug) para resolução de problemas.

Publicada em: Educação
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

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

Nenhuma nota no slide
  • Qualerropodeocorrer?
  • Écomoassistiraonossocódigosendoexecutado
  • Depuração de software

    1. 1. Depuração de código Prof. Leonardo Soares e Silva
    2. 2. Problema public double somarIdades(){ Pessoa leonardo = Database.getPessoaFromDb(78); Pessoa joaquim = null; Double idade = leonardo.getIdade() + joaquim.getIdade(); return idade; } 1) Qual erro pode ocorrer? R - NullPointerException
    3. 3. Problema public double somarIdades(){ Pessoa leonardo = Database.getPessoaFromDb(78); Pessoa joaquim = Database.getPessoaFromDb(79); Double idade = leonardo.getIdade() + joaquim.getIdade(); return idade; } public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
    4. 4. Problema public ControleCurso() { curso = new Curso(); selecionado = null; dao = new CursoDao(); List<Aluno> listaAlunos = new ArrayList<Aluno>(); try { for (int i = 0; i < alunoDao.recuperarTodos().size(); i++) { Aluno obj = alunoDao.recuperarTodos().get(i); if (obj.getAtivo() == 1) { listaAlunos.add(obj); } } } catch (Exception e) { FacesContext ctx = FacesContext.getCurrentInstance(); ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao obter a lista de Cursos.", "")); } alunosAtivos = new ArrayList<Aluno>(listaAlunos); List<Servidor> listaServidores = new ArrayList<Servidor>(); try { for (int i = 0; i < servidorDao.recuperarTodos().size(); i++) { Servidor obj = servidorDao.recuperarTodos().get(i); if (obj.getAtivo() == 1) { listaServidores.add(obj); } } } catch (Exception e) { FacesContext ctx = FacesContext.getCurrentInstance();
    5. 5. Problemas Sabemos onde estão nossos erros, pois o Java nos avisa Estes avisos, para quem tem pouca experiência, podem ser difíceis de interpretar Além disto não sabemos exatamente o que levou eles a ocorrerem
    6. 6. Como resolver Sabendo os valores das variáveis no momento de execução Saber o comportamento de nosso código Entendendo o que está acontecendo
    7. 7. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
    8. 8. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; } Session = null
    9. 9. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
    10. 10. II - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
    11. 11. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
    12. 12. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; } Session != null
    13. 13. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
    14. 14. I - Simulação de execução de um código public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; } P = Objeto Pessoa
    15. 15. Depuração de código
    16. 16. Depuração de código
    17. 17. Como funciona a depuração Corrigir o problema Executar o software Identificar onde está o erro Localizar o problema Ir passo a passo durante a execução do código Marcar o trecho do código que queremos “assistir”
    18. 18. Conceitos importantes Ponto de parada (break point) Passar dentro (Step in) Passar fora (Step out) Passar por fora (Step over) Continuar (Continue)
    19. 19. Ponto de parada Especifica onde queremos que a execução do nosso software pare A partir deste momento iremos depurar nossa aplicação Na maioria das IDEs é destacada com uma linha vermelha Podemos colocar quantos quiser
    20. 20. Depuração de código
    21. 21. Depuração do código Uma vez a execução do software parada, passamos a executá-lo linha a linha Na maioria das IDEs a linha em execução é marcada com a cor verde É possível entrar em métodos que são invocados Sair deles Passar por eles
    22. 22. Linha em execução durante a depuração
    23. 23. Step in Visualiza a execução de um método invocado public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p; }
    24. 24. Step in Visualiza a execução de um método invocado public Session getSession(){ … … }
    25. 25. Step out Sai do passo a passo da execução de um método entrado através do Step in
    26. 26. Step over Ignoramos o passo a passo de métodos que são invocados public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p;
    27. 27. Step over Ignoramos o passo a passo de métodos que são invocados public Pessoa getPessoaFromDb( int chavePrimaria ){ Session session = Hibernate.getSession(); if( session == null) return null; Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria); return p;
    28. 28. Continue Retorna a execução contínua do software
    29. 29. Exemplo de depuração
    30. 30. Exercício Implementem os códigos e verifiquem o que ocorre
    31. 31. Exercício 01 public class Pessoa { String cpf; // gets e setters } public static void comparar(){ Pessoa leonardo = new Pessoa(“12345”); Pessoa leo = new Pessoa(“12345”); if( leonardo == leo ){ System.out.println("Iguais"); } System.out.println(”Diferentes"); }
    32. 32. Exercício 02 public static void main(String[] args) { String nomes[] = new String[3]; nomes[1] = "disciplina"; nomes[2] = "teste"; nomes[3] = "software"; }
    33. 33. Considerações sobre a depuração A utilizamos apenas quando há problemas ou dúvidas no código Passado este momento executamos nosso código normalmente
    34. 34. Exercício para casa Identifiquem como funciona a depuração no Eclipse Explicação oral na próxima aula sobre o funcionamento e conceitos da depuração

    ×