A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.

Apresentações semelhantes


Apresentação em tema: "Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários."— Transcrição da apresentação:

1 Testes de Unidade

2 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários com mock objects; Testes unitários com mock objects; Exercício. Exercício. Tempo médio por slide: 3,4 minutos Previsão de conclusão da teoria: 20h15 Tempo para elaboração do projeto final: 2h (20h30 até 22h30) Obs: Nos slides já estão dispostos os exemplos práticos para tirarem vossas dúvidas. Estes exemplos serão explicados durante a exposição teórica!

3 3 Testes de Unidade O que é e porquê usar? O que é e porquê usar? Feitos para testar classes individuais; Feitos para testar classes individuais; Testa toda a interface da classe (métodos); Testa toda a interface da classe (métodos); Pode ser feito pelo projetista e pelo programador: Pode ser feito pelo projetista e pelo programador: Conhecido como teste de caixa branca; Conhecido como teste de caixa branca; Tem como objetivo identificar erros de lógica de programação na menor unidade de programação. Tem como objetivo identificar erros de lógica de programação na menor unidade de programação.

4 4 Testes de Unidade O que testar? O que testar? Todo o comportamento; Todo o comportamento; Cada linha do programa. Para cada linha de código, deve-se escrever no mínimo uma linha de teste; Cada linha do programa. Para cada linha de código, deve-se escrever no mínimo uma linha de teste; Condições limites (inferiores e superiores); Condições limites (inferiores e superiores);

5 5 Testes de Unidade Níveis de maturidade do teste: Níveis de maturidade do teste: Nível 0: não há diferença entre teste e depuração; Nível 0: não há diferença entre teste e depuração; Nível 1: o propósito do teste é mostrar que o programa funciona; Nível 1: o propósito do teste é mostrar que o programa funciona; Nível 2: o propósito é mostrar que o programa não funciona; Nível 2: o propósito é mostrar que o programa não funciona; Nível 3: o propósito não é provar nada, mas reduzir o risco de não funcionamento a um valor aceitável; Nível 3: o propósito não é provar nada, mas reduzir o risco de não funcionamento a um valor aceitável; Nível 4: Teste não é uma ação, mas sim uma disciplina mental (institucionalizada na empresa) que resulta em software de baixo risco sem que seja empregado muito esforço de teste (TDD). Nível 4: Teste não é uma ação, mas sim uma disciplina mental (institucionalizada na empresa) que resulta em software de baixo risco sem que seja empregado muito esforço de teste (TDD).

6 6 Testes de Unidade Problemas comuns que evitam a adoção desta prática: Problemas comuns que evitam a adoção desta prática: Muitas combinações de entradas para serem exercitadas; Muitas combinações de entradas para serem exercitadas; Dificuldade para determinar o resultado esperado para cada caso de teste; Dificuldade para determinar o resultado esperado para cada caso de teste; Baixa coesão dos objetos; Baixa coesão dos objetos; Gerentes que desconhecem testes ou não se preocupam efetivamente com a qualidade; Gerentes que desconhecem testes ou não se preocupam efetivamente com a qualidade; Testar comportamento de telas (coisas não “palpáveis”); Testar comportamento de telas (coisas não “palpáveis”); Nunca há tempo suficiente. Nunca há tempo suficiente.

7 7 Desenvolvimento orientado a testes (TDD) Como funciona? Como funciona? Escreve primeiro os testes para em seguida implementar os objetos reais; Escreve primeiro os testes para em seguida implementar os objetos reais; Inicialmente todos os testes devem falhar. À medida em que o programa for sendo construído, os testes vão sendo aprovados um a um; Inicialmente todos os testes devem falhar. À medida em que o programa for sendo construído, os testes vão sendo aprovados um a um; Os testes são escritos baseando-se nas regras de sistema e de negócio bem como nos contratos estabelecidos pelo design; Os testes são escritos baseando-se nas regras de sistema e de negócio bem como nos contratos estabelecidos pelo design;

8 8 Desenvolvimento orientado a testes (TDD) O que resolve? O que resolve? Após escrever o código, é muito difícil voltar e escrever os testes. Conclusão: o seu programa não terá testes de unidade; Após escrever o código, é muito difícil voltar e escrever os testes. Conclusão: o seu programa não terá testes de unidade; Testes de Unidade são medidas preventivas e portanto, é melhor prevenir do que remediar; Testes de Unidade são medidas preventivas e portanto, é melhor prevenir do que remediar; Sempre que houver um defeito, primeiro cria-se o teste simulando o defeito para depois corrigi-lo, garantindo que aquele problema não ocorrerá novamente. Sempre que houver um defeito, primeiro cria-se o teste simulando o defeito para depois corrigi-lo, garantindo que aquele problema não ocorrerá novamente.

9 9 Testes com MockObjects Imagine que estivéssemos desenvolvendo um software para automatizar as operações de um restaurante. Imagine que estivéssemos desenvolvendo um software para automatizar as operações de um restaurante. Entre as muitas funcionalidades desse sistema, uma essencial seria a geração da conta, que usaremos como exemplo. Entre as muitas funcionalidades desse sistema, uma essencial seria a geração da conta, que usaremos como exemplo. Uma conta típica tem muitas características, mas iremos nos preocupar apenas com a mais importante: o total a ser pago. Uma conta típica tem muitas características, mas iremos nos preocupar apenas com a mais importante: o total a ser pago. Nesse exemplo, iremos implementar um teste para validar se o total da conta está sendo calculado corretamente. Nesse exemplo, iremos implementar um teste para validar se o total da conta está sendo calculado corretamente.

10 10 Testes com mock objects Projeto de classes: Projeto de classes:

11 11 Testes com mock objects Figura 1 – Exemplo da conta impressa

12 12 Testes com mock objects A impressão de uma conta, como pode ser observado na anterior, é composta por linhas. A impressão de uma conta, como pode ser observado na anterior, é composta por linhas. Cada linha indica um item, sua quantidade, e o preço total (quantidade de itens da linha multiplicada pelo preço unitário do item). Cada linha indica um item, sua quantidade, e o preço total (quantidade de itens da linha multiplicada pelo preço unitário do item). Um item, por sua vez, possui um nome e um preço unitário. Um item, por sua vez, possui um nome e um preço unitário. Na parte inferior da impressão da conta é apresentado o valor total a ser pago, que é, como esperado, o somatório do valor total de cada linha da conta. Na parte inferior da impressão da conta é apresentado o valor total a ser pago, que é, como esperado, o somatório do valor total de cada linha da conta.

13 13 Testes com mock objects Classe Conta: Classe Conta:

14 14 Testes com mock objects Classe Item: Classe Item:

15 15 Testes com mock objects Classe Linha: Classe Linha:

16 16

17 17 Testes com mock objects No slide anterior, o teste foi criado, bem como a respectiva classe Conta, cujo método total() desejamos testar. No slide anterior, o teste foi criado, bem como a respectiva classe Conta, cujo método total() desejamos testar. Notem que as outras duas classes modeladas precisaram ser usadas durante a criação do teste: Linha e Item. Isso tornou o método de teste maior, mais complexo e mais demorado de ser implementado. Notem que as outras duas classes modeladas precisaram ser usadas durante a criação do teste: Linha e Item. Isso tornou o método de teste maior, mais complexo e mais demorado de ser implementado. Além disso, essa forma de confeccionar o teste faz com que não seja verdadeiramente um teste de unidade, pois a classe Conta não está sendo testada isoladamente. Além disso, essa forma de confeccionar o teste faz com que não seja verdadeiramente um teste de unidade, pois a classe Conta não está sendo testada isoladamente.teste de unidadeteste de unidade Se o teste deixa de funcionar devido a uma falha no código, isso pode ter sido causado por uma falha na classe Conta, Linha ou Item. Se o teste deixa de funcionar devido a uma falha no código, isso pode ter sido causado por uma falha na classe Conta, Linha ou Item.

18 18 Testes com mock objects Uma solução eficaz é o uso de mock objects (objetos “de mentira” ou objetos substitutos), que permitem isolar as classes de um sistema de forma bastante simples. Uma solução eficaz é o uso de mock objects (objetos “de mentira” ou objetos substitutos), que permitem isolar as classes de um sistema de forma bastante simples. No nosso exemplo, a classe Conta depende diretamente da classe Linha. No nosso exemplo, a classe Conta depende diretamente da classe Linha. Usar um mock object significa que, quando estivermos testando, ao invés de usarmos a classe Linha, usaremos uma outra, que “finge” ser essa classe, mas é mais simples e mais fácil de ser usada durante os testes (além disso, temos total controle sobre ela, pois é criada especialmente para os testes). Usar um mock object significa que, quando estivermos testando, ao invés de usarmos a classe Linha, usaremos uma outra, que “finge” ser essa classe, mas é mais simples e mais fácil de ser usada durante os testes (além disso, temos total controle sobre ela, pois é criada especialmente para os testes).

19 19 Testes com mock objects Interface necessária para isolar a classe Item da classe Conta. Interface necessária para isolar a classe Item da classe Conta.

20 20 Testes com mock objects Classe LinhaMock criada para testar o método total da classe Linha. Classe LinhaMock criada para testar o método total da classe Linha.

21 21 Testes com mock objects Alteração na classe Linha para implementar a interface ILinha, possibilitando a independência da classe Linha para a classe concreta Item. Alteração na classe Linha para implementar a interface ILinha, possibilitando a independência da classe Linha para a classe concreta Item.

22 22 Testes com mock objects Classe de teste da conta utilizando o objeto mock de linha. Classe de teste da conta utilizando o objeto mock de linha.

23 23 Testes com mock objects Usando uma interface ILinha, podemos evitar o uso da classe concreta Linha durante os testes e, em seu lugar, usar uma outra classe que finge ser a classe Linha. Isso só é possível porque estamos usando uma interface. Usando uma interface ILinha, podemos evitar o uso da classe concreta Linha durante os testes e, em seu lugar, usar uma outra classe que finge ser a classe Linha. Isso só é possível porque estamos usando uma interface.interface Um mock object é um objeto que se comporta como um substituto mais conveniente que o objeto real. Um mock object é um objeto que se comporta como um substituto mais conveniente que o objeto real. Ele resolve uma dependência importante para que um teste de unidade possa ser executado, mantendo o máximo de isolamento. Ele resolve uma dependência importante para que um teste de unidade possa ser executado, mantendo o máximo de isolamento. Além disso, freqüentemente é mais fácil instanciar e configurar um mock de forma apropriada para ser utilizado em um teste. Além disso, freqüentemente é mais fácil instanciar e configurar um mock de forma apropriada para ser utilizado em um teste. Em alguns casos, o uso do mock também permite evitar acessos a recursos mais demorados, como bancos de dados ou recursos na rede. Em alguns casos, o uso do mock também permite evitar acessos a recursos mais demorados, como bancos de dados ou recursos na rede. Isso permite que os testes possam ser executados rapidamente e de forma mais previsível. Ex.: (PersistenciaMock) Isso permite que os testes possam ser executados rapidamente e de forma mais previsível. Ex.: (PersistenciaMock)

24 24 Testes com mock objects O uso de mock objects é essencial para se obter o nível de isolamento desejável ao se criar testes de unidade. Sem eles, usar testes de unidade pode se tornar não apenas doloroso, mas também inviável. O uso de mock objects é essencial para se obter o nível de isolamento desejável ao se criar testes de unidade. Sem eles, usar testes de unidade pode se tornar não apenas doloroso, mas também inviável.testes de unidadetestes de unidadetestes de unidadetestes de unidade O nMock (http://nmock.org/ ) é uma ferramenta que possibilita a criação de mock objects dinamicamente, de maneira simples, permitindo que o desenvolvedor tenha total controle sobre o comportamento dos mocks criados. O nMock (http://nmock.org/ ) é uma ferramenta que possibilita a criação de mock objects dinamicamente, de maneira simples, permitindo que o desenvolvedor tenha total controle sobre o comportamento dos mocks criados.


Carregar ppt "Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários."

Apresentações semelhantes


Anúncios Google