Não acho que seja possível… Mas você vai testar a arquitetura depois de ter todas as funcionalidades prontas???
De acordo com o TDD, a implementação começa no teste. Se a implementação começa no teste, a primeira coisa que você tem que implementar é uma funcionalidade. Desenvolvimento Bottom-Up. (acho que agora cheguei num ponto interessante… desenvolvimento bottom-up)
Como é que você começa implementando uma arquitetura?! Pela classe concreta ou pela interface?
Eu pelo menos, geralmente começo pela interface. Top-Down.
TDD é teste de métodos concretos. Ou seja, desenvolvimento baseado em testes de funções implementadas. Não dá pra desenvolver arquiteturas usando TDD pois a forma de desenvolver arquiteturas (top-down) e de testar (teste integração) é diferente da metodologia (bottom-up) e tipo de testes (teste unitário) propostos por TDD.
PS: O que é pão com durex?[/quote]
Antes de começar: TDD não garante qualidade de arquitetura, nem qualidade de código, nem qualidade de nada. Ele ajuda, mas tudo isso depende mais das skills do programador do que de qualquer outra coisa.
Quanto a composicao da arquitetura de um sistema, voce pode usar TDD, mesmo desenvolvendo Top-Down, uma boa referência é http://www.manning.com/koskela/, tambem um bom livro sobre o assunto. Outra boa referência é http://www.amazon.co.uk/xUnit-Test-Patterns-Refactoring-Signature/dp/0131495054. Ambos falam sobre desenvolvimento top-down e bottom-up.
Sobre TDD e arquitetura: Primeiro, é difícil definir o que de fato é arquitetura, eu sempre imagino como integracao entre a aplicação e a infra-estrutura, depois se vai ser usado, e mesmo se vale a pena usar testes unitarios em cada passo da infra-estrutura de um sistema. Para testar arquitetura, testes de integração são mais úteis, na minha opinião, do que testes unitários cheios de mocks.
Mas o que me chamou atenção no seu comentário é que por achar que TDD não ajuda na arquitetura, ele automáticamente atrapalha, e a partir daqui eu não entendi mais nada. Os testes ajudam a manter o seu dominio limpo, fácil de entender e manter. E ali estarão os testes, independente da arquitetura pela qual voce optou, do framework, linguagem, servidor, sistema operacional voce vai usar, voce terá regras de negócio em algum lugar. E não é por voce partir de uma arquitetura top-down que as regras basicas de responsabilidade dos seus objetos deixarao de existir, que as operações sobre eles deixarao de existir, que os principios e boas práticas deixarão de existir.
E se voce tem esses objetos, suas operacoes sobre eles, a maneira como eles interagem entre si, em que TDD pode ferir a implementação disso?
Se voce se refere a arquitetura como, a arquitetura dos seu dominio, nesse caso TDD ajuda muito, mesmo top-down. Nada que impede que voce desenhe a interface de cima pra baixo, mesmo nao havendo implementação, ou com implementacao fake, para que passe nos testes e a cada passo va detalhando e implementando as partes menores, sempre usando testes.
Voce pode inclusive, eu uso bastante, integrar varias funcionalidades, com teste unitarios. Desde que consiga isolar e remover da sua regra qualquer coisa que precise de acesso externo, como banco de dados, arquivos, web services e etc…
Então, TDD atrapalha na arquitetura? Antes, o que é arquitetura? Mas seja lá qual for a sua resposta, acho pouco provável que atrapalhe.