Re[6]: Внедрение юнит-тестов
От: Nikolay_Ch Россия  
Дата: 15.07.13 13:56
Оценка:
Здравствуйте, __SPIRIT__, Вы писали:

__S>Ни разу такое не видел. Можно как-то развернуть зачем это делается и почему, как выглядит и т.п.

Что именно? Сопротивление или бурчание?
Re[7]: Внедрение юнит-тестов
От: __SPIRIT__ Россия  
Дата: 15.07.13 15:55
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:

__S>>Ни разу такое не видел. Можно как-то развернуть зачем это делается и почему, как выглядит и т.п.

N_C>Что именно? Сопротивление или бурчание?

Вот эту фразу развернуть:

ИМХО сопротивление нововведениям происходит чаще всего не из-за возраста, а именно из-за возможности поконфликтовать с руководством

Re[8]: Внедрение юнит-тестов
От: Nikolay_Ch Россия  
Дата: 15.07.13 18:24
Оценка:
Здравствуйте, __SPIRIT__, Вы писали:

__S>Вот эту фразу развернуть:

__S>

__S>ИМХО сопротивление нововведениям происходит чаще всего не из-за возраста, а именно из-за возможности поконфликтовать с руководством

В своей скромной практике я не особо не встречал дифференциации сопротивляющихся нововведениям по возрасту, а вот воспринимающих нововведения через призму личных взаимоотношений с руководителем встречал.
Re[10]: Внедрение юнит-тестов
От: Аноним  
Дата: 15.07.13 19:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Юнит-тесты — по определению автоматические, потому что они тестируют код без участия человека, автоматически. Неужели кто-то с этим не согласен?


Это утверждение не имеет отношения к исходному постингу. Да, автоматические, и что? Перефразирую: я говорю своим работникам, что мешок цемента надо везти на транспорте (а не пешком). С этим никто из них не спорит. А потом я спрашиваю: почему не на велосипеде привезли? А они мне: в данном конкретном случае велосипед не подходит. Хотя велосипед — вид транспорта, неужели с этим кто-то не согласен?

Кроме юнит-тестов есть другие АВТОМАТИЧЕСКИЕ, выполняемые ПОЛНОСТЬЮ без участия человека, тесты. И бывает так, что есть смысл потратить время на написание их, а не юнит-тестов. Если пишется, например, специализированный веб-сервер, есть смысл написать пачку тестов, которая бы генерировала n запросов в секунду, давала неправильно оформленные запросы и т.д. и т.п. Каждый случай, когда живой человек-тестер находит в таком сервере баг, может быть оформлен отдельным тестом, поскольку где тонко и порвалось, там и в следующий раз порвется (по тестировочной науке это называется regression testing: Common methods of regression testing include rerunning previously-completed tests and checking whether program behavior has changed and whether previously-fixed faults have re-emerged). Надо ли обкладывать тестами юниты (классы и функции) — бог весть. Ну можно, в последнюю очередь, когда тесты реальных сценариев написаны.

С пользой автоматического тестирования абстрактно, без деталей, спорить никто в здравом уме не будет, поскольку это из серии "вкалывают роботы, счастлив человек". Но использовать ли юнит-тест ИЛИ другой автоматический тест, а также, поддается ли конкретный кусок кода автоматическому тестированию вообще — зависит от ситуации. И ЕСТЬ ситуации, когда вообще от тестов (любых) один вред. Мой любимый пример: есть бэкграунд, на нем надо показать связанную с ним анимацию. Типа, как тетка в прогнозе погоды тыкает указкой по фону-битмапке, хотя его не видит. Анимацию дают делать двум программистам. Один здоровый на голову человек, другой — фанат юнит-тестов без головы. Начальника над ним нет, просто фанат. Первый пишет текстовый файл с координатами столбиком, зачитывает оттуда опорные точки, и анимирует изображение, используя кривые Безье (30 строк кода). Второй думает, как это можно протестировать юнит-тестами. Если картинка поменяется, а анимация нет, будет ведь баг! В результате, простую картинку в любом формате, понимаемом рендерером, превращает в фотошоповский файл, внутри которого в виде пути (path) должна хранится поточечная анимация, а к коду проекта добавляется импорт .psd. Проблемы, которые при этом решаются... а их нет. Ничто не мешает дизайнеру забыть обновить path, меняя layer. Только совесть очистить у любителя тестов. Новые проблемы: появляется СОТНИ строк кода, которые обеспечивают импорт, налагают новые условия на входной файл (типа имен объектов внутри), все это надо отдельно тестить, да плюс еще на билд-сервер ставить фотошоп для Automation. К счастью, первый программист был нанят мною, и свой код он написал, а второй ВСЕГО ЛИШЬ предложил свой безумный план, который я отверг. Если вы считаете, что он обосрал светлую идею юнит-тестирования, предложите свою.

