Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Чем плоха концепция TDD? (число прочтений - 5817 )
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Чем плоха концепция TDD?
05. Мая 2010 :: 10:42
Печать  
Разведем холивар тут Улыбка
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #1 - 05. Мая 2010 :: 12:11
Печать  
НерешительныйБуду первым.
Холиварить не хочу.
С краткой теорией TDD знаком. Против нее ничего не имею.

Но хотельсь бы услышать коментарии специалистов по такому моменту:
Есть некая Программа обладающая по мнению Программиста1 функциями A и B.
Программист1 покрывает эти функции тестами. Ок.
Программист1 решил внести функцию C. Соответственно подготовил тест, реализовал C. Прошел тесты для A, B и C.
Все вроде бы хорошо, но Программист1 не учел (потому что не знал), что Программа обладает еще и
функцией D, которая поломалась из-за C.
С точки зрения теории TDD, кмк, этого бы не произошло если бы Программист1 писал Программу начиная с ХелоуВорд.
Но в нашем примере это не так - был еще и Программист0.
Как избежать подобных проблем? Какие есть теории?
Стоит ли вообще полагаться на тесты?
Стоит ли большую часть времени разработки тратить на разработку теста, если вдруг окажется что тесты врут?
Или может нужно смотреть гораздо шире тестов и пытаться разумом и/или интуицией охватить последствия внесения функции C ?
  

1&&2&&3
Наверх
 
IP записан
 
vandalsvq
1c++ power user
Отсутствует


Я всего лишь als-особиратель
;-)

Сообщений: 2487
Местоположение: Уфа
Зарегистрирован: 18. Июля 2007
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #2 - 05. Мая 2010 :: 12:40
Печать  
Дмитрий, ты разорвал мне мозг... для меня это проблема...
  

Отхожу от дел. Долго и мучительно.
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #3 - 05. Мая 2010 :: 12:47
Печать  
vandalsvq писал(а) 05. Мая 2010 :: 12:40:
ты разорвал мне мозг
эээ... в хорошем или плохом смысле?
  

1&&2&&3
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #4 - 05. Мая 2010 :: 13:06
Печать  
С теорией не знаком, но утверждение trad писал(а) 05. Мая 2010 :: 12:11:
С точки зрения теории TDD, кмк, этого бы не произошло если бы Программист1 писал Программу начиная с ХелоуВорд.

не похоже на правду.  Нерешительный
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #5 - 05. Мая 2010 :: 13:23
Печать  
berezdetsky писал(а) 05. Мая 2010 :: 13:06:
С теорией не знаком, но утверждение trad писал(а) 05. Мая 2010 :: 12:11:
С точки зрения теории TDD, кмк, этого бы не произошло если бы Программист1 писал Программу начиная с ХелоуВорд.

не похоже на правду.  Нерешительный
Возможно и ошибаюсь. Но из краткого изложения теории я сделал такой вывод.
  

1&&2&&3
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #6 - 05. Мая 2010 :: 13:47
Печать  
trad писал(а) 05. Мая 2010 :: 12:11:
Стоит ли вообще полагаться на тесты?

Надо здраво оценивать, что дают тесты, и чего они не дают.

Тест может сказать лишь одно из двух:
1. "Функционал А - работает"
2. "Функционал А - не работает"

Никакой информации о работоспособности функционала "Б" тест дать не может.

===================================

Исходя из этого - у нас возможны два варианта.

1. У нас есть тесты на 100% заявленного функционала.
Помимо прочего, это означает, что 100% функционала как-то вообще заявлено. То есть или функционала крайне мало, или функционал крайне формален (= весьма далек от работы с людьми) или так не бывает. Не рассматриваем.

2. У нас нет тестов на какую-то часть функционала.
В такой ситуации, успешное прохождение всех тестов говорит нам лишь о том, что проверяемый функционал, в условиях проверки - работает. И выводы о том, что программа вся работает корректно, что рефакторинг проведен безопасно, и всякое такое прочее... такие выводы нельзя делать только на основе прохождения неполного набора тестов.
  
