Мифический человеко-месяц
Брукс отмечает, что большие проекты, в которых задействованы сотни программистов, принципиально отличаются от небольших проектов и что результаты, достигнутые при работе над небольшим проектом, нельзя переносить на большой проект. В большом проекте огромное количество времени тратится на планирование того, как разделить работу на отдельные модули.
При этом нужно детально расписать работу модулей и интерфейсы к ним, а также попытаться представить себе, как эти модули взаимодействуют, причем до того, как начнется само программирование. Затем модули по отдельности создаются и отлаживаются. Наконец, модули собираются вместе и вся система в целом тестируется. Как правило, при этом собранная из работающих по отдельности модулей система работать не хочет и после сборки и запуска немедленно рушится. Брукс оценивает количество работ следующим образом:♦ 1/3 — планирование;
♦ 1/6 — кодирование;
♦ 1/4 — тестирование модулей;
♦ 1/4 — тестирование системы.
Другими словами, собственно написание программы представляет собой самую простую часть проекта.
Самым сложным оказывается решить, какими должны быть модули, а также заставить эти модули корректно общаться друг с другом. В небольшой программе, создаваемой одним программистом, планирование составляет как раз наиболее легкую часть.Заголовком книги Брукс обращает внимание читателя на собственное утверждение о том, что люди и время не взаимозаменяемы. Такой единицы, как человеко-месяц, в программировании не существует. Если в проекте участвуют 15 человек и на всю работу у них уходит 2 года, отсюда не следует, что 360 человек справятся с этой работой за один месяц и вряд ли 60 человек выполнят ее за 6 месяцев.
У этого явления есть три причины. Во-первых, работа не может быть полностью разделена. До тех пор пока не будет закончено планирование и не будет определено, какие модули нужны, а также какими будут интерфейсы, никакое программирование не может даже начаться. При двухлетнем проекте одно лишь планирование может занять 8 месяцев.
Во-вторых, чтобы полностью использовать большое число программистов, работу следует разделить на большое количество модулей, чтобы всех обеспечить работой. Поскольку потенциально каждый модуль взаимодействует с каждым модулем, число рассматриваемых пар «модуль — модуль» растет пропорционально квадрату от числа модулей, то есть квадрату числа программистов. Поэтому большие проекты с увеличением числа программистов очень быстро выходят из-под контроля. Тщательные измерения 63 программных проектов подтвердили, что зависимость времени выполнения проекта от количества программистов далеко не так проста, как можно предположить, исходя из концепции человеко-месяцев (Boehm, 1981).
В-третьих, процесс отладки в большой степени является последовательным. Если усадить за решение проблемы вместо одного отладчика десятерых, это не поможет обнаружить ошибку в программе в десять раз быстрее. На самом деле десять отладчиков, вероятно, будут работать даже медленнее одного, так как они станут тратить очень много времени на разговоры друг с другом.
Брукс подводит итоги своего опыта знакомства с большими проектами, формулируя следующий закон (закон Брукса): «Добавление к программному проекту на поздней стадии дополнительных людских сил приводит к увеличению сроков выполнения проекта».
Недостаток введения в проект новых людей состоит в том, что их необходимо обучать, модули нужно делить заново, чтобы их число соответствовало числу программистов, требуется провести множество собраний, чтобы скоординировать работу отдельных групп и программистов, и т. д. Абдель-Хамид и Медник (Abdel-Hamid and Madnick, 1991) получили экспериментальное подтверждение этого закона. Слегка фривольный вариант закона Брукса звучит так: «Если собрать девять беременных женщин в одной комнате, то они не родят через один месяц».
12.5.2.
Еще по теме Мифический человеко-месяц:
- Седьмой месяц
- Первый месяц
- Второй месяц
- Третий месяц
- Четвертый месяц
- Пятый месяц
- Шестой месяц
- Рассказ о человеке-мусорщике, человеке-бижутерии и человеке-бриллианте
- Число месяца рождения
- УРОВЕНЬ БОЛЕЗНЕЙ ЧЕЛОВЕКА - ЭТО УРОВЕНЬ ЕГО ОТКЛОНЕНИЯ ОТ СВОЕГО РУСЛА. ЗДОРОВЬЕ ЧЕЛОВЕКА - ЭТО ПОКАЗАТЕЛЬ НАХОЖДЕНИЯ ЧЕЛОВЕКА В СВОЕМ РУСЛЕ