http://en.wikipedia.org/wiki/Agile_software_development
http://en.wikipedia.org/wiki/Test-driven_development
Короче говоря, TDD и Agile действительно сосредоточены на разных аспектах и не исключают друг друга.
TDD очень сфокусирован на том, как пишется код (и, таким образом, имеет тенденцию быть направленным исключительно на рабочие циклы отдельных или небольших групп разработчиков).
Agile действительно сосредоточен на общем процессе разработки, а не только на том, как код пишется и тестируется (и, таким образом, уделяет много внимания управлению проектами и группами разработчиков, в отличие от того, как именно конкретный разработчик пишет код).
Я сыграю адвоката дьявола и скажу: да. TDD и Agile - это одно и то же, только в разных масштабах.
Потерпите меня, здесь.
Во-первых, TDD побуждает вас иметь план того, чего вы хотите достичь, прежде чем вы его достигнете. Вы не думаете о , как вы собираетесь этого достичь. Вы просто думаете о том, как продемонстрировать ценность того, что вы собираетесь написать, и решаете, как вы это знаете. Это очень похоже на то, как идеально подбираются проекты и собираются требования в Agile-методологиях.
Затем вы делаете минимум, необходимый для получения отзыва о работе. В TDD это означает красную или зеленую полосу. На более высоком уровне методологии Agile побуждают вас продемонстрировать и получить обратную связь от заинтересованных сторон или (предпочтительно) выпустить в производство и посмотреть, работает ли это и использует ли кто-нибудь.
Затем вы решаете, что делать дальше, и пишете следующую часть плана.
Agile-методологии также могут использовать оценку и расстановку приоритетов, но в основном они связаны с назначением бюджетов и выяснением того, стоит ли делать эту работу в первую очередь - что разработчики, естественно, делают в небольших масштабах.
Гибкие методологии являются итеративными, то есть периоды планирования, реализации, доставки и обратной связи цикличны. То же самое и TDD, с теми же шагами.
Гибкие методологии обычно делают упор на общение, беседу и легкую документацию.TDD также можно использовать как форму документации, особенно если вы превратите имена тестов в осмысленные предложения и используете тот же язык, который использует бизнес, вместе с реалистичными примерами. Это также может стимулировать общение и беседу.
Гибкие методологии поощряют размышления и извлечение уроков из прошлого. У TDD есть эта прекрасная красная полоса, которая поможет вам сделать это очень быстро.
Если вы увеличите TDD, вы получите приемочные испытания или сценарии в стиле BDD. Далее вы начинаете изучать внедрение функций и другие формы анализа на основе видения. Еще дальше вы смотрите на то, сохранит ли выпущенный проект вашу долю рынка, или предоставит ли вам желаемые варианты в будущем, или достигнет того, что было его первоначальным видением. Тесты становятся больше, но процесс написания достаточного количества, получения отзывов и непрерывного обучения остается прежним, независимо от методологии Agile.
Все правила, которые помогают Agile добиться успеха в большом масштабе, могут быть применены к TDD в малых масштабах, и наоборот. (Я очень стараюсь придумать какие-либо исключения из этого и не могу).
Итак, нет. Agile не отличается от TDD. Это просто TDD-сделано-больше.
Agile - это все, что соответствует перечисленным здесь значениям - http://agilemanifesto.org/
XP ( Extreme Programming ) - методология что квалифицируется как Agile. Есть и другие (Scrum, Crystal, и т. Д.)
TDD (Test Driven Development) - это особая инженерная практика из XP, которая представляет собой способ написания кода + дизайна накопителя инкрементными порциями. Сначала вы пишете тест, проходите его с помощью простейших возможных изменений, а затем проводите рефакторинг для улучшения структуры / дизайна. Вы делаете это в цикле, пока не закончите.
Различия огромны, потому что я думаю, что есть очень простое различие:
Agile - это философия, тогда как TDD - это особая методология.
Существует множество гибких способов работы, но в целом вы либо используете TDD, либо нет.
Вы можете быть гибким, не используя TDD (или его вариант), и вы можете использовать TDD, не будучи гибким (хотя я был бы несколько удивлен).