Portanto, sou novo no desenvolvimento ágil, mas não orientado a testes . Meus professores na faculdade eram todos sobre a idéia de testes, depois código e testes. Não sei se entendi o porquê. Da minha perspectiva, é muito custo inicial que provavelmente será alterado à medida que seu código evoluir.
É assim que imagino o TDD e por que isso me confunde. Se eu fosse construir uma casa como empreiteiro de TDD.
Dê-me todas as suas especificações (histórias).
Obtenha aprovação das especificações.
Divida todas as especificações em inspeção que acho que vou precisar (veja no futuro).
Ligue para um inspetor para examinar esses pontos e me diga agora que estou reprovando na inspeção (gee, obrigado).
Comece a construir a casa.
Ligue para o inspetor de volta diariamente (passando em 2/100).
Oh, dispara, houve um problema com meu entendimento e agora preciso adicionar mais 9 inspeções e alterar 27 delas.
Inspetor de chamada passando em 1/109.
Droga. Por que o inspetor não gosta deste? Atualizei o nome do método ...
Construa um pouco mais.
UGGGGHHHH MAIS ALTERAÇÕES, deixe-me atualizar o maldito inspetor. Oh, eu estou falhando, não s ** t.
Eu já terminei?
Tudo bem, isso pode ser estranho, mas não vejo como devo conhecer todos os meus métodos e como as coisas vão funcionar até que meu código esteja lá. Em 99% das vezes, preciso voltar e atualizar um teste de unidade de qualquer maneira e adicionar mais conforme for. Parece apenas ao contrário.
O que parece mais apropriado é o DDT ou o teste orientado para o desenvolvimento, algo que a comunidade quase esqueceu.
Pelo meu entendimento, o DDT para uma casa seria semelhante a:
Dê-me todas as suas especificações (histórias).
Obtenha aprovação das especificações e divida-as.
Inicie uma unidade (a base).
Faça anotações (comentários) de alguma lógica complicada.
No final, antes de iniciar a próxima unidade, faça a inspeção (crie um teste).
Corrija qualquer problema encontrado e inspecione novamente.
Aprovada esta unidade, passe para a próxima.
Se todos somos honestos, isso não soa mais humano e centrado no desenvolvedor e nos negócios? Parece que as alterações podem ser feitas mais rapidamente e sem a sobrecarga que o TDD parece criar.