TDD: почему он возник?
От: student__  
Дата: 05.03.18 07:28
Оценка:
Почитал тут книжку о TDD, и подумал о его ценности и вообще зачем он нужен.
Как известно, технологии пр-ва ПО — ни сколько не наука, а набор ремесленнических навыков, припудренный толстым слоем ничем не подтверждённых хайпа и маркетинга.
В данном случае меня привлёк тезис о том, что TDD создан не столько для тестирования, сколько для инкрементального создания дизайна, лаконичного, понятного и простого для дальнейших изменений в любой момент разработки.
А юнит-тесты создаются как побочный эффект, полезный бонус.
Но если посмотреть на те примеры, которые приводятся как иллюстрация процесса с использованием TDD, все архитектурные изменения, вносимые в код в процессе рефакторинга на каждом цикле TDD, можно с таким же успехом выполнять без всякого TDD просто рисуя диаграммы на бумаге, обдумывая недостатки той или иной архитектуры, и внося в неё изменения в соотв. с вышеназванными принципами (лаконичность, простота изменения, самодокументированность).
Т.е. для любой последовательности изменений в рамках TDD существует последовательность изменений в рамках традиционных диаграмм в стиле UML. Только в случае с UML в результате получается проектная документация, а не юнит-тесты.

А т.к. применение TDD абсолютно не заменяет применение лучших практик (паттерны, проверенные на практике приемы реализации ООП-систем на конкретном языке), становится не понятно, почему TDD преподносится как замена традиционному подходу в проектировании ПО? Ну типа "сейчас уже никто не рисует диаграммы, а модно аджайл и TDD".
Re: TDD: почему он возник?
От: zubactik  
Дата: 05.03.18 08:17
Оценка: +1
Если мне не изменяет память, то у Кента Бека в книге "Экстремальное программирование. Разработка через тестирование" все не совсем так, а даже совсем не так. Разработка через тестирование (aka TDD) выполняется в 2 шага: на первом шаге пишет спецификацию в виде теста и заставляем выполниться тест самым простым и естественным образом, на втором шаге — делаем рефакторинг. Рефаткоринг именно с применением шаблонов, т.е. разделять тут проектирование и TDD неверно. TDD в данном случае, на мой взгляд, скорее поддержка и защита от дурака (чтобы быстро не наговнокодить и не сделать работу "на отвяжись"). Также не стоит забывать что хорошо спроектированнная система — хорошо и легко тестируется (это должно быть одной из фичей программного продукта), а написание тестов и позволяет держать кодовую базу в состоянии "хорошей" тестируемости.
Re: TDD: почему он возник?
От: vmpire Россия  
Дата: 05.03.18 10:08
Оценка: +4
Здравствуйте, student__, Вы писали:

__> не понятно, почему TDD преподносится как замена традиционному подходу в проектировании ПО? Ну типа "сейчас уже никто не рисует диаграммы, а модно аджайл и TDD".

Потому, что в наше время всё новое (или выкопанное из сундуков старое) всегда преподносится тем, кто придумал или выкопал, как революция, изменяющая мир.
А уж тем более, такими мощными маркетологами, как Бек, Сазерленд и т.п. Не обращайте внимания.
TDD — это просто один из инструментов, который в каких-то случаях подходит хорошо, в каких-то плохо.
Для создания архитектуры, в частности, он плох в большей части случаев.
А для упрощения поддержки и обеспечения большей свободы при модификации кода — чаще всего как раз подходит хорошо.
Re[2]: TDD: почему он возник?
От: student__  
Дата: 05.03.18 12:01
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, student__, Вы писали:


V>TDD — это просто один из инструментов, который в каких-то случаях подходит хорошо, в каких-то плохо.

