Постоянная практика работы с инструментом управления изменениями IBM Rational ClearQuest выявила как его положительные, так и отрицательные стороны. При бесспорно сильном и гибком механизме формирования и редактирования схем управления изменениями – от создания экранных форм до программирования состояний и переходов для запросов на изменения (ЗИ) – можно отметить недостаток, связанный именно с программированием матрицы переходов при программировании жизненного цикла (ЖЦ) прохождения запроса на изменение.
В простом примере менеджер по управлению конфигурациями (УК) или менеджер по управлению изменениями (УИ) должен сформировать состав ЗИ и описать их жизненный цикл в диаграммах UML (это так называемый абстрактный, описательный уровень, Рисунок 1). После цикла согласований и утверждений диаграмма передается реализатору (возможно, администратору УИ), который, базируясь на модели, создает низкоуровневый набор команд для реализации в IBM Rational ClearQuest.
Данный пример показывает идеальную модель, которая в недостаточной мере применяется на практике. Зачастую модель не приобретает электронного вида, а сразу переносится (программируется) в IBM Rational ClearQuest.
Рисунок 1. Представление жизненного цикла прохождения запроса на изменение «Defect» в виде диаграммы UML
Как правило, процессы в организациях не «костенеют» и развиваются подобно живому организму, проходя сложный эволюционный путь. Развитие процессов связано с внесением изменений как в физическую схему работ (в ClearQuest), так и в модель процесса. Обе операции ручные, т.е. тот же администратор должен внести изменения сначала в модель, а потом в схему ClearQuest (либо наоборот). Вот тут и проявляется главный человеческий фактор: поскольку обе операции ручные, то человек может допустить ошибку, причем ошибки могут быть различной тяжести. Самая банальная может заключаться в том, что важный переход не получил своего отражения либо в схеме, либо в описании процесса. К сожалению, на практике такое случается сплошь и рядом: рассогласование документированного процесса и реальной схемы может достигать 30% и более. Иными словами, процесс продолжает развиваться, а описание процесса либо серьезно отстает, либо вовсе затормаживается.
Рисунок 2. Матрица переходов в IBM Rational ClearQuest
Здесь определяется последовательность переходов запросов на изменение между состояниями. Матрица представляет собой физическое, низкоуровневое представление процесса. Скриншот показывает матрицу состояний запроса на изменение «Defect».
Решение задачи лежит на поверхности:
- взять IBM Rational ClearQuest;
- взять средство моделирования UML, например, IBM Rational Software Architect;
- создать Plug-Ins для RSA, который позволит импортировать жизненный цикл запроса на изменение из ClearQuest и представлять его в виде диаграммы UML.
Это решение позволяет вносить изменения сразу в физическое представление и тут же получать модель UML.
В данной статье подробно объясняется, каким образом можно создать Plug-Ins для RSA, выполняющий данные действия.
Дальнейшее развитие Plug-Ins – это формирование полностью замкнутого цикла описания процесса, при котором можно из модели RSA получить физическое представление в ClearQuest, но это тема отдельной статьи.
Rational Software Architect – это современная интегрированная среда разработки на основе Eclipse.
Сам по себе Eclipse является интегрированной расширяемой средой разработки; можно сказать, что именно широкие возможности расширения Eclipse выделяют его среди других современных сред разработки. Архитектура, в соответствии с которой построен Eclipse (и, как следствие, RSA) называется Rich Client Platform (RCP). По сути, данная архитектура подразумевает наличие микроядра, которое управляет жизненным циклом приложения и ряда вспомогательных служб, которые можно использовать, интегрируясь с архитектурой.
По факту, RSA – это базовый Eclipse с большим числом дополнительных plug-in’ов, которые обеспечивают расширенные возможности разработки конечного приложения, а также предоставляют внешний доступ к своему функционалу, используя который можно создавать дальнейшие расширения RSA.
Центральный элемент расширения RSA (и Eclipse) – plug-in. Функциональность plug-in’а может быть любой – всё, что можно описать на Java, может быть plug-in’ом.
Plug-in’ы часто бывают очень сложными, а поскольку среда состоит из огромного числа plug-in’ов, которые необходимо инициализировать, она, как правило, запускается довольно долго; из-за этого возникают определённые трудности при отладке plug-in’ов (особенно если учесть, что обновление установленного plug-in до новой версии тоже может занять длительное время). Чтобы протестировать работоспособность собственного plug-in’а, который работает внутри RSA, используется Runtime Workbench.
В Runtime Workbench есть все необходимые для работы RSA сервисы, но, как правило, их там заметно меньше, чем в рабочей версии RSA, в которой ведётся разработка (точные настройки используемой конфигурации plug-in’ов для Runtime Workbench можно найти в Window - Preferences - Plug-in development - Target platform).
Даже с упрощениями Runtime Workbench инициализация RSA всё равно может занять достаточно много времени. Чтобы проще было отлаживать функциональность plug-in’ов, в RSA есть такое понятие как Pluglet – он работает схоже с plug-in’ом, но запускается прямо из рабочего RSA, в котором ведётся разработка.
К сожалению, Pluglet подходит не для всех целей; в текущей версии Rational Software Architect (на момент написания статьи – 7.0.0) невозможно без перезапуска среды два раза выполнить Pluglet, если он содержит Native-вызовы.
Java позволяет загрузить native-библиотеку в один Classloader, и при втором запуске Pluglet считает, что native-библиотека уже загружена в другом Classloader’е, но не имеет к нему доступа. Поскольку в этой статье мы сделаем упор на использование native-библиотек для взаимодействия с ClearQuest, более подробно рассматривать Pluglets не будем.
Plug-in’ы могут как расширять интерфейс, так и выполнять какие-то фоновые задания или предоставлять некоторые службы другим plug-in’ам. Это настраивается при создании plug-in’а.
Plug-in’ы могут встраиваться в интерфейс RSA практически в любое место: в контекстное меню, в Menu Bar, они могут создавать собственный View. При этом можно достаточно гибко задавать условия, при которых plug-in становится видимым (например, если он встраивается в контекстное меню, можно задать, чтобы этот пункт меню появлялся только при выделении файлов какого-то расширения).
Далее в данной статье мы увидим, как встроить plug-in в Menu Bar, создав свою собственную группу меню.
В RSA, как и в Eclipse, есть унифицированная система установки новых plug-in’ов – через так называемые Update Site.
Update Site – это коллекция Features, которые в свою очередь хранят набор plug-in’ов.
Мы рассмотрим это подробнее после того как составим plug-in.
Есть как минимум два варианта интеграции RSA и ClearQuest.
- Использование COM.
- Использование native-функций, через которые работает сам ClearQuest. Один из возможных клиентов ClearQuest – оболочка над Eclipse, и имеет смысл воспользоваться уже проделанной низкоуровневой работой по интеграции ClearQuest с Eclipse.
В данной статье мы будем рассматривать интеграцию только через native-функции.
Для начала нам потребуется библиотека для Java, которая будет вызывать native-функции ClearQuest’а через Java Native Interface. Она поставляется вместе с ClearQuest, в виде скомпилированного .jar.
В каталоге, в который установлен ClearQuest (в Windows по умолчанию это каталог C:\Program Files\Rational\ClearQuest), находится файл cqjni.jar.
Можно было бы его добавить в Build Path проекта, и в обычных приложениях уже был бы доступ к CQ через JNI. Но тогда процесс отладки plug-in’а может оказаться неудобным – при запуске Runtime Workbench, native-вызовы, которые пытаются работать из скомпилированного .jar, могут не срабатывать (на них будет прерываться выполнение задачи plug-in’а, ошибки выводиться не будут). Поэтому, чтобы быть уверенными в результатах, мы сначала декомпилируем cqjni.jar.
Если же вы решите включить .jar в Build Path, не забудьте, что это native-библиотека, и поэтому необходимо прописать её Native Path. К статье прилагается уже декомпилированный набор классов из cqjni.jar, так что самостоятельно их добывать не обязательно.
Для Java есть достаточно много декомпиляторов; в этой статье мы будем использовать jad, бесплатный для некоммерческого использования. Работа с ним идёт через консоль. У ряда других бесплатных декомпиляторов нет возможности декомпилировать сразу множество файлов, особенно часто такое бывает среди декомпиляторов с графическим интерфейсом без консольного аналога.
В принципе, в нашем случае подойдёт практически любой декомпилятор – для нас не принципиально, чтобы код был читаемым, требуется только, чтобы он работал.
Итак, jad можно скачать, например, здесь: http://www.varaneckas.com/jad (EN). После того как он скачается, его следует разархивировать и добавить в PATH (либо при дальнейшей работе с ним убедиться, что к нему есть доступ).
Далее потребуется взять ранее упомянутый cqjni.jar, и извлечь из него все .class-файлы (с помощью любого распаковщика, который умеет распаковывать .zip). Из папки с извлечёнными .class-файлами для декомпиляции можно запустить команду:
jad -d CQJNI -s .java *.class
В результате в папке CQJNI появятся декомпилированные файлы, правда, с некоторыми несущественными ошибками, которые можно быстро исправить вручную.
Чтобы необходимые ручные изменения применить и проверить их работоспособность, создадим тестовый проект через File - New - Other, Java Project. Назовём его CQJNITest.
Далее, импортируем наши декомпилированные классы. Из контекстного меню нашего проекта выбираем Import, затем File System (Рисунок 3).
Рисунок 3. Окно импорта в проект RSA файлов, находящихся на файловой системе
В появившемся окне выбираем “Browse…”, а затем находим папку с декомпилированным CQJNI, и ставим на ней галочку в диалоговом окне импорта. В поле “Into folder” вводим “CQJNITest/com/rational/clearquest/cqjni” (Рисунок 4).
Рисунок 4. Окно с настройками импорта, импорт классов CQJNI
После этого можно нажимать “Finish”, и в нашем проекте появится package с именем “com.rational.clearquest.cqjni”, где будут лежать все декомпилированные классы.
Осталось их подправить, чтобы не было ошибок компиляции. Должно получиться два класса с такими ошибками: CPUCount и CQJNIBaseObj.
В CPUCount в единственном статическом методе стоит убрать всё после return, и добавить throws ClassNotFoundException в объявление метода.
В CQJNIBaseObj метод procedureHashCode можно переписать, например, так:
public static int procureHashCode()
{
synchronized(m_classLock)
{
_hashCode++;
return _hashCode;
}
}
|
Будет ещё один проблемный метод в этом классе – _mthclass$. Он абсолютно такой же, как неработающий метод в CPUCount, поэтому нужно произвести те же модификации, что мы делали для CPUCount.
Осталось создать простой тест, чтобы убедиться, что всё правильно работает:
import com.rational.clearquest.cqjni.CQAdminSession;
import com.rational.clearquest.cqjni.CQClearQuest;
public class Test{
public static void main(String[] args) throws Exception{
CQClearQuest cq = new CQClearQuest();
CQAdminSession as = cq.CreateAdminSession();
System.out.println(as);
}
}
|
Разработка plug-in’а для интеграции IBM Rational ClearQuest и Rational Software Architect
Создадим plug-in для RSA, который будет обращаться к ClearQuest и выполнять функции, описанные во введении к данной статье.
Разрабатываемый plug-in должен обеспечивать следующие (минимальные) функции:
- открыть сессию IBM Rational ClearQuest;
- провести анализ матрицы переходов для сущности;
- визуализировать их в RSA в виде State-диаграммы UML.
Создание и настройка plug-in’а
Заходим в File - New - Other, и выбираем plug-in project (Рисунок 5).
Рисунок 5. Окно создания нового проекта, выбор проекта типа plug-in
Назовём проект «RSACQIntegration». Наш plug-in будет доступен через основное меню. Plug-in типа «Hello World» сам создаст новый пункт меню с названием Sample Menu и пунктом «Sample Action», реагирующий на нажатие открытием диалогового окна, поэтому это будет удобно использовать в качестве базы (Рисунок 6).
Рисунок 6. Окно с шаблонными типами plug-in’ов, выбор plug-in’а, расширяющего Menu Bar
В принципе, остальные возможные настройки нам сейчас не очень интересны, поэтому можно нажать Finish.
Вся информация о том, как plug-in будет встраиваться в среду, содержится в файле plugin.xml. Если открыть его (нажав на него два раза), попадаем на страницу с общим описанием plug-in’а – Overview (Рисунок 7).
Рисунок 7. Общие сведения о plug-in’е, которые содержаться в закладке Overview для plugin.xml
Если зайти в закладку Extensions, можно посмотреть сводку Extensions plug-in’а – те точки RSA, которые он расширяет, и каким образом (Рисунок 8).
Рисунок 8. Закладка с настройками точек расширения plug-in’а. Здесь же отображаются задачи, которые выполняются при взаимодействии с какой-то точкой расширения
Отсюда можно поменять параметры интерфейса – иконки, лейблы, и т.п. Всё это настраивается также и напрямую в xml, в закладке plugin.xml. Спецификация синтаксиса есть в официальном руководстве к Eclipse [3].
В одной из двух закладок – plugin.xml или extensions – поменяем названия меню. У Sample Menu поменяем id на RSACQIntegrationMenu, а label – на RSA-CQ Integration Menu; sampleGroup поменяем на RSACQIntegrationGroup.
Для Sample Action внесем изменения:
menubarPath поменяем на «RSACQIntegrationMenu/RSACQIntegrationGroup», toolbarPath – на «RSACQIntegrationMenu», label – на «Import CQ States», и в Tooltip впишем «Imports a ClearQuest state transition matrix».
Для проверки корректности настроек нажимаем F11 (если открыт plugin.xml, RSA сам определит, что этот проект – plug-in, и запустит Runtime Workbench. Иначе надо настроить Run Configuration как Eclipse Application).
Рисунок 9. Встроенный в Menu Bar среды plug-in с единственным пунктом меню
В запущенной Runtime Workbench среди групп меню должна быть «RSA-CQ Integration Menu», которая добавилась из-за созданного и встроенного нами plug-in, в которой находится единственный пункт меню – «Import CQ States».
Если нажать на этот пункт меню, появится диалоговое окно с надписью «Hello, Eclipse world», потому что это было прописано автоматически при создании проекта, а мы ещё ничего не меняли. Следующий шаг – настроить plug-in так, чтобы кнопка «Import CQ States» делала то, что нам необходимо.
Обеспечение связи созданного plug-in’а и ClearQuest
Runtime Workbench можно закрыть, она нам больше не понадобится. А в среде с проектом откроем класс SampleAction.java. В функции run() можно увидеть код создания тестового окошка. Всё её содержимое можно стереть; здесь мы будем писать код работы с ClearQuest.
Первым делом нам потребуется добавить в проект декомпилированные классы CQJNI. Можно просто скопировать package из созданного ранее тестового проекта.
Наша цель – узнать и вывести состояния (state) и переходы (activity) для сущности. Для этого потребуется:
- узнать список баз данных, выбрать какую-то одну;
- узнать список сущностей в выбранной базе данных, выбрать одну;
- для выбранной сущности узнать состояния и переходы;
- вывести состояния и переходы.
Соответственно, нужны функции, которые будут обеспечивать работу каждого из четырех пунктов. Их полный исходный код прилагается вместе со статьёй, здесь же рассмотрим наиболее существенные моменты.
Получение списка баз данных ClearQuest
Первым делом нужно узнать список баз данных. В Windows ClearQuest хранит эту информацию в реестре. Точное местоположение зависит от версии, которую тоже можно узнать через реестр. В данной статье будем предполагать, что используется 7-я версия ClearQuest (в коде, прилагаемом к статье, есть работа и с 6-й версией). Чтобы узнать версию, можно выполнить следующий запрос через консоль:
reg query "HKEY_CURRENT_USER\Software\Rational Software\ClearQuest" Если установлена 7-я версия, ответ будет содержать такую строчку: HKEY_CURRENT_USER\Software\Rational Software\ClearQuest\7.0.0 Зная версию, можно узнать список баз данных по такому запросу: reg query "HKEY_CURRENT_USER\Software\Rational Software\ClearQuest\7.0.0\Core\Databases" Вернётся список папок, и названия баз данных будут идти в этом списке сразу после “Databases\”. |
Получение списка схем, находящихся в базе данных
Выбрав нужную нам базу данных из списка, с помощью CQ JNI можно узнать список схем. Мы уже пробовали делать простые обращения к ClearQuest, и в этом случае начало будет таким же, как и раньше:
CQClearQuest cq = new CQClearQuest();/* Сначала создаётся приложение */
CQAdminSession as = cq.CreateAdminSession();
/* Нам требуется админский доступ для того, чтобы узнать список схем*/
as.Logon(login, password, dbset);
/* Здесь dbset – одна из баз данных, полученных в предыдущем пункте,
а login и password – админские, т.е. как при входе в ClearQuest Designer.
Для вызовов API ClearQuest’а порядок параметров лучше всего узнавать
в документации ClearQuest API, потому что в CQJNI параметры будут
без осмысленных названий. Ссылку можно найти в ресурсах к статье */
CQSchemas ss = as.GetSchemas();/* Данный вызов выдаёт итерируемый список схем*/
List<String> = new ArrayList<String>();
/* В этом списке будем хранить имена схем */
/* Дальше поэлементно получаем эти самые имена: */
for (int i = 0; i < ss.Count(); i++) {
CQSchema s = ss.Item(i);
schemas.add(s.GetName());
}
|
В данном случае login, password и dbset должны быть те, что используются для доступа к ClearQuest Designer.
Получение списка имён сущностей
Здесь схема такая же, как и в предыдущем пункте; основная разница в том, что используется не админская сессия, а обычная. Соответственно, нужен тот логин/пароль, который используется для входа в клиент ClearQuest; в данном случае databaseName – это имя базы данных с запросами, а dbset такой же, как в предыдущем пункте:
CQClearQuest cq = new CQClearQuest();
CQSession session = cq.CreateUserSession();
session.UserLogon(login, password, databaseName, dbSet);/* Используется обычная пара login/password как для клиента ClearQuest, а не для ClearQuest Designer, в отличае от вызова в предыдущем пункте*/
String[] entities = session.GetEntityDefNames();
Получение состава состояний и переходов для сущности
Имея список имён сущностей, можно запросить отдельную сущность через сессию CQ. Имея сущность, можно узнать её состояния и переходы:
CQEntityDef entity = session.GetEntityDef(entityName);
String[] actions = entity.GetActionDefNames();
String[] states = entity.GetStateDefNames();
Осталось визуализировать импортированную стейт-машину сущности. Наиболее естественный способ – визуализировать с помощью встроенных средств RSA, а именно с помощью такого элемента UML, как State Machine. Для этой цели к статье прилагается класс, который создаёт State-диаграмму; здесь рассмотрим основные проблемные моменты в этом классе.
Для работы с UML в RSA нужно сначала создать структуру UML, а затем отобразить её на визуальную диаграмму.
Для наших целей сначала потребуется Use Case, затем для этого Use Case нужно создать State Machine, а для неё – Region, в который можно уже добавлять стейты и переходы. При этом, если создать для State Machine диаграмму, все стейты и переходы будут добавляться на неё автоматически (для большинства других диаграмм нужно дублировать создание логического UML элемента вызовом, который этот элемент отобразит на диаграмму).
Желательно обеспечивать уникальность имён. Если её не обеспечивать, редактор выдаст предупреждение. В прилагаемом к статье классе для создаваемых стейтов и переходов, при попытке создать новый стейт или переход с не уникальным именем, вместо этого возвращается тот самый уже существующий стейт или переход.
Чтобы иметь возможность что-либо создавать, нам потребуется UML Model. Её можно выбрать, например, из списка открытых моделей, который можно получить по вызову UMLModeler.getOpenedModels();
Можно открыть модель по имени, или создать новую:
model = UMLModeler.openModel(name);
model = UMLModeler.createModel(name);
Так или иначе, имея на руках модель model, с которой мы будем работать, мы можем создать в ней Use Case:
UseCase uc = (UseCase) model.createPackagedElement(name, UMLPackage.eINSTANCE.getUseCase());
Стоит обратить внимание на вызов UMLPackage.eINSTANCE.getUseCase() – таким образом задаётся тип создаваемого элемента. В UMLPackage.eINSTANCE есть методы, чтобы задать большинство UML- элементов.
Все остальные элементы, которые мы обозначили, создаются похожим образом; точные процедуры создания можно посмотреть в прилагаемых исходниках.
Чтобы создать диаграмму для созданного UseCase, можно воспользоваться утилитой RSA – UMLDiagramHelper.
Diagram d = UMLModeler.getUMLDiagramHelper().createDiagram(model, UMLDiagramKind.USECASE_LITERAL);
UMLModeler.getUMLDiagramHelper().createNode(d, uc);
Второй вызов визуализирует созданный UseCase на диаграмме.
Заключение: объединяем всё воедино
К статье прилагаются исходные тексты plug-in’а. Для доступа к CQ реализован класс ClearQuestIntegration. Для визуализации – класс CQUMLStateVisualizer.
Чтобы создать работающий plug-in, осталось вернуться к методу run() в классе SampleAction; с использованием классов из данной статьи этот метод будет выглядеть примерно так:
try {
int version = ClearQuestIntegration.getVersion(); /* Сначала получаем версию установленного CQ*/
List<String> databases = ClearQuestIntegration.getRepositories(version); /*Затем получаем список баз данных*/
new CQUMLStateVisualizer(new CQClearQuest(), "admin", "", "SAMPL", databases.get(0), "Defect");/* Для того чтобы отобразить сущность “Defect” (имя сущности передаётся в последнем параметре), потребуются логин и пароль от клиента ClearQuest, чтобы получить матрицу переходов сущности. Чтобы её узнать, потребуется обращаться к ClearQuest, для чего нужен экземпляр приложения ClearQuest. Остальные два параметра указывают, где искать указанную сущность (“SAMPL” – название встроенной в ClearQuest базы с запросами, а databases.get(0) – название базы данных со схемами) */
} catch (Exception e) {
/* Если plug-in не может работать, напечатать причину, но кроме этого ничего не будем делать */
e.printStackTrace();
}
После этого, остаётся упаковать plug-in, чтобы можно было его эффективно поставлять конечным пользователям.
Как упоминалось ранее, для этого необходимо сделать Feature и Update Site.
Начнём с создания Feature. Для этого нужно зайти в File - New - Other и выбрать “Feature Project” (Рисунок 10).
Рисунок 10. Окно создания проекта, выбор Feature-проекта
Далее следует нажать “Next” и ввести имя Feature-проекта – например, RSACQImport – и снова нажать “Next”. В появившемся меню предлагается выбрать plug-in’ы, которые войдут в состав этого Feature. В нашем случае будет только один plug-in: RSACQIntegration (Рисунок 11).
Рисунок 11. Окно выбора plug-in’ов, которые войдут в состав Feature. В состав Feature войдёт отмеченный plug-in RSACQIntegraion, который мы до этого создали
Выбрав его, можно нажимать на Finish.
Далее нам потребуется Update Site, с которого можно будет загружать созданный Feature в RSA. Чтобы создать Update Site, нужно выбрать File - New - Other, а затем Update Site Project (Рисунок 12).
Рисунок 12. Окно создания нового проекта
Из настроек при создании у Update Site есть только имя; можно ввести, например, RSACQImportSite.
После создания проекта должна открыться панель с настройками Update Site’а. Они содержатся в файле site.xml, а в RSA отображаются в удобном для редактирования структурированном виде. Для того чтобы можно было через этот Update Site установить созданный plug-in, необходимо зайти в Add Feature (Рисунок 13).
Рисунок 13. Вкладка с обзором Features, которые входят в Update Site. Через данную вкладку можно добавлять новые Feature в состав Update Site
В появившемся окне нужно выбрать созданный ранее Feature (Рисунок 14).
Рисунок 14. Окно выбора Feature для Update Site. Выбираем созданный нами Feature
Наконец, можно выбрать Build All, и Update Site готов к использованию.
Чтобы с помощью Update Site установить plug-in в RSA, необходимо зайти в Help Software Updates Find and Install, а там выбрать Search for new features to install (Рисунок 15).
Рисунок 15. Вид окна расширения среды. Здесь можно выбрать либо установку новых plug-in’ов, либо обновление уже установленных plug-in’ов
Поскольку сейчас созданный нами Update Site пока что лежит только на локальной системе, в появившемся окне нужно выбрать “New Local Site”, а затем выбрать папку с созданным Update Site (Рисунок 16). Местоположение этой папки можно скопировать из Properties контекстного меню проекта с Update Site.
Рисунок 16. Добавление локального Update Site в список Update Sites, с которых RSA может скачивать и обновлять plug-in’ы
Update Site добавится в список и, убедившись что на нём стоит галочка (и только на нём – другие plug-in’ы нам сейчас не нужны), можно нажать Finish. Появится окно, где нужно будет отметить plug-in’ы. Выбираем созданный нами plug-in (Рисунок 17).
Рисунок 17. Окно, в котором можно выбрать, какие Feature следует установить с Update Site. Мы выбираем созданный нами Feature, в состав которого входит созданный нами plug-in
После нажатия на Next появится окно с описанием лицензий устанавливаемых Feature; поскольку мы ничего не вводили в соответствующее поле при настройке Feature, лицензионное соглашение будет пустым (Рисунок 18).
Рисунок 18. Окно лицензионного соглашения. В данном случае описание лицензии пустое, поскольку мы ничего не заполняли при создании Feature
После подтверждения согласия с условием лицензии появится окно, в котором можно поменять место установки Feature (Рисунок 19). Его можно не менять, а сразу нажать Finish.
Рисунок 19. Окно выбора места установки plug-in’ов
Мы не подписывали Feature, поэтому появится окно с соответствующим предупреждением. Для нас это предупреждение сейчас не принципиально, поэтому можно смело нажать Install All (Рисунок 20).
Рисунок 20. Окно с предупреждением о неподписанном feature
После установки среда потребует перезагрузки, а после перезагрузки в RSA появится новый пункт меню.
В коде, прилагаемом к статье, работа идёт только с сущностью Defect из SAMPL базы данных (т.е. в plug-in нет средства, чтобы выбрать другую сущность). Результатом работы созданного нами plug-in’а является UML диаграмма, отображающая жизненный цикл этой сущности (Рисунок 21).
Рисунок 21. Визуализированный в RSA в виде UML результат импорта матрицы состояний сущности "Defect" ClearQuest'а
Как показала практика, использование автоматизированного способа получения диаграмм, описывающих процесс управления изменениями, позволяет избавиться от ошибок при трансляции. Очень важно также, что при этом существенно экономится время, затрачиваемое специалистом.
Еще раз отметим, что развитием подобной системы должно быть создание полностью дуплексного модуля, поддерживающего как импорт, так и экспорт. В этом случае покрывается полностью весь спектр потребностей, где ручной труд программирования матрицы переходов перекладывается целиком на автоматизированную систему, а специалист концентрируется только на основном – диаграмме процесса!
- Примите участие в обсуждении материала на форуме.
- http://publib.boulder.ibm.com/infocenter/cqhelp/v7r0m0/index.jsp?topic=/com.ibm.rational.clearquest.apiref.doc/default_topic.htm (EN).
- http://www.ibm.com/developerworks/rational/library/08/0826_makady/index.html (EN).
- http://help.eclipse.org/stable/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/misc/plugin_manifest.html (EN).
- Оценка возврата инвестиций от внедрения процесса управления конфигурациями.
- Метрики кода и их практическая реализация в ClearCase.
- http://www.varaneckas.com/jad (EN).
Новичков Александр работает в области информационных технологий с 1994 года. Является руководителем отдела консалтинга и внедрения IBM Rational. Участвовал более чем в 20 успешных проектах внедрения IBM Rational в таких организациях как Банк внешней торговли, ОАО «Татнефть», Национальный банк «ТРАСТ», Банк «Русский стандарт», ОАО «Иркут Авиа», ЗАО «АйТи», ЗАО «Аплана», Сбербанк России, Центральный банк Российской Федерации, ОАО «Русский алюминий» и многих других. Имеет более 30 публикаций научных и научно-популярных материалов. Является сертифицированным специалистом по следующим продуктам IBM Rational: ClearCase for Windows, ClearQuest for Windows и UCM Essentials. За время работы в консалтинге им обучено более 500 специалистов ведущих IT-компаний России и СНГ. Является руководителем отдела внедрения и консалтинга в компании СМ-Консалт (www.cmcons.com). Связаться с ним можно по адресу rational.tools.info@gmail.com