<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2883139146420963364</id><updated>2011-07-07T21:33:00.381-07:00</updated><category term='стив макконелл'/><category term='software estimation'/><category term='sins'/><category term='ccf'/><category term='риски'/><category term='risk management'/><category term='том де марко'/><category term='customer'/><category term='care'/><category term='тестирование'/><category term='процесс'/><category term='isee systems'/><category term='black art'/><category term='менеджмент'/><category term='управление проектами'/><category term='имитационное моделирование'/><category term='результат'/><category term='enterprise'/><category term='microsoft'/><category term='project management'/><category term='framework'/><category term='ithink'/><category term='risks'/><category term='call center'/><category term='estimation'/><category term='Steve McConnell'/><category term='учёт рисков'/><title type='text'>Уголок</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jury-ugolok.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jury-ugolok.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jury</name><uri>http://www.blogger.com/profile/03689536270094042865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_i9Xa8Y8U7bU/SxzXU4bfrWI/AAAAAAAABZ8/GjoxEAReG4k/S220/Me.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2883139146420963364.post-339486667038649136</id><published>2010-06-02T08:51:00.000-07:00</published><updated>2010-06-02T08:56:23.209-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='результат'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='менеджмент'/><category scheme='http://www.blogger.com/atom/ns#' term='процесс'/><title type='text'>Процесс vs Результат</title><content type='html'>Одни говорят, что менеджмент - это Процесс...&lt;br /&gt;Другие говорят, что менеджмент - это Результат...&lt;br /&gt;Я думаю, менеджмент - это и Процесс и Результат.&lt;br /&gt;Процесс без Результата не имеет смысла.&lt;br /&gt;Результат без Процесса невозможен.&lt;br /&gt;&lt;br /&gt;Чуть больше об этих понятиях в книге &lt;a href="http://www.ozon.ru/context/detail/id/4750564/"&gt;Масааки Имаи "Кайдзен. Ключ к успеху японских компаний"&lt;/a&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;«…Ключевое различие в понимании изменений в Японии и на Западе заключается в концепции кайдзен, принципы которой для многих японских менеджеров столь естественны и само собой разумеются, что они применяют их, не отдавая себе в этом отчета. Понятие кайдзен объясняет, почему компании в Японии не могут долго оставаться неизменными. После долгих лет изучения западной практики ведения бизнеса я пришел к выводу, что концепция кайдзен сегодня не существует или выражена весьма слабо в большинстве западных компаний. И, что еще хуже, они отвергают ее, не имея ни малейшего понятия об ее принципах. Берет свое старый синдром «у нас это не приживется». Именно отсутствием кайдзен объясняется, почему американский или европейский завод может совершенно не меняться в течение четверти века.&lt;br /&gt;Сущность кайдзен очень проста: совершенствование. Более того, это непрерывный процесс совершенствования, в котором участвуют все — и менеджеры, и рабочие. Философия кайдзен предполагает, что наш образ жизни, будь то работа, общественная или семейная жизнь, заслуживает постоянного улучшения…&lt;br /&gt;…Кайдзен порождает мышление, ориентированное на процесс, поскольку, чтобы получить более высокие результаты, надо сначала улучшить процесс. Более того, кайдзен рассчитан на человека и на усилия, предпринимаемые людьми. Это резко контрастирует с мышлением большинства западных менеджеров, ориентированным на результат.&lt;br /&gt;По словам Маюми Оцубо, менеджера по проведению соревнований и рекламных акций в Bridgestone Tire Co, Япония — это общество, ориентированное на процесс, в то время как США — общество, ориентированное на результат. Так, оценивая показатели сотрудников фирмы, японский менеджер уделяет особое внимание отношению человека к работе. Если менеджер по продажам анализирует показатели продавцов, его оценка обязательно включает такие ориентированные на процесс критерии, как время, затраченное на привлечение новых клиентов; время, использованное на телефонные звонки клиентам по сравнению со временем, в течение которого продавцы занимались канцелярской работой в офисе; процент новых контактов, завершившихся заключением сделки. Принимая во внимание эти показатели, менеджер по продажам заботится о том, чтобы его сотрудник рано или поздно улучшил результаты работы. Иными словами, считается, что процесс не менее важен, чем совершенно конкретный намеченный результат — объем продаж!&lt;br /&gt;В США, как правило, не имеет значения, насколько усердно работает сотрудник. Отсутствие высоких показателей неизменно ведет к низкой оценке его труда и низкому доходу или статусу. Личный вклад оценивается только по конкретному результату. В обществе, ориентированном на результат, засчитывается только результат."&lt;/i&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Менеджмент, ориентированный на Процесс носит долгосрочный стратегический характер.&lt;br /&gt;Менеджмент, ориентированный на Результат решает сиюминутные задачи.&lt;br /&gt;&lt;br /&gt;Ключевые показатели менеджмента, направленного на Процесс:&lt;br /&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;/li&gt;&lt;li&gt;мораль;&lt;/li&gt;&lt;li&gt;коммуникации и т.д.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ключевые показатели менеджмента, направленного на Результат:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;количество строк кода;&lt;/li&gt;&lt;li&gt;количество дефектов;&lt;/li&gt;&lt;li&gt;количество реализованных бизнес-процессов и т.д.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ключ к успеху - это баланс между этими двумя типами управления.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2883139146420963364-339486667038649136?l=jury-ugolok.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jury-ugolok.blogspot.com/feeds/339486667038649136/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jury-ugolok.blogspot.com/2010/06/vs.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/339486667038649136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/339486667038649136'/><link rel='alternate' type='text/html' href='http://jury-ugolok.blogspot.com/2010/06/vs.html' title='Процесс vs Результат'/><author><name>Jury</name><uri>http://www.blogger.com/profile/03689536270094042865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_i9Xa8Y8U7bU/SxzXU4bfrWI/AAAAAAAABZ8/GjoxEAReG4k/S220/Me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2883139146420963364.post-2790798030291475050</id><published>2010-03-29T02:08:00.000-07:00</published><updated>2010-09-25T04:40:31.885-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software estimation'/><category scheme='http://www.blogger.com/atom/ns#' term='ithink'/><category scheme='http://www.blogger.com/atom/ns#' term='estimation'/><category scheme='http://www.blogger.com/atom/ns#' term='имитационное моделирование'/><category scheme='http://www.blogger.com/atom/ns#' term='том де марко'/><category scheme='http://www.blogger.com/atom/ns#' term='стив макконелл'/><category scheme='http://www.blogger.com/atom/ns#' term='isee systems'/><title type='text'>Почему 9 женщин не могут родить ребёнка за 1 месяц или О применении имитационного моделирования в управлении проектами</title><content type='html'>&lt;h4&gt;Введение&lt;/h4&gt;Думаю, многие из вас слышали выражение "9 женщин не могут родить ребёнка за 1 месяц!". Контекст этого выражения очевиден - в разработке ПО его применяют в качестве аллегории, когда протестуют против совершенно неприемлемого &lt;i&gt;сжатия сроков&lt;/i&gt;. Здесь под сжатием понимают сокращение сроков разработки путём расширения команды при сохранении общей трудоёмкости разработки.&lt;br /&gt;&lt;img src="http://habreffect.ru/files/d40/b334be8b7/1vs9.png" alt="image" width="400"/&gt;&lt;br /&gt;&lt;br /&gt;Совершенно очевидно, что сжимать сроки до бесконечности невозможно. Существует определённый предел. Например, известным экспертом в области оценки трудоёмкости разработки ПО Стивом Макконнеллом (Steve McConnell) этот порог определён как 25% от исходных оценок (см. &lt;a href="http://habrahabr.ru/blogs/pm/75903"&gt;мою предыдущую статью&lt;/a&gt;).&lt;br /&gt;Но этот топик не об оценках трудоёмкости...&lt;br /&gt;Вот я выше написал "совершенно очевидно...". Думаете, это действительно очевидно? Всем?&lt;br /&gt;Мой недавний опыт показал, что это очевидно далеко не всем. Проект был очень крупный и срок сдачи неумолимо приближался. Было принято решение резко расширять команду, чтобы успеть. Довод про "9 женщин" никто не принял. Команда была расширена и в срок мы всё равно не успели. Можно ли было как-то, кроме как на словах, показать, как будут развиваться события? Вот о том, как &lt;i&gt;смоделировать&lt;/i&gt; такую ситуацию, и будет моя статья.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Уверен, что многим из вас приходилось принимать какие-то решения, от которых впоследствии зависело очень многое. Как вы их принимали? Чем руководствовались? Знали ли вы наверняка, как именно будут развиваться события в зависимости от того, какой выбор был сделан? А ведь чем выше должность в иерархии управления, тем дальновидней должны быть решения и тем дороже обходятся ошибки от неверно принятых решений.&lt;br /&gt;&lt;img align="right" src="http://habreffect.ru/files/a6d/d5be457ef/Thinker.png" alt="image"/&gt;&lt;br /&gt;В большинстве случаев решения принимаются интуитивно, на основе жизненного и профессионального опыта. Принимая решения, на подсознательном уровне мы учитываем множество факторов, учитываем те знания, которые получили ранее. Только вот что, если вам нужно кому-то объяснить, почему вы так уверены в своём решении? Тут, конечно, можно применить все свои навыки убеждения, просто "продавить" свою позицию и успокоиться. Например, можно безапелляционно заявить: "Да я просто в этом уверен!", и проигнорировать все остальные доводы. Но это не всегда работает, особенно, если вы ниже рангом, чем те, кому вы доказываете свою позицию.&lt;br /&gt;&lt;br /&gt;Было бы неплохо иметь возможность перевести свои "интуитивные ощущения" в какую-то более осязаемую форму. В такую форму, которая бы позволила:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Осознать свои собственные ощущения&lt;/li&gt;&lt;li&gt;Проверить различные догадки&lt;/li&gt;&lt;li&gt;Наглядно и доходчиво объяснить остальным, почему то или иное решение будет более эффективным &lt;/li&gt;&lt;/ul&gt;Понятно, что при неадекватном восприятии никакие модели не убедят человека в неправильности решения. Модель помогает не столько убедить кого-то, сколько разобраться самому в своих доводах.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Системы поддержки принятия решений&lt;/h4&gt;&lt;img align="left" src="http://habreffect.ru/files/c0f/0c64e62bb/Decision.png" alt="image"/&gt;Для решения поставленных задач на помощь приходят  &lt;i&gt;&lt;a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0_%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%B8_%D0%BF%D1%80%D0%B8%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B9"&gt;системы поддержки принятия решений&lt;/a&gt;&lt;/i&gt;.&lt;br /&gt;Такие системы "позволяют принимать решения в сложных условиях для полного и объективного анализа предметной деятельности". Как раз то, что нам нужно при управлении проектами. Для поддержки принятия решений используют различные способы. Нас же интересует такой способ, который будет наиболее наглядным, чтобы решить задачи, указанные выше.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Имитационное моделирование&lt;/h5&gt;&lt;img align="left" src="http://habreffect.ru/files/217/fd2608652/Indicator.png" alt="image"/&gt;Наиболее полно этим задачам соответствует метод &lt;i&gt;&lt;a href="http://ru.wikipedia.org/w/index.php?title=%D0%98%D0%BC%D0%B8%D1%82%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5&amp;stable=1"&gt;имитационного моделирования&lt;/a&gt;&lt;/i&gt;. Этот метод позволяет строить модели, описывающие процессы так, как они проходили бы в действительности. Такую модель можно «проиграть» во времени как для одного испытания, так и заданного их множества. Стоит, однако, помнить, что модель всегда остаётся моделью. Она никогда не сможет учесть всех факторов, но с определённой степенью достоверности позволяет делать &lt;b&gt;обоснованные&lt;/b&gt; заключения.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Инструменты для моделирования&lt;/h4&gt;&lt;img align="left" src="http://habreffect.ru/files/4e2/87c38f25e/Tools.png" alt="image"/&gt;Существует множество разных инструментов для моделирования. Среди них &lt;a href="http://www.xjtek.com/anylogic/overview/"&gt;AnyLogic&lt;/a&gt;, &lt;a href="http://ru.wikipedia.org/wiki/GPSS"&gt;GPSS&lt;/a&gt; и другие. Каждая из них обладает своими преимуществами и своими недостатками. У каждой из них есть свои приоритетные области применения. Не буду пытаться сравнивать эти системы, так как это выходит за рамки данного топика.&lt;br /&gt;&lt;br /&gt;&lt;img align="right" src="http://habreffect.ru/files/29e/edd1aaf34/iThink.png" alt="image"/&gt;В этой статье в качестве примера я буду рассматривать систему &lt;a href="http://www.iseesystems.com/softwares/Business/IthinkSoftware.aspx"&gt;iThink&lt;/a&gt; компании &lt;a href="http://www.iseesystems.com/"&gt;isee systems, inc&lt;/a&gt;. Эту систему я выбрал, во-первых, потому что именно про неё я услышал впервые, прочитав книгу Deadline Тома ДеМарко, а во-вторых потому, что она мне субъективно показалась наиболее простой для проведения моделирования специфических для управления проектами задач.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Пример&lt;/h4&gt;&lt;h5&gt;Постановка задачи&lt;/h5&gt;Для простоты понимания возьму за основу пример из той самой книги, о которой я говорил выше - Deadline. В ней главный герой, мистер Томпкинс, и доктор Джамид моделируют изменение производительности команды в зависимости от разных условий. У нас "ситуация с женщинами" очень похожая, поэтому пример вполне подходит. Справедливости ради надо отметить, что, на самом деле, оригинальным источником этого примера является книга &lt;i&gt;«Introduction to Systems: Thinking and ithink». (Hanowr, N H High Performance Systems, Inc, 1994)&lt;/i&gt;.&lt;br /&gt;Для построения модели создам новый файл в iThink и на вкладке "Model" начну добавлять её элементы.&lt;br /&gt;Но прежде нужно выделить факторы и численные величины для моделирования.&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;Факторы&lt;/h5&gt;Для того, чтобы сократить пространные рассуждения в романическом стиле, коротко выделю те факторы, которые могут влиять на модель:&lt;ol&gt;&lt;li&gt;Набор персонала в проект&lt;/li&gt;&lt;li&gt;Стоимость интеграции новых членов в команду&lt;/li&gt;&lt;li&gt;Отрицательный эффект масштаба&lt;/li&gt;&lt;li&gt;Эффект слияния от совместной работы&lt;/li&gt;&lt;/ol&gt;&lt;h5&gt;Числа&lt;/h5&gt;Далее нам необходимо выделить величины, которые могут быть каким-либо образом измерены. В данном случае без этого моделирование будет невозможно.&lt;br /&gt;Итак, наши численные величины - это:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Количество сотрудников&lt;/li&gt;&lt;li&gt;Объём реализуемого функционала в условных единицах (&lt;a href="http://en.wikipedia.org/wiki/Function_points"&gt;функциональные единицы&lt;/a&gt;)&lt;/li&gt;&lt;/ol&gt;&lt;h5&gt;Построение модели в iThink&lt;/h5&gt;Для того, чтобы проще было воспринимать модель, начну её построения с конца.&lt;br /&gt;Возьмём два &lt;i&gt;контейнера&lt;/i&gt;. Один - полный, будет символизировать собой работу, которую необходимо сделать. Второй - пустой, будет символизировать собой работу, которую команда уже выполнила. Соединим их через &lt;i&gt;вентиль&lt;/i&gt;, который будет определять, как быстро работа из первого контейнера будет перемещаться во второй. Таким образом, этот вентиль будет характеризовать производительность команды по выполнению необходимой работы. &lt;i&gt;К сожалению, iThink не очень хорошо дружит с русскоязычными подписями, поэтому все подписи буду делать на английском.&lt;/i&gt;&lt;br /&gt;&lt;img src="http://habreffect.ru/files/138/c99940ece/Model1.png" alt="image" width="400"/&gt;&lt;br /&gt;На следующем шаге нам необходимо представить процесс приёма нового персонала (напр., разработчиков) в команду. Стоит также помнить, что эффективно персонал начинает работать не сразу. Для начала новых сотрудников необходимо "ввести" в проект. Даже если это очень опытные и квалифицированные люди, им всё равно необходимо вникнуть в проект: разобраться в принятых подходах, уяснить нюансы и пр.&lt;br /&gt;На диаграмме ниже показаны:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;облачко - ресурс-пул, откуда берутся новые сотрудники (для упрощения считаем бесконечным)&lt;/li&gt;&lt;li&gt;вентиль Income Staff - показывает, с какой скоростью люди поступают на обучение&lt;/li&gt;&lt;li&gt;контейнер New Staff - отражает сотрудников, находящихся на обучении&lt;/li&gt;&lt;li&gt;вентиль Integration Level - показывает то, с какой скоростью люди вливаются в команду после обучения&lt;/li&gt;&lt;li&gt;контейнер Effective Team - содержит сотрудников, представляющих из себя эффективно работающую команду&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://habreffect.ru/files/f86/aa104313d/Model2.png" alt="image" width="400"/&gt;&lt;br /&gt;Далее нам необходимо связать между собой персонал (количество сотрудников) и изменение объёма реализованного/нереализованного функционала (в условных единицах). Для этого введём ещё один элемент в нашу модель - &lt;i&gt;конвертер&lt;/i&gt;. Конвертер - это формула (правило), который преобразует одни числовые величины в другие. В данном случае конвертер будет отражать так называемый &lt;i&gt;&lt;a href="http://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82_%D0%BC%D0%B0%D1%81%D1%88%D1%82%D0%B0%D0%B1%D0%B0#.D0.9E.D1.82.D1.80.D0.B8.D1.86.D0.B0.D1.82.D0.B5.D0.BB.D1.8C.D0.BD.D1.8B.D0.B9_.D1.8D.D1.84.D1.84.D0.B5.D0.BA.D1.82_.D0.BE.D1.82_.D0.BC.D0.B0.D1.81.D1.88.D1.82.D0.B0.D0.B1.D0.B0"&gt;отрицательный эффект масштаба&lt;/a&gt; - &lt;a href="http://en.wikipedia.org/wiki/Diseconomies_of_scale"&gt;diseconomies of scale&lt;/a&gt;&lt;/i&gt;, т.е. то, насколько менее эффективен будет каждый последующий добавленный член команды. Это поправку я заложил в виде умозрительного графика.&lt;br /&gt;&lt;img src="http://habreffect.ru/files/0f7/bce92d9a4/Graphical_Converter.png" alt="image"/&gt;&lt;br /&gt;В iThink конвертеры могут задаваться как графически (набор значений, через которые проходит кривая), так и аналитически - в виде формулы.&lt;br /&gt;Чтобы излишне не погружаться в детали модели и не создавать базу для споров, я не буду приводить здесь формулы. Уверен, что у каждого эти формулы будут свои.&lt;br /&gt;&lt;img src="http://habreffect.ru/files/316/ae2bbd7c4/Model3.png" alt="image" width="400"/&gt;&lt;br /&gt;На следующем этапе добавим ещё один конвертер - "стоимость интеграции" - Integration Cost. Этот конвертер будет показывать то, насколько снижается эффективность команды при внедрении новых сотрудников ("старожилы" вынуждены отвлекаться от своей основной работы для того, чтобы помогать новичкам).&lt;br /&gt;&lt;img src="http://habreffect.ru/files/392/71af75903/Model4.png" alt="image" width="400"/&gt;&lt;br /&gt;Известен ещё один интересный фактор в командной работе - "эффект слияния" - Join Effect. Иногда со временем люди в команде становятся не просто суммой отдельных индивидуумов. Люди становятся Командой! Поддерживая друг друга, они начинают не только работать эффективней, чем если бы они работали поодиночке, но и легче принимать к себе новых членов команды - в дружный коллектив легче влиться (к сожалению, бывает и наоборот). Для упрощения модели укажем, что этот фактор определённым образом влияет на фактор стоимости интеграции.&lt;br /&gt;&lt;img src="http://habreffect.ru/files/861/58e50127c/Model5.png" alt="image" width="400"/&gt;&lt;br /&gt;На последнем этапе добавим ещё одну стрелочку так, чтобы после окончания работы прекратить нанимать новых людей. На самом деле, прекращать приём надо ещё раньше, но пока не будем усложнять модель.&lt;br /&gt;&lt;img src="http://habreffect.ru/files/3c2/6050605ee/Model6.png" alt="image" width="400"/&gt;&lt;br /&gt;&lt;h5&gt;Совершенствование модели&lt;/h5&gt;Само собой, что представленная модель не идеальна. Естественно, в ней есть ошибки, есть пути уточнения и добавления новых факторов, влияющих на процесс.&lt;br /&gt;Например:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Можно добавить, что "эффект слияния" влияет на общую производительность работы и скорость интеграции (а не только на стоимость интеграции).&lt;/li&gt;&lt;li&gt;Можно добавить, что персонал на обучении способен тоже выполнять какую-то полезную работу.&lt;/li&gt;&lt;li&gt;Можно добавить фактор ухода персонала из проекта (например, по причине изменения корпоративной политики)&lt;/li&gt;&lt;/ul&gt;В общем, простора для творчества достаточно. :)&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Принятие решения&lt;/h4&gt;Теперь, собственно, о принятии решения. Полученная модель помогает принять решение о том, до каких пор "вливание" новых членов в команду остаётся ещё достаточно эффективным.&lt;br /&gt;Для того, чтобы понять, что будет происходить, запустим модель.&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mYO6vdyK0FI&amp;hl=en_US&amp;fs=1&amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/mYO6vdyK0FI&amp;hl=en_US&amp;fs=1&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;В результате получим следующие графики.&lt;br /&gt;Первый график показывает, как быстро невыполненная работа будет преобразовываться в выполненную. Главное, что здесь видно, что процесс нелинейный.&lt;br /&gt;&lt;img src="http://habreffect.ru/files/299/28fb9ae78/Graph1.png" alt="image" width="400"/&gt;&lt;br /&gt;А вот второй график более интересный. Он уже показывает, как именно меняется производительность команды по мере внедрения дополнительных членов команды. Из графика, например, видно, что в краткосрочном периоде производительность падает. Обратите внимание, как далеко это от прямых линий.&lt;br /&gt;&lt;img src="http://habreffect.ru/files/a49/adb5f4f71/Graph2.png" alt="image" width="400"/&gt;&lt;br /&gt;Чтобы понять, какое количество людей команда может относительно безболезненно принимать в свои ряды, нужно регулировать вентиль Income Staff, задавая различные значения, и повторно "прокручивать" модель.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Заключение&lt;/h4&gt;В этом топике я коротко рассказал вам, как можно замоделировать свои ощущения, проверить догадки и попробовать показать кому-либо причины и доводы того или иного принимаемого решения. К сожалению, это не гарантирует вам того, что вы сможете кого-либо убедить.&lt;br /&gt;Как всегда, "серебряной пули" не существует. Имитационное  моделирование не сможет за вас принимать решения и убеждать других. Никакое ПО (по крайней мере, на том уровне развития, что мы имеем сейчас) не достанет само из глубин вашего подсознания ваши предчувствия. Но, к счастью, мы имеем очень эффективные инструменты, которые помогают нам не только лучше осознать наши доводы самим, но и спрогнозировать ситуацию.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPD:&lt;/b&gt; По просьбам трудящихся &lt;a href="http://files.mail.ru/7IJ2TX"&gt;здесь&lt;/a&gt; доступна сама модель. Можно поэкспериментировать.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2883139146420963364-2790798030291475050?l=jury-ugolok.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jury-ugolok.blogspot.com/feeds/2790798030291475050/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jury-ugolok.blogspot.com/2010/03/9-1.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/2790798030291475050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/2790798030291475050'/><link rel='alternate' type='text/html' href='http://jury-ugolok.blogspot.com/2010/03/9-1.html' title='Почему 9 женщин не могут родить ребёнка за 1 месяц или О применении имитационного моделирования в управлении проектами'/><author><name>Jury</name><uri>http://www.blogger.com/profile/03689536270094042865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_i9Xa8Y8U7bU/SxzXU4bfrWI/AAAAAAAABZ8/GjoxEAReG4k/S220/Me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2883139146420963364.post-4399779113308804341</id><published>2010-01-11T02:09:00.000-08:00</published><updated>2010-01-11T02:09:56.767-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='тестирование'/><category scheme='http://www.blogger.com/atom/ns#' term='software estimation'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='учёт рисков'/><category scheme='http://www.blogger.com/atom/ns#' term='управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='риски'/><title type='text'>Почему тестирование занимает так много времени?</title><content type='html'>Наткнулся на интересную статью о тестировании. Особенно понравилось, что это описание можно использовать при оценке (или моделировании) будущих процессов тестирования на проекте. Автор описывает допущения при моделировании и условия, в которых модель справедлива. Предложенная модель больше приближена к жизни, чем оценки &lt;i&gt;линейного&lt;/i&gt; (последовательного, монотонного) тестирования, хоть и остаётся при этом только моделью.&lt;br /&gt;&lt;br /&gt;Избранные цитаты:&lt;br /&gt;&lt;i&gt;"Если вы работаете в тестировании достаточно давно, вам наверняка задавали этот вопрос — «Почему тестирование занимает так много времени?» Может быть, у вас есть заготовленный ответ на этот вопрос, а может и нет. Здесь я предлагаю модель, которая, я надеюсь, поможет вам справиться с менеджерами, которые задают подобные вопросы."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Наличие большого количества багов вызывает либо уменьшение покрытия, либо замедление тестирования, либо и то и другое сразу."&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;"Если вы нашли баги, значит впоследствии вам придётся проверять их исправление, что ещё сильнее уменьшает тестовое покрытие, или замедляет тестирование, или делает и то и другое сразу."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;"Тестирование занимает времени больше, чем мы ожидаем или надеемся, потому что когда мы планируем время на тестирование, мы не включаем в него время, необходимое для исследования выявленных проблем и подготовки баг-репортов, потому что мы не рассчитываем их найти."&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;"Тестирование занимает времени больше, чем мы ожидаем или надеемся, потому что мы используем неправильную модель того, что представляет собой тестирование и как оно протекает."&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Полностью статья доступна здесь: &lt;a href="http://software-testing.ru/library/testing/general-testing/911-why-is-testing-taking-so-long"&gt;http://software-testing.ru/library/testing/general-testing/911-why-is-testing-taking-so-long&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2883139146420963364-4399779113308804341?l=jury-ugolok.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jury-ugolok.blogspot.com/feeds/4399779113308804341/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jury-ugolok.blogspot.com/2010/01/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/4399779113308804341'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/4399779113308804341'/><link rel='alternate' type='text/html' href='http://jury-ugolok.blogspot.com/2010/01/blog-post.html' title='Почему тестирование занимает так много времени?'/><author><name>Jury</name><uri>http://www.blogger.com/profile/03689536270094042865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_i9Xa8Y8U7bU/SxzXU4bfrWI/AAAAAAAABZ8/GjoxEAReG4k/S220/Me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2883139146420963364.post-4943436159861611231</id><published>2009-12-14T11:51:00.000-08:00</published><updated>2009-12-14T11:58:02.578-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='risk management'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><category scheme='http://www.blogger.com/atom/ns#' term='учёт рисков'/><category scheme='http://www.blogger.com/atom/ns#' term='управление проектами'/><category scheme='http://www.blogger.com/atom/ns#' term='риски'/><category scheme='http://www.blogger.com/atom/ns#' term='risks'/><title type='text'>Учёт рисков при оценке трудоёмкости ПО и планировании проекта</title><content type='html'>&lt;h2&gt;Поговорим о рисках&lt;/h2&gt;&lt;img alt="dice" src="http://i081.radikal.ru/0912/62/1df7a1219814.png" /&gt;&lt;br /&gt;Что такое риски? Что является риском, а что нет? Как учитывать риски при оценке трудоёмкости ПО и планировании проекта? Об этом я предлагаю поговорить в этом топике. В то же время, чтобы не раздувать топик, здесь не будут обсуждаться вопросы &lt;i&gt;идентификации&lt;/i&gt; и &lt;i&gt;митигации рисков&lt;/i&gt; - действий по выявлению, уменьшению вероятности возникновения рисков и минимизации их последствий.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Типичные риски&lt;/h2&gt;Ниже приведу список типичных для проекта по разработке ПО рисков.&lt;br /&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;/li&gt;&lt;li&gt;использование относительно новых технологий в разработке&lt;/li&gt;&lt;li&gt;уход ключевых разработчиков/архитекторов&lt;/li&gt;&lt;li&gt;изменение ключевых сотрудников/представителей на стороне заказчика&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Что НЕ является риском&lt;/h2&gt;Является ли риском глобальное потепление? А изменение ситуации на рынке? А возможный распад компании заказчика или, не дай Бог, вашей компании?&lt;br /&gt;Правильнее спросить так: "Какие из этих рисков нужно учитывать в вашем проекте?"&lt;br /&gt;&lt;br /&gt;Как-то мы проводили оценки трудоёмкости очередного проекта. Обжегшись на недавнем проекте, мы постарались заложить в оценку будущего проекта как можно большое рисков. Получился очень внушительный список.&lt;br /&gt;&lt;br /&gt;Просмотрев этот список, мой предыдущий руководитель и наставник сказал нам: "Не надо закладывать свой непрофессионализм в риски!" Как? Меня и моих коллег обвинили в непрофессионализме?! Я тогда немного обиделся на него. Мы были вынуждены исключить довольно много пунктов, которые нам действительно казались рисками. С тех пор прошло некоторое время, я немного остыл, почитал книги, переосмыслил свой предыдущий опыт. Теперь я могу сказать, что вынужден с ним согласиться по ряду пунктов. Итак, перечислю некоторые случаи, которые не стоит считать рисками.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Риски, вероятность которых стремится к 100%&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;недостаточная квалификация сотрудников - это не риск по той причине, что квалификация должна изначально закладываться в оценки (например, используя  &lt;i&gt;фокус-фактор&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;регулярные отпуска сотрудников - их можно спрогнозировать более или менее заранее и внести в план проекта&lt;/li&gt;&lt;li&gt;прогнозируемые изменения требований - могут возникать в случае выбора определённой модели разработки (например, &lt;i&gt;Fixed Team&lt;/i&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Риски, вероятность которых стремится к 0&lt;/h3&gt;Этот список может показаться немного надуманным. Он приведён только для иллюстрации возможных "невероятных" рисков. Важно понимать, что одни и те же риски могут становиться невероятными в зависимости от характера проекта и его продолжительности.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;изменение существующего законодательства, в течение времени реализации краткосрочных проектов&lt;/li&gt;&lt;li&gt;полная потеря исходных кодов проекта&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Работы, которые являются частью проекта или методологии&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;ревью кода - бывает, что эту активность относят к рискам&lt;/li&gt;&lt;li&gt;рефакторинг - говорят так: "может потребоваться рефакторинг". Слово "может" сбивает с толку и наталкивает на мысль, что это риск. По сути же, рефакторинг относится к тем работам, которые планируют заранее. &lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Учёт рисков при планировании&lt;/h2&gt;Тут нужно сделать небольшое лирическое отступление и объяснить, почему риски необходимо &lt;i&gt;учитывать&lt;/i&gt;. Как говорил Том Де Марко, "&lt;i&gt;чтобы управлять проектом, достаточно управлять его рисками&lt;/i&gt;". Но! Это касается момента, когда проект уже стартовал. Когда есть, чем управлять. А теперь представим, что оценка и планирование проекта ведётся ещё до его старта. И вообще неизвестно, будет ли проект запущен или нет. Нужно ли учитывать риски на этом этапе? И да, и нет... &lt;br /&gt;&lt;br /&gt;С одной стороны, на начальном этапе, обладая недостаточной информацией, мы можем как перезаложиться на риски, так и недооценить их. С другой стороны, это не повод совсем их игнорировать. Приходится искать разумный баланс и всё же каким-то образом учитывать наиболее существенные для данного проекта риски, которые мы идентифицировали ещё в самом начале.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Определение терминов&lt;br /&gt;&lt;/h3&gt;Введём понятие "чистой трудоёмкости"&lt;br /&gt;&lt;i&gt;Чистую трудоёмкость&lt;/i&gt; определим как трудоёмкость в "идеальных человеко-днях", необходимую для реализации той или иной задачи. Для объяснения, что же здесь имеется в виду, я воспользуюсь описанием, взятым из книги &lt;a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches"&gt;Scrum and XP from the Trenches&lt;/a&gt; от опытного Scrum Master'а &lt;a href="http://www.infoq.com/author/Henrik-Kniberg"&gt;Henrik Kniberg&lt;/a&gt;'а. Итак: &lt;br /&gt;&lt;blockquote&gt;"&lt;i&gt;Идеальный человеко-день &lt;/i&gt;– это максимально продуктивный день, когда никто и ничто не отвлекает от основного занятия. Такие дни – редкость." (с) Henrik Kniberg&lt;br /&gt;&lt;/blockquote&gt;Другими словами, будем считать, что задача обладает такой трудоёмкостью при условии, что ни один из рисков не реализуется.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Равномерное распределение рисков по задачам или методика "спрятанной шляпы"&lt;/h3&gt;&lt;img src="http://i053.radikal.ru/0912/a6/e3c6208ef264.png" alt="image"/&gt;&lt;br /&gt;В качестве "вводной" приведу анекдот, рассказанный нам одним из топ-менеджеров в ответ на представленные оценки недавнего проекта:&lt;br /&gt;&lt;blockquote&gt;Сотрудник приезжает из командировки, подаёт expense report, а там, среди прочего, значится «Шляпа: $100»&lt;br /&gt;Его в бухгалтерии спрашивают.. &lt;br /&gt;- Что за шляпа такая?&lt;br /&gt;- Ну купил себе шляпу.. классная.. все дела.&lt;br /&gt;- $%&amp;*#! Иди меняй отчет!&lt;br /&gt;Ну приносит новый, там опять  «Шляпа: $100»&lt;br /&gt;Ну опять "$%&amp;*#!", иди меняй, чтобы не было никакой шляпы.&lt;br /&gt;Приносит… Смотрят - нормально все… не подкопаешься, шляпы нет… но сумма финальная как была так и осталась.&lt;br /&gt;Спрашивают: &lt;br /&gt;- А шляпа где?&lt;br /&gt;- Да там она… там… только вы ее хрен найдете!&lt;br /&gt;&lt;/blockquote&gt;Так вот, подобный метод можно применить и при учёте рисков.&lt;br /&gt;Например, один или несколько рисков, выраженные в виде некой дополнительной трудоёмкости, можно просто равномерно распределить по остальным конкретным задачам, как указано на фрагменте &lt;a href="http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0_%D0%93%D0%B0%D0%BD%D1%82%D0%B0"&gt;диаграммы Ганта&lt;/a&gt; ниже:&lt;br /&gt;&lt;img src="http://s44.radikal.ru/i103/0912/4e/a16c8773b6fb.png" alt="image"/&gt;&lt;br /&gt;Здесь синим цветом обозначены прямоугольники задач с чистой трудоёмкостью. Подписи - назначенные на задачи ресурсы (люди). Красным цветом обозначим прямоугольник, в котором сосредоточена трудоёмкость, которая добавляется за счёт срабатывания риска.&lt;br /&gt;Таким образом достигается, с одной стороны, учёт рисков в оценке, а, с другой стороны, нефокусирование на них. Именно такой метод учёта я встретил в &lt;a href="http://www.infoq.com/minibooks/scrum-xp-from-the-trenches"&gt;книге&lt;/a&gt;, на которую ссылался выше. Отмечу, что в этой книге явно не сказано, что это именно учёт рисков, но аналогия прослеживается очень чётко. Если заинтересует, то смотрите главу про планирование.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Выделение самостоятельных задач&lt;/h3&gt;Теперь представим, что мы идентифицировали какой-то риск, который завязан на оба ресурса, но не увеличивает продолжительность работ по решаемым ими задачам. Взгляните на диаграмму ниже:&lt;br /&gt;&lt;img src="http://s43.radikal.ru/i100/0912/52/bc09f8c882c9.png" alt="image"/&gt;&lt;br /&gt;Из рисунка видно, что общая продолжительность всех задач не увеличилась, т.к. прямоугольник риска расположен параллельно с другими прямоугольниками. Такой подход имеет смысл применять в том случае, если риск, увеличивая общую трудоёмкость задач, не сдвигает итоговых сроков. Такое бывает (когда общая продолжительность проекта не увеличивается), к сожалению, очень редко.&lt;br /&gt;&lt;br /&gt;Теперь обратимся к другой диаграмме:&lt;br /&gt;&lt;img src="http://s53.radikal.ru/i139/0912/e2/b5c357f0e4c5.png" alt="image"/&gt;&lt;br /&gt;Здесь красная задача-риск идёт последовательно (встык) с другими задачами. Таким образом, общая продолжительность работ (срок) увеличивается.&lt;br /&gt;&lt;br /&gt;Подход учёта рисков путём выделения самостоятельных задач имеет смысл в том случае, если для потребителей плана требуется обозначить риски в явном виде. Важно помнить, что задача-риск является фиктивной. В итоге, при реализации проекта данная задача либо выродится в конкретную задачу (новый синий прямоугольник), либо "вольётся" в состав других задач, либо вообще не будет выполняться. Подобный учёт важен именно на начальном этапе планирования, чтобы не потерять возможный сдвиг сроков или увеличение бюджета.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Выводы&lt;/h2&gt;Сделаю дополнительный акцент на том, что учёт рисков не означает отказ от борьбы с ними, это не попытка ухода от проблемы вместо её решения. Во многих случаях правильней будет именно создать такие условия, когда риск из разряда &lt;i&gt;вероятных&lt;/i&gt; переходит в разряд &lt;i&gt;невозможных&lt;/i&gt;. Возможно, однако, что часть рисков так и не смогут быть устранены. Именно в этом случае и будет полезно учесть подобные риски.&lt;br /&gt;&lt;br /&gt;Прошу простить, если топик оказался слишком длинным. Я и так ограничивал себя, где только мог. В частности, в посте совсем ничего нет о том, каким образом учёт рисков можно использовать в методике &lt;a href="http://ru.wikipedia.org/wiki/PERT"&gt;PERT&lt;/a&gt;. Если тема окажется достаточно востребованной, то на эту тему будет создан отдельный топик.&lt;br /&gt;Спасибо тем, кто дочитал до конца!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2883139146420963364-4943436159861611231?l=jury-ugolok.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jury-ugolok.blogspot.com/feeds/4943436159861611231/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jury-ugolok.blogspot.com/2009/12/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/4943436159861611231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/4943436159861611231'/><link rel='alternate' type='text/html' href='http://jury-ugolok.blogspot.com/2009/12/blog-post.html' title='Учёт рисков при оценке трудоёмкости ПО и планировании проекта'/><author><name>Jury</name><uri>http://www.blogger.com/profile/03689536270094042865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_i9Xa8Y8U7bU/SxzXU4bfrWI/AAAAAAAABZ8/GjoxEAReG4k/S220/Me.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2883139146420963364.post-744861270499987465</id><published>2009-11-27T04:27:00.000-08:00</published><updated>2009-11-27T04:38:50.836-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software estimation'/><category scheme='http://www.blogger.com/atom/ns#' term='black art'/><category scheme='http://www.blogger.com/atom/ns#' term='sins'/><category scheme='http://www.blogger.com/atom/ns#' term='Steve McConnell'/><category scheme='http://www.blogger.com/atom/ns#' term='estimation'/><title type='text'>Десять смертных грехов в оценке трудоёмкости разработки программного обеспечения</title><content type='html'>&lt;h2&gt;Введение&lt;/h2&gt;&lt;br /&gt;В этом топике я хочу представить вам, дорогие читатели, пересказ &lt;a href="http://construx.com/Page.aspx?hid=2929"&gt;вебинара&lt;/a&gt; от человека, чьё имя не нуждается в представлении. Для того, чтобы изложить часовой вебинар в виде небольшого топика, мне пришлось значительно ужать комментарии автора, поэтому я сознательно не помечаю топик как "перевод". В этот раз &lt;a href="http://www.construx.com/Page.aspx?hid=535"&gt;Стив МакКоннелл&lt;/a&gt; решил поделиться с нами своим опытом в виде коротких тезисов, в которых он отражает самые страшные ошибки при оценке трудоёмкости разработки программного обеспечения. В 1998 году читатели журнала Software Development назвали Стива одним из самых влиятельных людей в индустрии разработки программного обеспечения на равне с Биллом Гейтсом и Линусом Торвальдсом. Стив - автор книги &lt;a href="http://www.microsoft.com/learning/en/us/book.aspx?ID=2425&amp;amp;locale=en-us"&gt;"Software Estimation. Demystifying The Black Art"&lt;/a&gt; - одной из самых популярных книг в области оценки трудоёмкости разработки ПО. Надо признаться, что вебинар был проведён относительно давно (июнь 2009 года), но информация, представленная там, совсем не устарела. Сам топик будет построен следующим образом. Заголовки будут достаточно точно переведены из презентации, которую показывал Стив, а в остальном я постараюсь отразить только основные мысли, чтобы не перегружать топик. Если кто-то посчитает, что ту или иную мысль я излагаю неправильно - милости прошу в комментарии, можно будет меня поправить.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Десять Почти Смертных грехов в оценке трудоёмкости разработки ПО&lt;/h2&gt;&lt;br /&gt;Для "разогрева" Стив сначала перечисляет "почти смертные грехи", т.е. ещё не самые страшные, но всё равно очень серьёзные. Он их практически не комментирует.&lt;br /&gt;Итак, по мнению Стива, Почти Смертными грехами в оценке трудоёмкости являются следующие вещи:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;20. Оценивать сколько времени займёт сделать "ЭТО" до того, как кто-нибудь разберётся, что же "ЭТО" всё-таки такое&lt;/li&gt;&lt;li&gt;19. Предполагать, что наиболее достоверные оценки поступают от людей с самыми сильными голосовыми связками&lt;/li&gt;&lt;li&gt;18. Рассказывать кому-либо, что Вы пишете книгу по оценке трудоёмкости ПО, потому что они спросят "И когда вы планируете закончить свою книгу (&lt;i&gt;прим., оцениваете срок окончания&lt;/i&gt;)?"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;17. Делать оценки нового проекта, сравнивая его с предыдущим проектом…&lt;br /&gt;&lt;br /&gt;… оценки которого превышены… и в итоге понимая, что Вы основываете планы нового проекта на результатах предыдущего проекта вместо того, чтобы использовать информацию, адекватную текущей ситуации&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;17а. Делать оценки нового проекта, сравнивая его с предыдущим проектом…&lt;br /&gt;&lt;br /&gt;… в котором было очень много внеурочной работы… и в итоге понимая, что Вы так же закладываете много внеурочной работы в новый проект&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;16. Предполагать, что отдел продаж делает оценки лучше, чем сами разработчики&lt;/li&gt;&lt;li&gt;15. Делать оценки, предполагая, что никто не пойдёт на тренинг...&lt;br /&gt;&lt;br /&gt;… не пойдёт на митинг… никого не "сдёрнут" на другой проект…  никто не потребуется для поддержки "ключевого заказчика"… не пойдёт в отпуск… не заболеет...&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;14. Давать оценки с высокой степенью точности (напр., "64,7 дня") в то время, когда они основаны на оценке с низкой точностью (+- "2 месяца")&lt;/li&gt;&lt;li&gt;13. Верить, что результаты оценки, выполненные в коммерческом ПО, не идут ни в какое сравнение с результатами, выполненными карандашом на салфетке&lt;/li&gt;&lt;li&gt;12. Рассуждать, что чем раньше мы начнём отставать от плана, тем больше времени нам потребуется, чтобы сократить отставание&lt;/li&gt;&lt;li&gt;11. Доказывать, что разработчики (&lt;i&gt;прим., специально&lt;/i&gt;) занижают свои оценки так, чтобы они выглядели привлекательно&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;… последний проект, который удалось закончить раньше времени, был ещё при Рейгане!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Десять Смертных грехов в оценке трудоёмкости разработки ПО&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;1. Путать проектные цели и оценки&lt;/h3&gt;&lt;br /&gt;Типичная ситуация выглядит следующим образом. Руководство ставит задачу оценить трудоёмкость работы, добавляя при этом, что проект планируется показать на какой-нибудь ежегодной выставке где-нибудь за рубежом. Т.е., вроде как, и оцените, сколько надо... но надо тогда-то. Здесь оценка трудоёмкости перемешивается с целями проекта ( "показать на выставке в фиксированное время" ). Решение проблемы состоит в итеративном выравнивании целей и оценок. Например, для достижения цели можно уменьшить объём представляемого функционала, чтобы успеть всё сделать в срок.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;2. Говорить "Да" тогда, когда вы, на самом деле, подразумеваете "Нет"&lt;/h3&gt;&lt;br /&gt;Часто складывается так, что за столом переговоров, за которым обсуждаются оценки/сроки, люди делятся на две группы. По одну сторону располагаются разработчики, которые часто интровертивны, молоды и редко обладают даром убеждения... а по другую сторону сидят экстравертивные и "умудрённые опытом" сейлз-менеджеры, которые не только обладают навыками убеждения, но и, иногда, специально обучены убеждать. В такой ситуации очевидно, что независимо от качества оценок, "побеждает" тот, кто умеет лучше "убеждать", а не тот, чьи оценки более адекватные.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;3. Давать обещания на ранней стадии Конуса неопределённости&lt;/h3&gt;&lt;br /&gt;Перед вами так называемый "конус неопределённости" (или неуверенности... кому как нравится).&lt;br /&gt;&lt;br /&gt;&lt;img alt="image" src="http://img21.imageshack.us/img21/4673/conev.png" style="height: 261px; width: 429px;" /&gt;&lt;br /&gt;Это график, на горизонтальной оси которого указано время, а на вертикальной оси - значение ошибки, которая закладывается при оценке трудоёмкости. Как видно из графика, с течением времени, по мере того, как становится известно всё больше данных об оцениваемом проекте, о том, что же конкретно и в каких условиях придётся делать, "разброс" ошибки становится всё меньше.&lt;br /&gt;Суть же проблемы состоит в том, что нельзя давать обещания в тот момент времени (крайняя левая часть конуса), когда величина ошибки ещё слишком велика. Стив оценивает предел "уверенности" где-то в районе 1,5x, т.е. тот момент времени, когда вероятная ошибка будет составлять 1,5 раза как в большую, так и в меньшую сторону. Давать обещания раньше этого момента - заведомо подвергать себя слишком большому риску.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;4. Предполагать, что недооценка оказывает нейтральное влияние на результаты проекта&lt;/h3&gt;&lt;br /&gt;На эту мысль автор неоднократно делает акцент и в своей книге (см. Введение). Взгляните на график ниже.&lt;br /&gt;&lt;br /&gt;&lt;img alt="image" src="http://img3.imageshack.us/img3/8223/underestimation.png" style="height: 220px; width: 430px;" /&gt;&lt;br /&gt;Левая часть графика показывает зону недооценки (underestimation), правая часть графика зону переоценки (overestimation). По вертикали откладывается стоимость ошибки. Из графика видно, что стоимость переоценки растёт линейно (по &lt;a href="http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%BA%D0%BE%D0%BD_%D0%9F%D0%B0%D1%80%D0%BA%D0%B8%D0%BD%D1%81%D0%BE%D0%BD%D0%B0"&gt;закону Паркинсона&lt;/a&gt;). В то же время стоимость недооценки увеличивается лавинообразно по мере того, как возрастает ошибка недооценки необходимых усилий. В случае недооценки прогнозировать дополнительные усилия куда сложнее, чем в случае переоценки.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;5. Фокусироваться на методах оценки в то время, когда вы реально нуждаетесь в ИСКУССТВЕ оценки трудоёмкости разработки ПО&lt;/h3&gt;&lt;br /&gt;Оценка трудоёмкости в основе своей - это не только конкретные методики, но и практика их применения. Это набор удачных подходов, которые хорошо зарекомендовали себя. Искусством же является применение нужной методики в нужное время и в нужном месте.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;6. Делать оценки в "Зоне невероятности"&lt;/h3&gt;&lt;br /&gt;Здесь нужно пояснить, что же подразумевается под &lt;i&gt;зоной невероятности&lt;/i&gt;. Для произвольного проекта представим вот такой диалог (&lt;i&gt;прим. сильно сокращён&lt;/i&gt;):&lt;br /&gt;- Смогут ли 12 разработчиков закончить Проект за 10 месяцев?&lt;br /&gt;- Да, может быть - отвечаем мы.&lt;br /&gt;- А 15 разработчиков за 8 месяцев?&lt;br /&gt;- Ну да, - отвечаем мы - скорее да, чем нет.&lt;br /&gt;- А 30 за 4?&lt;br /&gt;- Вряд ли - становится очевидно, что 30 человек, скорее всего, не смогут сработаться за такой короткий срок.&lt;br /&gt;- 60 за 2 месяца?&lt;br /&gt;- Ну это уже смешно!, - ответите вы...&lt;br /&gt;- А 120 разработчиков за 1 месяц?&lt;br /&gt;- Ну а это вообще не смешно. Издевательство просто...&lt;br /&gt;Из этого диалога видно, что "сжатие" сроков при заданной трудоёмкости не может происходить бесконечно - есть предел. Так вот идея данного пункта состоит в том, чтобы не производить оценок за этим пределом. Такие оценки не могут быть состоятельными. Предел "на сжатие", по мнению Стива, находится где-то около 25% от номинальных оценок.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;7. Переоценивать выгоду от новых методов и технологий&lt;/h3&gt;&lt;br /&gt;Использование новых технологий сопряжено с:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;затратами на обучение&lt;/li&gt;&lt;li&gt;рисками, связанными с использованием непроверенной технологии&lt;/li&gt;&lt;li&gt;тем, что выгода от использования более совершенной технологии оказывается меньше, чем обычно заявлено&lt;/li&gt;&lt;/ul&gt;Личная рекомендация Стива: "Считать, что использование новой технологии в первый раз &lt;b&gt;снизит&lt;/b&gt; продуктивность разработки". И снова тезис: "Нет серебряной пули".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;8. Использовать только один метод оценки трудоёмкости&lt;/h3&gt;&lt;br /&gt;В этом пункте автор предостерегает от двух вещей:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;от использования только одной методики оценки&lt;/li&gt;&lt;li&gt;от усреднения значений, полученных разными методиками&lt;/li&gt;&lt;/ul&gt;При использовании разных методик важно понять, почему возникли различия.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;9. Пренебрегать специализированным ПО для оценки трудоёмкости&lt;/h3&gt;&lt;br /&gt;Моделирование при помощи компьютерных программ может повысить адекватность оценок. Естественно, использование специальных средств не гарантирует вам надёжность и адекватность оценок. Но при умелом использовании может заметно повысить их точность. Кроме того, автор даёт ссылку на &lt;a href="http://www.construx.com/Page.aspx?nid=68"&gt;сайт&lt;/a&gt; своей компании, где доступны бесплатные инструменты для проведения компьютерной оценки трудоёмкости разработки ПО. Одно из главных достоинств специального ПО в том, что результаты выглядят более &lt;b&gt;убедительно&lt;/b&gt; для "потребителей" оценок.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;10. Давать поспешные оценки&lt;/h3&gt;&lt;br /&gt;Последнее, но от этого не менее важное, утверждение состоит в предостережении от использования поспешных, необоснованных оценок. Важно всегда брать небольшой таймаут для проведения хотя бы небольших предварительных оценок.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Заключение&lt;/h2&gt;&lt;br /&gt;Я не буду пытаться убедить вас в истинности всех тех утверждений, которые делает Стив. Вы вольны полагаться на свои знания и опыт. Стив - человек с огромными знаниями и опытом, но он человек, а людям свойственно ошибаться. Если вы считаете, что где-то он не прав, то отпишитесь, пожалуйста, об этом в комментариях - будет очень интересно обсудить.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2883139146420963364-744861270499987465?l=jury-ugolok.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jury-ugolok.blogspot.com/feeds/744861270499987465/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jury-ugolok.blogspot.com/2009/11/blog-post.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/744861270499987465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/744861270499987465'/><link rel='alternate' type='text/html' href='http://jury-ugolok.blogspot.com/2009/11/blog-post.html' title='Десять смертных грехов в оценке трудоёмкости разработки программного обеспечения'/><author><name>Jury</name><uri>http://www.blogger.com/profile/03689536270094042865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_i9Xa8Y8U7bU/SxzXU4bfrWI/AAAAAAAABZ8/GjoxEAReG4k/S220/Me.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2883139146420963364.post-6478212906361408023</id><published>2009-11-10T03:13:00.000-08:00</published><updated>2009-11-27T04:37:27.072-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='customer'/><category scheme='http://www.blogger.com/atom/ns#' term='ccf'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><category scheme='http://www.blogger.com/atom/ns#' term='enterprise'/><category scheme='http://www.blogger.com/atom/ns#' term='care'/><category scheme='http://www.blogger.com/atom/ns#' term='microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='call center'/><title type='text'>Microsoft Customer Care Framework или как Microsoft предлагает заботиться о клиентах</title><content type='html'>&lt;h2&gt;Введение&lt;/h2&gt;&lt;img alt="" border="0" src="http://img258.imageshack.us/img258/6835/test1l.jpg" title="CCF" /&gt;&lt;br /&gt;На фоне того, как Google пытается стать для нас Всем, приятно видеть, что и другие компании не сдаются и продолжают развивать новые сервисы и технологии…&lt;br /&gt;&lt;br /&gt;Побывав на прошлой неделе в Microsoft, с удовольствием послушал рассказ о системе &lt;a href="http://www.microsoft.com/serviceproviders/ccf/default.mspx"&gt;Microsoft Customer Care Framework&lt;/a&gt;. Более того, удалось побеседовать с одним из ведущих архитекторов этой системы.&lt;br /&gt;&lt;habracut text="Читать далее..."&gt;&lt;/habracut&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;О Системе&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Коротко о том, что это за система и с чем её едят.&lt;br /&gt;Сама компания  Microsoft описывает свою систему следующим образом. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Microsoft Customer Care 2009 (CCF)  - это сквозная программная инфраструктура для поставки составных приложений. Она (система) включает в себя как компоненты для разработки приложений, так и компоненты времени выполнения. Приложения, построенные на базе CCF, предоставляют унифицированный доступ к информации заказчика, распределённой по множеству корпоративных приложений, агрегируя различные режимы взаимодействия с заказчиком.  ©&lt;i&gt;Вольный перевод из &lt;a href="http://msdn.microsoft.com/en-us/isg/bb421305.aspx"&gt;MSDN&lt;/a&gt;&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Чтобы проще было понять, о чём идёт речь, попробую объяснить "на пальцах".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Типичный сценарий&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Представьте себя сотрудником службы поддержки огромного банка. Вы сидите в наушниках с микрофоном и ждёте, пока на телефонную службу поступит звонок от разъярённого клиента. Теоретически клиент может позвонить по какой угодно проблеме. У него может быть заблокирована пластиковая карта, он хочет узнать, сколько ещё ему осталось платить по кредиту, уточнить детали условий нового вклада и т.д. Как правило, в банках за услугу или группу услуг отвечают разные приложения, с разными UI, в которых могут быть разные учётные записи авторизованных пользователей.&lt;br /&gt;Теперь представим себе картину… Звонит клиент по какому-то из вышеперечисленных вопросов (а, может, и по нескольким вопросам). Ему отвечает сотрудник службы поддержки. Просит подождать минутку, пока он найдёт и запустит нужное приложение. Потом ещё минутку, т.к. ему нужно залогиниться под своей учётной записью именно в данной системе. Потом ещё минутку, т.к. сотрудник ошибся выбранным приложением. И вот наступает долгожданный момент… Сотрудник службы поддержки неожиданно понял, что ответить на данный вопрос он не может и нужно перенаправить звонок в другой отдел… В общем, немудрено, что в подобной ситуации клиент может просто не сдержаться и бросить трубку об пол в порыве ярости. Ну кому хочется висеть по 10 минут на трубке и по 3 раза объяснять одну и ту же проблему совершенно разным людям? Кстати, вполне возможно, что кто-то из вас уже оказывался в подобной ситуации на стороне клиента. Не было чувства, что банку на вас просто наплевать и он не &lt;b&gt;заботится&lt;/b&gt; о своих клиентах?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Заботимся о клиентах&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Чтобы решить ряд проблем, возникающих в описанном выше сценарии, Microsoft разработала концепцию, которая позволяет объединять в одном пользовательском окне, называемом &lt;b&gt;Agent Desktop&lt;/b&gt; , всё множество внутренних корпоративных приложений, необходимых сотруднику службы поддержки для работы с клиентом.&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" src="http://img509.imageshack.us/img509/3251/ccf0201ils.jpg" style="height: 328px; width: 420px;" title="" /&gt;&lt;br /&gt;&lt;br /&gt;При этом как сама Система, так и платформа обладают рядом очень полезных свойств и возможностей. Наиболее важные из них, на мой взгляд, перечислю ниже:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Поддержка &lt;a href="http://en.wikipedia.org/wiki/Single_sign-on"&gt;SSO&lt;/a&gt;&lt;/li&gt;&lt;li&gt;UI всех приложений, необходимых оператору, отображаются в одном окне на разных закладках &lt;/li&gt;&lt;li&gt;Так как интеграция происходит на уровне UI, разработка интеграционного приложения происходит очень быстро&lt;/li&gt;&lt;li&gt;Наиболее важные части платформы поставляются с открытыми исходными кодами&lt;/li&gt;&lt;li&gt;Контекст клиента доступен разным интегрируемым приложениям&lt;/li&gt;&lt;li&gt;Система объединяет в себе различные средства коммуникаций&lt;/li&gt;&lt;li&gt;Система легко масштабируется&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;А теперь подробнее по каждому пункту.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Single Sign On&lt;/h3&gt;&lt;br /&gt;За счёт того, что оператор вводит всего один логин и пароль для доступа, значительно экономится время, необходимое для входа во множество разнородных приложений.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Единый UI&lt;/h3&gt;&lt;br /&gt;За счёт объединения UI оператору не нужно переключаться между приложениями. Вся информация удобно размещается в одном окне, включая общую контекстную информацию: клиент, проблема и пр. Тут может быть небольшая "засада". Если приложение рассчитано на высокое разрешение, то при размещении на закладках Agent Desktop'а могут появиться полосы прокрутки. Это может доставлять неудобство оператору.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Быстрая интеграция&lt;/h3&gt;&lt;br /&gt;Объединение приложений происходит, прежде всего, на уровне UI, поэтому нет надобности детально прорабатывать интеграционные механизмы. В базовом варианте вообще не надо что-либо программировать. Программирование требуется тогда, когда нужно обеспечить обмен информацией между приложениями и контекстом. В этом случае в игру вступают .Net-адаптеры, которые способны взаимодействовать с  &lt;b&gt;пользовательским интерфейсом&lt;/b&gt; приложений, извлекая и размещая в них информацию.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Открытый исходный код&lt;/h3&gt;&lt;br /&gt;Да-да, Microsoft готова идти навстречу своим партнёрам и предоставляет исходные коды некоторых частей платформы, что позволяет реализовывать самые изощрённые методы интеграции. Как я понял, речь идёт об исходных кодах Agent Desktop'а. Возможно, что-то ещё.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Клиентский контекст&lt;/h3&gt;&lt;br /&gt;&lt;i&gt;Контекстом&lt;/i&gt; клиента называют наиболее общую информацию, которой интегрируемые приложения могут обмениваться между собой.&lt;br /&gt;Обычно контекст отображается в отдельном фрейме Agent Desktop'а, расположенном в верхней части главного окна, над фреймом, объединяющим вкладки интегрируемых приложений. Состав информации и её вид определяется разработчиками.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Многоканальное общение&lt;/h3&gt;&lt;br /&gt;Система также способна консолидировать разные каналы, по которым приходят запросы от клиентов. Это электронная почта, служба мгновенных сообщений, &lt;a href="http://en.wikipedia.org/wiki/Interactive_voice_response" title="Interactive Voice Response"&gt;IVR&lt;/a&gt; , SMS и пр.&lt;br /&gt;Такой подход позволяет хранить в одном месте все информационные потоки и получать к ним быстрый и лёгкий доступ.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Масштабирование&lt;/h3&gt;&lt;br /&gt;CCF построен на базе стандартных Microsoft Composite Application Blocks с учётом современных требований по многопоточности. Как уровень базы данных, так и уровень сервера приложений легко кластеризуется, что позволяет Системе обеспечивать бесперебойную работу в режиме "24*7" и выдерживать высокие нагрузки при работе с большим числом пользователей.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Немного технических деталей&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;На самом деле, много технических деталей я вам просто не смогу рассказать, так как практического опыта у меня нет. Но есть некоторые элементы, которые я уловил в процессе разговора с Архитектором. Прежде всего, надо чётко понимать, что CCF - это именно Framework, а не просто приложение/система. То есть это набор инструментов, позволяющих создавать Систему. Там есть и много готовых модулей, механизмов, расширений и т.д. Microsoft позаботилась и о разработчиках, продумав довольно много деталей и создав как можно больше готовых средств для интеграции с уже существующими приложениями.&lt;br /&gt;&lt;br /&gt;&lt;img alt="" border="0" src="http://img264.imageshack.us/img264/5306/ccfarchitecture.png" style="height: 226px; width: 420px;" title="" /&gt;&lt;br /&gt;&lt;br /&gt;Приложение, созданное на базе MS CCF, будет построено с учётом современных многоуровневых подходов.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;База данных&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;В качестве базы данных, как и следовало ожидать, предлагается использовать Microsoft SQL Server. Уже на этом этапе Microsoft рекомендует подумать о кластере.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;В базе данных хранится информации об аудите действий пользователей Системы и конфигурация, которая обновляется администраторами Системы. Кроме того, в БД сохраняется контекст пользователя в том случае, если необходимо перенаправить входящий звонок другому оператору.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Уровень сервера приложений&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;На уровне сервера приложений выполняются методы доступа к данным (предполагаю, что некий &lt;a href="http://en.wikipedia.org/wiki/Data_access_layer" title="Data Access Layer"&gt;DAL&lt;/a&gt;), а также бизнес-логика, которая может быть описана в терминах &lt;a href="http://en.wikipedia.org/wiki/Windows_Workflow_Foundation" title="Windows Workflow Foundation"&gt;WWF&lt;/a&gt; с использованием, кстати говоря, визуальных средств разработки.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Пользовательский интерфейс&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;UI представляет из себя классическое Windows .Net приложение, которое способно отрисовывать в себя (в закладки - Tab Strip Control) главные окна других приложений как Windows UI, так и Web UI. Хитрость решения состоит в том, что Agent Desktop оборачивает вызов других приложений таким образом, что они отрисовывают себя не на Desktop (как это происходит по умолчанию), а в закладки самого Agent Desktop'а.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Обмен данными происходит прямо через элементы управления окон (в случае Windows приложений) или через HTTP-GET, HTTP-POST, SOAP (в случае Web-приложений). Благодаря такому подходу не требуется согласование интерфейсов между агрегирующим приложением и его агрегатами.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ещё раз отмечу, что приложения могут ничего не знать о существовании родительского окна (Agent Desktop'а) и других приложений, с которыми происходит интеграция. Они не обязаны быть написаны по каким-то жёстким стандартам или с поддержкой каких-то строгих протоколов. Это могут быть самые обычные windows, web приложения или даже консольные терминалки, которые используются в компании уже много лет. Нет необходимости их как-то адаптировать или переписывать. Всё происходит прозрачно для них самих.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Заключение&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Как видно из описания, Система, построенная на базе MS CCF, позволяет заметно сэкономить время, а также уменьшить количество ошибок в процессе обслуживания заявок клиентов. Что, в свою очередь, означает снижение стоимости обслуживания и повышение уровня удовлетворённости Клиентов. В целом, эта штука мне показалась довольно интересной. Прежде всего, интересной по своей, на мой взгляд, оригинальной идее - интеграции на уровне UI. На самом деле, здесь я описал только верхушку айсберга. Я совсем не затронул возможности CCF, связанные с интеграцией с BizTalk, с инфраструктурой SOA и т.д. Всего и не осветить в рамках данной статьи. Надеюсь, удастся "пощупать" её где-нибудь в более реальном применении и тогда уже поделиться с вами деталями применения. Спасибо, что дочитали до конца. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S.: Более плотно с описанной выше платформой можно ознакомиться &lt;a href="http://www.microsoft.com/serviceproviders/ccf/default.mspx" title="Microsoft Customer Care Framework"&gt;здесь&lt;/a&gt;.&lt;br /&gt;Технические статьи &lt;a href="http://msdn.microsoft.com/en-us/library/aa306213.aspx" title="MSDN"&gt;тут&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2883139146420963364-6478212906361408023?l=jury-ugolok.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jury-ugolok.blogspot.com/feeds/6478212906361408023/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://jury-ugolok.blogspot.com/2009/11/microsoft-customer-care-framework.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/6478212906361408023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2883139146420963364/posts/default/6478212906361408023'/><link rel='alternate' type='text/html' href='http://jury-ugolok.blogspot.com/2009/11/microsoft-customer-care-framework.html' title='Microsoft Customer Care Framework или как Microsoft предлагает заботиться о клиентах'/><author><name>Jury</name><uri>http://www.blogger.com/profile/03689536270094042865</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_i9Xa8Y8U7bU/SxzXU4bfrWI/AAAAAAAABZ8/GjoxEAReG4k/S220/Me.JPG'/></author><thr:total>0</thr:total></entry></feed>
