SlideShare uma empresa Scribd logo
1 de 30
Baixar para ler offline
TEST-DRIVEN DEVELOPMENT
   Corrigindo o problema certo da forma correta
HÉLIO MEDEIROS
                       Analista de Sistemas
                         SINFO - UFRN




Blog: http://heliomedeiros.com
Email: helio.cabralmedeiros@gmail.com
NOSSA AULA

• Parte   1 - Resolvendo o problema correto de forma correta

• Parte   2 - Qualidade em foco com TDD

• Parte   3 - Construindo da forma correta

• Parte   4 - Vermelho-Verde-Refatore

• Parte   5 - Construindo a coisa correta
1   Resolvendo o problema
    correto da forma correta
TDD

“Apenas escreva algum código quando este for para concertar uma falha de
                         teste.” -Lasse Koskela




                                                     Isso é TDD em uma frase, primeiro escreva
                                                     um teste, para só então escrever o código
                                                     necessário para que o teste passe.




  http://www.flickr.com/photos/kenstein/2948639488/
O DESAFIO

O objetivo do desenvolvimento de software é prover soluções às operações
e aos negócios das organizações, de forma que elas possam aumentar sua
eficiência reduzindo custos entre outros.


Mundo a fora existem excelentes empresas
que durante décadas amadureceram seus
processos e produzem muito código, mas
não conseguem mantê-los de forma
adequada com evoluções repetíveis.


                                                http://www.flickr.com/photos/davidcotter/3170716354/
PROBLEMA COM CÓDIGO ?

     Mesmo durante décadas de avanços na industria de
     software a qualidade do código continua sendo um
     problema.


“Defeitos criam custos indesejados fazendo com que os sistemas
  fiquem instáveis, imprevisíveis ou inutilizáveis” -Lasse Koskela
DILEMA DOS DEFEITOS

    Defeitos reduzem o valor dos softwares produzidos, em
    vários casos criando mais estragos do que adicionando
    valor . Naturalmente a forma encontrada para lidar com os
    defeitos foi a execução de testes.

“Verificamos como o software funciona e tentamos quebrá-lo de
              alguma maneira.” -Lasse Koskela
PESADELO DE MANUTENÇÃO

    Um código pobre não possuem uma boa modelagem nem
    um balanceamento entre responsabilidades, podendo em
    muitos casos ter toneladas de trechos duplicados, e isso
    pode ser um pesadelo para manter.

“Eu não vou mexer nisto. Isto pode nunca ter fim, e eu não farei
 a menor idéia do que pode ser quebrado durante o caminho”
PROBLEMA COM REAIS
      NECESSIDADES?
  Mesmo com a crescente preocupação e evolução da
  engenharia de requisitos, ainda existe muita mudança e mal
  entendimento ocorrendo em projetos pelo mundo, clientes
  com seus produtos inacabados ou impróprios.


“Requisitos mudam e suas validações também devem mudar,
 porem o entendimento sobre as mudanças é mais claro ao
     cliente e é por isso utilizamos testes de aceitação”
A SOLUÇÃO

TDD nos auxilia de duas formas quando pensamos em como corrigir estes
dois problemas, dos códigos pobres e pouco evolutivos e dos sistemas que
não refletem as reais necessidades, por meio de TESTES.




                    Qualidade externa

                     ATDD               Qualidade interna

                                           TDD
2   Qualidade em foco com
    TDD
TIPOS DE QUALIDADE

 Qualidade é definida perante o mercado atualmente de
 várias maneiras:

•Qualidade como resultante da quantidade de defeitos
 encontrados após a entrega, em produção;

•Qualidade como resultante da satisfação dos usuários em
 relação a quantidade de preenchimento de expectativas e
 necessidades.
CONTRIBUIÇÃO

