Семантическое управление версиями для приложений конечного пользователя
Всего один подход…
SemVer (семантическое управление версиями, также известное как семвер) - это схема для определения того, как присвоить новый номер версии программному обеспечению на основе разницы между предыдущей версией и новой версией. По сути:
Учитывая номер версии MAJOR.MINOR.PATCH, увеличивайте:
- MAJOR версию при внесении несовместимых изменений API,
- MINOR версию при добавлении функций обратно совместимым способом и
-PATCH версия при исправлении ошибок с обратной совместимостью.
Semver наиболее полезен при применении к программным компонентам, , которые обычно имеют четко определенный «общедоступный API» (интерфейс прикладного программирования). Понятие общедоступного API является основным требованием для использования semver.
Например, если инструмент командной строки с именем edi
принимает один аргумент, который должен быть числом, то его общедоступный API выглядит так: edi <number>
. Если в следующей версии инструмента API изменится на edi <date>
, это будет критическое изменение для общедоступного API (поскольку пользователь, передавший число в edi
, получит ошибка) и, следовательно, потребует увеличения номера ОСНОВНОЙ версии (например, с 1.3.0
до 2.0.0
).
Что такое общедоступный API веб-приложения, мобильного или настольного приложения?
Чтобы ответить на этот вопрос, давайте рассмотрим приложение Twitter (с начальной версией 1.0.0
) в качестве примера. Если команда разработчиков Twitter добавит кнопку в свой пользовательский интерфейс, изменили ли они свой общедоступный API?
С точки зрения конечного пользователя, они видят новую функцию. И они не заботятся о семверах или номерах версий (если они не видят их в маркетинге, например, iPhone 7
или PS4-slim
). Так что с точки зрения конечного пользователя «это просто не имеет значения»… если только что-то не пойдет не так. Затем это будет сотрудник службы поддержки, который будет заботиться о номере версии Twitter, которую пытается использовать конечный пользователь, чтобы он мог устранить проблему. (Но этот разговор о поддержке обычно заканчивается: «В любом случае, установите последнюю версию…»).
Теперь рассмотрим конечного пользователя, который пишет код для автоматизации пользовательского интерфейса (пользовательского интерфейса) или выполняет очистку экрана данных внутри приложения Twitter. Новая кнопка * является * потенциально значимой и может быть критическим изменением, поскольку UI является их общедоступным API. Они ожидали увидеть новую версию под названием2.0.0
.
Другой вид изменения пользовательского интерфейса может происходить в веб-приложениях - код пользовательского интерфейса может измениться (например, изменение класса CSS или элемента HTML), но пользовательский интерфейс может выглядеть таким же . Для конечного пользователя, который пишет код, это может также быть критическим изменением (в зависимости от того, как его код взаимодействует с приложением Twitter). 2.0.0
.
Однако на практике авторы приложений не заботятся о конечных пользователях, которые пишут код, поскольку они составляют крошечную часть всей своей аудитории и обычно доставляют больше проблем, чем они стоят: P
Два случайных интернет-человека, которые нашли время написать в блоге о плюсах и минусах управления версиями приложений, - это Дэйв Холл и Оуэн Джейкобсон. Они согласны с тем, что semver полезен для компонентов, но утверждают, что он бесполезен для приложений конечных пользователей по следующим причинам:
- Конечные пользователи не могут выбирать, какую версию запускать (для мобильных и веб-приложений; настольные приложения предлагают большую гибкость).
- Конечные пользователи не знают и не заботятся о том, какую версию они используют.
Но есть и другой тип пользователей, которым небезразличны изменения в приложении, которые, возможно, не были учтены ...
Установщик-пользователь
Пользователь-установщик - это человек, который должен установить приложение. Для них «общедоступный API» приложения - это требования для установки. Но кто является пользователем-установщиком?
Для мобильного приложения и настольного приложения Twitter установщик (обычно) является конечным пользователем. Требования для установки - это минимально необходимая версия операционной системы и подключение к Интернету.
Для веб- приложения Twitter, установщик - это кто-то из команды DevOps (или Операции). Они глубоко заботятся о требованиях к установке, поскольку им необходимо обеспечить правильную инфраструктуру на основе этих требований.
Предложение
Учитывая важность требований к установке приложения для пользователей-установщиков, я предлагаю использовать semver для версии приложений конечных пользователей, используя требования-установки в качестве общедоступных API с пользователями-установщиками в качестве потребителей этого API.
На практике увеличивайте:
- ОСНОВНАЯ версия, когда вы вносите несовместимые изменения API (например, пользователи-установщики должны каким-либо образом изменить свою инфраструктуру (телефон / планшет / ПК / веб-сервер / конфигурация брандмауэра и т. Д.),
- МИНИМАЛЬНАЯ версия, когда вы добавляете функциональные возможности обратно совместимым образом (например, передаете дополнительные данные в уже подготовленный API или добавляете какие-либо функциональные возможности конечного пользователя, которые не влияют на требования к установке), и
- Версия PATCH, когда вы вносите исправления ошибок с обратной совместимостью (например, исправляя любую ошибку конечного пользователя, которая не влияет на требования к установке).
Рассматривая установщиков-пользователей как потребителей приложения конечного пользователя, а установочные-требования как общедоступный API, Я считаю, что semver действительно имеет смысл и ценен как механизм связи для приложений конечных пользователей.