- PVSM.RU - https://www.pvsm.ru -
Когда разработчики впервые открывают для себя прелести разработки через тестирование — это как переход в новый, лучший мир, где гораздо меньше стресса и незащищенности. Этот прекрасный опыт действительно стоит отпраздновать. Но осознание преимуществ тестирования — только первый шаг к просветлению. Самое сложное — понять что НЕ нужно тестировать.
Если новичку можно и не заботиться о том что не стоит тестировать в первый день, то на второй день ему бы лучше начать вникать в это. Люди — создания привычки, поэтому если вы начнете формировать плохую привычку избыточного тестирования с самого начала, то вам будет гораздо труднее избавиться от нее потом. А избавиться от этой привычки вы должны.
«Но что плохого в избыточном тестировании, Фил, разве ты не хочешь, чтобы твой код был безопасным? Если мы поймаем очередной баг до попадание в production, то разве оно того не стоит?» Да ни хрена оно того не стоит, и не зовите меня Фил. Из-за таких вот рассуждений мы и получили TSA и то как они сливают миллиарды на ощупывание яиц и конфискацию книпсеров.
Примечание переводчика: TSA — Transportation Security Administration — Управление транспортной безопасности США, которое люто ненавидят за феноменальную дотошность при досмотре (в частности в аэропортах).
Каждая строчка кода, которую вы пишите, имеет цену. Нужно время, чтобы ее написать, нужно время, чтобы ее обновить, нужно время, чтобы прочитать и понять ее. Соответственно выгода от ее написания должна быть больше, чем ее стоимость. В случае с избыточным тестированием это определенно не так.
Подумайте об этом так: какова цена предотвращения бага? Если вам нужно написать 1000 строк теста, чтобы отловить случайное удаление Бобом строчки «validates_presence_of :name», то оно того стоит? Естественно нет (да, да, если вы работаете над системой контроля запуска ракет на Марс и ракета полетит в Белый Дом, если забыть указать ей имя, то можете это тестировать — но это ведь не ваш случай, так что забудьте).
Проблема выявления избыточного тестирования в том, что сложно придумать броский термин для этого. Нет ничего столь же компактного как test-first (тест первым), red-green (красный-зеленый) или других секси-терминов, которые помогают продвигать разработку через тестирование к ее заслуженному месту в центре сцены. Тестирование только того, что необходимо, требует тонкого подхода, опыта и немалой интуиции.
Все тонкости можно легко объяснить за 2 часа ужина с просвещенными собеседниками, однако в посте для этого не хватит места. Поэтому давайте подкинем дров в огонь дискуссии — я просто приведу список мнений без всяких тонкостей о том, как вам стоит тестировать ваше типичное Rails-приложение:
Учитывая все те сотни книг о том, как начать применять разработку через тестирование, мне бы хотелось, чтобы была одна или две книги о том, как потом приручить этого зверя. Существует большое количество тонкостей в определении что стоит тестировать, а что нет, но все они теряются, когда все фокусируются на одних и тех же примерах как тестировать.
Но вернемся к главному. Мы должны коллективно решить, что тестирование в стиле TSA (театральное качество покрытия тестами) полностью дискредитировало себя, прежде чем мы сможем двигаться дальше. Очень мало приложений являются настолько критически важными, что действительно требуют тестировать все.
Говоря мудрыми словами [1] Kent'а Beck'а, человека, который больше всех способствовал популяризации разработки через тестирование:
Мне платят за код, который работает, а не за тесты, поэтому моя философия заключается в том, чтобы тестировать настолько мало, насколько это возможно для достижения нужного уровня уверенности (подозреваю, что мой уровень уверенности выше, чем стандарты индустрии, но возможно это просто мое эго). Если я обычно не допускаю ошибок определенного типа (как передача неверных аргументов в конструктор, например), то я не тестирую это.
Автор: Svyatov
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/ruby/7273
Ссылки в тексте:
[1] мудрыми словами: http://stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/153565#153565
Нажмите здесь для печати.