TDD contribui para aumentar a qualidade do software em todos estes
aspectos com sua natureza orientada a qualidade e a boa modelagem.


                                                     Um dos grandes responsáveis pelos defeitos
                                                     encontrados em produção é a não
                                                     existência de uma verificação constante e
                                                     imparcial em todo o caminho da realização
                                                     de uma ação no nosso sistema. TDD nos
                                                     previne sobre impactos sofridos na
                                                     execução de ações do sistema após
                                                     alterações de código.
   http://www.flickr.com/photos/radiofree/14243157/
CONTRIBUIÇÃO
TDD nos auxilia reduzindo o tempo necessários para corrigir os defeitos.
Como se sabe a corrigir problemas o quanto antes custa menos, TDD nos
auxilia a corrigi-los enquanto eles são introduzidos em nosso sistema.



  “Realizando testes antes em pequenos passos nos temos como garantir
   que não será necessário a utilização de modo debug. “ - Lasse Koskela
3   Construindo da forma
    correta
CRESCENDO

“Apenas escreva algum código quando este for para concertar uma falha de
                         teste.” -Lasse Koskela




                                                     Para o TDD primeiro devemos escrever um
                                                     teste, para só então escrever o código
                                                     necessário para que o teste passe. Isto
                                                     parece ou soa estranho?


  http://www.flickr.com/photos/kenstein/2948639488/
RE-APRENDENDO
Durante muitos anos aprendemos que a forma correta para se desenvolver
um sistema maduro e resistente deveríamos iniciar com uma solida
modelagem, em seguida implementá-la e por fim testar para encontrar os
defeitos que inserimos durante a codificação.

 Ciclo tradicional de desenvolvimento

        Modele                          Codifique                        Teste

                                               Ciclo de desenvolvimento orientado a testes

          Teste                         Codifique                       Modele
TESTE-CODIFIQUE-REFATORE
TDD inverte este ciclo. Mas isto soa um pouco estranho pois, a modelagem
como é feita no TDD ao final não se assemelha tanto com a aprendida
anteriomente; a modelagem no TDD foca no sentido de transformação do
modelo atual em um modelo melhor, por isso recebe o nome de refatoração.

 Ciclo tradicional de desenvolvimento

        Modele                          Codifique                        Teste

                                               Ciclo de desenvolvimento orientado a testes

          Teste                         Codifique                     REFATORE
4   Vermelho-Verde-Refatore
VERMELHO
Vermelho-verde-refatore é um mnemônico alternativo para o ciclo
construtivo do TDD.

Quando iniciamos escrevendo um teste, ele normalmente falha, pois ainda
não implementamos uma solução para o mesmo e isso é representado em
alguns ambientes de desenvolvimento na forma de uma barra vermelha.



                                         Ciclo de desenvolvimento orientado a testes

        Teste
VERMELHO-VERDE
O nosso segundo passo é sempre fazê-lo passar e assim implementamos as
funcionalidades que faltam para tal e recebemos em alguns ambientes de
desenvolvimento a representação de que tudo está correto por uma barra
verde.




                                        Ciclo de desenvolvimento orientado a testes

        Teste                  Codifique
VERMELHO-VERDE-REFATORE
O nosso terceiro e último estágio no ciclo de construção do TDD é
refatorar, para que nosso código e modelo fique cada vez melhor sem
duplicidade, mais simples de evoluir e entender. Caso não criemos nenhum
erro o ambiente continuará apresentando a barra verde.

Vermelho, Verde, Verde. Vermelho, Verde, Refatore.



                                           Ciclo de desenvolvimento orientado a testes

        Teste                     Codifique                       REFATORE
1º - ESCREVA UM TESTE
Primeiro escreva um teste que não passe. Quando escrevemos no primeiro
passo de nosso ciclo um teste, nos estamos realmente fazendo mais do que
apenas escrevendo-o, nos estamos tomando decisões, definindo as interfaces
de acesso as funcionalidades que iremos testar. Escrevendo testes antes, nós
nos forçamos a pensar em como queremos que nosso código seja utilizado.



“Pensar em como nosso código será usado é como montar um
 quebra-cabeça. É difícil encontrar uma peça que você precisa
  se você não sabe a que outras você vai precisar conecta-la.”
                          -Lasse Koskela




                                                                 http://www.flickr.com/photos/mr_t_in_dc/3367120498/
