Представьте, что репозиторий 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*****.