Наверх
www  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #7 - 05. Мая 2010 :: 13:47
Печать  
trad

Собственно, я оспаривал само утверждение, а не точку зрения теории на него. Если теория TDD так утверждает - это (холивара ради) проблемы теории.  Улыбка

Т.е. если существует ошибка, тестировать которую Программисту1 просто не придёт в голову - соответствующий тест не будет написан. Возьмём недавний пример - artbear не мог представить себе, что кто-то предпочтёт штатные конструкторы 1С конструкторам 1С++. И даже не считает это ошибкой - тесты ведь проходят..  Смех

Добавлено: если чё, я не против TDD. Хуже от него точно не будет.  Улыбка
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #8 - 05. Мая 2010 :: 13:55
Печать  
Ну и вдобавок: серебрянной пули нет. Апологеты XP, кстати, тщательно подчеркивают это. Ну и давайте не забывать, что само по себе автотестирование и TDD безусловно дают результаты (Миш, представь, что автотестов вообще бы не было? Помнишь проблемы с формексом?). Но кумулятивный эффект XP достигается за счет одновременного применения довольно большого количества практик, помимо TDD. Таких как парное программирование, метафора системы, постоянный рефакторинг, коллективное владение кодом и многих других.
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #9 - 05. Мая 2010 :: 14:09
Печать  
berezdetsky писал(а) 05. Мая 2010 :: 13:47:
Собственно, я оспаривал само утверждение, а не точку зрения теории на него.
Нерешительный в том утверждении и была точка зрения теории.
  

1&&2&&3
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #10 - 05. Мая 2010 :: 14:18
Печать  
trad писал(а) 05. Мая 2010 :: 13:23:
berezdetsky писал(а) 05. Мая 2010 :: 13:06:
С теорией не знаком, но утверждение trad писал(а) 05. Мая 2010 :: 12:11:
С точки зрения теории TDD, кмк, этого бы не произошло если бы Программист1 писал Программу начиная с ХелоуВорд.

не похоже на правду.  Нерешительный
Возможно и ошибаюсь. Но из краткого изложения теории я сделал такой вывод.


Невнимательно читал. Я помогу.
Цитата:
Большая часть нежелательных побочных и отдалённых эффектов от вносимых в программу изменений отслеживается именно на этом этапе, с помощью достаточно полного набора тестов.


Не "все", а "большая часть". Жизнь - удивительно сложная штука. И программирование - это бесконечная и безнадежная борьба с этой сложностью.
  
Наверх
www  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #11 - 05. Мая 2010 :: 14:24
Печать  
fez
Вот, а из "довольно большого количества практик" у нас применяется только "коллективное владение кодом" (и оно, кстати, хорошо помогает в разборе полетов и нахождении крайнего) и поэтому TDD тут, наверное, не особо помогает.

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

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #12 - 05. Мая 2010 :: 14:29
Печать  
fez писал(а) 05. Мая 2010 :: 14:18:
trad писал(а) 05. Мая 2010 :: 13:23:
berezdetsky писал(а) 05. Мая 2010 :: 13:06:
С теорией не знаком, но утверждение trad писал(а) 05. Мая 2010 :: 12:11:
С точки зрения теории TDD, кмк, этого бы не произошло если бы Программист1 писал Программу начиная с ХелоуВорд.

не похоже на правду.  Нерешительный
Возможно и ошибаюсь. Но из краткого изложения теории я сделал такой вывод.


Невнимательно читал...
...Не "все", а "большая часть"

Ах, вот о чем Иван. Смущённый
  

1&&2&&3
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #13 - 05. Мая 2010 :: 15:03
Печать  
trad писал(а) 05. Мая 2010 :: 14:24:
fez
Вот, а из "довольно большого количества практик" у нас применяется только "коллективное владение кодом" (и оно, кстати, хорошо помогает в разборе полетов и нахождении крайнего) и поэтому TDD тут, наверное, не особо помогает.

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

