tdd vs bdd analyze differences with examples
Este tutorial explica as diferenças entre TDD e BDD com exemplos:
TDD ou Test Driven Development e BDD ou Behavior Driven Development são as duas técnicas de desenvolvimento de software.
Antes de mergulharmos mais fundo na diferença entre esses dois, vamos primeiro entender o que eles significam individualmente e como são usados.
Vamos começar!!
O que você aprenderá:
como abrir um arquivo eps
O que é TDD?
TDD significa Test Driven Development. Nesta técnica de desenvolvimento de software, criamos primeiro os casos de teste e, em seguida, escrevemos o código subjacente a esses casos de teste. Embora o TDD seja uma técnica de desenvolvimento, ele também pode ser usado para o desenvolvimento de testes de automação.
As equipes que implementam o TDD levam mais tempo para o desenvolvimento, entretanto, tendem a encontrar muito poucos defeitos. O TDD resulta em melhor qualidade de código e o código que é mais reutilizável e flexível.
TDD também ajuda a alcançar alta cobertura de teste de cerca de 90-100%. A coisa mais desafiadora para desenvolvedores que seguem o TDD é escrever seus casos de teste antes de escrever o código.
Leitura sugerida => Guia definitivo para escrever casos de teste excelentes
Processo de TDD
A metodologia TDD segue um processo muito simples de 6 etapas:
1) Escreva um caso de teste: Com base nos requisitos, escreva um caso de teste automatizado.
2) Execute todos os casos de teste: Execute esses casos de teste automatizados no código desenvolvido atualmente.
3) Desenvolva o código para os casos de teste: Se o caso de teste falhar, então, escreva o código para fazer o caso de teste funcionar conforme o esperado.
4) Execute casos de teste novamente: Execute os casos de teste novamente e verifique se todos os casos de teste desenvolvidos até agora foram implementados.
5) Refatore seu código: Este é um passo opcional. No entanto, é importante refatorar seu código para torná-lo mais legível e reutilizável.
6) Repita as etapas 1 a 5 para novos casos de teste: Repita o ciclo para os outros casos de teste até que todos os casos de teste sejam implementados.
Exemplo de uma implementação de caso de teste em TDD
Vamos supor que temos um requisito para desenvolver uma funcionalidade de login para um aplicativo que possui campos de nome de usuário e senha e um botão de envio.
Passo 1: Crie um caso de teste.
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Passo 2: Execute este caso de teste e obteremos um erro informando que a página de login não está definida e não há métodos com os nomes enterUserName, enterPassword e submit.
Etapa 3: Desenvolva o código para esse caso de teste. Vamos escrever o código subjacente que irá inserir o nome de usuário e a senha e obter um objeto de página inicial quando estiverem corretos.
public class LoginPage{ String username; String password; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Passo 4: Execute o caso de teste novamente e obteremos uma instância da página inicial.
Passo 5: Vamos refatorar o código para fornecer as mensagens de erro corretas quando as condições if no método de envio não forem verdadeiras.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Passo 6: Agora vamos escrever um novo caso de teste com um nome de usuário e senha vazios.
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
Agora, se você tentar executar este caso de teste, ele falhará. Repita as etapas 1 a 5 para este caso de teste e, em seguida, adicione a funcionalidade para lidar com strings de nome de usuário e senha vazias.
empresas de big data como serviço
O que é BDD?
BDD significa Desenvolvimento Orientado por Comportamento. BDD é uma extensão do TDD em que, em vez de escrever os casos de teste, começamos escrevendo um comportamento. Posteriormente, desenvolvemos o código necessário para que nosso aplicativo execute o comportamento.
O cenário definido na abordagem BDD torna mais fácil para os desenvolvedores, testadores e usuários de negócios colaborarem.
BDD é considerado uma prática recomendada quando se trata de teste automatizado pois se concentra no comportamento do aplicativo e não em pensar na implementação do código.
O comportamento do aplicativo é o centro do foco no BDD e força os desenvolvedores e testadores a se colocarem no lugar do cliente.
Processo de BDD
O processo envolvido na metodologia BDD também consiste em 6 etapas e é muito semelhante ao do TDD.
1) Escreva o comportamento do aplicativo: O comportamento de um aplicativo é escrito em inglês simples pelo proprietário do produto ou pelos analistas de negócios ou QAs.
2) Escreva os scripts automatizados: Este inglês simples como linguagem é então convertido em testes de programação.
3) Implementar o código funcional: O código funcional subjacente ao comportamento é então implementado.
4) Verifique se o comportamento foi bem-sucedido: Execute o comportamento e veja se funciona. Se for bem-sucedido, vá para o próximo comportamento, caso contrário, corrija os erros no código funcional para obter o comportamento do aplicativo.
5) Refatore ou organize o código: Refatore ou organize seu código para torná-lo mais legível e reutilizável.
6) Repita os passos 1-5 para o novo comportamento: Repita as etapas para implementar mais comportamentos em seu aplicativo.
Leia também => Como os testadores estão envolvidos nas técnicas de TDD, BDD e ATDD
Exemplo de implementação de comportamento em BDD
Vamos supor que temos um requisito para desenvolver uma funcionalidade de login para um aplicativo que possui campos de nome de usuário e senha e um botão de envio.
Passo 1: Escreva o comportamento do aplicativo para inserir o nome de usuário e a senha.
Scenario: Login check Given I am on the login page When I enter 'username' username And I enter 'Password' password And I click on the 'Login' button Then I am able to login successfully.
Passo 2: Escreva o script de teste automatizado para este comportamento conforme mostrado abaixo.
@RunWith(Cucumber.class) public class MyStepDefinitions { @Steps LoginPage loginPage; @Steps HomePage hp; @Given('^I am on the login page $') public void i_am_on_the_login_page(){ loginPage.gotoLoginPage(); } @When('^I enter '((^')*)' username$') public void i_enter_something_username(String username) { loginPage.enterUserName(username); } @When('^I enter '((^')*)' password$') public void i_enter_something_password(String password) { loginPage.enterPassword(password); } @When('^I click on the '((^')*)' button$') public void i_click_on_the_submit_button(String strArg1) { hp = loginPage.submit(); } @Then('^I am able to login successfully.$') public void i_am_able_to_login_successfully() { Assert.assertNotNull(hp); } }
Etapa 3: Implemente o código funcional (semelhante ao código funcional na etapa 3 do exemplo TDD).
public class LoginPage{ String username = ''; String password = ''; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
Passo 4: Execute este comportamento e veja se funciona. Se for bem-sucedido, vá para a etapa 5, caso contrário, depure a implementação funcional e execute-a novamente.
Passo 5: Refatorar a implementação é uma etapa opcional e, neste caso, podemos refatorar o código no método submit para imprimir as mensagens de erro conforme mostrado na etapa 5 para o exemplo TDD.
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
Passo 6: Escreva um comportamento diferente e siga as etapas 1 a 5 para esse novo comportamento.
teste de unidade vs teste de integração vs teste funcional
Podemos escrever um novo comportamento para verificar se obtivemos um erro por não inserir o nome de usuário, conforme mostrado abaixo:
Scenario: Login check Given I am on the login page And I click on the 'Login' button Then I get an error to enter username.
TDD Vs BDD - Principais diferenças
TDD | BDD |
---|---|
Pode ser uma abordagem melhor para projetos que envolvem API e ferramentas de terceiros. | Pode ser uma abordagem melhor para projetos impulsionados por ações do usuário. Por exemplo: site de comércio eletrônico, sistema de aplicativo, etc. |
Significa Desenvolvimento Orientado a Testes. | Stands for Behavior Driven Development. |
O processo começa escrevendo um caso de teste. | O processo começa escrevendo um cenário de acordo com o comportamento esperado. |
O TDD foca em como a funcionalidade é implementada. | O BDD se concentra no comportamento de um aplicativo para o usuário final. |
Os casos de teste são escritos em uma linguagem de programação. | Os cenários são mais legíveis quando comparados ao TDD, pois são escritos em um formato simples em inglês. |
Mudanças em como as funções do aplicativo impactam muito nos casos de teste em TDD. | Os cenários BDD não são muito afetados pelas mudanças de funcionalidade. |
A colaboração é necessária apenas entre os desenvolvedores. | A colaboração é necessária entre todas as partes interessadas. |
Algumas das ferramentas que suportam TDD são: JUnit, TestNG, NUnit, etc. | Algumas das ferramentas que suportam BDD são SpecFlow, Cucumber, MSpec, etc. |
Os testes em TDD só podem ser entendidos por pessoas com conhecimento de programação, | Os testes em BDD podem ser compreendidos por qualquer pessoa, inclusive por quem não tem nenhum conhecimento de programação. |
O TDD reduz a probabilidade de haver bugs em seus testes. | Bugs em testes são difíceis de rastrear quando comparados ao TDD. |
Conclusão
Escolher entre TDD e BDD pode ser muito complicado. Alguns podem argumentar que o BDD é melhor para localizar bugs, enquanto outros podem apenas dizer que o TDD oferece maior cobertura de código.
Nenhuma das metodologias é melhor que a outra. Depende da pessoa e da equipe do projeto decidir qual metodologia usar.
Esperamos que este artigo tenha esclarecido suas dúvidas sobre TDD vs BDD !!
Leitura recomendada
- Mais de 180 casos de teste de exemplo de teste de aplicativo da Web (lista de verificação de exemplo)
- Como traduzir casos de teste manuais em scripts de automação? - Um guia passo a passo com exemplo
- Perguntas da entrevista de casos de teste: escreva casos de teste com base no cenário
- Como os testadores estão envolvidos nas técnicas de TDD, BDD e ATDD
- Cobertura de teste em teste de software (dicas para maximizar a cobertura de teste)
- 8 Melhores Ferramentas de Desenvolvimento Orientado a Comportamento (BDD) e estruturas de teste
- Tutorial do Specflow: o guia definitivo para a ferramenta BDD
- Como escrever casos de teste: o guia definitivo com exemplos