Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Оптимизируем ликбез 
:(
    Опции темы
PashaPash
Дата 9.7.2009, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Вы не смешивайте TDD и UnitTests - это принципиально разные вещи, только инструменты одинаковые.


--------------------
PM MAIL WWW   Вверх
ivashkanet
Дата 9.7.2009, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



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

Добавлено через 5 минут и 17 секунд
Цитата(ivashkanet @  9.7.2009,  15:08 Найти цитируемый пост)
разобравшись в TDD

Нет, не так: познакомившись с TDD... знаком с юнит тестированием smile 
PM MAIL WWW ICQ   Вверх
PashaPash
Дата 9.7.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(ivashkanet @  9.7.2009,  15:08 Найти цитируемый пост)
познакомившись с TDD... знаком с юнит тестированием

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

Юнит-тестирование (Test-before-development) - это когда перед написанием какого-то конкретного куска пишется тест для него.

Разница в результате - При TDD получаются автоматические regression-тесты для приложения. При Unit-тестировании получаются отдельные тесты для каждого юнита, и для каждого уровня - свой набор тестов для UI, набор для BL, набор для DA.

Юнит-тестирование - однозначно гуд. TDD, лично для меня - пока под вопросом - для девелоперов слишком большой соблазн остановится на "как угодно" и не рефакторить smile

Это я как бы к тому, что знакомство с TDD не дает навыка написания unit-тестов.

Это сообщение отредактировал(а) PashaPash - 9.7.2009, 19:19


--------------------
PM MAIL WWW   Вверх
ivashkanet
Дата 10.7.2009, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



PashaPash, не хочу холиварить но ты ошибаешься. 
Юнит тестирования -- это когда пишутся тесты для юнита (в изоляции от других частей). Все! Юнит тест написанный задним числом не перестает быть юнит тестом.

Цитата(PashaPash @  9.7.2009,  19:18 Найти цитируемый пост)
TDD - это подход к разработке. пишешь тесты для самого верхнего уровня, потом колбасишь код внутри приложения - как угодно, главное чтобы тесты отработали. Потом рефакторишь.

Первый раз о такой практике слышу  smile 
Т.е. TTD -- пишем интеграционные тесты на все юзкейсы, а потом заставляем их пройти? Жесть. Паш, ты извини, но, ИМХО, ты не совсем в курсе что такое TDD:
Цитата

Разрабо́тка че́рез тести́рование (англ. test-driven development) — техника программирования, при которой модульные тесты для программы или её фрагмента пишутся до самой программы (англ. test-first development) и, по существу, управляют её разработкой. Является одной из основных практик экстремального программирования.
 
Но это русский вариант, у нас, обычно, в вики пишут что в голову взбредет (сама фраза "модульные тесты для программы или её фрагмента" это нечто  smile ).

В английской википедии в определении нигде нет "Юнит Теста", есть только "тест перед кодом":
Цитата
A key TDD concept is that preparing tests before coding facilitates rapid feedback changes

И я с этим согласен, тест перед кодом -- ключевой аспект TDD. В определение ничего дополнительно добавлять не нужно. Даже Red-Green-Refactor -- ключевую фичу TDD не обязательно затрагивать. Но если посмотреть на примеры Бекка (или другой книги по TDD) окажется, что эти тесты -- юнит тесты. Так как в TDD требуют двигаться маленькими шажками: один цикл (R-G-R) занимет, в теории, не более 5 мин.  В случае интеграционных тестов это невозможно.
Когда говорят о TDD в 90% случаях имеют ввиду именно Юнит тесты. Да и вообще, очень тяжело не программисту написать тесты ДО кода. А тесты программиста -- именно юнит тесты (интеграционными и проч, занимаются QA).
Лично я TDD-чу именно юнит тестами.


Возможно ты говоришь про ATDD (если честно, первый раз такое услышал):
Цитата

Advanced practices of test-driven development can lead to Acceptance Test-driven development [ATDD] where the criteria specified by the customer are automated into acceptance tests, which then drive the traditional unit test-driven development [UTDD] process. This process ensures the customer has an automated mechanism to decide whether the software meets their requirements. With ATDD, the development team now has a specific target to satisfy, the acceptance tests, which keeps them continuously focused on what the customer really wants from that user story.

Оказывается тоже есть такая практика, но она не столь широко распространена. Я услышал о ней впервые, хотя в "Test-Driven Development in Microsoft .NET" рассказывается про FIT приемочное тестирование (тогда я не придал значение тому почему FIT рассматривается в книге по TDD).

СУВ, ivashkanet
PM MAIL WWW ICQ   Вверх
PashaPash
Дата 10.7.2009, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(ivashkanet @  10.7.2009,  11:07 Найти цитируемый пост)
Первый раз о такой практике слышу  smile 

Ес-но тесты пишутся по одному, и т.д smile Я хотел показать что TDD-тесты не тестируют отдельные юниты (классы, методы), а проверяют тесткейсы. Один тесткейс вполне может покрывать 20-30% кода приложения - слишком много для "теста одного юнита". 

Цитата(ivashkanet @  10.7.2009,  11:07 Найти цитируемый пост)
В английской википедии в определении нигде нет "Юнит Теста", есть только "тест перед кодом":

Зато в английской википедии есть определение Unit testing, где про "перед кодом" в определении ничего не сказано. Зато там есть "tests that individual units of source code" и "A unit is the smallest testable part of an application."

Цитата(ivashkanet @  10.7.2009,  11:07 Найти цитируемый пост)
И я с этим согласен, тест перед кодом -- ключевой аспект TDD. В определение ничего дополнительно добавлять не нужно. Даже Red-Green-Refactor -- ключевую фичу TDD не обязательно затрагивать. 

Немного не согласен с этим утверждением - и с выводами из него. TDD - это процесс разработки. Из 6 пунктов. Если ты оставишь "основной аспект" и выбросишь остальные - то получишь обычный Tests Before Development. 

Есть неплохая статья на эту тему: http://stephenwalther.com/blog/archive/200...unit-tests.aspx, ну и та же рядом: http://stephenwalther.com/blog/archive/200...evelopment.aspx

З.Ы. Впрочем, whom how. IMHO - просто писать тесты до кода - намного лучше, чем вообще их не писать. И не обязательно хуже TDD.


Это сообщение отредактировал(а) PashaPash - 10.7.2009, 13:27


--------------------
PM MAIL WWW   Вверх
ivashkanet
Дата 10.7.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(PashaPash @  10.7.2009,  13:25 Найти цитируемый пост)
Я хотел показать что TDD-тесты не тестируют отдельные юниты (классы, методы), а проверяют тесткейсы

Не мог ты подкрепить свое мнение ссылками на источники?

Цитата(PashaPash @  10.7.2009,  13:25 Найти цитируемый пост)
Есть неплохая статья на эту тему: http://stephenwalther.com/blog/archive/200...unit-tests.aspx, ну и та же рядом: http://stephenwalther.com/blog/archive/200...evelopment.aspx

Who is Stephen Walther??? Очередной толкователь создателей TDD? Они оказывается имели ввиду не то что написали, а вот это и вот это... А пацаны-то не знают 

Цитата(PashaPash @  10.7.2009,  13:25 Найти цитируемый пост)
TDD - это процесс разработки. Из 6 пунктов. Если ты оставишь "основной аспект" и выбросишь остальные - то получишь обычный Tests Before Development. 

Из 5-ти (если судить по книге Бекка). Что есть "обычный Tests Before Development". Что это вообще за термин? Кто его ввел? Кто о нем знает? Почему Гугл не знает?


Так вот, из "пяти пунктов TDD" убрать можно только Рефакторинг и стадия Red (запускаем тест до написания кода и убеждаемся что он валится). Все остальные (добавить тест, добавить код для прохода теста, запустить тесты) естественны для TBD (Test-before-development). 
Идем далее. Стадия Red естественна для TBD. Так как если только что написанный тест прходит, то этот тест ничего нового не тестит. Нафик он нужен.

Получается, что TDD отличается от TBD только стадией рефакторинга (ну и принципом "пишем минимальный код который проходит тест", но он опирается на стадию рефакторинга).


P.S. PashaPash, ты мне лучше скажи, неужели в TBD обязательно должны быть юнит тесты. С тем же успехом я могу сказать, что к TBD относятся и приемочные, и интеграционные тесты.

Цитата(PashaPash @  10.7.2009,  13:25 Найти цитируемый пост)
Зато в английской википедии есть определение Unit testing, где про "перед кодом" в определении ничего не сказано. Зато там есть "tests that individual units of source code" и "A unit is the smallest testable part of an application."

Не понял что ты этим доказываешь. Что такое Юнит тест я знаю. Он никак не завязан на TDD. Наоборот TDD завязан на на тесты (чаще всего на Юнит тесты). 
Это ты почему-то решил, что Юнит тест == TBD:
Цитата(PashaPash @  9.7.2009,  19:18 Найти цитируемый пост)
Юнит-тестирование (Test-before-development) - это когда перед написанием какого-то конкретного куска пишется тест для него.

PM MAIL WWW ICQ   Вверх
PashaPash
Дата 10.7.2009, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(ivashkanet @  10.7.2009,  14:20 Найти цитируемый пост)

Не мог ты подкрепить свое мнение ссылками на источники?

Дык, википедия же
Цитата
Test-driven development (TDD) is a software development technique that uses short development iterations based on pre-written test cases that define desired improvements or new functions.

Цитата(ivashkanet @  10.7.2009,  14:20 Найти цитируемый пост)
Из 5-ти (если судить по книге Бекка).
А как же repeat? smile
Цитата(ivashkanet @  10.7.2009,  14:20 Найти цитируемый пост)
Who is Stephen Walther??? Очередной толкователь создателей TDD? Они оказывается имели ввиду не то что написали, а вот это и вот это... А пацаны-то не знают 

Да так, гугл нашел. MVP какой-то. Все усиленно толкуют TDD, и каждый по своему. Выбросим из TDD пару пунктов - да не проблема, TDD хуже не станет. Зачем писать минимальный код - будем писать сразу фреймворк, это ж не последний тест. Зачем рефакторить (и когда именно рефакторить)? Только чтобы убрать дублирующйся код? В какой момент проявлять знание ОО-паттернов? Только при рефакторинге? Писать юнит-тесты, или все-таки не-юнит? Вот, уже на целую книгу толкований. smile
Цитата(ivashkanet @  10.7.2009,  14:20 Найти цитируемый пост)

Получается, что TDD отличается от TBD только стадией рефакторинга (ну и принципом "пишем минимальный код который проходит тест", но он опирается на стадию рефакторинга).
Это "небольшое" отличие подразумевает некоторый отказ от планирования "на будущее" - потому что надо писать именно "минимальный код". Не надо толковать идеи пацанов по-своему (С) smile

Цитата(ivashkanet @  10.7.2009,  14:20 Найти цитируемый пост)
Это ты почему-то решил, что Юнит тест == TBD:

Потому что в моем определении есть слово "конкретного куска", он же модуль, он же юнит.

Опять же IMHO, вот так "выбрасывают" из TDD "лишние пункты" почти все, и оставляют только один, причем чаще всего не первый :(.

Вобщем, предлагаю завязать с холивором, не вижу смысла особо продолжать, или выносить в отдельную тему. Один вопрос для ясности.
Цитата(ivashkanet @  10.7.2009,  14:20 Найти цитируемый пост)
Наоборот TDD завязан на на тесты (чаще всего на Юнит тесты).

Я бы заменил на "чаще всего не unit-тесты". Что является юнитом в типичном TDD тесте для приложения? Пример - 3-layer web-приложение, пишем тест для тесткейса "при нажатии на кнопку create user, в базе (репозитирии) создается новый user, пользователя редиректит туда-то". Что здесь юнит? метод в UI-логике? Класс в BL?


--------------------
PM MAIL WWW   Вверх
ivashkanet
Дата 13.7.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(PashaPash @  10.7.2009,  14:59 Найти цитируемый пост)
Вобщем, предлагаю завязать с холивором, не вижу смысла особо продолжать, или выносить в отдельную тему. Один вопрос для ясности.

Сам хотел предложить  smile Очень неблагодарное это дело... все равно каждый останется при своем  smile 

P.S. 
Цитата(PashaPash @  10.7.2009,  14:59 Найти цитируемый пост)
Все усиленно толкуют TDD, и каждый по своему. Выбросим из TDD пару пунктов - да не проблема, TDD хуже не станет.

В TDD главное, что "тесты уравляют разработкой".

Добавлено через 1 минуту и 27 секунд
Цитата(PashaPash @  10.7.2009,  14:59 Найти цитируемый пост)
выносить в отдельную тему

ИМХО, лучше вынести. Пусть останется для потомков Ж)) 
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0893 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.