У меня есть проект UML (созданный в IBM Rational System Architect / Modeler, поэтому хранящийся в их формате XML), который стал довольно большим. Кроме того, теперь он содержит несколько фрагментов, которые другие группы хотели бы использовать повторно. Я родом из опыта разработки программного обеспечения (особенно FOSS) и пытаюсь понять, как использовать это в качестве аналогии здесь. Проблема, с которой я сталкиваюсь, похожа на проблему Хрупкий базовый класс .
Позвольте мне начать с того, как это работает в объектно-ориентированной (скажем, Java или Ruby) экосистеме FOSS:
- Группа 1 публикует некоторый «базовый» пакет, скажем «
net/smtp
версия 1.0»
- Группа 2 включает пакет
net/smtp
1.0 группы 1 в библиотеке поставщика своего программного проекта
- В какой-то момент группа 1 создает новую ветку 2.0
net/smtp
, которая нарушает обратную совместимость (скажем, удаляет старый класс или метод или перемещает класс из одного пакета в другой). Они говорят пользователям версии 1.0, что она устареет через год.
- Группа 2, когда у них есть время, обновляется до
net/smtp
2.0. Когда они помещают новый пакет, их компилятор (или набор тестов для Ruby) сообщает им о несовместимости. Они действительно должны внести некоторые изменения вручную, но все изменения находятся в коде, в виде простого текста, среды, с которой они довольно хорошо знакомы. Кроме того, они могут часто использовать свою функцию IDE (или текстового редактора) «global-search-and-replace», как только выясняют, какие исправления.
Когда мы пытаемся применить эту модель к UML в RSA, мы сталкиваемся с некоторыми проблемами. RSA поддерживает некоторые довольно мощные рефакторинги, но, похоже, они работают, только если у вас есть доступ на запись к всем фрагментам. Если я переименую класс в одном пакете, RSA может переименовать ссылки, но только в одно и то же время. Очень сложно взглянуть на основной источник (XML) и выяснить, что сломано. Устранить такую проблему в самом редакторе RSA означает множество нажатий - нет хорошего эквивалента «глобального поиска и замены», по крайней мере, после неполного рефакторинга.
Похоже, что их настоящим камнем преткновения является то, что RSA предполагает, что вы хотите выполнять все ваши редактирования с использованием их графического интерфейса, но это делает некоторые операции непомерно трудными.
У кого-нибудь есть примеры проектов UML с открытым исходным кодом, которые преодолели эту проблему? Какие стратегии они используют для информирования об изменениях?