Search
Write a publication
Pull to refresh
3
0
Егор @Ommonick

SDET teamlead

Send message

Проблема дублирования и устаревания знания в mock-объектах или Интеграционные тесты — это хорошо

Reading time9 min
Views17K
Многие программисты при выборе между интеграционным и юнит-тестом отдают предпочтение юнит-тесту (или, иными словами, модульному тесту). Некоторые считают интеграционные тесты антипаттерном, некоторые просто следуют модным тенденциям. Но давайте посмотрим, к чему это приводит. Для реализации юнит-теста mock-объекты навешиваются не только на внешние сервисы и хранилища данных, но и на классы, реализованные непосредственно внутри программы. При этом, если мокируемый класс используется в нескольких других классах, то и mock-объект будет содержаться в тестах на несколько классов. А поскольку тестируемое поведение принято задавать внутри теста (смотри given-when-then, arrange-act-assert, test builder), то поведение моки каждый раз заново задаётся в каждом тесте, и нарушается принцип DRY (хотя дублирования кода может и не быть). Кроме того, поведение класса декларируется в mock-объекте, но сама эта декларация не проверяется, поэтому со временем задекларированное в моке поведение может устареть и начать отличаться от реального поведения мокируемого класса. Это вызывает целый ряд сложностей:

1)Во-первых, при изменении функционала сложно вообще вспомнить, что помимо класса и тестов на него нужно изменить ещё и моки этого класса. Давайте рассмотрим цикл разработки в рамках TDD: «создание\изменение тестов на функционал -> создание\изменение функционала -> рефакторинг». Mock-объекты являются декларированием поведения класса и не имеют отношения ни к одной из этих трёх категорий (не являются тестами на функционал, несмотря на то, что в тестах используются, и уж тем более не являются самим функционалом). Таким образом, изменение mock-объектов классов, реализованных внутри программы, не укладывается в концепцию TDD.

2)Во-вторых, сложно найти все места мокирования этого класса. Я не встречал ни одного инструмента для этого. Тут можно или написать свой велосипед, или смотреть все места использования этого класса и отбирать те, где создаются моки. Но при неавтоматизированном поиске можно и ошибиться, проглядеть что-нибудь. Тут у вас, наверное возник вопрос: если проблема столь фундаментальна, как описывает автор, неужели никому не пришло в голову реализовать инструменты, упрощающие её решение? У меня есть гипотеза на этот счёт. Несколько лет назад я начал писать библиотеку, которая должна была собирать mock-объект так же, как IOC-контейнер собирает обычный класс, и автоматически создавать и прогонять тесты на поведение, описываемое в моках. Но затем я отказался от этой идеи, потому что нашёл более элегантное решение проблемы моков: просто не создавать эту проблему. Вероятно, по схожей причине специализированный инструмент для поиска моков конкретного класса или не реализован, или малоизвестен.

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

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


Читать дальше →

Да это же просто накомарник, сэр

Reading time8 min
Views21K

Кустарная адаптация серьезной военной физики под бытовые нужды на редкость гротескно проявляется в гик-субкультуре инженеров-механиков, пытающихся сымитировать стелс-технологии «в гараже» с целью «спрятать» автомобиль от полицейских радаров. В книге «Большое космическое путешествие» (с. 65-66 в русском переводе) Нил Деграсс Тайсон объясняет суть доплеровского эффекта именно на таком примере, который оценят особо одиозные автолюбители. Полицейский радар есть микроволновая пушка плюс радиодетектор и работает в электромагнитном спектре. Сотрудники ДПС считывают отраженный сигнал радара, и на этот сигнал можно активно влиять, искусственно занижая значение скорости, либо рассеивая или экранируя волну.

Читать далее

Загадочный случай фантомного сертификата

Reading time6 min
Views11K

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

В главных ролях: Minio, Kubernetes, Minio Operator, TLS и старина curl.

Читать далее

Go, Allure и HTTP, или Как мило тестировать HTTP-сервисы на Go

Reading time10 min
Views16K

Привет! Меня зовут Сергей, я старший разработчик в Ozon и раньше вообще не был замечен в QA.

Все мы привыкли к лёгкому написанию тестов на Python и Java — это основные языки автотестировщиков с богатым инструментарием утилит и всего, что упрощает жизнь. Что нужно для написания автотестов для HTTP-сервиса на Python или Java? Гугл, бутылочка крафта и два часа времени. 

А как быть в случае с Go? Как раз на нём мы в большинстве случаев пишем микросервисы. И если тесты написаны на другом языке, разработчики не могут внести в них свой вклад или отревьюить их. Поэтому внутри Ozon активно развивается Go-сообщество QA, и этим ребятам тоже нужно тестировать HTTP-сервисы и проверять отчёты в Allure. Как настоящие сварщики мы подумали: «Если чего-то не хватает, нужно написать своё». Сказано — сделано: встречайте опенсорс-библиотеку CUTE в BDD-стиле, которая облегчает тяготы создания автотестов и упрощает переход на Go. Главные фичи: создание HTTP-тестов, возможность реализовывать проверки из коробки, Allure-отчёты и низкий порог входа. Инструкция — под катом.

