Testes

Preview:

Citation preview

System.out.println("Teste");

JevôPaulo César M. Jeveaux

www.jeveaux.comwww.portaljava.com

Jeveaux

Desenvolvedor Java há 7++ anos

Administrador do PortalJava e ESJUG

Palestrante-Entusiasta-Evangelista Java

Entusiasta Rails, Python e Agile

Curioso e aprendendo Erlang =)

| Sobre o que vamos falar

● Introdução

● Bug

● Seja profissional

● O que são testes

● Preciso de testes? Por que? Garanta-se!

● TDD

● BDD

● Conclusões

| Introdução

Desenvolvimento de software

| Introdução

Desenvolvimento de software

Falhas de Software

1/3 poderiam ser evitadas

[1]

1/3 poderiam ser evitadas

~50% são detectadasem produção

[1]

| Introdução

Desenvolvimento de software

Falhas de Software

Falhas custam caro

[1][2]

$$$$$$

[1][2]

$$$$$$

$$$$$$

[1][2]

60 bilhões ++prejuízo anual

$$$$$$

$$$$$$

$$$$$$

| Introdução

Desenvolvimento de software

Falhas de Software

Falhas custam caro

Testes não evitam falhas

| Introdução

Desenvolvimento de softwareFalhas de SoftwareFalhas custam caro

Testes não evitam falhasTestes identificam as falhas antes delas

acontecerem

| Bug

Bugs foram os insetosnas válvulas do Eniac...

Bugs foram os insetosnas válvulas do Eniac...

… e são os insetos novidro do carro

Bugs foram os insetosNas válvulas do Eniac...

… e são os insetos novidro do carro

Mas também são os muitosproblemas que somente osusuários encontrarão

Bugs foram os insetosNas válvulas do Eniac...

… ou os insetos novidro do carro

Mas também são os muitosproblemas que somente osusuários encontrarão

Bugs vão existir. Sempre!

Bugs vão existir. Sempre!

Não existe engenharia perfeita

Bugs vão existir. Sempre!

Não existe engenharia perfeita

Antes de corrigir um bug, escrevaum teste que o detecte

Bugs vão existir. Sempre!

Não existe engenharia perfeita

Antes de corrigir um bug, escrevaum teste que o detecte

XP

???

Não esse, mas esse

Não esse, mas esse

www.extremeprogramming.org

| Garanta o que você faz seja profissional

Cliente:

Isso aqui não está funcionando!

Programador:

Mas hanm!? Aqui funciona.

Depois eu testo...

Depois eu testo...

… estou sem tempopara testar agora...

Depois eu testo...

… estou sem tempopara testar agora...

...funcionou! Não mudemais nada agora.

Depois eu testo...

… estou sem tempopara testar agora...

...funcionou! Não mudemais nada agora.

Programadores profissionaisescrevem testes

E ponto final!

[4]

| Mas o que são testes?

| O é um teste?

Um teste é uma verificação feita sobre um

código ou fragmento de código para garantir

que uma determinada entrada produza,

sempre, uma saída esperada

| O teste é

- Pontual

- Finito

- Previsível

| O teste é

- Pontual

- Finito

- Previsível

O teste deve ser |

- Simples

- Conciso

- Legível

Unidade de código

Unidade de código

Parte dasolução

Unidade de código

Parte dasolução

Escrito pelo programador

Unidade de código

Parte dasolução

Escrito pelo programador

Atualizados

Aceitação

Aceitação

Soluçãocompleta

Aceitação

Soluçãocompleta

Integração

Aceitação

Soluçãocompleta

Integração

Funcionais

Aceitação

Soluçãocompleta

Integração

Atualizados

Funcionais

| Testes Unitários

- Testam partes isoladas da solução

- Partes do código

- Simule as dependências (Mocks,

fixtures)

- Fundamental para TDD/BDD

| Testes de Aceitação