1º - ESCREVA UM TESTE
Quando escrevemos no primeiro passo de nosso ciclo um teste, nos não
temos nenhuma escolha ao não ser fazer um código testável. A princípio não
existe código escrito que não seja testável. A modelagem do sistema não
trata apenas de estrutura; mas também sobre trabalhar as necessidade do
cliente, objetivando por meio de um questionamento explicito, sem
ambigüidades a real necessidade.

  “Sem testes primeiro você estará desperdiçando dinheiro
    desenvolvendo funcionalidades que não são realmente
 necessárias, assim como desperdiçando dinheiro tendo que
   lidar com correções sobre partes de código modelados
            desnecessariamente .” -Lasse Koskela



                                                            http://www.flickr.com/photos/mr_t_in_dc/3367120498/
2º - ESCREVA SÓ O CÓDIGO
         NECESSÁRIO
O segundo passo do ciclo é escrever apenas a quantidade suficiente de
código necessária para fazer o teste passar. Mas porque só a quantidade
mínima? O teste que escrevemos é um teste que falha, apontando um ponto
entre o que o software faz e o que ele precisa fazer. É um ponto simples e
curto que deve ser fechado em no máximo alguns minutos.



“Você não está apenas escrevendo um código qualquer, você
 está satisfazendo um requisito explicito, sem ambigüidades
expresso pelo teste. Você está progredindo e continuamente
      apresentando provas sobre isso .” -Lasse Koskela




                                                              http://www.flickr.com/photos/djpd/553827617/
3º - REFATORE
O passo final do ciclo é a refatoração, é aqui que você deve finalmente dar
um passo para trás e olhar a modelagem, analisando maneiras de fazê-lo
melhor.




“Você não está apenas escrevendo um código qualquer, você
 está satisfazendo um requisito explicito, sem ambigüidades
expresso pelo teste. Você está progredindo e continuamente
      apresentando provas sobre isso .” -Lasse Koskela




                                                              http://www.flickr.com/photos/thorinside/157777439/
5   Construindo a coisa
    correta
ACCEPTANCE TDD
Acceptance TDD como o nome diz sugere alguma semelhança com o TDD
“comum”. Acceptance tests indicam aceitação de requisitos ou funcionalidades
enquanto a sua completeza.




 “Quando todos os testes de aceitação de um requisitos ou
     funcionalidade passam você sabe que o concluiu.”
                      -Lasse Koskela




                                                            http://www.flickr.com/photos/atelier_us/2659072696/
COLABORAÇÃO
Existem atualmente várias técnicas para se expressar requisitos que vão de
casos de uso, passando por user stories e ATDD está desacoplada de todas, o
objetivo principal é gerenciar requisitos atingindo a máxima colaboração
entre equipe de desenvolvimento e o cliente.



                                                          “A idéia fundamental para atingir o maior nível de
                                                    produtividade para todo o time é encorajar feedbacks rápidos
                                                     e comunicação efetiva face-a-face sobre software funcional
                                                     concreto ao invés da passagem de planos, especificação de
                                                    requisitos e reports de bugs entre clientes, testers, analistas de
                                                                     negócios e desenvolvedores..”
                                                                             -Lasse Koskela

http://www.flickr.com/photos/ivanwalsh/3646342408/

Mais conteúdo relacionado

Mais procurados

Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Claudia Melo
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme ProgrammingDenis L Presciliano
 
Extreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumExtreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumRafael Souza
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a ModelagemRodrigo Branas
 
Extreme programming (xp) - Resumo
Extreme programming (xp) - ResumoExtreme programming (xp) - Resumo
Extreme programming (xp) - ResumoDaniel Brandão
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareDaniel Cukier
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme ProgrammingMilfont Consulting
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorMarcos Pereira
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme ProgrammingRodrigo Branas
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasKleitor Franklint Correa Araujo
 
Aula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREAula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREErnesto Bedrikow
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalhoRuan Pozzebon
 