В заключение: сам подход навязывания — извращенный. Вам что надо? Чтобы в релизе багов не было, или тесты для галочки? Если первое, программистов надо просто дрючить за баги, найденные ПОСЛЕ разработки, в восьмикратном размере — за найденные юзерами. И уж тут каждый сам для себя решит, каким образом ему свою задницу прикрыть. Если ему именно юнит-тесты помогут, он их с радостью начнет писать. А если толку от них ноль, пусть пишет другие тесты, по усмотрению.
Re[2]: Внедрение юнит-тестов
От: Andreo_K  
Дата: 19.07.13 09:15
Оценка:
Здравствуйте, michael_isu, Вы писали:

_>Здравствуйте, Аноним, Вы писали:


А>>Похоже, единственный способ — просто заставить, в приказном порядке без обсуждений.


_>Это не работает, т.к. люди, не понимающие как и зачем писать тесты, нормальных тестов не напишут, итого кроме проекта придется поддерживать тесты.


их в любом случае придётся поддерживать
Re: Внедрение юнит-тестов
От: diez_p  
Дата: 21.07.13 22:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Насколько я вижу, программистам бесполезно пытаться по-человечески объяснять преимущества автоматического тестирования, потому что они соглашаются, а потом все равно делают по-старому под предлогами "в данной конкретной задаче затруднительно применить юнит-тестирование" и "нет времени, сейчас сделаю так, а юнит-тесты когда-нибудь потом", и так каждый программист в каждой задаче. Таким образом, добровольное и осознанное внедрение юнит-тестов полностью провалилось.


А>Похоже, единственный способ — просто заставить, в приказном порядке без обсуждений.


А>Кстати, вопреки интуиции, на практике с программистами только такой способ очень часто и работает. Попробуй быть "хорошим начальником" — об тебя начнут вытирать ноги.


Начнем с того, что какую проблему вы хотите решить юнит тестами?
Re: Внедрение юнит-тестов
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.08.13 03:39
Оценка: 1 (1)
Здравствуйте, Аноним, Вы писали:

А>Похоже, единственный способ — просто заставить, в приказном порядке без обсуждений.


Да. И не забыть отвести на юнит-тесты некоторое время, которое, кстати, может быть больше, чем время самой разработки.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: Внедрение юнит-тестов
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.08.13 04:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Соответственно, "автоматизация юнит-тестов" — это какая-то автоматизация второго порядка, видимо, когда юнит-тесты генерируются автоматически. Но я не это имел в виду.


А>Юнит-тесты — по определению автоматические, потому что они тестируют код без участия человека, автоматически. Неужели кто-то с этим не согласен?


Это терминологический конфликт плюс специфика перевода с английского на русский.

Прямой перевод английского "Unit" на русский язык даёт нам слово: "Блок". Чуть изогнутый перевод: "модуль". Но как ни крути, привернуть способ запуска сюда не получается. И блок, и модуль — это структурная характеристика тестируемого кода.

А вот автоматический тест — это тест, который запускается автоматически, без специальных усилий. Что он там тестирует — вопрос отдельный.

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

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

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

А>Юнит-тестирование является подмножеством автоматического, или, если хотите, автоматизированного тестирования (хотя, получается, что последний термин менее точный, потому что в юнит-тестах никакого участия человека в процессе тестирования нет и никогда не было).


