Поделиться через


Визуализация кода путем создания на схем последовательностей

В Visual Studio Ultimate можно создать схему последовательностей, чтобы визуализировать и понять то, как код реализует конкретный метод.Схема последовательностей описывает взаимодействие между объектами в виде рядов линий жизни и сообщений.Линии жизни представляют экземпляры объектов, а сообщения представляют вызовы методов между этими объектами.Можно создать схемы последовательностей из кода Visual C# .NET или Visual Basic .NET.

ПримечаниеПримечание

Созданная схема последовательностей показывает элементы, сходные с элементами UML-схем последовательностей.Схема последовательностей, созданная из программного кода, существует независимо от UML-модели и может быть добавлена к любому проекту .NET.Напротив, UML-схема последовательностей, изображенная вручную, всегда является частью модели, в которой она создана.Дополнительные сведения см. в разделе UML-схемы последовательностей: справочные материалы.

Содержание раздела

  • Создание схемы последовательностей из исходного кода

  • Изучение кода на схемах последовательностей

  • Редактирование схемы для планирования изменений

  • Переходы из схемы

  • Связывание элементов взаимодействия с рабочими элементами

  • Связь с другими схемами

  • Устранение неполадок в схемах последовательностей

Создание схемы последовательностей из исходного кода

Создание схемы последовательностей из кода

  1. В Visual Studio откройте файл кода, содержащий определение метода.

  2. Открыть контекстное меню в любом месте определения метода и затем выберите Генерировать диаграмму последовательностей.

    Диалоговое окно "Сформировать схему последовательностей"

  3. В окне Сформировать схему последовательностей, в поле Максимальная глубина вызова, укажите максимальный уровень вызовов, который вы хотите посмотреть.

    Например, если нужно посмотреть только первый уровень вызовов, укажите максимальную глубину вызовов, равную 1.

    ПримечаниеПримечание

    Схема последовательностей будет показывать второй уровень вызовов как сообщения, не имеющие целевой линии жизни, или "утерянные сообщения".После создания схемы можно развернуть определенные утерянные сообщения.Дополнительные сведения о потерянных сообщениях см. в разделе UML-схемы последовательностей: справочные материалы.

  4. В разделе Включить входящие вызовы выберите область из следующей таблицы.

    Для просмотра

    Выберите

    Вызовов к элементам в текущем проекте

    Текущий проект

    Вызовов к элементам в решении

    Текущее решение (по умолчанию)

    Вызовов к элементам внутри и вне решения

    Решение и внешние ссылки

    Например, можно начать с простой схемы последовательностей, изучив только вызовы методов для элементов в непосредственном проекте.Область схемы можно расширить, создав новую схему, на которой показаны вызовы к элементам во всем решении.Если нужно посмотреть вызовы к элементам, не входящим в решение, необходимо создать схему, включающую внешние ссылки.

  5. В разделе Исключить исходящие вызовы можно еще больше упростить схему, опустив вызовы к следующим элементам.

    Чтобы опустить вызовы к

    Select

    Свойства и события

    Свойства и события (по умолчанию)

    Пространству имен System

    Системное пространство имен (по умолчанию).

    Определенным пространствам имен

    Другие пространства имен, затем введите пространства имен в поле, разделяя их запятой (,).Не используйте подстановочные знаки (*), они не поддерживаются.

    Чтобы включить вызовы к этим элементам, снимите соответствующие флажки.

  6. По завершении нажмите выберите ОК.

    Visual Studio создает схему последовательностей и добавляет ее в соответствующий проект.Сведения об устранении неполадок пои создании схем последовательностей см. в разделе Устранение неполадок в схемах последовательностей.

    ПримечаниеПримечание

    Объявления массивов не отображаются на созданных схемах последовательностей.

Чтобы определить и идентифицировать изменения, которые может потребоваться внести без влияния на код, можно изучить и изменить сформированную схему последовательностей.Например, можно добавлять новые линии жизни, сообщения, варианты использования взаимодействия и фрагменты.Для создания и отслеживания задач, которые нужно выполнить с соответствующим кодом, можно создать или связать рабочие элементы с элементами схемы.Дополнительные сведения см. в разделе Связывание элементов модели и рабочих элементов.

Важное примечаниеВажно