V>Для создания архитектуры, в частности, он плох в большей части случаев.
V>А для упрощения поддержки и обеспечения большей свободы при модификации кода — чаще всего как раз подходит хорошо.
У меня такое ощущение, что больше всего TDD подходит для очень маленьких команд, в идеале с одним единственным разрабом.
Я не могу себе представить, как можно организовать работу нескольких человек, когда стадии циклов TDD так тесно зависимы друг от друга.
Re[2]: TDD: почему он возник?
От: Qulac Россия  
Дата: 05.03.18 12:20
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, student__, Вы писали:


__>> не понятно, почему TDD преподносится как замена традиционному подходу в проектировании ПО? Ну типа "сейчас уже никто не рисует диаграммы, а модно аджайл и TDD".

V>Потому, что в наше время всё новое (или выкопанное из сундуков старое) всегда преподносится тем, кто придумал или выкопал, как революция, изменяющая мир.
V>А уж тем более, такими мощными маркетологами, как Бек, Сазерленд и т.п. Не обращайте внимания.
V>TDD — это просто один из инструментов, который в каких-то случаях подходит хорошо, в каких-то плохо.
V>Для создания архитектуры, в частности, он плох в большей части случаев.
V>А для упрощения поддержки и обеспечения большей свободы при модификации кода — чаще всего как раз подходит хорошо.

TDD это ещё и другой способ взаимодействия с заказчиком. Классический TDD подразумевает постоянное и тесное взаимодействие с заказчиком во время всего периода разработки. В идеале — представитель заказчика есть часть команды. Целью является установка доверительных отношений, что бы не было такого: "Они там всего одну новую кнопку добавили, а цена взлетела на 1000$" Здесь заказчик видит как реализуется проект и какие издержки несёт исполнитель.
Программа – это мысли спрессованные в код
Re: TDD: почему он возник?
От: · Великобритания  
Дата: 05.03.18 12:24
Оценка: +2
Здравствуйте, student__, Вы писали:

__>Т.е. для любой последовательности изменений в рамках TDD существует последовательность изменений в рамках традиционных диаграмм в стиле UML. Только в случае с UML в результате получается проектная документация, а не юнит-тесты.

Как там говорилось?.. Популярность UML стала падать после того, как некоторые осознали, что неправильные диаграммы дают неправильный код.
Во-первых, с проектной документацией и диаграммами на бумаге есть серьёзная проблема: не существует способа проверить соответствие кода и документации. В документации может говориться одно, а работать оно может совершенно по-другому. Что делает ценность такой документации отрицательной — тратишь время на изучение, а потом выясняется что на самом деле всё не так. Набор тестов это по сути и есть проектная документация — но гарантированно правильная документация — формально проверяемая.
Во-вторых, диаграммы на бумаге очень плохо переживают изменение требований, что является необходимым в реалиях современной разработки ПО.
В-третьих, TDD не запрещает рисовать диаграммы — рисуй, если это действительно привносит какую-то ценность в проект. Обычно так и делают, но такие диаграммы требуются только на достаточно высоком уровне описания проекта, а юнит-тесты, например, могут описывать конкретную реализацию мельчайших модулей, под которую бумаги не хватит всё описывать.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Отредактировано 05.03.2018 12:25 · . Предыдущая версия .
Re[3]: TDD: почему он возник?
От: vmpire Россия  
Дата: 05.03.18 13:09
Оценка:
Здравствуйте, student__, Вы писали:

V>>Для создания архитектуры, в частности, он плох в большей части случаев.

V>>А для упрощения поддержки и обеспечения большей свободы при модификации кода — чаще всего как раз подходит хорошо.
__>У меня такое ощущение, что больше всего TDD подходит для очень маленьких команд, в идеале с одним единственным разрабом.
__>Я не могу себе представить, как можно организовать работу нескольких человек, когда стадии циклов TDD так тесно зависимы друг от друга.
Каждый делает часть проекта и тесты для неё. Ничего специально организовывать не надо. Ну, разве что, используемые фреймворки и архитектуру интеграционных тестов, если они есть.
Re[3]: TDD: почему он возник?
От: vmpire Россия  
Дата: 05.03.18 13:12
Оценка:
Здравствуйте, Qulac, Вы писали:


