Требуются старшие разработчики и модульные тесты?Разрешено ли им пользоваться услугами лакеев?[закрыто]

StackOverflow https://stackoverflow.com/questions/23688

  •  09-06-2019
  •  | 
  •  

Вопрос

Должны ли старшие разработчики быть освобождены от модульного тестирования - или им следует разрешить использовать lackeys для их реализации?Каков наилучший способ мотивировать людей, которые не привыкли использовать методы модульного тестирования, принять их на вооружение?

Это было полезно?

Решение

Я бы сказал, что с точки зрения пуристов TDD (т. е.тот, кто считает, что модульные тесты должны быть написаны до того, как реализация), старшие разработчики должны писать Еще модульные тесты, чем лакеи, не Меньше.

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

Другие советы

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

(Неловкая формулировка из-за гендерной нейтральности.)

Человек, пишущий тест = определяющий, как должна работать система = "босс"

Люди, проводящие тесты, - это так называемые "лакеи".

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

Должны ли старшие разработчики быть освобождены от модульного тестирования

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

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

Часть I (Старшие разработчики и модульное тестирование)

Когда я думаю о TDD или дизайне, основанном на тестировании, модульные тесты служат цели вытеснения эволюционный дизайн системы, надеюсь, обеспечивая постоянное совершенствование.
Написание теста формирует код или выявляет проблемы с уже принятым решением, что, как мы надеемся, приведет к процессу рефакторинга для повышения качества дизайна.

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

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

  1. Приемочные испытания/Клиентские тесты / Сквозные тесты.Называйте их как хотите, но я имею в виду тесты, которые начинаются с точки ввода данных (веб-сервис, веб-страница, ввод с экрана приложения) и проходят через весь стек системы (в базу данных, вызов другой службы, возврат к экрану результатов ввода и т.д.).Это может быть написано кем-то, кто не реализует детали отдельных модулей, которые будут использоваться в тестах.
  2. Парное программирование (Рисунок для пинг-понга) -

    A записывает новый тест и видит, что он завершается неудачей.
    B реализует код, необходимый для прохождения теста.
    B записывает следующий тест.
    A реализует это.

  3. Тесты на исправление ошибок - При обнаружении ошибки часто рекомендуется написать неудачный тест, который выявляет дефект.Как только этот тест будет запущен, вполне возможно, что кто-то реализует код, который делает тест успешным.Я не думаю, что это такая уж хорошая идея, поскольку процесс написания теста, который завершается неудачей из-за дефекта, часто дает некоторое представление о том, как можно было бы создать исправление.

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

Часть II (Мотивация людей к написанию тестов)

Это то, с чем у меня были проблемы в прошлом.Несмотря на то, что сейчас я стараюсь выполнять TDD как можно чаще, мне потребовалось несколько месяцев, чтобы увидеть реальную пользу от написания тестов.
Я считаю, что пытаться показать другим преимущества TDD и модульного тестирования довольно сложно.Только когда человек переживает на себе тот момент "ах-ха", когда TDD / модульные тесты выявили тонкость в его коде, которую они могли бы в противном случае пропустить, или помогли ему исправить ошибку за короткий промежуток времени, он видит преимущества.Довести их до этой точки может быть довольно сложно.
Лично я добился этого путем парного программирования по вышеупомянутому шаблону Ping Pong, работая с опытным разработчиком TDDer и наблюдая, как код, который мы писали для решения нетривиальной части функциональности, эволюционирует в то, что можно было бы назвать элегантным решением.Затем эта часть работы проходит проверку качества и внедряется в Живую среду без каких-либо недостатков, выдвинутых против нее.

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

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

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

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

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

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

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

Если вы старший разработчик, это отчасти потому, что вы достаточно опытны, чтобы знать, что модульное тестирование - отличная практика разработки, которая помогает ты создавайте лучшее программное обеспечение

Я не разделяю религию TDD, но я вижу большую ценность в модульном тестировании / etc и часто делаю это при написании кода.

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

Имея это в виду, вы не получите большой пользы от "лакеев", пишущих тесты, потому что

  1. У них не будет глубокого понимания всех тонких угловых ситуаций
  2. Им будет наплевать на код, потому что они ничего в него не вложили
  3. Они будут чувствовать, что с ними обращаются как с идиотами.

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

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

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

Лично я считаю, что тестировщикам также полезно иметь возможность хотя бы понимать модульные тесты, которые являются частью проекта.Сотрудничество между разработчиками и тестировщиками очень важно для правильной диагностики и устранения дефектов.Я бы не ожидал, что им придется их писать, но они должны иметь возможность посидеть с разработчиком и обсудить концепцию того, почему / как тест завершается неудачей или нет.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top