После создания схемы любые изменения, вносимые в схему, не отображаются в коде, а любые изменения, вносимые в код, не отображаются на схеме.Чтобы отобразить эти изменения, необходимо создать новую схему последовательностей.Можно создавать новые схемы последовательностей для того же метода неограниченное число раз.

Изучение кода на схемах последовательностей

Схема последовательностей помогает изучать код и представлять его другим.Чтобы получить наиболее удобную для этих целей схему, попробуйте использовать различные области при создании схемы.Можно также изменить схему после ее создания.Например, можно удалять сообщения, которые не нужны для представления и обсуждения принципов разработки.

В схему последовательностей можно внести следующие изменения.

Целевой тип

Выполните следующие действия

Показать следующий уровень вызова

Открыть контекстное меню для сообщения, которое не имеет конечной линии жизни, а затем выберите Развернуть исходящие.

Развернуть сообщение на новой схеме

Открыть контекстное меню для сообщения, а затем выберите Сформировать схему последовательностей.

Новая схема добавляется в текущий проект.

Свернуть группу сообщений в одну линию жизни

Выберите линии жизни, которые необходимо сгруппировать, открыть контекстное меню для выделения, а затем выберите Свернуть.

Группу можно переименовать, но при развертывании имя будет потеряно.

Чтобы развернуть группу, откройте контекстное меню для его, а затем выберите Развернуть.

Удалить элементы

Откройте контекстное меню для формы, затем выберите Удалить.

Улучшить разметку

Открыть контекстное меню для пустой области схемы, а затем выберите Изменить макет.

Можно также отменить эту команду.

Выделить выбранные элементы

Откройте контекстное меню для элемента, затем выберите Свойства.В окне Свойства задайте значение для поля Цвет.

Добавить к схеме примечания

Выберите Комментарий, щелкните схему и введите текст комментария.Используйте средство Добавить комментарий для связи, чтобы соединить комментарий с одной или несколькими точками на линиях жизни или фрагментах.

Редактирование схемы для планирования изменений

Редактируя схему путем добавления и удаления элементов, можно планировать изменения кода.Также можно копировать части схемы на UML-схему последовательностей, созданную в UML-проекте моделирования.Это позволяет связать линии жизни с типами, компонентами и субъектами UML-модели.

В следующей таблице перечислены изменения, полезные для описания предложений по разработке.Дополнительные сведения см. в разделе UML-схемы последовательностей: правила работы.

Целевой тип

Выполните следующие действия

Выделить линии жизни, сообщения и другие элементы

Измените свойство Цвет элемента.

-или-

Следующим образом свяжите с элементом Комментарий.

  1. В меню Панель элементов выберите пункт Комментарий и щелкните схему рядом с элементом.

  2. В меню Панель элементов выберите пункт Добавить комментарий для связи, на диаграмме выберите комментарий, а затем выберите элемент.

Переместить линии жизни

Перетащите линию жизни в другую область схемы.

Чтобы переместить группу линий жизни, имеющих утерянные или найденные сообщения, выполните следующие действия, чтобы выбрать линии жизни перед перемещением.

  • Нарисуйте прямоугольник вокруг этих линий жизни.

    -или-

    Нажмите и удерживайте клавишу CTRL и последовательно выбеоите каждую линию жизни.

    ПримечаниеПримечание
    Если для выбора и перемещения всех линий жизни использовать команду Выделить все или сочетание клавиш CTRL+A, утерянные или найденные сообщения, прикрепленные к этим линиям жизни, не будут перемещены.В этом случае такие сообщения можно переместить отдельно.

Перемещение и перегруппировка сообщений

Перетащите сообщение по схеме вверх или вниз.

  1. Выберите сообщение и выполните следующие действия.

  2. Для изменения положения сообщения используйте клавиши СТРЕЛКА ВВЕРХ и СТРЕЛКА ВНИЗ.

  3. Для изменения последовательности сообщений используйте комбинации клавиш CTRL+СТРЕЛКА ВВЕРХ и CTRL+СТРЕЛКА ВНИЗ.

Добавить линию жизни

Выберите Линия жизни на Панели элементов, затем выберите схему.

Добавить сообщение