Да, всё правильно, англоязычный термин "unit testing" подразумевает автоматизированный запуск этих тестов и ещё целую кучу соглашений, прямо, как в том анекдоте: "А теперь доработать напильником..."
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Внедрение юнит-тестов
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.08.13 04:37
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Мой любимый пример: [...]


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

А>Вам что надо? Чтобы в релизе багов не было, или тесты для галочки? Если первое, программистов надо просто дрючить за баги, найденные ПОСЛЕ разработки, в восьмикратном размере — за найденные юзерами.


Уже пробовал? И как, получилось?

А>И уж тут каждый сам для себя решит, каким образом ему свою задницу прикрыть. Если ему именно юнит-тесты помогут, он их с радостью начнет писать. А если толку от них ноль, пусть пишет другие тесты, по усмотрению.


Вменяемые специалисты в таких случаях не тесты пишут, а документы, в которых формализуют и ограничивают требования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Внедрение юнит-тестов
От: -n1l-  
Дата: 06.08.13 04:54
Оценка:
Есть такая фирма, называется "Контур".
Так вот, мне как-то говорили, что если программиста работая над проектом создает много багов или что-то в этом роде. В общем пишет не работающий код, то его на один день ставят в отдел поддержки.
В некоторых фирмах программисты так же занимаются поддержкой.
Следствие — прямая мотивация писать хорошо продокументированный и понятный код.
Быть может вам подойдет. Хотя я на это смотрю скептически.
Re: Внедрение юнит-тестов
От: zfima  
Дата: 06.08.13 14:23
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Насколько я вижу, программистам бесполезно пытаться по-человечески объяснять преимущества автоматического тестирования, потому что они соглашаются, а потом все равно делают по-старому под предлогами "в данной конкретной задаче затруднительно применить юнит-тестирование" и "нет времени, сейчас сделаю так, а юнит-тесты когда-нибудь потом", и так каждый программист в каждой задаче. Таким образом, добровольное и осознанное внедрение юнит-тестов полностью провалилось.


Думаю, что ещё не дошли ещё до нужного уровня понимания.
Может стоит провести какие то курсы.
Но, наверное, человек сам должен дойти до этого.

А>Похоже, единственный способ — просто заставить, в приказном порядке без обсуждений.


...и при первом удобном случае все похерят эту идею

А>Кстати, вопреки интуиции, на практике с программистами только такой способ очень часто и работает. Попробуй быть "хорошим начальником" — об тебя начнут вытирать ноги.
Re[5]: Внедрение юнит-тестов
От: velkin Удмуртия https://kisa.biz
Дата: 09.11.14 12:14
Оценка:
Здравствуйте, maxkar, Вы писали:

M>Здравствуйте, Ionich, Вы писали:


I>>Общий вывод такой: Как правило сейчас требуют результат от разработчика — работающий код по истечении выделенного на это рабочее время (которое оплачивается). Если попробовать изменить подход — оплачивать качество работающего кода с чётко заданными критериями (по времени работы, по занимаемым ресурсам, конечно же отказоустойчивость как критерий отсутвия багов), естественно в оценке трудозатрет изначально иметь в виду написание юнит-тестов исходя из задачи и вышеоговоренных критериев.


Шаг 1 — отделение тестов от проекта:
Не пишите юнит-тесты, если нет времени или желания. Просто для каждого класса, пакета (пространства имён) или чего-нибудь ещё сразу создавайте файлы с юнит-тестами в которых можно начать их писать. Разработчики всё равно так или иначе запускают тесты, только они их пишут где-нибудь в коде, а потом когда те срабатывают — стирают. Получается зряшная работа. Для начала нужно отказаться от замусоривания тестами кода проекта. Если захотелось написать какой-то тест, нужно использовать для этого отдельные уже приготовленные файлы.

Шаг 2 — программирование по контракту:
Может быть со временем захочется проверять контракты на работу методов системы и всего класса. Предусловия, постусловия, инварианты станут не пустым звуком.

