testes e refatoração

86
Testes e Refatoração Testes e Refatoração Jevô Paulo César M. Jeveaux www.jeveaux.com refatore Escreva código Escreva um Teste Escreva código que passe no teste

Upload: paulo-cesar-m-jeveaux

Post on 28-May-2015

2.760 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Testes e Refatoração

Testes e RefatoraçãoTestes e Refatoração

JevôPaulo César M. Jeveauxwww.jeveaux.comj

refatore

Escreva códigoEscreva umTeste

Escreva códigoque passeno teste

Page 2: Testes e Refatoração

J ôJevô

• Analista Senior de WebMedia na globo.com

• Desenvolvedor Java há 7++ anos

• Administrador do PortalJava e ESJUG

• Palestrante‐Entusiasta‐Evangelista Java• Palestrante‐Entusiasta‐Evangelista Java

h l l• Entusiasta Python, Rails e Agile

Page 3: Testes e Refatoração

A dAgenda

• Introdução

• Bug

• Você confia no que faz? Afinal é um teste?• Você confia no que faz? Afinal é um teste?

• Cobertura de testes

• Tipos de testes

• Desenvolvendo orientado a testes

F t té i d t t• Ferramentas e técnicas de testes

• RefatoraçãoRefatoração

Page 4: Testes e Refatoração

IntroduçãoIntrodução

Desen ol imento de soft areDesenvolvimento de software

Page 5: Testes e Refatoração
Page 6: Testes e Refatoração
Page 7: Testes e Refatoração

IntroduçãoIntrodução

Desen ol imento de soft areDesenvolvimento de software

Falhas de SoftwareFalhas de Software

Page 8: Testes e Refatoração

F lh d S ftFalhas de Software

• Mais de 1/3 das falhaspoderiam ser evitadaspoderiam ser evitadascom testes; [1]

• Cerca de 50% das falhasCerca de 50% das falhassó são descobertas emprodução;produção; [1]

Page 9: Testes e Refatoração

IntroduçãoIntrodução

Desen ol imento de soft areDesenvolvimento de software

Falhas de SoftwareFalhas de Software

Falhas custam caro

Page 10: Testes e Refatoração

F lh t $$$Falhas custam $$$

• Segundo uma pesquisa do Departamento de C é i d EUA bli d 2002 f lhComércio dos EUA, publicada em 2002, falhas de software são tão comuns e tão danosas que se estima que causem um prejuízo anual de mais de 60 bilhões de dólares para ade mais de 60 bilhões de dólares para a economia americana. [1], [2]

Page 11: Testes e Refatoração

IntroduçãoIntrodução

Desen ol imento de soft areDesenvolvimento de software

Falhas de SoftwareFalhas de Software

Falhas custam caro

Testes não evitam falhas

Page 12: Testes e Refatoração

IntroduçãoIntrodução

Desen ol imento de soft areDesenvolvimento de softwareFalhas de SoftwareFalhas custam caro

Testes não evitam falhasTestes identificam as falhas antes delasTestes identificam as falhas antes delas

acontecerem

Page 13: Testes e Refatoração
Page 14: Testes e Refatoração

BugBug

O que é?

Page 15: Testes e Refatoração
Page 16: Testes e Refatoração
Page 17: Testes e Refatoração

BBugs

São aquelas baratinhas queSão aquelas baratinhas que 

fi ál l d ificavam nas válvulas do Eniac

Page 18: Testes e Refatoração

BBugs

Podem ser os insetos no vidro doPodem ser os insetos no vidro do 

carro

Page 19: Testes e Refatoração

BBugs

E também podem ser milhões deE também podem ser milhões de 

bloutros problemas que somente 

os usuários irão encontrar

Page 20: Testes e Refatoração

BBugs

E também podem ser milhões deE também podem ser milhões de 

bloutros problemas que somente

os usuários irão encontrar

Page 21: Testes e Refatoração

BBugs

Por mais perfeita que seja suaPor mais perfeita que seja sua 

h i b ãengenharia, os bugs estarão 

presentes e afetarão diretamente 

o usuárioo usuário

Page 22: Testes e Refatoração

BBugs

Metodologias ágeis, como o XP, defendem g g , ,

que, ao encontrarmos um problema,que, ao encontrarmos um problema, 

antes de desenvolver uma soluçãoantes de desenvolver uma solução 

devemos criar um teste que detecte taldevemos criar um teste que detecte tal 

blproblema.

Page 23: Testes e Refatoração