Создание сообщений
  1. В Панели элементов выберите Синхронное или Асинхронное сообщение.

    Чтобы добавить найденное сообщение или утерянное сообщение, используйте Асинхронное сообщение.Найденное сообщение поступает из неизвестного источника событий, а утерянное сообщение рассылается неизвестному получателю.

  2. Выберите на схеме исходную линию жизни.

  3. Выберите целевую линию жизни.

    - или -

    Чтобы создать найденное или утерянное сообщение, выберите пустую область на схеме, соответственно, под или перед исходной линией жизни.

  4. Введите имя нового сообщения.

Скопировать линии жизни и сообщения на или из других схем

Скопируйте и вставьте линии жизни.

Сообщения между ними будут скопированы автоматически.

ПримечаниеПримечание
При копировании линий жизни из UML-схемы последовательностей в проект моделирования на созданную схему последовательностей могут появляться только заголовки линий жизни, а также может быть нужно настроить их цвета.Чтобы устранить эту проблему, выберите вставленные линии жизни и установите их свойство Цвет.

Заключить сообщения в объединенный фрагмент

  1. Выберите одно или несколько сообщений.

  2. Открыть контекстное меню для выделения, наведите на Окружить, а затем выберите тип объединенного фрагмента.

Объединенные фрагменты используются для представления альтернативных последовательностей, циклов и других комплексов сообщений.

Переместить сообщение на новую схему

Открыть контекстное меню для сообщения, а затем выберите Перемкстить в диаграмму.

Создается новая схема, содержащая сообщение и его дочерние сообщения.На исходной схеме сообщение заменяется на Использование взаимодействия.

Скопировать схему

Скопируйте схему в обозревателе решений или ее файлы в проводнике.С каждой схемой связано два файла.

Созданную схему последовательностей можно редактировать с помощью любого экземпляра Visual Studio Ultimate и считывать с помощью Visual Studio Ultimate или Visual Studio Premium.

Не выделять некоторые ручные изменения, например дополнения и изменения имен

  1. Откройте контекстное меню для диаграммы последовательностей и выберите Свойства.

  2. Задайте свойству Показывать ручные изменения значение False.

Переходы из схемы

Целевой тип

Выполните следующие действия

Перейти с линии жизни или сообщения к определению класса или метода, соответственно

Открыть контекстное меню для линии жизни и сообщения, а затем выберите Перейти к определению.

Найти класс или метод в обозревателе архитектуры

Открыть контекстное меню для линии жизни и сообщения, а затем выберите Показать в обозревателе архитектуры.

Дополнительные сведения см. в разделе Визуализация зависимостей кода на графах зависимостей.

Привязка схемы последовательностей к рабочим элементам

Для планирования работы по реализации изменений можно связывать элементы любого типа на схеме последовательностей с рабочими элементами в Team Foundation Server.Перед началом убедитесь, что подключены к Team Foundation Server.Дополнительные сведения см. в разделе Связывание элементов модели и рабочих элементов.

Целевой тип

Выполните следующие действия

Создать и связать новые рабочие элементы с линиями жизни, сообщениями или другими элементами

  • Открыть контекстное меню для одного или нескольких элементов, выберите Создать рабочий элемент, а затем выберите тип рабочего элемента, который требуется создать.

    Открывает новый рабочий элемент, чтобы можно было выполнить его.

Связать линии жизни, сообщения или другие элементы с рабочими элементами

  1. Открыть контекстное меню для одного или нескольких элементов, а затем выберите Связать с рабочим элементом.

  2. В диалоговом окне Связь с рабочими элементами запустите запрос, чтобы найти рабочий элемент, или непосредственно введите его идентификатор.Можно выбрать любое число рабочих элементов.

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

Просмотреть связанные рабочие элементы

Открыть контекстное меню для одного или нескольких элементов, а затем выберите Просмотреть с рабочие элементы.

Удалить связи с рабочими элементами

  1. Открыть контекстное меню для элемента, а затем выберите Удалить рабочие элементы.

  2. В диалоговом окне Удалить ссылки на рабочие элементы можно выбрать ссылки на рабочие элементы, которые нужно удалить.

Связи между элементом модели и выбранными рабочими элементами будут удалены.Рабочие элементы и элементы модели не удаляются.

Рекомендации по использованию созданных схем последовательностей

Следующие рекомендации могут быть полезны при изучении кода по созданным схемам последовательностей.

Ee317485.collapse_all(ru-ru,VS.110).gifИзучение кода

