Inside-Out e Outside-In são termos bastante raros, mais frequentemente eu ouvi / li sobre escola clássica e escola de Londres .
-
De dentro para fora (Escola clássica, de baixo para cima ): você começa no nível de componente / classe (dentro) e adiciona testes aos requisitos. À medida que o código evolui (devido a refatorações), novos colaboradores, interações e outros componentes aparecem. O TDD guia o design completamente.
-
Outside-In (escola de Londres, de cima para baixo ou "mockist TDD" como Martin Fowler chamaria isso: você sabe sobre as interações e os colaboradores de antemão (especialmente aqueles nos níveis mais altos) e começa lá (nível superior), zombando das dependências necessárias. Com cada componente finalizado, você se move para os colaboradores que já foram burlados e começa com o TDD novamente, criando implementações reais (que, embora usadas, não eram necessárias antes, graças a abstrações ). Note que a abordagem outside-in combina bem com o princípio YAGNI .
Nenhuma das abordagens é a única e ; ambos têm o seu lugar dependendo do que você faz. Em grandes soluções corporativas, onde partes do design vêm de arquitetos (ou existem de antemão), pode-se começar com a abordagem "estilo londrino". Por outro lado, quando você se depara com uma situação em que não tem certeza de como seu código deve parecer (ou como ele deve se encaixar em outras partes do sistema), pode ser mais fácil começar com algum componente de baixo custo e deixá-lo evoluir à medida que mais testes, refatorações e requisitos forem introduzidos.
O que você usa, geralmente é situacional.
Para ler mais, há postagem do grupo do Google com uma discussão bastante interessante sobre como essa distinção (pode ter) se originou e porque Londres pode não ser o nome mais apropriado.