SlideShare uma empresa Scribd logo
[ TDD]

    Test Driven Development


                   Autor: Eduardo R. Carvalho
                   email: ercarval@gmail.com
                   @ercarval
                 Autor: Eduardo R. Carvalho
                   Facebook : ercarval
                 email: ercarval@gmail.com
                                       $ 1.0
[ TDD ]
           • O que é
           • Metodologia
           • Testes e Ciclo de Desenvolvimento de SW
           • JUnit
           • JUnit & NetBeans
           • Best Practices
           • Resumo


6/4/2012                       Eduardo R Carvalho      2
[TDD] – Test-Driven Development
  • Metodologia que utiliza de Testes para prover informações para
    tomada decisões de forma rápida e eficaz.
  • Promove o desenvolvimento de software de uma maneira simples
    e incremental. Não somente maximiza a qualidade e o design do
    software, como também simplifica o processo de
    desenvolvimento.
  • TDD é uma das práticas do Extreme Programming (XP). As práticas
    do XP foram formuladas por Kent Beck e Ron Jeffries a partir de
    suas experiências no desenvolvimento de uma sistema de
    pagamento para a Chrysler. As idéias gerais por trás do XP são
    simplificar o processo de desenvolvimento simples e manter um
    processo contínuo de desenvolvimento em um ciclo curto que
    fornece um feedback constante do estado do software. As idéias
    do TDD tem ganho uma grande aceitação nos meio dos
    desenvolvimento e projetos de software.
6/4/2012                      Introução a Java                        3
[TDD] - Metodologia
    Baseada em dois Conceitos Básicos.
            Testes Unitários
            “Refactoring”


    Composto nos seguintes passos:
           1. Escrever um teste que define como você acha que pequeno
              pedaço da aplicação deveria se comportar.
           2. Fazer o teste rodar da maneira mais fácil e rápida que você
              pode. Não se preocupe com a qualidade do código, apenas
              faça funcionar.
           3. Enxugue o código. Agora que o código esta funcionando
              corretamente, dê um passo para trás e refatore para
              remover qualquer duplicação ou qualquer outro problema
              que foi apresentado para tornar o teste executável.

6/4/2012                            Introução a Java                        4
[TDD] - Metodologia
   TDD é um processo iterativo e você repete estes passos
    inúmeras vezes até que você fique satisfeito com o novo código.
   A maneira que TDD trabalha é através de requisitos, ou casos de
    uso que são decompostos em um conjunto de comportamentos
    que são premissas para atender o requisito.
    Para cada comportamento do sistema, a primeira coisa a se
    fazer é escrever um teste unitário que irá testar este
    comportamento. O teste unitário primeiro, portanto temos um
    conjunto bem definido de critérios que podemos utilizar para
    mensurar a quantidade de código necessário que foi escrito para
    implementar este comportamento. Um dos benefícios de se
    escrever o teste primeiro é que ele ajuda a definir o
    comportamento do sistema de uma maneira mais clara e
    responder algumas perguntas do modelo.




6/4/2012                      Introução a Java                        5
[TDD] - Como Adotar ?
   Convencendo as pessoas a utilizar TDD

      Desenvolver software é um risco assumido. É quase impossível
      entregar um projeto dentro do orçamento e do prazo. De acordo
      com um estudo da Gartner Group, 30% dos projetos falham e
      não chegam aos seus objetivos, e 70% são entregues em atraso
      ou fora do orçamento previsto. Claramente existe a necessidade
      de melhorar este processo, mas a questão é como. TDD pode
      ser parte da resposta, mas antes de convencer as pessoas a
      utilizar TDD é preciso entender e apresentar os problemas do
      processo atual. Uma vez entendido as falhas do processo
      corrente, é preciso entender como utilizar TDD para suprir estas
      falhas e utilizar este conhecimento para convencer as outras
      pessoas que isso irá funcionar.




6/4/2012                        Introução a Java                         6
[TDD] - Como Adotar ?
   Encontrando as falhas no processo corrente.
    O processo mais usual quando não se pratica TDD é o famoso
    modelo cascata ( análise dos requisitos, modelo, código e o
    teste). A maioria dos problemas relacionados ao
    desenvolvimento de software é má comunicação da equipe e
    uma execução falha. Para entender as falhas do processo
    corrente, devemos responder algumas perguntas básicas como:

      – Qual é a maior causa dos bugs no softwares ?
      – Qual é a maor causa dos atrasos no cronograma ?
      – Qual é a média de bugs a cada 1000 linhas de código escrito ?
      – Como o processo reage a uma mudança de requisito.
      – Qual a fase do projeto que mais tenho problemas ?
      (Desing, código, integração, etc..)




6/4/2012                          Introução a Java                      7
[TDD] - Testes no ciclo de vida do SW
     Testes formais podem e devem ser definidos em todas as etapas do desenvolvimento de um
      software. Mesmo no caso de não poderem ser automatizados, defini-los precisamente permite
      identificar desde cedo problemas mais sérios com os requisitos ou a modelagem de uma aplicação.
      Podemos dizer que, quando faltam informações para a definição formal de um teste em termos de
      entradas exatas e de resultados esperados, isso significa que os requisitos ainda não foram
      suficientemente entendidos e documentados.
     Passado o levantamento de requisitos e a modelagem de negócios de uma aplicação, os testes
      passam a se focar mais em aspectos particulares da implementação, o que aumenta a demanda pela
      sua automação. Neste momento, a falta de informações suficientes para se implementar um teste
      automatizado pode indicar que as especificações de classes, pacotes, componentes, formatos de
      dados etc. ainda estão incompletas, ou então que surgiram requisitos novos ainda não
      completamente documentados.
     O desenvolvimento orientado a testes traz o benefício de validar de modo objetivo os requisitos
      documentados desde o início do ciclo de vida. O TDD expõe erros, omissões e inconsistências que de
      outra forma só seriam detectados quando já houvesse código executável entregue ao usuário.




6/4/2012                                      Introução a Java                                             8
[TDD] - Testes no ciclo de vida do SW
     Um exemplo de processo de desenvolvimento e os tipos de testes que são produzidos em cada
      etapa. Vale a pena ressaltar aqui que em muitos casos as mesmas tecnologias e ferramentas podem
      ser utilizadas para construir diferentes tipos de testes. A distinção entre, por exemplo, “testes de
      unidade” e “testes de sistema” é feita em relação à finalidade de cada teste, e não em relação à sua
      forma.




6/4/2012                                       Introução a Java                                              9
[TDD] Alguns Frameworks de apoio
   JUnit
      http://www.junit.org
   EasyMock
      http://easymock.org
   JMock
      http://www.jmock.org/
   Mockito
      http://code.google.com/p/mockito/
   Spring
      http://www.springsource.org/
   iMacros
      http://www.iopus.com/download/

