SlideShare uma empresa Scribd logo
Community       .com




        Introdução ao

        T             D      D



@CharlesFortes
Introdução ao
 Test-Driven Development
                                                                   .com


Cadastro de Usuário Cadastro de Usuário

    Cadastro de Usuário
          Cadastro de Usuário   Cadastro de Usuário
Cadastro de Usuário        Cadastro de Usuário
                                                 Cadastro de Usuário




    @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                          .com




        • Meu sistema pode ter no máximo 6 usuários;

        • Para poder cadastrar um usuário, deve-se estar logado no sistema e possuir
          permissão específica para isto;

        • Não podem haver dois logins iguais no sistema;

        • A senha deve ter no mínimo 6 caracteres e não pode ter mais de 50 caracteres;

        • Nome, Login e senha são campos obrigatórios;




   @CharlesFortes
Introdução ao
Test-Driven Development
                                      .com




    O que é



         Test-DrivenDevelopment   ?
   @CharlesFortes
Introdução ao
Test-Driven Development
                                                .com




                É Desenvolver Focado no Caso
                de Testes, nas Especificações



   @CharlesFortes
Introdução ao
Test-Driven Development
                                          .com




                    WTF?
          É Desenvolver Focado no Caso
          de Testes, nas Especificações

   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                   .com




       Casos de Testes são condições aos quais o
       software deverá ser submetido para que possa ser testado
       quanto ao seu funcionamento adequado e verificando se ele
       atende ao que foi solicitado




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                                                 .com



 Entende-se que nossa tela de cadastro                      de usuário está
 funcionando corretamente quando as seguintes condições estiverem
 satisfeitas:

                1. Logado no sistema e tendo permissão para cadastrar usuários, cadastrar um usuário  Incluir
                                                                   corretamente, exibir mensagem de sucesso
                            2. Tentar inserir 7 usuário  O sistema não pode permitir, retornando uma exceção
        3. Com 6 usuários cadastrados, remover um usuário e inserir um novo  Incluir corretamente, exibir
                                                                                        mensagem de sucesso
                  4. Tentar cadastrar um usuário sem estar logado no sistema  Não permitir, retornar exceção
     5. Estando logado no sistema, tentar cadastrar um usuário sem ter permissão  Não permitir, retornar
                                                                                                      exceção
                   6. Tentar cadastrar dois usuários com o mesmo nome  Não permitir, retornar uma exceção
                                              7. Remover um usuário e cadastrar um novo com o mesmo nome



   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                                             .com



 Entende-se que nossa tela de cadastro                   de usuário está
 funcionando corretamente quando as seguintes condições estiverem
 satisfeitas:

                    1. Tentar salvar um usuário com o login em branco  não permitir, retornar uma exceção
                  2. Tentar salvar um usuário com o nome em branco  não permitir, retornar uma exceção
                3. Tentar cadastrar um usuário com senha em branco  não permitir, retornar uma exceção
                          4. Tentar cadastrar uma senha com 5 dígitos  não permitir, retornar uma exceção
           5. Tentar cadastrar uma senha com 6 dígitos  Incluir corretamente, exibir mensagem de sucesso
           6. Tentar cadastrar uma senha de 50 dígitos  Incluir corretamente, exibir mensagem de sucesso
                        7. Tentar cadastrar uma senha com 51 dígitos  não permitir, retornar uma exceção




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                    .com




                    Para cada um dos casos de testes apresentados anteriormente,
                      deve existir um   teste de unidade que o valide de forma
                                                                        absoluta.




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                 .com




                                                   WTF?
                Para cada um dos casos de testes apresentados anteriormente,
                    deve existir um   teste de unidade que o valide de forma
                                                                     absoluta.




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                        .com




      Segundo a Wikipédia



             “Testes de unidade é um método pelo qual as   unidades individuais do
             código-fonte   são testados para   determinar       se eles estão aptos
             para o uso.

             A unidade é a menor parte testável de um aplicativo. Na programação
             procedural uma unidade   pode ser uma função               individual ou
             procedimento. Na programação orientada a objeto uma unidade           é
             normalmente um método.”




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                          .com




    Um     teste de unidade, é um teste automatizado que testa
                uma funcionalidade/aspecto/Requisito do sistema




                                          i.e. Testar a capacidade do sistema de se permitir
                                          cadastrar um usuário dentro dos moldes do
                                          negócio




   @CharlesFortes
