1 2 3 - Testando - Automatizando os testes de software

87
1, 2, 3 Testando Automatizando os testes do software

description

Introdução a testes unitários, tdd e utilização do junit.

Transcript of 1 2 3 - Testando - Automatizando os testes de software

Page 1: 1 2 3 - Testando - Automatizando os testes de software

1, 2, 3 TestandoAutomatizando os testes do software

Page 2: 1 2 3 - Testando - Automatizando os testes de software

Agenda✓ Como desenvolvemos hoje?

✓ Por que testar?

✓ Desculpas para não testar

Page 3: 1 2 3 - Testando - Automatizando os testes de software

Agenda✓ Tipos de testes

✓ O que é o tal do TDD?

✓ Os benefícios do TDD

Page 4: 1 2 3 - Testando - Automatizando os testes de software

Agenda✓ Os princípios do TDD

✓ Exemplo prático de um processo TDD

✓ O que evitar

Page 5: 1 2 3 - Testando - Automatizando os testes de software

Como desenvolvemos hoje?

Page 6: 1 2 3 - Testando - Automatizando os testes de software

Por que testar?

Page 7: 1 2 3 - Testando - Automatizando os testes de software

Quem já passou por isso sabe?

Page 8: 1 2 3 - Testando - Automatizando os testes de software

Quem já passou por isso sabe?

Page 9: 1 2 3 - Testando - Automatizando os testes de software

Por que automatizar os testes?

Testes são documentações executáveis

Page 10: 1 2 3 - Testando - Automatizando os testes de software

Testes garantem mudanças sem medo

Por que automatizar os testes?

Page 11: 1 2 3 - Testando - Automatizando os testes de software

Testes exercitam o software

Por que automatizar os testes?

Page 12: 1 2 3 - Testando - Automatizando os testes de software

Para isso precisamos mudar a forma de pensar

Page 13: 1 2 3 - Testando - Automatizando os testes de software

Uma “nova” forma de pensar

Page 14: 1 2 3 - Testando - Automatizando os testes de software

Desculpas pra não escrever os testes

Não tenho tempo para isso

Page 15: 1 2 3 - Testando - Automatizando os testes de software

Vou demorar muito mais!

Desculpas pra não escrever os testes

Page 16: 1 2 3 - Testando - Automatizando os testes de software

Código legado é impossível de testar!

Desculpas pra não escrever os testes

Page 17: 1 2 3 - Testando - Automatizando os testes de software

Isso é responsabilidade do testador!

Desculpas pra não escrever os testes

Page 18: 1 2 3 - Testando - Automatizando os testes de software

Compila! Logo, funciona!

Desculpas pra não escrever os testes

Page 19: 1 2 3 - Testando - Automatizando os testes de software

Tipo de Testes

Page 20: 1 2 3 - Testando - Automatizando os testes de software

Tipos de Testes

➢ Testes de Carga

➢ Testes de UI

➢ Testes de Desempenho

➢ Testes de Integração

➢ Testes de Aceitação

➢ Testes Unitários

Page 21: 1 2 3 - Testando - Automatizando os testes de software

Testes unitários

Conjunto de programas individuais que

validam unidades de código (métodos, procs, functions, entre outros) para determinar

que seu comportamento está correto

Page 22: 1 2 3 - Testando - Automatizando os testes de software

Testes unitáriosQuanto menor for uma unidade de código

testada (método, função, etc.) melhor

Page 23: 1 2 3 - Testando - Automatizando os testes de software

Testes unitários

Os testes unitários devem ser

independentes uns dos outros

Page 24: 1 2 3 - Testando - Automatizando os testes de software

O que testar?

Fonte: http://blog.stevensanderson.com/2009/11/04/selective-unit-testing-costs-and-benefits/

Page 25: 1 2 3 - Testando - Automatizando os testes de software

Testes unitários em números➢ Testes consomem entre 20% e 35% do projeto

➢ Redução de 5% a 10% no esforço de testes após a automação

➢ Em aplicações pacote, automatização de testes atinge 50% de cobertura

Page 26: 1 2 3 - Testando - Automatizando os testes de software

Técnica para desenvolvimento de software cujo processo é formado por

pequenas iterações e os testes são