Você confia no que faz?Você confia no que faz?

Page 24: Testes e Refatoração
Page 25: Testes e Refatoração

G t ê fGaranta o que você faz

• Cliente:– Isso aqui não está funcionando!

• Programador:–Mas como!? Na minha máquina estava funcionando até ontemfuncionando até ontem.

Page 26: Testes e Refatoração

G t ê fGaranta o que você faz

Depois eu escrevo o pplano de testes…

Page 27: Testes e Refatoração

G t ê fGaranta o que você faz

Depois eu escrevo o pplano de testes…

Vamos deixar os testes pra próxima fase…

Page 28: Testes e Refatoração

G t ê fGaranta o que você faz

Depois eu escrevo o pplano de testes…

Vamos deixar os testes pra próxima fase…

Na minha máquina estáNa minha máquina estáfuncionando…

Page 29: Testes e Refatoração

G t ê fGaranta o que você fazD iDepois eu escrevo o plano de testesplano de testes…

Vamos deixar os testes pra próxima fase…

Precisamos entregar o produto semana que vem!!!

Na minha máquina estáfuncionando…

Page 30: Testes e Refatoração

G t t b lh j fi i lGaranta o seu trabalho seja profissional

Errado! (como se safar) Realidade!

• Num mundo capitalizado 

não há tempo para testes

• O cliente não quer saber se 

X virou Y Ele quer que onão há tempo para testes

• O cliente não quer saber 

X virou Y. Ele quer que o 

problema não aconteça e se q

como é feito, ele quer que  acontecer que seja corrigido 

funcione rapidamente

• Não se consegue qualidade• Não se consegue qualidade 

e confiabilidade sem testes[4]

Page 31: Testes e Refatoração

O que são testes?O que são testes?

Page 32: Testes e Refatoração

O ã t t ?O que são testes?

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

Page 33: Testes e Refatoração

O ã t t ?O que são testes?

• São pontuaisSão pontuais

• São previsíveis

• São finitosSão finitos

• São (ou deveriam ser) simples

Page 34: Testes e Refatoração

O que são testes?O que são testes?

White BoWhite Box

Page 35: Testes e Refatoração

Whit BWhite Box

• Testes de unidade de código;g ;

• Testam parte da solução;• Testam parte da solução;

• São escritos e mantidos pelo 

programador e devem estar sempre 

atualizados;

Page 36: Testes e Refatoração

O que são testes?O que são testes?

White BoWhite Box

Black BoxBlack Box

Page 37: Testes e Refatoração

Bl k BBlack Box

• Testes funcionais e de aceitação;Testes funcionais e de aceitação;

d i ã• Testes de integração;

• Testam a solução completa;

Page 38: Testes e Refatoração

C b t d t tCobertura dos testes

Trecho alterado Resultado esperado com alteração: OKcom alteração: OK

Reflexo da alteraçãoReflexo da alteraçãoErro #1

Reflexo da alteraçãoErro #2

Reflexo da alteraçãoBUG

Reflexo da alteraçãoI dInesperado

Page 39: Testes e Refatoração

C b t d t tCobertura dos testes

Sem cobertura Com cobertura

• Novo release = códigos sem testes;

• Não há segurança deNão há segurança de que as alterações não irão impactar em outrosirão impactar em outros pontos da aplicação;

• Problemas muitos• Problemas, muitos problemas;

Page 40: Testes e Refatoração

C b t d t tCobertura dos testes

• Dificilmente consegue‐se 100% de cobertura 

de testes, contete‐se com 99%

• Quanto maior a cobertura dos testes na 

aplicação maior a confiabilidade nas 

alterações e novos recursos

Page 41: Testes e Refatoração

C b t d t tCobertura dos testes

• Aplicações cobertas por bons testes i ipropiciam:

Facilidade de manutenção;– Facilidade de manutenção;

– Facilidade para inclusão de novos membros no– Facilidade para inclusão de novos membros no 

time de desenvolvimento;;

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

– Telefone silencioso nas madrugadas!

Page 42: Testes e Refatoração

T t ã á iTestes são necessários

• Você precisa verificar o código, sempre

• Você precisa garantir que os requisitos estão p g q q

implementados (e corretos)p ( )

• Você precisa ter segurança para realizarVocê precisa ter segurança para realizar 

alteraçõesç

Page 43: Testes e Refatoração

T t ã á iTestes são necessários

• Você precisa testar rápido para entregar rápido

