LINUX.ORG.RU

Test-Driven-Development и иже с ними

 


0

2

Привет.

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

Есть две крайних точки зрения.

Сначала тесты.

Приложение начинается с описания User Story на языке функциональных/приёмочных тестов. Каждая возможность, каждая ситуация (глазами пользователя) должны быть закодированы. Это позволяет отслеживать изменения в поведении приложения (и вовремя чинить, разумеется). Плюс строгое описание функциональности помогает понять какие классы будут затронуты, сколько времени уйдёт на программирование новой возможности.

Затем наступает время модульных тестов. Мы описываем интерфейсы, они позволяют нам контролировать несоответствие поведения функций ожидаемому (т.е. проводить тестирование на регрессии после каждого крупного изменения кода). Описывается далеко не всё приложение и не каждая возможность, а лишь отдельные модули самописного кода (printf тестировать нет нужды). Кроме того, модульные тесты могут выступать в качестве некой документации, что неплохо.

Почему тесты сначала? а) тесты тоже могут содержать ошибки, неплохо прогнать их без тестируемого кода б) тесты помогают не писать избыточный код (тест прошёл - код достаточен).

Тесты потом, нафиг функциональные тесты.

Нам нужен код быстро. Может, мы потом отрефакторим. Оттестируем перед релизом.

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

Модульные тесты. Ладно, напишу 10 позитивных тестов и 20 негативных тестов на этот вырвиглазный модуль, который никто не хочет читать. Скажем, теперь ээта чёрная коробка полностью оттестирована и всё пучком.

Итак. Как вам кажется, какая точка зрения несёт вечное и светлое, а тем паче помогает в долгих проектах?

Пару раз придётся проснуться среди ночи потому что ВЫПУСТИЛИ РЕЛИЗ ВСЁ СЛОМАЛОСЬ ДАННЫЕ ПРОПАДАЮТ ДЕНЬГИ СПИСЫВАЮТСЯ ВНИКУДА ЮЗЕРЫ ОБОРВАЛИ ТЕЛЕФОН - потом сам поймёшь, что тестов много не бывает.

anonymous
()

Я считаю, надо поступать проще. Даешь задание прогерам, они его выполняют с какими хотят тестами, могут в задницу компьютер засунуть, и сплясать краковяк, например.

Затем, если обнаруживается лажа, их всех ставят раком к стенке, они живут 3 месяца без зарплаты, на хлебе и воде, а приложение переписывается другими.

При таком подходе, вопросы о правильном тестировании не возникнет.

javaQest
()

Чот непонятно, кто из вас всех настоящий анонiмус.

E ★★★
()

О боже, это test driven development, все в статическую верификацию.

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

Я считаю, надо поступать проще. Даешь задание прогерам, они его выполняют с какими хотят тестами, могут в задницу компьютер засунуть, и сплясать краковяк, например.

Потом через пол года.

Затем, если обнаруживается лажа

От которой с вами перестаёт работать половина клиентов.

их всех ставят раком к стенке, они живут 3 месяца без зарплаты, на хлебе и воде

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

приложение переписывается другими

Если конторка ещё не умерла, вы полгода набираете новую комманду и история повторяется.

holuiitipun
()
Последнее исправление: holuiitipun (всего исправлений: 1)
Ответ на: комментарий от holuiitipun

Они быстро увольняются

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

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

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

Лол, кто-то ещё этот атавизм использует?) Ну и новую не трудно завести, хотя я свою где-то 5 лет назад потерял, ещё не понадобилась)

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

Это уголовное преступление, не каждый на это пойдет без крайней необходимости. А учитывая то, что сейчас активно идет переход на электронные документы и их централизацию, лет через 5 не слишком то это и поможет.

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

Ага, особенно с учётом того, что в 17 планируют отмену трудовых книжек)

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

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

Что ты с этим школьником споришь? :)

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

Все правильно сказал.

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

Код или тест в начале - зависит от задачи, если я придумал решение за 10 минут - напишу вначале код, потом для него тест. Если очевидного решения не нашел сразу - делаю тест, по нему будет видно какой примерно нужен код.

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

Затем, если обнаруживается лажа

Не если, а когда. Это известно любому, кто поддерживал хоть свой, хоть чужой код.

winlook38 ★★
()

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

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

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

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

ну, мне приходилось заниматься поддержкой и развитием проектов федерального масштаба (система обмена данными Сбербанка, таможни), которые до меня разрабатывались более 10 лет. естественно, что там всё менялось, и не раз. и всё-таки юнит-тестов вполне хватало. несмотря на то, что начальство не особо заботилось о кадрах и текучка кадров была просто жуткая. иными словами, код писали сотни программистов в разное время и с разными стилями. там была страшная мешанина кода всех эпох, вроде музея истории программирования. но прогон юнит-тестов перед сборкой позволял держать всё это в рабоспособном состоянии.
сейчас я работаю, скорее, в режиме экстремального программирования, когда на ходу меняется всё. потому что это совершенно новые технологии и мы первые пишем код под железо, которого ещё нет, по стандартам, которые ещё только прорабатываются. не могу сказать, что тут вообще есть время не тесты :) хотя, конечно, мы тестируем конечные полуфабрикаты, насколько возможно тестирование без готового железа. но тут иногда сложно понять, что вообще можно тестировать. слишком много факторов, которые могут измениться.

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