Introdução ao
Test-Driven Development
                                  .com




                          Testa




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                           .com




   Teste de unidade deve ser executável independente dos dados




                                            O teste de unidade deve conter tudo

    o que o teste   necessita, ele não pode depender de estados gerados por
     outros testes, ele deve funcionar tão bem sendo executado sozinho como com todos os
                                                                                  demais




   Teste de unidade sempre será usado como teste de regressão



   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                     .com




                    Teste de unidade feito por fazer não tem valor




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                 .com




    Não altere ou exclua testes para ter um novo. O teste só deve mudar
    quando a funcionalidade mudar



    Teste de unidade deve testar   o Contrato, não teste nada além do contrato




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                   .com




        No modelo tradicional de desenvolvimento,   primeiro se cria o código, e
        depois se implementam os testes necessários para seu funcionamento

                                       Planeja >
                Requisitos                                       Teste de Aceite
                                       Planeja >
                    Análise                                 Teste de Sistema
                                       Planeja >
                       Desenho                           Teste de Integração
                                       Planeja >
                              Código                Teste de Unidade


   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                             .com




    O   problema deste modelo é que o teste muitas vezes se torna viciado,
    acaba sendo um teste criado para provar   que o código funciona, e não
    para validar se há ou não falhas




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                                                .com




   Pensando em como solucionar este problema, foi criado o                                                TDD




                                  Desenho reaproveitado de uma tirinha do site vidadeprogramador.com.br
                                  O texto apresentado não é o texto original da tirinha.




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                .com




   Pensando em como solucionar este problema, foi criado o   TDD
                                   Planeja >
 Requisitos                                                      Teste de Aceite

           Análise                 Planeja >                 Teste de Sistema


                    Desenho        Planeja >        Teste de Integração

                                     Planeja >
                Teste de Unidade                 Código



   @CharlesFortes
Introdução ao
Test-Driven Development
                                                    .com




   Quem diz: _“o importante é testar, não importa
   quando” esta errado, porque entende TDD como
   uma abordagem de testes.

   TDD utiliza testes para dirigir o desenvolvimento
                                         da aplicação



   @CharlesFortes
Introdução ao
Test-Driven Development
                                                            .com




       “Testes escritos antes do código da aplicação,
       antes de serem testes, são especificações”


                                           Giovanni Bassi




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                              .com




    Dentre as vantagens desta abordagem estão o fato de que se   desenvolve
    apenas o necessário e com          agilidade


           E a segurança de que a aplicação      continuará funcionando no
                futuro (evitando regressões), qualquer erro que apareça pode ser facilmente
                                       encontrado sem ficar debugando o código a esmo.




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                                                        .com




 O TDD     NÃO realiza todos os testes que o projeto precisa, ele apenas fornece
 uma    direção     para ser seguida durante o desenvolvimento que foca as
 especificações. Ele testa se o que foi solicitado funciona.




                     O TDD deve ser realizado pelo desenvolvedor, de forma que   guie
                     seu raciocínio quanto a   como e o que implementar


   @CharlesFortes
Introdução ao
Test-Driven Development
                                                    .com


01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100



                    Lets Test
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100


   @CharlesFortes
Introdução ao
 Test-Driven Development
                                                                .com


Pensando em como solucionar este problema, foi criado o   TDD




    @CharlesFortes
Introdução ao
Test-Driven Development        Pré-Condição                                         .com




 Deve ser preparado o   ambiente de testes, suas pré-condições

                             Podem ser usados MOCKs, fakes, querys, a execução de
                             outro teste (ou outros), etc...




   @CharlesFortes
