x
 
Денис Ермаков
11 мая 2017
Советы почтой каждую неделю
Пожалуйста, получите наше письмо, чтобы подтвердить свой адрес:
Вы подписаны на «Советы за неделю»:

Вопрос Василию Половнёву: как начать писать тесты в «махровом легаси»?


Ситу­а­ция: вам достался пяти­лет­ний про­ект, кото­рый писали три команды, и ни с кем из них не свя­заться. Про­ект запу­тан­ный и непо­нят­ный: тут jQuery, а тут Backbone, тут интер­ак­торы, а тут кон­трол­леры на 500 строк. Тестов — ноль.

Начните с интеграционных тестов

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

Кроме того, часто модули плохо струк­ту­ри­ро­ваны и сильно свя­заны с дру­гими моду­лями. Из‑за этого писать модуль­ные тесты — мука: они на 90% состоят из настройки окру­же­ния и зави­си­мо­стей, а на 10% из проверок.

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

Опре­де­лите, какие функ­ции и сце­на­рии кри­тичны для кли­ента, и зафик­си­руйте тре­бу­е­мое пове­де­ние в инте­гра­ци­он­ных тестах.

В кни­гах бюро важно, чтобы каж­дый раз­во­рот выгля­дел так, как его утвер­дил арт‑дирек­тор. Ото­рвав­ша­яся под­пись, неза­гру­зив­ша­яся кар­тинка или отсут­ствие сгла­жи­ва­ния в абзаце — баг, с кото­рым нельзя выпус­кать книгу.

Когда делали «Типо­гра­фику и вёрстку», внеш­ний вид раз­во­ро­тов тести­ро­вали вруч­ную. Это было уто­ми­тельно, долго и не гаран­ти­ро­вало отсут­ствие проблем.

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

Педант защи­тил нас от 95% про­блем с отоб­ра­же­нием раз­во­ро­тов и открыл дорогу к без­бо­лез­нен­ному рефак­то­рингу книг и книж­ного движка. Мы про­вели уже 14 фун­да­мен­таль­ных изме­не­ний движка: от авто­ма­ти­че­ской типо­гра­фики и пере­хода на HTTP/2 до смены меха­низма ани­ма­ций и новой сетки. Во всех этих слу­чаях Педант нахо­дил про­блемы, кото­рые не заме­тили ни раз­ра­бот­чик, ни тестировщик.

Если у вас веб‑при­ло­же­ние, для инте­гра­ци­он­ного тести­ро­ва­ния в бра­у­зере исполь­зуйте Capybara, Nightwatch.js или CasperJS. Если API‑only, взгля­ните на RSpec API Documentation или Chai‑HTTP. Если важ­ней всего, как стра­ница выгля­дит, попро­буйте PhantomCSS или Gemini.

Постепенно добавьте модульных тестов

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

Самый про­стой спо­соб доба­вить их в легаси‑про­ект — не при­ни­мать пулрек­ве­сты без тестов. Решили отре­фак­то­рить модуль — сна­чала покрыли его тестами, нашли баг в модуле авто­ри­за­ции — сна­чала доба­вили тест. Так со вре­ме­нем у про­блем­ных ста­рых моду­лей появится тесто­вое покрытие.

Чтобы эта стра­те­гия сра­бо­тала, нужно сде­лать так, чтобы рабо­тать с тестами было проще, чем с кодом. Это — тема для отдель­ного совета.

Ещё по теме:

P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.
Вёрстка и прототипирование — дисциплина Школы дизайнеров. Набор закрыт. Оставьте почту, и мы напишем вам, когда откроется следующий набор.
 

Поделиться
Отправить

Цель рубрики — обсуждение вопросов дизайна всех видов, текста в дизайне и взаимоотношений дизайнеров с клиентами.

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

Решение о публикации принимается один раз; мы не имеем возможности комментировать или пересматривать свое решение, хотя оно может быть ошибочно. Уже опубликованные комментарии могут быть удалены через некоторое время, если без них обсуждение не становится менее ценным или интересным.

Вот такой веб 2.0.

Автотесты «на пальцах» Как следить за качеством кода? Часть третья: процессы 3 Принципы надёжной вёрстки 4 Автотесты «на пальцах»




Недавно всплыло

Хочу научиться сторителлингу 2 4 2 2