a) consiste em um processo iterativo que se inicia escrevendo um código de uma funcionalidade do sistema e, logo em seguida, testa-o para saber se a implementação foi correta.
Incorreta, basicamente o TDD preconiza: 1º Escreva um teste, faça-o falhar. 2º Escreva um código para passar no teste. 3º Refatore o teste. Ou seja, a alternativa peca em afirmar que se inicia escrevendo um código.
b) apesar de útil, não diminui o custo de testes de regressão do sistema.
Incorreta, diminiu o custo já que os testes são refatorados constantemente.
c) sua utilização elimina a necessidade de testes de validação do sistema, uma vez que ele já foi testado incrementalmente.
Incorreta, não elimina a necessidade de testes de validação. Obs.: NO DIA A DIA daria para afirmar que a necessidade de testes de verificação é reduzida, PORÉM NUNCA VI ALGUM BIBLIOGRAFIA FALANDO TAL COISA.
d) apesar de ter sido apresentado como parte dos métodos ágeis, também pode ser usado em outros processos de desenvolvimento de software.
Correta, gabarito da questão
a) Errado. Programador escreve o teste antes de qualquer outro código.
b) Errado. O próprio teste de funcionalidade funciona como teste de regressão, reduzindo custos.
c) Errado. Como no TDD o cliente pode não estar lá enquanto você programa, é preciso fazer testes de aceitação depois.
d) Certo. Compatível inclusive com modelos não ágeis.