Спонсор: Microsoft
Опубликован: 25.03.2010 | Доступ: свободный | Студентов: 802 / 25 | Оценка: 4.43 / 3.71 | Длительность: 10:46:00
Лекция 4:

Структуризация проектов и решений для управления исходным кодом в Team Foundation

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Аннотация: В этой лекции: повышение эффективности командной разработки в системе управления исходным кодом Microsoft® Visual Studio® Team Foundation Server (TFS) при помощи структурирования проектов; синхронизация структуры папок на серверной и клиентской сторонах; выбор стратегии модульного тестирования структуры; создание структуры папок для различных сценариев ветвления; знакомство с рабочей областью и сопоставлением локальных файлов с системой управления исходным кодом; файлы, добавляемые в систему управления исходным кодом.

Обзор

Многие стандартные соглашения о папках Visual Studio, используемые при создании новых решений и проектов, не оптимальны для командной разработки и использования с системой управления исходным кодом TFS. Создавая новые проекты и решения Visual Studio, не спешите принять умолчания. Продумайте собственную локальную и серверную структуру папок.

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

Приведены примеры структур папок для приложений различных типов, включая Microsoft Windows Forms, Smart Client и веб-приложения. В лекции также рассказывается, как использовать рабочие области для управления сопоставлениями между клиентскими и серверными структурами папок.

Структура на стороне сервера

Большинство командных проектов содержат одно или несколько решений Visual Studio, каждое из которых содержит один или несколько проектов Visual Studio. Если для поддержки конкретных вариантов разработки вам необходимо ветвление, используйте для объединения проектов Visual Studio как на клиенте, так и на сервере корневую папку Main. Далее приведен пример структуры папок в системе управления исходным кодом TFS:

{ $MyTeamProject1                    Может содержать файлы решения (.sln)
/Main                                        Файл MyApp1.sln
  /Source                                   Папка для всего исходного кода
    /MyApp1                               Файл ClassLibrary1.csproj
      /Source                              Файл Default.aspx
       /ClassLibrary1                    Основная папка для модульных тестов
       /MyApp1Web
    /UnitTests
      /ClassLibrary1Tests              Проект и код для тестирования
      /MyApp1WebTests                Проект и код для тестирования
    /SharedBinaries                     Общие ресурсы, например, библиотеки
   /SharedSource                        Общий исходный код
  /Docs                                      Документация продукта
  /Tests                                     Общая папка тестирования
    /FunctionalTests                     Создаются автоматически Team Build
    /PerformanceTests		
    /SecurityTests
/TeamBuildTypes
   /BuildType1
  /BuildType2 }

Папка Main служит для хранения файлов исходного кода и других связанных с ним компонентов, например, результатов сборки, проектной документации и данных тестирования. Папка приложения ( MyApp в предыдущем примере) содержит файл решения Visual Studio (.sln) , используемый для группирования связанных проектов Visual Studio. Каждый файл проекта ( .vcproj или .vbproj ) содержится в специальной подпапке проекта, расположенной в папке /Main/Source/MyApp1/Source. Модульные тесты, сопровождающие каждый проект, находятся в папке UnitTests. Вы можете поместить в папку Main дополнительные файлы решений (.sln) Visual Studio, чтобы получить возможность работать с другими вариантами группирования проектов.

Папки Docs и Test используются для размещения дополнительных артефактов, связанных с командным проектом, включая документацию продукта и автоматические тесты.

Папка TeamBuildTypes создается автоматически, когда вы впервые генерируете сборку Team Build. Если вы хотите зарегистрировать тип командной сборки вручную, создайте эту папку самостоятельно, добавьте в нее файлы Team Build, и TFS автоматически распознает эту папку.

Подробнее о группировании проектов и структуре решений - в лекции 3.

Хранение модульных тестов

Вы можете хранить модульные тесты в папке UnitTests, расположенной на одном уровне с папкой Source, как показано ниже.

{ 
  …
   /MyApp1                      Файл MyApp1.sln
     /Source	     Папка для всего исходного кода
       /ClassLibrary1         Файл ClassLibrary1.csproj
       /MyApp1Web           Файл Default.aspx
    /UnitTests                   Основная папка для модульных тестов
      /ClassLibrary1Tests   Проект и код для тестирования
      /MyApp1WebTests     Проект и код для тестирования
}

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

{
  /MyApp1
    /Source
      /ClassLibrary1 
      /ClassLibrary1Tests 
      /MyApp1Web 
      /MyApp1WebTests }

Ниже приводятся доводы "за" и "против" каждого варианта.

Папка UnitTests на одном уровне с папкой Source

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

Своя папка UnitTests в каждом проекте

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

Хранение документации

Папка Documentation предназначена для документации проекта. Решая, что хранить в системе управления исходным кодом и что хранить в библиотеке документов портала проекта Microsoft Windows SharePoint®, примите во внимание следующие соображения:

  • Используйте SharePoint для внутренних документов команды - сценариев использования, требований, плановой и проектной документации.
  • Используйте систему управления исходным кодом TFS для документации, поставляющейся заказчику, - руководств по установке и развертыванию, руководства пользователя, файлов справки.

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

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

Структура на стороне клиента

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

{
C:\DevProjects          Корневая папка для всех командных проектов
  \MyTeamProject1     Папка проекта TeamProject1
  \MyTeamProject2     Папка проекта TeamProject2
}

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

{
  \MyTeamProject1                     Папка проекта TeamProject1
    \Main                                    Содержит файлы .sln с проектами
      \Source
         \MyApp 1                         Файл   MyApp1.sln
           \Source
              \ClassLibrary1             Файл ClassLibrary1.csproj
               \MyApp1Web              Файл Default.aspx
            \UnitTests                      Проекты и исходный код для модульного тестирования 
               \ClassLibrary1Tests 
               \MyWinApp1Tests
         \SharedBinaries               Общие ресурсы, например, библиотеки
        \SharedSource                  Общий исходный код
    \Docs                                   Документация проекта
  \Tests                                     Общая папка для тестирования
      \FunctionalTests
      \PerformanceTests
     \SecurityTests
}

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

< Лекция 3 || Лекция 4: 12 || Лекция 5 >
Александр Будник
Александр Будник
Израиль, Иерусалим
Pavel Pelevin
Pavel Pelevin
Украина, Одесса