Обмена |
|
Контроля |
результатами |
|
разработки |
|
|
|
Используется для
Рабочий продукт
|
Должен иметь |
|
|
Требует |
||
|
|
|||||
|
|
|
|
|
|
|
Цель |
|
Пользователь |
|
Накладные |
||
|
|
расходы |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 3.2.
Дисциплина обязательств
В основе разделения обязанностей в бизнесе и промышленном производстве лежит, корпоративных правил и норм лежит определенная деловая этика, форма отношений – дисциплина обязательств. Она широко используется на практике и является одним из возможных форм социального взаимоотношения между людьми. Привнесение в бизнес и промышленность иных моделей человеческих отношений – семейных, сексуальных, дружеских и т.д. часто наносит делам серьезный урон, порождает конфликтность, понижает эффективность.
Основой этой формы отношений являются обязательства, которые:
даются добровольно;
не даются легко – работа, ресурсы, расписание должны быть тщательно учтены;
между сторонами включает в себя то, что будет сделано, кем и в какие сроки;
открыто и публично сформулированы (то есть это не “тайное знание”).
Кроме того:
ответственная сторона стремится выполнить обязательства, даже если нужна помощь;
до наступления deadline, как только становится очевидно, что работа не может быть закончена в срок, обсуждаются новые обязательства.
Отметим, что дисциплина обязательств не является каким-то сводом правил, законов, она отличается также от корпоративной культуры. Это – определенный групповой психический феномен, существующий в обществе современных людей. Приведенные выше пункты не являются исчерпывающим описанием этого феномена, но лишь проявляют и обозначают его, так сказать, вызывают нужные воспоминания.
Дисциплина обязательств, несмотря на очевидность, порой, не просто реализуется на практике, например, в творческих областях человеческой деятельности, в области
16
обучения и т.д. Существуют отдельные люди, которым эта дисциплина внутренне чужда вне зависимости от их рода деятельности.
Сдругой стороны, люди, освоившие эту дисциплину, часто стремятся применять ее
вдругих областях жизни и человеческих отношений, что оказывается не всегда оправданным. Подчеркнем, что данная дисциплина является далеко не единственной моделью отношений между людьми. В качестве примера можно рассмотреть отношения в семье или дружбу, что, с очевидностью, не могут быть выражены дисциплиной обязательств. Так, вместо точности и пунктуальности в этих отношениях важно эмоционально-чувственное сопереживание, без которого они невозможны.
Дисциплине обязательств уделяется много внимания в рамках MSF, поскольку там
вмодели команды нет лидера, начальника. Эта дисциплина реализована также в Scrum: Scrum-команда имеет много свобод, и в силу этого – большую ответственность. Регламентируются также правила действий, когда обязательства не могут быть выполнены такой командой.
Проект
Классическое операционное разделение труда идет еще от Адама Смита и является сутью массового индустриального производства. То есть существует четко налаженный процесс работы и имеются области специализации – один цех точит, другой строгает, третий собирает, четвертый красит и т.д. Пропускная способность такого производства намного превосходит выполнение всей работы одним человеком или одной группой. Таким образом в XIX веке операционное разделение труда стало основой мануфактур, вытеснивших индивидуальное, ремесленное производство. В начале XX века эту структуру работ перенесли и на управление – то есть многочисленные менеджеры контролировали отдельные участки работ.
Однако высокий уровень сложности ряда задач в промышленности и бизнесе не позволяет (к счастью!) так работать везде. Существует много творческих, новых задач, где, быть может, в будущем и удастся создать конвейеры, но в данный момент для их решения требуется существенная концентрация сил и энергии людей, неожиданные решения, а также удача и легкая рука. Это и есть область проектов.
Проект́ – это уникальная (в отличии от традиционной пооперационной промышленного производства) деятельность, имеющая начало и конец во времени, направленная на достижение определённого результата/цель, создание определённого, уникального продукта или услуги, при заданных ограничениях по ресурсами и срокам, а также требованиям к качеству и допустимому уровню риска.
В частности, разработка программного обеспечения, является, преимущественно, проектной областью.
Необходимо различать проекты промышленные и проекты творческие. У них разные принципы управления. Сложность промышленных проектов – в большом количестве разных организаций, компаний и относительной уникальности самих работ. Пример – строительство многоэтажного дома. Сюда же относятся различные международные проекты и не только промышленные – образовательные, культурные и пр. Задача в управлении такими проектами – это все охватить, все проконтролировать, ничего не забыть, все свести воедино, добиться движения, причем движения согласованного.
Творческие проекты характеризуются абсолютной новизной идеи – новый сервис, абсолютно новый программный продукт, какого еще не было на рынке, проекты в области искусства и науки. Любой начинающий бизнес, как правило, является таким вот творческим проектом. Причем новизна в подобных проектов не только абсолютная – такого еще не было. Такое, может, уже и было, но только не снами, командой проекта. То есть присутствует огромный объем относительной новизны для самих людей, которые воплощают этот проект.
17
Проекты по разработке программного обеспечения находятся между двумя этими полюсами, занимая в этом пространстве различное положение. Часто они сложны потому, что объемны и находятся на стыке различных дисциплин – того целевого бизнеса, куда должен встроиться программный продукт, и сложного, нетривиального программирования. Часто сюда добавляется еще разработка уникального электронномеханического оборудования. С другой стороны, поскольку программирование активно продвигается в разные сферы человеческой деятельности, то происходит это путем создания абсолютно новых, уникальных продуктов, и их разработка и продвижение обладают всеми чертами творческих проектов.
Управление проектами (project management) – область деятельности, в ходе которой, в рамках определенных проектов, определяются и достигаются четкие цели при нахождении компромисса между объемом работ, ресурсами (такими как время, деньги, труд, материалы, энергия, пространство и др.), временем, качеством и рисками.
Отметим несколько важных аспектов управления проектами.
Stakeholedrs – это люди/стороны, которые не участвуют непосредственно в проекте, но влияют на него и или заинтересованы в его результатах. Это могут быть будущие пользователи системы (например, в ситуации, когда они и заказчик – это не одно и то же), высшее руководство компании-разработчика и т.д. Идентификация всех stakeholders и грамотная работа с ними – важная составляющая успешного проектного менеджмента
Project scope – это границы проекта. Это очень важное понятие для программных проектов в виду изменчивости требований. Часто бывает, что разработчики начинают создавать одну систему, а после, постепенно, она превращается в другую. Причем для менеджеров по продажам, а также заказчика, ничего радикально не произошло, а с точки зрения внутреннего устройства ПО, технологий, алгоритмов реализации, архитектуры – все радикально меняется. За подобными тенденциями должен следить и грамотно с ними разбираться проектный менеджмент.
Компромиссы – важнейший аспект управления программными проектами в силу согласовываемости ПО. Важно не потерять все согласуемые параметры и стороны и найти приемлемый компромисс. Одна их техник управления компромиссами будет рассказана в контексте изучения методологии MSF.
При разработке программных проектов, следуя MSF 3.1, важны следующие области управления.
Область управления проектами |
|
Описание |
||
|
|
|
|
|
Планирование |
и |
мониторинг |
Интеграция и синхронизация планов проекта; |
|
проекта, контроль за изменениями в |
организация процедур и систем управления и |
|||
проекте (Project planning / Tracking / |
мониторинга проектных изменений |
|||
Change Control) |
|
|
|
|
|
|
|
||
Управление рамками проекта (Scope |
Определение |
и распределение объема работы |
||
Management) |
|
|
(рамок проекта); управление компромиссными |
|
|
|
|
решениями в проекте |
|
|
|
|||
Управление календарным графиком |
Составление календарного графика исходя из |
|||
проекта (Schedule Management) |
оценок трудозатрат, упорядочивание задач, |
|||
|
|
|
соотнесение |
доступных ресурсов с задачами, |
|
|
|
18 |
|
|
|
|
применение статистических методов, поддержка |
||||||||
|
|
|
календарного графика |
|
|
|
|
|
|||
|
|
|
|
||||||||
Управление |
стоимостью |
(Cost |
Оценки стоимости исходя из оценок временных |
||||||||
Management) |
|
|
затрат; отчетность о ходе проекта и его анализ; |
||||||||
|
|
|
анализ затратных рисков; функционально- |
||||||||
|
|
|
стоимостной анализ (value analysis) |
|
|
||||||
|
|
|
|
||||||||
Управление |
персоналом |
(Staff |
Планирование ресурсов; формирование проектной |
||||||||
Resource Management) |
|
команды; разрешение конфликтов; планирование и |
|||||||||
|
|
|
управление подготовкой |
|
|
|
|
|
|||
|
|
|
|
|
|||||||
Управление |
коммуникацией |
Коммуникационное |
планирование |
(между |
|||||||
(Communications Management) |
проектной |
|
группой, |
|
заказчиком/спонсором, |
||||||
|
|
|
потребителями/пользователями, |
|
|
|
|||||
|
|
|
др. заинтересованными |
|
лицами); |
отчетность |
|||||
|
|
|
о ходе проекта |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
Управление |
рисками |
(Risk |
Организация процесса управления рисками в |
||||||||
Management) |
|
|
команде и содействие ему; обеспечение |
||||||||
|
|
|
документооборота управления рисками |
|
|||||||
|
|
|
|
|
|
|
|||||
Управление |
снабжением |
Анализ |
цен |
поставщиков |
услуг |
и/или |
|||||
(Procurement) |
|
|
аппаратного/программного |
|
|
обеспечения; |
|||||
|
|
|
подготовка |
|
документов |
об |
инициировании |
||||
|
|
|
предложений (requests for proposals – RFPs), выбор |
||||||||
|
|
|
поставщиков и субподрядчиков; составление |
||||||||
|
|
|
контрактов и переговоры об их условиях; |
||||||||
|
|
|
договора; заказы на поставку и платежные |
||||||||
|
|
|
требования |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Управление |
качеством |
(Quality |
Планирование |
|
качества, |
|
определение |
||||
Management) |
|
|
применяемых |
|
стандартов, |
документирование |
|||||
|
|
|
критериев качества и процессов его измерения |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
Литература
1.W.Humphrey. Managing the Software Process. Addison-Wesley, 1989. 494 p.
2.Д.Ахен, А.Клауз, Р.Тернер. CMMI: комплексный подход к совершенствованию процессов. Пер с англ. М.:МФК. 2005. 330 с.
3.Carnegie Mellon University Software Engineering Institute (2006). Retrieved on 22 August 2007. http://www.sei.cmu.edu/publications/documents/06.reports.
19
Лекция 4. Архитектура ПО
Обсуждение
Как-то раз один менеджер объяснял основные идеи одного достаточно крупного проекта, которым он руководил. Он начертил на доске три кубика: frontend, backend, tools. И сказал, что это и есть главное строение проекта. И в смысле внутреннего устройства продукта, и в смысле распределения работ в команде по трем дистанционно разнесенным центрам разработки. Задачи backend сложные, ресурсоемкие, выполняются пакетно. Они отделены от графического интерфейса продукта (frontend), который также непросто устроен. Frontend – это пользовательский интерфейс: сложный, параметризуемый, с рядом встроенных пользовательских сервисов (в частности, браузер информации), а также настраиваемый. Обе этих подсистемы взаимодействуют друг с другом через хорошо определенный и детально описанный программный интерфейс: алгоритмы backend разбиты на методы, которые frontend может вызывать по особым правилам, с параметрами, выстраивая в цепочку для достижения своих задач. «Сбоку» от всего этого находятся дополнительные tools. Они интегрируются во frontend, но не пользуются методами backend, а реализуют свои задачи самостоятельно. Эти задачи не требуют сложной пакетной обработки, а нацелены на интерактивное взаимодействие с пользователем. При их реализации особенно много внимания уделялось usability.
Каждая из трех подсистем требовала от разработчиков особых навыков. В случае backend это было умение и опыт по реализации такого рода пакетных алгоритмов, в случае с frontend – умение создавать сложный пользовательский интерфейс, в случае с tools требовалось искусство в проектировании и реализации «легковесных» инструментов, предоставляющих пользователям системы дополнительные сервисные возможности. В том, чтобы разделить работы таким образом, был еще и ряд политических аспектов. В частности, руководство проекта хотело иметь процесс разработки пользовательского интерфейса рядом с собой, в одном из трех центров разработки, который совпадал со штаб-квартирой. Считалось, что внешний вид продукта очень важен для его успешной продажи и требует особенного внимания.
В результате выполнения проекта (а он развивался более 15 лет, достигая в апогее до 150 человек, одновременно занятых в нем) такая четкая структура несколько сместилась – так географически интерфейс почти «переехал» в тот центр, где разрабатывался backend. Но в целом такое сквозное разделение проекта на части оставалось много лет и было основным скелетом всей разработки. Это и есть пример архитектуры программного проекта.
Определение
Будем понимать под архитектурой ПО внутреннюю структуру продукта (компоненты и их связи), основы пользовательского интерфейса продукта, а также квинтесенцию знаний и решений, являющихся инструментом разработки и управления проектом. То есть архитектура – это сквозная концепция или набор таковых для преодоления энтропии и хаоса, стремящихся «проглотить» разработку в виду сложности, нематериальности, согласовываемости и изменчивости ПО. При этом мы не разделяем продукт и проект, так как на практике это, как правило, одно целое, причем эта «сквозность», если она имеется, является «сильной» стороной данной разработки.
Часто под архитектурой понимают например, только внутреннее устройство ПО, выраженное в UML-диаграммах. Вот шутка на тему того, что архитектуру нельзя понимать односторонне. Одного известного трансляторщика спросили, почему в его знаменитом трансляторе ровно 21 просмотр. Ожидали услышать перечисление про алгоритмических проблем, которые таким способом удалось преодолеть, что-то про
20