6/4/2012                     Introução a Java   10
[TDD] – JUnit : O que é ?
   Um framework que facilita o desenvolvimento e execução de
    testes de unidade em código Java
      Uma API para construir os testes
      Aplicações para executar testes
   A API
      Classes Test, TestCase, TestSuite, etc. oferecem a infraestrutura
       necessária para criar os testes
      Métodos assertTrue(), assertEquals(), fail(), etc. são usados para
       testar os resultados.
   Suportado por varias IDES (Eclipse, NetBeans, JDeveloper, etc...).




6/4/2012                        Introução a Java                        11
[TDD] – JUnit : Para que Serve ?
   Testar é uma boa prática, mas é chato; JUnit torna as coisas
    mais agradáveis, facilitando:
      A criação e execução automática de testes
      A apresentação dos resultados
   JUnit pode verificar se cada unidade de código funciona da
    forma esperada
      Permite agrupar e rodar vários testes ao mesmo tempo
      Na falha, mostra a causa em cada teste
   Serve de base para extensões




6/4/2012                     Introução a Java                      12
[TDD] – JUnit : Arquitetura
   Diagrama de Classes




6/4/2012                  Introução a Java   13
[TDD] – JUnit : Como Usar ?
   Há várias formas de usar o JUnit. Depende da
    metodologia de testes que está sendo usada
            Código existente: precisa-se escrever testes para
             classes que já foram implementadas
            Desenvolvimento guiado por testes (TDD): código
             novo só é escrito se houver um teste sem funcionar




6/4/2012                        Introução a Java                  14
[TDD] – JUnit : Testar Código Existente
   Exemplo de um roteiro típico
   1.       Crie uma classe que estenda junit.framework.TestCase para cada classe a
            ser testada
           import junit.framework.*;
           class SuaClasseTest extends TestCase {...}
  2. Para cada método xxx(args) a ser testado defina um método public
     void testXxx() no test case
            SuaClasse:
                public boolean equals(Object o) { ... }
            SuaClasseTest:
                public void testEquals() {...}


   Sobre escreva o método setUp(), se necessário
   Sobre escreva o método tearDown(), se necessário

6/4/2012                                 Introução a Java                             15
[TDD] – JUnit : Guiar Desenvolvimento
   Cenário de Test-Driven Development (TDD)
       1.   Defina uma lista de tarefas a implementar
       2.   Escreva uma classe (test case) e implemente um método de teste para uma
            tarefa da lista.
       3.   Rode o JUnit e certifique-se que o teste falha
       4.   Implemente o código mais simples que rode o teste
             Crie classes, métodos, etc. para que código compile
             Código pode ser código feio, óbvio, mas deve rodar!
       5.   Refatore o código para remover a duplicação de dados
       6.   Escreva mais um teste ou refine o teste existente
       7.   Repita os passos 2 a 6 até implementar toda a lista




6/4/2012                              Introução a Java                            16
[TDD] – JUnit : Como Implementar
   Dentro de cada teste, utilize os métodos herdados da classe
    TestCase
            assertEquals(objetoEsperado, objetoRecebido),
            assertTrue(valorBooleano), assertNotNull(objeto)
            assertSame(objetoUm, objetoDois), fail (), ...
   Exemplo de test case com um setUp() e um teste:
  1. public class CoisaTest extends TestCase {
  2.     // construtor padrão omitido
  3.     private Coisa coisa;
  4.     public void setUp(){ coisa = new Coisa("Bit"); }
  5.     public void testToString() {
  6.         assertEquals("<coisa>Bit</coisa>",
  7.                      coisa.toString() );
  8.     }
  9. }


6/4/2012                                Eduardo R Carvalho        17
[TDD] – JUnit : Como Funciona ?
   O TestRunner recebe uma subclasse de junit.framework.TestCase
            Usa reflection para achar métodos
   Para cada método testXXX(), executa:
            o método setUp()
            o próprio método testXXX()
            o método tearDown()
   O test case é instanciado para executar um método testXXX() de
    cada vez.
      As alterações que ele fizer ao estado do objeto não afetarão os
       demais testes
      Método pode terminar, falhar ou provocar exceção




6/4/2012                                  Eduardo R Carvalho             18
[TDD] – JUnit : Exemplo de Test Case
  package junitdemo;
  import junit.framework.*;
  import java.io.IOException;

  public class TextUtilsTest extends TestCase {
     public TextUtilsTest(String name) {
          super(name);
     }
     public void testRemoveWhiteSpaces() throws IOException {
          String testString = "one, ( two | three+) , " +
                         "(((four+ |t five)?n n, six? ";
          String expectedString = "one,(two|three+) " +
                                  ",(((four+|five)?,six? ";
          String results = TextUtils.removeWhiteSpaces(testString);
          assertEquals(expectedString, results);
     }
  }




6/4/2012                        Eduardo R Carvalho                    19
[TDD] – JUnit : Fazendo o Teste Passar
  1.   package junitdemo;
  2.   import java.io.*;
  3.   public class TextUtils {
  4.      public static String removeWhiteSpaces(String text) throws ...{
  5.          return "one,(two|three+),(((four+|five)?,six?";
  6.      }
  7.   }



   O teste passa... e daí? A solução está pronta? Não! Tem dados
    duplicados! Remova-os!

   Escreva um novo teste que faça com que esta solução falhe, por
    exemplo:
            String test2 = " a bnc ";
            assertEquals("abc", TextUtils.removeWhiteSpaces(test2));

6/4/2012                                Eduardo R Carvalho                  20
[TDD] – JUnit : Fazendo o Teste Passar!!
  1. package junitdemo;
  2. import java.io.*;
  3. public class TextUtils {
  4.      public static String removeWhiteSpaces(String text)
  5.                                              throws IOException {
  6.         StringReader reader = new StringReader(text);
  7.         StringBuffer buffer = new StringBuffer(text.length());
  8.         int c;
  9.         while( (c = reader.read()) != -1) {
  10.           if (c ==' '||c =='n'||c =='r'|| c =='f'||c =='t') {
  11.                     ; /* do nothing */
  12.           } else {
  13.                     buffer.append((char)c);
  14.           }
  15.        }
  16.             return buffer.toString();
  17.     }
  18.}