Introdução ao
Test-Driven Development       Pré-Condição                                           .com


                    O Visual Studio usa a marcação TestInitialize em um método para
                                                    executar algo que prepara o ambiente.




   @CharlesFortes
Introdução ao
  Domain-Driven Design
                                                                                      .com




u Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifiq




     @CharlesFortes
Introdução ao
Domain-Driven Design
                       .com




   @CharlesFortes
Introdução ao
  Domain-Driven Design
                                                                                              .com




e Verifique       se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore E




     @CharlesFortes
Introdução ao
Domain-Driven Design
                       .com




   @CharlesFortes
Introdução ao
  Domain-Driven Design
                                                                                       .com




que se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva




     @CharlesFortes
Introdução ao
Domain-Driven Design
                       .com




   @CharlesFortes
Introdução ao
  Domain-Driven Design
                                                                                      .com




que se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva




     @CharlesFortes
Introdução ao
Domain-Driven Design
                       .com




   @CharlesFortes
Introdução ao
  Domain-Driven Design
                                                                                  .com




que se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Es




     @CharlesFortes
Introdução ao
Test-Driven Development
                          .com




                    VB6




   @CharlesFortes
Introdução ao
Test-Driven Development
                                                    .com


01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100



                    Lets Code
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100
01000001111010101011111100000111001101101010010101010
00001110011011010100101010100100000111101000000011100


   @CharlesFortes
Introdução ao
Test-Driven Development
                                                               .com




                    http://bugbang.com.br

                    http://artofunittesting.com

                    http://www.agiledata.org/essays/tdd.html




   @CharlesFortes
Introdução ao
Test-Driven Development



                @CharlesFortes

                br.linkedin.com/in/charlesfortes

                pangeanet.org/profile/charlesfortes

Mais conteúdo relacionado

PPTX
Curso treinamento automação de testes com selenium
PDF
Automação de testes funcionais com selenium webdriver
PPTX
Testes Unitários
PDF
Selenium
PPTX
Qualidade de Código
PDF
Selenium Workshop
PDF
Selenium: visão geral
PPTX
Introdução a testes de software utilizando selenium
Curso treinamento automação de testes com selenium
Automação de testes funcionais com selenium webdriver
Testes Unitários
Selenium
Qualidade de Código
Selenium Workshop
Selenium: visão geral
Introdução a testes de software utilizando selenium

Mais procurados (20)

PPTX
Automatização de testes funcionais com selenium etapa 1
PDF
Teste de aplicações web com selenium
PPT
Selenium ide apresentação
PPT
Automacão de Testes Funcionais com Selenium
PDF
Implementando Testes Unitários em Java - Manoel Pimentel
PDF
J unit xp
PPT
Treinamento Testes Unitários - parte 1
PPT
Curso Básico de Selenium
PPTX
Testes Unitários
PPTX
Hands On Selenium
PDF
TDC 2011 - E no sétimo dia ele escreveu testes
PPTX
Apresentacao Testes de Unidade
PDF
Demoiselle Behave - Parte 1
PDF
Aexo TI - Boas práticas de testes tdd
PDF
Demoiselle Behave - Parte 3
PPTX
Selenium ide
PDF
TDC 2011 Trilha de Teste
PPTX
Testes Unitários/Integrados
PDF
JUnit - Selenium
Automatização de testes funcionais com selenium etapa 1
Teste de aplicações web com selenium
Selenium ide apresentação
Automacão de Testes Funcionais com Selenium
Implementando Testes Unitários em Java - Manoel Pimentel
J unit xp
Treinamento Testes Unitários - parte 1
Curso Básico de Selenium
Testes Unitários
Hands On Selenium
TDC 2011 - E no sétimo dia ele escreveu testes
Apresentacao Testes de Unidade
Demoiselle Behave - Parte 1
Aexo TI - Boas práticas de testes tdd
Demoiselle Behave - Parte 3
Selenium ide
TDC 2011 Trilha de Teste
Testes Unitários/Integrados
JUnit - Selenium
Anúncio