Создавайте схемы зависимостей, чтобы получить общую картину основных группировок и зависимостей в больших частях кода.Затем создавайте схемы последовательностей, чтобы подробнее рассмотреть отдельные части проекта.Дополнительные сведения см. в разделе Визуализация зависимостей кода на графах зависимостей.

Ee317485.collapse_all(ru-ru,VS.110).gifИнтерпретация схем

Алгоритм, создающий схему, символическим образом выполняет код.Эта техника не охватывает некоторые ситуации.Это, в частности, следующие ситуации.

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

  • Тип линии жизни — тип, объявленный в коде программы, даже если код всегда использует подтип.

Ee317485.collapse_all(ru-ru,VS.110).gifРассмотрение подробных сведений разработки

  • Сосредоточьтесь на одном из аспектов разработки.Для работы с разными аспектами можно создавать различные схемы, а также создавать копии файлов схемы на любом этапе работы.

  • Чтобы получить полезную схему, четко представляющую аспект разработки, может быть нужно поэкспериментировать с фильтрами и созданием пространств имен.

  • Удаляйте сообщения, не имеющие существенного значения, и разворачивайте важные сообщения, чтобы просматривать для них больше подробностей.

  • С помощью команды Свернуть можно группировать линии жизни, представляющие совместно работающие группы, если внутренние взаимодействия не имеют значения для рассматриваемого вами аспекта.

Ee317485.collapse_all(ru-ru,VS.110).gifОбновление плана разработки

  • С помощью системы управления версиями можно работать над схемой совместно.Рекомендуется заблокировать схему при редактировании, чтобы ее одновременно мог редактировать только один человек.

  • С помощью созданной схемы последовательностей часто можно определить части существующего кода, затрудняющие изменения и адаптацию.Например, одна из линий жизни может отправлять все сообщения, а другие могут только отвечать на них, не отправляя значительное число собственных сообщений.Возможно, работу этого объекта можно более эффективно разделить между другими объектами.У каждого класса объектов должна быть четко определенная задача.Как правило, эта политика упрощает определение частей программы, которые нужно изменить при изменении потребностей пользователей или при необходимости перегруппировать части для создания нового варианта приложения.

  • Создав схему, описывающую конкретные аспекты разработки, сделайте ее копии и редактируйте их, чтобы предлагать различные варианты изменений.

  • Можно копировать элементы созданных схем последовательностей в UML-схему последовательностей.Сначала необходимо создать UML-схему последовательностей внутри UML-проекта моделирования.После этого можно моделировать различные представления обновленного проекта и связывать линии жизни с компонентами или классами в модели.Также можно расширить взаимодействие и включить внешние субъекты.

Устранение неполадок в схемах последовательностей

В следующей таблице описываются неполадки, которые могут возникать при создании схем последовательностей, и возможные способы их устранения.

Проблема

Решение

Невозможно создать схему последовательностей.

Схема последовательностей может не создаваться, если исключено пространство имен System, а также если код содержит вызов метода COM, принимающего параметры ref или out и передающего параметр с помощью ключевого слова new.Во избежание этой проблемы измените код или включите пространство имен System при создании схемы.

После отображения указанного ниже сообщения создается пустая схема последовательностей.

"В экземпляре объекта не задана ссылка на объект."

Эта неполадка возникает, когда схема последовательностей создается из явной реализации метода интерфейса, при этом схема не добавляется в исходный проект автоматически.В явной реализации имени метода предшествует имя интерфейса и точка (.).

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

void ILinkedWorkItemExtension.OnWorkItemCreated( ) {}

Если возможно, не указывайте имя интерфейса и точку (.).

-или-

В диалоговом окне создания схемы последовательностей обязательно задайте автоматическое добавление схемы последовательностей в проект.

Создание схемы последовательностей занимает очень много времени.

- или -

Схема последовательностей вызывает сбой при повторном открытии.

В зависимости от конфигурации компьютера, схема последовательностей может быть слишком велика для быстрого создания или может вызывать нехватку памяти в Visual Studio и сбой при закрытии и последующем открытии этой схемы.Например, для схемы последовательностей, содержащей 390 линий жизни и 19000 сообщений, создаваемый файл схемы имеет объем более 85 МБ.

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

См. также

Ссылки

UML-схемы последовательностей: справочные материалы

Основные понятия

Визуализация и понимание кода

Визуализация зависимостей кода на графах зависимостей

Создание схем слоев из кода