6/4/2012                        Eduardo R Carvalho                        21
[TDD] – JUnit : TestSuite
   Permite executar uma coleção de testes
            Método addTest(TestSuite) adiciona um teste na lista
   Padrão de codificação (usando reflection):
        retornar um TestSuite em cada test-case:
       1. public static TestSuite suite() {
       2.       return new TestSuite(SuaClasseTest.class);
       3. }
   Criar uma classe AllTests que combina as suites:
       1.      public class AllTests {
       2.         public static Test suite() {
       3.             TestSuite testSuite = new TestSuite("Roda tudo");
       4.             testSuite.addTest(pacote.AllTests.suite());
       5.             testSuite.addTest(MinhaClasseTest.suite());
       6.             testSuite.addTest(SuaClasseTest.suite());
       7.             return testSuite;
       8.         }
       9.      }


6/4/2012                                       Eduardo R Carvalho         22
[TDD] – JUnit : Fixture
   São os dados reutilizados por vários testes
  1. public class AttributeEnumerationTest extends TestCase {
  2.     String testString; String[] testArray;
  3.     AttributeEnumeration testEnum;
  4.     public void setUp() {
  5.        testString = "(alpha|beta|gamma)";
  6.        testArray = new String[]{"alpha", "beta", "gamma"};
  7.        testEnum = new AttributeEnumeration(testArray);
  8.     }
  9.     public void testGetNames() {
  10.       assertEquals(testEnum.getNames(), testArray);
  11.    }
  12.    public void testToString() {
  13.       assertEquals(testEnum.toString(), testString);
  14.    }
  15. ....
            Se os mesmos dados são usados em vários testes, inicialize-os no setUp() e faça a faxina no
             tearDown() (se necessário)
            Não perca tempo pensando nisto antes. Escreva seus testes. Depois, se achar que há
              duplicação, monte o fixture.

6/4/2012                                         Eduardo R Carvalho                                        23
[TDD] – JUnit : Testando a Falha !!!
   É tão importante testar o cenário de falha do seu codigo quanto o
    sucesso
   Método fail() provoca uma falha
            Use para verificar se exceções ocorrem quando se espera que elas ocorram

   Exemplo:
  1. public void testEntityNotFoundException() {
  2.    resetEntityTable(); // no entities to resolve!
  3.    try {
  4.       // Following method call must cause exception!
  5.      ParameterEntityTag tag = parser.resolveEntity("bogus");
  6.      fail("Should have caused EntityNotFoundException!");
  7.    } catch (EntityNotFoundException e) {
  8.      // success: exception occurred as expected
  9.    }
  10.}


6/4/2012                                     Eduardo R Carvalho                         24
[TDD] – JUnit : Resumo
   Para o JUnit :
            Um teste é um método
            Um caso de teste é uma classe contendo uma coleção de testes (métodos que possuem
             assertions)
            Cada teste testa o comportamento de uma unidade de código do objeto testado (pode ser um
             método, mas pode haver vários testes para o mesmo método ou um teste para todo o objeto)

   Fixtures são os dados usados em testes
   TestSuite é uma composição de casos de teste
            Pode-se agrupar vários casos de teste em uma suite

   JUnit testa apenas a interface das classes
            Mantenha os casos de teste no mesmo diretório que as classes testadas para ter acesso a
             métodos package-private
            Use padrões de nomenclatura: ClasseTest, AllTests
            Use o Ant para separar as classes em um release




6/4/2012                                        Eduardo R Carvalho                                      25
[TDD] – JUnit : NetBeans 6.7.x
   http://junit.netbeans.org/proposed-new-features.html




6/4/2012                          Eduardo R Carvalho       26
[TDD] – JUnit 4 : Simple Test
  1. public class DAOTest {
  2.     @BeforeClass
  3.     public static void setUpClass() throws Exception { }
  4.     @AfterClass
  5.     public static void tearDownClass() throws Exception {}
  6.     @Before
  7.     public void setUp() {}
  8.     @After
  9.     public void tearDown() {}
  10.    @Test
  11.    public void testXXX() { }
  12.    @Test
  13.    public void testYYY() { }
  14.}




6/4/2012                     Eduardo R Carvalho                   27
[TDD] – JUnit 4 : TestSuite
  1. @RunWith(Suite.class)
  2. @Suite.SuiteClasses( {br.com.fastbuy.dao.ItemDAOTest.class ,
  3.                br.com.fastbuy.framework.dao.DAOHelperTest.class })
  4. public class SampleTestSuite {
  5.     @BeforeClass
  6.     public static void setUpClass() throws Exception {}

  7.       @AfterClass
  8.       public static void tearDownClass() throws Exception {}

  9.       @Before
  10.      public void setUp() throws Exception {}

  11.      @After
  12.      public void tearDown() throws Exception {}
  13.}




6/4/2012                          Eduardo R Carvalho                      28
[TDD] – Best Practices
   JUnit facilita bastante a criação e execução de testes, mas elaborar
    bons testes exige mais
            O que testar? Como saber se testes estão completos?
   "Teste tudo o que pode falhar" [2]
            Métodos triviais (get/set) não precisam ser testados.
            E se houver uma rotina de validação no método set?
   É melhor ter testes a mais que testes a menos
            Escreva testes curtos (quebre testes maiores)
            Use assertNotNull() (reduz drasticamente erros de NullPointerException
             difíceis de encontrar)
            Reescreva seu código para que fique mais fácil de testar




6/4/2012                                 Eduardo R Carvalho                           29
[TDD] – Best Practices
   Escreva listas de tarefas (to-do list)
            Comece pelas mais simples e deixe os testes "realistas” para o final
            Requerimentos, use-cases, diagramas UML: rescreva os requerimentos em termos de
             testes

   Dados
            Use apenas dados suficientes (não teste 10 condições se três forem suficientes)


   Bugs revelam testes
            Achou um bug? Não conserte sem antes escrever um teste que o pegue (se você não
             o fizer, ele volta)!


   Teste sempre! Não escreva uma linha de código sem
    antes escrever um teste!

6/4/2012                                     Eduardo R Carvalho                                30
[TDD] – Test-Driven Development
   Desenvolvimento guiado pelos testes
            Só escreva código novo se um teste falhar
            Refatore até que o teste funcione
            Alternância: "red/green/refactor" - nunca passe mais de 10 minutos sem que
             a barra do JUnit fique verde.


   Técnicas
            "Fake It Til You Make It": faça um teste rodar simplesmente fazendo método
             retornar constante
            Triangulação: abstraia o código apenas quando houver dois ou mais testes
             que esperam respostas diferentes
            Implementação óbvia: se operações são simples, implemente-as e faça que
             os testes rodem


6/4/2012                                Eduardo R Carvalho                                31
[TDD] – Como Lidar com Testes Difíceis
   Testes devem ser simples e suficientes
      XP: design mais simples que resolva o problema; sempre pode-se escrever
               novos testes, quando necessário
   Não complique
            Não teste o que é responsabilidade de outra classe/método
            Assuma que outras classes e métodos funcionam
   Testes difíceis (ou que parecem difíceis)
              Aplicações gráficas: eventos, layouts, threads
              Objetos inacessíveis, métodos privativos, Singletons
              Objetos que dependem de outros objetos
              Objetos cujo estado varia devido a fatores imprevisíveis
   Soluções
            Alterar o design da aplicação para facilitar os testes
            Simular dependências usando proxies e stubs


6/4/2012                                      Eduardo R Carvalho                 32
[TDD] – Resumo
   Testar é tarefa essencial do desenvolvimento de software.
   Testar unidades de código durante o desenvolvimento é uma prática que
      traz inúmeros benefícios
              Menos tempo de depuração (muito, muito menos!)
              Melhor qualidade do software
              Segurança para alterar o código
              Usando TDD, melhores estimativas de prazo
   JUnit é uma ferramenta open-source que ajuda a implementar testes em
    projetos Java
   TDD ou Test-Driven Development é uma técnica onde os testes são usados para
    guiar o desenvolvimento
            Ajuda a focar o desenvolvimento em seus objetivos
   Mock objects ou stubs podem ser usados para representar dependência e
    diminuir as responsabilidades de testes




6/4/2012                                       Eduardo R Carvalho                 33

Mais conteúdo relacionado

Mais procurados

Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
Eduardo Carvalho
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
cejug
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
Oziel Moreira Neto
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
Rafael Carneiro
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Lorran Pegoretti
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
ejdn1
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
Fernando Camargo
 
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaJava Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Fábio Antonelli
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
Marcio Marinho
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
Raytssa Martins
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
alexmacedo
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Renato Groff
 
Introdução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection APIIntrodução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection API
Guilherme de Cleva Farto
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
Luis Ferreira
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
Filipe Bezerra Sousa
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
Vagner Santana
 
J unit xp
J unit xpJ unit xp
J unit xp
Emir Calife
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
munosai
 
Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8
Rogério Moraes de Carvalho
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
Rodrigo Caetano
 

Mais procurados (20)

Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections Classes Java , JDBC / Swing / Collections
Classes Java , JDBC / Swing / Collections
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Conhecendo Java
Conhecendo JavaConhecendo Java
Conhecendo Java
 
Padrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e BridgePadrões de projeto - Adapter, Proxy, Composite e Bridge
Padrões de projeto - Adapter, Proxy, Composite e Bridge
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Construção de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em JavaConstrução de Frameworks com Annotation e Reflection API em Java
Construção de Frameworks com Annotation e Reflection API em Java
 
Java Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em JavaJava Day 2011 - Reflection: Maximizando a produtividade em Java
Java Day 2011 - Reflection: Maximizando a produtividade em Java
 
Apostila de Fundamentos Java
Apostila de Fundamentos JavaApostila de Fundamentos Java
Apostila de Fundamentos Java
 
03 fundamentos java
03 fundamentos java03 fundamentos java
03 fundamentos java
 
Exemplos de Design Patterns em Java
Exemplos de Design Patterns em JavaExemplos de Design Patterns em Java
Exemplos de Design Patterns em Java
 
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - .NET SP - Abril-2018
 
Introdução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection APIIntrodução à Metaprogramação com Java Reflection API
Introdução à Metaprogramação com Java Reflection API
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 
J unit xp
J unit xpJ unit xp
J unit xp
 
Apresentação java
Apresentação javaApresentação java
Apresentação java
 
Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8Linguagem de programação Java 6, 7 e 8
Linguagem de programação Java 6, 7 e 8
 
Padrões de projeto
Padrões de projetoPadrões de projeto
Padrões de projeto
 

Destaque

4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many
Lukinha92
 
Rmi (remote method invocation)
Rmi (remote method invocation)Rmi (remote method invocation)
Rmi (remote method invocation)
Helio Henrique L. C. Monte-Alto
 
Java persintence api
Java persintence apiJava persintence api
Java persintence api
Eduardo Carvalho
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
diegomcunha
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
Fabio Moura Pereira
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
Aécio Costa
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: Exceções
Eduardo Mendes
 
Java Platform, Enterprise Edition
Java Platform, Enterprise EditionJava Platform, Enterprise Edition
Java Platform, Enterprise Edition
Daniel Arndt Alves
 

Destaque (8)

4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many4 2-jpa-relacionamentos-one-to-many
4 2-jpa-relacionamentos-one-to-many
 
Rmi (remote method invocation)
Rmi (remote method invocation)Rmi (remote method invocation)
Rmi (remote method invocation)
 
Java persintence api
Java persintence apiJava persintence api
Java persintence api
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Aula Tratamento de Exceções
Aula Tratamento de ExceçõesAula Tratamento de Exceções
Aula Tratamento de Exceções
 
Refinamento e boas práticas de programação
Refinamento e boas práticas de programaçãoRefinamento e boas práticas de programação
Refinamento e boas práticas de programação
 
Certificação Java: Exceções
Certificação Java: ExceçõesCertificação Java: Exceções
Certificação Java: Exceções
 
Java Platform, Enterprise Edition
Java Platform, Enterprise EditionJava Platform, Enterprise Edition
Java Platform, Enterprise Edition
 

Semelhante a Teste Driven Development

Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
Universidade Tiradentes
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
Renato Groff
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
Engenharia de Software Ágil
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
Aline Ferreira
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
Simone Pittner
 
Apresentação tcc final
Apresentação tcc finalApresentação tcc final
Apresentação tcc final
Jhool Flores
 
Subm_SamuelPereira_FINAL
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
Diego Pacheco
 
Teste de software
Teste de softwareTeste de software
Teste de software
Nécio de Lima Veras
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
Hélio Medeiros
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
elliando dias
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Renato Groff
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
Dextra Sistemas / Etec Itu
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
Rogerio Fontes
 
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
Renato Groff
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
Denis Ferrari
 
Final Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsFinal Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applications
Luiz Henrique
 
Aula - Teste de Software
Aula - Teste de SoftwareAula - Teste de Software
Aula - Teste de Software
Mauricio Cesar Santos da Purificação
 
JUnit Sample
JUnit SampleJUnit Sample
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
Bruno Maomeh
 

Semelhante a Teste Driven Development (20)

Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Apresentacao Testes de Unidade
Apresentacao Testes de UnidadeApresentacao Testes de Unidade
Apresentacao Testes de Unidade
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Apresentação tcc final
Apresentação tcc finalApresentação tcc final
Apresentação tcc final
 
Subm_SamuelPereira_FINAL
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Subm_SamuelPereira_FINAL
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Teste de software
Teste de softwareTeste de software
Teste de software
 
UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27UnP Eng. Software - Aula 27
UnP Eng. Software - Aula 27
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016Behavior-Driven Development (BDD) - QA Ninja Conf 2016
Behavior-Driven Development (BDD) - QA Ninja Conf 2016
 
Os Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de softwareOs Benefícios dos testes no desenvolvimento de software
Os Benefícios dos testes no desenvolvimento de software
 
Sobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis UberlândiaSobre TDD - Tech Friday da Everis Uberlândia
Sobre TDD - Tech Friday da Everis Uberlândia
 
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
BDD (Behavior-Driven Development) - GDG-SP - Julho/2016
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Final Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsFinal Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applications
 
Aula - Teste de Software
Aula - Teste de SoftwareAula - Teste de Software
Aula - Teste de Software
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
Tdd na veia
Tdd na veiaTdd na veia
Tdd na veia
 

Último

Caça-palavras - multiplicação
Caça-palavras  -  multiplicaçãoCaça-palavras  -  multiplicação
Caça-palavras - multiplicação
Mary Alvarenga
 
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
principeandregalli
 
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Centro Jacques Delors
 
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptxSlides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
LuizHenriquedeAlmeid6
 
Introdução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdfIntrodução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdf
valdeci17
 
Intendência da Aeronáutica. Somos um, sou você Intendência!.pdf
Intendência da Aeronáutica. Somos um, sou você Intendência!.pdfIntendência da Aeronáutica. Somos um, sou você Intendência!.pdf
Intendência da Aeronáutica. Somos um, sou você Intendência!.pdf
Falcão Brasil
 
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdfEscola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Falcão Brasil
 
Organograma do Ministério da Defesa (MD).pdf
Organograma do Ministério da Defesa (MD).pdfOrganograma do Ministério da Defesa (MD).pdf
Organograma do Ministério da Defesa (MD).pdf
Falcão Brasil
 
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Falcão Brasil
 
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdfA Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
Falcão Brasil
 
Slides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptx
Slides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptxSlides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptx
Slides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptx
LuizHenriquedeAlmeid6
 
Portfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdfPortfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdf
Falcão Brasil
 
Oceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsx
Oceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsxOceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsx
Oceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsx
Luzia Gabriele
 
Administração Em Enfermagem.pptx caala - Cópia-1.pptx
Administração Em Enfermagem.pptx caala - Cópia-1.pptxAdministração Em Enfermagem.pptx caala - Cópia-1.pptx
Administração Em Enfermagem.pptx caala - Cópia-1.pptx
helenawaya9
 
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdfA Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
Falcão Brasil
 
Fotossíntese e respiração: conceitos e trocas gasosas
Fotossíntese e respiração: conceitos e trocas gasosasFotossíntese e respiração: conceitos e trocas gasosas
Fotossíntese e respiração: conceitos e trocas gasosas
MariaJooSilva58
 
A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...
A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...
A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...
Falcão Brasil
 
Análise dos resultados do desmatamento obtidos pelo SIAD.ppt
Análise dos resultados do desmatamento obtidos pelo SIAD.pptAnálise dos resultados do desmatamento obtidos pelo SIAD.ppt
Análise dos resultados do desmatamento obtidos pelo SIAD.ppt
Falcão Brasil
 
28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf
28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf
28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf
SheylaAlves6
 
A Guerra do Presente - Ministério da Defesa.pdf
A Guerra do Presente - Ministério da Defesa.pdfA Guerra do Presente - Ministério da Defesa.pdf
A Guerra do Presente - Ministério da Defesa.pdf
Falcão Brasil
 

Último (20)

Caça-palavras - multiplicação
Caça-palavras  -  multiplicaçãoCaça-palavras  -  multiplicação
Caça-palavras - multiplicação
 
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
Guia Genealógico da Principesca e Ducal Casa de Mesolcina, 2024
 
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
Slide | Eurodeputados Portugueses (2024-2029) - Parlamento Europeu (atualiz. ...
 
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptxSlides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
Slides Lição 3, Betel, A relevância da Igreja no cumprimento de sua Missão.pptx
 
Introdução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdfIntrodução ao filme Divertida Mente 2 em pdf
Introdução ao filme Divertida Mente 2 em pdf
 
Intendência da Aeronáutica. Somos um, sou você Intendência!.pdf
Intendência da Aeronáutica. Somos um, sou você Intendência!.pdfIntendência da Aeronáutica. Somos um, sou você Intendência!.pdf
Intendência da Aeronáutica. Somos um, sou você Intendência!.pdf
 
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdfEscola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
Escola de Comando e Estado-Maior da Aeronáutica (ECEMAR).pdf
 
Organograma do Ministério da Defesa (MD).pdf
Organograma do Ministério da Defesa (MD).pdfOrganograma do Ministério da Defesa (MD).pdf
Organograma do Ministério da Defesa (MD).pdf
 
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
Organograma do Centro Gestor e Operacional do Sistema de Proteção da Amazônia...
 
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdfA Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
A Industria Brasileira de Defesa - Situação Atual e Perspectivas de Evolução.pdf
 
Slides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptx
Slides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptxSlides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptx
Slides Lição 3, CPAD, Rute e Noemi, Entrelaçadas pelo Amor.pptx
 
Portfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdfPortfólio Estratégico da Marinha do Brasil (MB).pdf
Portfólio Estratégico da Marinha do Brasil (MB).pdf
 
Oceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsx
Oceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsxOceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsx
Oceano, Fonte de Vida e Beleza Maria Inês Aroeira Braga.ppsx
 
Administração Em Enfermagem.pptx caala - Cópia-1.pptx
Administração Em Enfermagem.pptx caala - Cópia-1.pptxAdministração Em Enfermagem.pptx caala - Cópia-1.pptx
Administração Em Enfermagem.pptx caala - Cópia-1.pptx
 
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdfA Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
A Atuação das Forças Armadas na Garantia da Lei e da Ordem (GLO).pdf
 
Fotossíntese e respiração: conceitos e trocas gasosas
Fotossíntese e respiração: conceitos e trocas gasosasFotossíntese e respiração: conceitos e trocas gasosas
Fotossíntese e respiração: conceitos e trocas gasosas
 
A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...
A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...
A Participação do Brasil nas Operações de Manutenção da Paz da ONU Passado, P...
 
Análise dos resultados do desmatamento obtidos pelo SIAD.ppt
Análise dos resultados do desmatamento obtidos pelo SIAD.pptAnálise dos resultados do desmatamento obtidos pelo SIAD.ppt
Análise dos resultados do desmatamento obtidos pelo SIAD.ppt
 
28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf
28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf
28 - Agente de Endemias (40 mapas mentais) - Amostra.pdf
 
A Guerra do Presente - Ministério da Defesa.pdf
A Guerra do Presente - Ministério da Defesa.pdfA Guerra do Presente - Ministério da Defesa.pdf
A Guerra do Presente - Ministério da Defesa.pdf
 

Teste Driven Development

  • 1. [ TDD] Test Driven Development Autor: Eduardo R. Carvalho email: ercarval@gmail.com @ercarval Autor: Eduardo R. Carvalho Facebook : ercarval email: ercarval@gmail.com $ 1.0
  • 2. [ TDD ] • O que é • Metodologia • Testes e Ciclo de Desenvolvimento de SW • JUnit • JUnit & NetBeans • Best Practices • Resumo 6/4/2012 Eduardo R Carvalho 2
  • 3. [TDD] – Test-Driven Development • Metodologia que utiliza de Testes para prover informações para tomada decisões de forma rápida e eficaz. • Promove o desenvolvimento de software de uma maneira simples e incremental. Não somente maximiza a qualidade e o design do software, como também simplifica o processo de desenvolvimento. • TDD é uma das práticas do Extreme Programming (XP). As práticas do XP foram formuladas por Kent Beck e Ron Jeffries a partir de suas experiências no desenvolvimento de uma sistema de pagamento para a Chrysler. As idéias gerais por trás do XP são simplificar o processo de desenvolvimento simples e manter um processo contínuo de desenvolvimento em um ciclo curto que fornece um feedback constante do estado do software. As idéias do TDD tem ganho uma grande aceitação nos meio dos desenvolvimento e projetos de software. 6/4/2012 Introução a Java 3
  • 4. [TDD] - Metodologia  Baseada em dois Conceitos Básicos.  Testes Unitários  “Refactoring”  Composto nos seguintes passos: 1. Escrever um teste que define como você acha que pequeno pedaço da aplicação deveria se comportar. 2. Fazer o teste rodar da maneira mais fácil e rápida que você pode. Não se preocupe com a qualidade do código, apenas faça funcionar. 3. Enxugue o código. Agora que o código esta funcionando corretamente, dê um passo para trás e refatore para remover qualquer duplicação ou qualquer outro problema que foi apresentado para tornar o teste executável. 6/4/2012 Introução a Java 4
  • 5. [TDD] - Metodologia  TDD é um processo iterativo e você repete estes passos inúmeras vezes até que você fique satisfeito com o novo código.  A maneira que TDD trabalha é através de requisitos, ou casos de uso que são decompostos em um conjunto de comportamentos que são premissas para atender o requisito. Para cada comportamento do sistema, a primeira coisa a se fazer é escrever um teste unitário que irá testar este comportamento. O teste unitário primeiro, portanto temos um conjunto bem definido de critérios que podemos utilizar para mensurar a quantidade de código necessário que foi escrito para implementar este comportamento. Um dos benefícios de se escrever o teste primeiro é que ele ajuda a definir o comportamento do sistema de uma maneira mais clara e responder algumas perguntas do modelo. 6/4/2012 Introução a Java 5
  • 6. [TDD] - Como Adotar ?  Convencendo as pessoas a utilizar TDD Desenvolver software é um risco assumido. É quase impossível entregar um projeto dentro do orçamento e do prazo. De acordo com um estudo da Gartner Group, 30% dos projetos falham e não chegam aos seus objetivos, e 70% são entregues em atraso ou fora do orçamento previsto. Claramente existe a necessidade de melhorar este processo, mas a questão é como. TDD pode ser parte da resposta, mas antes de convencer as pessoas a utilizar TDD é preciso entender e apresentar os problemas do processo atual. Uma vez entendido as falhas do processo corrente, é preciso entender como utilizar TDD para suprir estas falhas e utilizar este conhecimento para convencer as outras pessoas que isso irá funcionar. 6/4/2012 Introução a Java 6
  • 7. [TDD] - Como Adotar ?  Encontrando as falhas no processo corrente. O processo mais usual quando não se pratica TDD é o famoso modelo cascata ( análise dos requisitos, modelo, código e o teste). A maioria dos problemas relacionados ao desenvolvimento de software é má comunicação da equipe e uma execução falha. Para entender as falhas do processo corrente, devemos responder algumas perguntas básicas como: – Qual é a maior causa dos bugs no softwares ? – Qual é a maor causa dos atrasos no cronograma ? – Qual é a média de bugs a cada 1000 linhas de código escrito ? – Como o processo reage a uma mudança de requisito. – Qual a fase do projeto que mais tenho problemas ? (Desing, código, integração, etc..) 6/4/2012 Introução a Java 7
  • 8. [TDD] - Testes no ciclo de vida do SW  Testes formais podem e devem ser definidos em todas as etapas do desenvolvimento de um software. Mesmo no caso de não poderem ser automatizados, defini-los precisamente permite identificar desde cedo problemas mais sérios com os requisitos ou a modelagem de uma aplicação. Podemos dizer que, quando faltam informações para a definição formal de um teste em termos de entradas exatas e de resultados esperados, isso significa que os requisitos ainda não foram suficientemente entendidos e documentados.  Passado o levantamento de requisitos e a modelagem de negócios de uma aplicação, os testes passam a se focar mais em aspectos particulares da implementação, o que aumenta a demanda pela sua automação. Neste momento, a falta de informações suficientes para se implementar um teste automatizado pode indicar que as especificações de classes, pacotes, componentes, formatos de dados etc. ainda estão incompletas, ou então que surgiram requisitos novos ainda não completamente documentados.  O desenvolvimento orientado a testes traz o benefício de validar de modo objetivo os requisitos documentados desde o início do ciclo de vida. O TDD expõe erros, omissões e inconsistências que de outra forma só seriam detectados quando já houvesse código executável entregue ao usuário. 6/4/2012 Introução a Java 8
  • 9. [TDD] - Testes no ciclo de vida do SW  Um exemplo de processo de desenvolvimento e os tipos de testes que são produzidos em cada etapa. Vale a pena ressaltar aqui que em muitos casos as mesmas tecnologias e ferramentas podem ser utilizadas para construir diferentes tipos de testes. A distinção entre, por exemplo, “testes de unidade” e “testes de sistema” é feita em relação à finalidade de cada teste, e não em relação à sua forma. 6/4/2012 Introução a Java 9
  • 10. [TDD] Alguns Frameworks de apoio  JUnit  http://www.junit.org  EasyMock  http://easymock.org  JMock  http://www.jmock.org/  Mockito  http://code.google.com/p/mockito/  Spring  http://www.springsource.org/  iMacros  http://www.iopus.com/download/ 6/4/2012 Introução a Java 10
  • 11. [TDD] – JUnit : O que é ?  Um framework que facilita o desenvolvimento e execução de testes de unidade em código Java  Uma API para construir os testes  Aplicações para executar testes  A API  Classes Test, TestCase, TestSuite, etc. oferecem a infraestrutura necessária para criar os testes  Métodos assertTrue(), assertEquals(), fail(), etc. são usados para testar os resultados.  Suportado por varias IDES (Eclipse, NetBeans, JDeveloper, etc...). 6/4/2012 Introução a Java 11
  • 12. [TDD] – JUnit : Para que Serve ?  Testar é uma boa prática, mas é chato; JUnit torna as coisas mais agradáveis, facilitando:  A criação e execução automática de testes  A apresentação dos resultados  JUnit pode verificar se cada unidade de código funciona da forma esperada  Permite agrupar e rodar vários testes ao mesmo tempo  Na falha, mostra a causa em cada teste  Serve de base para extensões 6/4/2012 Introução a Java 12
  • 13. [TDD] – JUnit : Arquitetura  Diagrama de Classes 6/4/2012 Introução a Java 13
  • 14. [TDD] – JUnit : Como Usar ?  Há várias formas de usar o JUnit. Depende da metodologia de testes que está sendo usada  Código existente: precisa-se escrever testes para classes que já foram implementadas  Desenvolvimento guiado por testes (TDD): código novo só é escrito se houver um teste sem funcionar 6/4/2012 Introução a Java 14
  • 15. [TDD] – JUnit : Testar Código Existente  Exemplo de um roteiro típico 1. Crie uma classe que estenda junit.framework.TestCase para cada classe a ser testada import junit.framework.*; class SuaClasseTest extends TestCase {...} 2. Para cada método xxx(args) a ser testado defina um método public void testXxx() no test case  SuaClasse:  public boolean equals(Object o) { ... }  SuaClasseTest:  public void testEquals() {...}  Sobre escreva o método setUp(), se necessário  Sobre escreva o método tearDown(), se necessário 6/4/2012 Introução a Java 15
  • 16. [TDD] – JUnit : Guiar Desenvolvimento  Cenário de Test-Driven Development (TDD) 1. Defina uma lista de tarefas a implementar 2. Escreva uma classe (test case) e implemente um método de teste para uma tarefa da lista. 3. Rode o JUnit e certifique-se que o teste falha 4. Implemente o código mais simples que rode o teste  Crie classes, métodos, etc. para que código compile  Código pode ser código feio, óbvio, mas deve rodar! 5. Refatore o código para remover a duplicação de dados 6. Escreva mais um teste ou refine o teste existente 7. Repita os passos 2 a 6 até implementar toda a lista 6/4/2012 Introução a Java 16
  • 17. [TDD] – JUnit : Como Implementar  Dentro de cada teste, utilize os métodos herdados da classe TestCase  assertEquals(objetoEsperado, objetoRecebido),  assertTrue(valorBooleano), assertNotNull(objeto)  assertSame(objetoUm, objetoDois), fail (), ...  Exemplo de test case com um setUp() e um teste: 1. public class CoisaTest extends TestCase { 2. // construtor padrão omitido 3. private Coisa coisa; 4. public void setUp(){ coisa = new Coisa("Bit"); } 5. public void testToString() { 6. assertEquals("<coisa>Bit</coisa>", 7. coisa.toString() ); 8. } 9. } 6/4/2012 Eduardo R Carvalho 17
  • 18. [TDD] – JUnit : Como Funciona ?  O TestRunner recebe uma subclasse de junit.framework.TestCase  Usa reflection para achar métodos  Para cada método testXXX(), executa:  o método setUp()  o próprio método testXXX()  o método tearDown()  O test case é instanciado para executar um método testXXX() de cada vez.  As alterações que ele fizer ao estado do objeto não afetarão os demais testes  Método pode terminar, falhar ou provocar exceção 6/4/2012 Eduardo R Carvalho 18
  • 19. [TDD] – JUnit : Exemplo de Test Case package junitdemo; import junit.framework.*; import java.io.IOException; public class TextUtilsTest extends TestCase { public TextUtilsTest(String name) { super(name); } public void testRemoveWhiteSpaces() throws IOException { String testString = "one, ( two | three+) , " + "(((four+ |t five)?n n, six? "; String expectedString = "one,(two|three+) " + ",(((four+|five)?,six? "; String results = TextUtils.removeWhiteSpaces(testString); assertEquals(expectedString, results); } } 6/4/2012 Eduardo R Carvalho 19
  • 20. [TDD] – JUnit : Fazendo o Teste Passar 1. package junitdemo; 2. import java.io.*; 3. public class TextUtils { 4. public static String removeWhiteSpaces(String text) throws ...{ 5. return "one,(two|three+),(((four+|five)?,six?"; 6. } 7. }  O teste passa... e daí? A solução está pronta? Não! Tem dados duplicados! Remova-os!  Escreva um novo teste que faça com que esta solução falhe, por exemplo:  String test2 = " a bnc ";  assertEquals("abc", TextUtils.removeWhiteSpaces(test2)); 6/4/2012 Eduardo R Carvalho 20
  • 21. [TDD] – JUnit : Fazendo o Teste Passar!! 1. package junitdemo; 2. import java.io.*; 3. public class TextUtils { 4. public static String removeWhiteSpaces(String text) 5. throws IOException { 6. StringReader reader = new StringReader(text); 7. StringBuffer buffer = new StringBuffer(text.length()); 8. int c; 9. while( (c = reader.read()) != -1) { 10. if (c ==' '||c =='n'||c =='r'|| c =='f'||c =='t') { 11. ; /* do nothing */ 12. } else { 13. buffer.append((char)c); 14. } 15. } 16. return buffer.toString(); 17. } 18.} 6/4/2012 Eduardo R Carvalho 21
  • 22. [TDD] – JUnit : TestSuite  Permite executar uma coleção de testes  Método addTest(TestSuite) adiciona um teste na lista  Padrão de codificação (usando reflection):  retornar um TestSuite em cada test-case: 1. public static TestSuite suite() { 2. return new TestSuite(SuaClasseTest.class); 3. }  Criar uma classe AllTests que combina as suites: 1. public class AllTests { 2. public static Test suite() { 3. TestSuite testSuite = new TestSuite("Roda tudo"); 4. testSuite.addTest(pacote.AllTests.suite()); 5. testSuite.addTest(MinhaClasseTest.suite()); 6. testSuite.addTest(SuaClasseTest.suite()); 7. return testSuite; 8. } 9. } 6/4/2012 Eduardo R Carvalho 22
  • 23. [TDD] – JUnit : Fixture  São os dados reutilizados por vários testes 1. public class AttributeEnumerationTest extends TestCase { 2. String testString; String[] testArray; 3. AttributeEnumeration testEnum; 4. public void setUp() { 5. testString = "(alpha|beta|gamma)"; 6. testArray = new String[]{"alpha", "beta", "gamma"}; 7. testEnum = new AttributeEnumeration(testArray); 8. } 9. public void testGetNames() { 10. assertEquals(testEnum.getNames(), testArray); 11. } 12. public void testToString() { 13. assertEquals(testEnum.toString(), testString); 14. } 15. ....  Se os mesmos dados são usados em vários testes, inicialize-os no setUp() e faça a faxina no tearDown() (se necessário)  Não perca tempo pensando nisto antes. Escreva seus testes. Depois, se achar que há duplicação, monte o fixture. 6/4/2012 Eduardo R Carvalho 23
  • 24. [TDD] – JUnit : Testando a Falha !!!  É tão importante testar o cenário de falha do seu codigo quanto o sucesso  Método fail() provoca uma falha  Use para verificar se exceções ocorrem quando se espera que elas ocorram  Exemplo: 1. public void testEntityNotFoundException() { 2. resetEntityTable(); // no entities to resolve! 3. try { 4. // Following method call must cause exception! 5. ParameterEntityTag tag = parser.resolveEntity("bogus"); 6. fail("Should have caused EntityNotFoundException!"); 7. } catch (EntityNotFoundException e) { 8. // success: exception occurred as expected 9. } 10.} 6/4/2012 Eduardo R Carvalho 24
  • 25. [TDD] – JUnit : Resumo  Para o JUnit :  Um teste é um método  Um caso de teste é uma classe contendo uma coleção de testes (métodos que possuem assertions)  Cada teste testa o comportamento de uma unidade de código do objeto testado (pode ser um método, mas pode haver vários testes para o mesmo método ou um teste para todo o objeto)  Fixtures são os dados usados em testes  TestSuite é uma composição de casos de teste  Pode-se agrupar vários casos de teste em uma suite  JUnit testa apenas a interface das classes  Mantenha os casos de teste no mesmo diretório que as classes testadas para ter acesso a métodos package-private  Use padrões de nomenclatura: ClasseTest, AllTests  Use o Ant para separar as classes em um release 6/4/2012 Eduardo R Carvalho 25
  • 26. [TDD] – JUnit : NetBeans 6.7.x  http://junit.netbeans.org/proposed-new-features.html 6/4/2012 Eduardo R Carvalho 26
  • 27. [TDD] – JUnit 4 : Simple Test 1. public class DAOTest { 2. @BeforeClass 3. public static void setUpClass() throws Exception { } 4. @AfterClass 5. public static void tearDownClass() throws Exception {} 6. @Before 7. public void setUp() {} 8. @After 9. public void tearDown() {} 10. @Test 11. public void testXXX() { } 12. @Test 13. public void testYYY() { } 14.} 6/4/2012 Eduardo R Carvalho 27
  • 28. [TDD] – JUnit 4 : TestSuite 1. @RunWith(Suite.class) 2. @Suite.SuiteClasses( {br.com.fastbuy.dao.ItemDAOTest.class , 3. br.com.fastbuy.framework.dao.DAOHelperTest.class }) 4. public class SampleTestSuite { 5. @BeforeClass 6. public static void setUpClass() throws Exception {} 7. @AfterClass 8. public static void tearDownClass() throws Exception {} 9. @Before 10. public void setUp() throws Exception {} 11. @After 12. public void tearDown() throws Exception {} 13.} 6/4/2012 Eduardo R Carvalho 28
  • 29. [TDD] – Best Practices  JUnit facilita bastante a criação e execução de testes, mas elaborar bons testes exige mais  O que testar? Como saber se testes estão completos?  "Teste tudo o que pode falhar" [2]  Métodos triviais (get/set) não precisam ser testados.  E se houver uma rotina de validação no método set?  É melhor ter testes a mais que testes a menos  Escreva testes curtos (quebre testes maiores)  Use assertNotNull() (reduz drasticamente erros de NullPointerException difíceis de encontrar)  Reescreva seu código para que fique mais fácil de testar 6/4/2012 Eduardo R Carvalho 29
  • 30. [TDD] – Best Practices  Escreva listas de tarefas (to-do list)  Comece pelas mais simples e deixe os testes "realistas” para o final  Requerimentos, use-cases, diagramas UML: rescreva os requerimentos em termos de testes  Dados  Use apenas dados suficientes (não teste 10 condições se três forem suficientes)  Bugs revelam testes  Achou um bug? Não conserte sem antes escrever um teste que o pegue (se você não o fizer, ele volta)!  Teste sempre! Não escreva uma linha de código sem antes escrever um teste! 6/4/2012 Eduardo R Carvalho 30
  • 31. [TDD] – Test-Driven Development  Desenvolvimento guiado pelos testes  Só escreva código novo se um teste falhar  Refatore até que o teste funcione  Alternância: "red/green/refactor" - nunca passe mais de 10 minutos sem que a barra do JUnit fique verde.  Técnicas  "Fake It Til You Make It": faça um teste rodar simplesmente fazendo método retornar constante  Triangulação: abstraia o código apenas quando houver dois ou mais testes que esperam respostas diferentes  Implementação óbvia: se operações são simples, implemente-as e faça que os testes rodem 6/4/2012 Eduardo R Carvalho 31
  • 32. [TDD] – Como Lidar com Testes Difíceis  Testes devem ser simples e suficientes  XP: design mais simples que resolva o problema; sempre pode-se escrever novos testes, quando necessário  Não complique  Não teste o que é responsabilidade de outra classe/método  Assuma que outras classes e métodos funcionam  Testes difíceis (ou que parecem difíceis)  Aplicações gráficas: eventos, layouts, threads  Objetos inacessíveis, métodos privativos, Singletons  Objetos que dependem de outros objetos  Objetos cujo estado varia devido a fatores imprevisíveis  Soluções  Alterar o design da aplicação para facilitar os testes  Simular dependências usando proxies e stubs 6/4/2012 Eduardo R Carvalho 32
  • 33. [TDD] – Resumo  Testar é tarefa essencial do desenvolvimento de software.  Testar unidades de código durante o desenvolvimento é uma prática que traz inúmeros benefícios  Menos tempo de depuração (muito, muito menos!)  Melhor qualidade do software  Segurança para alterar o código  Usando TDD, melhores estimativas de prazo  JUnit é uma ferramenta open-source que ajuda a implementar testes em projetos Java  TDD ou Test-Driven Development é uma técnica onde os testes são usados para guiar o desenvolvimento  Ajuda a focar o desenvolvimento em seus objetivos  Mock objects ou stubs podem ser usados para representar dependência e diminuir as responsabilidades de testes 6/4/2012 Eduardo R Carvalho 33