Re[3]: Manage compatibility of software
От: Aquary Россия https://wmspanel.com/
Дата: 23.08.07 04:40
Оценка: 8 (2) +1
Здравствуйте, Bug_z, Вы писали:

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

B_>1. Все верно, приложения разрабатываются независимо и имеют разную кодовую базу (.NET WinForms, ASP.NET WebServices, C++/MFC). Совместимость отслеживается по нескольким направлениям:


B_>

    B_>1. По структуре БД.
    B_>2. По интерфейсам веб сервисов.
    B_>3. По данным на диске (при установке любого приложения на диске создается определенная файловая струкутра общая для совместимых приложений).
    B_>4. По структуре данных (через веб сервисы и файловую систему приложения обмениваются XML файлами)
    B_>

B_>Еще одно замечание — все эти приложения находятся на разных компьютерах в LAN, иногда даже в WAN, а не на одной машине.


Могу быть неправ, но со стороны это выглядит как нарастающий бардак Почему — потому что всё катится к уже упомянутому compatibility hell. Решений по большому счету 2:
1. переделывать архитектуру, приводить все компоненты к единому знаменатели — половина проблем с синхронизации по версим исчезнут сами, вторая половина будет более просто контролироваться.
2. изменить организацию выпуска релизов софта, т.е. его версий.

Первый вариант рассматривать не буду — как правило, он неосуществим при наличии большой кодовой базы.

Остановлюсь на втором варианте.
Вместо того, чтобы отслеживать много отдельных "мелких" версий, стОит объединять программы, подсистемы, а то и всю систему в целом в бОльшие блоки и давать им свои версии-метки. Имея фактически 2-3 "объединенные" метки, их между собой проще сращивать, чем 20-30 маленьких.
Например, есть такие подсистема/программы/сервисы, имеющие свои метки АКА версии
service_01.02.1A
db_structure_01.05.05
app_client_03.01.02
app_server_02.2B.01
web_site_01.01.06
small_app_01.01.01
foo_bar_03.01.02

между ними существует много кросс-зависимостей, например,
web_site_01.01.06, small_app_01.01.01 зависят от db_structure_01.05.05
service_01.02.1A, app_server_02.2B.01 -> foo_bar_03.01.02
app_client_03.01.02 -> db_structure_01.05.05
при этом foo_bar_03.01.02 -> db_structure_01.05.05

Группируем приложения
web_site_01.01.06, small_app_01.01.01, app_client_03.01.02 == client_01.01.01
service_01.02.1A, app_server_02.2B.01 == server_group_02.01.02
foo_bar_03.01.02, db_structure_01.05.05 == core_group_03.01.04

в итоге устанавливеются 1 большая зависимость
client_01.01.01, server_group_02.01.02 -> core_group_03.01.04

That's it при обновлении софта у заказчика разворачиваются не много мелких приложений, а 3 группы — не больше, но и не меньше. Причем зависимость между группами — однозначная.
Как только обновляется версия одного из приложений — обновляется и версия его группы. А имя малькое описание — кто от кого зависит — легко узнать кто ещё зависимый должен обновиться, а кого можно не трогать.

Очень важн вести release notes как каждого приложения, так и групп. Каждый выпуск релиза сопровождается релизнотами, где прописывается — от чего оно зависит.

По большому счету, таким методом можно перейти от большого количества конкретных аппликух — к абстрактным модулям.

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


Последний шаг (по желанию) — объединение всего в одну группу типа "мега-сборник". Что это дает — можно выпускать промежуточные версии аппликух, групп, тестировать их как угодно — а затем периодически выставлять заказчику сборник целиком, т.е. полностью заменяя весь софт на более новый. В перерывах между подобными выпусками делать периодические апдейты отдельных групп по необходимости, с оглядкой на общую межгрупповую совместимость.

Таким образом спец софт просто будет не нужен — все необходимые данные будут смотреться в релизнотах групп или всего мега-сборника. Более мелкие зависимости и частные случаи — смотреться в релизнотах мелких приложений.

Если же существует несколько заказчиков и для каждого есть где-то свои версии каждой из программ, где-то общая часть, единая для всех... Ну тогда 2 варианта:
1. продолжать эту идею дальше и производить группировку по другим критериям
2. менять место работы
https://wmspanel.com/nimble — Nimble Streamer media server for live and VOD HLS, RTMP, HTTP streaming
https://wmspanel.com/ — Control and reporting panel for Wowza and Nimble Streamer
http://scm-notes.blogspot.com/ — Блог об управлении конфигурацией
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.