Q>TDD это ещё и другой способ взаимодействия с заказчиком. Классический TDD подразумевает постоянное и тесное взаимодействие с заказчиком во время всего периода разработки. В идеале — представитель заказчика есть часть команды.

Ага, я про этот "идеал" в каждой второй книжке вижу про аджайл и всё такое. Только вот одна проблема: это не работает. По крайней мере, в аутсорсинге (в продуктовой компании может сраюотать).
Не для того заказчик нанимал команду, чтобы с ней плотно работать, а для того, чтобы ему всё сделали
А передача знаний ещё и через "представителя", которого назначают от балды — вообще кошмар. Мы вместо этого бизнес-аналитиков используем, гораздо удобнее.
Re[4]: TDD: почему он возник?
От: Qulac Россия  
Дата: 05.03.18 13:18
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, Qulac, Вы писали:



Q>>TDD это ещё и другой способ взаимодействия с заказчиком. Классический TDD подразумевает постоянное и тесное взаимодействие с заказчиком во время всего периода разработки. В идеале — представитель заказчика есть часть команды.

V>Ага, я про этот "идеал" в каждой второй книжке вижу про аджайл и всё такое. Только вот одна проблема: это не работает. По крайней мере, в аутсорсинге (в продуктовой компании может сраюотать).
V>Не для того заказчик нанимал команду, чтобы с ней плотно работать, а для того, чтобы ему всё сделали
V>А передача знаний ещё и через "представителя", которого назначают от балды — вообще кошмар. Мы вместо этого бизнес-аналитиков используем, гораздо удобнее.

Это верно, работает этот способ скверно. Ну тем хуже для заказчика. Я вообще сталкивался с тем, что заказчик отказывался общаться со мной до сдачи проекта.
Программа – это мысли спрессованные в код
Отредактировано 05.03.2018 13:32 Qulac . Предыдущая версия .
Re: TDD: почему он возник?
От: mrTwister Россия  
Дата: 05.03.18 16:05
Оценка:
Здравствуйте, student__, Вы писали:

__>Почитал тут книжку о TDD, и подумал о его ценности и вообще зачем он нужен.

__>Как известно, технологии пр-ва ПО — ни сколько не наука, а набор ремесленнических навыков, припудренный толстым слоем ничем не подтверждённых хайпа и маркетинга.
Ты так говоришь, как-будто "набор ремесленнических навыков" — это плохо.

__>Но если посмотреть на те примеры, которые приводятся как иллюстрация процесса с использованием TDD, все архитектурные изменения, вносимые в код в процессе рефакторинга на каждом цикле TDD, можно с таким же успехом выполнять без всякого TDD просто рисуя диаграммы на бумаге, обдумывая недостатки той или иной архитектуры, и внося в неё изменения в соотв. с вышеназванными принципами (лаконичность, простота изменения, самодокументированность).


Теоретически можно писать код сразу без багов, но на практике то трудно и зачем-то придумали статический анализ кода, который автоматически ловит некоторые баги. С TDD также, он автоматически ловит некоторые баги дизайна.
лэт ми спик фром май харт
Re[4]: TDD: почему он возник?
От: student__  
Дата: 05.03.18 16:56
Оценка:
Здравствуйте, vmpire, Вы писали:
V>Каждый делает часть проекта и тесты для неё. Ничего специально организовывать не надо. Ну, разве что, используемые фреймворки и архитектуру интеграционных тестов, если они есть.
Чтобы иметь части проекта, надо сначала определиться с архитектурой. А её в начале нет, если она создаётся в процессе ТДД.
Или в общих чертах архитектура есть, но она на столько концептуальна и эфемерна, что на орактике бесполезна, и не позволяет приступить к непосредственной реализации.

А процесс ТДД не понятно как распараллелить. Вот три стадии цикла ТДД:

1) написание теста, который заведомо не выполнится успешно (другие в ТДД не комильфо, потому что каждый новый тест должен предварять соотв. ему изменения в коде);
2) исправления в коде по принципу наименьшего сопротивления;
3) рефакторинг кода по результатам 2), если он нужен.

При выполнении п.2) каждого цикла, архиектура кода потенциально может измениться. И, даже если дизайн ООП системы не меняется в конкретном цикле, нужно делать рефакторинг или нет — зависит от результатов п.1) и п.2).
И не важно, на сколько малы изменения — суть зависимости это не меняет.
Т.о., мало того, что вполнение каждого последующего цикла зависит от результата предыдущего, стадии внутри цикла тоже зависят друг от друга.
Re[2]: TDD: почему он возник?
От: student__  
Дата: 05.03.18 17:03
Оценка:
Здравствуйте, mrTwister, Вы писали:
T>Ты так говоришь, как-будто "набор ремесленнических навыков" — это плохо.
Нет, я не говорю, что это плохо. Просто теорией здесь и не пахнет — только набор советов, разной степени полезности, с отсутствием повторяемости на однотипных проектах.
Впрочем, как и во всём, что включает человеческий фактор.
T>Теоретически можно писать код сразу без багов, но на практике то трудно и зачем-то придумали статический анализ кода, который автоматически ловит некоторые баги. С TDD также, он автоматически ловит некоторые баги дизайна.
Написание кода здесь ни при чём, речь о дизайне. С моделями в общем случае работать проще, чем с самой системой, пусть даже на простых системах это не так.
Re[3]: TDD: почему он возник?
От: mrTwister Россия  
Дата: 05.03.18 20:09
Оценка:
Здравствуйте, student__, Вы писали:

__>Нет, я не говорю, что это плохо. Просто теорией здесь и не пахнет — только набор советов, разной степени полезности, с отсутствием повторяемости на однотипных проектах.


Если бы советы были универсальными и повторяемым, то программистов бы давно автоматизировали. У врачей, думаешь, лечение всегда работает с одинаковым результатом на однотипных больных?


__>Написание кода здесь ни при чём, речь о дизайне.

Написание кода здесь при том, что это пример того, что человек ошибается и использует инструменты обнаружения ошибок. TDD — это такой же инструмент поиска ошибок в дизайне, как компилятор в синтаксисе.

__>С моделями в общем случае работать проще, чем с самой системой, пусть даже на простых системах это не так.

С некоторыми проще, с некоторыми сложнее, но в данном контексте это не важно, так как TDD не запрещает рисовать диаграммы, если есть желание.
лэт ми спик фром май харт
Re[5]: TDD: почему он возник?
От: vmpire Россия  
Дата: 06.03.18 08:38
Оценка:
Здравствуйте, student__, Вы писали:

____>А процесс ТДД не понятно как распараллелить. Вот три стадии цикла ТДД:


__>1) написание теста, который заведомо не выполнится успешно (другие в ТДД не комильфо, потому что каждый новый тест должен предварять соотв. ему изменения в коде);

__>2) исправления в коде по принципу наименьшего сопротивления;
__>3) рефакторинг кода по результатам 2), если он нужен.

__>При выполнении п.2) каждого цикла, архиектура кода потенциально может измениться. И, даже если дизайн ООП системы не меняется в конкретном цикле, нужно делать рефакторинг или нет — зависит от результатов п.1) и п.2).

__>И не важно, на сколько малы изменения — суть зависимости это не меняет.
__>Т.о., мало того, что вполнение каждого последующего цикла зависит от результата предыдущего, стадии внутри цикла тоже зависят друг от друга.
Если рассматривать ситуацию сугубо теоретически — то да, любой новый код (даже безотносительно TDD) может поменять архитектуру всей системы и результаты работы остальных членов команды станут нерелевантными.
Но практика говорит, что 99% работы программистов — локальные и не влияют на другие части системы.
Касательно TDD — если каждый цикл TDD (или даже каждый десятый) приводит к изменению архитектуры системы — значит команду нужно разогнать и нанять нормальных опытных разработчиков.
Потому, что если они через TDD пытаются создать архитектуру сложной системы, не уделяя внимания системному проектированию, то навыки данной команды для данного проекта недостаточны.
Re: TDD: почему он возник?
От: Vladek Россия Github
Дата: 07.03.18 07:33
Оценка: 13 (1)
Здравствуйте, student__, Вы писали:

__>Почитал тут книжку о TDD, и подумал о его ценности и вообще зачем он нужен.


http://geepawhill.org/five-underplayed-premises-of-tdd-2/
Re[3]: TDD: почему он возник?
От: Кодт Россия  
Дата: 07.03.18 15:19
Оценка:
Здравствуйте, student__, Вы писали:

__>У меня такое ощущение, что больше всего TDD подходит для очень маленьких команд, в идеале с одним единственным разрабом.

__>Я не могу себе представить, как можно организовать работу нескольких человек, когда стадии циклов TDD так тесно зависимы друг от друга.

Проект хромиум — обсыпан огромным количеством тестов со всех сторон. И каждая правка сопровождается добавлением новых тестов.
Возможно, на ранней стадии там была боль и унижение при организации работы, а сейчас отлично всё организовано.
Перекуём баги на фичи!
Re: TDD: почему он возник?
От: rm822 Россия  
Дата: 12.03.18 23:05
Оценка: +2
__>Как известно, технологии пр-ва ПО — ни сколько не наука, а набор ремесленнических навыков, припудренный толстым слоем ничем не подтверждённых хайпа и маркетинга.
Не надо грязи. Это инженерная дисциплина, а хайп и маркетинг вещи отдельные и липнут ко всему от науки до религии.

__>А т.к. применение TDD абсолютно не заменяет применение лучших практик (паттерны, проверенные на практике приемы реализации ООП-систем на конкретном языке), становится не понятно, почему TDD преподносится как замена традиционному подходу в проектировании ПО?

Да, не заменяет. ТДД был в моде году эдак в 2004, тогда ходили шутки про архитекторов от космонавтики, проектирующих чудовищные иерархии-всемогутеры.
И каждый 2й программист мнил себя таким
На фоне этого разврата ТДД _мог_ давать здоровый минимализм.
Re: TDD: почему он возник?
От: landerhigh Пират  
Дата: 21.03.18 22:30
Оценка: +1
Здравствуйте, student__, Вы писали:

__>Почитал тут книжку о TDD, и подумал о его ценности и вообще зачем он нужен.

__>Как известно, технологии пр-ва ПО — ни сколько не наука, а набор ремесленнических навыков, припудренный толстым слоем ничем не подтверждённых хайпа и маркетинга.

Разработка ПО — это очень сложная инженерная дисциплина.
Во всех сложных инженерных отраслях юнит-тестирование применяется в обязательном порядке. Категорически без исключений. И TDD, кстати, тоже встречается нередко, и чем сложнее проект, тем больше вероятность увидеть применение TDD.

__>Т.е. для любой последовательности изменений в рамках TDD существует последовательность изменений в рамках традиционных диаграмм в стиле UML. Только в случае с UML в результате получается проектная документация, а не юнит-тесты.


"В случае с UML" почему-то норовит получиться проектная документация к какому-то другому проекту. Потому что поддержание ее в актуальном состоянии в определенный момент усложняется до уровня "а ну его нафиг".
Да и не заменяет проектная документация тесты. Более того, актуальный UML нынче тупо доксигеном генерируется. Не нужен он обычно никому.

__>А т.к. применение TDD абсолютно не заменяет применение лучших практик (паттерны, проверенные на практике приемы реализации ООП-систем на конкретном языке), становится не понятно, почему TDD преподносится как замена традиционному подходу в проектировании ПО?


"Традиционный подход к проектированию ПО"? А что это? Это когда 10 месяцев "уже почти все готово", на 11 вдруг вспоминается, что "нихрена же не работает" и "нужно полностью переписать архитектуру"?
www.blinnov.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.