BDD - Desenvolvimento Orientado a Testes

Quando você olha para qualquer referência sobre Behavior Driven Development, você encontrará o uso de frases como “BDD é derivado de TDD”, “BDD e TDD”. Para saber como o BDD surgiu, por que se diz que ele é derivado do TDD e o que é BDD e TDD, é necessário entender o que é TDD.

Por que testar?

Para começar, vamos entrar nos fundamentos do teste. O objetivo do teste é garantir que o sistema construído esteja funcionando conforme o esperado. Considere o seguinte exemplo.

Conseqüentemente, por experiência, aprendemos que descobrir um defeito como e quando ele é introduzido e consertá-lo imediatamente seria econômico. Portanto, há uma necessidade de escrever casos de teste em cada estágio de desenvolvimento e teste. Isso é o que nossas práticas de teste tradicionais nos ensinaram, o que geralmente é denominado como Teste antecipado.

Essa abordagem de teste é denominada abordagem Teste-Último, pois o teste é feito após a conclusão de um estágio.

Desafios com a abordagem Test-Last

A abordagem Test-Last foi seguida por algum tempo nos projetos de desenvolvimento de software. No entanto, na realidade, com esta abordagem, como o teste tem que esperar até que o estágio específico seja concluído, muitas vezes é esquecido por causa de -

  • Os atrasos na conclusão da etapa.

  • Horários apertados.

  • Concentre-se na entrega no prazo, evitando testes.

Além disso, na abordagem Teste-Último, o teste de unidade, que deveria ser feito pelos desenvolvedores, é frequentemente ignorado. Os vários motivos encontrados baseiam-se na mentalidade dos desenvolvedores -

  • Eles são desenvolvedores e não testadores.

  • O teste é responsabilidade dos testadores.

  • Eles são eficientes na codificação e seu código não teria defeitos.

Isso resulta em -

  • Comprometimento com a qualidade do produto entregue.

  • Ter a responsabilidade pela qualidade apenas nos testadores.

  • Custos elevados na correção de defeitos, pós-entrega.

  • Incapacidade de obter a satisfação do cliente, o que também significaria a perda de novos negócios, afetando assim a credibilidade.

Esses fatores exigiam uma mudança de paradigma para se concentrar nos testes. O resultado foi a abordagem Teste-Primeiro.

Abordagem Teste-Primeiro

A abordagem Test-First substitui a forma de desenvolvimento de dentro para fora (escrever código e depois testar) para fora para dentro (escrever teste e depois codificar).

Essa abordagem é incorporada às seguintes metodologias de desenvolvimento de software (que também são Agile) -

  • eXtreme Programming (XP)

  • THusa Drachado Development (TDD).

Nessas metodologias, o desenvolvedor projeta e grava os testes de unidade para um módulo de código antes de escrever uma única linha do módulo de código. O desenvolvedor então cria o módulo de código com o objetivo de passar no teste de Unidade. Assim, essas metodologias usam testes de unidade para conduzir o desenvolvimento.

O ponto fundamental para notar que o objetivo é o desenvolvimento baseado em testes.

Ciclo Red-Green-Refactor

O Desenvolvimento Orientado a Testes é usado para desenvolver o código guiado por testes de unidade.

Step 1 - Considere um módulo de código que deve ser escrito.

Step 2 - Escreva um teste

Step 3 - Faça o teste.

O teste falha, pois o código ainda não foi escrito. Conseqüentemente, a Etapa 2 é geralmente referida como escrever um teste para falhar.

Step 4 - Escreva o código mínimo possível para passar no teste.

Step 5- Execute todos os testes para garantir que todos eles sejam aprovados. Os testes de unidade são automatizados para facilitar esta etapa.

Step 6 - Refatorar.

Step 7 - Repita da Etapa 1 à Etapa 6 para o próximo módulo de código.

Cada ciclo deve ser muito curto e uma hora típica deve conter muitos ciclos.

Isso também é conhecido popularmente como o Red-Green-Refactor ciclo, onde -

  • Red - Escrever um teste que falha.

  • Green - Escrever código para passar no teste.

  • Refactor - Remova a duplicação e melhore o código para os padrões aceitáveis.

Etapas do processo TDD

As etapas de um processo TDD são ilustradas abaixo.

Vantagens do TDD

