Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 24, 2009 09:25:55

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Хорошо и, главное, жизненно

Офлайн

#2 Июнь 24, 2009 10:41:31

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Хорошо и, главное, жизненно

Над моментом с QA ржал :)

PS: Не покажите, где можно посмотреть практическое описание тест-драйвен разработки? Ну с примерами кода, “сацес стори” так сказать. Как можно более близкое к реальности.
А то я как-то никак не въеду в чём профит

Офлайн

#3 Июнь 24, 2009 17:27:35

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Хорошо и, главное, жизненно

Практическое описание…. TDD для чайников? Не знаю, не видел. Читал Бека и всякое-разное по блогам и проч.
У нас техпроцесс на самом деле что-то вроде этого.
На самом деле, как по мне, не важно - тесты вначале или в конце. Главное - чтобы они были.
Да вот только если на последний момент откладываешь - то никогда их не пишешь.

Главная идея: тесты должны быть и их должно быть много. Чтобы по возможности покрывали всю систему.
Тогда не страшно ее развивать/менять. Тесты поломаются и покажут, что к чему.

Да, и TDD ни в коем случае не отменяет отдел QA.

Если чего-то недорассказал - спрашивай.



Офлайн

#4 Июнь 24, 2009 18:31:38

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Хорошо и, главное, жизненно

Ferroman
PS: Не покажите, где можно посмотреть практическое описание тест-драйвен разработки? Ну с примерами кода, “сацес стори” так сказать. Как можно более близкое к реальности.
А то я как-то никак не въеду в чём профит
TDD у меня не пошел, зато bug driven (http://www.urbandictionary.com/define.php?term=Bug-driven%20development) – вполне.

P.S. Блин, уже который раз не могу нормально проставить bb-коды {url}, ругается bb-codes cannnot be nested



Офлайн

#5 Июнь 25, 2009 00:51:36

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Хорошо и, главное, жизненно

Андрей Светлов
Скорее не “для чайников” а сама иллюстрация “выгоды” от подхода. Может есть исходники где это хорошо проиллюстрировано?
Я вот на свой код смотрю - ну вижу пару мест, где можно тесты написать. Но много и таких, что вообще непонятно как их проверять.
j2a
О, интересно.
А тег урл меня уже вусмерь заколупал.

Офлайн

#6 Июнь 25, 2009 05:08:56

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Хорошо и, главное, жизненно

Ferroman
Я вот на свой код смотрю - ну вижу пару мест, где можно тесты написать. Но много и таких, что вообще непонятно как их проверять.
Вот я тоже сначала не мог понять, как писать тесты. Просто поставил себе задачу, что они должны быть. Мучался страшно, но заставлял себя их писать и… И постепенно изменил свой стиль программирования, так, чтобы под мой код можно было легко писать тесты. Знаешь, это хорошо помогает.

Кстати, иногда я использую, назову так, “связанные тесты”. Т.е. когда второй тест не может выполнится до тех пор, пока не прошёл первый. Например первый тест создаёт набор файлов (что, собственно и тестирует), а второй тест уже проверяет, скажем так, загрузку информации из этих файлов в базу данных и саму базу данных (а то и несколько тестов)… И заканчивается всё это teardown'ом, который чистит БД и эти файлы удаляет.
Мне вот интересно, такой подход вообще нормален? Просто что-то мне подсказывает, что тесты должны быть обособленными и всё-таки как-то это не так…

Ferroman
А тег урл меня уже вусмерь заколупал.
Присоединяюсь к армии недовольных.

P.S. У меня нет нормальной сети (GPRS), так что ю-туб для меня закрыт. :-(



Офлайн

#7 Июнь 25, 2009 05:14:03

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Хорошо и, главное, жизненно

ZZZ
Кстати, иногда я использую, назову так, “связанные тесты”. /…/
Мне вот интересно, такой подход вообще нормален? Просто что-то мне подсказывает, что тесты должны быть обособленными и всё-таки как-то это не так…
Это не нормально, тесты должны быть несвязными. Более того, есть тест-фреймворки (afair, twisted trial) которые прогоняют тесты в случайном порядке, чтобы гарантировать несвязность.


P.S. У меня нет нормальной сети (GPRS), так что ю-туб для меня закрыт. :-(
http://www.slideshare.net/j2a/about-unit-testing/download



Отредактировано (Июнь 25, 2009 05:17:21)

Офлайн

#8 Июнь 25, 2009 05:44:36

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Хорошо и, главное, жизненно

j2a
Это не нормально, тесты должны быть несвязными. Более того, есть тест-фреймворки (afair, twisted trial) которые прогоняют тесты в случайном порядке, чтобы гарантировать несвязность.
И как тогда в этом случае поступать? Первая мысль – вызывать предыдущий тест как просто функцию из следующего, но тогда setup и teardown для этой функции тоже будут вызываться и, соответственно, всё подчищать.
Ещё вариант – делать так:
def func_01():
...тело первого теста...

@setup(...)
def test_01():
func_01()

def func_02():
func_01()
...тело второго теста...

@setup(...)
def test_02():
func_02()
Что скажите?
Просто писать кучу лишнего кода, чтобы “создать нужные файлы”, считаю идиотизмом.

j2a
http://www.slideshare.net/j2a/about-uni … g/download
Сенкс, завтра ночью постараюсь выкачать.



Отредактировано (Июнь 25, 2009 05:45:09)

Офлайн

#9 Июнь 25, 2009 16:25:39

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Хорошо и, главное, жизненно

ZZZ
j2a
Это не нормально, тесты должны быть несвязными. Более того, есть тест-фреймворки (afair, twisted trial) которые прогоняют тесты в случайном порядке, чтобы гарантировать несвязность.
И как тогда в этом случае поступать? Первая мысль – вызывать предыдущий тест как просто функцию из следующего, но тогда setup и teardown для этой функции тоже будут вызываться и, соответственно, всё подчищать.
Ты выдели “создание файлов”, “удаление файлов” в отдельные юниты (методы/функции) и вызывай в нужном порядке в setUp/tearDown.

типа так
def _make_files():
...

def _clean_files():
...

def _make_db():
...

def _clean_db():
...

class FileRelatedTestCase:
def setUp(self):
_make_files()

def testFilesModification(self):
...
def tearDown():
_clean_files()

class FileAndDbTestCase:
def setUp():
_make_files()
...
_make_db()

def testDbExport(self):
...
def tearDown():
_clean_db()
...
_clean_files()



Офлайн

#10 Июнь 26, 2009 01:16:39

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

Хорошо и, главное, жизненно

Нет, я не о том.
Просто объём того, что у меня называется “создать файлы” довольно велик и замечательно идёт именно как первый тест. Один, большой и чёткий.
Ладно, спасибо, попробую разбить это как-нить и посмотреть, что из этого получится. :-)

Добавленно:

j2a
Факт из жизни: код тестов всегда больше кода юнита.
А я думал, что только у меня… :-)

P.S. А не пробовали писать тесты для тестов?



Отредактировано (Июнь 26, 2009 01:32:32)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version