Destaque (20)

PPTX
MVC Pattern
PPTX
Medição de esforço - Como combrar meus freelas
PPTX
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
PPTX
Pdm -final
PPTX
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
PPTX
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
PPTX
Introdução ao DDD
PPSX
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
PPTX
Sistemas Operacionais - Aula 5 - Concorrência
PPTX
Apresentação prof e materia
PPTX
Metodologias ageis
PPTX
Desenvolvimento de software seguro
PPT
Lambda Expressions
PPTX
Conceitos – Do Homem à Máquina
PPTX
PE-I - Apresentação Professor
PPTX
Sistemas Operacionais - Aula 7 - Processos e Threads
PPTX
PE2 - Funções e Structs
PPTX
Programação Estruturada 2 - Revisão C
PPTX
Programação Genetica
PPTX
IA - Apresentação do Professor
MVC Pattern
Medição de esforço - Como combrar meus freelas
Pitagoras - Introdução a Programação Orientada a Objetos - Conceitos
Pdm -final
Pitagoras - Introdução a Programação Orientada a Objetos - Revisão Final
Pitagoras - Introdução a Programação Orientada a Objetos - Encapsulamento, Ac...
Introdução ao DDD
Introdução a Desenvolvimento de Jogos HTML 5 para Windows 8 com Html5Quintus
Sistemas Operacionais - Aula 5 - Concorrência
Apresentação prof e materia
Metodologias ageis
Desenvolvimento de software seguro
Lambda Expressions
Conceitos – Do Homem à Máquina
PE-I - Apresentação Professor
Sistemas Operacionais - Aula 7 - Processos e Threads
PE2 - Funções e Structs
Programação Estruturada 2 - Revisão C
Programação Genetica
IA - Apresentação do Professor
Anúncio

Semelhante a Introdução ao TDD (20)

PDF
Introdução à Engenharia de Testes de Software
PPTX
Teste agora! Não deixe para depois!
PPTX
1 2 3 - Testando - Automatizando os testes de software
PPTX
Palestra Teste de Software: princípios, ferramentas e carreira
PPTX
Desenvolvimento Dirigido por Testes
PDF
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
PPT
Testes de Software
PDF
A importância dos testes unitários: do código legado ao pipeline de testes em...
PDF
XII Café e CODE - Provocações do Mestre
PPTX
TDD no Community Launch 2010 - Christian Cunha
PPTX
Testes unitários e Mocks
PPTX
Gerenciamento da Qualidade de Software 4.pptx
PDF
Palestra TDD Javou! #08 2016
PDF
Ctai Teste De Software Aula 1
KEY
Qualidade no desenvolvimento de Software com TDD e PHPUnit
PDF
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
PPT
Testes De Software - Uma Visão Geral
PPT
O que é Teste de Software?
PDF
Mini curso de testes ágeis
PPTX
[Iniciante] - Testes Unitários com WP-UNIT no Wordpress
Introdução à Engenharia de Testes de Software
Teste agora! Não deixe para depois!
1 2 3 - Testando - Automatizando os testes de software
Palestra Teste de Software: princípios, ferramentas e carreira
Desenvolvimento Dirigido por Testes
13º É dia de Java: Automação de Testes Funcionais com Selenium Web driver
Testes de Software
A importância dos testes unitários: do código legado ao pipeline de testes em...
XII Café e CODE - Provocações do Mestre
TDD no Community Launch 2010 - Christian Cunha
Testes unitários e Mocks
Gerenciamento da Qualidade de Software 4.pptx
Palestra TDD Javou! #08 2016
Ctai Teste De Software Aula 1
Qualidade no desenvolvimento de Software com TDD e PHPUnit
Fundamentos de Teste de Software - Dev in PF. por Aline Zanin
Testes De Software - Uma Visão Geral
O que é Teste de Software?
Mini curso de testes ágeis
[Iniciante] - Testes Unitários com WP-UNIT no Wordpress

