TDD – TestDrivenDevelopmentGibran Silva gibran.silva@gmail.com / @ggibranBacharelemCiência da ComputaçãoArquiteto de SoftwareConsultorIndependente
Objetivo O que é TDD? Como FuncionaFrameworksBenefíciosPrincípios
CuriosidadeUma 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. 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.Retirado de National Institute of Standards and TechnologyO que é TDD?
O que é TDD?É uma técnica de desenvolvimento de software cujo processo é formado por pequenas iterações para o desenvolvimento de uma nova funcionalidade.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.Não é um método para testar software, mas para construir software.O que é TDD?
Como Funciona?Ciclo em poucos minutosO que foi feito.
Frameworks Visual Studio Team System
Nunit – www.nunit.org
MbUnit – www.mbunit.orgBeneficiosGarante a existência de testes unitários completos e atualizados, que:Eliminam o medo de alterarmos alguma coisa que funciona (testada manualmente), e acabarmos introduzindo algum problema;Nos permite utilizar refatoração (substituir uma implementação por outra equivalente) de forma muito mais agressiva devido à facilidade dos testes verificarem o resultado.Diminui a quantidade de erros por linha de código (código-fonte de mais qualidade)Testes unitários servem como especificação de como os componentes do sistema funcionam;Nos leva a produzir componentes de software mais desacoplados, para garantir o isolamento dos testes, o que acaba favorecendo o projeto do sistema.
“Espiral da Morte” do Teste Ciclo mortal do “estou sem tempo para testar”PrincípiosConstrua testes isolados uns dos outrosUm caso de teste não deve depender do sucesso de outro para funcionar;Deve ser possível executar um caso de testes isoladamente, sem executar nenhum outro;Comece definindo uma “TestList”De modo geral para uma mesma classe ou método a ser testado, existirão diferentes casos de teste. Liste-os primeiro (brain-storm);Provavelmente ao longo do desenvolvimento você adicionará novos casos de teste à lista;Princípios
PrincípiosExemplo de “Lista de Testes” para o caso de uso “Realizar Transferência Bancária”:Realizar uma transferência normal (bem sucedida);Tentar transferir uma quantidade superior ao saldo da conta de origem;Verificar atomicidade no caso de falha de sistema antes de concluir a operação;Conta de origem inativa;Conta de destino inativa;Valor transferido menor que zero;Princípios
PrincípiosExemplo: Transferir uma quantidade superior ao saldo da conta de origem;[Test][ExpectedException(typeof(SaldoInsuficiente))] publicvoidTransferirValorSuperiorAoSaldoDaContaDeOrigem(){	Decimal saldoInicial = 1000.0;Decimal valorTransferencia = 5000.0;ContacontaOrigem= newConta(SaldoInicial);ContacontaDestino = newConta(SaldoInicial);contaOrigem.Debitar(valorTransferencia);contaDestino.Creditar(valorTransferencia);}Princípios
PrincípiosDados para TesteNã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”. 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).Dê preferência a dados do mundo real, especialmente quando você tem algum sistema legado com dados que podem ser aproveitadosPrincípios
Dúvidas?Gibran Silva gibran.silva@gmail.com / @ggibranBacharelemCiência da ComputaçãoArquiteto de SoftwareConsultorIndependente

Paletra sobre TDD, ocorrida no #DevDojo

  • 1.
    TDD – TestDrivenDevelopmentGibranSilva gibran.silva@gmail.com / @ggibranBacharelemCiência da ComputaçãoArquiteto de SoftwareConsultorIndependente
  • 2.
    Objetivo O queé TDD? Como FuncionaFrameworksBenefíciosPrincípios
  • 3.
    CuriosidadeUma pesquisa doDepartamento 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. 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.Retirado de National Institute of Standards and TechnologyO que é TDD?
  • 4.
    O que éTDD?É uma técnica de desenvolvimento de software cujo processo é formado por pequenas iterações para o desenvolvimento de uma nova funcionalidade.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.Não é um método para testar software, mas para construir software.O que é TDD?
  • 5.
    Como Funciona?Ciclo empoucos minutosO que foi feito.
  • 6.
  • 7.
  • 8.
    MbUnit – www.mbunit.orgBeneficiosGarantea existência de testes unitários completos e atualizados, que:Eliminam o medo de alterarmos alguma coisa que funciona (testada manualmente), e acabarmos introduzindo algum problema;Nos permite utilizar refatoração (substituir uma implementação por outra equivalente) de forma muito mais agressiva devido à facilidade dos testes verificarem o resultado.Diminui a quantidade de erros por linha de código (código-fonte de mais qualidade)Testes unitários servem como especificação de como os componentes do sistema funcionam;Nos leva a produzir componentes de software mais desacoplados, para garantir o isolamento dos testes, o que acaba favorecendo o projeto do sistema.
  • 9.
    “Espiral da Morte”do Teste Ciclo mortal do “estou sem tempo para testar”PrincípiosConstrua testes isolados uns dos outrosUm caso de teste não deve depender do sucesso de outro para funcionar;Deve ser possível executar um caso de testes isoladamente, sem executar nenhum outro;Comece definindo uma “TestList”De modo geral para uma mesma classe ou método a ser testado, existirão diferentes casos de teste. Liste-os primeiro (brain-storm);Provavelmente ao longo do desenvolvimento você adicionará novos casos de teste à lista;Princípios
  • 10.
    PrincípiosExemplo de “Listade Testes” para o caso de uso “Realizar Transferência Bancária”:Realizar uma transferência normal (bem sucedida);Tentar transferir uma quantidade superior ao saldo da conta de origem;Verificar atomicidade no caso de falha de sistema antes de concluir a operação;Conta de origem inativa;Conta de destino inativa;Valor transferido menor que zero;Princípios
  • 11.
    PrincípiosExemplo: Transferir umaquantidade superior ao saldo da conta de origem;[Test][ExpectedException(typeof(SaldoInsuficiente))] publicvoidTransferirValorSuperiorAoSaldoDaContaDeOrigem(){ Decimal saldoInicial = 1000.0;Decimal valorTransferencia = 5000.0;ContacontaOrigem= newConta(SaldoInicial);ContacontaDestino = newConta(SaldoInicial);contaOrigem.Debitar(valorTransferencia);contaDestino.Creditar(valorTransferencia);}Princípios
  • 12.
    PrincípiosDados para TesteNãoescolha 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”. 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).Dê preferência a dados do mundo real, especialmente quando você tem algum sistema legado com dados que podem ser aproveitadosPrincípios
  • 13.
    Dúvidas?Gibran Silva gibran.silva@gmail.com/ @ggibranBacharelemCiência da ComputaçãoArquiteto de SoftwareConsultorIndependente