A) UP não é metodologia ágil. UP é a base do RUP.
B) Os testes são feitos antes da implementação.
C) Escreve o teste -> faz a implementação da funcionalidade (no primeiro momento "quebrará") -> refatora.
D) Creio que não irá reduzir o tempo de desenvolvimento. Pelo contrário, TDD pode até aumentar, pois antes mesmo de ser criada a funcionalidade, o desenvolvolvedor precisa idealizar os casos de testes, garantindo que a funcionalidade esteja de acordo.
E) Correto! O Teste antes da codificação, ou test-first, segundo Sommerville, “a escrita de testes primeiro define implicitamente tanto uma interface como uma especificação do comportamento para a funcionalidade que está sendo desenvolvida”.
Note que ao criar o teste antes de implementar a unidade, são reduzidos problemas como mal entendimento de requisitos ou interfaces, pois como criar um teste se eu não sei o que devo testar?
Neste caso o desenvolvedor, para implementar os testes iniciais, deve compreender com detalhes a especificação do sistema e as regras de negócio, só assim, será possível escrever testes para o sistema. Imagine o caso de querer testar um pneu criado para o carro, se não entendi que o pneu é redondo, por exemplo, criarei um teste para um pneu quadrado, não podendo ser realizado o teste. Desta forma, é de extrema importância, para o desenvolvedor, o entendimento dos requisitos do cliente. Além disso, não adianta criar testes que não validem o código como um todo para reduzir o tempo, é necessário criar testes para o conjunto completo de unidades, só assim o TDD vai funcionar como deve, devendo fornecer uma cobertura completa aos testes.
Além disso, os testes devem seguir o modelo F.I.R.S.T.:
- F (Fast) - Rápidos: devem ser rápidos, pois testam apenas uma unidade;
- I (Isolated) - Testes unitários são isolados, testando individualmente as unidades e não sua integração;
- R (Repeateble) - Repetição nos testes, com resultados de comportamento constante;
- S (Self-verifying) - A auto verificação deve verificar se passou ou se deu como falha o teste;
- T (Timely) - O teste deve ser oportuno, sendo um teste por unidade.
Fonte: http://www.devmedia.com.br/tdd-fundamentos-do-desenvolvimento-orientado-a-testes/28151
Bons estudos!