Mais de Charles Fortes (16)

PPTX
Acesso a banco de dados com entity framework
PPTX
inteligência artificial - fuzzy - mineração
PPTX
Programação Estruturada 2 - Apresentação do Professor
PPTX
IA - Introdução Inteligência Artificial
PPTX
PE1 - Comandos de Decisão
PPTX
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
PPTX
LPC - aula 1 - Introdução .NET
PPTX
LPC - Apresentação do Professor
PPTX
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
PPTX
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
PPTX
Economia global: França e Inglaterra
PPTX
Sistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
PPTX
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
PPTX
Sistemas Operacionais - Aula 3 - Hardware e Software
PPTX
Sistemas Operacionais - Aula 2 - Visão Geral de Sistemas Operacionais
PPTX
Sistemas Operacionais - Aula 1 - História e Introdução a SO
Acesso a banco de dados com entity framework
inteligência artificial - fuzzy - mineração
Programação Estruturada 2 - Apresentação do Professor
IA - Introdução Inteligência Artificial
PE1 - Comandos de Decisão
PE1 - Revisão e Matéria sobre Laços (FOR, WHILE, DO-WHILE)
LPC - aula 1 - Introdução .NET
LPC - Apresentação do Professor
Sistemas Operacionais - Aula 9 - Gerencia de Recursos
Sistemas Operacionais - Aula 8 - Sincronização e Comunicação entre Processos
Economia global: França e Inglaterra
Sistemas Operacionais - Aula 6 - Estrutura do Sistema Operacional
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 3 - Hardware e Software
Sistemas Operacionais - Aula 2 - Visão Geral de Sistemas Operacionais
Sistemas Operacionais - Aula 1 - História e Introdução a SO

Último (20)

PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Curso de Java 9 - (Threads) Multitarefas.pptx
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
PPTX
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
PPTX
Aula sobre banco de dados com firebase db
PPTX
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Émile Durkheim slide elaborado muito bom
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
COBITxITIL-Entenda as diferença em uso governança TI
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Custos e liquidação no SAP Transportation Management, TM130 Col18
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Curso de Java 9 - (Threads) Multitarefas.pptx
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Curso de Java 12 - (JDBC, Transation, Commit e Rollback).pptx
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
Aula sobre banco de dados com firebase db
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Émile Durkheim slide elaborado muito bom
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
Curso de Java 10 - (IO Manipulação de Arquivos).pptx

