|
Использование встроенных механизмов интеграции IBM Rational ClearCase с нестандартными средствами разработки ПО и встроенными системами
Статьи
→
Управление конфигурациями и изменениями (Subversion, IBM Rational ClearCase, ClearQuest и Jira)
При внедрении систем управления конфигурациями на первых же этапах
возникает вопрос интеграции с используемыми средствами разработки. Для
наиболее продуктивного применения инструментария версионного хранения
последний должен обладать возможностью интеграции со средой разработки,
дабы не усложнять процесс разработки возникающими операциями создания
новых версий в хранилище. Большинство современных средств разработки
программного обеспечения обладает встроенными интерфейсами интеграции,
поддерживающими определённый набор инструментов версионного хранения
(ClearCase, CVS, PCVS и т.д.). Встатье показывается каким образом можно
расширить возможности ClearCase для интеграции с ИС, о существовании
которых ренее IBM Rational ClearCase было неизвестно.
Зайдуллин Рустам - ведущий инженер, ТатАСУнефть" ОАО "Татнефть", Новичков Александр, руководитель отдела внедрения и консалтинга, СМ-Консалт
Cтатья опубликована на сайте IBM.
Использование встроенных механизмов интеграции IBM Rational
ClearCase с нестандартными средствами разработки ПО и встроенными
системами
Зайдуллин Рустам - ведущий инженер, ТатАСУнефть" ОАО "Татнефть", Новичков Александр, руководитель отдела внедрения и консалтинга, СМ-Консалт
Cтатья опубликована на сайте IBM.
При внедрении систем управления конфигурациями на первых же этапах
возникает вопрос интеграции с используемыми средствами разработки. Для
наиболее продуктивного применения инструментария версионного хранения
последний должен обладать возможностью интеграции со средой разработки,
дабы не усложнять процесс разработки возникающими операциями создания
новых версий в хранилище. Большинство современных средств разработки
программного обеспечения обладает встроенными интерфейсами интеграции,
поддерживающими определённый набор инструментов версионного хранения
(ClearCase, CVS, PCVS и т.д.). Сложнее обстоит дело с нестандартными
средствами разработки. Для интеграции таких инструментов необходимы
возможности разработки уникальных решений в кратчайшие сроки, без
отвлечения основных ресурсов от решения задач бизнеса. IBM Rational
ClearCase обладает достаточным набором необходимых возможностей – это и
встроенный API, открывающий возможности создания полноценных
интеграционных решений, и встроенный интерпретатор языка
программирования ccperl, служащий платформой для разработки скриптов и
дающий практически неограниченные возможности для расширения
функционала ClearCase, и, естественно, интерпретатор командной строки
cleartool, который, собственно, и выполняет все операции с элементами
версионного хранилища, являясь основным инструментом администратора
ClearCase. Кроме того, ClearCase обладает такими приятными дополнениями
как интерпретаторы clearprompt и cleardlg, посредством команд которых
вызываются стандартные GUI-диалоги и разрабатываются собственные.
В данной статье мы описываем выполнение интеграции инструмента
управления конфигурациями IBM Rational ClearCase со средой разработки
отчётности, выполненной в корпоративной информационной системе.
Описание проблемы
В
ходе внедрения дисциплины УК мы столкнулись с необходимостью
интегрировать инструмент разработки отчётов одной из корпоративных
информационных систем с ClearCase. Отчёты представляли собой набор
файлов, описывающих строки, формулы расчёта и заголовочный файл. Таким
образом, версия отчёта является набором файлов, число которых зависит
от состава отчёта. Отчёты редактируются непосредственно в базе данных
системы с использованием модуля редакции отчётов, для отладки
используется тестовая версия базы данных. До внедрения ClearCase для
сохранения промежуточных версий разработчики выгружали исходный код
отчёта на свои рабочие станции, создавая структуру каталогов под каждый
отчёт, с делением на подкаталоги для версий отчётов. Идентификаторами
версий служили пометки о дате релиза, описание версий велось в тетрадях.
Для
организации версионного хранения в ClearCase необходимо было
разработать интеграционное решение, позволяющее с минимальной затратой
времени сохранить версию отчёта в версионном хранилище с присвоением
версиям файлов идентификаторов и описания версии и, что самое главное,
оперативно восстановить нужную версию. Оптимальным решением,
удовлетворяющим выдвинутым условиям, была разработка скриптов для
создания и проставления меток на вновь созданные версии, а также
последующего поиска версий по метке и вывода их в состояние CheckedOut.
Для упрощения вызова скриптов необходимо было разработать диалоговые
формы ввода необходимой информации – типы создаваемых меток, их
описания, тип метки для поиска версии – и привязать разработанные
скрипты к контекстному меню ClearCase.
Описание решения
Все скрипты разработаны на встроенном языке ccperl, для обращения к элементам версионного хранилища используется интерпретатор команд cleartool, для выполнения операций с элементами в графическом режиме – cleardlg, для вывода диалоговых форм – clearprompt.
Ниже приводится описание разработанных скриптов и настройки контекстного меню ClearCase.
Описание скриптов
Интеграция
реализована в виде трёх скриптов, автоматизирующих основные операции
сохранения версии отчёта в хранилище и отката к нужной версии:
- скрипт
перевода в состояние CheckedOut определённой версии каталога
версионного хранилища вместе с содержимым. Выполняется при
необходимости восстановить версию отчёта по названию и описанию метки.
При инициации скрипта производится поиск в каталоге всех типов меток,
проставленных на элементы каталога и вывод диалогового окна выбора
метки из списка всех обнаруженных. Вместе с именами меток выводятся их
описания (рисунок 1);
Рисунок 1
- скрипт перевода в состояние CheckedIn каталога и всех вложенных
элементов с присвоением создаваемой версии метки. Выполняется после
сохранения в версионном хранилище новой версии отчёта. Запрос
характеристик метки производится в начале выполнения скрипта, при этом
в диалоговом окне создания нового типа метки приводятся названия меток,
проставленных на прежние версии. Выполняется поиск и внесение под
версионное хранение добавленных в новой версии файлов (рисунок 2);
Рисунок 2
- скрипт перевода в состояние CheckedOut текущей версии каталога и
его содержимого. Выполняется перед сохранением новой версии отчёта в
версионном хранилище. При выполнении скрипта вызывается стандартная
форма ClearCase для ввода комментария к выполняемой операции с
возможностью применения его ко всем выбранным элементам.
Все скрипты привязаны к командам контекстного меню и выводятся
только при вызове меню для каталогов в соответствии с их текущим
состоянием, т.е. если каталог находится в состоянии CheckedIn, то кроме
стандартных пунктов в контекстном меню будут отображены действия
перевода в состояние CheckedOut для отображаемой версии и версии по
имени метки. Эта настройка выполнена инструментом редактирования
контекстного меню.
При создании новой команды в контекстном меню указывается объект,
для которого она будет отображаться – каталог, состояние объекта,
например, CheckedIn, название команды в меню, текст подсказки к пункту,
сама выполняемая команда – путь к файлу скрипта, и служебная
информация, например, текущая директория и передаваемый аргумент. На
рисунке 3 показано окно ClearCase Context Menu Editor для созданной
команды CheckOut версии отчёта.
Рисунок 3. Настройка контекстного меню
Далее следует более подробное рассмотрение всех скриптов с листингами, комментариями и изображениями выводимых форм.
CheckOut каталога и его содержимого – выведение в
состояние CheckedOut каталога и его содержимого. Скрипт выполняется
перед выгрузкой из базы данных новой версии отчёта. Так как скрипт
использует команды интерпретатора cleardlg, выводимое окно имеет стандартный вид (рисунок 4).
Рисунок 4. Диалоговое окно ClearCase
Листинг этого скрипта приведён полностью.
Сохраняем в переменной передаваемый параметр – путь к обрабатываемому каталогу:
Определяем переменную для хранения путей к элементам версионного хранилища:
Составляем список файлов, содержащихся в каталоге. Для этого
используем подпрограмму, обрабатывающую «выхлоп», полученный в
результате отработки команды find интерпретатора командной строки
cleartool:
$DoCom="cleartool find \"$path\" -print ";
DoCommand($DoCom);
|
Передаём в консоль команду вызова графических диалогов ClearCase для выполнения операции CheckOut:
$string="cleardlg /checkout $filez ";
system(" $string ");
|
Далее – процедура обработки «выхлопа», получаемого после выполнения команд в консоли:
sub DoCommand
{
my $cmd = shift;
my $line;
open(CMD, "$cmd 2>&1 |");
foreach $line (<CMD>)
{
chop $line;
$line=~ tr(/\/)(////);
$temp="$filez \"$line\" ";
$filez=$temp;
};
close CMD;
}# end DoCommand
|
CheckIn каталога и его содержимого, операции с меткой
– в скрипте выполняется запрос параметров создаваемого типа метки,
сохранение новой версии отчёта (перевод каталога и его содержимого в
состояние CheckedIn) с присвоением новым версиям элементов вновь
созданной метки.
При выполнении скрипта у пользователя
запрашивается название для метки, которая будет проставлена на
сохраняемую версию (рисунок 5)
Рисунок 5. Диалог ввода названия метки
и описание для неё (рисунок 6).
Рисунок 6. Диалог ввода описания метки
Далее приводим фрагменты скрипта для выполнения ключевых моментов операции.
При
запросе имени метки в диалоговом окне выводится список имеющихся меток
в каталоге. Формирование этого списка производим следующим образом.
Вызываем
команду lsvtree (отображение древа версий – в текстовом формате –
текущего каталога). Обработка результата выполнения команды выполняется
уже знакомой процедурой:
$findlbtype="cleartool lsvtree -a \"$path\"";
DoCommand($findlbtype);
|
Результат – многострочный текст – преображаем в массив для удобства обработки:
@rezmas=split(/\n/,$rez);
$rez="";
|
Результат выполнения команды lsvtree – отчёт о версиях элемента
хранилища, в котором все названия меток на версии перечислены через
запятую и взяты в скобки. По этому признаку выделяем фрагменты отчёта с
названиями меток и собираем в одну строку:
foreach $line (@rezmas) {
$n=index($line, ")");
$m=index($line, "(");
if ($n > 0) {
$line=substr($line,$m+1,$n-1);
chop($line);
$labels=$labels.",".$line;
};
};
|
В результате получаем переменную $labels, содержащую список всех
найденных меток. Последней командой отсекаем впереди идущую запятую:
$labels=substr($labels,1,length($labels));
|
Далее описываем формирование диалоговых окон, используемых для ввода характеристик меток.
Непосредственно вывод диалога командой clearprompt (см. рисунок 5). В тексте запроса использована переменная с названиями меток:
prompt: $string="clearprompt text -outfile labeln -prompt
\"Введите название метки. Предыдущие: $labels\"";
|
Для обработки результата работы диалога записываем его в переменную:
$lab=system(" $string ");
|
Если в диалоговом окне была нажата кнопка отмены – завершаем работу скрипта:
if ($lab != 0) {
Win32::MsgBox("Операция прервана пользователем");
exit(1);
};
|
Если при редактировании отчёта были сформированы новые файлы (это
происходит при изменении структуры отчёта и добавлении новых скриптов),
необходимо внести их под версионный контроль. Для этого выполняем поиск
приватных файлов, определяем тип для создаваемого элемента, и,
собственно, создаём из них элемент версионного хранилища. Команда
lsprivate выводит список приватных файлов в текущем View текущего
версионного хранилища:
$listprivate="$path cleartool lsprivate";
DoCommand($listprivate);
@filez=split(/\n/,$filez);
|
Так как lsprivate выводит список приватных файлов по всему
хранилищу, необходимо отсеять из найденных файлов те, которые не
отвечают следующим условиям: расположены вне каталога обновляемого
отчёта и имеют тип файла, отличный от типов файлов отчёта. Тип файла
также необходим и при создании нового элемента версионного хранилища:
foreach $file (@filez) {
if (($file=~".xml")&&($file=~$path)) {
system("cleartool mkelem –nc -nco –eltype xml $file ");
};
if ((($file=~".aqs") || ($file=~".aqs"))&&($file=~$path)) {
system("cleartool mkelem –nc -nco –eltype text_file $file ");
};
};
|
Получив все нужные данные и поместив в версионное хранилище
добавленные в отчёт файлы, выполняем операцию CheckIn для всех файлов в
графическом режиме:
system("cleardlg /checkin /identical $filez ");
|
После этого проставляем метку на вновь созданные версии элементов:
system("cleartool find \"$path\" -print -exec
\"cleartool mklabel $label %CLEARCASE_PN%\"");
|
CheckOut версии отчёта – выполняется поиск всех типов
меток, проставленных на элементы в каталоге, вывод диалога выбора
версии (по метке с описанием), выборка версий по типу метки и перевод
их в состояние CheckedOut (рисунок 7).
Рисунок 7. Диалог выбора версии
Формирование списка меток элементов каталога мы привели выше, а
здесь остановимся на получении описаний меток, которые нужны для
большего удобства при определении искомой версии.
Имея список меток каталога, поднимаем описания каждой из них. Для
этого формируем массив, каждый элемент которого содержит название одной
метки:
@labels=split(/,/,$labels);
foreach $line (@labels) {
|
Команда desc выводит информацию по метке, в том числе и её текстовое описание:
$descr="cleartool desc lbtype:$line";
DoCommand($descr);
@rezmas2=split(/\n/,$rez);
|
Так как комментарий к метке начинается со второй строки описания, копируем её в переменную
$description=@rezmas2[2];
|
Заменяем кавычки и запятые на другие символы (кавычки и символы помешают при вызове диалога выбора метки):
$description=~ tr/"/>/;
$description=~ tr/,/ /;
$i=length($description);
|
Отсекаем первые два символа – из-за форматирования отчёта по метке там пробелы:
$description=substr($description,2,$i);
|
Если у метки нет текстового описания – комментария, в переменную
попадает информация о принадлежности метки к реплике. Распознаём такие
строки по слову master и пишем пустой комментарий:
if ($description=~"master") {
$description="";
};
|
Сохраняем в переменной названия и описания всех меток каталога:
$line1=$line.$description;
$rez1="$rez1"."$line1".",";
};
|
Для вывода диалога выбора из списка (см. рисунок 7) используем команду clearprompt с ключом list:
prompt: $lab=system("clearprompt list -outfile $filep -items
\"$rez1\" -prompt \"Выберите метку\"");
if ($lab != 0)
{
Win32::MsgBox("Операция прервана пользователем");
exit(1);
};
|
И, наконец, выполнение CheckOut для выбранной версии отчёта. Выполняем поиск версий элементов с указанной меткой:
$search="cleartool find \"$path\" -version lbtype($label) -print";
DoCommand($search);
@rezmas=split(/\n/,$rez);
|
и CheckOut для найденных версий. В этом случае уже не поднимаем графический интерфейс cleardlg, а используем cleartool:
foreach $version (@rezmas)
{
system("cleartool checkout -c
\"Скрипт интеграции редактора отчётов с ClearCase\"
-version -nwarn \"$version\" ");
};
|
Заключение
Интеграционное
решение выполнено на встроенном языке ccperl, использованы команды
интерпретаторов cleartool, cleardlg, clearprompt. Разработанные скрипты
размещены на сервере ClearCase в каталоге с общим доступом. Для вызова
скриптов настроено контекстное меню.
Весь цикл разработки решения
– от описания концепции до передачи в эксплуатацию – занял семь рабочих
дней, решение было реализовано одним специалистом.
Это только
один из возможных вариантов выполнения интеграции. В нашей практике мы
выполняли также интеграцию средства разработки с ClearCase на уровне
API, используя библиотеку CAL. Но в этой статье мы описали именно
вариант без вмешательства в код системы.
Ресурсы СМ-Консалт
01.03.2009
Добавить комментарий (анонимные комментарии не публикуются!!!)
Новости и пресс-релизы СМ-Консалт
21.02.2012 12:42:20 Новая статья: IT и психология. Человеческий фактор в парном программировании: почему многие не получают желаемого от его внедрения?
Статья, находящаяся перед вами, открывает цикл статей о человеческом
факторе, Agile-практиках и других полезных приемах, используемых при
управлении командами в ИТ. Объединяет рассматриваемые практики и приемы
одно – они позволяют проявиться положительным эффектам, связанным с
человеческим фактором. И мы объясняем, почему с точки зрения психологии,
это происходит. Так сказать, подводим теоретическую и экспериментальную
базу под то, что себя уже давно зарекомендовало и работает. Или под то,
что работает не у всех, и потому является предметом оживленных споров и
дискуссий. И начинаем мы наши исследования с рассмотрения эффекта
парного программирования через призму экспериментов социальной
психологии.
Отдельную благодарность за рецензию и время, потраченное на прочтение
первого варианта статьи, выражаем Асхату Уразбаеву,
ценные замечания которого позволили не только улучшить данную статью,
но и позволили убедиться в необходимости и востребованности именно цикла
статей!
Читать -->
27.12.2011 16:15:27 Компания "СМ-Консалт" получила отзыв о работах в Федеральной Налоговой Службе (ГНИВЦ ФНС)
Специалистами ООО «СМ-Консалт» в 2010-2011г. был выполнен проект
по настройке и внедрению системы управления жизненным циклом разработки
программных систем в части управления изменениями и конфигурациями на
основе Microsoft Visual Studio Team Foundation Server 2010 для
Филиала Федерального государственного унитарного предприятия «Главный
научно-исследовательский вычислительный центр Федеральной налоговой
службы» в Приволжском Федеральном округе (Филиал ФГУП ГНИВЦ ФНС России в
ПФО).
28.11.2011 15:05:11 Новая статья: "Всегда ли «Да» – это «Да»? Или как нас вынуждают принимать решения"
Мы предлагаем вашему вниманию цикл статей, в основу которых положены
психологические практики и приемы, позволяющие влиять на решения,
принимаемые людьми. Эта идея была логическим продолжением ряда
выступлений с докладами о коммуникациях в проектах разработки и
внедрения ПО. Давайте, не откладывая в долгий ящик, начнем с самого
простого приема убеждения, с которым сталкиваемся ежедневно в магазинах,
в транспорте, в разговорах с коллегами… да мало ли где еще!
Авторы: Новичков Александр и Карабанова Галина.
Читать -->
10.10.2011 11:16:06 Компания «СМ-Консалт» открывает новое направление продаж - ПО Adobe Connect
Программное обеспечение Adobe Connect является гибкой системой
web-коммуникации с высоким уровнем информационной безопасности. Adobe
Connect предоставляет такие важнейшие функции корпоративного
взаимодействия, как деловое общение и совместная работа сотрудников на
уровне предприятий, дистанционное обучение, организация широкомасштабных
сетевых семинаров и презентаций. Система Adobe Connect базируется на
технологии Adobe Flash, а также Air, и поэтому позволяет подключать
сотрудников к единому пространству взаимодействия через web-браузер с
любых устройств.
17.09.2011 21:40:22 Новая статья: "Разработка прикладного программного обеспечения с использованием Rational Unified Process на Иркутском Авиационном заводе"

На сайте СМ-Консалт открыт новый раздел Статьи наших заказчиков об успешных внедрениях IBM Rational и Microsoft. Статьи для данного раздела пишутся нашими заказчиками и рассказывают о сути проектов внедрения технологий IBM и Microsoft. Первая статья, представленная вашему вниманию написана сотрудниками Иркутского Авиационного Завода (ИАЗ).
Иркутский авиазавод имеет длительный опыт разработки программного
обеспечения для информационной поддержки ключевых бизнес-процессов
предприятия. Однако, в связи с увеличивающейся сложностью и повышением
требований к разрабатываемому программному обеспечению, возникла
настоятельная необходимость усовершенствовать процесс разработки:
повысить качество разрабатываемых программных продуктов,
стандартизировать процесс с увеличением его эффективности.
С целью повышения качества программного обеспечения собственной
разработки и сокращения сроков разработки руководство Управления
информационных технологий (УИТ) Иркутского Авиационного Завода в 2006г. приняло решение о внедрении технологии разработки ПО на базе методологии Rational Unified Process и с использованием инструментов автоматизации IBM Rational.
13.09.2011 12:07:29 Новый тренинг «Коммуникации и психология межличностных отношений в ИТ-проектах»

Компания «СМ-Консалт» представляет новый тренинг, организуемый совместно с компанией «КарьерKаб» - «Коммуникации
и психология межличностных отношений в ИТ-проектах.
Тренинг позволит понять, насколько коммуникации в проектах важнее инструментов, что люди и их взаимоотношения зачастую оказываются решающим фактором, определяющим успех проекта. Если более пятидесяти процентов рабочего времени вы тратите на взаимодействие с заказчиком, если вам небезразлична судьба вашей команды и вы хотите, чтобы ваша команда работала как часы, реализуя проекты точно, вовремя и без перерасхода ресурсов - наш тренинг поможет в этом.
01.08.2011 17:44:25 Наша компания получила отзыв о сотрудничестве с ОАО «Нордеа Банк»

В 2010-2011 гг. наши специалисты провели в Нордеа Банке проект по предварительному обследованию, развертыванию инструментальных средств и ряд тренингов по обучению методологии и работе с продуктами IBM Rational: «Методология разработки программных систем IBM Rational Unified Process», «Управление требованиями с использованием IBM Rational RequisitePro», «Управление изменениями в IBM Rational ClearQuest».
24.06.2011 01:27:57 Бесплатный семинар-вебинар «Повышение эффективности IT подразделений и качества разрабатываемого ПО с использованием современных методологий и технологий»
Компании СМ-Консалт , Legal SoftWaveTM и DNA приглашают Вас посетить бесплатный семинар-вебинар, посвященный обзору технологий и методологий, которые позволяют повысить эффективность ИТ подразделений. На семинаре рассматриваются технологии IBM Rational, Microsoft TFS, а также системы аналитической обработки информации (Business Intelligence) (IBM SPSS, Deductor, QlikView и другие).
Планируемая продолжительность семинара - 8 академических часов.
Место проведения: Санкт-Петербург (очно) и Интернет (для всех желающих: приходите сами и приглашайте друзей!).
Дата и время: 14 июля 2011 в 9 00.
ВНИМАНИЕ: если вы не сможете очно приехать на семинар - это не страшно, так как семинар будет транслироваться через интернет в формате вебинара и к нему, после регистрации, смогут присоединиться все желающие. Трансляция будет осуществляться посредством технологии Adobe Connect Pro , это позволит Вам присоединяться к конференции без установки дополнительного ПО - только интернет браузер.
Смотреть программу -->
07.06.2011 13:02:44 Компания "СМ-Консалт" провела серию успешных семинаров для ГНИВЦ ФНС России

Проведенные семинары были посвящены средствам разработки и тестирования программного обеспечения компании Майкрософт для сотрудников ГНИВЦ ФНС России. Слушатели семинаров отметили высокую квалификацию тренеров компании "СМ-Консалт" по организации учебного процесса и повышению квалификации специалистов, прошедших обучение.
Индивидуальный подход при решении любых вопросов, возникающих в процессе обучения, оперативность принятия решений, гарантированное выполнение взятых на себя обязательств и профессионализм позволили провести обучение на самом высоком уровне.
07.12.2010 12:28:15 Мы идем в Твиттер!

Наша компания открыла аккаунт в системе микроблоггинга Twiter.Теперь все официальные и неофициальные новости будут появляться в нашей ленте в Twitter.
Там же возможно будет задать прямые вопросы специалистам СМ-Консалт, по всем вопросам, связанным как с деятельностью компании, так и с техническими аспектов продуктов IBM и собственных решений СМ-Консалт.
Следуйте за нами!
https://twitter.com/cmconscom
11.11.2010 14:14:14 Осенний марафон Microsoft ALM Road Show
Компания СМ-Консалт совместно с образовательным центром Careerlab провели серию семинаров в рамках мероприятий ALM Roadshow 2.0 в крупнейших городах, расположенных на Волге, – крупных научных центрах, в которых ИТ технологии находятся на высоком уровне. Семинары прошли в Самаре, Нижнем Новгороде и Казани. Cеминары были посвящены использованию новых инструментов MS Visual Studio Team System в проектах разработки ПО.
В семинарах принимали участие представители различных ролей процесса разработки ПО: от разработчиков до руководителей предприятий различного уровня. Темы, обсуждаемые в ходе семинара, вызвали большой интерес аудитории и немалое количество вопросов, на которые были предоставлены исчерпывающие ответы. В процессе семинара также было показано большое количество примеров, которые дают представление о возможностях инструментов MS Team System. Средняя оценка за семинар составила 4,6 балла по пятибальной шкале
08.09.2010 18:37:52 Скидки до 30% на программное обеспечение IBM Rational

Компания СМ-Консалт предлагает для всех желающих на льготных условиях приобрести программное обеспечение IBM Rational. Снижение цен связано с тем, что мы стараемся быть как можно ближе к нашим клиентам, многие из которых постепенно начали преодолевать последствия финансового кризиса.Наше предложение поможет с минимальными издержками приобрести ПО IBM Rational, что является хорошим капиталовложением.
Скидки до 1 декабря 2010 года:
- 20% скидки при покупке IBM Rational ClearCase, ClearQuest, CearCase LT, при приобретении пяти и более лицензий*;
- 30% скидки при покупке пяти любых продуктов IBM Rational + решение или тренинг СМ-Консалт*.
Для получения деталей обязательно свяжитесь с нашими менеджерами
|