Цитата:
А по первопричинной ветке, мое имхо, нужно просто признать ошибку (ну ведь ошибка же) и без отговорок зафиксировать/исправить ее. Без апелляции к TDD как с одной так и с другой стороны.

Подпишусь под каждым словом.
  
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #14 - 06. Мая 2010 :: 04:07
Печать  
trad писал(а) 05. Мая 2010 :: 14:24:
А по первопричинной ветке, мое имхо, нужно просто признать ошибку (ну ведь ошибка же) и без отговорок зафиксировать/исправить ее. Без апелляции к TDD как с одной так и с другой стороны.

1. Я про ТДД в применении к данной ошибке вообще не говорил Улыбка
я только ответил Михаилу, который и заявил про ТДД, что наличие тестов все-таки намного лучше, чем их отсутствие.
2. Я показал, что в случае, который я считаю нормальным для ООП (создание внутренних данных в конструкторе), ошибка вообще не возникает. т.е. показал простой путь обхода.
3. Как неоднократно говорил, у меня сейчас нет времени на 77, я практически полностью сижу на 8. Соответственно, нет времени на поддержку 1С++, к сожалению.
поэтому я и показал решение из п.2 для того, чтобы народ видел хотя бы возможность обхода проблемы.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Чем плоха концепция TDD?
Ответ #15 - 13. Мая 2010 :: 20:00
Печать  
Поддержу тему (с небольшим запозданием).

Я нахожу данное обсуждение полезным.
Хотя, пожалуй, придется признать, что холивара не получилось Подмигивание; но оно и к лучшему.

Почему я вообще вспомнил TDD?
Да потому что пример уж больно хорош.

Давайте рассмотрим проблему последовательно:
В процессе "рефакторинга":

1. некий функционал потерян
2. тестов на потерянный функционал не существует
3. каких - либо превентивных указаний на то, что данный конкретный функционал будет потерян, нет

Что это значит?
Это значит, что автор даже не предполагал, что такой функционал существует и что его необходимо сохранить или сознательно от него отказаться с соответствующим документальным оформлением.

Почему?
Проблема ли это именно TDD?
Нет.
TDD здесь - это всего лишь конечная миля.

Это чистой воды проблема эффективности применения логики в разработке, это проблема многомерности и многоплановости мышления.
И в этом плане, упомянув TDD я как раз и хотел, чтобы мы пришли к вопросу о важности многомерной логики в разработке.
Вообще, мой опыт говорит о том, что логика без TDD дает результат лучше, чем TDD без логики.

Дима задал очень правильный вопрос в своем самом первом посте.
Цитата:
Или может нужно смотреть гораздо шире тестов и пытаться разумом и/или интуицией охватить последствия внесения функции C ?

Мы знаем, что наш разум имеет пределы, в том числе и в количестве неких "регистров" и "операций", которыми мы можем одновременно оперировать.
Это не только в программировании, это вообще в жизни.
Значит, при определенных уровнях сложности, наше мышление будет давать сбой, либо требовать чрезмерных ресурсов для безошибочной работы.

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

Управление сложностью - это вопрос, которым надо заниматься, который интересно обсуждать.
И не только применительно к программированию.

Я с удовольствием читаю соседние темы про тестирование.
Впервые за несколько лет я вижу на форуме не только функциональные, но и весьма интересные обсуждения.
В общем-то, у нас давно полно тем, которые мы готовы сформулировать вполне профессионально.
И если, несмотря на нехватку времени, у нас доходят до этого руки - это надо отметить. Улыбка


P.S.
Артур, твой код нам здесь попался на глаза совершенно случайно.
У меня нет цели анализировать именно твой код или именно твой стиль разработки.
Да, он не ложится нормально на мой шаблон разработки, мне с ним трудно работать.
Но без него у меня не появились бы вопросы (о совместимости стилей и шаблонов мышления, например), на которые я бы не стал искать ответы.
Мы же не ищем легких путей, не так ли? Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
fez
Forum Administrator
1c++ power user
Отсутствует


I wanted to cry, but the
tears wouldn't come