Devops - A cultura ágil voltada à infra-estrutura
Devops - A cultura ágil voltada à infra-estruturaDevops - A cultura ágil voltada à infra-estrutura
Devops - A cultura ágil voltada à infra-estruturaFernando Celarino
 
Desenvolvimento de Software com Extreme Programming (XP)
Desenvolvimento de Software com Extreme Programming (XP)Desenvolvimento de Software com Extreme Programming (XP)
Desenvolvimento de Software com Extreme Programming (XP)Fernando Kenji Kamei
 

Mais procurados (20)

Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)Introdução à Programação Extrema (Extreme Programming - XP)
Introdução à Programação Extrema (Extreme Programming - XP)
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme Programming
 
Extreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumExtreme Programming (XP) e Scrum
Extreme Programming (XP) e Scrum
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Introdução a Modelagem
Introdução a ModelagemIntrodução a Modelagem
Introdução a Modelagem
 
Extreme programming (xp) - Resumo
Extreme programming (xp) - ResumoExtreme programming (xp) - Resumo
Extreme programming (xp) - Resumo
 
Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento Metodologias ágeis de desenvolvimento
Metodologias ágeis de desenvolvimento
 
Aula - Metodologias Ágeis
Aula - Metodologias ÁgeisAula - Metodologias Ágeis
Aula - Metodologias Ágeis
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Introdução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de SoftwareIntrodução a Métodos Ágeis de Desenvolvimento de Software
Introdução a Métodos Ágeis de Desenvolvimento de Software
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme Programming
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de Software
 
A Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao SêniorA Carreira de Desenvolvedor: do Jr ao Sênior
A Carreira de Desenvolvedor: do Jr ao Sênior
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Automação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégiasAutomação de testes - uma introdução sobre estratégias
Automação de testes - uma introdução sobre estratégias
 
Aula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWAREAula 1- ENGENHARIA DE SOFTWARE
Aula 1- ENGENHARIA DE SOFTWARE
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalho
 
eXtreme Programming (XP)
eXtreme Programming (XP)eXtreme Programming (XP)
eXtreme Programming (XP)
 
Devops - A cultura ágil voltada à infra-estrutura
Devops - A cultura ágil voltada à infra-estruturaDevops - A cultura ágil voltada à infra-estrutura
Devops - A cultura ágil voltada à infra-estrutura
 
Desenvolvimento de Software com Extreme Programming (XP)
Desenvolvimento de Software com Extreme Programming (XP)Desenvolvimento de Software com Extreme Programming (XP)
Desenvolvimento de Software com Extreme Programming (XP)
 

Semelhante a UnP Eng. Software - Aula 27

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 softwareDextra 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ândiaRogerio Fontes
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingPedro Pereira Martins
 
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 testeUniversidade Tiradentes
 
XP Programming
XP ProgrammingXP Programming
XP ProgrammingCJR, UnB
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Cristiano Schwening
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Maurício Aniche
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaRafael Ponte
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do MantraDionatan default
 

Semelhante a UnP Eng. Software - Aula 27 (20)

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
 
Tdd x testes unidades
Tdd x testes unidadesTdd x testes unidades
Tdd x testes unidades
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Teste automatizados e tdd
Teste automatizados e tddTeste automatizados e tdd
Teste automatizados e tdd
 
Introdução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCastingIntrodução ao TDD nas soluções Global AppCasting
Introdução ao TDD nas soluções Global AppCasting
 
Métodos Ágeis - Aula02
Métodos Ágeis - Aula02Métodos Ágeis - Aula02
Métodos Ágeis - Aula02
 
Teste Driven Development
Teste Driven DevelopmentTeste Driven Development
Teste Driven Development
 
TDD
TDDTDD
TDD
 
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
 
Instituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitáriosInstituto Stela S&T#001, Projeto de software com testes unitários
Instituto Stela S&T#001, Projeto de software com testes unitários
 
