LINUX.ORG.RU

А вы используете TDD в своих проектах?

 


0

3

Не модульные тесты (функциональные, интеграционные), не регресс-тестирование, не test-first, а именно test driven?

Кто-нибудь вообще понимает разницу между этими понятиями?

Странно, что поиск по ЛОРу находит не такие уж древние темы, в которых суровые самоуверенные дядьки только пытаются придумать контраргументы (но не могут, лол). ИРЛ такое сопротивление встречал только в паре контор, что характерно, обе поддерживают цппшные трупопроекты десятилетней давности.

А несколько компаний (в т.ч. довольно серьёзных) в тестовых заданиях вообще указывали обязательно разработку через тестирование проводить.

Почему «гуру программирования» не сумели разобраться в такой простой технологии? Там же вся методика в 100 страницах разжёвана. Неужели туча лишних телодвижений по проектированию и отладке - это действительно так интересно?

★★★
Ответ на: комментарий от pulo

А тебе зачем? Чаще всего на C++, Python, Java + знаю, но редко пользую ещё несколько. Или ты ждал ответа «на русском/английском»?

schizoid ★★★
() автор топика
Ответ на: комментарий от schizoid

Ничего не ждал, просто поинтересовался. К сожалению не знаю больших Open Source проектов где это применяют и можно посмотреть на их код, не в курсе?

pulo
()
Ответ на: комментарий от schizoid

примеры С/C++ проектов созданных с использованием TDD были бы интересны.

Есть SQLite, boost, httpd

И это TDD? O_o При том, что

schizoid> Не модульные тесты (функциональные, интеграционные), не регресс-тестирование, не test-first, а именно test driven?

По-моему, ты запутался в показаниях.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

А как, по-твоему, должно проявляться ПРОЕКТИРОВАНИЕ в результирующем исходном коде? Или там заметка должна быть в ридми: «Вы, конечно, видите здесь только модульные тесты, но поверьте на слово, они были написаны в рамках TDD»?

schizoid ★★★
() автор топика
Ответ на: комментарий от schizoid

Или там заметка должна быть в ридми: «Вы, конечно, видите здесь только модульные тесты, но поверьте на слово, они были написаны в рамках TDD»?

Должно быть что-то большее, чем «вы видите только модульные тесты, но поверьте, код был написан в рамках TDD».

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

В начале разработки, если слишком много неопределенностей:

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

Когда задача «простая» - TDD прокатит. Когда много неясностей - это будет напоминать попытку по теням на стене угадать звук 3D-модели.

Подобное в том или ином виде говорилось уже много раз. Ничего нового.

Vit ★★★★★
()
Ответ на: комментарий от dizza

Если сильно обобщать подход, можно дойти до того, что прототип - это такой большой тест, ага.

«Ос - это такой большой полосатый мух»

Vit ★★★★★
()
Ответ на: комментарий от Vit

Когда задача «простая» - TDD прокатит. Когда много неясностей - это будет напоминать попытку по теням на стене угадать звук 3D-модели.

Дабы по будоражить воображение скажу, что есть top-down, а есть bottom-up подход в написании тестов. Так вот TDD это bottom-up, то есть тесты на клиентское API пишутся в последнюю очередь.

dizza ★★★★★
()
Ответ на: комментарий от tailgunner

Должно быть что-то большее, чем «вы видите только модульные тесты, но поверьте, код был написан в рамках TDD».

Например?

schizoid ★★★
() автор топика
Ответ на: комментарий от dizza

А почему черновики не делают начисто сразу? Потому что смысла нет, и лишнего времени тоже.

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

Я так понимаю, что для подобных случаев настоящие джедаи сначала пишут тесты для тестов.

Vit ★★★★★
()
Ответ на: комментарий от Vit

Рисование тестов предполагает, что вы уже правильно понимаете задачу, как минимум.

Откуда такое правило? Никто не запрещает писать неправильный тест (помним, что операция написания теста относительно легкая).

dizza ★★★★★
()
Ответ на: комментарий от Vit

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

dizza ★★★★★
()
Ответ на: комментарий от schizoid

Лгать здесь запрещено. Ты подонок.

anonymous
()
Ответ на: комментарий от schizoid

Тот же sqlite я наблюдал с самого рождения. Никаким TDD там и не пахло, и тесты появились далеко не сразу.

anonymous
()
Ответ на: комментарий от schizoid

Например, в git должна быть история, демонстрирующая идиотизм разработчиков (тесты вперед кода).

anonymous
()
Ответ на: комментарий от Vit

Я прототипы тоже использую(без тестов).

anonymous
()
Ответ на: комментарий от Vit

Так делай прототипы, а TDD используй уже после их выбрасывания для основной разработки. В чем проблема-то?

anonymous
()
Ответ на: комментарий от anonymous

Не, они не осиливают даже простые юнит-тесты. Просто херачат говнокод и с пеной у рта утверждают, что не хотят тратить время на написание тестов.

