Продолжение моей статьи о модульном тестировании, написанной несколько месяцев назад и частично основанной на реальном жизненном опыте… с извинениями перед всеми, кто думает, что я мог иметь в виду их!

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

Теперь перенесемся на несколько лет вперед. Ваш предшественник (но уже два) написал какую-то программу, от которой сейчас зависит бизнес. Но он сломан. Библиотеки и ОС, на которые он опирался, изменились, стандарты безопасности были обновлены, и Компьютер говорит: НЕТ! НЕТ! НЕТ!

Наверняка кто-то должен знать, как работает этот POS (в конце концов, теперь это ваша работа!). Они все ушли. И все они удалили все упоминания о вашем нынешнем работодателе из своего профиля на LinkedIn. На случай, если вы пришли их искать.

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

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

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

Сколько ошибок? Наверняка это ошибка. Я не могу поверить, что кто-то проверил версию программного обеспечения, которая была настолько далека от чего-либо компилируемого. Или это я? Я просто неправильно строю?

ОК, давайте копаться в ошибках. Хм, кажется, они ссылаются на сборки на жестком диске (моих предшественников, но двух). Очень полезно. Google просто смеется надо мной, когда я пытаюсь их найти. Что теперь? Ждать! В производственной системе должна быть копия этих сборок (что бы они ни делали???) Вот это да! День спасен.

Попробуйте построить снова. Еще неизвестные сборки. Неужели этот парень (или девушка) никогда не слышал о nuget? *Вздох*.

Итак, неделя поиска малоизвестных и устаревших ссылок на сборки. (По крайней мере, я проверяю свою работу в современной системе управления версиями, так что это не напрасная трата усилий, не так ли? ;-/ Теперь у меня есть что-то, что более или менее строится (пока я крепко держу свой счастливый подписанный копия «Мифического человека-месяца»)

Итак, как мне решить проблему? (мой менеджер не стоит у моего стола с нетерпеливым видом. Не совсем!) И если я починю это, как мне убедиться, что больше ничего не сломано? И как мне его развернуть?

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

Так где же модульные тесты? (я слышал смех?) Хорошо, кажется, я знаю эту мелодию. Давайте, по крайней мере, напишем несколько тестов для того бита, который я исправил, так как это должно избавить меня от некоторых проблем позже.

Позже, намного позже, почему мои тесты проваливаются? Это не имеет никакого смысла! Неужели пользователи никогда не замечали, что это не работает должным образом?!! :-О

Давайте спросим пользователей: «О да, это было довольно раздражающим, но мы просто думали, что это фича!». Гррр. Жесткий взгляд. — Хочешь, я починю? - "Да, пожалуйста!"

Проходит еще неделя. Кажется, он строит и, вероятно, делает правильные вещи. Теперь, как мне настроить среду для тестирования? (Поскольку мое поле искажения реальности, вероятно, недостаточно джобсианское, чтобы поддерживать прямое развертывание в производстве, скрестив пальцы). Это должно быть что-то вроде производства, поэтому давайте настроим тестовую среду и попробуем. Не может быть так сложно?

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

Затем PHB (извините, Дилберт) говорит: «Вы уверены, что это решит проблему, о которой генеральный директор донимал меня весь последний месяц?». Я скрещиваю пальцы (за спиной) и стараюсь говорить небрежно, но уверенно: «Да, конечно».

Итак, день (или, скорее, вечер пятницы) наступает. Развертывание будет состоять из остановки производства, резервного копирования старых файлов и последующего копирования новых. (По крайней мере, на этот раз базы данных не задействованы). Перезапустите производство и посмотрите, что произойдет… ничего. Вот и мои выходные!

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

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

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

«Пока вы этим занимаетесь, есть другая система, которая не работает, которую написал ваш предшественник, но двое. У тебя не займет больше пяти минут, чтобы починить, не так ли?»

История не знает, пережил ли PHB «несчастный случай на рабочем месте» на аварийной лестнице.

Тем временем в соседней параллельной вселенной...

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

«Но не волнуйтесь, ваш предшественник, но два, действительно увлекался ALM, CI/CD и devops, так что это должно быть легко».

Я знаю лучше, но я здесь новичок, так что мне может повезти (на этот раз). Давайте покопаемся в devops и посмотрим, что я смогу найти.

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

Давайте проверим код и посмотрим, что мы можем сделать. Он строит? Из коробки! Этот парень знал, что делал. Давайте просто запустим набор тестов, прежде чем я попытаюсь что-то сломать/исправить. Выглядит неплохо. Давайте просто скопируем один из его тестов, чтобы воспроизвести эту проблему. Запустите тест, и что вы знаете? Он ломается так же, как производство.

Я просто разветвлю код, обновлю его, чтобы мой модульный тест заработал. Зарегистрируйтесь, вытяните запрос. Нет идти? Хорошо, у него действительно обсессивно-компульсивное расстройство — он запускает набор для сборки и тестирования, чтобы проверить PR. Но мне это нравится, и я был виноват, что не запустил набор тестов перед регистрацией.

Сборка теперь выглядит хорошо, основная ветка обновлена. Давайте воспользуемся этим конвейером развертывания, чтобы передать его в UAT. Похоже, что UAT все еще существует, но этот парень — такая звезда, что у него даже были сценарии IaC в бицепсе для создания среды в Azure. Хотя сегодня туда не надо.

Запустите интеграционные тесты. Все еще выглядит хорошо, давайте позвоним в PHB. «Это действительно срочно? Вы уверены, что хотите, чтобы я развернулся во второй половине дня?». О, вы настолько доверяете способности процесса развертывания вернуться к предыдущей версии? Хорошо, тогда. На твоей голове…

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

Через 5 минут — развертывание завершено, сирены не сработали. Кто-нибудь хоть заметил подмену? Поговорите с полезным парнем в бухгалтерии. «Знаете ту проблему, о которой ранее говорил PHB?». Нажмите кнопку. «Теперь выглядит хорошо, спасибо, приятель, не могу поверить, как быстро ты это починил. Когда я работал в последний раз, подобные вещи занимали месяцы».

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