XP Programming
XP ProgrammingXP Programming
XP Programming
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?
 
Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?Test-Driven Development serve pra mim?
Test-Driven Development serve pra mim?
 
Subm_SamuelPereira_FINAL
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Subm_SamuelPereira_FINAL
 
Aula 4- Engenharia de Software
Aula 4- Engenharia de SoftwareAula 4- Engenharia de Software
Aula 4- Engenharia de Software
 
Greenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresaGreenbar - Testes automatizados na sua empresa
Greenbar - Testes automatizados na sua empresa
 
TDD: A Essência do Mantra
TDD: A Essência do MantraTDD: A Essência do Mantra
TDD: A Essência do Mantra
 
Qualidade e Testes de Software
Qualidade e Testes de SoftwareQualidade e Testes de Software
Qualidade e Testes de Software
 
Bdd&tdd
Bdd&tddBdd&tdd
Bdd&tdd
 

Mais de Hélio Medeiros

Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Hélio Medeiros
 
Team building praticas e atividades
Team building   praticas e atividadesTeam building   praticas e atividades
Team building praticas e atividadesHélio Medeiros
 
Historias, hipoteses e metricas aprendendo no dia a dia
Historias, hipoteses e metricas   aprendendo no dia a diaHistorias, hipoteses e metricas   aprendendo no dia a dia
Historias, hipoteses e metricas aprendendo no dia a diaHélio Medeiros
 
Team building - Software depende de relacionamento
Team building  - Software depende de relacionamentoTeam building  - Software depende de relacionamento
Team building - Software depende de relacionamentoHélio Medeiros
 
Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Hélio Medeiros
 
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Hélio Medeiros
 
Faça Frameworks, Não faça refens
Faça Frameworks, Não faça refensFaça Frameworks, Não faça refens
Faça Frameworks, Não faça refensHélio Medeiros
 
Feature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelFeature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelHélio Medeiros
 
Growth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaGrowth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaHélio Medeiros
 
Tdc growth hacking-customer lifecycle na pratica
Tdc   growth hacking-customer lifecycle na praticaTdc   growth hacking-customer lifecycle na pratica
Tdc growth hacking-customer lifecycle na praticaHélio Medeiros
 
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesA Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesHélio Medeiros
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelHélio Medeiros
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDHélio Medeiros
 
RBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWRBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWHélio Medeiros
 
Git that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBGit that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBHélio Medeiros
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Hélio Medeiros
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDevHélio Medeiros
 
RBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoRBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoHélio Medeiros
 
RBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotRBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotHélio Medeiros
 
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Hélio Medeiros
 

Mais de Hélio Medeiros (20)

Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018Team building - Workshop - ThoughtWorks Away Day 2018
Team building - Workshop - ThoughtWorks Away Day 2018
 
Team building praticas e atividades
Team building   praticas e atividadesTeam building   praticas e atividades
Team building praticas e atividades
 
Historias, hipoteses e metricas aprendendo no dia a dia
Historias, hipoteses e metricas   aprendendo no dia a diaHistorias, hipoteses e metricas   aprendendo no dia a dia
Historias, hipoteses e metricas aprendendo no dia a dia
 
Team building - Software depende de relacionamento
Team building  - Software depende de relacionamentoTeam building  - Software depende de relacionamento
Team building - Software depende de relacionamento
 
Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?Continuidade de times - quando os relacionamentos contam?
Continuidade de times - quando os relacionamentos contam?
 
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
Historias sao suposicoes: build:measure:learn no kanban e livro de possibilid...
 
Faça Frameworks, Não faça refens
Faça Frameworks, Não faça refensFaça Frameworks, Não faça refens
Faça Frameworks, Não faça refens
 
Feature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testávelFeature injection - descobrindo e entregando valor testável
Feature injection - descobrindo e entregando valor testável
 
Growth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na praticaGrowth hacking - customer lifecycle na pratica
Growth hacking - customer lifecycle na pratica
 
