В неформальной демократической бригаде поручаемая ей работа обсуждается совместно всеми ее членами, а задания между ее членами распределяются согласованно, в зависимости от способностей и опыта членов бригады. Один из членов такой бригады является руководителем бригады. Он также выполняет некоторые задания, распределяемые между членами бригады. Неформальные демократические бригады могут весьма успешно справляться с порученной им работой, если большинство членов бригады являются опытными и компетентными специалистами. Если же неформальная демократическая бригада состоит в основном из неопытных и некомпетентных членов, в деятельности бригады могут возникать большие трудности. Без наличия в бригаде хотя бы одного квалифицированного и авторитетного члена, способного координировать и направлять работу членов бригады, эти трудности могут привести к неудаче проекта.
В бригаде ведущего программиста за разработку порученной программной подсистемы несет полную ответственность один человек — ведущий программист (chief programmer), являющийся лидером бригады: он сам конструирует эту подсистему, составляет и отлаживает необходимые программы, пишет документацию к подсистеме. Ведущий программист выбирается из числа опытных и одаренных программистов. Все остальные члены такой бригады в основном создают условия для наиболее продуктивной работы ведущего программиста. Организацию такой бригады обычно сравнивают с хирургической бригадой. Ядро бригады ведущего программиста составляют три члена бригады: помимо ведущего программиста в него входит дублер ведущего программиста и администратор базы данных разработки.
Дублер ведущего программиста (backup programmer) также является квалифицированным и опытным программистом, способным выполнить любую работу ведущего программиста, но сам он эту работу не делает. Главная его обязанность — быть в курсе всего, что делает ведущий программист. Он выступает в роли оппонента ведущего программиста при обсуждении его идей и предложений, но решения по всем обсуждаемым вопросам принимает единолично ведущий программист.
Администратор базы данных разработки (librarian) отвечает за сопровождение всей документации (включая версии программ), возникающей в процессе разработки программной подсистемы, и снабжает членов бригады информацией о текущем состоянии разработки. Эта работа выполняется с помощью соответствующей инструментальной компьютерной поддержки. В зависимости от объема и характера порученной работы в бригаду могут быть включены дополнительные члены:
• распорядитель бригады, выполняющий административные функции;
• технический редактор, осуществляющий доработку и техническое редактирование документов, написанных ведущим программистом;
• инструментальщик, отвечающий за подбор и функционирование программных средств, поддерживающих разработку программной подсистемы;
• тестировщик, готовящий подходящий набор тестов для отладки разрабатываемой программной подсистемы;
• один или несколько младших программистов, осуществляющих кодирование отдельных программных компонент по спецификациям, разработанным ведущим программистом.
Кроме того, к работе бригады может привлекаться для консультации эксперт по языку программирования.
Бригада по контролю качества состоит из ассистентов (рецензентов) по качеству ПО. В ее обязанности входят смотры тех или иных частей ПО или всего ПО в целом с целью поиска возникающих проблем в процессе его разработки. Смотру подлежат все программные компоненты и документы, включаемые в ПО, а также процессы их разработки. В процессе смотра учитываются требования, сформулированные в спецификации качества ПО, в частности, проверяется соответствие исследуемого документа или технологического процесса стандартам, указанным в этой спецификации. В результате смотра формулируются замечания, которые могут фиксироваться письменно или просто передаваться разработчикам устно.
12.3. ПОДБОР КОМАНДЫ
Каждая разработка собирает вокруг себя команду проекта. Эта команда проекта состоит из личностей нескольких типов: конечные пользователи; разработчики; начальник отдела; начальник отдела информационных систем; ответственный за гарантию качества; группа, ответственная за бета-тестирование.
Конечные пользователи осуществляют ввод тестов в систему, которая разрабатывается, обеспечивают обратную связь в проекте интерфейса, проводят бета-тестирование и помогают управлять определением достижения конечной цели.
Разработчики отвечают за исследования, проект и создание программного обеспечения, включая альфа-тестирование своей работы. Один из разработчиков является руководителем команды проекта, регулирующим поток информации между членами команды.
Начальник отдела отвечает за достоверность данных, выдаваемых этим отделом информационной системе. Кроме того, начальник отдела отвечает за то, соответствует ли законченное приложение поставленным в проекте задачам.
Начальник отдела информационных систем определяет цели (планы) для разработчиков, основанные на информации, полученную от менеджеров других отделов и главного управления.
Кроме того, устанавливает приоритеты между проектами и работает в качестве источника информации между отделами и между разработчиками, распределяет объемы ресурсов, требуемых для выполнения каждого проекта.
Ответственным за гарантию качества является один человек, но следят за качеством все члены команды проекта. Ответственный следит, чтобы проект приложения достиг намеченных целей; проект приложения отвечал описанию системы; план тестирования и план преобразования данных отвечали требованиям; стандарты разработки информационных систем соблюдались.
Группа ответственных за бета-тестирование состоит из программистов и возможных конечных пользователей и осуществляет два типа тестирования. Первый тип использует планы специального тестирования, разработанные ответственным за гарантию качества. При втором типе используются тесты, которые разработали сами ответственные за бета-тестирование, применяя критерии ответственного за гарантию качества.
Независимые консультанты обычно концентрируют внимание на стоимости проекта. Часто они не принимают в расчет затраты на проведение системного анализа и разработку проекта и дают неправильную оценку времени реализации данного проекта. Хотя известно, что необходимо выполнить детальный анализ задачи перед тем, как проект будет утвержден, пользователи не склонны затрачивать дополнительные средства на исследование. К сожалению, это часто приводит к большому количеству затруднений в процессе разработки, а иногда к развалу всего проекта.
12.4. МЕТОДОЛОГИЯ УПРАВЛЕНИЯ ПРОЕКТОМ
Взаимодействие в команде. Ответственность за проект несет разработчик, а не начальник отдела. Начальники являются членами команды — последнее слово в некоторых важных вопросах принадлежит им. Однако на самом деле проектом управляет разработчик. Когда разработчики выполняют "собственный" проект, их интерес в успехе этого проекта и, следовательно, вероятность его успешного выполнения увеличивается в геометрической прогрессии.
Если разработчики полностью изучат типы связей между всеми частями проекта (в отличие от одной его части), их квалификация повысится. Это обеспечивает тип перекрестного обучения в двух очень важных факторах успешной разработки программного обеспечения. Означает ли это, что разработчик выполняет меньше собственно программистской работы? Конечно. Когда разработчику нужна помощь в программировании для конкретного проекта, привлекается отдел информационных систем и сторонних разработчиков, сотрудничающих по контракту.