Testes e Refatoração
Testes e Refatoração

               Jevô
     Paulo César M. Jeveaux
             j
       www.jevea...
J ô
                       Jevô
• Analista Senior de WebMedia na globo.com

• Desenvolvedor Java há 7++ anos

• Administra...
A d
                     Agenda
•   Introdução
•   Bug
•   Você confia no que faz? Afinal é um teste?
    Você confia no q...
Introdução
Desenvolvimento de software
Desen ol imento de soft are
Introdução
Desenvolvimento de software
Desen ol imento de soft are
    Falhas de Software
           de Software
F lh d S ft
            Falhas de Software
• Mais de 1/3 das falhas
  poderiam ser evitadas
            ser evitadas
  com...
Introdução
Desenvolvimento de software
Desen ol imento de soft are
    Falhas de Software
           de Software
    Falha...
F lh
           Falhas custam $$$
                     t $$$
• Segundo uma pesquisa do Departamento de 
  Comércio dos EUA...
Introdução
Desenvolvimento de software
Desen ol imento de soft are
     Falhas de Software
            de Software
     Fa...
Introdução
    Desenvolvimento de software
    Desen ol imento de soft are
           Falhas de Software
           Falhas...
Bug

O que é?
Bugs

São aquelas baratinhas que 
São aquelas baratinhas que
 ficavam nas válvulas do Eniac
 fi           ál l d       i
Bugs

Podem ser os insetos no vidro do 
Podem ser os insetos no vidro do
 carro
Bugs

E também podem ser milhões de 
E também podem ser milhões de
 outros problemas que somente 
           bl
 os usuári...
Bugs

E também
E também podem ser milhões de
               ser milhões de 
 outros problemas que somente
           bl
 o...
Bugs

Por mais perfeita que seja sua 
Por mais perfeita que seja sua
 engenharia, os bugs estarão 
      h i       b      ...
Bugs

Metodologias ágeis, como o XP, defendem 
        g     g ,            ,
 que, ao encontrarmos um problema,
 que, ao ...
Você confia no que faz?
Você confia no que faz?
G
        Garanta o que você faz
             t           êf
• Cliente:
  – Isso aqui não está funcionando!


• Programado...
G
Garanta o que você faz
     t           êf

       Depois eu escrevo o 
          p
       plano de testes…
G
        Garanta o que você faz
             t           êf

                Depois eu escrevo o 
                   p
  ...
G
        Garanta o que você faz
             t           êf

                Depois eu escrevo o 
                   p
  ...
G
        Garanta o que você faz
             t           êf
                 Depois eu escrevo o 
                 D     ...
G    t        t b lh
      Garanta o seu trabalho seja profissional
                               j     fi i    l

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

Um teste é uma verificação feita sobre um 
  código ou fragmen...
O
         O que são testes?
                ã t t ?

• São pontuais
  São pontuais

• São previsíveis

• São finitos
  Sã...
O que são testes?
O que são testes?
    White Box
    White Bo
Whit B
                White Box

• Testes de unidade de código;
                           g ;

• Testam parte da solução...
O que são testes?
O que são testes?
    White Box
    White Bo
    Black Box
    Black Box
Bl k B
              Black Box

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

• Testes de integ...
C b t
           Cobertura dos testes
                     d t t
                             Resultado esperado
Trecho al...
C b t
           Cobertura dos testes
                     d t t
Sem cobertura                Com cobertura


• Novo relea...
C b t
          Cobertura dos testes
                    d t t

• Dificilmente consegue‐se 100% de cobertura 
  de testes,...
C b t
          Cobertura dos testes
                    d t t
• Aplicações cobertas por bons testes 
  propiciam:
       ...
T t ã
         Testes são necessários
                          ái

• Você precisa verificar o código, sempre

• Você prec...
T t ã
          Testes são necessários
                           ái
• Você precisa testar rápido para entregar rápido

• ...
Tipos de Testes
Tipos de Testes

    Unitário
T t U itá i
             Testes Unitários

• Testam uma parte isolada da solução, um 
  componente ou trecho de código

• ...
T t U itá i
                 Testes Unitários
[wikipedia]

É a fase do processo de teste em que se testam as menores 
   u...
Testes Unitários
              T t U itá i

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

  – JMock: par...
Tipos de Testes
Tipos de Testes

    Unitário
   Aceitação
T t d
           Testes de aceitação
                        it ã

• Testam uma história, funcionalidade ou caso 
  de uso...
Tipos de Testes
Tipos de Testes

     Unitário
    Aceitação
   Integração
T t d i t
          Testes de integração
                            ã

• Testam a integração entre componentes

• Envolve...
Test Driven Development
Test‐Driven Development
TDD
                   refatore




                   Escreva código