Tdc growth hacking-customer lifecycle na pratica
Tdc   growth hacking-customer lifecycle na praticaTdc   growth hacking-customer lifecycle na pratica
Tdc growth hacking-customer lifecycle na pratica
 
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-servicesA Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
A Jornada de um desenvolvedor de Princípios SOLID em um mundo de micro-services
 
Feature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testávelFeature Injection - Descobrindo e entregando valor testável
Feature Injection - Descobrindo e entregando valor testável
 
Um desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLIDUm desenvolvedor com princípios SOLID
Um desenvolvedor com princípios SOLID
 
RBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEWRBS QCon São Paulo 2014 REVIEW
RBS QCon São Paulo 2014 REVIEW
 
Git that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUBGit that like a boss - Colaborando com GITHUB
Git that like a boss - Colaborando com GITHUB
 
Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.Git that like a boss - Dos comandos básicos aos branches.
Git that like a boss - Dos comandos básicos aos branches.
 
Treinamento git - Papos RBSDev
Treinamento git - Papos RBSDevTreinamento git - Papos RBSDev
Treinamento git - Papos RBSDev
 
RBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojoRBS Agile Brazil Review - Managing dojo
RBS Agile Brazil Review - Managing dojo
 
RBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpotRBS Agile Brazil 2013 Review - HotSpot
RBS Agile Brazil 2013 Review - HotSpot
 
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
Agile brazil 2013 - Laboratório Experimental refinando ideias e lançando prod...
 