escritos primeiro

TDD - Test Driven Development

Page 27: 1 2 3 - Testando - Automatizando os testes de software

Não é um método para testar software, mas para (re)construir software!

TDD - Test Driven Development

Page 28: 1 2 3 - Testando - Automatizando os testes de software

Core do TDD

● Red: adicona um teste que falha

● Green: Adiciona qualquer código que faça o teste passar

● Yellow: refatora o código conforme o necessário

Page 29: 1 2 3 - Testando - Automatizando os testes de software

Beneficios do TDD

Garante a existência de testes unitários

Page 30: 1 2 3 - Testando - Automatizando os testes de software

Beneficios do TDD

Diminui a quantidade de erros melhorando a

qualidade do código

Page 31: 1 2 3 - Testando - Automatizando os testes de software

Beneficios do TDD

Testes servem como

especificações mostrando como

funciona o sistema!

Page 32: 1 2 3 - Testando - Automatizando os testes de software

Beneficios do TDD

Melhora a arquitetura do software já que

temos um maior desacoplamento e

coesão

Page 33: 1 2 3 - Testando - Automatizando os testes de software

Princípios do TDD

Testes devem ser isolados, ou seja, não deve

depender do sucesso do outro

Page 34: 1 2 3 - Testando - Automatizando os testes de software

Testes devem ser:

Princípios do TDD

Claros Simples Consistentes

Page 35: 1 2 3 - Testando - Automatizando os testes de software

Um conceito e uma

confirmação por teste

Princípios do TDD

Page 36: 1 2 3 - Testando - Automatizando os testes de software

Implementando uma calculadora

Hora da Implementação

Page 37: 1 2 3 - Testando - Automatizando os testes de software

Implementando uma calculadora

● Método para realizar a soma○ Recebe como entrada dois números○ Retorna o resultado da soma

Page 38: 1 2 3 - Testando - Automatizando os testes de software

Implementando uma calculadora

● Método para realizar a subtração○ Recebe como entrada dois números○ Retorna o resultado da subtração

Page 39: 1 2 3 - Testando - Automatizando os testes de software

Implementando uma calculadora

● Método para realizar a multiplicação○ Recebe como entrada dois números○ Retorna o resultado da multiplicação

Page 40: 1 2 3 - Testando - Automatizando os testes de software

● Método para realizar a divisãoo Lançar exceção quando receber 0 no denominador

Implementando uma calculadora

Page 41: 1 2 3 - Testando - Automatizando os testes de software

Sabendo os requisitos vamos fazer um DOJO??

Page 42: 1 2 3 - Testando - Automatizando os testes de software

O que é o DOJO?O principal objetivo é praticar, aprender, se

divertir e ensinar técnicas de desenvolvimento de software.

Page 43: 1 2 3 - Testando - Automatizando os testes de software

Como Faremos???● Programação baseada em testes

● Baby Steps

● Pair Programming

Page 44: 1 2 3 - Testando - Automatizando os testes de software

Hora da Prática● O precisamos ter para realizar o tutorial:

o Ambiente Java configuradoo Maven instaladoo IDE

Page 45: 1 2 3 - Testando - Automatizando os testes de software

Hora da práticaCriando um projeto JAVA com testes utilizando

o Maven

mvn archetype:generate -DgroupId=br.com.heidertreinamentos -DartifactId=exemplostestesunitarios -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

Page 46: 1 2 3 - Testando - Automatizando os testes de software

Hora da práticaAbrir o projeto na sua IDE preferida.

Page 47: 1 2 3 - Testando - Automatizando os testes de software

Estrutura do Projeto

main: Código fonte da sua aplicação

test: Código para testar a sua aplicação

Page 48: 1 2 3 - Testando - Automatizando os testes de software

Configuração do MavenNo pom.xml alterar a versão do junit para a versão 4.10

Após isso atualizar as dependências:mvn clean package

Page 49: 1 2 3 - Testando - Automatizando os testes de software

Importante

Não é necessário utilizar o Maven na criação do projeto, porém ele é de grande importância

para gerenciar as dependências da sua aplicação.

Page 50: 1 2 3 - Testando - Automatizando os testes de software

Antes de começar precisamos saber

Além dos casos de testes simples, temos 4 métodos que precisamos conhecer:@BeforeClass@AfterClass@Before@After

Page 51: 1 2 3 - Testando - Automatizando os testes de software

@BeforeClass

Nome de Método Padrão: setUpClassNeste método devem ser colocados códigos que precisam ser executados antes da criação de um objeto da classe de teste, ou seja, um código do qual todos os métodos de teste podem tirar algum proveito. Pode ser a criação de uma conexão com o banco de dados, por exemplo, ou a leitura de um arquivo no sistema de arquivos.

A anotação que acompanha o método (@BeforeClass) pode ser adicionada a qualquer método, e nesse caso, todos os métodos que tiverem essa anotação serão executados na ordem em que aparecem declarados, e antes de qualquer caso de teste específico.

Page 52: 1 2 3 - Testando - Automatizando os testes de software

@AfterClass

Nome de Método Padrão: tearDownClass()Neste método deverão ser colocados códigos que precisam ser executados assim que todos os casos de teste tiverem sido executados.

Tais códigos podem ser referentes a liberação de recursos adquiridos no método setUpClass(), como o fechamento de conexões com o banco de dados, ou à liberação de arquivos.

A anotação @AfterClass pode acompanhar qualquer método, e nesses casos todos os métodos serão executados para a liberação de recursos, na ordem em que aparecem declarados.

Page 53: 1 2 3 - Testando - Automatizando os testes de software

@BeforeNome de método padrão: setUp

O método setUp() pode ser utilizado para a inicialização de recursos antes da execução de cada método de teste. É o local ideal para obter e inicializar recursos que precisam ser reiniciados a cada teste.

Assim como as outras anotações, @Before pode ser adicionado a outros métodos.

Page 54: 1 2 3 - Testando - Automatizando os testes de software

@AfterNome de Método Padrão: tearDown()

O método tearDown() é utilizado para a liberação de recursos ao final de cada método de teste. Estes recursos geralmente são os que foram obtidos no método setUp().

A anotação @After pode, assim como as demais, ser utilizada com outros métodos.

Page 55: 1 2 3 - Testando - Automatizando os testes de software

Criando a classe de teste

Page 56: 1 2 3 - Testando - Automatizando os testes de software

Implementando o teste somar

O teste agora esta implementado, porém

teremos erro já que ainda não temos a classe

Calculadora. Crie a classe e o método somar.

Page 57: 1 2 3 - Testando - Automatizando os testes de software

Implementando o teste somar

Implementamos o teste somente para

passar conseguirmos compilar e executar a

rotina de teste

Page 58: 1 2 3 - Testando - Automatizando os testes de software

Rodando os testesResultado do Teste

Page 59: 1 2 3 - Testando - Automatizando os testes de software

Implementando o método somar

Ok, o teste passou, porém ainda não esta pronto. O

próximo passo é realizar a refatoração do código para

implementarmos a funcionalidade soma. Após

isso, rodar o teste novamente!!!

Método Implementado

Page 60: 1 2 3 - Testando - Automatizando os testes de software

Processo com sucesso

Page 61: 1 2 3 - Testando - Automatizando os testes de software

Fizemos o ciclo

Page 62: 1 2 3 - Testando - Automatizando os testes de software

Pratique um poucoImplemente● Os testes para subtração e multiplicação● Os métodos reais Lembre-se do ciclo:

Page 63: 1 2 3 - Testando - Automatizando os testes de software

Exemplo de Implementação

Page 64: 1 2 3 - Testando - Automatizando os testes de software

Agora é hora da Divisão

Page 65: 1 2 3 - Testando - Automatizando os testes de software

Vamos criar agora uma aplicação para o usuário

Page 66: 1 2 3 - Testando - Automatizando os testes de software

Aaaahh usuário

Achávamos que a aplicação estava muito bem

feita. Daí o nosso querido usuário tentou

realizar uma divisão por 0. Adivinha o que

aconteceu???

Page 67: 1 2 3 - Testando - Automatizando os testes de software

CrashhhhhhhAcabamos de encontrar um erro na nossa

aplicação. E agora???

Simples, vamos corrigir o método de divisão e pronto, quando ele tentar novamente estara