Читать далее

Good Software Engineer — кто это?

Reading time18 min
Views13K

Чем хороший специалист в разработке ПО отличается от плохого, что для него свойственно? Ответ во многом зависит от этапа его развития: для начинающих важны одни вещи, по мере получения опыта — совсем другие. Я попробовал собрать в одном материале свои соображения о разных этапах становления специалиста. Давайте выясним аспекты, формирующие человека, про которого потом можно уверенно сказать — вот «хороший специалист». Осторожно, под катом много картинок для лучшего ассоциативного запоминания.

Читать далее

Код чистой воды: какие книги выбирают профи с Хабра, чтобы быть круче?

Reading time10 min
Views31K

Когда я пошла учиться на большой оффлайновый курс разработки ПО, дело стопорилось: начали мы с С/С++ и иногда доходило до того, что я клала голову на клавиатуру и плакала. Шутка ли, то 273 ошибки при компиляции, то простенькая программа попадает в вечный цикл… Такое оно, обучение с нуля. И, вероятно, всё бы бесславно закончилось, если бы я не обратилась к своей любимой студенческой уловке: забываем интернет, берём в руки книгу (в вузе это было вообще несложно, я ещё звуки dial-up помню и карточки). Справочник Шилдта, убийственно огромный том Страуструпа, клавиатура и постоянная работа с кодом — и дело не вот полетело, но пошло до достойной сдачи экзаменов. Книги не подвели: доходчивее без того неплохих лекций, подробнее статей и обсуждений в интернете.

Мне тут подумалось — а читают ли что разработчики и айтишники в 2022 году? Читают. Рекомендации оказались дельными.

Читать далее

18 отборных однострочных команд Linux

Reading time4 min
Views40K

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

Приступим!
Читать дальше →

Неустаревающие книги?

Reading time6 min
Views37K

Некоторым из этих книг уже очень много лет. Главная книга о паттернах — Design Patterns — увидела свет в 1994-м году, значит, ей уже почти тридцать. По сравнению с ней, Clean Architecture, вышедшая десять лет назад — практически, ребёнок!

Но десять лет для индустрии — гигантский срок. Возможно, эти книги уже устарели и нам они не нужны?

Перечитаем и попробуем разобраться

Детальный анализ вредоносного ПО, замаскированного под NOTEPAD++

Reading time7 min
Views9.5K

Lazarus привлекала своих жертв при помощи документов о вакансиях в таких компаниях, как LockHeed Martin, BAE Systems и Boeing. В данном конкретном случае злоумышленники привлекали жертв, ищущих работу в Boeing, при помощи документа Boeing BDS MSE.docx ( твит ShadowChasing1). Вредоносное ПО извлекает имя хоста, имя пользователя, информацию о сети, список процессов и другую информацию, которая затем должна была передаваться на один из четырёх серверов C2. Предназначенные для передачи данные сжимались, шифровались XOR, кодировались Base64 и отправлялись на сервер C2. Троян реализует четыре действия, в том числе скачивает и исполняет файл .exe или .dll, загружает PE (Portable Executable) в память процессов и исполняет шелл-код.
Читать дальше →

Брокеры сообщений, или Как происходит взаимодействие в рамках распределённой инфраструктуры

Reading time7 min
Views143K

Привет, Хабр!

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

Что будет, если ввести этот элемент в вашу архитектуру? И почему это особенно актуально сейчас, когда так широко распространился микросервисный подход к проектированию систем? Обсудим это сегодня. Все подробности — под катом.

Читать далее

Как стать хорошим техлидом

Reading time10 min
Views33K

В 2006 году Яндекс и Google приехали в Петербург в Borland, который сокращал команду. Обе компании одновременно открывали в Петербурге свои офисы на его базе. Тогда к нам пришли замечательные ребята. Мы много общались, но больше всего запомнились слова Толи Орлова. Он сказал, что рост Яндекса на тот момент ограничивает только количество лидов, которые бы могли развивать продукты. Что роли техлида и тимлида очень существенны, и часто рост компании зависит только от наличия сильных лидеров. Тогда мне и захотелось узнать, как им стать.

Меня зовут Владимир Горовой. Я был тимлидом, потом перешёл в менеджмент, руководил созданием разных сервисов, в том числе, Яндекс.Путешествий. Сейчас работаю в Яндекс.Вертикалях. У меня есть разный опыт: менеджерский, разработческий и тимлидский. Всем этим и хочу с вами поделиться.

Читать далее

Символы Unicode: о чём должен знать каждый разработчик

Reading time7 min
Views443K


Если вы пишете международное приложение, использующее несколько языков, то вам нужно кое-что знать о кодировке. Она отвечает за то, как текст отображается на экране. Я вкратце расскажу об истории кодировки и о её стандартизации, а затем мы поговорим о её использовании. Затронем немного и теорию информатики.
Читать дальше →

