depuração de software

34
Depuração de código Prof. Leonardo Soares e Silva

Upload: leonardo-soares

Post on 09-Jul-2015

380 views

Category:

Education


2 download

DESCRIPTION

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.

TRANSCRIPT

Page 1: Depuração de software

Depuração de códigoProf. Leonardo Soares e Silva

Page 2: Depuração de software

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

Problema

Page 3: Depuração de software

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;

}

Problema

Page 4: Depuração de software

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();

ctx.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocorreu um erro ao obter a lista de Servidores.", ""));

Problema

Page 5: Depuração de software

Sabemos onde estão nossos erros, pois o Java nos avisa

Estes avisos, para quem tem pouca experiência, podem serdifíceis de interpretar

Além disto não sabemos exatamente o que levou eles a ocorrerem

Problemas

Page 6: Depuração de software

Sabendo os valores das variáveis no momento de execução

Saber o comportamento de nosso código

Entendendo o que está acontecendo

Como resolver

Page 7: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

I - Simulação de execução de um código

Page 8: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

I - Simulação de execução de um código

Session = null

Page 9: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

I - Simulação de execução de um código

Page 10: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

II - Simulação de execução de um código

Page 11: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

I - Simulação de execução de um código

Page 12: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

I - Simulação de execução de um código

Session != null

Page 13: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

I - Simulação de execução de um código

Page 14: Depuração de software

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

I - Simulação de execução de um código

P = Objeto Pessoa

Page 15: Depuração de software

Depuração de código

Page 16: Depuração de software

Depuração de código

Page 17: Depuração de software

Executar o software

Identificar onde está o

erro

Marcar o trecho do

código que queremos “assistir”

Ir passo a passo

durante a execução do

código

Localizar o problema

Corrigir o problema

Como funciona a depuração

Page 18: Depuração de software

Ponto de parada (break point)

Passar dentro (Step in)

Passar fora (Step out)

Passar por fora (Step over)

Continuar (Continue)

Conceitos importantes

Page 19: Depuração de software

Especifica onde queremos que a execução do nossosoftware pare

A partir deste momento iremos depurar nossaaplicação

Na maioria das IDEs é destacada com uma linhavermelha

Podemos colocar quantos quiser

Ponto de parada

Page 20: Depuração de software

Depuração de código

Page 21: Depuração de software

Uma vez a execução do software parada, passamos a executá-lo linha a linha

Na maioria das IDEs a linha em execução é marcadacom a cor verde

É possível entrar em métodos que são invocados

Sair deles

Passar por eles

Depuração do código

Page 22: Depuração de software

Linha em execução durante a depuração

Page 23: Depuração de software

Visualiza a execução de um método invocado

Step in

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

Page 24: Depuração de software

Visualiza a execução de um método invocado

Step in

public Session getSession(){

}

Page 25: Depuração de software

Sai do passo a passo da execução de um métodoentrado através do Step in

Step out

Page 26: Depuração de software

Ignoramos o passo a passo de métodos que sãoinvocados

Step over

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

Page 27: Depuração de software

Ignoramos o passo a passo de métodos que sãoinvocados

Step over

public Pessoa getPessoaFromDb( int chavePrimaria ){

Session session = Hibernate.getSession();

if( session == null)

return null;

Pessoa p = PessoaDao.loadFromPrimaryKey(chavePrimaria);

return p;

}

Page 28: Depuração de software

Retorna a execução contínua do software

Continue

Page 29: Depuração de software

Exemplo de depuração

Page 30: Depuração de software

Implementem os códigos e verifiquem o que ocorre

Exercício

Page 31: Depuração de software

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");

}

Exercício 01

Page 32: Depuração de software

public static void main(String[] args) {

String nomes[] = new String[3];

nomes[1] = "disciplina";

nomes[2] = "teste";

nomes[3] = "software";

}

Exercício 02

Page 33: Depuração de software

A utilizamos apenas quando há problemas ou dúvidasno código

Passado este momento executamos nosso códigonormalmente

Considerações sobre a depuração

Page 34: Depuração de software

Identifiquem como funciona a depuração no Eclipse

Explicação oral na próxima aula sobre o funcionamento e conceitos da depuração

Exercício para casa