<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dev.net.ua/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang=""><title type="html">Дмитрий Лапшин</title><subtitle type="html" /><id>http://dev.net.ua/blogs/dmytrol/atom.aspx</id><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dev.net.ua/blogs/dmytrol/atom.aspx" /><generator uri="http://communityserver.org" version="2.1.60809.935">Community Server</generator><updated>2008-07-16T13:31:42Z</updated><entry><title>Поддержка недокументированных атрибутов в описании формы рабочего элемента</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2009/03/16/7892.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2009/03/16/7892.aspx</id><published>2009-03-16T13:14:03Z</published><updated>2009-03-16T13:14:03Z</updated><content type="html">&lt;p&gt;До октября 2008 года при работе с Process Template Editor существовало значительное неудобство – если в описании формы рабочего элемента имелись &lt;a href="http://msmvps.com/blogs/vstsblog/archive/2007/07/07/undocumented-attributes-for-controlling-the-work-item-form-layout.aspx"&gt;недокументированные атрибуты&lt;/a&gt;, например, MinimumSize, то при попытке редактировать форму выдавались сообщения об ошибке, а при сохранении описания рабочего элемента “непереваренные” атрибуты попросту выбрасывались.&lt;/p&gt; &lt;p&gt;В октябрьском релизе, похоже, добавили полноценную поддержку недокументированных атрибутов, что (при желании) полностью избавляет от необходимости ручной правки XML-файлов и работы с утилитами командной строки witimport/witexport.&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7892" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author></entry><entry><title>Если TFS Power Tools отказываются сохранять WITD на диск</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2009/02/25/7802.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2009/02/25/7802.aspx</id><published>2009-02-25T13:17:59Z</published><updated>2009-02-25T13:17:59Z</updated><content type="html">&lt;p&gt;У меня иногда бывает так, что TFS Power Tools после очередного редактирования вдруг отказывается сохранить описание типа элемента декомпозиции работ (во какой новый перевод я придумал для &amp;quot;work item&amp;quot; &lt;img src="http://dev.net.ua/emoticons/emotion-1.gif" alt="Smile" /&gt;). При этом выдается ошибка (вернее, это предупреждение, но сохранить измененный файл Visual Studio при этом не дает):&lt;/p&gt;  &lt;p&gt;Сannot find a schema that defines target namespace '&lt;a href="http://schemas.microsoft.com/dsltools/WITDesigner'"&gt;http://schemas.microsoft.com/dsltools/WITDesigner'&lt;/a&gt;, schema validation skipped&lt;/p&gt;  &lt;p&gt;Как оказалось, избавиться от этой ошибки можно только одним способом, а именно - удалив файлы с расширениями .wit и .wit.diagram, оставив только сам .xml файл с описанием типа элемента декомпозиции работ. Power Tools сами пересоздадут эти файлы при следующем открытии .xml файла, при этом, правда, вы потеряете текущее расположение графических обозначений состояний и переходов на вкладке Workflow.&lt;/p&gt;  &lt;p&gt;Пока что у меня нет точного понимания причин возникновения этой ошибки, предполагаю, что к ней приводит ручное обновление (или экспорт с сервера) .xml файла, при этом файлы .witd и .witd.diagram рассинхронизируются с самим описанием типа, и это &amp;quot;сбивает с толку&amp;quot; Power Tools.&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7802" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="Работа с work items" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_2004300431043E0442043004_+_4104_+work+items/default.aspx" /><category term="Полезные советы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_1F043E043B04350437043D044B043504_+_41043E043204350442044B04_/default.aspx" /><category term="TFS Tools" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/TFS+Tools/default.aspx" /></entry><entry><title>Поддержи украинское .NET сообщество - проголосуй за интересующую тебя тему!</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2009/02/12/7733.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2009/02/12/7733.aspx</id><published>2009-02-12T08:55:00Z</published><updated>2009-02-12T08:55:00Z</updated><content type="html">&lt;P&gt;Предпринимаются срочные меры, чтобы вывести украинское сообщество .NET разработчиков из летаргического сна, о котором &lt;A href="http://merle-amber.blogspot.com/2009/02/net.html"&gt;писал в своем блоге&lt;/A&gt; Саша Кондуфоров. Надо признать, в последнее время темы для семинаров выбирались из двух вариантов - либо приезжает кто-то из Microsoft с готовой темой, либо у кого-то из экспертов есть тема, по которой ему/ей было бы интересно выступить. И в том, и в том случае не факт, что тема вызовет интерес у большинства профессиональных разработчиков - и посещаемость той же UNETA в последнее время - тому свидетельство.&lt;/P&gt;
&lt;P&gt;Поскольку никакое сообщество не может существовать без общения и обратной связи, группа харьковских энтузиастов посовещалась и решила, во-первых,&amp;nbsp;предложить на ваш выбор ряд тем, по&amp;nbsp;которым уже есть люди, готовые выступить с докладом, а во-вторых - мы очень хотим услышать ваши пожелания и предложения. Может быть, есть что-то такое, что интересно большинству из вас, а мы об этом сейчас и не догадываемся.&lt;/P&gt;
&lt;P&gt;Поэтому - большая просьба ко всем голосовать за предложенные варианты или предлагать свои здесь:&lt;BR&gt;&lt;A href="http://dev.net.ua/forums/7732/ShowThread.aspx#7732"&gt;http://dev.net.ua/forums/7732/ShowThread.aspx#7732&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7733" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="события" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_41043E0431044B04420438044F04_/default.aspx" /><category term="анонсы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_30043D043E043D0441044B04_/default.aspx" /></entry><entry><title>О глобальных списках и связи рабочих элементов со сборками</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2009/01/28/7613.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2009/01/28/7613.aspx</id><published>2009-01-28T07:07:24Z</published><updated>2009-01-28T07:07:24Z</updated><content type="html">&lt;p&gt;Уверен, многие знакомы с полями рабочих элементов &amp;quot;Found In&amp;quot; и &amp;quot;Integrated In&amp;quot;, с помощью которых можно связать, например, дефект с той сборкой программного продукта, в которой он был найден, или сценарий использования с той сборкой, в которой он был реализован. Это ускоряет и разработку, и тестирование, так как Quality Assurance больше не надо тратить время на выяснение того, какую именно сборку нужно проверять, а разработчикам - на&amp;#160; попытки воспроизведения дефектов, которые тестировщик нашел в сборке 10-дневной давности,&amp;#160; и которые давным-давно исправлены &lt;img src="http://dev.net.ua/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;Особенность полей Found In и Integrated In - автоматическое заполнение списка доступных значений номерами всех когда-либо производившихся в рамках данного группового проекта сборок. Эта &amp;quot;уличная магия&amp;quot; работает на самом деле очень просто - для каждого группового проекта при завершении первой же сборки в Team Foundation Build создается глобальный список с названием &amp;quot;Builds - &amp;lt;Имя группового проекта&amp;gt;&amp;quot;. В дальнейшем список пополняется при завершении каждой последующей сборки. В описаниях самих же полей правило SUGGESTEDVALUES просто ссылается на вышеупомянутый список.&lt;/p&gt;  &lt;p&gt;Есть, правда, один нюанс. Если вы копируете описание типа рабочего элемента (Work Item Type Definition) из одного группового проекта в другой (или импортируете тип рабочего элемента из файла), обязательно проверьте набор правил для полей Found In и Integrated In. Скорее всего, вам нужно будет исправить или вовсе удалить (если в групповом проекте еще не производилось ни одной сборки) ссылку на глобальный список - в противном случае, Team Explorer будет вам &amp;quot;подсказывать&amp;quot; неправильные номера сборок.&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7613" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="Работа с work items" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_2004300431043E0442043004_+_4104_+work+items/default.aspx" /><category term="Полезные советы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_1F043E043B04350437043D044B043504_+_41043E043204350442044B04_/default.aspx" /><category term="TF Build" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/TF+Build/default.aspx" /></entry><entry><title>Политики регистрации изменений и права доступа к контролю версий</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/12/27/7410.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/12/27/7410.aspx</id><published>2008-12-26T22:14:55Z</published><updated>2008-12-26T22:14:55Z</updated><content type="html">&lt;p&gt;Есть у нас групповой проект, в котором хранится все, что касается разработанных для внутреннего использования дополнений к TFS. Поскольку над разными дополнениями работают разные группы людей, то права доступа в этом проекте разграничены для рабочих элементов - на уровне областей и итераций, а для контроля версий - на уровне отдельных папок.&lt;/p&gt;  &lt;p&gt;С разграничением доступа к рабочим элементам уже все налажено, а вот с правами на доступ к контролю версий обнаружились интересные (и, судя по всему, нигде не задокументированные) &amp;quot;грабли&amp;quot;. Мне понадобилось ограничить доступ определенной группе сотрудников только одной папкой. Так вот, оказалось, что выдачи всех необходимых прав на папку недостаточно, чтобы регистрировать в ней изменения. Team Explorer попросту отказывается это делать, мотивируя невозможностью получить с сервера политики регистрации изменений. Поиск по коду и сообщению об ошибке ничего не дал, поэтому я чисто интуитивно попробовал дать группе права на чтение корневой папки группового проекта. Удивительно, но - сработало! Берите, в случае чего, на вооружение!&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7410" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="контроль версий" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_3A043E043D04420440043E043B044C04_+_320435044004410438043904_/default.aspx" /><category term="Полезные советы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_1F043E043B04350437043D044B043504_+_41043E043204350442044B04_/default.aspx" /></entry><entry><title>Быстрое включение/выключение анализа покрытия кода тестами</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/12/25/7398.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/12/25/7398.aspx</id><published>2008-12-25T21:29:56Z</published><updated>2008-12-25T21:29:56Z</updated><content type="html">&lt;p&gt;Определение процентажа покрытия кода тестами - дело полезное, но далеко не всегда нужное при сборке решения на рабочей станции разработчика. Кроме того, для определения процентажа покрытия в сборки вносятся специальные изменения, а это тоже далеко не всегда желательно. Напрашивается необходимость в быстром включении/выключении этой функциональности, поскольку ставить/снимать галочки в окне &amp;quot;Select artifacts to instrument&amp;quot; - не выход, особенно когда решение сложное и содержит большое число проектов.&lt;/p&gt;  &lt;p&gt;Я для себя решил задачу созданием двух тестовых конфигураций, одной с выключенным анализом покрытия, другой - соответственно, с включенным. Создать вторую конфигурацию очень просто. Выбираем &lt;strong&gt;Test&lt;/strong&gt; | &lt;strong&gt;Edit Test Run Configurations&lt;/strong&gt;, затем в появившемся диалоговом окне свойств конфигурации жмем &lt;strong&gt;Save As...&lt;/strong&gt; и сохраняем ее под другим именем. Затем, переключение между конфигурациями можно быстро осуществить с помощью меню &lt;strong&gt;Test&lt;/strong&gt; | &lt;strong&gt;Select Active Test Run Configuration&lt;/strong&gt;.&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7398" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="Полезные советы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_1F043E043B04350437043D044B043504_+_41043E043204350442044B04_/default.aspx" /><category term="Visual Studio" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/Visual+Studio/default.aspx" /><category term="Юнит-тестирование" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_2E043D0438044204_-_4204350441044204380440043E04320430043D0438043504_/default.aspx" /></entry><entry><title>Подарок от Санта-Клауса: Новый образ виртуальной машины с VSTS 2008 SP1 Trial</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/12/25/7397.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/12/25/7397.aspx</id><published>2008-12-25T21:00:15Z</published><updated>2008-12-25T21:00:15Z</updated><content type="html">&lt;p&gt;До самого Рождества Microsoft не раскрывали планов по поводу публикации обновленных образов виртуальных машин с пробными версиями TFS 2008 и VSTS 2008. Единственным предлагаемым в форумах вариантом было скачивание специальной программы, которая одноразово продлевала срок годности старой виртуальной машины на месяц. Но, как известно, чудеса случаются именно на Рождество - и именно под Рождество стали доступны обновленные образы виртуальных машин со сроком годности до конца 2009 года:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.microsoft.com/DownLoads/details.aspx?FamilyID=72262ead-e49d-43d4-aa45-1da2a27d9a65&amp;amp;displaylang=en"&gt;Visual Studio&amp;#174; Team System 2008 Team Foundation Server SP1 VPC Image (Trial)&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.microsoft.com/DownLoads/details.aspx?familyid=C7A809D8-8C9F-439F-8147-948BC6957812&amp;amp;displaylang=en"&gt;Microsoft&amp;#174; Visual Studio&amp;#174; Team System 2008 Team Foundation Server SP1 and Team Suite SP1 VPC Image (Trial)&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7397" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="TFS 2008" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/TFS+2008/default.aspx" /><category term="анонсы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_30043D043E043D0441044B04_/default.aspx" /></entry><entry><title>Рабочие элементы: состояния и переходы между ними</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/11/12/7174.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/11/12/7174.aspx</id><published>2008-11-12T21:47:51Z</published><updated>2008-11-12T21:47:51Z</updated><content type="html">&lt;p&gt;Уже неоднократно наблюдал ситуацию, когда люди, переходящие на TFS с других программ управления требованиями или дефектами, испытывают трудности с непривычной для них, основанной на двух, а не одном, полях системой статусов - или, как они называются в TFS, состояний. Порой даже &amp;quot;родная&amp;quot; система полностью игнорируется, а вместо нее заводится привычное поле &amp;quot;Status&amp;quot; с привычной же кучей всевозможных значений &lt;img src="http://dev.net.ua/emoticons/emotion-1.gif" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;Такой подход может сгладить &amp;quot;кривую обучения&amp;quot; в краткосрочной перспективе, но в долгосрочной - имеет ряд побочных эффектов, особенно если в дальнейшем планируется задействовать не отдельные подсистемы TFS, а все возможности продукта в единой связке. В первую очередь, речь идет о подсистеме отчетности и запросах: многие стандартные отчеты и запросы к хранилищу рабочих элементов предполагают использование родной системы управления состояниями, и в противном случае просто не будут работать.&lt;/p&gt;  &lt;p&gt;С другой стороны, в родной системе состояний нет совершенно ничего &amp;quot;военного&amp;quot; - к ней попросту нужно привыкнуть. В основе лежит несколько простых и логичных принципов:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Весь жизненный цикл рабочего элемента представлен в виде &lt;a href="http://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D1%84_(%D0%BC%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0)#.D0.9E.D1.80.D0.B8.D0.B5.D0.BD.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.BD.D1.8B.D0.B9_.D0.B3.D1.80.D0.B0.D1.84"&gt;ориентированного графа&lt;/a&gt;. Состояния являются его вершинами, а переходы между ними - ребрами:      &lt;br /&gt;&lt;img src="http://i.msdn.microsoft.com/Bb668962.image001(en-us,MSDN.10).jpg" /&gt; &lt;/li&gt;    &lt;li&gt;Количество состояний рабочего элементов должно быть минимальным. В стандартных шаблонах их максимум четыре:&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Proposed - рабочий элемент предложен для рассмотрения, но еще не принят в работу - например, клиент предложил новую функциональную возможность, но команда не будет ее реализовывать в текущей итерации.&lt;/li&gt;      &lt;li&gt;Active - над рабочим элементом ведется работа - например, пишется код.&lt;/li&gt;      &lt;li&gt;Resolved - рабочий элемент готов к проверке или тестированию - например, разработчик написал код и юнит-тесты, и все юнит-тесты проходят успешно.&lt;/li&gt;      &lt;li&gt;Closed - никакие действия над рабочим элементом более не требуются, например, тестирование прошло успешно и функциональность вошла в очередной релиз.&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Минимум состояний компенсируется множеством переходов из одного состояния в другое. Каждый переход представляет собой конкретную причину, по которой рабочий элемент оказался в том или ином состоянии. Например, в состоянии Active находятся как принятые в работу в текущей итерации рабочие элементы, так и те, которые &amp;quot;завалили&amp;quot; проверку или тестирование.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Небольшое количество состояний позволяет легко отслеживать динамику &amp;quot;движения&amp;quot; работы в команде. Например, большое количество рабочих элементов в состоянии Proposed может говорить о том, что либо у заказчика бурная фантазия и он придумывает функциональные возможности быстрее, чем команда в состоянии их реализовывать, либо существует узкое место в процессе утверждения в работу (например, перегружен менеджер проекта или заказчик не отвечает на письма и звонки). А большая очередь из рабочих элементов в состоянии Resolved может означать, что команде не хватает инженеров по тестированию.&lt;/p&gt;  &lt;p&gt;Разумеется, цифра &amp;quot;четыре&amp;quot; - отнюдь не догма. Бывают случаи, когда большее количество состояний оправдано - например, чтобы отдельно отслеживать требования, которые были успешно проверены на тестовом окружении, но еще не попали в производственную эксплуатацию. С другой стороны, не стоит заводить состояния вида &amp;quot;Verified Fixed&amp;quot; или &amp;quot;Verification Failed&amp;quot; - такие значения, скорее, подходят для поля Reason.&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7174" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author></entry><entry><title>Измерение качества кода с помощью Visual Studio 2008</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/10/24/7050.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/10/24/7050.aspx</id><published>2008-10-24T09:43:44Z</published><updated>2008-10-24T09:43:44Z</updated><content type="html">&lt;p&gt;VS 2008 предоствляет 4 метрики, которые подробно описаны в блоге Code Analysis Team:   &lt;br /&gt;&lt;a href="http://blogs.msdn.com/fxcop/archive/2007/10/03/new-for-visual-studio-2008-code-metrics.aspx"&gt;http://blogs.msdn.com/fxcop/archive/2007/10/03/new-for-visual-studio-2008-code-metrics.aspx&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Взаимозависимость классов: чем она больше, тем больше вероятность регрессионных дефектов, сложнее писать юнит-тесты и делать рефакторинг; &lt;/li&gt;    &lt;li&gt;Глубина наследования: сложные иерархии классов трудны для понимания, осложняют изучение кода новым членам команды. Обратите внимание, что реализация интерфейсов в этой метрике не учитывается. &lt;/li&gt;    &lt;li&gt;Цикломатическая сложность: опять же, чем она больше, тем сложнее отлаживать и поддерживать код, сложнее тестировать, как следствие - повышается вероятность дефектов; &lt;/li&gt;    &lt;li&gt;Количество строк кода: куда же без них &lt;img alt=":-)" src="http://ctoblog.validio.com.ua/smilies/happy.gif" /&gt; На уровне классов позволяет выявлять &amp;quot;раздутые&amp;quot; (&amp;quot;три экрана кода&amp;quot;) методы, которые логично разбить на несколько более мелких. Цикломатическая сложность, кстати, при этом может быть небольшой, если много действий выполняются строго последовательно. &lt;/li&gt;    &lt;li&gt;Индекс простоты обслуживания: синтетическая метрика, учитывающая, в частности, количество строк кода, цикломатическую сложность и &lt;a href="http://en.wikipedia.org/wiki/Halstead_Complexity_Measures"&gt;объем Халстеда&lt;/a&gt;.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7050" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="Visual Studio" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/Visual+Studio/default.aspx" /><category term="Метрики" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_1C0435044204400438043A043804_/default.aspx" /></entry><entry><title>Запросы, подписки и переименование областей и итераций</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/10/17/7020.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/10/17/7020.aspx</id><published>2008-10-17T20:20:50Z</published><updated>2008-10-17T20:20:50Z</updated><content type="html">&lt;p&gt;В TFS можно переименовывать уже существующие области и итерации. Но при этом нужно учитывать, что если в ваших запросах присутствуют условия наподобие &amp;quot;Area Path under ...&amp;quot;, где в пути фигурирует название переименованной области или итерации, то такие запросы перестанут работать. Для того, чтобы восстановить работоспособность запросов, откройте их для редактирования и исправьте условия, включающие поля Area Path&amp;#160; или Iteration Path.&lt;/p&gt;  &lt;p&gt;Та же самая ситуация с подписками на события. После переименования области или итерации нужно перепроверить условия и, при необходимости, обновить их.&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7020" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="Работа с work items" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_2004300431043E0442043004_+_4104_+work+items/default.aspx" /><category term="Полезные советы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_1F043E043B04350437043D044B043504_+_41043E043204350442044B04_/default.aspx" /><category term="TFS Core Services" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/TFS+Core+Services/default.aspx" /></entry><entry><title>Связи решают все</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/10/16/7016.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/10/16/7016.aspx</id><published>2008-10-15T21:24:08Z</published><updated>2008-10-15T21:24:08Z</updated><content type="html">&lt;p&gt;Team Foundation Server не был бы столь мощным инструментом, объединяющим все роли в проектной группе, если данные составляющих его подсистем были бы изолированными &amp;quot;островками&amp;quot;. К счастью, это не так, TFS предоставляет средства для установления связей между различными артефактами. Об этих связях я и хочу рассказать подробнее. &lt;/p&gt;  &lt;p&gt;Рассмотрим поподробнее &amp;quot;анатомию&amp;quot; ссылки:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Может быть представлена в виде URI вида vstfs:///&amp;lt;tooltype&amp;gt;/&amp;lt;artifacttype&amp;gt;/&amp;lt;tool-specific id&amp;gt;, где &amp;quot;tooltype&amp;quot; - это идентификатор подсистемы (контроль версий, управление сборкой и т.п.), а artifacttype - идентификатор артефакта (например, &amp;quot;набор изменений&amp;quot;). Естественно, оба идентификатора записываются латиницей, например: vstfs:///WorkItemTracking/WorkItem/16723 или vstfs:///vsversionstore/file/b4e3216.&lt;/li&gt;    &lt;li&gt;Связывает потребителя артефакта с его поставщиком. Например, если рабочий элемент ссылается на набор изменений в системе контроля версий, то подсистема управления рабочими элементами&amp;#160; является потребителем, а подсистема контроля версий - поставщиком. Потребитель и поставщик могут ничего не знать друг о друге, что, благодаря подсистеме регистрации поставщиков, потребителей и типов ссылок, обеспечивает расширяемость (об этом немного подробнее ниже).&lt;/li&gt;    &lt;li&gt;Ссылки двунаправленны и имеют &amp;quot;прочтение&amp;quot; в каждую из сторон. В примере из второго пункта, если предположить, что тип рабочего элемента - &amp;quot;Дефект&amp;quot;, прочтение в одну из сторон, от рабочего элемента к набору изменений, может звучать как &amp;quot;Исправлен в&amp;quot;, а в обратную - &amp;quot;Исправляет&amp;quot;.&lt;/li&gt;    &lt;li&gt;Контракты поставщика и потребителя соответственно предусматривают возможность прямых (&amp;quot;дайте мне артефакты с такими-то идентификаторам&amp;quot;) и обратных (&amp;quot;ссылаетесь ли вы на артефакты с такими-то идентификаторами?&amp;quot;) запросов&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;С точки зрения TFS SDK ссылки делятся на три класса:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.externallink(VS.80).aspx"&gt;Внешние ссылки&lt;/a&gt;. Обеспечивают связь рабочих элементов с другими артефактами, такими, как наборы изменений или результаты тестов.&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.workitemtracking.client.relatedlink(VS.80).aspx"&gt;RelatedLink&lt;/a&gt;: Ссылки на связанные рабочие элементы. С помощью этого класса ссылок можно обеспечить прослеживаемость, например, какие сценарии тестирования покрывают то или иное требование. Фактически, это подкласс внешних ссылок, выделенный для удобства в отдельную категорию как наиболее часто используемый.&lt;/li&gt;    &lt;li&gt;Гиперссылки. Здесь все очевидно - обойдемся без комментариев.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Благодаря расширяемой архитектуре TFS можно создавать собственные типы ссылок и, в случае, если поставщиком или потребителем является подсистема управления рабочими элементами, в нее можно встроить собственный пользовательский интерфейс для выбора артефактов для связи с рабочим элементом. Подробно обо всем этом &lt;a href="http://blogs.msdn.com/narend/archive/2006/10/13/how-to-extend-linking-and-workitem-ui-with-custom-link-types.aspx"&gt;рассказывается&lt;/a&gt; в &lt;a href="http://blogs.msdn.com/narend/default.aspx"&gt;блоге Naren Datha&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;И, напоследок - об изменениях в linking API в Rosario: &lt;a title="http://blogs.msdn.com/dgorti/archive/2007/09/26/querying-on-workitem-links-through-the-api.aspx" href="http://blogs.msdn.com/dgorti/archive/2007/09/26/querying-on-workitem-links-through-the-api.aspx"&gt;http://blogs.msdn.com/dgorti/archive/2007/09/26/querying-on-workitem-links-through-the-api.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=7016" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="VSTS Rosario" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/VSTS+Rosario/default.aspx" /><category term="TFS Core Services" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/TFS+Core+Services/default.aspx" /></entry><entry><title>VSTE for Developers и VSTE for Database Professionals - краще разом!</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/10/03/6966.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/10/03/6966.aspx</id><published>2008-10-03T20:13:02Z</published><updated>2008-10-03T20:13:02Z</updated><content type="html">&lt;p&gt;Существование отдельной редакции Visual Studio для профессионалов по базам данных (VSTE for Database Professionals, также известной среди блоггеров Microsoft как &amp;quot;Data Dude&amp;quot;), сильно омрачало жизнь разработчикам Windows и Web приложений. Дело в том, что в реальности редко когда всеми задачами, связанными с базами данных, занимается отдельный человек. Как правило, на &amp;quot;долю&amp;quot; администратора баз данных (DBA) достается оптимизация запросов и структуры базы, а также поддержка и обслуживание БД, находящейся в производственной эксплуатации. Рутинными же задачами по написанию запросов, хранимых процедур и т.п. занимаются разработчики. Ну а поскольку VSTE for Database Professionals - отдельная редакция Visual Studio, которую можно приобрести только в составе MSDN-подписки, то большинство организаций либо не приобретали эту редакцию вообще (поскольку DBA вполне комфортно себя чувствовали и с привычным инструментарием), либо, в лучшем случае, приобретали в очень ограниченных объемах.&lt;/p&gt;  &lt;p&gt;Однако, я бы не писал столь подробной предыстории, если бы не замечательные новости - с 1 октября редакции Visual Studio для разработчиков и профессионалов по БД &lt;a href="http://msdn.microsoft.com/en-us/vsts2008/products/cc990295.aspx"&gt;становятся одним продуктом&lt;/a&gt;! Подписчики, приобревшие VSTE for Developers + MSDN Premium, равно как и партнеры, которым по условиям партнерской программы полагаются лицензии на эту редакцию, теперь автоматически получают лицензию и на VSTE for Database Professionals. И хотя физически единым продуктом обе редакции станут лишь в следующей версии Visual Studio 2010, уже сейчас подписчики получат доступ к скачиванию инсталляционного пакета. Причем, изменения касаются не только Visual Studio 2008, но и Visual Studio 2005.&lt;/p&gt;  &lt;p&gt;Остается добавить только одно: &lt;strong&gt;МО-ЛОД-ЦЫ&lt;/strong&gt;!&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=6966" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="Visual Studio" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/Visual+Studio/default.aspx" /><category term="анонсы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_30043D043E043D0441044B04_/default.aspx" /></entry><entry><title>Об одной особенности прав доступа уровня области или итерации</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/09/20/6905.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/09/20/6905.aspx</id><published>2008-09-20T13:51:40Z</published><updated>2008-09-20T13:51:40Z</updated><content type="html">&lt;p&gt;В TFS существует возможность разграничения доступа на уровне отдельной области (area) или итерации - это удобно, когда над большим проектом работает несколько, возможно даже распределенных, команд. Тем не менее, полезно знать об одной неочевидной особенности TFS, когда вы создаете новую область или итерацию. Дело в том, что по умолчанию стандартные группы TFS, такие как Readers или Contributors не получают никаких прав доступа к вновь созданной области или итерации, соответственна, она будет недоступна ни вам, ни другим пользователям при редактировании рабочих элементов. Причем, что интересно, в &lt;a href="http://msdn.microsoft.com/en-us/library/ms253077.aspx"&gt;документации&lt;/a&gt; (раздел &lt;strong&gt;Area-Level Groups and Permissions&lt;/strong&gt;) написано ровным счетом обратное, но на практике, возможно, только при каких-то определенных условиях, происходит именно то, что описано выше, порождая &lt;a href="http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=3879717&amp;amp;SiteID=1"&gt;вопросы в форумах&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Поэтому, сразу же после создания, убедитесь, что права доступа настроены следующим образом:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Группа Contributors и Build Services&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;View this node&lt;/li&gt;    &lt;li&gt;View work items in this node (только для областей)&lt;/li&gt;    &lt;li&gt;Edit work items in this node (только для областей)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Группа Project Administrators&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;View this node&lt;/li&gt;    &lt;li&gt;View work items in this node (только для областей)&lt;/li&gt;    &lt;li&gt;Edit work items in this node (только для областей)&lt;/li&gt;    &lt;li&gt;Create and order child nodes&lt;/li&gt;    &lt;li&gt;Delete this node&lt;/li&gt;    &lt;li&gt;Edit this node&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;Группа Readers&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;View this node&lt;/li&gt;    &lt;li&gt;View work items in this node (только для областей)&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Подробности в документации:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms253077.aspx" href="http://msdn.microsoft.com/en-us/library/ms253077.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms253077.aspx&lt;/a&gt;    &lt;br /&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms252587.aspx" href="http://msdn.microsoft.com/en-us/library/ms252587.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms252587.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=6905" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author></entry><entry><title>Осторожно: порядок выполнения модульных (unit) тестов</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/08/14/6661.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/08/14/6661.aspx</id><published>2008-08-14T14:51:23Z</published><updated>2008-08-14T14:51:23Z</updated><content type="html">&lt;p&gt;Насколько я помню, в классике модульного тестирования принято, что порядок выполнения модульных тестов не определен - то есть, модульные тесты не могут зависеть от результатов выполнения других модульных тестов. Но разработчики mstest пошли еще дальше: среда исполнения многопоточна и запускает на выполнение несколько модульных тестов &lt;strong&gt;одновременно&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;Это означает, что нужно быть очень осторожным, если в коде ваших тестов используются статические объекты, такие как &amp;quot;Одиночки&amp;quot; (Singleton) или фабрики классов, поведение которых зависит от внешних условий, задаваемых индивидуально в каждом тесте. Например, это может быть фабрика классов внутри &lt;a href="http://xunitpatterns.com/SUT.html"&gt;тестируемой системы&lt;/a&gt;, которая создает реальный объект или &amp;quot;дублера для тестирования&amp;quot; (&lt;a href="http://xunitpatterns.com/Test%20Double.html"&gt;Test Double&lt;/a&gt;, он же в просторечии mock object &lt;img src="http://dev.net.ua/emoticons/emotion-1.gif" alt="Smile" /&gt;) в зависимости от заданного модульным тестом режима.&amp;#160; Проще всего даже будет отказаться от подобных сценариев и решать задачу внедрения зависимостей другими способами, например через &lt;a href="http://xunitpatterns.com/Dependency%20Injection.html#Constructor%20Injection"&gt;конструктор&lt;/a&gt; или &lt;a href="http://xunitpatterns.com/Dependency%20Injection.html#Setter%20Injection"&gt;специальное свойство&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;А родробнее про исследование порядка выполнения модульных тестов можно прочитать у &lt;a href="http://blogs.msdn.com/nnaderi/default.aspx"&gt;Naysawn Naderi&lt;/a&gt;: &lt;a href="http://blogs.msdn.com/nnaderi/archive/2007/02/17/explaining-execution-order.aspx"&gt;That Pesky MSTest Execution Ordering..&lt;/a&gt;&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=6661" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author></entry><entry><title>Check out и редактирование документов на портале проекта из Team Explorer</title><link rel="alternate" type="text/html" href="http://dev.net.ua/blogs/dmytrol/archive/2008/07/16/6490.aspx" /><id>http://dev.net.ua/blogs/dmytrol/archive/2008/07/16/6490.aspx</id><published>2008-07-16T10:31:42Z</published><updated>2008-07-16T10:31:42Z</updated><content type="html">&lt;p&gt;По какому-то странному стечению обстоятельств разработчики Team Explorer упустили возможность изъятия для редактирования (check out) хранящихся на портале группового проекта документов непосредственно из узла Documents. В результате, открыть документ для редактирования можно, но при сохранении есть вероятность переписать текущую версию без сохранения истории изменений.&lt;/p&gt;  &lt;p&gt;Частично проблему в TFS 2008 и Windows SharePoint Services 3.0 можно решить таким образом. В SharePoint заходим в настройки контроля версий для нужной библиотеки документов (&lt;strong&gt;Settings&lt;/strong&gt; | &lt;strong&gt;Document Library Settings &lt;/strong&gt;| &lt;strong&gt;Versioning Settings&lt;/strong&gt;) и для опции &lt;strong&gt;Require documents to be checked out before they can be edited?&lt;/strong&gt; ставим &lt;strong&gt;Yes&lt;/strong&gt;. Теперь, даже если документ был открыт для редактирования, переписать текущую версию без явного выполнения операции Check out не получится. С другой стороны, если вы используете Office 2007, то изъять документ для редактирования можно непосредственно из Word или Excel сразу же после открытия.&lt;/p&gt;  &lt;p&gt;Более удобное решение потребовало бы написания адд-ина к Team Explorer, что уже само по себе - задача нетривиальная, но еще сложнее, мне кажется, было бы получить URL документа, на котором нажали правой кнопкой мыши. Быстрый поиск в Google, возможно, именно по причине сложности реализации, такого решения не нашел.&lt;/p&gt;&lt;img src="http://dev.net.ua/aggbug.aspx?PostID=6490" width="1" height="1"&gt;</content><author><name>DmytroL</name><uri>http://dev.net.ua/members/DmytroL.aspx</uri></author><category term="Полезные советы" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/_1F043E043B04350437043D044B043504_+_41043E043204350442044B04_/default.aspx" /><category term="SharePoint" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/SharePoint/default.aspx" /><category term="TFS 2008" scheme="http://dev.net.ua/blogs/dmytrol/archive/tags/TFS+2008/default.aspx" /></entry></feed>