С больного тела на здоровое: история несостоявшейся пересадки головы

Reading time10 min
Views41K

В 2015 году в российских СМИ прогремела новость: итальянский нейрохирург Серджио Канаверо собирается произвести первую в мире пересадку головы! Его пациентом должен был стать на тот момент 33-летний программист Валерий Спиридонов, прикованный к инвалидному креслу из-за спинальной мышечной атрофии.

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

Как мы знаем, история расставила все по своим местам: операция не состоялась. Зато теперь есть возможность спокойно объяснить, почему она и не могла быть проведена. Без тысяч недовольных и неаргументированных голосов: «Вы не понимаете! Он сможет! Еще сто лет назад не мечтали и о пришивании пальца, значит, в ближайшем будущем возможно все!». Рассмотрим же более детально предпосылки такой операции, ее сложности и существующие технологии, а также видение самого Канаверо.

Читать далее

Как ускорить работу в командной оболочке Bash

Reading time4 min
Views26K

Любому начинающему разработчику необходимо научиться пользоваться командной строкой. При этом для выполнения в ней команд требуется оболочка. В статье речь пойдёт об оболочке Bash, которая популярна в UNIX-подобных системах и в большинстве дистрибутивов Linux используется штатно.
Читать дальше →

Будущее бытовой техники: есть ли замена стиральной машинке?

Reading time4 min
Views65K


Бывает у вас такое, что, взглянув на привычный предмет домашнего обихода или бытовой техники, вы подумали, что не сильно-то они поменялись со времён наших родителей, а то и момента своего изобретения — холодильники, пылесосы, стиральные машины, и так далее? Скажем, современные пылесосы: на первый взгляд, они совершенно не похожи на своих предшественников столетней давности. Но по сути это те же самые устройства, изменившиеся во вторичных характеристиках (вес, шумность, компактность, мощность), но принципиально ничем не отличаются от первопылесоса, которым чистили ковры Вестминстерского аббатства перед коронацией Эдуарда VII ровно 120 лет назад в 1902 году.
Читать дальше →

Тестирование финтех бэкенда: как мы дошли до 20 тыс. тест-кейсов

Reading time12 min
Views5.8K

Привет, я Black из Scalable, QA Lead в команде бэкенда по разработке биржевого ядра. Так как уже долгое время занимаюсь развитием высоконагруженной платформы, решил написать о том, как нам удалось поставить QA-процесс с 20 000 тест-кейсов, создать гибкую инфраструктуру для автоматизированного тестирования в нескольких типах API, включая асинхронные бинарные протоколы, и пройти путь разработки от отладочных утилит до специализированных тестовых фреймворков для интеграционного и компонентного тестирования. 

Читать далее

Чем заменить телевизор

Reading time6 min
Views20K

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

Читать далее

Пишем тетрис в bat-файле

Reading time5 min
Views25K

В комментарии к моей предыдущей статье, «Какие задачи не решаются bat-файлами?», предположили, что на bat-файлах не получится написать Doom. Насчет Дума я пока не уверен, а вот тетрис у меня получился.

Играть в тетрис бесплатно

OpenVPN. Инструкция по применению

Reading time9 min
Views84K

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

Не смотря на обилие технологий, предлагаю остановиться на старом добром OpenVPN (в связке с EASY-RSA). Решение от Джеймса Йонана отличается гибкостью, функциональностью, надёжностью и непрерывностью разработки на протяжении приличного временного периода. Так сказать, мастодонт от мира VPN-решений.

Спойлер — ссылка на довольно функциональное решение (ничего особенного, чистый бэкэнд), написанное на bash некоторое время назад, ждёт вас в конце публикации (в виде github-репозитория под именем «openvpn_helper»), а здесь же уделю внимание общей структуре и некоторым аспектам использования набора скриптов и OpenVPN.

***

Список необходимых компонентов (используемая ОС — AlmaLinux 8):

1) OpenVPN 2.4.12;
2) EASY-RSA 3.0.8.

Читать далее

Болезни и смерть станции «Мир»

Reading time9 min
Views50K
23 марта 2001 года 124 т металла и оборудования быстро сгорали в атмосфере. Орбитальный комплекс 27КС «Мир», последний осколок советской пилотируемой программы в космосе, прекратил своё существование. Люди в ЦУПе не скрывали слёз, провожая в последний путь своё детище. До сих пор ведутся споры на тему, а вот не топили бы Мир, не нуждались бы в МКС, не дарили бы иностранцам бесценный опыт эксплуатации модульных станций. Не так давно и Сергей Крикалёв, один из опытнейших космонавтов в мире, назвал ошибкой затопление «Мира». Главной причиной прекращения эксплуатации считается недостаток финансирования. Не без этого, Россия тогда очень мало денег выделяла на космос, а тут уже МКС в эксплуатацию входила. Но… есть один нюанс, про который не все помнят. Аварии.

image
Читать дальше →

Information

Rating
Does not participate
Works in
Date of birth
Registered
Activity

Specialization

Backend Developer, Quality Assurance Analyst
Lead