Сообщений: 2712
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #16 - 14. Мая 2010 :: 05:08
Печать  
kms писал(а) 13. Мая 2010 :: 20:00:
Почему я вообще вспомнил TDD?
Да потому что пример уж больно хорош.
[...]
Проблема ли это именно TDD?
Нет.

Ай, маладца Улыбка
Да, я передергиваю, но уж больно хорошо, согласись Улыбка

kms писал(а) 13. Мая 2010 :: 20:00:
Вообще, мой опыт говорит о том, что логика без TDD дает результат лучше, чем TDD без логики.

Согласен с тобой. Мой опыт говорит о том же. Непонятно только одно: почему нужно отказываться от одного в пользу другого? Почему нельзя применять TDD вместе с логикой? Где логика такого решения? Подмигивание

kms писал(а) 13. Мая 2010 :: 20:00:
Мы знаем, что наш разум имеет пределы, в том числе и в количестве неких "регистров" и "операций", которыми мы можем одновременно оперировать.
Это не только в программировании, это вообще в жизни.
Значит, при определенных уровнях сложности, наше мышление будет давать сбой, либо требовать чрезмерных ресурсов для безошибочной работы.

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

Управление сложностью - это вопрос, которым надо заниматься, который интересно обсуждать.
И не только применительно к программированию.

Извините за оверквотинг в данном конкретном случае, но у меня просто рука не поднимается удалить хоть что-то из данного текста.

Так вот, что у меня есть сказать про сложность, проектирование и разум.

Во-первых. Когда я стал практиковать TDD - я научился проектировать гораздо лучше. Именно потому, что само проектирование начало происходить до того, как была написана хоть строчка кода. А не как это бывало раньше: "а, ща быстро сляпаю, раз, раз, упс... не получилось... ну вот тут костылик прилепим, раз, раз, упс... не получилось... мда, надо подумать... О, надо делать вот так... но уже столько кода - не выкидывать же..."

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

Цитата:
это надо отметить.

наливай
« Последняя редакция: 14. Мая 2010 :: 08:13 - fez »  
Наверх
www  
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #17 - 14. Мая 2010 :: 07:02
Печать  
А я сейчас читаю Е-буки по Ruby on Rails (т.к. на данном форуме увидел ссылку на Redmin, понравилось, сейчас стал смотреть как оно работает). Там есть несколько очень интересных концепций, в частности - разработка изначально основывается на Паттерне MVC (Модель, представление, контроллер), еще интересная вещь использование соглашений. Т.е. если ты пишешь код в соответствии с соглашениями, то "конструктор", например scaffold, может за тебя сделать бОльшую часть шаблонного кода (создает таблицу, с именем контрола, заполняет ее указанными полями, создает Представления, для отображения, редактирования, удаления). Можно, конечно, и руками все это прописать... Относительно тестов - возможность использования тестов (папки, необходимые контроллеры) генерируется сразу при создании проекта. Очень любопытная концепция.
  
Наверх
ICQ  
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Чем плоха концепция TDD?
Ответ #18 - 14. Мая 2010 :: 07:21
Печать  
Salimbek писал(а) 14. Мая 2010 :: 07:02:
А я сейчас читаю Е-буки по Ruby on Rails ...


данное поведение "Рельсов" исходит больше из Гибкой методологии разработки

однако - подобная генерация прототипов тестов приводит к тому что тесты пишутся позже кода  (причем даже в книгах по Rails разделы тестирования уводятся в конец) или не пишутся вовсе

Цитата:
каждая итерация сама по себе выглядит как программный проект в миниатюре, и включает все задачи, необходимые для выдачи мини-прироста по функциональности: планирование, анализ требований, проектирование, кодирование, тестирование и документирование.


ЗЫ применительно к Редмайн - большинство плагинов тестами не покрыто вовсе - я уже 2 года слежу за изменениями проекта и только один человек из команды разработки использует TDD: это основной разработчик Жан-Филип Ланг (Jean-Philipe Lang)
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать