Paletra sobre TDD, ocorrida no #DevDojo

889 visualizações

Publicada em

Palestra sobre TDD ministrada por @ggibran no dia 17/07/2010 no #DevDojo

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
889
No SlideShare
0
A partir de incorporações
0
Número de incorporações
43
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Paletra sobre TDD, ocorrida no #DevDojo

  1. 1. TDD – TestDrivenDevelopment<br />Gibran Silva <br />gibran.silva@gmail.com / @ggibran<br />BacharelemCiência da Computação<br />Arquiteto de Software<br />ConsultorIndependente<br />
  2. 2. Objetivo<br /> O que é TDD?<br /> Como Funciona<br />Frameworks<br />Benefícios<br />Princípios<br />
  3. 3. Curiosidade<br />Uma pesquisa do Departamento de Comércio dos EUA, publicada em 2002, revelou que falhas de software são tão comuns e tão danosas que se estima que causem um prejuízo anual de mais de 60 bilhões de dólares para a economia americana. <br />O estudo também alega que, embora não seja possível remover todos os erros, mais de um terço destes custos poderia ser eliminado caso se utilizasse uma infra-estrutura de testes melhor, que permitisse identificar e remover defeitos mais cedo e de forma mais eficaz. Atualmente, calcula-se que cerca de 50% dos defeitos são encontrados apenas nas fases finais dos projetos, ou após os sistemas começarem a ser utilizados em produção.<br />Retirado de National Institute of Standards and Technology<br />O que é TDD?<br />
  4. 4. O que é TDD?<br />É uma técnica de desenvolvimento de software cujo processo é formado por pequenas iterações para o desenvolvimento de uma nova funcionalidade.<br />TDD vem do conceito “test-first programming” do XP (Extreme Programming), mas acabou ganhando tando interesse que hoje é utilizado independente da adoção de XP.<br />Não é um método para testar software, mas para construir software.<br />O que é TDD?<br />
  5. 5. Como Funciona?<br />Ciclo em poucos minutos<br />O que foi feito.<br />
  6. 6. Frameworks<br /><ul><li> Visual Studio Team System
  7. 7. Nunit – www.nunit.org
  8. 8. MbUnit – www.mbunit.org</li></li></ul><li>Beneficios<br />Garante a existência de testes unitários completos e atualizados, que:<br />Eliminam o medo de alterarmos alguma coisa que funciona (testada manualmente), e acabarmos introduzindo algum problema;<br />Nos permite utilizar refatoração (substituir uma implementação por outra equivalente) de forma muito mais agressiva devido à facilidade dos testes verificarem o resultado.<br />Diminui a quantidade de erros por linha de código (código-fonte de mais qualidade)<br />Testes unitários servem como especificação de como os componentes do sistema funcionam;<br />Nos leva a produzir componentes de software mais desacoplados, para garantir o isolamento dos testes, o que acaba favorecendo o projeto do sistema.<br />
  9. 9. “Espiral da Morte” do Teste<br /><ul><li> Ciclo mortal do “estou sem tempo para testar”</li></li></ul><li>Princípios<br />Construa testes isolados uns dos outros<br />Um caso de teste não deve depender do sucesso de outro para funcionar;<br />Deve ser possível executar um caso de testes isoladamente, sem executar nenhum outro;<br />Comece definindo uma “TestList”<br />De modo geral para uma mesma classe ou método a ser testado, existirão diferentes casos de teste. Liste-os primeiro (brain-storm);<br />Provavelmente ao longo do desenvolvimento você adicionará novos casos de teste à lista;<br />Princípios<br />
  10. 10. Princípios<br />Exemplo de “Lista de Testes” para o caso de uso “Realizar Transferência Bancária”:<br />Realizar uma transferência normal (bem sucedida);<br />Tentar transferir uma quantidade superior ao saldo da conta de origem;<br />Verificar atomicidade no caso de falha de sistema antes de concluir a operação;<br />Conta de origem inativa;<br />Conta de destino inativa;<br />Valor transferido menor que zero;<br />Princípios<br />
  11. 11. Princípios<br />Exemplo: Transferir uma quantidade superior ao saldo da conta de origem;<br />[Test]<br />[ExpectedException(typeof(SaldoInsuficiente))] <br />publicvoidTransferirValorSuperiorAoSaldoDaContaDeOrigem()<br />{<br /> Decimal saldoInicial = 1000.0;<br />Decimal valorTransferencia = 5000.0;<br />ContacontaOrigem= newConta(SaldoInicial);<br />ContacontaDestino = newConta(SaldoInicial);<br />contaOrigem.Debitar(valorTransferencia);<br />contaDestino.Creditar(valorTransferencia);<br />}<br />Princípios<br />
  12. 12. Princípios<br />Dados para Teste<br />Não escolha números mágicos se eles não tiverem um significado específico no teste. Por exemplo, se não faz diferença utilizar “1”, “2” ou “1365”, preferia “1”. <br />Evite passar o mesmo valor para diferentes parâmetros. Por exemplo, para testar um método Operacao(int x, int y), não utilize Operacao(2,2), pois “Operacao” pode inverter “x” e “y” e o teste ainda assim passar. Prefira, por exemplo, Operacao(2,3).<br />Dê preferência a dados do mundo real, especialmente quando você tem algum sistema legado com dados que podem ser aproveitados<br />Princípios<br />
  13. 13. Dúvidas?<br />Gibran Silva <br />gibran.silva@gmail.com / @ggibran<br />BacharelemCiência da Computação<br />Arquiteto de Software<br />ConsultorIndependente<br />

×