E
Escreva um
                     que passe
   Teste...
R
         Regras Fundamentais
                F d     t i

• Escreva o teste da implementação ANTES de 
  escrevê‐la

• E...
Ferramentas

   JUnit
JU it
                    JUnit
• É um framework altamente eficaz e 
  largamente utilizado na criação e execução de 
  l ...
U t t
        Um teste com JUnit
                     JU it

public class HelloWorldTest {
   @ est
   @Test
   public voi...
Ferramentas

    JUnit
   TestNG
T tNG
                    TestNG

• Uma alternativa ao JUnit para testes unitários

• Foi o primeiro a utilizar anotações ...
TestNG
T tNG
U t t
        Um teste com TestNG
                     T tNG
import org.testng.annotations.*;

public class SimpleTest {
 ...
Ferramentas

    JUnit
   TestNG
   JMock
JM k
                     JMock

• Utilizado para criar ou simular falsos 
  objetos/cenários

• Alternativas:
  – EasyMoc...
S l i
                 Selenium

• Ferramenta para realização de testes 
  integrados e de aceitação

• Usado no browser, ...
Selenium
S l i
Cl
                     Clover

• Ferramenta para análise de cobertura dos 
  testes existem na aplicação

• Integrado a v...
Clover
Cl
Refatoração
C d
                Codesmell
                       ll

• Codesmell ou code smell é um dos conceitos 
  criados pelo XP

...
O que é refatorar?
O que é refatorar?
R f t
                 Refatoração
                          ã

• Sempre existiu, mas não tinha um nome

• Estava implícit...
Q
            Quando refatorar?
                d    f t    ?

• Sempre há duas possibilidades:
  – Melhorar o código exis...
R f t
                 Refatoração
                          ã

• Os principais objetivos são:
  – Tornar o código mais cl...
R f t
         Refatoração: Benefícios
                  ã B     fí i

• Redução de código duplicado

• Aumentar a simplic...
R f t
        Refatorar X Reescrever
                  XR
Refatorar              Reescrever
• Não      altera    a • Alter...
Garanta se nos testes
Garanta‐se nos testes

 Altere o código sem medo
G
         Garanta‐se nos testes
              t         t t

• Antes de começar a refatorar verifique se você 
  tem um c...
Conclusões
               C l õ
• Testes colaboram para o aumento da 
  qualidade d
      lid d dos sistemas;
            ...
Conclusões
                    C l õ
• Demora mais?
  – No início é necessário escrever muitos testes;;
  – Depois da inér...
Dúvidas?
Referências
                                R f ê i
•   [1] ‐ NIST ‐ http://www.nist.gov/public_affairs/releases/n02‐10.ht...
refatore




             Escreva código
Escreva um
E
               que passe
   Teste        no teste
D íd C íti
              Duvídas, Críticas e Sugestões
                                  S    tõ
       • Para contato:
  ...
Testes e Refatoração
Testes e Refatoração
Testes e Refatoração
Testes e Refatoração
Testes e Refatoração
Testes e Refatoração
Testes e Refatoração
Testes e Refatoração
Testes e Refatoração
Upcoming SlideShare
Loading in …5
×

Testes e Refatoração

3,043 views

Published on

Published in: Technology
2 Comments
4 Likes
Statistics
Notes
No Downloads
Views
Total views
3,043
On SlideShare
0
From Embeds
0
Number of Embeds
65
Actions
Shares
0
Downloads
158
Comments
2
Likes
4
Embeds 0
No embeds

No notes for slide

Testes e Refatoração