- Testam histórias/funcionalidades/caso

de uso

- Envolvem uma ou mais partes da

solução

| Testes de Integração

- Testam a integração da solução com

agentes externos

- Pode ser feito isolado ou com a solução

completa

- Geralmente não é muito praticado

| Mas eu preciso de testes?

SIM

SIM

Você:

- Deve verificar o código. Sempre!

- Deve garantir que os requisitos estãoImplementados

- Deve ter segurança para fazer alterar

Você:

- Precisa entregar rápido

- Precisa entregar com qualidade

- Precisa garantir a qualidade do que será entregue

| Como você se garante?

| Como você se garante?

Código alterado OK

Bug Encontrado

| Como você se garante?

Código alterado OK

Bug Encontrado

| Como você se garante?

Código alterado OK

Bug Encontrado

BUG

ERRO

????

| Garanta-se nos testes

● Aplicações cobertas por bons testes propiciam:

● Facilidade de manutenção;

● Facilidade para inclusão de novos membros no time

de desenvolvimento;

● Redução de problemas e custos nas manutenções;

| Garanta-se nos testes

● Aplicações cobertas por bons testes propiciam:

● Facilidade de manutenção;

● Facilidade para inclusão de novos membros no time

de desenvolvimento;

● Redução de problemas e custos nas manutenções;

● Telefone silencioso nas madrugadas!

| Garanta-se nos testes

Código alterado OK

Bug Encontrado

OK

OK

OK

| Test Driven Development

Escreva umTeste

Escreva códigoque passeno teste

refatore

| TDD

● Escreva o teste antes da implementação

● Escreva somente código para passar no teste

● Escreva testes pequenos

[10]

| Behaviour Driven Development

Escreva umTeste

Escreva códigoque passeno teste

refatore

| BDD

● Escreva o teste antes da implementação

● Escreva somente código para passar no teste

● Escreva testes pequenos

TDD? BDD? Copy&Paste?

TDD? BDD? Copy&Paste?

TDD

BDD

Código

Comportamento

| Conclusões

● Testes colaboram para o aumento da qualidade dos sistemas

● Desenvolvedores ficam mais corajosos e confiantes ao programar

● O software cresce de forma ordenada e com qualidade de design

● O software se adapta com mais facilidade a mudanças

| Conclusões

● Demora mais?

● No início é necessário escrever muitos testes

● Depois da inércia a suite de testes está pronta e escrevem-se menos testes

● Certeza de que a implementação está funcionando

● Maioria dos bugs encontrados em tempo de desenvolvimento

● Bugs de produção são encontrados e corrigidos com muito mais velocidade

● Então no fim das contas demora-se muito menos tempo e com muito mais qualidade

[10]

| Conclusões

TDD ou BDD?

Não importa! Faça qualquer umdesde que faça direito

Dúvidas?

já podem acordar

| Referências[1] - NIST - http://www.nist.gov/public_affairs/releases/n02-10.htm[2] - ImproveIt - http://www.improveit.com.br/xp/praticas/tdd[3] - Caelum - http://blog.caelum.com.br/2006/09/08/voce-acredita-no-seu-codigo/[4] – Fragmental - Shoes - http://blog.fragmental.com.br/2007/10/31/programadores-profissionais-escrevem-testes-ponto-final/[5] – Marcos Pereira – http://marcospereira.wordpress.com/2007/11/27/desenvolvedores-odeiam-testar [6] – Wikipedia – http://en.wikipedia.org/wiki/Test-driven_development[7] - TDD - http://www.testdriven.com[8] - Brod - http://www.brod.com.br [9] – java.net - http://wiki.java.net/bin/view/People/SmellsToRefactorings [10] – Palestra Desenvolvimento Guiado por Testes (TDD) – Guilherme Chapiewski

System.out.println("Teste");

JevôPaulo César M. Jeveaux

www.jeveaux.comwww.portaljava.com

Recommended