На этом шаге мы рассмотрим состав коллектива разработчиков.
Как показывают эксперименты, объектно-ориентированная разработка требует несколько иного разделения труда по сравнению с традиционными методами. Г.Буч выделяет три важнейшие роли разработчиков в объектно-ориентированном подходе [1]:
Архитектор проекта отвечает за эволюцию и сопровождение архитектуры системы. Это не обязательно самый главный разработчик, но непременно такой, который может квалифицированно принимать стратегические решения, как правило, благодаря обширному опыту в построении систем такого типа. Архитекторы - не обязательно лучшие программисты, хотя они должны уметь программировать. Они должны разбираться в организациях объектно-ориентированной разработки, потому что в конечном итоге должны выразить свое архитектурное видение в терминах классов и взаимодействующих объектах.
Ответственные за подсистемы отвечают за проектирование целых категорий классов и подсистем. В сотрудничестве с архитектором проекта каждый из ответственных разрабатывает, обосновывает и согласовывает с другими разработчиками интерфейс своей категории классов или подсистемы, а затем возглавляет ее реализацию, тестирование и выпуск обновлений в течение развития системы. Они должны знать принятую систему обозначений и организацию процесса объектно-ориентированной разработки. Обычно они программируют лучше, чем архитекторы проекта, но не располагают столь обширным опытом. Их количество - от трети до половины численности команды.
Прикладные программисты - младшие по рангу участники проекта. Они, в основном, занимаются реализацией и последующим тестированием классов, хотя могут участвовать и в проектировании некоторых классов. Прикладные программисты не слишком хорошо разбираются в системе обозначений, но зато являются очень хорошими программистами. По количеству они составляют половину команды или более того.
В больших проектах могут понадобиться и другие роли. Большинство из них явно не связаны с объектно-ориентированной технологией, но некоторые вытекают из нее.
Менеджер проекта - отвечает за управление материалами проекта, заданиями, ресурсами и графиком работ.
Аналитик - отвечает за развитие и интерпретацию требований конечных пользователей; должен быть экспертом в предметной области, однако его не следует изолировать от остальной команды разработчиков.
Инженер по повторному использованию - управляет хранилищем материалов проекта; активно ищет общее и добивается его использования; находит, разрабатывает или приспосабливает компоненты для общего использования.
Контролер качества - анализирует результаты процесса разработки; задает общее направление тестирования.
Менеджер интеграции - отвечает за сборку подсистем в единое приложение; следит за конфигурированием подсистем.
Ответственный за документацию - готовит документацию по выпускаемому продукту и его архитектуре для конечного пользователя.
Инструментальщик - отвечает за создание и адаптацию инструментов программирования, которые облегчают создание программ.
Системный администратор - управляет физическими компьютерными ресурсами в проекте.
Конечно, не каждый проект требует всех этих ролей. В небольших проектах обязанности могут совмещаться. С другой стороны, для очень больших проектов каждой из ролей может заниматься целая организация.
В заключение три цитаты.