UnP Eng. Software - Aula 27

  • 1. TEST-DRIVEN DEVELOPMENT Corrigindo o problema certo da forma correta
  • 2. HÉLIO MEDEIROS Analista de Sistemas SINFO - UFRN Blog: http://heliomedeiros.com Email: helio.cabralmedeiros@gmail.com
  • 3. NOSSA AULA • Parte 1 - Resolvendo o problema correto de forma correta • Parte 2 - Qualidade em foco com TDD • Parte 3 - Construindo da forma correta • Parte 4 - Vermelho-Verde-Refatore • Parte 5 - Construindo a coisa correta
  • 4. 1 Resolvendo o problema correto da forma correta
  • 5. TDD “Apenas escreva algum código quando este for para concertar uma falha de teste.” -Lasse Koskela Isso é TDD em uma frase, primeiro escreva um teste, para só então escrever o código necessário para que o teste passe. http://www.flickr.com/photos/kenstein/2948639488/
  • 6. O DESAFIO O objetivo do desenvolvimento de software é prover soluções às operações e aos negócios das organizações, de forma que elas possam aumentar sua eficiência reduzindo custos entre outros. Mundo a fora existem excelentes empresas que durante décadas amadureceram seus processos e produzem muito código, mas não conseguem mantê-los de forma adequada com evoluções repetíveis. http://www.flickr.com/photos/davidcotter/3170716354/
  • 7. PROBLEMA COM CÓDIGO ? Mesmo durante décadas de avanços na industria de software a qualidade do código continua sendo um problema. “Defeitos criam custos indesejados fazendo com que os sistemas fiquem instáveis, imprevisíveis ou inutilizáveis” -Lasse Koskela
  • 8. DILEMA DOS DEFEITOS Defeitos reduzem o valor dos softwares produzidos, em vários casos criando mais estragos do que adicionando valor . Naturalmente a forma encontrada para lidar com os defeitos foi a execução de testes. “Verificamos como o software funciona e tentamos quebrá-lo de alguma maneira.” -Lasse Koskela
  • 9. PESADELO DE MANUTENÇÃO Um código pobre não possuem uma boa modelagem nem um balanceamento entre responsabilidades, podendo em muitos casos ter toneladas de trechos duplicados, e isso pode ser um pesadelo para manter. “Eu não vou mexer nisto. Isto pode nunca ter fim, e eu não farei a menor idéia do que pode ser quebrado durante o caminho”
  • 10. PROBLEMA COM REAIS NECESSIDADES? Mesmo com a crescente preocupação e evolução da engenharia de requisitos, ainda existe muita mudança e mal entendimento ocorrendo em projetos pelo mundo, clientes com seus produtos inacabados ou impróprios. “Requisitos mudam e suas validações também devem mudar, porem o entendimento sobre as mudanças é mais claro ao cliente e é por isso utilizamos testes de aceitação”
  • 11. A SOLUÇÃO TDD nos auxilia de duas formas quando pensamos em como corrigir estes dois problemas, dos códigos pobres e pouco evolutivos e dos sistemas que não refletem as reais necessidades, por meio de TESTES. Qualidade externa ATDD Qualidade interna TDD
  • 12. 2 Qualidade em foco com TDD
  • 13. TIPOS DE QUALIDADE Qualidade é definida perante o mercado atualmente de várias maneiras: •Qualidade como resultante da quantidade de defeitos encontrados após a entrega, em produção; •Qualidade como resultante da satisfação dos usuários em relação a quantidade de preenchimento de expectativas e necessidades.
  • 14. CONTRIBUIÇÃO TDD contribui para aumentar a qualidade do software em todos estes aspectos com sua natureza orientada a qualidade e a boa modelagem. Um dos grandes responsáveis pelos defeitos encontrados em produção é a não existência de uma verificação constante e imparcial em todo o caminho da realização de uma ação no nosso sistema. TDD nos previne sobre impactos sofridos na execução de ações do sistema após alterações de código. http://www.flickr.com/photos/radiofree/14243157/
  • 15. CONTRIBUIÇÃO TDD nos auxilia reduzindo o tempo necessários para corrigir os defeitos. Como se sabe a corrigir problemas o quanto antes custa menos, TDD nos auxilia a corrigi-los enquanto eles são introduzidos em nosso sistema. “Realizando testes antes em pequenos passos nos temos como garantir que não será necessário a utilização de modo debug. “ - Lasse Koskela
  • 16. 3 Construindo da forma correta
  • 17. CRESCENDO “Apenas escreva algum código quando este for para concertar uma falha de teste.” -Lasse Koskela Para o TDD primeiro devemos escrever um teste, para só então escrever o código necessário para que o teste passe. Isto parece ou soa estranho? http://www.flickr.com/photos/kenstein/2948639488/
  • 18. RE-APRENDENDO Durante muitos anos aprendemos que a forma correta para se desenvolver um sistema maduro e resistente deveríamos iniciar com uma solida modelagem, em seguida implementá-la e por fim testar para encontrar os defeitos que inserimos durante a codificação. Ciclo tradicional de desenvolvimento Modele Codifique Teste Ciclo de desenvolvimento orientado a testes Teste Codifique Modele
  • 19. TESTE-CODIFIQUE-REFATORE TDD inverte este ciclo. Mas isto soa um pouco estranho pois, a modelagem como é feita no TDD ao final não se assemelha tanto com a aprendida anteriomente; a modelagem no TDD foca no sentido de transformação do modelo atual em um modelo melhor, por isso recebe o nome de refatoração. Ciclo tradicional de desenvolvimento Modele Codifique Teste Ciclo de desenvolvimento orientado a testes Teste Codifique REFATORE
  • 20. 4 Vermelho-Verde-Refatore
  • 21. VERMELHO Vermelho-verde-refatore é um mnemônico alternativo para o ciclo construtivo do TDD. Quando iniciamos escrevendo um teste, ele normalmente falha, pois ainda não implementamos uma solução para o mesmo e isso é representado em alguns ambientes de desenvolvimento na forma de uma barra vermelha. Ciclo de desenvolvimento orientado a testes Teste
  • 22. VERMELHO-VERDE O nosso segundo passo é sempre fazê-lo passar e assim implementamos as funcionalidades que faltam para tal e recebemos em alguns ambientes de desenvolvimento a representação de que tudo está correto por uma barra verde. Ciclo de desenvolvimento orientado a testes Teste Codifique
  • 23. VERMELHO-VERDE-REFATORE O nosso terceiro e último estágio no ciclo de construção do TDD é refatorar, para que nosso código e modelo fique cada vez melhor sem duplicidade, mais simples de evoluir e entender. Caso não criemos nenhum erro o ambiente continuará apresentando a barra verde. Vermelho, Verde, Verde. Vermelho, Verde, Refatore. Ciclo de desenvolvimento orientado a testes Teste Codifique REFATORE
  • 24. 1º - ESCREVA UM TESTE Primeiro escreva um teste que não passe. Quando escrevemos no primeiro passo de nosso ciclo um teste, nos estamos realmente fazendo mais do que apenas escrevendo-o, nos estamos tomando decisões, definindo as interfaces de acesso as funcionalidades que iremos testar. Escrevendo testes antes, nós nos forçamos a pensar em como queremos que nosso código seja utilizado. “Pensar em como nosso código será usado é como montar um quebra-cabeça. É difícil encontrar uma peça que você precisa se você não sabe a que outras você vai precisar conecta-la.” -Lasse Koskela http://www.flickr.com/photos/mr_t_in_dc/3367120498/
  • 25. 1º - ESCREVA UM TESTE Quando escrevemos no primeiro passo de nosso ciclo um teste, nos não temos nenhuma escolha ao não ser fazer um código testável. A princípio não existe código escrito que não seja testável. A modelagem do sistema não trata apenas de estrutura; mas também sobre trabalhar as necessidade do cliente, objetivando por meio de um questionamento explicito, sem ambigüidades a real necessidade. “Sem testes primeiro você estará desperdiçando dinheiro desenvolvendo funcionalidades que não são realmente necessárias, assim como desperdiçando dinheiro tendo que lidar com correções sobre partes de código modelados desnecessariamente .” -Lasse Koskela http://www.flickr.com/photos/mr_t_in_dc/3367120498/
  • 26. 2º - ESCREVA SÓ O CÓDIGO NECESSÁRIO O segundo passo do ciclo é escrever apenas a quantidade suficiente de código necessária para fazer o teste passar. Mas porque só a quantidade mínima? O teste que escrevemos é um teste que falha, apontando um ponto entre o que o software faz e o que ele precisa fazer. É um ponto simples e curto que deve ser fechado em no máximo alguns minutos. “Você não está apenas escrevendo um código qualquer, você está satisfazendo um requisito explicito, sem ambigüidades expresso pelo teste. Você está progredindo e continuamente apresentando provas sobre isso .” -Lasse Koskela http://www.flickr.com/photos/djpd/553827617/
  • 27. 3º - REFATORE O passo final do ciclo é a refatoração, é aqui que você deve finalmente dar um passo para trás e olhar a modelagem, analisando maneiras de fazê-lo melhor. “Você não está apenas escrevendo um código qualquer, você está satisfazendo um requisito explicito, sem ambigüidades expresso pelo teste. Você está progredindo e continuamente apresentando provas sobre isso .” -Lasse Koskela http://www.flickr.com/photos/thorinside/157777439/
  • 28. 5 Construindo a coisa correta
  • 29. ACCEPTANCE TDD Acceptance TDD como o nome diz sugere alguma semelhança com o TDD “comum”. Acceptance tests indicam aceitação de requisitos ou funcionalidades enquanto a sua completeza. “Quando todos os testes de aceitação de um requisitos ou funcionalidade passam você sabe que o concluiu.” -Lasse Koskela http://www.flickr.com/photos/atelier_us/2659072696/
  • 30. COLABORAÇÃO Existem atualmente várias técnicas para se expressar requisitos que vão de casos de uso, passando por user stories e ATDD está desacoplada de todas, o objetivo principal é gerenciar requisitos atingindo a máxima colaboração entre equipe de desenvolvimento e o cliente. “A idéia fundamental para atingir o maior nível de produtividade para todo o time é encorajar feedbacks rápidos e comunicação efetiva face-a-face sobre software funcional concreto ao invés da passagem de planos, especificação de requisitos e reports de bugs entre clientes, testers, analistas de negócios e desenvolvedores..” -Lasse Koskela http://www.flickr.com/photos/ivanwalsh/3646342408/