Найти в Дзене
Nikita Afanasiev

Git codebase с полки-поучительная история

Представьте, что репозиторий Github физический продукт в магазине. Так же, как телефон, телевизор или другой кусок технологии в прикольной обертке.

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

React + MobX, Flask, Celery, Postgres, Docker, AWS - запущены. UX/UI выглядят отлично. Пробую немного поиграться, открываю разные файлы, пробую запустить несколько команд из терминала. Все идет хорошо. Даже есть 3 страницы с инструкциями Wiki!

Выглядит как отличный вариант для покупки!

Но подождите... нет никакой гарантии в пакете! Как узнать, что этот продукт (код) работает? Список функций длинный, и у меня нет 7 дней, чтобы проверить эту вещь (я никогда не использовал ее раньше. Я хотел бы знать, как проверить его правильно в любом случае).

Продавец магазина заметил мое подозрение, и он говорит мне: “он был куплен и использован моей девушкой, вчера для ее проекта с университета, и он работал очень хорошо. У него 5000 звезд и он является фаворитом в нашем магазине. Очень популярный код, если вы спросите меня!”

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

Я спрашиваю Продавца: "есть ли гарантия на этот продукт"?

Гарантия на упакованный кодовый продукт
Гарантия на упакованный кодовый продукт

Продавец говорит: "что вы имеете в виду под гарантией?”

И я отвечаю: "я имею в виду автоматизированные тесты. Единственный способ гарантировать работу программного обеспечения для конкретных случаев использования.”

Продавец отвечает: “Ну, к сожалению, нет. Команда, которая разработала его, не писала никаких автоматических тестов. Он был разработан как сольный проект и протестирован владельцем продукта и разработчиками. Есть Линтер, хотя, и команда сделала код-обзоры с + 1 коментарием в Pull-запросах! Однако они использовали Jenkins и CI.”

И я говорю ему быстро: "человек, нет никакого CI / CD без непрерывного тестирования. Вы должны прочитать книгу о Continuous Delivery, чтобы правильно консультировать клиентов.”

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

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

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

В этот момент продавец упоминает другую кодовую базу: "посмотрите, есть еще один код. Это не так привлекательно, и это 1800 рублей, так как это было дороже производить. Это база данных сервера Java + MySQL. Стандартные вещи. Тем не менее, существует 3-летняя гарантия, так как она имеет сильный уровень автоматизированных тестов и покрытие кода выше 80%. Существуют исполняемые спецификации BDD с использованием Cucumber. Все основные пользовательские истории автоматически тестируются.”

А потом добавляет: "У него похожий набор функций. Это соответствует вашим потребностям, и это очень сильный продукт.”

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

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

Чувство безопасности-видеть все спецификации и сценарии испытанным
Чувство безопасности-видеть все спецификации и сценарии испытанным

На этом этапе я подтверждаю свое доверие к машинам, а не к людям. Подруга продавца все равно не была подходящим тестировщиком, и я никогда не встречусь с владельцем продукта Python code-base в Зимамбве, чтобы спросить его, сделал ли он хороший ручной тест перед отправкой.

Я решаю купить Java-код с тестами, даже с более высокой ценой. В конце концов, я всегда могу вернуть его, если он не работает по исполняемым спецификациям. Гарантия побеждает!

Как сказал бы старый добрый Michael C. Feathers: "каждый код без тестов-это устаревший код". Никогда не доверяйте никому, гарантируя, что код работает без автоматических тестов, особенно когда вы наследуете базу кода.

Наследование плохого кода-это эквивалент покупки сломанного iPhone без гарантии. Вы официально F*****.