  1. 1. Testes e Refatoração Testes e Refatoração Jevô Paulo César M. Jeveaux j www.jeveaux.com refatore Escreva código Escreva um que passe Teste no teste
  2. 2. 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 • Entusiasta Python, Rails e Agile h l l
  3. 3. A d Agenda • 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 • Ferramentas e técnicas de testes F t té i d t t • Refatoração
  4. 4. Introdução Desenvolvimento de software Desen ol imento de soft are
  5. 5. Introdução Desenvolvimento de software Desen ol imento de soft are Falhas de Software de Software
  6. 6. F lh d S ft Falhas de Software • Mais de 1/3 das falhas poderiam ser evitadas ser evitadas com testes; [1] • Cerca de 50% das falhas de 50% das falhas só são descobertas em produção;  produção; [1]
  7. 7. Introdução Desenvolvimento de software Desen ol imento de soft are Falhas de Software de Software Falhas custam caro
  8. 8. F lh Falhas custam $$$ t $$$ • Segundo uma pesquisa do Departamento de  Comércio dos EUA, publicada em 2002, falhas  C é i d EUA bli d 2002 f lh 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 a  de mais de 60 bilhões de dólares para a economia americana. [1], [2]
  9. 9. Introdução Desenvolvimento de software Desen ol imento de soft are Falhas de Software de Software Falhas custam caro Testes não evitam falhas
  10. 10. Introdução Desenvolvimento de software Desen ol imento de soft are Falhas de Software Falhas custam caro Testes não evitam falhas Testes identificam as falhas antes delas Testes identificam as falhas antes delas acontecerem
  11. 11. Bug O que é?
  12. 12. Bugs São aquelas baratinhas que  São aquelas baratinhas que ficavam nas válvulas do Eniac fi ál l d i
  13. 13. Bugs Podem ser os insetos no vidro do  Podem ser os insetos no vidro do carro
  14. 14. Bugs E também podem ser milhões de  E também podem ser milhões de outros problemas que somente  bl os usuários irão encontrar
  15. 15. Bugs E também E também podem ser milhões de ser milhões de  outros problemas que somente bl os usuários irão encontrar
  16. 16. Bugs Por mais perfeita que seja sua  Por mais perfeita que seja sua engenharia, os bugs estarão  h i b ã presentes e afetarão diretamente  o usuário o usuário
  17. 17. Bugs Metodologias ágeis, como o XP, defendem  g g , , que, ao encontrarmos um problema, que, ao encontrarmos um problema,  antes de desenvolver uma solução  antes de desenvolver uma solução devemos criar um teste que detecte tal  devemos criar um teste que detecte tal problema. bl
  18. 18. Você confia no que faz? Você confia no que faz?
  19. 19. G Garanta o que você faz t êf • Cliente: – Isso aqui não está funcionando! • Programador: – Mas como!? Na minha máquina estava  funcionando até ontem. funcionando até ontem
  20. 20. G Garanta o que você faz t êf Depois eu escrevo o  p plano de testes…
  21. 21. G Garanta o que você faz t êf Depois eu escrevo o  p plano de testes… Vamos deixar os testes  pra próxima fase…
  22. 22. G Garanta o que você faz t êf Depois eu escrevo o  p plano de testes… Vamos deixar os testes  pra próxima fase… Na minha Na minha máquina está funcionando…
  23. 23. G Garanta o que você faz t êf Depois eu escrevo o  D i plano de testes de testes… Vamos deixar os testes  pra próxima fase… Precisamos entregar o  produto semana que vem!!! Na minha máquina está funcionando…
  24. 24. G t t b lh Garanta o seu trabalho seja profissional j fi i l Errado! (como se safar) Realidade! • Num mundo capitalizado  • O cliente não quer saber se  não há tempo para testes não há tempo para testes X virou Y. Ele quer que o  X virou Y Ele quer que o • O cliente não quer saber  q problema não aconteça e se  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]
  25. 25. O que são testes? O que são testes?
  26. 26. O O que são testes? ã t t ? 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
  27. 27. O O que são testes? ã t t ? • São pontuais São pontuais • São previsíveis • São finitos São finitos • São (ou deveriam ser) simples
  28. 28. O que são testes? O que são testes? White Box White Bo
  29. 29. Whit B White 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;
  30. 30. O que são testes? O que são testes? White Box White Bo Black Box Black Box
  31. 31. Bl k B Black Box • Testes funcionais e de aceitação; Testes funcionais e de aceitação; • Testes de integração; d i ã • Testam a solução completa;
  32. 32. C b t Cobertura dos testes d t t Resultado esperado Trecho alterado com alteração: OK Reflexo da alteração Erro #1 Reflexo da alteração Erro #2 Reflexo da alteração BUG Reflexo da alteração Inesperado I d
  33. 33. C b t Cobertura dos testes d t t Sem cobertura Com cobertura • Novo release = códigos  sem testes; • Não há segurança de Não há segurança de  que as alterações não  irão impactar em outros  irão impactar em outros pontos da aplicação; • Problemas muitos Problemas, muitos  problemas;
  34. 34. C b t Cobertura dos testes d t t • 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
  35. 35. C b t Cobertura dos testes d t t • Aplicações cobertas por bons testes  propiciam: i i – 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!
  36. 36. T t ã Testes são necessários ái • 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 realizar Você precisa ter segurança para realizar  alterações ç
  37. 37. T t ã Testes são necessários ái • 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
  38. 38. Tipos de Testes Tipos de Testes Unitário
  39. 39. T t U itá i Testes 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 TDD p
  40. 40. T t U itá i Testes 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 objetos O 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]
  41. 41. Testes Unitários T t U itá i • Ferramentas: – JUnit/NUnit e TestNG: para testes unitários – JMock: para criação de objetos e cenários falsos
  42. 42. Tipos de Testes Tipos de Testes Unitário Aceitação
  43. 43. T t d Testes de aceitação it ã • 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 , , /
  44. 44. Tipos de Testes Tipos de Testes Unitário Aceitação Integração
  45. 45. T t d i t Testes de integração ã • Testam a integração entre componentes • Envolvem dois ou mais componentes p • Ex ferramentas: JUnit DBUnit HSQLDB Ex. ferramentas: JUnit, DBUnit, HSQLDB • Normalmente não é muito utilizado em TDD Normalmente não é muito utilizado em TDD
  46. 46. Test Driven Development Test‐Driven Development
  47. 47. TDD refatore Escreva código E Escreva um que passe Teste no teste
  48. 48. R Regras Fundamentais F d t i • 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 pequenos p q • Escreva testes muito rápidos Escreva testes muito rápidos [10]
  49. 49. Ferramentas JUnit
  50. 50. JU it JUnit • É um framework altamente eficaz e  largamente utilizado na criação e execução de  l t tili d i ã ã d g testes unitários de códigos http://junit.org
  51. 51. U t t Um teste com JUnit JU it public class HelloWorldTest { @ est @Test public void testMultiplicacao() { //Testando se 2*2 = 4 assertEquals (“Mult”, 4, 2*2); ( Mult , 2 2); } }
  52. 52. Ferramentas JUnit TestNG
  53. 53. T tNG TestNG • Uma alternativa ao JUnit para testes unitários • Foi o primeiro a utilizar anotações para  p ç p definição dos TestCases ç
  54. 54. TestNG T tNG
  55. 55. U t t Um teste com TestNG T tNG import org.testng.annotations.*; public class SimpleTest { @BeforeClass public void setUp() { } @Test(groups = { quot;calculadoraquot; }) public void somaTest() { bli id T t() System.out.println(quot;somaquot;); } }
  56. 56. Ferramentas JUnit TestNG JMock
  57. 57. JM k JMock • Utilizado para criar ou simular falsos  objetos/cenários • Alternativas: – EasyMock – MockObjetc
  58. 58. S l i Selenium • 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
  59. 59. Selenium S l i
  60. 60. Cl Clover • 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, etc g , ,
  61. 61. Clover Cl
  62. 62. Refatoração
  63. 63. C d Codesmell ll • 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
  64. 64. O que é refatorar? O que é refatorar?
  65. 65. R f t Refatoração ã • Sempre existiu, mas não tinha um nome • Estava implícito p • A novidade foi criar um vocabulário comum e A novidade foi criar um vocabulário comum e  catalogá los catalogá‐los • Assim podemos utilizar mais sistematicamente Assim podemos utilizar mais sistematicamente  e ensinar uns aos outros e ensinar uns aos outros
  66. 66. Q Quando refatorar? d f t ? • 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.
  67. 67. 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.
  68. 68. R f t Refatoração: Benefícios ã B fí i • Redução de código duplicado • Aumentar a simplicidade p • Facilitar a leitura Facilitar a leitura • Melhorar a performance e eficência Melhorar a performance e eficência • Manutenibilidade
  69. 69. R f t Refatorar X Reescrever XR Refatorar Reescrever • Não altera a • Altera a funcionalidade ou funcionalidade do conteúdo do sistema/solução sistema/solução i t / l ã
  70. 70. Garanta se nos testes Garanta‐se nos testes Altere o código sem medo
  71. 71. G Garanta‐se nos testes t t t • 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
  72. 72. Conclusões C l õ • Testes colaboram para o aumento da  qualidade d lid d dos sistemas; it • Desenvolvedores ficam mais corajosos e Desenvolvedores ficam mais corajosos e  confiantes ao programar; • O software cresce de forma ordenada e com  qualidade de design; de design; • O software se adapta com mais facilidade a  mudanças;
  73. 73. Conclusões C l õ • 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 desenvolvimento; l i t – 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]
  74. 74. Dúvidas?
  75. 75. Referências R f ê i • [1] ‐ NIST ‐ http://www.nist.gov/public_affairs/releases/n02‐10.htm • [2] ‐ ImproveIt ‐ http://www.improveit.com.br/xp/praticas/tdd • [ ] p // g [3] ‐ Caelum ‐ http://blog.caelum.com.br/2006/09/08/voce‐acredita‐no‐seu‐codigo/ / / / / 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‐ odeiam‐testar  d i t t • [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.
  76. 76. refatore Escreva código Escreva um E que passe Teste no teste
  77. 77. D íd C íti Duvídas, Críticas e Sugestões S tõ • Para contato: – www.jeveaux.com – www.portaljava.com t lj – paulo@jeveaux.com – jeveaux@portaljava.com Obrigado a todos! Obrigado a todos! 27/09/2008

×