На этом шаге мы рассмотрим бригадную организацию работ.
Почти непременным элементом методологии программирования является принцип бригадной организации работ в программировании. Практическая реализация больших программных проектов требует умения и опыта многих программистов.
Почему в программировании необходима бригадная организация работ?
Ответ прост:
В 1971г. Г.Миллз предложил схему организации программистской деятельности, известную как бригада главного программиста. Этот подход успешно использовался при разработке и реализации нескольких крупных программных проектов.
По словам Миллза, "бригада главного программиста - это небольшой коллектив сотрудников, созданный для эффективной работы и рассматриваемый как единое целое". Бригада состоит из нескольких человек, обычно от трех до пяти; среди них - главный программист, резервный программист, секретарь бригады и, по мере необходимости, другие специалисты.
Основная идея бригады заключается в том, что она работает как суперпрограммист, то есть как один программист с очень высокой производительностью труда, что обеспечивается участием в работе всех членов бригады, действующих (благодаря внутренним связям в бригаде) с полным единомыслием.
Главный программист - это компетентный программист, доказавший свои незаурядные технические способности. Он руководит бригадой, ему непосредственно подчиняются все остальные ее члены.
В обязанности главного программиста входит проектирование программы, написание самых важных ее модулей и определение остальных модулей, которые программируют другие члены его бригады. Вся работа бригады находится под постоянным контролем главного программиста; он объединяет результаты в одно целое.
Резервный программист, работающий в непосредственном контакте с главным программистом и полностью посвященный во все его решения, может в случае необходимости возглавить бригаду. Обычно резервный программист отвечает за независимую подготовку тестов для разрабатываемой программы; он может также помогать главному программисту в исследовательской деятельности, изучая альтернативные стратегии и тактики бригады.
Основная задача секретаря бригады - это документационное обеспечение проекта как в машинно-ориентированной форме, так и в виде, доступном для человека. Секретарь отражает текущее состояние проекта и его историю.
Подчеркнем, - основная функция секретаря заключается не столько в том, чтобы избавить программистов от бумажной работы, сколько в том, чтобы обеспечивать наглядную информацию о положении дел в проекте и о достигнутых успехах. Достоинство такой организации - в наличии источника единообразно представленной и свежей информации о ходе разработки программы.
При реализации большого проекта одной бригады главного программиста может быть недостаточно, как недостаточно одного программиста для решения многих программистских задач. Миллз предлагает организовать, в таком случае, иерархию бригад главного программиста, начиная с одной бригады на самом высшем уровне. Бригады следующих уровней создаются лишь после того, как бригада предыдущего (более высокого) уровня подготовила им задание. В противоположность ориентированной на управление иерархии в классической организации программистских коллективов здесь не существует разделения функций на высших уровнях иерархии: бригады главного программиста на высших уровнях проходят различные этапы и отвечают за различные виды деятельности (проектирование, кодирование, тестирование, проверка), на каждом этапе устанавливая конкретные задания для подчиненных групп.
Бригада высшего уровня завершает проектирование (в самых абстрактных терминах), кодирование (в этих же терминах) и тестирование (тоже в этих терминах!) на самых ранних этапах разработки проекта. И только когда эта бригада успешно прошла все тесты (больше похожие на доказательства), можно безбоязненно передавать задания бригадам низших уровней. Все остальное время выполнения проекта бригада высшего уровня посвящает верификации (проверке) результатов, поступающих с нижних уровней.
Однако учтите, что пассивные методы, способствуя значительному повышению качества программ, не могут гарантировать удовлетворения всех заданных требований к программам, а главное, не полностью предотвращают ошибки.
Поэтому активные методы поиска и устранения ошибок дополняют пассивные в процессе достижения заданного качества программ.
На следующем шаге мы поговорим о стиле программирования.