Шаг 3 — требования:
А есть ещё всякие требования, их тоже можно проверять. Так что если в силу увеличения квалификации появится возможность системного анализа, то можно будет и его потихоньку добавлять.

Никто и не говорит, что любой может взять и тут же перейти на TDD, где сам человек уже изначально достаточно продуманный. Однако уверен любой может выполнить хотя бы первый шаг, то есть избавить свой код от тестирования в нём же самом.
Re[2]: Внедрение юнит-тестов
От: MaximVK Россия  
Дата: 01.12.14 22:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Что можно сделать:

А>1. Нанять коуча который промоет проггерам мозги и заставит любить юнит-тесты. Если проггеры молодые это прокатит на ура.
А>2. Внедрить измерение тестового покрытия и в приказном порядке ввести формальные метрики: для новых задач 60% для старого кода 30%. Без соответствия метрикам задачу не принимать и денег за нее не платить. Будут бухтеть, конечно, но где-то за год привыкнут и даже нормальные тесты со временем писать научатся.

Мозги тут менеджерам нужно промывать, а не программистом. Чего только менеджеры не предложат от осознания собственной бестолковости.
Ты понимаешь, что только что своим постом расписался в собственной профессиональной никчемности как менеджера. Начиная от фраз "промоет проггерам мозги" и заканчивая предложением ввести метрики.
Ну будут программисты писать тесты ради метрики.
В результате, и проект будет стоить дороже, и качество останется тем же, если не хуже.
Отличный результат работы эффективного менеджера.
Re[3]: Внедрение юнит-тестов
От: velkin Удмуртия https://kisa.biz
Дата: 02.12.14 10:07
Оценка:
Здравствуйте, MaximVK, Вы писали:

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


MVK>Ну будут программисты писать тесты ради метрики.

MVK>В результате, и проект будет стоить дороже, и качество останется тем же, если не хуже.

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

[lol]
А не платить программистам деньги очень правильное решение. Через год они разумеется всё ещё будут впахивать на благодетеля и никуда не уйдут. Нужно ещё ввести нормы выработки, тогда появятся программисты-стахановцы. За день они своими отбойными молотками будут производить в несколько раз больше кода. И ещё надо всех замотивировать, чтобы глаза горящие, а вместо сердца пламенный мотор.

[/lol]
Re: Внедрение юнит-тестов
От: xednay89 Россия  
Дата: 02.12.14 19:00
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Похоже, единственный способ — просто заставить, в приказном порядке без обсуждений.


Очень недальновидно это.

Если цель именно внедрить юнит тесты, то есть след. варианты. все опробованы:

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

Ну и вообще, здесь только собственный пример может помочь. Ну или пример какого-то лида. Все эти "выполним план по покрытию" и "ну пишите тесты, ведь это так классно" — не канают.
Re: Внедрение юнит-тестов
От: маген Россия https://ru.linkedin.com/pub/alexey-smorkalov/4/283/8b8
Дата: 02.12.14 19:48
Оценка:
А>Кстати, вопреки интуиции, на практике с программистами только такой способ очень часто и работает. Попробуй быть "хорошим начальником" — об тебя начнут вытирать ноги.

Опираясь на собственный опыт — я бы посоветовал начать с малого и не задаваясь целью обеспечить 100% покрытие, начать самому писать тесты только там, где это понятно, удобно и кратко сделать.
Где это занимает времени не больше, чем писать\исправлять тестируемый метод.
Потом, достаточно быстро, появится понимание того, как создавать код так, чтоб его было легче тестировать.
А потом, может быть, придет понимание, как научить и показать всю прелесть подхода другим.
Отредактировано 02.12.2014 19:49 AlexeySmorkalov . Предыдущая версия .
Re: Внедрение юнит-тестов
От: MaximVK Россия  
Дата: 03.12.14 07:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Кстати, вопреки интуиции, на практике с программистами только такой способ очень часто и работает. Попробуй быть "хорошим начальником" — об тебя начнут вытирать ноги.


А можешь дать свое определение "хорошего начальника"? Кстати, "менеджер проекта" != "начальник".
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.