• Você precisa ser criativo para explorar o máximo 

possível com seus testes, não use testes mentirosos

• Você aumenta e garante a qualidade da sua solução 

com testes

Page 44: Testes e Refatoração

Tipos de TestesTipos de Testes

Unitário

Page 45: Testes e Refatoração

T t U itá iTestes Unitários

• Testam uma parte isolada da solução, um 

componente ou trecho de código

• Todo o resto é simulado através de Mock 

Objets;

• É fundamental para TDDp

Page 46: Testes e Refatoração

T t U itá iTestes Unitários

[wikipedia]

É a fase do processo de teste em que se testam as menores unidades de software desenvolvidas

O universo alvo desse tipo de teste são os métodos dos objetosO universo alvo desse tipo de teste são os métodos dos objetos ou mesmo pequenos trechos de código. Assim, o objetivo é o de encontrar falhas de funcionamento dentro de uma pequena parte do sistema funcionando independentemente do todo.

[/wikipedia]

Page 47: Testes e Refatoração

T t U itá iTestes Unitários

• Ferramentas:

– JUnit/NUnit e TestNG: para testes unitários

– JMock: para criação de objetos e cenários falsos

Page 48: Testes e Refatoração

Tipos de TestesTipos de Testes

Unitário

Aceitação

Page 49: Testes e Refatoração

T t d it ãTestes de aceitação

• Testam uma história, funcionalidade ou caso 

de uso

• Envolvem vários componentes do sistema ou p

até o sistema como um todo

• Ex. ferramentas: JUnit, Selenium, Fit/FitNesse, , /

Page 50: Testes e Refatoração

Tipos de TestesTipos de Testes

Unitário

Aceitação

IntegraçãoIntegração

Page 51: Testes e Refatoração

T t d i t ãTestes de integração

• Testam a integração entre componentes

• Envolvem dois ou mais componentesp

• Ex ferramentas: JUnit DBUnit HSQLDBEx. ferramentas: JUnit, DBUnit, HSQLDB

• Normalmente não é muito utilizado em TDD• Normalmente não é muito utilizado em TDD

Page 52: Testes e Refatoração

Test‐Driven DevelopmentTest Driven Development

Page 53: Testes e Refatoração

TDDTDD

refatore

E Escreva códigoEscreva umTeste

Escreva códigoque passeno teste

Page 54: Testes e Refatoração

R F d t iRegras Fundamentais

• Escreva o teste da implementação ANTES de 

escrevê‐la

• Escreva somente código suficiente para o g p

teste passar e nada além disso

• Escreva testes pequenosp q

• Escreva testes muito rápidosEscreva testes muito rápidos[10]

Page 55: Testes e Refatoração

FerramentasFerramentas

JUnit

Page 56: Testes e Refatoração

JU itJUnit

• É um framework altamente eficaz e l t tili d i ã ã dlargamente utilizado na criação e execução de testes unitários de códigosg

http://junit.org

Page 57: Testes e Refatoração

U t t JU itUm teste com JUnit

public class HelloWorldTest {@Test@ estpublic void testMultiplicacao() {

//Testando se 2*2 = 4assertEquals (“Mult”, 4, 2*2);assertEquals ( Mult , 4, 2 2);

}}

Page 58: Testes e Refatoração

FerramentasFerramentas

JUnit

TestNG

Page 59: Testes e Refatoração

T tNGTestNG

• Uma alternativa ao JUnit para testes unitários

• Foi o primeiro a utilizar anotações para p ç p

definição dos TestCasesç

Page 60: Testes e Refatoração

T tNGTestNG

Page 61: Testes e Refatoração

U t t T tNGUm teste com TestNG

import org.testng.annotations.*;

public class SimpleTest {@BeforeClass@BeforeClasspublic void setUp() {}}@Test(groups = { "calculadora" })

bli id T t() {public void somaTest() {System.out.println("soma");

}}}

Page 62: Testes e Refatoração

FerramentasFerramentas

JUnitTestNGTestNGJMock

Page 63: Testes e Refatoração

JM kJMock

• Utilizado para criar ou simular falsos 

objetos/cenários

• Alternativas:

– EasyMock

–MockObjetc

Page 64: Testes e Refatoração

S l iSelenium

• Ferramenta para realização de testes 

integrados e de aceitação

• Usado no browser, grava todos os passos , g p

executados na aplicação diretamente no 

browser e os executa de forma automatizada 

no browser

Page 65: Testes e Refatoração

S l iSelenium