Introdução ao TDD

  • 1. Community .com Introdução ao T D D @CharlesFortes
  • 2. Introdução ao Test-Driven Development .com Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário Cadastro de Usuário @CharlesFortes
  • 3. Introdução ao Test-Driven Development .com • Meu sistema pode ter no máximo 6 usuários; • Para poder cadastrar um usuário, deve-se estar logado no sistema e possuir permissão específica para isto; • Não podem haver dois logins iguais no sistema; • A senha deve ter no mínimo 6 caracteres e não pode ter mais de 50 caracteres; • Nome, Login e senha são campos obrigatórios; @CharlesFortes
  • 4. Introdução ao Test-Driven Development .com O que é Test-DrivenDevelopment ? @CharlesFortes
  • 5. Introdução ao Test-Driven Development .com É Desenvolver Focado no Caso de Testes, nas Especificações @CharlesFortes
  • 6. Introdução ao Test-Driven Development .com WTF? É Desenvolver Focado no Caso de Testes, nas Especificações @CharlesFortes
  • 7. Introdução ao Test-Driven Development .com Casos de Testes são condições aos quais o software deverá ser submetido para que possa ser testado quanto ao seu funcionamento adequado e verificando se ele atende ao que foi solicitado @CharlesFortes
  • 8. Introdução ao Test-Driven Development .com Entende-se que nossa tela de cadastro de usuário está funcionando corretamente quando as seguintes condições estiverem satisfeitas: 1. Logado no sistema e tendo permissão para cadastrar usuários, cadastrar um usuário  Incluir corretamente, exibir mensagem de sucesso 2. Tentar inserir 7 usuário  O sistema não pode permitir, retornando uma exceção 3. Com 6 usuários cadastrados, remover um usuário e inserir um novo  Incluir corretamente, exibir mensagem de sucesso 4. Tentar cadastrar um usuário sem estar logado no sistema  Não permitir, retornar exceção 5. Estando logado no sistema, tentar cadastrar um usuário sem ter permissão  Não permitir, retornar exceção 6. Tentar cadastrar dois usuários com o mesmo nome  Não permitir, retornar uma exceção 7. Remover um usuário e cadastrar um novo com o mesmo nome @CharlesFortes
  • 9. Introdução ao Test-Driven Development .com Entende-se que nossa tela de cadastro de usuário está funcionando corretamente quando as seguintes condições estiverem satisfeitas: 1. Tentar salvar um usuário com o login em branco  não permitir, retornar uma exceção 2. Tentar salvar um usuário com o nome em branco  não permitir, retornar uma exceção 3. Tentar cadastrar um usuário com senha em branco  não permitir, retornar uma exceção 4. Tentar cadastrar uma senha com 5 dígitos  não permitir, retornar uma exceção 5. Tentar cadastrar uma senha com 6 dígitos  Incluir corretamente, exibir mensagem de sucesso 6. Tentar cadastrar uma senha de 50 dígitos  Incluir corretamente, exibir mensagem de sucesso 7. Tentar cadastrar uma senha com 51 dígitos  não permitir, retornar uma exceção @CharlesFortes
  • 10. Introdução ao Test-Driven Development .com Para cada um dos casos de testes apresentados anteriormente, deve existir um teste de unidade que o valide de forma absoluta. @CharlesFortes
  • 11. Introdução ao Test-Driven Development .com WTF? Para cada um dos casos de testes apresentados anteriormente, deve existir um teste de unidade que o valide de forma absoluta. @CharlesFortes
  • 12. Introdução ao Test-Driven Development .com Segundo a Wikipédia “Testes de unidade é um método pelo qual as unidades individuais do código-fonte são testados para determinar se eles estão aptos para o uso. A unidade é a menor parte testável de um aplicativo. Na programação procedural uma unidade pode ser uma função individual ou procedimento. Na programação orientada a objeto uma unidade é normalmente um método.” @CharlesFortes
  • 13. Introdução ao Test-Driven Development .com Um teste de unidade, é um teste automatizado que testa uma funcionalidade/aspecto/Requisito do sistema i.e. Testar a capacidade do sistema de se permitir cadastrar um usuário dentro dos moldes do negócio @CharlesFortes
  • 14. Introdução ao Test-Driven Development .com Testa @CharlesFortes
  • 15. Introdução ao Test-Driven Development .com Teste de unidade deve ser executável independente dos dados O teste de unidade deve conter tudo o que o teste necessita, ele não pode depender de estados gerados por outros testes, ele deve funcionar tão bem sendo executado sozinho como com todos os demais Teste de unidade sempre será usado como teste de regressão @CharlesFortes
  • 16. Introdução ao Test-Driven Development .com Teste de unidade feito por fazer não tem valor @CharlesFortes
  • 17. Introdução ao Test-Driven Development .com Não altere ou exclua testes para ter um novo. O teste só deve mudar quando a funcionalidade mudar Teste de unidade deve testar o Contrato, não teste nada além do contrato @CharlesFortes
  • 18. Introdução ao Test-Driven Development .com No modelo tradicional de desenvolvimento, primeiro se cria o código, e depois se implementam os testes necessários para seu funcionamento Planeja > Requisitos Teste de Aceite Planeja > Análise Teste de Sistema Planeja > Desenho Teste de Integração Planeja > Código Teste de Unidade @CharlesFortes
  • 19. Introdução ao Test-Driven Development .com O problema deste modelo é que o teste muitas vezes se torna viciado, acaba sendo um teste criado para provar que o código funciona, e não para validar se há ou não falhas @CharlesFortes
  • 20. Introdução ao Test-Driven Development .com Pensando em como solucionar este problema, foi criado o TDD Desenho reaproveitado de uma tirinha do site vidadeprogramador.com.br O texto apresentado não é o texto original da tirinha. @CharlesFortes
  • 21. Introdução ao Test-Driven Development .com Pensando em como solucionar este problema, foi criado o TDD Planeja > Requisitos Teste de Aceite Análise Planeja > Teste de Sistema Desenho Planeja > Teste de Integração Planeja > Teste de Unidade Código @CharlesFortes
  • 22. Introdução ao Test-Driven Development .com Quem diz: _“o importante é testar, não importa quando” esta errado, porque entende TDD como uma abordagem de testes. TDD utiliza testes para dirigir o desenvolvimento da aplicação @CharlesFortes
  • 23. Introdução ao Test-Driven Development .com “Testes escritos antes do código da aplicação, antes de serem testes, são especificações” Giovanni Bassi @CharlesFortes
  • 24. Introdução ao Test-Driven Development .com Dentre as vantagens desta abordagem estão o fato de que se desenvolve apenas o necessário e com agilidade E a segurança de que a aplicação continuará funcionando no futuro (evitando regressões), qualquer erro que apareça pode ser facilmente encontrado sem ficar debugando o código a esmo. @CharlesFortes
  • 25. Introdução ao Test-Driven Development .com O TDD NÃO realiza todos os testes que o projeto precisa, ele apenas fornece uma direção para ser seguida durante o desenvolvimento que foca as especificações. Ele testa se o que foi solicitado funciona. O TDD deve ser realizado pelo desenvolvedor, de forma que guie seu raciocínio quanto a como e o que implementar @CharlesFortes
  • 26. Introdução ao Test-Driven Development .com 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 Lets Test 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 @CharlesFortes
  • 27. Introdução ao Test-Driven Development .com Pensando em como solucionar este problema, foi criado o TDD @CharlesFortes
  • 28. Introdução ao Test-Driven Development Pré-Condição .com Deve ser preparado o ambiente de testes, suas pré-condições Podem ser usados MOCKs, fakes, querys, a execução de outro teste (ou outros), etc... @CharlesFortes
  • 29. Introdução ao Test-Driven Development Pré-Condição .com O Visual Studio usa a marcação TestInitialize em um método para executar algo que prepara o ambiente. @CharlesFortes
  • 30. Introdução ao Domain-Driven Design .com u Escreva o Código para que ele passe Rode todos os testes Refatore Escreva o Teste Verifiq @CharlesFortes
  • 32. Introdução ao Domain-Driven Design .com e Verifique se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore E @CharlesFortes
  • 34. Introdução ao Domain-Driven Design .com que se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva @CharlesFortes
  • 36. Introdução ao Domain-Driven Design .com que se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Escreva @CharlesFortes
  • 38. Introdução ao Domain-Driven Design .com que se ele falhou Escreva o Código para que ele passe Rode todos os testes Refatore Es @CharlesFortes
  • 39. Introdução ao Test-Driven Development .com VB6 @CharlesFortes
  • 40. Introdução ao Test-Driven Development .com 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 Lets Code 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 01000001111010101011111100000111001101101010010101010 00001110011011010100101010100100000111101000000011100 @CharlesFortes
  • 41. Introdução ao Test-Driven Development .com http://bugbang.com.br http://artofunittesting.com http://www.agiledata.org/essays/tdd.html @CharlesFortes
  • 42. Introdução ao Test-Driven Development @CharlesFortes br.linkedin.com/in/charlesfortes pangeanet.org/profile/charlesfortes