TDD + DDD + BDD. Причем все эти *DD можно применять вместе, и даже лучше применять вместе, так как тот же BDD это не столько про тесты, сколько про процесс разработки в целом а DDD это для более качественного проектирования и для того, что бы на митингах все говорили на одном языке (и внутри команды так же, и да, продукт-оунер тоже будет вас понимать). TDD же очень общая идея, мол тесты перед кодом. Это позволяет лучше проектировать код в небольших масштабах, но можно и на интеграционных тестах TDD построить.