5 сезон · выпуск 3 · 26 августа 2021 · 48 мин

Тестирование. Зачем тыкать на 1 000 кнопок в секунду и скармливать код мутантам

Разработка

Слушать · 47:31

В новом эпизоде подкаста Самат разбирается, как осмысленно ломать компьютер. Он говорит с Максимом Садымом, инженером из Google и Amazon, о тестировании. Как автоматизировать UI тесты, как часто проводить нагрузочное тестирование, какие ошибки программы показывает хаос-тестирование и можно ли быть хорошим программистом, если ты не пишешь юнит-тесты? Максим рассказывает об основных видах тестирования с примерами из практики, а еще вспоминает, как пару лет не мог попасть на работу в Google.

Подписывайтесь на наши бонусные эпизоды «Запуск ++» в Apple podcast или на патреоне https://www.patreon.com/zapooskzavtra

Книга Cracking the Coding Interview https://en.wikipedia.org/wiki/Cracking_the_Coding_Interview Телеграм канал "Типичный программист" https://t.me/tproger_official

Над выпуском работали

Редактор
Юля Яковлева
Продюсер
Павел Боровков
Звукорежиссер
Нина Мамотина
Дизайнер обложки
Петр Сутупов

Транскрипт

Самат Галимов, Максим Садым · расшифровано автоматически, ошибки возможны

  1. Самат Галимов

    Всем привет, меня зовут Самат Галимов и это подкаст «Запуск завтра». Как технический директор я пытаюсь разобраться, как устроены сложные и интересные штуки. Я зову профессионалов, с которым можно поговорить простым человеческим языком. Сегодня я хочу поговорить о тестировании. Все знают, что для того, чтобы появилась программа, нужны программисты, они её напишут. Но мало кто подозревает, что для того, чтобы появилась большая сложная программа, которую делают десятки программистов, и которую пользуют тысячи людей, которая развивается, меняется, в ней что-то удаляют, вот чтобы написать такую программу, чтобы она хорошо работала, нужно тестирование. На тестирование при этом в IT-тусовке взгляд такой немножечко свысока пренебрежительный от отношения к тестировщикам, потому что люди думают, что тестированием можно заниматься, если ты не умеешь заниматься программированием. Вообще многие начинают свою работу в IT именно с того, что становятся тестировщиками. Наш сегодняшний гость опровергнет многие стереотипы. Максим Садым сначала в Амазоне, а теперь работает над этим в Гугле. Вместе с ним мы разберемся, что такое тестирование, какие виды тестирования бывают, зачем оно нужно и как можно очень сильно зафакапиться, если не делать хорошего тестирования. Это подкаст студии Либо-Либо, и мы его сделали вместе с сервисом онлайн-образования Яндекс Практикум. У Практикума есть курсы по разработке, по анализу данных и по английскому языку. Если вы хотите освоить цифровую профессию, переходите на сайт Яндекс Практикум и учитесь.

  2. Самат Галимов

    Этот список курсов вы наверняка слышали уже

  3. Самат Галимов

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

  4. Максим Садым

    Меня зовут Максим Садым, я работаю в компании Google. До этого я работал в Амазоне, а еще до этого я работал в СКБ Контур.

  5. Самат Галимов

    Максим, получается, все это время ты занимался тестированием. Вот о тестировании я и хочу поговорить. Когда я вот был техническим директором «Медузы», у меня были много разных телефонов, во-первых, и один компьютер. Я помню фотографию своего стола рабочего, обычного, деревянного, на котором стоит компьютер, и семь телефонов в ряд. Я открываю одну и ту же статью, во всех этих устройствах одну статью «Медузы». Я ее специально сам создавал. все типы форматирования, жирные, полужирные, наклонные, текст-заголовок, картинка, видео, твиттер—

  6. Самат Галимов

    там все, короче, вставлено в эту статью.

  7. Самат Галимов

    И вот я смотрю на разных телефонах, как оно выглядит, все ли нормально отображается. Это называется UI-тестирование. Тестирование интерфейсов пользовательских, то есть то, что видит обычный человек, когда открывает сайт или мобильное приложение. То, что я описал— это стандартное UI-тестирование или обычно в компаниях делают по-другому?

  8. Максим Садым

    Вот то, что ты описал, это самое стандартное UI-тестирование, с этого начинают абсолютно все. То есть, если ты делаешь какой-нибудь стартап, первое, что ты делаешь, это ты просто руками все сам тестируешь. Вопрос, что ты будешь делать потом, когда у тебя появляется большое количество клиентов, большое количество разработчиков, большое количество фичей, тогда один человек не может это тестировать руками? И существует два глобальных пути. То есть мы либо можем нанять большое количество ручных тестеров, которые будут точно так же на куче девайсов пробовать воспроизводить разные сценарии, хитрые. Либо у нас есть второй подход. Это мы пишем программу, которая тестирует программу. То есть вместо того, чтобы сама сидел и кликал на семи телефонах разные Кнопки. Мы пишем программу, которая запускает нашу программу, которую мы хотим проверить на семи разных телефонах, на ста разных телефонах. К тому же масштабирование очень легко получается. И проверяем, что если мы кликаем сюда, ничего не сломалось. Если мы кликаем сюда, то появляется такой-то элемент, такая-то кнопочка. А если мы нажимаем на эту статью, то мы видим эту статью вот примерно такой там. Не совсем пиксель в пиксель, но примерно. То есть это основные сценарии.

  9. Самат Галимов

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

  10. Самат Галимов

    Должна открыться быстро.

  11. Самат Галимов

    Вот такой сценарий тестирования, довольно простой. Или сценарий для интернет-магазина. Открываешь интернет-магазин, список товаров, нажимаешь на конкретный товар, добавляешь корзину, и в корзине должен появиться товар. Ты про эти сценарии говоришь?

  12. Максим Садым

    Абсолютно, да. По сути, один сценарий описывает один workflow, одну последовательность действий какого-то пользователя.

  13. Самат Галимов

    Как часто это проверяется? Каждый раз, когда в программу вносятся изменения или каждый раз, когда выходят новые версии программы, как часто прогоняются тесты?

  14. Максим Садым

    Если ты поработал с каким-то модулем, то, как правило, ты запускаешь вручную тесты, которые касаются конкретно этого места, конкретно этого модуля. Дальше они в обязательном порядке запускаются перед тем, как они будут выложены. Я тебе сейчас рассказываю про то, как это было в Амазоне. прежде чем несколько стадий выкладывания новой версии. И перед каждой стадией обязательно прогоняются все UI-тесты. Если хотя бы один из них упал, то релиз дальше не идет. Специальный разработчик дежурный в команде смотрит на этот тест и понимает, что с ним делать, и либо его сам фиксит, либо отдает кому-то еще. Тем не менее.

  15. Самат Галимов

    Так, тест упал, упал значит не прошел, значит нашлась ошибка.

  16. Максим Садым

    Да.

  17. Самат Галимов

    А сколько таких тестов обычно бывает, UI-тестов? Можно быть как раз на примере своей работы в Амазоне?

  18. Максим Садым

    Ну вот смотри, в Амазоне я работал над проектом Gift Receiver. Это достаточно небольшой проект, то есть там, по-моему, около 8 страниц было. За этим еще некоторые workflow, некоторые процессы стояли, тем не менее.

  19. Самат Галимов

    Gift Receiver. Что он делал?

  20. Максим Садым

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

  21. Самат Галимов

    Ну, чтоб тебе мусора было меньше, да? Чтоб люди не выкидывали вещи, которые мне нужны.

  22. Максим Садым

    Да, абсолютно. При этом, чтобы люди не боялись дарить подарки и чтобы было меньше мусора.

  23. Самат Галимов

    Вау, прикольно. Ты сказал 8 страниц, это 8 веб-страниц, то есть 8 страничек на сайте или это 8 страничек кода?

  24. Максим Садым

    А, нет, это 8 страничек на сайте. Кода там было, ой, я сейчас тебе не скажу по срочкам, но там хорошая лыжка была, достаточно большая. А UI-тестов у нас там было примерно около 200.

  25. Самат Галимов

    Нифига себе, то есть 8 страниц на

  26. Самат Галимов

    сайте и 200 UI-тестов Примерно так, может

  27. Максим Садым

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

  28. Самат Галимов

    А, тест тоже надо менять, обновлять так же, как ты обновляешь программу.

  29. Максим Садым

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

  30. Самат Галимов

    Можешь привести примеры сценариев?

  31. Самат Галимов

    Потому что уже стало интересно, к чему эта страница может происходить.

  32. Максим Садым

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

  33. Самат Галимов

    Ага.

  34. Максим Садым

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

  35. Самат Галимов

    А что должно произойти в такой ситуации?

  36. Максим Садым

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

  37. Самат Галимов

    Это отдельный сценарий? Проверить, что браузер защитил, и второе, что сервер защитил?

  38. Максим Садым

    Это два разных сценария, да.

  39. Самат Галимов

    А, вот теперь становится понятно, почему их 200, ну и там очень много. Где эти тесты хранятся? Это как бы исходный код, который хранится рядом с программой, или это какая-то отдельная система, в которой можно хранить? То есть эти тесты они текстом пишутся или где-то накликиваются? Мне вот это интересно.

  40. Максим Садым

    Не существует одного стандартного способа тестирования, нестандартизированная штука. Существует много подходов. Существует подход, например, называется BDD, Behavior Driven Development, разработка по поведению пользователя. Сначала мы описываем, что мы вообще ожидаем от системы. Да, но пользователь, залогиненный на сайте, когда он нажимает на кнопку «Добавить товар в корзину», тогда товар в корзину добавляется. Существуют системы, которые позволяют прямо на английском языке описывать сценарий. И существуют системы, которые это превращают в программы, которые уже тестируют в тестах. Но при этом, конечно, разработчикам нужно немножко поработать для того, чтобы описать, о чем вообще эта система и что значат эти слова, глаголы. Какие-то глаголы, какие-то существительные и так далее.

  41. Самат Галимов

    То есть программа позволяет разговаривать с собой на таком более-менее человеческом языке?

  42. Максим Садым

    Да.

  43. Самат Галимов

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

  44. Максим Садым

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

  45. Самат Галимов

    А потом программистам нужно сделать так, чтобы их программы понимали, что эти сценарии хотят получить.

  46. Максим Садым

    Абсолютно.

  47. Самат Галимов

    Блин, это дохера работа для программиста.

  48. Максим Садым

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

  49. Самат Галимов

    Да, это жесть какая-то. Какие еще есть варианты? Потому что это какой-то ад.

  50. Самат Галимов

    А есть на русском языке такие системы, ты знаешь?

  51. Максим Садым

    Я слышал, что ребята экспериментировали с системами на русском языке. Я не помню, чем это закончилось.

  52. Самат Галимов

    Один эсом.

  53. Максим Садым

    Какие еще подходы существуют? Еще один подход— это мы делаем отдельный проект для тестировщиков. Мы готовим для них инфраструктуру для того, чтобы они могли писать тесты. Мы не ожидаем, что они будут писать какие-то инфраструктурные вещи, какие-то серьезные сетапы. У них задача больше сфокусироваться не на программировании, а на том, чтобы нашу систему взломать или подумать о том, где у нее могут быть уязвимости. И для этого мы предоставляем проект отделу тестирования и говорим, пожалуйста, ребята, пишите вот сюда, вот таким образом, вот здесь тесты, вот здесь все, что вам нужно. Например, хотите создать клиента, вызывайте вот этот метод. Хотите сделать так, чтобы пользователь пошел, пожалуйста, вызывайте вот здесь и так далее. То есть мы готовим для них средний уровень нашего сценария и дальше уже ожидаем, что они сами, пользуясь этим методом, пишут тесты. Это второй сценарий.

  54. Самат Галимов

    Скажи, пожалуйста, это все еще UI или это уже что-то другое?

  55. Максим Садым

    Мы можем это делать на любом уровне. Как правило, если мы это отдаем отделу тестирования, то мы скомпенсируем UI. Потому что представь себе, у тебя есть отдел тестирования, ты делаешь релиз, выкладываешь новую версию, и при этом у тебя существует 500 обычных сценариев поведения пользователей. Тогда получается, что у тебя отдел должен сидеть неделю, две недели, и 10 человек, они распределяют эти 500 сценариев между собой и воспроизводят их. Делают то же самое, что пользователь сделал бы. Это делается перед каждым релизом, они повторяют, и повторяют, и повторяют эту работу. И получается, что очень много их времени уходит для того, чтобы перепроверить то, что могла проверить машина.

  56. Самат Галимов

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

  57. Максим Садым

    Абсолютно. Более того, у нас еще есть одна проблема. Когда тестировщик нашел какую-то проблему и сказал разработчику, разработчик пофиксил эту проблему, как-то изменил код, и нам нужно заново проверять все, потому что когда программист менял в одном месте, могло сломаться в другом.

  58. Самат Галимов

    Офигеть! Вот это, конечно, самый ад. Представляешь, типа ты 90% всех тестов прогнал, типа все проверил, все было в порядке, на последнем тесте что-то не так, и теперь тебе нужно все заново перепроверять.

  59. Максим Садым

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

  60. Самат Галимов

    Ну да.

  61. Самат Галимов

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

  62. Максим Садым

    Да.

  63. Самат Галимов

    Это надо осознать перед тем, как думать о программировании.

  64. Максим Садым

    Ну, мне кажется, на самом деле, в достаточно большом количестве областей оно работает примерно так, то есть сайд-эффекты (side effects) в совершенно неожиданных местах.

  65. Самат Галимов

    Ну, я себе представляю, почему-то со строительством,

  66. Самат Галимов

    мне кажется, там как-то более... Здесь кирпич положил неправильно, значит, в этом месте оно и неправильно. А в целом здание вряд ли развалится.

  67. Максим Садым

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

  68. Самат Галимов

    К счастью, у нас есть возможность написать

  69. Самат Галимов

    тесты, чтобы такого не происходило.

  70. Максим Садым

    Абсолютно.

  71. Самат Галимов

    Слушай, раз мы уже говорили о нагрузке, давай уйдем с UI. Мне кажется, что мы его так более-менее покрыли тестами. Давай поговорим про нагрузочное тестирование. У меня был такой проект— интернет-магазин iGoods. Мы там работали как раз во время начала коронавируса, тогда мы еще не знали, что сейчас коронавирус начнется. Но в какой-то момент было выступление Путина по телевизору, что две недели сидим по домам, работать не будем, денег вам платить тоже не будем. Но суть была в том, что в

  72. Самат Галимов

    магазины ходить нельзя будет.

  73. Самат Галимов

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

  74. Максим Садым

    Ну, от коронавируса, к сожалению, нас бы это не спасло. И вот этот сценарий, который ты описал, обычно называется «Чёрный лебедь». То есть это произошло событие, которого мы вообще не ожидали и к которому были совершенно не подготовлены. К счастью, чёрный лебедь прилетает очень редко, и после того, как прилетел чёрный лебедь, он перестал быть чёрным лебедем. И мы уже знаем, что бывают такие сценарии. Приведу пример с Амазоном. Рождество наступает каждый год. У нас была по этому поводу шутка. Существует единственный дедлайн— это Рождество.

  75. Самат Галимов

    То есть к Рождеству надо точно успеть.

  76. Максим Садым

    Да, при этом ты знаешь, что обычно пользователи перед Рождеством делают вот так, используют Амазон так часто в эти дни и так далее. То есть ты примерно знаешь по предыдущим данным, как это будет.

  77. Самат Галимов

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

  78. Максим Садым

    Мы количество машин увеличивали, по-моему, раз в 10.

  79. Самат Галимов

    В 10 раз больше серверов, чем обычно.

  80. Самат Галимов

    Что они все делают, Господи?

  81. Максим Садым

    подарки. Так вот, представь себе, что у тебя есть система, какой-то сервис, и к тебе вдруг пришло в 10 раз больше пользователей. Уверен ли ты, что твоя система выдержит? Уверен ли ты, что ты можешь добавить какое-то количество дополнительных вычислительных мощностей, дополнительных компьютеров? Уверен ли ты, что они между собой будут корректно взаимодействовать? Уверен ли ты, что у тебя не будет проблем где-нибудь с сетью, например, с локальной сетью? Вот чтобы ответить на все эти вопросы, существует нагрузочное тестирование. По большому счету, как это работает? Мы симулируем огромный трафик людей, которые занимаются примерно тем же самым, чем они занимаются в обычной жизни.

  82. Самат Галимов

    То есть мы не сажаем дополнительно 10 тысяч или дополнительно миллион человек как ручное

  83. Самат Галимов

    тестирование, это уже точно программная штука.

  84. Максим Садым

    Да, это достаточно дорого— посадить миллион человек на нагрузочное тестирование. Мы, опять же, пишем программу, которая симулирует большое количество реальных пользователей. Как правило, одна машина не справляется с тем, чтобы симулировать такое количество пользователей. У нас несколько машин симулируют пользователей, они приходят на систему, они симулируют реальные действия, они проверяют правильный результат и они, что очень важно, замеряют, как быстро мы ответили. То есть если интернет-магазин, страничка отвечает тебе через минуту, то, скорее всего, тебя уже там нет.

  85. Самат Галимов

    Человек не дождется просто.

  86. Самат Галимов

    Да.

  87. Самат Галимов

    Можешь привести пример?

  88. Максим Садым

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

  89. Самат Галимов

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

  90. Самат Галимов

    бы надо больше попотеть, чем 10.

  91. Максим Садым

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

  92. Самат Галимов

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

  93. Самат Галимов

    не пустим, потому что у нас база данных не выдерживает.

  94. Максим Садым

    Условно так, то есть на самом деле существует load balancer, так называемый, это промежуточный слой между базой данных и сервисом. И вот load balancer в какой-то момент понимает, что слишком большая нагрузка, слишком большой latency, и он говорит, извините, мы больше заказов не принимаем.

  95. Самат Галимов

    Latency задержки.

  96. Максим Садым

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

  97. Самат Галимов

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

  98. Самат Галимов

    Да.

  99. Самат Галимов

    Больше людей не пустим.

  100. Максим Садым

    Да.

  101. Самат Галимов

    Вау.

  102. Максим Садым

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

  103. Самат Галимов

    Даже когда невозможно взять его запрос, тебе все равно надо аккуратно пользователю об этом сказать.

  104. Максим Садым

    Да, абсолютно. Потому что существует сценарий, например, программисты иногда делают следующим образом. Хорошо, у меня не получился запрос, я его повторю.

  105. Самат Галимов

    Ой-ой-ой.

  106. Самат Галимов

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

  107. Максим Садым

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

  108. Самат Галимов

    А приведи пример такого запроса, который обычно повторяется.

  109. Максим Садым

    Ну, например, у тебя сервис спрашивает у базы данных, покажи мне всех Teddy Bear.

  110. Самат Галимов

    Всех мишек на сайте.

  111. Максим Садым

    Вот, а база данных при этом очень занята, и тебе load balancer тут же говорит вот этот промежуточный слой, который отвечает за то, чтобы слишком базу данных не нагружать. Он тебе отвечает, ой, извини, у нас все слишком плохо, мы не справляемся. А твой сервис, тут же я снова говорю, нет, ты все-таки мне отдай его. И тогда уже к Load Balancer будет очень много запросов от всех таких же клиентов. И в итоге у нас Load Balancer уже начнет задыхаться, а не база данных.

  112. Самат Галимов

    Окей.

  113. Максим Садым

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

  114. Самат Галимов

    Сколько таких праздников в год бывает?

  115. Максим Садым

    У нас мир большой. У нас существует Рождество, которого есть Black Friday, Cyber Monday в европейских странах.

  116. Самат Галимов

    Чёрная пятница, Киберпятница, даже в России они уже есть.

  117. Максим Садым

    Да, в Индии я забыл название праздника.

  118. Самат Галимов

    Дивали, кажется.

  119. Максим Садым

    Да, да, да. Вот, очень-очень важный праздник. По всему миру разные традиции и такое количество ивентов, их достаточно много.

  120. Самат Галимов

    Офигеть! То есть ты знаешь праздники всех народов мира, потому что каждый праздник, это значит на Амазон придёт куча людей, будут покупать подарки даже друг другу.

  121. Максим Садым

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

  122. Самат Галимов

    И перед каждым праздником тебя уже протестируют, что на этот праздник вы не упадете?

  123. Максим Садым

    Перед каждым большим праздником, да.

  124. Самат Галимов

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

  125. Самат Галимов

    Это не просто на кнопочки тыкать.

  126. Самат Галимов

    Кто этим занимается?

  127. Максим Садым

    Этим занимаются разработчики, по крайней мере в Амазоне. В конце концов, это сводится к тыкать кнопочки.

  128. Самат Галимов

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

  129. Максим Садым

    Опять же, в Амазоне существует такая должность, называется SDET. инженер по разработке программного обеспечения. А SDAT – это Software Development Engineering, то есть это разработчик тестов Но это не только тестов, по большому счету обязанности SDAT – это разрабатывать инфраструктуру для того, чтобы разработчики могли тестировать То есть он

  130. Самат Галимов

    даже не сам тесты пишет, а он пишет программы для того, чтобы программистам было проще писать тесты для своих программ?

  131. Максим Садым

    Абсолютно И, среди прочего, они занимаются тем, что готовят нагрузочные тестирования, готовят машины для нагрузочного тестирования, готовят сценарии, готовят данные, которые будут пытаться воспроизвести. занимаются либо SDE, либо SDET.

  132. Самат Галимов

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

  133. Максим Садым

    Да. Ручным тестированием, как правило, SDET не занимаются, это слишком дорого, потому что SDET очень мало. Их сильно меньше, чем SDE. О!

  134. Самат Галимов

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

  135. Максим Садым

    Абсолютно.

  136. Самат Галимов

    То есть это более такая высокая каста, можно сказать, программистов?

  137. Максим Садым

    Это параллельная каста. Почему-то в среде программистов принято считать, что тестировщик— это те, кто не умеют программировать.

  138. Самат Галимов

    Да, это правда.

  139. Максим Садым

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

  140. Самат Галимов

    Что это значит?

  141. Максим Садым

    Один SDAT работает сразу на несколько команд и готовит инфраструктуру, чтобы несколько команд могли делать, например, нагрузочное тестирование.

  142. Самат Галимов

    То есть он сидит не внутри только одного проекта, а он типа обслуживает сразу несколько проектов?

  143. Максим Садым

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

  144. Самат Галимов

    А ты был как раз таким программистом тестирования?

  145. Максим Садым

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

  146. Самат Галимов

    И ты писал тест на то, чтобы проверить, что программа типа всегда будет продолжать работать так же, как она работала раньше?

  147. Максим Садым

    По большому счету, да. Потому что у нас пришла новая команда, нам отдали старый проект, и нужно было с этим что-то делать. И, в общем, так получилось, что я начал фокусироваться на тестах, и, в конце концов, это привело к тому, что перешёл в SDET… один из проектов SDET, над которым я работал, хаос-тестирование.

  148. Самат Галимов

    давай про него и поговорим подробно.

  149. Максим Садым

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

  150. Самат Галимов

    Тут вообще надо пояснить, что типа условные Google или тот же самый Amazon— это типа 10 тысяч серверов или там 100 тысяч серверов, я не знаю, сколько сотен тысяч серверов. При таких объемах у тебя постоянно что-то

  151. Самат Галимов

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

  152. Самат Галимов

    Расскажи дальше, я не хочу просто давать определение хаос-тестированию, расскажи ты, как ты это видишь лучше.

  153. Максим Садым

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

  154. Самат Галимов

    Во-первых, дофига ждет, а потом понимает, что ошибка.

  155. Максим Садым

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

  156. Самат Галимов

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

  157. Самат Галимов

    Не только.

  158. Максим Садым

    То, что ты описал,— это задача Load Balancer. У нас задача, например, представь себе, на компьютере по какой-то причине процессор занят на 100%, неважно чем. Пришел пользователь и говорит, вот, пожалуйста, тебе запрос.

  159. Самат Галимов

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

  160. Максим Садым

    Абсолютно. Приходит и говорит, дай мне список мишек. А вот этот физический компьютер, который сидит где-то в дата-центре, он говорит, сейчас дам. И по-прежнему у него 100% загрузки процессора, он не может ничего сделать, но он пообещал. Это не очень правильно. Например, у нас есть такая штука, называется тайм-аут. Через какое-то время запрос должен прекратиться. Через какое-то время мы должны сказать, ой, слушай, извини, мы не можем. Мы прям сильно-сильно заняты, все, не могу. Сходи к кому-нибудь еще. Мы должны протестировать, что вот эта штука работает правильно, что мы тайм-ауты правильно отдаем. Мы должны убедиться, что когда процессор освободится, что мы снова начали нормально работать, что у нас нету какого-нибудь другого затыка. Мы должны убедиться, что если у нас память, например, полностью была занята и потом упала, то у нас тоже все хорошо. А с жестким диском это все нужно проверять.

  161. Самат Галимов

    Господи, Максим, остановись.

  162. Самат Галимов

    Вот ты сейчас описываешь количество проблем, которые могут быть, я просто офигеваю. Ну в смысле, надо пояснить, что когда ты пишешь программу, happy path («хэппи пас»), то есть то, когда всё нормально идёт, ты думаешь, как работает моя программа? Вот человек отправляет запрос, вот он получает ответ, всё нормально.

  163. Самат Галимов

    Это типа 10% твоей программы, а остальные 90%— это описать, что происходит, когда что-то не

  164. Самат Галимов

    так. Тут очень хорошая аналогия— это медицина. В ней одна книжка—

  165. Самат Галимов

    это «Анатомия здорового человека», а дальше 10 книг о том, что может пойти не так и что в этой ситуации делать. И вот тут ровно такая же проблема.

  166. Максим Садым

    Ты прямо сейчас идеально описал мою работу.

  167. Самат Галимов

    Ну, начинаешь перечислять, типа, что может пойти не так, и я понимаю, что этот список, он бесконечный просто.

  168. Максим Садым

    С одной стороны, он бесконечный, с другой стороны, у нас уже есть некий опыт, и мы просто смотрим, что шло не так, и пытаемся предположить, что может пойти не так, и проверяем эти сценарии. Опять же, Мы не должны это делать руками, всё это проверять. Мы просто пишем программу, которая воспроизводит такие проблемы, делаем большую красную кнопку «проверить», а разработчики перед Рождеством, они нажимают на эту большую красную кнопку «проверить» и смотрят, какие у них красивые графики. Вот у них красивые графики отображаются, вот здесь вот была большая нагрузка, вот здесь вот она упала, вот здесь мы отвечали вот так-то, вот здесь отвечали так-то. После того, как проблемы закончились, всё вернулось на круги своя и всё хорошо стало. И они довольны. Либо не вернулись и так разбираются, в чем была проблема.

  169. Самат Галимов

    Тогда они работают.

  170. Самат Галимов

    Обычно там на графике показано количество пользователей, количество запросов в секунду. Дальше то, с какой скоростью мы отвечаем на эти запросы в среднем. Или, например, то, с какой скоростью мы отвечаем 95% пользователей. Вот эти все графики показывают жизнеспособность твоей системы под нагрузкой. Слушай, мы начали все это со слова хаос-тестирования, а мы вроде как вернулись к нагрузочному тестированию. Объясни, где разница между нагрузочным тестированием и хаос-тестированием.

  171. Максим Садым

    Нагрузочное тестирование— это когда у тебя все хорошо. У тебя только просто приходит большое количество пользователей. А хаус-тестирование— это когда, как в фильме, к тебе прибегают гремлины и начинают грызть твой компьютер. То есть ты специально натравливаешь на свой компьютер, на свой сервер таких гремлинов, которые загружают процессор полностью. Либо заполняют всю память, либо заполняют весь жесткий диск, либо заполняют сетевые соединения. То есть у тебя есть специальные гремлины, которые умеют это делать.

  172. Самат Галимов

    А, то есть ты ломаешь свой компьютер,

  173. Самат Галимов

    по сути, по разному, разными способами?

  174. Максим Садым

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

  175. Самат Галимов

    на другой дата-центр. Хаос-тестирование, это довольно сложная техническая штука. И это привилегия IT-гигантов или это все делают?

  176. Максим Садым

    Это начал делать Netflix. Они это сделали open-source, и теперь кто угодно может это использовать. Большинство больших компаний. Если это достаточно небольшая компания, это просто слишком дорого.

  177. Самат Галимов

    И можно реально просто перезагрузить сервер или

  178. Самат Галимов

    там что-нибудь такое сделать, и все нормально будет.

  179. Максим Садым

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

  180. Самат Галимов

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

  181. Максим Садым

    Вот да, у нас все равно такая история была.

  182. Самат Галимов

    Макс, какие мы виды тестирования важные еще не затронули?

  183. Максим Садым

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

  184. Самат Галимов

    Но, тем не менее, Давайте чуть помедленнее. Значит, мы сейчас с тобой обсуждали UI-тесты, то есть интерфейсные тесты. Это то, когда программа условно нажимает на кнопки в твоей программе. Потом абсолютное нагрузочное тестирование. Это когда мы всю систему в целом проверяем на то, как она относится к тому, когда к ней приходит в 10 тысяч раз больше людей, чем обычно. Потом хаус-тестирование, когда у программы становится гораздо меньше ресурсов. А теперь мы опускаемся на самый низкий уровень. То есть вот у тебя программа, в ней есть отдельные модули, кусочки программы, которые делают какие-то маленькие задачки. И ты вот проверяешь именно их, да?

  185. Максим Садым

    Абсолютно. Это называется юнит-тесты. Мой самый любимый пример юнит-тестов, когда у нас была следующая проблема. У нас был очень небольшой кусок логики, который проверяет, какой квартал сейчас есть по дате. Что можно пойти не так? Первый квартал начался 1 января, второй квартал начался 1 апреля, а вот 1 июля третий квартал не начался.

  186. Самат Галимов

    Почему?

  187. Максим Садым

    А потому что квартал это же 4 месяца. Вот мы делили на 4. Но при этом, чтобы сошлось, мы вычитали где-то еще единицу. И так получилось, что 1 апреля начался 2 квартал, а вот в июле нет.

  188. Самат Галимов

    Так, при чем тут тесты?

  189. Максим Садым

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

  190. Самат Галимов

    А, то есть unit test выглядел бы так. Модуль программы, который проверяет квартал вот есть, и test ему выглядел бы так. Проверишь, что такого числа начинается первый квартал, такого числа второй, такого числа третий. То есть ты подаешь кусочку своей программы на вход дату и проверяешь, что он возвращает, что да, квартал начался.

  191. Максим Садым

    Абсолютно. Я говорю, 1 июля третий квартал, а 30 июня второй. Ну как бы хорошо. Ну там проверяешь вот каждый квартал.

  192. Самат Галимов

    Офигеть.

  193. Самат Галимов

    На самом деле юнит-тесты— это религия моего партнера Феди, он вообще не берет на работу программистов, которые не пишут юнит-тесты.

  194. Максим Садым

    Достаточно сложно программировать, если у тебя нет юнит-тестов, потому что ты узнаешь о проблемах, которые ты сам создал, слишком поздно. Очень поздно. И их потом будет очень сложно решать. Поэтому очень важная вещь. Так вот, моя любимая тема— это мутационное тестирование. Мутационное тестирование следующее. Вот ты написал какой-то модуль, написал юнит теста для него, и дальше есть такая метрика, называется coverage— покрытие тестами. По сути, что ты делаешь? Запускаешь тест, и существует специальная программа, которая проверяет каждую строчку кода, заходила ли программа проверки в каждую твою строчку кода.

  195. Самат Галимов

    А, то есть условно берем весь наш текст программы и закрашиваем зеленым те кусочки, которые проходились, когда работал тест?

  196. Максим Садым

    Абсолютно.

  197. Самат Галимов

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

  198. Максим Садым

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

  199. Самат Галимов

    осталась беленькой, то это точно проблема, а вот если она стала зелененькой, мы еще

  200. Самат Галимов

    не уверены Так, и как стать уверенным? Мы меняем эту строчку То есть просто

  201. Самат Галимов

    программа случайным образом что-то там нафигачивает.

  202. Максим Садым

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

  203. Самат Галимов

    Офигеть, как круто! То есть ты меняешь свою программу, и твои тесты должны это словить, потому что изменения точно безумные.

  204. Максим Садым

    Не обязательно безумные, то есть... Ну, оно

  205. Самат Галимов

    как бы меняет суть твоей программы.

  206. Максим Садым

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

  207. Самат Галимов

    Классно!

  208. Самат Галимов

    Да, я на самом деле не слышал о такой штуке, и она звучит просто дико весело.

  209. Самат Галимов

    Я постоянно это слышал, что тестирование— это такой вход в профессию. Многие люди, которые хотят стать программистами, начинают с того, что они становятся тестировщиками. Почему так происходит? Почему такое мнение есть?

  210. Максим Садым

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

  211. Самат Галимов

    Знаешь, мне кажется, что весь наш разговор— это на самом деле ответ на этот вопрос, но я все-таки его еще раз задам, давай поговорим. Тестирование— это программирование или это попроще?

  212. Максим Садым

    На мой взгляд, тестирование— это сложнее. Как ты упомянул, Happy Path— это только 10% наших сценариев. 90% нашей работы— это предупредить то, что пойдет не так. И вот это очень тесно связано с тестированием. По большому счету, тебе нужно это все тестировать. Поэтому 90% нашей работы— это предупредить проблемы. Поэтому с этой точки зрения я считаю, что тестирование сложнее, чем программирование само по себе.

  213. Самат Галимов

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

  214. Самат Галимов

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

  215. Максим Садым

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

  216. Самат Галимов

    А зарплата тестировщиков при этом ниже, чем у программистов, или как? Как вообще зарплата соотносится?

  217. Максим Садым

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

  218. Самат Галимов

    Окей, поговорили про теорию, давайте про тебя. Расскажи, как ты вообще сам попал в тестирование?

  219. Максим Садым

    Первый мой проект с тестированием, очень тесно связанный с тестированием, был SKB Contour SKB Contour—

  220. Самат Галимов

    это компания российская, которая делает решения для электронно-цифровых подписей, для сертификатов Они делают даже такие штучки, которые вот втыкают в компьютер, и там внутри у тебя электронно-цифровая подпись Если вы открывали ИП, то вы знаете,

  221. Максим Садым

    что это такое Есть такая технология, называется TDD— Test Driven Development Идея следующая. Прежде чем писать код, ты пишешь тест, и он у тебя ломается. И потом ты пишешь код, чтобы этот тест проходил, и, собственно, становится счастье. То есть сначала пишешь тест, а потом пишешь код. Сначала думая, что именно ты хочешь реализовать, и потом это реализовываешь.

  222. Самат Галимов

    Как оно должно работать?

  223. Максим Садым

    Я пришел в проект, в котором ребята были большие фанаты этой идеологии. И у нас тестов было, по-моему, 2000 UI-тестов. Вот такого порядка цифры были.

  224. Самат Галимов

    Неплохо.

  225. Максим Садым

    Это было прекраснейшее время. И чуть-чуть до того, как я попал в эту команду, к нам на Урал, опять же, SKB Contour, спасибо им большое, привозил к нам Кента Бека, идеолога TDD, Test Driven Development.

  226. Самат Галимов

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

  227. Самат Галимов

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

  228. Самат Галимов

    придумал, приезжал по приглашению Контора на Урал для того, чтобы прочитать лекции о своем подходе. Это реально взрыв мозга. Просто очень большая доля программистов в мире использует этот подход. И вы привезли основателя этого подхода. Круто.

  229. Максим Садым

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

  230. Самат Галимов

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

  231. Максим Садым

    Абсолютно.

  232. Самат Галимов

    Как ты вообще перешел из Контура в Амазон, потому что Амазон это типа одна из ведущих IT-компаний на свете, а ты

  233. Самат Галимов

    на Урале прогаешь для Контура?

  234. Максим Садым

    Я на Урале пробую для контура и по политическим причинам решаю уехать за рубеж. Я еду работать на небольшой стартап в Германии, в Берлине, но потом в определенный момент стартап закрылся, что бывает с 90% стартапов, и я пошел работать в Амазон. Там была прямо такая метафизическая история, как я пошел работать туда. Шел август 2015 года. Я читаю в новостях, что идут персеиды. Я думаю, о, как классно персеиды, звезды падают. Пойду посмотрю.

  235. Самат Галимов

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

  236. Максим Садым

    Звездный дождь. Сижу, смотрю на небо, звезды не падают. Мне скучно. Я думаю, так, надо придумать какое-нибудь желание, чтобы вот звезда упала. Я такой, хоп, желание загадал, и молодец. И какой-нибудь абсолютно безумный, чтобы вот прям точно без звезды вообще никак. А я хочу в гугле работать. Отличное желание, да, все, классно. Сижу, звезды не падают, и не падают, и не падают. И у меня в голове мысль, так, я хочу работать в гугле, а все, что я для этого делаю, я сижу и смотрю на небо. Наверно, в этом плане есть какой-то подвох. Я думаю, а что сделать, если я хочу работать в Google, кроме как смотреть на небо? Наверно, надо загуглить. Я гуглю, как устроиться на работу в Google. Первая страница выдачи рекомендует мне одну и ту же Cracking the Coding Interview. Классическая книжка, прекраснейшая, рекомендую абсолютно всем. Заказываю эту книжку, начинаю решать оттуда задачи, и заодно пишу своему другу, который работает в Гугле, говорю, всё, я хочу работать в Гугле, давай сделаем мне реферал (referral). Вот, съездил на собеседование, собеседование провалил, и попутно решил сходить на собеседование в Амазон, потому что они приезжали в Берлин, и я подумал, я сейчас потренируюсь перед Гуглом на Амазоне, и в Гугл потом пойду. Прошел собеседование в Амазон, они мне прислали оффер, и пошел работать в Амазоне.

  237. Самат Галимов

    Идеальная история, Максим. Друзья, если хотите поработать в какой-нибудь крутой компании, возможно, вам нужно для этого что-то сделать.

  238. Самат Галимов

    И вот ты попал в Amazon, и ты говоришь, что ты как раз начал писать тесты. Но ты попал просто как фронтенд-разработчик, да?

  239. Максим Садым

    Нет, фулстек-разработчик (full-stack), потому что просто фронтендом еще в предыдущей фирме мне надоело заниматься только фронтендом, и я занимался, ты не поверишь, еще и тестами. Так вот, пришел Amazon, у нас проект старый, люди новые, у нас достаточно мало людей, которые понимают, что там происходило. У меня от этого дикий стресс, я не понимаю, как оно работает. Я начинаю писать тесты, чтобы зафиксировать, чтобы понять, как оно работает, и чтобы сделать так, чтобы оно работало так же всегда. По крайней мере, чтобы оно не изменило работу без моего ведома.

  240. Самат Галимов

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

  241. Максим Садым

    Абсолютно.

  242. Самат Галимов

    Какой это был проект, ты помнишь?

  243. Максим Садым

    Это все еще был Gift Receiver, то

  244. Самат Галимов

    есть, по большому счету... Это вот как раз подарки.

  245. Максим Садым

    Да, это проект с подарками был, да. Там тесты были, но просто покрытие было не очень большое, и я дописывал то, что я не понимал.

  246. Самат Галимов

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

  247. Максим Садым

    Мне очень повезло с менеджером в тот момент. Менеджер понимал, что мы переняли Legacy проект, и что нам нужно время для того, чтобы его как-то перенять. И один из проектов моих и личных был, это как раз написание UI-тестов для Gift Receiver. Это был мой проект, моя инициатива, и менеджер поддержал, сказал, ну да, давайте, а то там прям никто не знает, как это работает и работает ли вообще.

  248. Самат Галимов

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

  249. Максим Садым

    С точки зрения бизнеса, я прекрасно понимаю, что это дорого. Если у тебя разработчик, вместо того, чтобы писать фичи, он занимается тестами и инфраструктурой, он не выкладывает фичи. Поэтому я бы рекомендовал просто простить и понять бизнес. По большому счету, бизнесу неважно, сколько у тебя тестов. Бизнесу важно, чтобы бизнес работал, бизнес приносил деньги, и он работал стабильно. И он работал стабильно, оно стоит на третьем месте. А тесты— это как раз про то, чтобы он работал стабильно. Если бизнес вообще не приносит денег, то владельцу все равно, какое у него покрытие тестов и сколько у него mutation coverage. Абсолютно все равно. У него нет денег.

  250. Самат Галимов

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

  251. Максим Садым

    Тестирование всегда было в фокусе моего внимания, мне это было всегда интересно. И в определенный момент мой менеджер говорит, вот у нас позиция SDET? Потому что по большому счету тебе тогда не нужно будет пилить фичи и сможешь заниматься тем, что тебе нравится.

  252. Самат Галимов

    Идеальный менеджер.

  253. Максим Садым

    Было достаточно сложно отказаться от такого предложения, поэтому стал SD&T.

  254. Самат Галимов

    Что происходило дальше? Просто сейчас ты уже не работаешь в Амазоне.

  255. Максим Садым

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

  256. Самат Галимов

    Так, насколько я помню, полгода между собеседованием

  257. Максим Садым

    Первым и вторым, по-моему, два года даже было, а потом еще год и да.

  258. Самат Галимов

    Вот это настойчивость. Это прям реально внушает уважение. Расскажи, почему они тебя отсекали в первые два раза? У меня такое ощущение, что после того, как ты в Амазоне поработал, в Google

  259. Самат Галимов

    ты вообще уже просто поменял работу.

  260. Максим Садым

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

  261. Самат Галимов

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

  262. Максим Садым

    Абсолютно.

  263. Самат Галимов

    Еще вопрос. Финальный. Я у всех гостей его спрашиваю. Посоветуй что-нибудь, что ты сам читаешь в интернете, что тебе очень нравится. Просто про свое личное. Что ты любишь читать в интернете? Или смотреть YouTube, может, какой-то?

  264. Максим Садым

    Лично каналы в Телеграме в основном сейчас.

  265. Самат Галимов

    Скажи какие-нибудь два канала, которые тебе больше всего нравятся.

  266. Максим Садым

    «Типичный программист»

  267. Самат Галимов

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

  268. Самат Галимов

    Это офигенное интервью. Спасибо тебе огромное.

  269. Самат Галимов

    Мне прям так интересно.

  270. Самат Галимов

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

  271. Самат Галимов

    Респект.

  272. Самат Галимов

    Это подкаст студии Либо-Либо, и мы его сделали вместе с сервисом онлайн-образования Яндекс Практикум. Над подкастом работали редактор Юлия Яковлева, продюсер Павел Боровков, звукорежиссер Нина Мамотина. За джингл спасибо Алексею Зеленскому.

Слушайте где удобно

0:00