Page 66: Testes e Refatoração

ClClover

• Ferramenta para análise de cobertura dos 

testes existem na aplicação

• Integrado a várias IDEs ‐ Eclipse ;‐)g p ; )

• Existem diversas opções semelhantes:Existem diversas opções semelhantes: 

JCoverage, Cobertura, etcg , ,

Page 67: Testes e Refatoração
Page 68: Testes e Refatoração

ClClover

Page 69: Testes e Refatoração

RefatoraçãoRefatoração

Page 70: Testes e Refatoração
Page 71: Testes e Refatoração

C d llCodesmell

• Codesmell ou code smell é um dos conceitos 

criados pelo XP

• Um code smell é uma indicação superficial de ç p

que algo pode estar errado. Aquela mesma 

sensação quando você abre sua geladeira e 

sente um cheiro estranho

Page 72: Testes e Refatoração

O que é refatorar?O que é refatorar?

Page 73: Testes e Refatoração
Page 74: Testes e Refatoração

R f t ãRefatoração

• Sempre existiu, mas não tinha um nome

• Estava implícitop

• A novidade foi criar um vocabulário comum eA novidade foi criar um vocabulário comum e 

catalogá‐loscatalogá los

• Assim podemos utilizar mais sistematicamenteAssim podemos utilizar mais sistematicamente 

e ensinar uns aos outrose ensinar uns aos outros

Page 75: Testes e Refatoração

Q d f t ?Quando refatorar?

• Sempre há duas possibilidades:

–Melhorar o código existente.

– Jogar fora e começar do 0.

• É sua responsabilidade avaliar a situação e 

decidir quando é a hora de optar por um ou 

por outro.

Page 76: Testes e Refatoração

R f t ãRefatoração

• Os principais objetivos são:

– Tornar o código mais claro, limpo, simples e 

elegante;

– Permitir que componentes mais simples ou 

expressões mais eficientes sejam usadas.

Page 77: Testes e Refatoração

R f t ã B fí iRefatoração: Benefícios

• Redução de código duplicado

• Aumentar a simplicidadep

• Facilitar a leituraFacilitar a leitura

• Melhorar a performance e eficência• Melhorar a performance e eficência

• Manutenibilidade• Manutenibilidade

Page 78: Testes e Refatoração

R f t X RRefatorar X Reescrever

Refatorar Reescrever

• Não altera afuncionalidade ou

• Altera afuncionalidade dofuncionalidade ou

conteúdo doi t / l ã

funcionalidade dosistema/solução

sistema/solução

Page 79: Testes e Refatoração

Garanta‐se nos testesGaranta se nos testes

Altere o código sem medo

Page 80: Testes e Refatoração

G t t tGaranta‐se nos testes

• Antes de começar a refatorar verifique se você 

tem um conjunto de testes para garantir a 

funcionalidade do código a ser refatorado

• Refatorações podem adicionar erros

• Os testes vão ajudá‐lo a detectar erros se eles j

forem criados

Page 81: Testes e Refatoração

C l õConclusões

• Testes colaboram para o aumento da lid d d i tqualidade dos sistemas;

• Desenvolvedores ficam mais corajosos eDesenvolvedores ficam mais corajosos e confiantes ao programar;

• O software cresce de forma ordenada e com qualidade de design;qualidade de design;

• O software se adapta com mais facilidade a mudanças;

Page 82: Testes e Refatoração

C l õ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 d l i tdesenvolvimento;

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

• Então no fim das contas demora‐se muito menos tempo e com muito mais qualidade;tempo e com muito mais qualidade;

[10]

Page 83: Testes e Refatoração

Dúvidas?Dúvidas?

Page 84: Testes e Refatoração

R f ê iReferê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/[ ] p // g / / / / g /• [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‐

d i t todeiam‐testar • [6] – Wikipedia – http://en.wikipedia.org/wiki/Test‐driven_development• [7] ‐ TDD ‐ http://www.testdriven.com• [8] Brod http://www brod com br• [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

• Algumas ilustações foram retiradas do site da ImproveIt.

Page 85: Testes e Refatoração

refatore

E Escreva códigoEscreva umTeste

Escreva códigoque passeno teste

Page 86: Testes e Refatoração

D íd C íti S tõDuvídas, Críticas e Sugestões

• Para contato:–www.jeveaux.com

t lj–www.portaljava.com–[email protected]@jeveaux.com

[email protected]

Obrigado a todos!Obrigado a todos!27/09/2008