anonymous
()
Ответ на: комментарий от schizoid

Должно быть что-то большее, чем «вы видите только модульные тесты, но поверьте, код был написан в рамках TDD».

Например?

Например, «только проекты, использующие TDD, обладают свойством $X; проект $Y обладает свойством $X; следовательно, $Y написан с использованием TDD».

tailgunner ★★★★★
()
Ответ на: комментарий от dizza

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

Vit ★★★★★
()
Ответ на: комментарий от dave

Мне TDD кажется странноватой идеей. Тесты до появления кода можно написать для кода, поведение которого полностью понятно. Но много ли такого кода? Мне кажется, что нет. Любая разработка итеративна.

tailgunner ★★★★★
()
Ответ на: комментарий от dizza

О да, если разработку вебсайта начать с того, чтобы написать пинг, это нас офигенно продвинет в работе, и добавит тонну пользы. Давайте тогда в качестве входной точки используем установку операционной системы, или факт устройства на работу. А еще лучше - факт рождения.

Vit ★★★★★
()
Ответ на: комментарий от schizoid

Многие варианты второго используют первое.

Deleted
()
Ответ на: комментарий от anonymous

Проблем нет. Меня просили объяснить, что не так с TDD.

PS. А вот если я прототип не выбросил, а начал прорабатывать, то получается что нарушил методику TDD и все будет плохо :)

Vit ★★★★★
()
Ответ на: комментарий от tailgunner

Мне TDD кажется странноватой идеей. Тесты до появления кода можно написать для кода, поведение которого полностью понятно. Но много ли такого кода? Мне кажется, что нет. Любая разработка итеративна.

Могу показаться диким, но я, вообще, не верю в успех «рационализации» такого творческого процесса как разработка программного обеспечения. Те или иные методики могут сыграть злую шутку и оказаться неэффективными, хотя люди вечно носятся с новыми «гениальными» методиками - сколько их уже прошло на моей памяти. Что касается тестов, то вижу от них пользу в том, что они заставляют еще раз задуматься о самом главном и сложном - о постановке задачи. Конечно, это совсем не значит, что постановкой задачи нельзя заниматься без этих чертовых тестов :)

dave ★★★★★
()
Ответ на: комментарий от dave

Юнит-тесты гомосяцкие слишком мелочны, чтобы заставлять о чем-то задумываться. Они не на том уровне абстракции, где можно думать за архитектуру. Тесты это хорошо и важно. Юнит-тесты - говно и не нужно.

anonymous
()
Ответ на: комментарий от tailgunner

Тесты до появления кода можно написать для кода, поведение которого полностью понятно.

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

anonymous
()
Ответ на: комментарий от Vit

Если вы не выбросили прототип, то вы нарушили методику разработки с использованием прототипов.Т.к. прототип по определению выбрасывается.

anonymous
()
Ответ на: комментарий от dave

Программирование - такая же инженерная специальность, как и другие. Творчества там не больше, чем в любой другой инженерной деятельности.

anonymous
()
Ответ на: комментарий от anonymous

Пишешь совсем маленький тест -> пишешь небольшой код, который заставит этот тест проходить -> расширяешь тест -> пишешь код, чтобы тест проходил и т.д.

Это настолько общее описание, что под него подходит любой процесс разработки. Мы что - как господин Журден, всю жизнь говорим прозой^W^Wиспользуем TDD?

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

С прототипами есть ровно 2 варианта - выбрасывать и прорабатывать. Если вашими канонами предусмотрено только выбрасывание - это не мои пролемы :)

Vit ★★★★★
()
Ответ на: комментарий от schizoid

Только вот аджайл при использовании TDD вообще не обязателен.

Это да.

urxvt ★★★★★
()
Ответ на: комментарий от anonymous

Сейчас придут математики и и расскажут что в ней творчества не меньше чем в музыке.
ИМХО, все зависит от подхода.

urxvt ★★★★★
()
Ответ на: комментарий от tailgunner

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

anonymous
()
Ответ на: комментарий от Vit

Нет, просто у вас странное понимание прототипов. Кто вас такому научил? Прототип делается на выброс. Даже если он успешен. Ибо если не выбрасывать, то вы будете или перегружать прототип, или основывать основной код на сыром и непродуманном архитектурно прототипе.

anonymous
()
Ответ на: комментарий от tailgunner

Замечательно. Так в чем вы видите проблему при использовании TDD? Короткие циклы разбиваете еще на более мелкие стадии, каждую начинаете с теста на то, что собираетесь сделать.

Собственно, суть такова:

  • начинаем с написания теста, который пишется в объеме, необходимом и достаточном для того, чтобы тест не проходил
  • новый код пишется после того, как будет написан тест, который не проходит
  • новый код пишется только в том объеме, который достаточен для прохождения теста

Все остальное - уже менее важно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.