funcionando :)

Page 68: 1 2 3 - Testando - Automatizando os testes de software

Calma ae parceiro

Nada disso, antes de implementarmos a

correção devemos criar um teste que seja

capaz de pegar o erro encontrado.

Vamos implementá-los.

Page 69: 1 2 3 - Testando - Automatizando os testes de software

Exemplo de implementação

No exemplo, sabemos que a divisão por zero irá

retornar uma ArithmeticException, para isso, criamos um teste para

validar essa ação.

Page 70: 1 2 3 - Testando - Automatizando os testes de software

Hora de testar novamente

Ao rodarmos os testes, nos deparamos com a

exceção citada, agora devemos realizar a

correção no método de divisão.

Page 71: 1 2 3 - Testando - Automatizando os testes de software

Exemplo de Implementação

Page 72: 1 2 3 - Testando - Automatizando os testes de software

Onde Baixar???

● Maveno http://maven.apache.org/download.cgi

● JDKo http://www.oracle.com/

● O exemploo https://github.com/heiderlopes/exemplostestesunitarios/

Page 73: 1 2 3 - Testando - Automatizando os testes de software

Onde baixar???

● Netbeanso https://netbeans.org/downloads/

● Eclipseo https://www.eclipse.org/downloads/

● IntelliJo http://www.jetbrains.com/idea/download/

Page 74: 1 2 3 - Testando - Automatizando os testes de software

Exercitando a mente I● Testar o método para fazer saque em uma conta

o O método aceita dois valores: valor_saque, valor_saldo

o O método deve retornar valor referente ao saldo da conta após o saque ou -1 em situação de erro

Page 75: 1 2 3 - Testando - Automatizando os testes de software

Exercitando a mente II● Testar o método para liberar a prova de Teste para Adultos

o O método aceita um valor do tipo Integer com a idade do candidato

o A liberação da prova será mediante ao atendimento dos critérios ou não

o O método deve retornar um boolean true caso a prova seja liberada ou false em caso contrário

Page 76: 1 2 3 - Testando - Automatizando os testes de software

Exercitando a mente III● Testar um método para realizar depósito em

uma conta bancária

o O método deve receber um flutuante com o valor a ser depositado

o O método deve retornar o valor contido na conta

Page 77: 1 2 3 - Testando - Automatizando os testes de software

A mudança na forma de desenvolver não é igual a

fazer miojo

Page 78: 1 2 3 - Testando - Automatizando os testes de software

A mudança na forma de desenvolver

No inicio você vai escrever código mais ou menos testável

Page 79: 1 2 3 - Testando - Automatizando os testes de software

A mudança na forma de desenvolver

Você vai errar!!!

Page 80: 1 2 3 - Testando - Automatizando os testes de software

A mudança na forma de desenvolver

Você vai desejar ter feito as coisas de

forma diferente

Page 81: 1 2 3 - Testando - Automatizando os testes de software

A mudança na forma de desenvolver

Você vai evoluir!!!

Page 82: 1 2 3 - Testando - Automatizando os testes de software

A mudança na forma de desenvolver

Você não vai mais conseguir desenvolver de outra forma

Page 83: 1 2 3 - Testando - Automatizando os testes de software

O que você pode fazer

Estime o tempo das suas

tarefas levando em conta os

testes unitários

Page 84: 1 2 3 - Testando - Automatizando os testes de software

O que você pode fazer

Comece testando o quer for mais fácil

Page 85: 1 2 3 - Testando - Automatizando os testes de software

O que você pode fazer

Dê prioridade à lógica principal da aplicação

Page 86: 1 2 3 - Testando - Automatizando os testes de software

O que você pode fazerCompartilhe com seus colegas os

benefícios que os testes unitários podem trazer

Page 87: 1 2 3 - Testando - Automatizando os testes de software

Referênciashttp://pt.slideshare.net/alextercete/testes-unitrios-cco

http://pt.slideshare.net/JobaDiniz/testes-unitrios-26894868

http://pt.slideshare.net/lucas_nazario/projeto-de-software-com-testes-unitrios-e-tdd

http://pt.slideshare.net/diogodamiani/teste-unitrios-e-tdd