<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ИТ в действии! &#187; Разработка ПО</title>
	<atom:link href="https://xn----8sbwjflce2afgci1k.xn--p1ai/it/?cat=14&#038;feed=rss2" rel="self" type="application/rss+xml" />
	<link>https://xn----8sbwjflce2afgci1k.xn--p1ai/it</link>
	<description>коллекция ИТ-наработок: подходы, методики, практики, идеи, стратегии и др....</description>
	<lastBuildDate>Mon, 16 Oct 2017 15:50:19 +0000</lastBuildDate>
	<language>ru-RU</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.0.38</generator>
	<item>
		<title>Разработка технического задания (ТЗ) на программный продукт с точки зрения заказчика</title>
		<link>https://xn----8sbwjflce2afgci1k.xn--p1ai/it/?p=530</link>
		<comments>https://xn----8sbwjflce2afgci1k.xn--p1ai/it/?p=530#comments</comments>
		<pubDate>Sun, 12 Feb 2012 07:27:09 +0000</pubDate>
		<dc:creator><![CDATA[Холодков Антон]]></dc:creator>
				<category><![CDATA[Разработка ПО]]></category>
		<category><![CDATA[uml2.ru]]></category>
		<category><![CDATA[Практика]]></category>

		<guid isPermaLink="false">http://kholodkov.ru/it/?p=530</guid>
		<description><![CDATA[За время своей работы мне удалось взглянуть на процесс разработки технических заданий на программные продукты с нескольких точек зрения. С точки зрения аналитика – непосредственного исполнителя работ, с точки зрения руководителя проекта со стороны исполнителя, организующего процесс создания ТЗ, с точки зрения руководителя группы разработчиков, реализующих эти самые ТЗ, а также с точки зрения заказчика [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><img style="margin-top:5px; margin-bottom:10px; margin-left:10px; margin-right:0px; padding:0px; float: right;" src="http://kholodkov.ru/it/wp-content/uploads/2011/02/021211_0827_1.png" alt=""/>За время своей работы мне удалось взглянуть на процесс разработки технических заданий на программные продукты с нескольких точек зрения. С точки зрения аналитика – непосредственного исполнителя работ, с точки зрения руководителя проекта со стороны исполнителя, организующего процесс создания ТЗ, с точки зрения руководителя группы разработчиков, реализующих эти самые ТЗ, а также с точки зрения заказчика системы, впоследствии принимающего решение по разработанному ранее ТЗ.
</p>
<p>Надо сказать, что у каждой из этих заинтересованных сторон свои требования и свое видение того, каким должно быть «хорошо написанное ТЗ». Например, у заказчика и исполнителя могут быть совершенно противоположные мнения на этот счет. Исполнитель может быть заинтересован в максимально подробном ТЗ для того, чтобы максимально формализовать свои обязательства по функционалу создаваемого решения. При этом заказчик, который точно не определился с параметрами будущей системы или у которого «ветер в голове», может требовать более общих формулировок, описания системы крупными мазками для того, чтобы потом попытаться включить в рамки оговоренного бюджета новые требования. Конечно же, при другом «менталитете» заказчика и исполнителя все может быть с точностью до наоборот. Сейчас мне хотелось бы остановиться именно на разработке ТЗ с точки зрения его заказчика, рассмотрев возможные ситуации, цели и тактики поведения.
</p>
<p>Для начала определимся с тем, какие факторы влияют на разработку ТЗ. Прежде всего, это степень понимания заказчиком требований. Как уже говорилось выше, в момент начала работы над ТЗ вы можете слабо себе представлять, какую именно систему вы хотите создать. В качестве исходных данных у вас могут быть разрозненные, часто противоречащие друг другу запросы от подразделений, заинтересованных в создании новой системы. Хорошо, если вашей ИТ-службе удалось структурировать их, разрешить противоречия и, тем самым, подготовиться к общению с подрядчиком. Если же нет, то лучший вариант &#8212; это сначала разработать очень общее ТЗ, крупными мазками описывающее видение системы, перечислить необходимые модули (подсистемы), не углубляясь в подробности их функционирования, и далее совместно с исполнителем работать над детализацией требований к ним. Последующие версии ТЗ можно оформлять в виде дополнений к первоначальному ТЗ или в виде т.н. «частных технических заданий» (ЧТЗ) на модули решения. Это даст вам время лучше понять что же вы хотите получить в итоге, мобилизовать на работу над проектом подразделения компании, собрать необходимую информацию, освоить основные понятия, если тематика создаваемого решения для вас нова. Также исполнитель сможет лучше познакомиться с деятельностью вашей компании.
</p>
<p><span id="more-530"></span></p>
<p>Немаловажным моментом является вероятность дрейфа требований. Компании меняются, подстраиваясь под внешние вызовы, причем, часто это происходит достаточно быстро. То, что разработано сегодня может отслужить свое и стать совершенно ненужным завтра в его первоначальном виде. Во избежании ненужных проблем в будущем это сразу надо проговорить с исполнителем и настраиваться на долгосрочное сотрудничество. Грамотный исполнитель в этих условиях может выбрать т.н. спиральную модель разработки ПО, в рамках которой ТЗ, фактически, разрабатывается на каждом новом витке спирали и описывает те изменения, которые должны произойти в следующей версии программного продукта. От написания громоздкого первоначального ТЗ в этом случае можно отказаться, ограничившись ТЗ на первую версию (итерацию).
</p>
<p>Ожидаемая длительность проекта, фактически, является одним из факторов дрейфа требований. За долгий срок даже в достаточно неповоротливой компании может многое измениться, например, появиться новое руководство с новым видением. Если же, напротив, проект небольшой и быстрый, то оптимальный вариант &#8212; разработать, согласовать и реализовать одно небольшое и достаточно детальное ТЗ.
</p>
<p>Значительное число участников проекта, создающих отдельные компоненты решения, требует большей детальности технических заданий, разрабатываемых ими, а также учета еще на этапе ТЗ спецификаций и особенностей реализации соседних модулей. Это поможет в дальнейшем минимизировать риски несостыковки модулей и, соответственно, избежать ненужных психологических и материальных затрат на переделку.
</p>
<p>Сложность задачи также оказывает влияние на подход к написанию ТЗ. Увы, задача может быть слишком сложной не только для заказчика, но и для исполнителя, который, казалось бы, имеет опыт в создании решений данного класса. Сложность обычно заключается в том, что создаваемое решение не является типовым и никто из участников проекта не может заранее предсказать результат его внедрения и использования в бизнесе. В этом случае очень важно грамотно разбить проект на этапы (шаги), подразумевая то, что каждый следующий шаг будет корректироваться по результатам, достигнутым на предыдущих. Соответственно и техническое задание будет разрабатываться в начале каждого этапа, опираясь на опыт предыдущего.
</p>
<p>Компании работают в реальной среде и часто им приходится иметь дело с новыми партнерами, с которыми ранее они не работали. Это же относится и к разработчикам ИТ-решений. Конечно, хорошо иметь исполнителя, который отлично знает все детали вашего бизнеса, понимает вас с полуслова и в котором вы уверены на все 100% (в этом случае от разработки ТЗ, вообще, можно отказаться), но в реальности это может оказаться совершенно неизвестная вам компания. В таком случае, конечно же, целесообразно начинать сотрудничество с небольших, по-возможности, проектов и с четких и детальных формулировок требований, указанных в ТЗ.
</p>
<p>Степень детальности ТЗ и разнесенность во времени его разработки, конечно же, не являются единственными моментами, важными для заказчика. Перед началом разработки ТЗ очень рекомендую определиться с его структурой, фактически, составить страницы с его содержанием, перечнем пунктов и подпунктов до начала работ по ТЗ, а не в процессе или после. При этом и вы и исполнитель договоритесь о том какие вопросы должны быть рассмотрены на данном этапе. Вы будете хорошо понимать, что получите в итоге, а исполнитель будет понимать, что вы от него ждете. Не смотря на кажущуюся простоту, это делается не всегда, даже для крупных и сложных проектов. В итоге ТЗ может получиться совершенно непотребным для дальнейшей работы.
</p>
<p>Как известно, существует множество методологий разработки программного обеспечения, отличающихся в числе прочего разной степенью формальности проектной документации. Тем не менее, ТЗ в явном или неявном виде присутствует в любой из них. При этом шаблоны этого документа могут существенно различаться для различных компаний и процессов разработки ПО. Будущий разработчик вашей системы может навязывать вам принятые у него шаблоны ТЗ, но в данном случае важно понимать, что, во-первых, ТЗ является важнейшим инструментом не только для исполнителя, но и для заказчика, который также имеет полное право определять его структуру. И, во-вторых, здравый смысл и основное назначение ТЗ, состоящее в формировании общего видения программного продукта заказчиком и исполнителем, не отменяет ни одна из методологий разработки.
</p>
<p>В настоящее время в РФ действует ГОСТ 34.602-89 «Техническое задание на создание автоматизируемой системы», который, не смотря на 89-й год своего создания, неплохо отражает общую структуру ТЗ. Тем не менее, для многих случаев, он является недостаточно детальным и хорошо описывающим специфику разработки современных программных продуктов.
</p>
<p>По своему опыту могу порекомендовать обратить внимание исполнителя на необходимость рассмотрения в ТЗ в числе прочих следующих вопросов:
</p>
<ul>
<li>Категории (роли) пользователей, работающих с системой &#8212; перечислить роли и кратко описать каким должностям из каких подразделений они соответствуют.
</li>
<li>Функционал системы &#8212; составить иерархическую структуру, в которой на верхнем уровне перечислены крупные модули (подсистемы), далее детализируемые до более мелких функциональных блоков и даже отдельных функций.
</li>
<li>Модель использования системы &#8212; сопоставить категории пользователей системы и используемые ими функциональные блоки, обозначенные выше.
</li>
<li>Сценарии использования системы при выполнении основных бизнес-процессов &#8212; наложить видение решения на реальные процессы, описать на каких этапах и каким образом оно будет использоваться. Не пожалейте времени на то, чтобы совместно с исполнителем наглядно схематически разрисовать сценарии хотя бы по основным бизнес-процессам и согласовать их с заинтересованными лицами.
</li>
<li>Прототипы пользовательского интерфейса &#8212; схематически изобразить, например, при помощи Microsoft Visio как будут выглядеть основные формы вашего будущего ПО.
</li>
<li>Логическая модель данных &#8212; изобразить основные сущности предметной области и взаимосвязи между ними. Это позволит вам и исполнителю разговаривать на одном языке с использованием общей терминологии.
</li>
<li>Источники данных и взаимодействие с другими системами &#8212; описать откуда будут загружаться первоначальные данные при внедрении системы и из каких внешних источников они будут поступать впоследствии.
</li>
</ul>
<p>К рассмотрению этих вопросов в ТЗ стоит подходить «без фанатизма» с учетом возможной неопределенности требований, описанной выше. Детальную их проработку можно оставить на более поздние этапы создания системы, но если вы хотя бы в общих чертах остановитесь на них при разработке ТЗ, то заставите исполнителя и себя лучше подумать над решением, которое пока еще существует только на бумаге и переделка которого пока еще не сопряжена с глобальными финансовыми и временными затратами.
</p>
<p>В заключении хотелось бы отметить, что по моему опыту самое лучшее ТЗ &#8212; это ТЗ написанное самим заказчиком или при самом активном участии заказчика, т.к. никто лучше сотрудников вашей компании не знает ваших потребностей, деталей работы и далеко не всегда это удается выяснить на интервью. Конечно, для этого необходимо иметь в штате достаточно квалифицированных ИТ-специалистов или воспользоваться услугами ИТ-консультанта. Полученное ТЗ можно использовать в составе тендерной документации для того, чтобы дать большому количеству потенциальных подрядчиков четкое понимание требуемого результата и получить от них предложения.
</p>
<p>Еще одно преимущество ТЗ разработанного собственными силами в том, что оно будет отражать исключительно ваши потребности, а не ограничения используемых исполнителем технологических платформ и имеющихся у него наработок для повторного использования. Конечно, исполнителю может потребоваться провести дополнительное обследование и разработать собственную проектную документацию, но все эти документы должны будут соответствовать требованиям в разработанном вами ТЗ. Если же какие-то из ваших требований окажутся нереализуемыми для конкретного исполнителя, то вы непременно об этом узнаете и сможете принять соответствующие решения.
</p>
<p>P.S. С радостью возьмусь за разработку ТЗ на программный продукт в удобном для Вас <a href="http://www.kholodkov.ru/prices.html">варианте сотрудничества</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://xn----8sbwjflce2afgci1k.xn--p1ai/it/?feed=rss2&#038;p=530</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Разработка ПО: пример бизнес-процесса из практики</title>
		<link>https://xn----8sbwjflce2afgci1k.xn--p1ai/it/?p=130</link>
		<comments>https://xn----8sbwjflce2afgci1k.xn--p1ai/it/?p=130#comments</comments>
		<pubDate>Mon, 02 Mar 2009 14:26:58 +0000</pubDate>
		<dc:creator><![CDATA[Холодков Антон]]></dc:creator>
				<category><![CDATA[Бизнес-процессы]]></category>
		<category><![CDATA[Разработка ПО]]></category>
		<category><![CDATA[Практика]]></category>

		<guid isPermaLink="false">http://kholodkov.ru/it/?p=130</guid>
		<description><![CDATA[В индустрии разработки программного обеспечения (ПО) существуют много различных методологий разработки, которые представляют из себя достаточно концептуальные видения того, как следует реализовывать проекты по созданию ПО. В качестве примеров таких методологий можно привести: Rational Unified Process (RUP), Microsoft Solution Framework (MSF), Extreme Programming (XP), Agile, Capability Maturity Model Integration (CMMI) и многие другие. Разделяя важность [&#8230;]]]></description>
				<content:encoded><![CDATA[<p style="text-align: justify;"><img style="margin-top:5px; margin-bottom:10px; margin-left:10px; margin-right:0px; padding:0px; float: right;" src="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_first.jpg" alt="разработка ПО" />В индустрии разработки программного обеспечения (ПО) существуют много различных <em>методологий</em> разработки, которые представляют из себя достаточно концептуальные видения того, как следует реализовывать проекты по созданию ПО. В качестве примеров таких методологий можно привести: Rational Unified Process (RUP), Microsoft Solution Framework (MSF), Extreme Programming (XP), Agile, Capability Maturity Model Integration (CMMI) и многие другие.</p>
<p style="text-align: justify;">Разделяя важность методологии как основы для реальных бизнес-процессов, следует отметить разницу в понятиях <em>методология</em> и <em>бизнес-процесс</em>. Бизнес-процесс представляет из себя реализацию методологии, ее отдельных элементов или элементов нескольких методологий в конкретной организации при выполнении конкретных проектов и создании конкретных продуктов. Поэтому, создание бизнес-процесса разработки ПО на основе одной из существующих методологий является первой и важнейшей задачей компании, желающей заняться в том или ином виде созданием софта (для внешних заказчиков или своих внутренних нужд).</p>
<p style="text-align: justify;">Как показывает опыт автора, вполне возможно создать небольшую группу разработки и начать делать софт и без четкого описания бизнес-процесса. Однако, когда число участников такой &#171;неформальной&#187; команды становится больше пяти человек, то потери от отсутствия четкого регламента становятся несопоставимо большими по сравнению с затратами на регламентацию бизнес-процесса и специализированное ПО для его автоматизации. Потери в данном случае могут быть как прямыми (например, бесконечные переделки одной и той же функциональности по причине несоответствия требованиям заказчика), так и косвенными (например, ухудшение психологической атмосферы в коллективе, связанное с непониманием зоны своей ответственности каждым участником команды).</p>
<p style="text-align: justify;">В данной статье приводится пример бизнес-процесса разработки ПО, созданный автором на основе элементов нескольких методологий (наибольшее количество элементов взято из MSF) и собственного многолетнего опыта разработки и управления разработкой ПО. Данный бизнес-процесс ориентирован на ведение крупных проектов по разработке ПО на достаточно &#171;зрелой&#187; стадии, когда продукт уже может эксплуатироваться заказчиками и когда речь уже идет скорее о развитии и доработках функционала, а также устранении &#171;багов&#187;, нежели о разработке &#171;с нуля&#187; небольших программных продуктов.</p>
<p style="text-align: justify;"><span id="more-130"></span></p>
<h3>Содержание</h3>
<ul>
<li>
<div style="text-align: justify;"><a href="#raz-01">Ролевая модель</a></div>
</li>
<li>
<div style="text-align: justify;"><a href="#raz-02">Схема бизнес-процесса</a></div>
</li>
<li>
<div style="text-align: justify;"><a href="#raz-03">Участие ролей в операциях бизнес-процесса (выравнивание профилей загрузки ролей на всем протяжении проекта)</a></div>
</li>
<li>
<div style="text-align: justify;"><a href="#raz-04">Информационная модель бизнес-процесса</a></div>
</li>
<li>
<div style="text-align: justify;"><a href="#raz-05">Средства автоматизации бизнес-процесса</a></div>
</li>
</ul>
<h3 id="#raz-01">Ролевая модель</h3>
<div align="center">
<table border="1" cellspacing="0" cellpadding="10" width="700">
<tr>
<td width="100" valign="middle">
<b>Наименование роли</b>
</td>
<td width="600" valign="middle">
<b>Зона ответственности</b>
</td>
</tr>
<tr>
<td valign="top">
Руководитель проекта
</td>
<td valign="top">
•	Формирование планов<br />
•	Контроль выполнения планов<br />
•	Организационная работа (в том числе и с Заказчиком)<br />
•	Концептуальная архитектура решения<br />
•	Часть аналитической работы
</td>
</tr>
<tr>
<td valign="top">
Руководитель группы
</td>
<td valign="top">
•	Оценка длительности и трудоемкости задач в процессе планирования<br />
•	Контроль выполнения планов группой<br />
•	Распределение работ внутри группы<br />
•	Концептуальная архитектура решения<br />
•	Часть аналитической работы<br />
•	Организация сбора требований заказчика<br />
•	Соответствие деятельности группы бизнес-процессу разработки<br />
•	Работа группы с заказчиком
</td>
</tr>
<tr>
<td valign="top">
Аналитик
</td>
<td valign="top">
•	Сбор требований заказчика<br />
•	Разработка ТП на функциональность<br />
•	Разработка планов тестирования<br />
•	Концептуальное тестирование функциональности<br />
•	Разработка пользовательской документации
</td>
</tr>
<tr>
<td valign="top">
Архитектор
</td>
<td valign="top">
•	Архитектура решения, и соответствие ее требованиям к решению<br />
•	Разработка РП на функциональность (определяет принципиальные моменты, в дальнейшем их детализирует в рамках РП Разработчик)<br />
•	Контроль качества кода, и соответствие его проектным решениям по архитектуре<br />
•	Репозиторий информации по архитектуре решения<br />
•	Участвует в формировании планов и оценке сложности и длительности задач<br />
•	Участвует в комплексном тестировании
</td>
</tr>
<tr>
<td valign="top">
Разработчик
</td>
<td valign="top">
•	Разработка РП (при участии Архитектора в процессе выработки принципиальных решений)<br />
•	Разработка функциональности<br />
•	Качество кода<br />
•	Исправление ошибок в коде<br />
•	Проведение первичного тестирования кода<br />
•	Участвует в комплексном тестировании кода
</td>
</tr>
<tr>
<td valign="top">
Тестер
</td>
<td valign="top">
•	Тестирование функциональности<br />
•	Написание Unit тестов<br />
•	Участвует в разработке планов тестирования
</td>
</tr>
<tr>
<td valign="top">
Билд-инженер
</td>
<td valign="top">
•	Сборка версии<br />
•	Выпуск версии (после тестирования)<br />
•	Подготовка сопроводительных документов к версии
</td>
</tr>
</table>
</div>
<p style="text-align: justify;">
<p style="text-align: justify;">Один специалист может выполнять несколько ролей, но с учетом определенных ограничений. Допускаются следующие сочетания ролей одним человеком.</p>
<p style="text-align: justify;">
<div align="center">
<table border="1" cellspacing="0" cellpadding="10" width="700">
<tr>
<td width="261" valign="middle">
</td>
<td width="77" valign="middle">
<b>Рук-ль проекта</b>
</td>
<td width="77" valign="middle">
<b>Рук-ль группы</b>
</td>
<td width="77" valign="middle">
<b>Аналитик</b>
</td>
<td width="77" valign="middle">
<b>Архи- тектор</b>
</td>
<td width="77" valign="middle">
<b>Разра- ботчик</b>
</td>
<td width="77" valign="middle">
<b>Тестер</b>
</td>
<td width="77" valign="middle">
<b>Билд- инженер</b>
</td>
</tr>
<tr>
<td valign="middle">
<b>Руководитель проекта</b>
</td>
<td valign="middle" bgcolor="#CCCCCC">
<b></b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
</tr>
<tr>
<td valign="middle">
<b>Руководитель группы</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" bgcolor="#CCCCCC">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
</tr>
<tr>
<td valign="middle">
<b>Аналитик</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" bgcolor="#CCCCCC">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
</tr>
<tr>
<td valign="middle">
<b>Архитектор</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" bgcolor="#CCCCCC">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
</tr>
<tr>
<td valign="middle">
<b>Разработчик</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" bgcolor="#CCCCCC">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
</tr>
<tr>
<td valign="middle">
<b>Тестер</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" bgcolor="#CCCCCC">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
</tr>
<tr>
<td valign="middle">
<b>Билд-инженер</b>
</td>
<td valign="middle" align="center">
<b></b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" align="center">
<b>+</b>
</td>
<td valign="middle" bgcolor="#CCCCCC">
<b></b>
</td>
</tr>
</table>
</div>
<h3 id="#raz-02">Схема бизнес-процесса</h3>
<p style="text-align: justify;">Основная схема бизнес-процесса приведена ниже. В ней принимают участие члены проектной команды согласно ролевой модели.</p>
<p style="text-align: justify;">Бизнес-процесс включает в себя пять групп (контуров) работ:
</p>
<ul>
<li>
<div style="text-align: justify;">Контур сбора требований </div>
</li>
<li>
<div style="text-align: justify;">Контур среднесрочного планирования </div>
</li>
<li>
<div style="text-align: justify;">Контур аналитических работ </div>
</li>
<li>
<div style="text-align: justify;">Контур разработки версии (итерация) </div>
</li>
<li>
<div style="text-align: justify;">Контур небольших доработок </div>
</li>
</ul>
<p style="text-align: center;"><a href="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_01.jpg" target="blank"><img title="Схема бизнес-процесса разработки" src="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_01s.jpg" alt="" /></a></p>
<h4>Контур сбора требований</h4>
<p style="text-align: justify;">Основной операцией в данном случае является процедура регистрации требований на доработку. Под требованием понимается в данном случае любое формально описанное условие, которому должно удовлетворять создаваемое решение.
</p>
<p style="text-align: justify;">В частности, требованиями являются:
</p>
<ul>
<li>
<div style="text-align: justify;">Ошибки, выявленные при внутреннем или внешнем (ПСИ) тестировании, в процессе эксплуатации решения</div>
</li>
<li>
<div style="text-align: justify;">Функциональные требования (доработки) </div>
</li>
<li>
<div style="text-align: justify;">Нефункциональные требования (ограничения, которым должно удовлетворять решение)</div>
</li>
</ul>
<p style="text-align: justify;">Требования могут поступать из различных источников, например:
</p>
<ul>
<li>
<div style="text-align: justify;">Представители Заказчика</div>
</li>
<li>
<div style="text-align: justify;">Тестеры в составе проектной команды</div>
</li>
<li>
<div style="text-align: justify;">Руководства компании</div>
</li>
</ul>
<p style="text-align: justify;">Все требования хранятся в Репозитории требований. Подробнее о требованиях (их атрибутах и жизненном цикле) написано в разделе «Информационная модель».
</p>
<p style="text-align: justify;">Зарегистрировать требование может любой участник проектной команды, заполнив необходимый набор полей. В дальнейшем все активности по разработке связываются с конкретными требованиями, на реализацию которых они направлены.
</p>
<p style="text-align: justify;">После регистрации требования выясняются основания для его реализации (ТЗ, договора и т.д.). Если оснований не обнаруживается, то требование отвергается или инициируется процесс внесения дополнений в договорные документы. Если основания есть, то требование может быть использовано в других контурах работ. Также требование может быть уточнено, если из его описания не понятно имеет оно основания или нет.
</p>
<p style="text-align: justify;">Все требования делятся на две группы с точки зрения подхода к их реализации:
</p>
<ul>
<li>
<div style="text-align: justify;">Мелкие доработки </p>
<ul>
<li>
<div style="text-align: justify;">o	длительность их реализации до 1 человеко-дня И</div>
</li>
<li>
<div style="text-align: justify;">o	не требуют аналитической проработки (написания Технического проекта)</div>
</li>
</ul>
</div>
</li>
<li>
<div style="text-align: justify;">Средние и крупные доработки </p>
<ul>
<li>
<div style="text-align: justify;">o	длительность реализации более человеко-дня ИЛИ</div>
</li>
<li>
<div style="text-align: justify;">o	требуют аналитической проработки (написания Технического проекта)</div>
</li>
</ul>
</div>
</li>
</ul>
<p style="text-align: justify;">Решение о реализации мелких доработок принимается руководителем группы путем назначения требования на соответствующего разработчика (Контур небольших доработок).
</p>
<p style="text-align: justify;">Реализация средних и крупных доработок происходит постадийно:
</p>
<ul>
<li>
<div style="text-align: justify;">Планируется реализация доработок и аналитических работ по их проработке (Контур среднесрочного планирования)</div>
</li>
<li>
<div style="text-align: justify;">Проводятся аналитические работы, по их результатам составляется Технический проект (ТП) на реализацию требования (Контур аналитических работ)</div>
</li>
<li>
<div style="text-align: justify;">В рамках детального планирования работ по разработке текущей версии выбираются проработанные требования с готовыми ТП и включаются в состав задач для рабочего проектирования и реализации в текущей версии (Контур разработки версии)</div>
</li>
</ul>
<h4>Контур среднесрочного планирования</h4>
<p style="text-align: justify;">В рамках контура сбора требований членами проектной команды путем проведения совещания принимается решение о реализации имеющих основания требований. Производится их приоритезация и решается, в какую именно версию должны попасть требования в зависимости от их приоритета.
</p>
<p style="text-align: justify;">Распределение требований происходит по нескольким следующим версиям с временным интервалом до полугода. В итоге составляется среднесрочный план, представляющий из себя список требований, которые планируется реализовать в следующих версиях. В карточке каждого запланированного требования помечается эта версия.
</p>
<p style="text-align: justify;">На основании среднесрочного плана по реализации требований производится детальное планирование аналитических работ по написанию ТП с постановкой задачи по их реализации.
</p>
<p style="text-align: justify;">Планы работ хранятся в Репозитории задач.
</p>
<h4>Контур аналитических работ</h4>
<p style="text-align: justify;">Согласно плану работ Аналитик производит аналитическую проработку требования и составляет документ с утвержденной структурой разделов – Технический проект с описанием логики реализации требования.
</p>
<p style="text-align: justify;">Технический проект, подготовленный Аналитиком, согласуется с:
</p>
<ul>
<li>
<div style="text-align: justify;">Руководителем проекта</div>
</li>
<li>
<div style="text-align: justify;">Руководителем группы</div>
</li>
<li>
<div style="text-align: justify;">Архитектором</div>
</li>
</ul>
<p style="text-align: justify;">После составления и согласования ТП требование помечается как готовое к включению в план разработки версии.
</p>
<p style="text-align: justify;">Технический проект, как и остальная документация хранится в Репозитории документации.
</p>
<h4>Контур разработки версии</h4>
<p style="text-align: justify;">Контур разработки версии представляет из себя одну итерацию разработки: от планирования работ по версии, до ее выпуска. После выпуска одной версии, начинаются работ по следующей версии.
</p>
<p style="text-align: justify;">При планировании работ по версии проектная команда просматривает требования, выбирая среди них те, которые:
</p>
<ul>
<li>
<div style="text-align: justify;">в соответствии со среднесрочным планом должны быть реализованы в рамках настоящей версии И</div>
</li>
<li>
<div style="text-align: justify;">по которым завершена аналитическая проработка (имеется согласованный ТП)</div>
</li>
</ul>
<p style="text-align: justify;">Также в состав работ по версии могут включаться требования, имеющие критичную важность и наивысший приоритет. В этом случае их аналитическая проработка планируется в рамках работ по версии. Однако это вариант не является основным.
</p>
<p style="text-align: justify;">После выделения требований, подлежащих разработке в рамках настоящей версии, составляется детальный план разработки этой версии, включающий в себя все виды работ.
</p>
<p style="text-align: justify;">Затем согласно плану Разработчик совместно с Архитектором (в части концептуальных архитектурных решений) на основании Технического проекта пишет Рабочий проект, в котором описывает реализацию соответствующего требования.
</p>
<p style="text-align: justify;">Рабочий проект, подготовленный Разработчиком, согласуется с:
</p>
<ul>
<li>
<div style="text-align: justify;">Архитектором</div>
</li>
<li>
<div style="text-align: justify;">Руководителем группы</div>
</li>
<li>
<div style="text-align: justify;">Руководителем проекта</div>
</li>
</ul>
<p style="text-align: justify;">После согласования рабочего проекта Разработчик приступает к его реализации, а Архитектор обновляет архитектурную модель решения в соответствии с Рабочим проектом.
</p>
<p style="text-align: justify;">Для достаточно крупных требований функционал в рамках одного требования (и, соответственно, Рабочего проекта) реализуется несколькими частями. После разработки одной части происходит ее автоматическое тестирование и проверка качества кода Архитектором. Если выявляются недочеты – Разработчик их устраняет.
</p>
<p style="text-align: justify;">После реализации всех частей одного требования Разработчик демонстрирует разработанный функционал Аналитику – происходит его концептуальное тестирование, т.е. тестирование на предмет соответствия потребностям пользователей. Если выявляются несоответствия потребностям пользователей, то происходит либо доработка Рабочего проекта и, затем, реализованного функционала либо сразу доработка функционала (в случае мелких замечаний, не требующих изменения Рабочего проекта и архитектурной модели).
</p>
<p style="text-align: justify;">В случае успешного концептуального тестирования Разработчик приступает к реализации следующего требования в соответствии с планом работ по версии.
</p>
<p style="text-align: justify;">Также после согласования новой функциональности Аналитик обновляет пользовательскую документацию на решение.
</p>
<p style="text-align: justify;">После того, как все доработки, запланированные в версии, реализованы Билд-инженер производит сборку версии. Билд-инженер, формирует Сопроводительный документ к версии, в котором:
</p>
<ul>
<li>
<div style="text-align: justify;">Описываются параметры версии (номер, дата выпуска, перечень файлов и др.) </div>
</li>
<li>
<div style="text-align: justify;">Перечисляются реализованные в версии требования (новый функционал, устраненные ошибки) </div>
</li>
<li>
<div style="text-align: justify;">Содержится информация о развертывании версии (последовательность действий) </div>
</li>
<li>
<div style="text-align: justify;">Если в рамках версии изменилась структура хранилищ данных, то в рамках этого документа прикладываются SQL-скрипты для перехода со старой структуры на новую </div>
</li>
</ul>
<p style="text-align: justify;">Собранная версия тестируется Тестером при участии Аналитика согласно плану тестирования, являющегося составной частью Технического проекта, разработанного Аналитиком. Выявленные ошибки регистрируются в Репозитории требований в виде требований с типом «Ошибка тестирования версии».
</p>
<p style="text-align: justify;">Выявленные ошибки устраняются Разрабочтиками, которые реализовывали соответствующий функционал, при необходимости модифицируется Рабочий проект и Архитектурная модель.
</p>
<p style="text-align: justify;">После того, как ошибки тестирования версии устранены тестирование повторяется. Версия выпускается в следующих случаях:
</p>
<ul>
<li>
<div style="text-align: justify;">Все «Ошибки тестирования версии» устранены</div>
</li>
<li>
<div style="text-align: justify;">Принимается решение о выпуске версии с рядом не устраненных ошибок</div>
</li>
</ul>
<p style="text-align: justify;">После того как принято решение о выпуске версии Билд-инженер готовит дистрибутивы и Сопроводительный документ (актуализирует его при необходимости) и передает его для развертывания.
</p>
<p style="text-align: justify;">После выпуска версии работы в рамках данной итерации считаются завершенными и начинается работа над следующей версией.
</p>
<h4>Контур небольших доработок</h4>
<p style="text-align: justify;">Небольшие доработки – доработки с длительностью реализации менее человеко-дня, не требующие написания Технического проекта и Рабочего проекта.
</p>
<p style="text-align: justify;">Все небольшие доработки делятся на две группы:
</p>
<ul>
<li>
<div style="text-align: justify;">С нормальным приоритетом – включаются в следующую основную версию.</div>
</li>
<li>
<div style="text-align: justify;">С критическим приоритетом – для них выпускается промежуточная версия путем внесения требуемых изменений в экземпляр с кодом текущей развернутой версии.</div>
</li>
</ul>
<p style="text-align: justify;">Решение о реализации мелкой доработки с нормальным приоритетом принимается Руководителем группы путем анализа загрузки разработчиков по группе. Наименее загруженные на реализации плановых доработок по версии Разработчики занимаются устранением мелких доработок с нормальным приоритетом.
</p>
<p style="text-align: justify;">После устранения мелких доработок с нормальным приоритетом они попадают в рабочую базу кода и выпускаются со следующей основной версией.
</p>
<p style="text-align: justify;">Решение о реализации мелкой доработки с критическим приоритетом принимается Руководителем проекта совместно с Руководителем группы. В этом случае Разработчик, наиболее хорошо знакомый с возникшей проблемой может быть временно переключен с плановых работ на ее устранение.
</p>
<p style="text-align: justify;">После устранения критических мелких доработок (одной или нескольких сразу) инициируется процедура выпуска промежуточной версии. Сборку осуществляет Билд-инженер, также он готовит Сопроводительный документ в котором указывает какой номер данной промежуточной версии и перечень критических мелких доработок устраненных в ней.
</p>
<p style="text-align: justify;">После выпуска промежуточной версии Разработчики вносят изменения, соответствующие критическим мелким доработкам, в основную рабочую версию.
</p>
<h3 id="#raz-03">Участие ролей в операциях бизнес-процесса</h3>
<p style="text-align: justify;">Одно из основных требований к бизнес-процессу разработки – равномерная загрузка всех членов проектной команды на всем протяжении разработки с учетом ее итеративного и последовательного (ТП, РП, реализация и т.д.) характера.
</p>
<p style="text-align: justify;">На схеме ниже в качестве примера приведено распределение работ при разработке версии с длительностью 8 недель. Рассмотрена вся проектная команда, задействованная во всех контурах работ.
</p>
<p style="text-align: center;">
<a href="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_02.jpg" target="blank"><img class="aligncenter" title="Профили загрузки ролей в процессе разработки" src="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_02s.jpg" alt="" /></a>
</p>
<p style="text-align: justify;">Ключевым элементом данного бизнес-процесса, проиллюстрированным на схеме, является независимое выполнение аналитических работ (Технический проект) и работ по разработке версии (Рабочий проект и реализация) друг от друга с целью обеспечения равномерной загрузки Аналитика на всей итерации разработки.
</p>
<p style="text-align: justify;">Также важным моментом является участие Разработчика, как в плановых работах по версии, так и в устранении мелких, в т.ч. высоко критичных замечаний.
</p>
<p style="text-align: justify;">Тестер на ранних стадиях итерации занимается тестированием предыдущей версии и регистрирует обнаруженные ошибки в Репозитории требований, позднее по мере готовности версии он переключается целиком на тестирование текущей версии.
</p>
<p style="text-align: justify;">Билд-инженер имеет невысокую загрузку на большей части итерации, поэтому, целесообразно совмещение этой роли с одной из следующих ролей: Разработчик, Руководитель группы, Архитектор.
</p>
<p style="text-align: justify;">Важнейшей задачей Архитектора помимо участия в написании Рабочих проектов и контроля технической стороны проведения разработки является также ведение Репозитория архитектуры – обновления его по мере разработки новой функциональности в соответствии с Рабочими проектами.
</p>
<p style="text-align: justify;">Руководитель проекта и Руководитель группы помимо задач по управлению проектом и группой соответственно занимаются аналитической работой, особенно концептуальным проектированием решения.
</p>
<h3 id="#raz-04">Информационная модель бизнес-процесса</h3>
<p style="text-align: justify;">Все виды информации в рамках бизнес-процесса разработки распределяются по пяти хранилищам (репозиториям):
</p>
<ul>
<li>
<div style="text-align: justify;">Репозиторий требований </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий архитектуры </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий документации </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий кода </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий задач (план работ) </div>
</li>
</ul>
<p style="text-align: justify;">Элементы в одном хранилище могут быть связаны с элементами в другом хранилище. Например, требования в репозитории требований могут быть связаны с компонентами из репозитория архитектуры, которыми они реализуются.
</p>
<p style="text-align: justify;">На схеме ниже показаны примеры содержимого репозиториев и взаимосвязи между ними. Затем в таблице дается краткое пояснение по содержимому репозиториев и описаны взаимосвязи между их элементами.
</p>
<p style="text-align: center;">
<a href="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_03.jpg" target="blank"><img class="aligncenter" title="Информационная модель бизнес-процесса разработки" src="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_03s.jpg" alt="" /></a>
</p>
<div align="center">
<table border="1" cellspacing="0" cellpadding="10" width="700">
<tr>
<td width="100" valign="middle">
<b>Наименование репозитория</b>
</td>
<td width="600" valign="middle">
<b>Краткое описание</b>
</td>
</tr>
<tr>
<td valign="top">
Репозиторий требований
</td>
<td valign="top">
<p style="text-align: justify;">Иерархическая структура групп, содержащая требования к решению, являющиеся исходными основаниями для каких-либо работ по разработке:
</p>
<ul>
<li>
<div style="text-align: justify;">Функциональные требования (функции решения) </div>
</li>
<li>
<div style="text-align: justify;">Нефункциональные требования </div>
</li>
<li>
<div style="text-align: justify;">Ошибки (баг-трэкинг) </div>
</li>
</ul>
<p style="text-align: justify;">Группы могут быть вложенными. Требования вложенными быть не могут.
</p>
<p style="text-align: justify;">Каждое требование содержит следующую информацию:
</p>
<ul>
<li>
<div style="text-align: justify;">Наименование </div>
</li>
<li>
<div style="text-align: justify;">Краткое описание </div>
</li>
<li>
<div style="text-align: justify;">Текущий статус (отражает текущий этап жизненного цикла требования, см. ниже) </div>
</li>
<li>
<div style="text-align: justify;">Тип требования (Расширение / Ошибка) </div>
</li>
<li>
<div style="text-align: justify;">Источник (Кто сообщил о требовании) </div>
</li>
<li>
<div style="text-align: justify;">Основание (ссылки на договорные документы, ТЗ и иные обязательства) </div>
</li>
<li>
<div style="text-align: justify;">Приоритет </div>
</li>
<li>
<div style="text-align: justify;">Версия (в которой планируется реализовать требование) </div>
</li>
</ul>
<p style="text-align: justify;">Поле «Текущий статус», отражающее жизненный цикл требования, может иметь следующие значения:
</p>
<p style="text-align: center;">
<a href="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_04.jpg" target="blank"><img class="aligncenter" title="Жизненный цикл требования" src="http://kholodkov.ru/it/wp-content/uploads/artpic/003/003_04s.jpg" alt="" /></a>
</p>
<p style="text-align: justify;">Статусы требований меняются вручную соответствующими ролями по завершении этапов работ в соответствии с бизнес-процессом.
</p>
<p style="text-align: justify;">С каждым требованием могут быть ассоциированы элементы из следующих репозиториев:
</p>
<ul>
<li>
<div style="text-align: justify;">Репозиторий архитектуры – компоненты, реализующие данное требование</div>
</li>
<li>
<div style="text-align: justify;">Репозиторий документации – документы, описывающие данное требования (ТП, РП, тесты и др.)</div>
</li>
<li>
<div style="text-align: justify;">Репозиторий задач – задачи в плане работ, путем выполнения которых реализуется данное требование </div>
</li>
</ul>
</td>
</tr>
<tr>
<td valign="top">
Репозиторий архитектуры
</td>
<td valign="top">
<p style="text-align: justify;">Хранилище с описанием архитектуры. Включает в себя следующие элементы:
</p>
<ul>
<li>
<div style="text-align: justify;">Диаграмма компонентов 1-го уровня. На ней представлены слои, на которые разделено решение и среды, в рамках которых эти слои функционируют. Внутри слоя изображаются пакеты, из которых он состоит. </div>
</li>
<li>
<div style="text-align: justify;">Диаграммы компонентов 2-го уровня. Для каждого пакета на диаграмме первого уровня составляется одна диаграмма компонентов с перечнем компонентов, входящих в состав этого пакета. </div>
</li>
<li>
<div style="text-align: justify;">Описание компонентов. Для каждого компонента на диаграмме 2-го уровня готовится документ с описанием его интерфейсов и внутренней логики реализации. </div>
</li>
<li>
<div style="text-align: justify;">Справочник классов. Автоматически генерируемый по коду навигатор по классом, реализованным в системе. </div>
</li>
</ul>
<p style="text-align: justify;">С каждым пакетом или компонентом на моделях 2-го уровня в репозитории архитектуры могут быть ассоциированы элементы из следующих репозиториев:
</p>
<ul>
<li>
<div style="text-align: justify;">Репозиторий требований – требования, при реализации которого используется данный компонент. </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий документации – общие описания архитектуры, описания слоев, компонентов (интерфейсные и внутренние части), классов. </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий кода – ссылки на конкретные программные модули, реализующие данный компонент. </div>
</li>
</ul>
</td>
</tr>
<tr>
<td valign="top">
Репозиторий документации
</td>
<td valign="top">
<p style="text-align: justify;">Хранилище файлов различных типов, используемых как сами по себе (например, Договорные документы, Протоколы, Акты и др.), так и в связке с элементами из репозитория требований (ТП, РП) и репозитория архитектуры (описания компонентов, слоев).
</p>
</td>
</tr>
<tr>
<td valign="top">
Репозиторий кода
</td>
<td valign="top">
<p style="text-align: justify;">Весь код решения с поддержкой ветвления версий.
</p>
<p style="text-align: justify;">Для целей срочной реализации критических доработок в рамках Репозитория кода существуют два экземпляра кода решения:
</p>
<ul>
<li>
<div style="text-align: justify;">Рабочая версия – в ней производятся все доработки согласно плана работ по версии и мелкие доработки нормального приоритета. </div>
</li>
<li>
<div style="text-align: justify;">Текущая развернутая версия – эксплуатируемая в настоящий момент версия – в ней реализуются критические мелкие доработки и выпускается промежуточная версия каждый раз, когда возникает необходимость устранить какие-то принципиальные моменты не дожидаясь выпуска следующей версии. </div>
</li>
</ul>
<p style="text-align: justify;">После выпуска промежуточной версии, вносятся соответствующие изменения в Рабочую версию в полуавтоматическом режиме.
</p>
</td>
</tr>
<tr>
<td valign="top">
Репозитория задач (план работ)
</td>
<td valign="top">
<p style="text-align: justify;">План работ, содержащий задачи для всех участников проекта. Задачи связаны с требованиями, на реализацию которых они направлены. Также задачи связаны с CheckIn`ами кода, который создавался или модифицировался в рамках выполнения задачи.
</p>
</td>
</tr>
</table>
</div>
<h3 id="#raz-05">Средства автоматизации бизнес-процесса</h3>
<div align="center">
<table border="1" cellspacing="0" cellpadding="10" width="700">
<tr>
<td width="200" valign="middle">
<b>Наименование программного продукта </b>
</td>
<td width="500" valign="middle">
<b>Способ использования в бизнес-процессе </b>
</td>
</tr>
<tr>
<td valign="top">
Microsoft Team Foundation Server (MS TFS)
</td>
<td valign="top">
<ul>
<li>
<div style="text-align: justify;">Репозиторий требований </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий задач </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий кода </div>
</li>
<li>
<div style="text-align: justify;">Репозиторий документов </div>
</li>
</ul>
</td>
</tr>
<tr>
<td valign="top">
Microsoft Visual Studio 2008
</td>
<td valign="top">
<ul>
<li>
<div style="text-align: justify;">Средство разработки кода</div>
</li>
<li>
<div style="text-align: justify;">Клиент для MS TFS</div>
</li>
</ul>
</td>
</tr>
<tr>
<td valign="top">
Microsoft Visio
</td>
<td valign="top">
<ul>
<li>
<div style="text-align: justify;">Репозиторий архитектуры (модели 1-го и 2-го уровней)</div>
</li>
</ul>
</td>
</tr>
<tr>
<td valign="top">
Doxygen
</td>
<td valign="top">
<ul>
<li>
<div style="text-align: justify;">Репозиторий архитектуры (справочник классов)</div>
</li>
</ul>
</td>
</tr>
<tr>
<td valign="top">
Microsoft Project
</td>
<td valign="top">
<ul>
<li>
<div style="text-align: justify;">Клиент для репозитория задач в TFS</div>
</li>
</ul>
</td>
</tr>
<tr>
<td valign="top">
Microsoft Office
</td>
<td valign="top">
<ul>
<li>
<div style="text-align: justify;">Средство создания документации</div>
</li>
</ul>
</td>
</tr>
</table>
</div>
<p> </p>
]]></content:encoded>
			<wfw:commentRss>https://xn----8sbwjflce2afgci1k.xn--p1ai/it/?feed=rss2&#038;p=130</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