Os benefícios ou vantagens do Desenvolvimento Orientado a Testes são -

  • O desenvolvedor precisa entender primeiro qual deve ser o resultado desejado e como testá-lo antes de criar o código.

  • O código de um componente é concluído apenas quando o teste é aprovado e o código é refatorado. Isso garante o teste e a refatoração antes que o desenvolvedor prossiga para o próximo teste.

  • Como o conjunto de testes de unidade é executado após cada refatoração, o feedback de que cada componente ainda está funcionando é constante.

  • Os testes de unidade atuam como documentação viva que está sempre à altura dos dados.

  • Se um defeito for encontrado, o desenvolvedor cria um teste para revelar esse defeito e, em seguida, modifica o código para que o teste passe e o defeito seja corrigido. Isso reduz o tempo de depuração. Todos os outros testes também são executados e quando passam, garante que a funcionalidade existente não seja quebrada

  • O desenvolvedor pode tomar decisões de design e refatorar a qualquer momento e a execução dos testes garante que o sistema ainda está funcionando. Isso torna o software sustentável.

  • O desenvolvedor tem a confiança de fazer qualquer alteração, pois se a alteração afetar alguma funcionalidade existente, o mesmo é revelado ao executar os testes e os defeitos podem ser corrigidos imediatamente.

  • Em cada execução de teste sucessiva, todas as correções de defeitos anteriores também são verificadas e a repetição do mesmo defeito é reduzida.

  • Como a maioria dos testes é feita durante o próprio desenvolvimento, o teste antes da entrega é reduzido.

Desvantagens do TDD

O ponto de partida são as Estórias de Usuário, que descrevem o comportamento do sistema. Portanto, os desenvolvedores muitas vezes enfrentam as seguintes questões -

  • Quando testar?

  • O que testar?

  • Como saber se uma especificação é atendida?

  • O código agrega valor ao negócio?

Equívocos sobre TDD

Os equívocos a seguir existem na indústria e precisam de esclarecimentos.

Equívoco Esclarecimento
TDD trata de testes e automação de testes. TDD é uma metodologia de desenvolvimento que usa a abordagem Test-First.
O TDD não envolve nenhum projeto. O TDD inclui análise crítica e design com base nos requisitos. O design surge durante o desenvolvimento.
TDD está apenas no nível da unidade. O TDD pode ser usado nos níveis de integração e sistema.
O TDD não pode ser usado por projetos de teste tradicionais. O TDD se tornou popular com a Extreme Programming e está sendo usado em outras metodologias Agile. No entanto, ele também pode ser usado em projetos de teste tradicionais.
TDD é uma ferramenta.

TDD é uma metodologia de desenvolvimento e, após cada novo teste de unidade passar, ele é adicionado ao Automation Test Suite, pois todos os testes precisam ser executados sempre que um novo código é adicionado ou o código existente é modificado e também após cada refatoração.

Assim, as ferramentas de automação de teste que suportam o TDD facilitam esse processo.

TDD significa entregar testes de aceitação aos desenvolvedores. TDD não significa entregar testes de aceitação aos desenvolvedores.

Aceitação TDD

O Desenvolvimento Orientado ao Teste de Aceitação (ATDD) define os Critérios de Aceitação e os Testes de Aceitação durante a criação das Estórias de Usuário, no início do desenvolvimento. ATDD se concentra na comunicação e entendimento comum entre os clientes, desenvolvedores e testadores.

As principais práticas em ATDD são as seguintes -

  • Discuta cenários do mundo real para construir uma compreensão compartilhada do domínio.

  • Use esses cenários para chegar aos critérios de aceitação.

  • Automatize os testes de aceitação.

  • Concentre o desenvolvimento nesses testes.

  • Use os testes como uma especificação ao vivo para facilitar a mudança.

Os benefícios de usar ATDD são os seguintes -

  • Os requisitos são inequívocos e sem lacunas funcionais.

  • Outros entendem os casos especiais que os desenvolvedores prevêem.

  • Os testes de Aceitação orientam o desenvolvimento.

TDD Vs BDD

De acordo com Dan North, os programadores normalmente enfrentam os seguintes problemas ao executar o Desenvolvimento Orientado a Testes -

  • Onde começar

  • O que testar e o que não testar

  • Quanto testar de uma só vez

  • Como chamar seus testes

  • Como entender por que um teste falha

A solução para todos esses problemas é o Desenvolvimento Orientado ao Comportamento. Ele evoluiu a partir das práticas ágeis estabelecidas e é projetado para torná-las mais acessíveis e eficazes para as equipes, iniciantes na entrega ágil de software. Com o tempo, o BDD cresceu para abranger o quadro mais amplo de análise ágil e teste de aceitação automatizado.

O principal difference between TDD and BDD é isso -

  • TDD descreve como o software funciona.

  • Por outro lado, BDD -

    • Descreve como o usuário final usa o software.

    • Promove colaboração e comunicação.

    • Enfatiza exemplos de comportamento do Sistema.

    • Visa as especificações executáveis ​​derivadas dos exemplos