1, 2, 3 Testando
Automatizando os testes do software
Agenda
✓ Como desenvolvemos hoje?
✓ Por que testar?
✓ Desculpas para não testar
Agenda
✓ Tipos de testes
✓ O que é o tal do TDD?
✓ Os benefícios do TDD
Agenda
✓ Os princípios do TDD
✓ Exemplo prático de um processo TDD
✓ O que evitar
Como desenvolvemos hoje?
Por que testar?
Quem já passou por isso sabe?
Quem já passou por isso sabe?
Por que automatizar os testes?
Testes são documentações executáveis
Testes garantem mudanças sem medo
Por que automatizar os testes?
Testes exercitam o software
Por que automatizar os testes?
Para isso precisamos mudar a
forma de pensar
Uma “nova” forma de pensar
Desculpas pra não escrever os testes
Não tenho tempo para isso
Vou demorar muito mais!
Desculpas pra não escrever os testes
Código legado é impossível de testar!
Desculpas pra não escrever os testes
Isso é responsabilidade do testador!
Desculpas pra não escrever os testes
Compila! Logo, funciona!
Desculpas pra não escrever os testes
Tipo de Testes
Tipos de Testes
➢ Testes de Carga
➢ Testes de UI
➢ Testes de Desempenho
➢ Testes de Integração
➢ Testes de Aceitação
➢ Tes...
Testes unitários
Conjunto de programas individuais que
validam unidades de código (métodos,
procs, functions, entre outros...
Testes unitários
Quanto menor for uma unidade de código
testada (método, função, etc.) melhor
Testes unitários
Os testes unitários
devem ser
independentes uns dos
outros
O que testar?
Fonte: http://blog.stevensanderson.com/2009/11/04/selective-unit-testing-costs-and-benefits/
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...
Técnica para desenvolvimento de
software cujo processo é formado por
pequenas iterações e os testes são
escritos primeiro
...
Não é um método para testar software, mas
para (re)construir software!
TDD - Test Driven Development
Core do TDD
● Red: adicona um teste
que falha
● Green: Adiciona qualquer
código que faça o teste
passar
● Yellow: refatora...
Beneficios do TDD
Garante a existência de testes unitários
Beneficios do TDD
Diminui a quantidade de
erros melhorando a
qualidade do código
Beneficios do TDD
Testes servem como
especificações
mostrando como
funciona o sistema!
Beneficios do TDD
Melhora a arquitetura do software já que
temos um maior desacoplamento e
coesão
Princípios do TDD
Testes devem ser isolados, ou seja, não deve
depender do sucesso do outro
Testes devem ser:
Princípios do TDD
Claros Simples Consistentes
Um conceito e uma
confirmação por
teste
Princípios do TDD
Implementando
uma calculadora
Hora da Implementação
Implementando uma calculadora
● Método para realizar a soma
○ Recebe como entrada dois números
○ Retorna o resultado da so...
Implementando uma calculadora
● Método para realizar a subtração
○ Recebe como entrada dois números
○ Retorna o resultado ...
Implementando uma calculadora
● Método para realizar a multiplicação
○ Recebe como entrada dois números
○ Retorna o result...
● Método para realizar a divisão
o Lançar exceção quando receber 0 no denominador
Implementando uma calculadora
Sabendo os requisitos
vamos fazer um DOJO??
O que é o DOJO?
O principal objetivo é praticar, aprender, se
divertir e ensinar técnicas de
desenvolvimento de software.
Como Faremos???
● Programação baseada em testes
● Baby Steps
● Pair Programming
Hora da Prática
● O precisamos ter para realizar o tutorial:
o Ambiente Java configurado
o Maven instalado
o IDE
Hora da prática
Criando um projeto JAVA com testes utilizando
o Maven
mvn archetype:generate -DgroupId=br.com.heidertreina...
Hora da prática
Abrir o projeto na sua IDE preferida.
Estrutura do Projeto
main: Código fonte da sua
aplicação
test: Código para testar a sua
aplicação
Configuração do Maven
No pom.xml alterar a versão do junit para a
versão 4.10
Após isso atualizar as dependências:
mvn cle...
Importante
Não é necessário utilizar o Maven na criação
do projeto, porém ele é de grande importância
para gerenciar as de...
Antes de começar precisamos saber
Além dos casos de testes simples, temos 4
métodos que precisamos conhecer:
@BeforeClass
...
@BeforeClass
Nome de Método Padrão: setUpClass
Neste método devem ser colocados códigos que precisam ser executados
antes ...
@AfterClass
Nome de Método Padrão: tearDownClass()
Neste método deverão ser colocados códigos que precisam ser executados
...
@Before
Nome de método padrão: setUp
O método setUp() pode ser utilizado para a inicialização de recursos antes da
execuçã...
@After
Nome de Método Padrão: tearDown()
O método tearDown() é utilizado para a liberação de recursos ao final de cada
mét...
Criando a classe de teste
Implementando o teste somar
O teste agora esta
implementado, porém
teremos erro já que ainda
não temos a classe
Calculador...
Implementando o teste somar
Implementamos o
teste somente para
passar conseguirmos
compilar e executar a
rotina de teste
Rodando os testes
Resultado do Teste
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 ...
Processo com sucesso
Fizemos o ciclo
Pratique um pouco
Implemente
● Os testes para subtração e multiplicação
● Os métodos reais
Lembre-se do ciclo:
Exemplo de Implementação
Agora é hora da Divisão
Vamos criar agora uma aplicação para o
usuário
Aaaahh usuário
Achávamos que a aplicação estava muito bem
feita. Daí o nosso querido usuário tentou
realizar uma divisão p...
Crashhhhhhh
Acabamos de encontrar um erro na nossa
aplicação. E agora???
Simples, vamos corrigir o método de divisão e
pro...
Calma ae parceiro
Nada disso, antes de implementarmos a
correção devemos criar um teste que seja
capaz de pegar o erro enc...
Exemplo de implementação
No exemplo, sabemos que
a divisão por zero irá
retornar uma
ArithmeticException, para
isso, criam...
Hora de testar novamente
Ao rodarmos os testes, nos deparamos com a
exceção citada, agora devemos realizar a
correção no m...
Exemplo de Implementação
Onde Baixar???
● Maven
o http://maven.apache.org/download.cgi
● JDK
o http://www.oracle.com/
● O exemplo
o https://github....
Onde baixar???
● Netbeans
o https://netbeans.org/downloads/
● Eclipse
o https://www.eclipse.org/downloads/
● IntelliJ
o ht...
Exercitando a mente I
● Testar o método para fazer saque em uma conta
o O método aceita dois valores: valor_saque,
valor_s...
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 Int...
Exercitando a mente III
● Testar um método para realizar depósito em
uma conta bancária
o O método deve receber um flutuan...
A mudança na forma de
desenvolver não é igual a
fazer miojo
A mudança na forma de desenvolver
No inicio você vai escrever código
mais ou menos testável
A mudança na forma de desenvolver
Você vai errar!!!
A mudança na forma de desenvolver
Você vai desejar ter feito as coisas de
forma diferente
A mudança na forma de desenvolver
Você vai evoluir!!!
A mudança na forma de desenvolver
Você não vai mais conseguir desenvolver
de outra forma
O que você pode fazer
Estime o tempo das suas
tarefas levando em conta os
testes unitários
O que você pode fazer
Comece testando o quer for mais fácil
O que você pode fazer
Dê prioridade à lógica principal da
aplicação
O que você pode fazer
Compartilhe com seus colegas os
benefícios que os testes unitários
podem trazer
Referências
http://pt.slideshare.net/alextercete/testes-unitrios-cco
http://pt.slideshare.net/JobaDiniz/testes-unitrios-26...
Próximos SlideShares
Carregando em…5
×

1 2 3 - Testando - Automatizando os testes de software

592 visualizações

Publicada em

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

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

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

Nenhuma nota no slide
  • Acrescentar que a estrutra esta muito errada,,, refatora pra facilitar o teste e melhora a arquitetura do codigo
  • inclusive metodos devem ter responsabilidade unica
  • 1 2 3 - Testando - Automatizando os testes de software

    1. 1. 1, 2, 3 Testando Automatizando os testes do software
    2. 2. Agenda ✓ Como desenvolvemos hoje? ✓ Por que testar? ✓ Desculpas para não testar
    3. 3. Agenda ✓ Tipos de testes ✓ O que é o tal do TDD? ✓ Os benefícios do TDD
    4. 4. Agenda ✓ Os princípios do TDD ✓ Exemplo prático de um processo TDD ✓ O que evitar
    5. 5. Como desenvolvemos hoje?
    6. 6. Por que testar?
    7. 7. Quem já passou por isso sabe?
    8. 8. Quem já passou por isso sabe?
    9. 9. Por que automatizar os testes? Testes são documentações executáveis
    10. 10. Testes garantem mudanças sem medo Por que automatizar os testes?
    11. 11. Testes exercitam o software Por que automatizar os testes?
    12. 12. Para isso precisamos mudar a forma de pensar
    13. 13. Uma “nova” forma de pensar
    14. 14. Desculpas pra não escrever os testes Não tenho tempo para isso
    15. 15. Vou demorar muito mais! Desculpas pra não escrever os testes
    16. 16. Código legado é impossível de testar! Desculpas pra não escrever os testes
    17. 17. Isso é responsabilidade do testador! Desculpas pra não escrever os testes
    18. 18. Compila! Logo, funciona! Desculpas pra não escrever os testes
    19. 19. Tipo de Testes
    20. 20. Tipos de Testes ➢ Testes de Carga ➢ Testes de UI ➢ Testes de Desempenho ➢ Testes de Integração ➢ Testes de Aceitação ➢ Testes Unitários
    21. 21. 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
    22. 22. Testes unitários Quanto menor for uma unidade de código testada (método, função, etc.) melhor
    23. 23. Testes unitários Os testes unitários devem ser independentes uns dos outros
    24. 24. O que testar? Fonte: http://blog.stevensanderson.com/2009/11/04/selective-unit-testing-costs-and-benefits/
    25. 25. 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
    26. 26. Técnica para desenvolvimento de software cujo processo é formado por pequenas iterações e os testes são escritos primeiro TDD - Test Driven Development
    27. 27. Não é um método para testar software, mas para (re)construir software! TDD - Test Driven Development
    28. 28. 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
    29. 29. Beneficios do TDD Garante a existência de testes unitários
    30. 30. Beneficios do TDD Diminui a quantidade de erros melhorando a qualidade do código
    31. 31. Beneficios do TDD Testes servem como especificações mostrando como funciona o sistema!
    32. 32. Beneficios do TDD Melhora a arquitetura do software já que temos um maior desacoplamento e coesão
    33. 33. Princípios do TDD Testes devem ser isolados, ou seja, não deve depender do sucesso do outro
    34. 34. Testes devem ser: Princípios do TDD Claros Simples Consistentes
    35. 35. Um conceito e uma confirmação por teste Princípios do TDD
    36. 36. Implementando uma calculadora Hora da Implementação
    37. 37. Implementando uma calculadora ● Método para realizar a soma ○ Recebe como entrada dois números ○ Retorna o resultado da soma
    38. 38. Implementando uma calculadora ● Método para realizar a subtração ○ Recebe como entrada dois números ○ Retorna o resultado da subtração
    39. 39. Implementando uma calculadora ● Método para realizar a multiplicação ○ Recebe como entrada dois números ○ Retorna o resultado da multiplicação
    40. 40. ● Método para realizar a divisão o Lançar exceção quando receber 0 no denominador Implementando uma calculadora
    41. 41. Sabendo os requisitos vamos fazer um DOJO??
    42. 42. O que é o DOJO? O principal objetivo é praticar, aprender, se divertir e ensinar técnicas de desenvolvimento de software.
    43. 43. Como Faremos??? ● Programação baseada em testes ● Baby Steps ● Pair Programming
    44. 44. Hora da Prática ● O precisamos ter para realizar o tutorial: o Ambiente Java configurado o Maven instalado o IDE
    45. 45. Hora da prática Criando um projeto JAVA com testes utilizando o Maven mvn archetype:generate -DgroupId=br.com.heidertreinamentos - DartifactId=exemplostestesunitarios -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    46. 46. Hora da prática Abrir o projeto na sua IDE preferida.
    47. 47. Estrutura do Projeto main: Código fonte da sua aplicação test: Código para testar a sua aplicação
    48. 48. Configuração do Maven No pom.xml alterar a versão do junit para a versão 4.10 Após isso atualizar as dependências: mvn clean package
    49. 49. 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.
    50. 50. Antes de começar precisamos saber Além dos casos de testes simples, temos 4 métodos que precisamos conhecer: @BeforeClass @AfterClass @Before @After
    51. 51. @BeforeClass Nome de Método Padrão: setUpClass Neste 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.
    52. 52. @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.
    53. 53. @Before Nome 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.
    54. 54. @After Nome 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.
    55. 55. Criando a classe de teste
    56. 56. 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.
    57. 57. Implementando o teste somar Implementamos o teste somente para passar conseguirmos compilar e executar a rotina de teste
    58. 58. Rodando os testes Resultado do Teste
    59. 59. 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
    60. 60. Processo com sucesso
    61. 61. Fizemos o ciclo
    62. 62. Pratique um pouco Implemente ● Os testes para subtração e multiplicação ● Os métodos reais Lembre-se do ciclo:
    63. 63. Exemplo de Implementação
    64. 64. Agora é hora da Divisão
    65. 65. Vamos criar agora uma aplicação para o usuário
    66. 66. 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???
    67. 67. Crashhhhhhh Acabamos 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 :)
    68. 68. 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.
    69. 69. 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.
    70. 70. 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.
    71. 71. Exemplo de Implementação
    72. 72. Onde Baixar??? ● Maven o http://maven.apache.org/download.cgi ● JDK o http://www.oracle.com/ ● O exemplo o https://github.com/heiderlopes/exemplostestesunitarios/
    73. 73. Onde baixar??? ● Netbeans o https://netbeans.org/downloads/ ● Eclipse o https://www.eclipse.org/downloads/ ● IntelliJ o http://www.jetbrains.com/idea/download/
    74. 74. 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
    75. 75. 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
    76. 76. 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
    77. 77. A mudança na forma de desenvolver não é igual a fazer miojo
    78. 78. A mudança na forma de desenvolver No inicio você vai escrever código mais ou menos testável
    79. 79. A mudança na forma de desenvolver Você vai errar!!!
    80. 80. A mudança na forma de desenvolver Você vai desejar ter feito as coisas de forma diferente
    81. 81. A mudança na forma de desenvolver Você vai evoluir!!!
    82. 82. A mudança na forma de desenvolver Você não vai mais conseguir desenvolver de outra forma
    83. 83. O que você pode fazer Estime o tempo das suas tarefas levando em conta os testes unitários
    84. 84. O que você pode fazer Comece testando o quer for mais fácil
    85. 85. O que você pode fazer Dê prioridade à lógica principal da aplicação
    86. 86. O que você pode fazer Compartilhe com seus colegas os benefícios que os testes unitários podem trazer
    87. 87. Referências http://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

    ×