Коллеги, вопрос был навеян сегодняшней новостной публикацией, хотя “чесался в голове” достаточно давно.
Вопрос вот в чем:
Для того, чтобы какой-то полезный новый или измененный код попал в продуктивную среду, он должен быть написан. Код пишется в одной из сред разработки, потом код должен быть перенесен в среду тестирования. Среда тестирования должна быть создана, наполнена модельными данными и убита после тестирования (lean). Для тестирования кода должны быть разработаны покрывающие функциональные тесты. Могут быть разработаны и иные тесты (нагрузочные, интеграционные и любые иные по потребности). Ничего из этого (за исключением пользовательского тестирования) не должно осуществляться вручную, а следовательно это тоже код.
Вся наша разработка, модельные данные, сценарии, информация о средах хранится в системе управления версиями, т.к. она – код.
Вопрос тролля: сколько времени должен потратить разработчик (они не дешевы в 21 веке) на строки кода которые он должен написать “непродуктивно” с тем, чтобы донести до пользователя код, который будет ему реально нужен?
Масла к хлебушку добавляет осознание того, что большинство такого кода все же придется писать, а не заимствовать, т.к. импорт обвязки и тестов невозможен, т.к. она была настроена на другую функциональность, среду, язык, глубину тестирования, принципы интеграции. Импорт не подходящей на 100% обвязки (а такой и нет никогда в наличии) требует её доработки, а значит тестирования, увеличивает импортированный технический долг.
Коллеги, работающие с боевой разработкой ПО, скажите, эти потери в реальном проекте не настолько велики, насколько кажутся? Какое-то время закрывать глаза на resilience?
По-моему надо разделить сферического коня в вакууме и реальную лошадь. Описанный случай это идеальный элемент идеального проекта, в жизни все не так красиво, меньше контролируется но и обходится дешевле. Надо относится к методологии как к ящику с инструментами, а не единообразной автоматизированной линии. Если вам в гараже нужно просверлить пару отверстий вы не покупаете сверлильный станок, вы возьмете дрель. Тут та же система. Если дешевле после неудачного изменения откатиться на старую версию вручную – то может так и сделать? Если дешевле сделать ряд тестов вручную на ручной копии продуктивной среды, то может так и сделать? Если вы выпускаете продукт на неограниченный круг лиц, например, мобильное приложение которое непонятно когда и кем будет установлено, то понятно, что если что-то пойдет назад, обновить будет сложно и важно выпустить действительно надежную систему. А если это модуль для внутренней системы, от простоя которого ничего не случится, а пользователи быстро дадут обратную связь, то наверно не стоит так сильно вкладываться в автоматизацию тестирования.