Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Paletra sobre TDD, ocorrida no #DevDojo

896 views

Published on

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

  • Be the first to comment

  • Be the first to like this

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 />

×