|
|
|||||||||||||||||||||||||||||
|
Часть 2. Управление жизненным циклом приложения при помощи ClearQuest 7.1.0.0Источник: IBM Rational Кэролин Пампино, Роб Пирс
Эта статья, состоящая из трех частей, представляет собой описание концепций и проектных задач готового решения для управления жизненным циклом приложений (application lifecycle management, ALM) для IBM Rational ClearQuest.Управление заданиямиПроекты задают контекст для нашей работы, а мы должны выполнять задания, чтобы завершить работу над проектом. На всем протяжении разработки программного решения, чтобы обеспечить выполнение всех заданий по проекту, необходимо выполнять множество деятельностей. Рабочие записи в пакете ALMWork предоставляют способ мониторинга требований и задач, которые должна решать рабочая группа по ходу цикла разработки. В предыдущих версиях ClearQuest управление заданиями осуществлялось посредством создания типов записей для каждого элемента, нуждающегося в управлении (Дефект, Запрос на изменение и т.п.). Однако в ALM-схеме основное внимание уделяется распределению заданий между сотрудниками рабочей группы. AML-схема предоставляет основные типы записей для управления заданиями, а именно: Request (Запрос), Task (Задача) и Activity (Деятельность).
Каждой из этих трех типов записей могут также быть присвоены "типы" (о которых рассказывается ниже), позволяющие дополнительно уточнить характер задания. Кроме распределения заданий часто возникает вопрос о комментариях по поводу задания. Следовательно, предоставляется также запись Comment (Комментарий).
На рисунке 1 показаны отношения между типами Requests (Запросы), Tasks (Задачи), Activity (Деятельность) и Work Types (Типы заданий).
Рисунок 1. Основные записи для заданий. Запросы определяют, какая "потребность" и где была "обнаружена". Задачи определяют, какие задания должны быть выполнены для удовлетворения запроса по проекту. Деятельности распределяются между отдельными исполнителями и совместно выполняют задачу. Запись Work Types определяет характер задания Любое задание начинается с Запроса определенного вида. Запрос описывает идентифицированную потребность и принадлежит любому заинтересованному в проекте лицу, а Задачи и Деятельности представляют собой записи для мониторинга хода выполнения задания, которое было поручено исполнителям и должно быть выполнено для удовлетворения Запроса. Это позволяет сравнить количество запросов с количеством порученных задач. Кроме того, это позволяет проект-менеджеру оценить объем работы, связанный с каждым запросом, а также объем завершенных или незавершенных заданий. Возможны также ситуации, в которых один запрос оказывает влияние более чем на один проект. Такое разделение запросов на выполнение заданий и поручений на выполнение заданий позволяет управлять Задачами каждого проекта в отношении выполнения Запроса в специфическом для данного проекта контексте.
Рисунок 2. Использование записей для заданий. Сначала сортируются запросы и создаются задачи для проекта. Деятельности выполняют задачу, после чего выполненная работа анализируется, а запрос закрывается На рисунке 2 показана схема потока для работы с этими новыми типами записей. Стрелки обозначают родительские/дочерние отношения между записями.
Запись Request является исходной точкой для начала работы. Любое заинтересованное лицо, направившее Запрос, регулярно проверяет его состояние и отвечает на любые вопросы или комментарии. Полномочия пользователя схемы определяют, кто (т.е. какие пользователи, группы или роли) может передать новый Запрос (рисунок 3). Запись Request:
Рисунок 3. Новая запись Request Некоторые из показанных на рисунке 3 полей являются обязательными. Если указано значение в поле "project found in...", то в поле security context (контекст безопасности) на вкладке history автоматически выбирается этот проект. Остальные обязательные поля - это Headline, Type и Severity. Переходы Запроса между состояниями очень просты, как показано ниже. Запрос может быть либо выполненным, либо невыполненным (рисунок 4).
Рисунок 4. Поток для запроса Приемка запроса переводит его в состояние выполнен (completed) Запрос может быть отозван (withdrawn) или отклонен (rejected). После перевода в состояние rejected или withdrawn запрос может быть снова открыт. Задачи выполняют запросы в контексте проекта.
При категоризации Запроса указывается, какая рабочая группа будет им заниматься. Эта рабочая группа анализирует Запрос и решает, может ли он быть удовлетворен и к какому сроку. Если Запрос будет выполняться в рамках определенного проекта, то в этом проекте создается Задача, которая ассоциируется с Запросом, как показано на рисунке 5. Любой специалист, просматривающий Запрос, сразу увидит, какие Задачи необходимо выполнить для его удовлетворения. Любому специалисту или заинтересованному лицу при просмотре Задачи сразу видно, для удовлетворения какого Запроса она предназначена. Запись Task:
Рисунок 5. Если Запрос будет выполняться в рамках определенного проекта, то в этом проекте создается Задача, которая ассоциируется с Запросом Поля, выделенные красным шрифтом на рисунке 5, являются обязательными. Если указано значение в поле "project assigned...", то в полях security context (контекст безопасности) и roles (роли) на вкладке history автоматически выбирается этот проект. Остальные обязательные поля - это Headline, Type, Severity и related Request (на вкладке Related Records).
Рисунок 6. Поток задачи Переходы между состояниями для Задачи очень просты (рисунок 6). Задача может быть Opened (Открыта), Activated (Активирована) или Completed (Выполнена). Когда Задача передается исполнителю, она переходит в состояние Open. Активация задачи означает начало ее выполнения. Задачу можно открыть повторно. Руководители группы анализируют Задачу и определяют, какие Деятельности необходимы для ее выполнения. Часто для выполнения одной Задачи требуется труд нескольких пользователей. Деятельности создаются и распределяются таким образом, чтобы один сотрудник рабочей группы выполнял дискретную единицу работы, как показано на рисунке 7. Запись Activity:
Рисунок 7. Деятельность создается и распределяется таким образом, чтобы один сотрудник коллектива выполнял дискретную единицу работы Некоторые из показанных на рисунке 7 полей являются обязательными. Остальные обязательные поля - это Headline, Type, Severity и related Request (на вкладке Related Records). Поле Security Context на вкладке History наследует значение из поля related Task. Деятельности также характеризуются простыми переходами между состояниями, как показано на рисунке 8. В данном случае таких состояний четыре, как в UCM. Деятельности могут иметь состояния Submitted (Поручена), Opened (Открыта), Activated (Активирована) и Completed (Выполнена). Деятельность может перейти в состояние Activated из состояния Submitted.
Рисунок 8. Деятельности характеризуются простыми переходами между состояниями Понятие "переключение контекста" заслуживает того, чтобы ему уделили немного внимания. В предыдущих версиях ClearQuest запись использовалась для документирования всей информации в полях, а переходы между состояниями - для "продвижения" записи по процессу. В ряде случаев переходы между состояниями также требовали переназначения владения записью другому сотруднику рабочей группы. В результате каждое состояние могло быть назначено для представления одной единицы работы, выполняемой отдельным сотрудником рабочей группы (это до сих пор работает в данных продуктах и поддерживается производителем). ALM-решение предоставляет альтернативный подход. Чтобы проиллюстрировать переключение контекста, давайте возьмем для примера запись "Defect". В предыдущих версиях ClearQuest запись Defect использовалась для управления всеми дефектами, обнаруженными в системе (рисунок 9). Она имела набор изменений состояния. Например, первым состоянием могло быть состояние "Develop" (Разработать), которое поручалось разработчику. Следующим состоянием могло быть "Validate" (Проверить), которое поручалось тестировщику.
Рисунок 9. Переходы состояний и существующие записи ClearQuest После того как разработчик заканчивал свою работу, запись Defect переходила в следующее состояние, в результате чего владение записью переходило к тестировщику. Эта модель работает до тех пор, пока у вас не появятся две отдельные рабочие группы, для каждой из которых нужен свой набор переходов. Что делать в этом случае? У вас есть три варианта: создать новый тип записи для второй рабочей группы, изменить переходы между состояниями в существующем типе записи Defect и жестко привязать каждое состояние к одной из рабочих групп или полностью проигнорировать запрос. В схеме ALM используется другая модель (рисунок 10). Работа по новой модели начинается с Запроса типа Дефект. Этот тип записи могут использовать все рабочие группы. Он имеет простую модель перехода между состояниями и используется для сбора информации о дефекте и проекте, в котором он обнаружен. Затем создается Задача и определяется Проект, в рамках которого она будет выполняться. Выбор проекта определяет, какие типы Задач будут доступны. Выбор типа Задачи определяет, какой набор деятельностей необходим для ее выполнения.
Рисунок 10. Замена перехода состояний при помощи деятельностей В этом подходе вместо использования сложных диаграмм перехода состояний для перемещения отдельной записи через несколько наборов пользователей можно просто создать набор Деятельностей. Поскольку Задачи и Деятельности конфигурируются для каждого проекта в самом проекте, администраторам ClearQuest больше не придется изменять схему для каждого варианта процесса, необходимого рабочим группам проекта. Руководители проекта могут просто сконфигурировать набор Деятельностей, которые, по их мнению, необходимы для выполнения каждого типа задачи (информация о конфигурировании Задач и Деятельностей в соответствии с их типом приводится ниже). О типах заданий (запись Work Types) Как уже говорилось ранее, Запросы, Задачи и Деятельности можно дополнительно уточнить при помощи атрибута Type, идентифицирующего характер задания. Например, у вас может быть Запрос с типом "Дефект" Задача с типом "Исправить дефект" и Деятельность с типом "Реализовать" или "Протестировать". Определения записи Work Type можно настраивать; они доступны в рамках всей системы. Для настройки типа задания достаточно просто создать новую запись ALMType:
Рисунок 11. Запись ALMType
После определения типов их нужно связать с проектом при помощи ALMWorkConfiguration; об этом мы поговорим чуть позже. Атрибуты ALMType и TypeLabel позволяют создать весьма настраиваемую систему для вашей рабочей среды. Если ваша организация использует стандартный процесс, например, RUP или IT Infrastructure Library (ITIL®), то вы можете добавить в определения типа соответствующий глоссарий. Но, скажем, вам необходим всего лишь подход к управлению заданиями в вашей рабочей группе. Или, может быть, вы пока не готовы использовать идею с трехуровневыми определениями, а просто хотите поручить людям работу и проследить за ее выполнением. Некоторые коллективы, практикующие принцип agile-разработки, работают именно так. Вы можете осуществить такой минималистский подход, создав метки типа (Type Label) General и типы для Request, Task и Activity, присвоив всем им тип General. Если нужно различать Деятельности, то можно создать для них дополнительные типы:
Рисунок 12. Деятельности, объединенные в рамках одной Задачи, создают модель для малых проектов или динамичных групп
Рисунок 13. Добавление записей по умолчанию Request и Task в данный проект
В данном примере всеми заданиями управляют Деятельности. Деятельности выполняются как очередь заданий, в которой каждое задание передается на выполнение, а затем выполняется. В проекте может быть много Деятельностей, но всего лишь одна Задача и один Запрос. Все пользователи этого проекта будут осведомлены лишь о Деятельностях и смогут взаимодействовать именно с ними, однако им не нужна информация о Задачах или Запросах. Этот подход может использоваться в небольших динамичных рабочих группах или для небольших краткосрочных проектов, когда сотрудникам рабочей группы просто нужно знать, какое задание они должны выполнить. Но для крупных корпораций, которые связаны законодательными требованиями, эта модель может оказаться недостаточной, поскольку не дает возможности трассировать все задания к исходному запросу. Эффективность "конфигурации заданий" Описанное ранее разделение на Запросы, Задачи и Деятельности создает новую эффективную модель управления заданиями. Однако в предыдущей модели ClearQuest для определения особых переходов между состояниями использовалось несколько типов записей. В результате можно было управлять процессами при помощи типов записей и их состояний. Возникает следующий вопрос: как можно управлять такими процессами в новой модели? Придется ли для этого вручную создавать задачи и деятельности для каждого запроса? В первоначальной модели нужно было просто создать запись, а состояния были уже определены в этой записи. В новой модели одна деятельность представляет одно изменение состояния. Возможно, вам придется создать множество деятельностей; как можно гарантировать, что в каждом случае будет использоваться одна и та же деятельность? Добавьте запись Work Configuration (Конфигурация задания), которая показана на рисунке 14. Именно здесь в полной мере проявляется гибкость новой модели. Чтобы адаптировать модель к рабочему потоку каждой рабочей группы, теперь можно назначить по умолчанию набор Деятельностей, необходимых для выполнения задач для каждого проекта. В понимании эффективности этой записи в наибольшей степени заинтересованы проект-менеджер и/или менеджер процессов. Другим пользователям в рабочей группе об этом знать необязательно.
Рисунок 14. Запись Work Types определяет характер задания; запись Work Configuration определяет рекомендуемый процесс Для определения конфигурации задания (Work Configuration):
Записи Work Configuration позволяют проект-менеджеру наладить настраиваемый процесс управления заданиями по каждому проекту отдельно. Лучше всего показать это на примере, поэтому давайте вернемся к нашему примеру с записью Defect. Проект 'A' имеет запрос типа "Проблема". Для этого проекта создана следующая конфигурация заданий (рисунок 15):
Рисунок 15. Два Проекта - два процесса для решения проблемы. Здесь мы заменили одноразовые переходы состояний определенными для всего проекта наборами деятельностей Как показано на рисунке 15, в проекте B можно сконфигурировать другой набор деятельностей для закрепления механизма работы этой рабочей группы. Конфигурация задания для этого проекта будет следующей:
Кроме того, обратите внимание, что на рисунке 15 проиллюстрирована возможность иметь один запрос, который удовлетворяется двумя разными задачами в двух разных проектах. Это делает возможной параллельную разработку, при которой каждой проектной группе поручается задание для удовлетворения данного запроса в контексте соответствующего проекта На рисунке 16 показана конфигурация задания для рабочей группы проекта B.
Рисунок 16. Конфигурация задания для управления дефектом. Тип запроса может потребовать создания особого типа Задачи, которая может иметь собственный набор деятельностей. В записи Work configurations определяются все эти политики процесса для проекта Мы показали только один пример, однако потенциал сценариев использования записи Work Configurations поистине безграничен. Например, можно создать Задачу "Начать работу по Проекту". Эта задача может иметь следующие Деятельности: "Определить роли", "Подобрать сотрудников для рабочей группы", "Определить итерации" и т.д. Еще одна задача может быть связана с уточнением требований и иметь отдельные деятельности для создания контрольных примеров, определения тестов производительности и т. д. Запись Work Configuration позволяет проект-менеджерам наладить процессы для каждого проекта в отдельности. Пример AML-базы данных для "OpenUP" (который мы рассмотрим чуть позже) иллюстрирует использование записи Work Configurations для реализации процесса OpenUP. После каждого изменения исходного кода приложение собирают и проверяют, имеет ли оно достаточное качество, позволяющее перейти к тестированию. После проверки выполняется "развертывание" сборки на тестовых серверах для тестирования. Эта последовательность сдачи изменений исходного кода, сборки и тестирования приложения выполняется независимо от охвата или размера релиза, будь то новое, создаваемое с нуля приложение или крупный пересмотр уже существующего приложения, исправление. При обнаружении ошибки регистрируются дефекты, а в исходный код вносятся изменения для исправления дефекта. После этого приложение снова должно быть собрано и развернуто на тестовых серверах для тестирования. Часто лишь отдельные специалисты в рабочей группе знают, какую сборку необходимо протестировать, поэтому проект-менеджер должен точно знать, кто эти люди. ALM-схема поддерживает такую модель рабочих потоков, в которой имеет место параллельность разработки и тестирования. После того как разработчик сделает свою работу и выполнит деятельности по разработке, он сдает изменения в репозиторий. Инженер по релизам создает релизы (базовые линии), выполняет сборки, проверяет и передает сборки на тестирование. Тестировщик выполняет деятельности, связанные с тестированием. В проектах разработки программного обеспечения сборки создаются непрерывно. Обычными вопросами к группе разработчиков являются вопросы типа "какие функции реализованы в сборке" и "что тестировать в сборке". ALM-решение предоставляет запись Build (Сборка), которая впервые появилась в пакетах Build и Deployment в ClearQuest 7.0.0.0. Эта запись позволяет рабочей группе документировать информацию о каждой сборке. Кроме того, ALM-решение использует запись Baseline (Релиз) чтобы отслеживать, какие деятельности сдаются в каждой сборке (рисунок 17). Благодаря записям Baseline, Build и Activity тестировщики знают, что необходимо тестировать, и могут отслеживать тесты, выполненные в данной сборке.
Рисунок 17. Интеграция записи Baseline с UCM-решением Основной поток выглядит так: когда инженер по релизам проводит сборку, есть возможность зафиксировать, какие деятельности по разработке были выполнены. Для этого необходимо идентифицировать деятельности, которые были сданы с момента последней сборки. Запись Baseline (Релиз) используется для фиксации информации о состоянии деятельностей на данный момент времени. Тем, кто уже работал с системами UCM, знаком термин baseline (релиз) и его связь с фиксацией версии исходного кода в любой момент времени. В ALM-решении ClearQuest появилась запись Baseline, которую можно использовать для отображения на релизы UCM. При создании релиза в UCM, определив различия между деятельностями, можно понять, какие деятельности являются новыми. Этот список деятельностей можно заполнить в записи Baseline, как показано на рисунке 18. Для тех, кому раньше не приходилось работать с UCM, для идентификации списка деятельностей можно использовать запросы ClearQuest, которые можно вручную добавить в запись Baseline.
Рисунок 18. Запись Baseline с заполненной секцией Activities После создания релиза выполняется сборка. Запись Build (рисунок 19) используется для фиксации состояния сборки. В этой записи можно создать ссылку на запись Baseline. Это связывает релиз и результат сборки. О состоянии сборки сообщает запись Build (сборка). Теперь остальные сотрудники рабочей группы могут использовать эту запись, чтобы определить дальнейшее направление работы. Для готовых сборок рабочая группа по тестированию может проанализировать запись Baseline и набор выполненных деятельностей. Каждая деятельность включает ссылку на исходную задачу, которая может включать и деятельности по тестированию. Благодаря этой новой наглядности контента сборки тестировщики могут более разумно сконцентрировать свои усилия.
Рисунок 19. Запись Build с новой вкладкой ALM На первый взгляд может показаться, что для этого требуется слишком много усилий. Однако при помощи скриптов сборки и автоматизации сборки большая часть работы может быть автоматизирована в составе сборки. Можно использовать скрипт на языке Perl, который выявит различия между двумя релизами и заполнит запись Baseline. Существует и другой скрипт на Perl, который предназначен для создания и заполнения записи BTBuild. Рекомендуется использовать передовой метод, согласно которому создание записей Build и Baseline включается в скрипты сборки или в проект IBM Rational Build Forge®. В процессе выполнения сборки используйте предлагаемые Perl-скрипты для автоматического создания записи Baseline и определения деятельностей для создания записи Build в ClearQuest и заполнения полей соответствующей информацией. Задачи могут быть распределены между итерациями проекта. Это позволит рабочей группе проекта равномерно распределить рабочую нагрузку между итерациями. Кроме того, можно создать диаграммы, аналогичные показанной на рисунке 20. Такие диаграммы позволяют проанализировать распределение заданий в рабочей группе. Это поможет проект-менеджеру равномерно распределить рабочую нагрузку между сотрудниками рабочей группы и избежать ситуаций "критического пути". Такие диаграммы также помогают проект-менеджеру убедиться в том, что распределены все задания.
Рисунок 20. Диаграмма для управления рабочей нагрузкой Обратите внимание, что на рисунке 20 в столбце "No value" имеется пять Задач. Это означает, что они никому не поручены, и может служить для проект-менеджера сигналом о том, что часть заданий ускользнула от его внимания. Кроме того, обратите внимание, что в фазе конструирования рабочая нагрузка равномерно распределена между сотрудниками рабочей группы, тогда как в фазе передачи и сопровождения, как и следовало ожидать, имеется смещение рабочей нагрузки. Создавая подобные диаграммы, проект-менеджер сможет более эффективно управлять своим проектом, гарантируя выполнение всех заданий и активную работу всех своих сотрудников и предотвращая перегрузку отдельных членов рабочей группы большим количеством работы.
|
|