Как вы отслеживаете изменения, тестируете ошибки, которые влияют на несколько артефактов, выпущенных отдельно?
Совместное использование кода хорошо, потому что оно уменьшает общее количество путей через код, что означает большее влияние при меньшем количестве изменений и меньшем количестве ошибок (или большему количеству ошибок, исправленных с меньшим количеством изменений). Например, мы можем создать инструмент поиска и индексатор, которые используют один и тот же пакет обработки файлов или пакет модели.
Мы должны быть в состоянии обеспечить тестирование изменений во всех нужных компонентах и отследить, какие изменения были включены в какие выпущенные инструменты. Мы также не хотим, чтобы нас заставляли выпускать изменения во всех приложениях одновременно.
Цель: одна ошибка, подлежащая проверке, по расписанию отслеживается независимо от каждого выпущенного приложения. С помощью автоматизированных систем, которые понимают архитектуру, мы можем сделать правильный выбор.
Сценарий выпуска сплит-ошибок:
Мы можем выпустить исправление инструмента поиска, содержащее исправление производительности в библиотеке утилит. Критически важно для инструмента поиска, исправление менее заметно в индексаторе, поэтому оно может подождать до следующей версии обслуживания. Мы хотим, чтобы одна ошибка была запланирована-отслежена-выпущена с помощью патча поиска и отложена до следующего выпуска индексатора.
Итак, когда я создаю ошибку в нашей системе отслеживания (JIRA), я хочу, чтобы она волшебным образом превратилась в несколько объектов.
- основная проблема, описывающая проблему и отслеживающая разработку
- набор задач, которые позволяют мне отслеживать усилия по тестированию и отслеживать, как эта проблема была выпущена для каждого приложения, на которое она влияет.
Как мы можем сделать так, чтобы пользовательский опыт совместного использования кода не требовал усилий, чтобы поощрять его больше, не забывая о том, какие изменения повлияли на какие выпуски или вынудили людей вводить много дублирующих ошибок?
Я уверен, что крупномасштабные проекты от Eclipse до дистрибутивов Linux сталкивались с подобной проблемой, и мне интересно, как они ее решили (я собираюсь разобраться с ними позже).
Кто-нибудь из вас имеет опыт работы с подобной ситуацией и как вы к ней подошли?