GABARITO A
IV. Identificar uma nova funcionalidade pequena para ser incrementada com poucas linhas em um código.
I. Escrever um teste para a funcionalidade identificada e implementá-lo como um teste automatizado.
II. Executar o teste, junto com os demais testes já implementados, sem implementar a nova funcionalidade no código.
VII. Revisar a funcionalidade e o teste, caso o código execute sem falhar.
V. Implementar a nova funcionalidade no código e reexecutar o teste.
VI. Refatorar o código com melhorias incrementais até que o teste execute sem erros.
II. Identificar e implementar uma outra funcionalidade, após todos os testes serem executados com sucesso.
-
Basicamente o TDD se baseia em pequenos ciclos de repetições, onde para cada funcionalidade do sistema um teste é criado antes. Este novo teste criado inicialmente falha, já que ainda não temos a implementação da funcionalidade em questão e, em seguida, implementamos a funcionalidade para fazer o teste passar! Simples assim!
Não podemos simplesmente escrever outro teste só por que já temos um teste passando. É preciso que esta funcionalidade que acabamos de escrever seja refatorada, ou seja, ela precisa passar por um pequeno banho de "boas práticas” de Desenvolvimento de Software. Estas boas práticas que garantirão um software com código mais limpo, coeso e menos acoplado.
Ciclo de desenvolvimento
Red,Green, Refactor. Ou seja:
Escrevemos um Teste que inicialmente não passa (Red) Adicionamos uma nova funcionalidade do sistema Fazemos o Teste passar (Green) Refatoramos o código da nova funcionalidade (Refactoring) Escrevemos o próximo Teste
Nós temos, neste tipo de estratégia, um feedback rápido sobre a nova funcionalidade e sobre uma possível quebra de outra funcionalidade do sistema. Assim tempos muito mais segurança para as refatorações e muito mais segurança na adição de novas funcionalidades.
https://www.devmedia.com.br/test-driven-development-tdd-simples-e-pratico/18533
Sommerville, Engenharia de Software, 9a. edição. Capítulo 8. Página 155.
...
As etapas do processo são:
1. Você começa identificando o incremento de funcionalidade necessário. Este, normalmente, deve ser pequeno e implementável em poucas linhas de código.
2. Você escreve um teste para essa funcionalidade e o implementa como um teste automatizado. Isso significa que o teste pode ser executado e relatará se passou ou falhou.
3. Você, então, executa o teste, junto com todos os outros testes implementados. Inicialmente, você não terá implementado a funcionalidade, logo, o novo teste falhará. Isso é proposital, pois mostra que o teste acrescenta algo ao conjunto de testes.
4. Você, então, implementa a funcionalidade e executa novamente o teste. Isso pode envolver a refatoração do código existente para melhorá-lo e adicionar um novo código sobre o que já está lá.
5. Depois que todos os testes forem executados com sucesso, você caminha para implementar a próxima parte da funcionalidade.
...