Мифический человеко-месяц или как создаются программные системы - Фредерик Брукс 45 стр.


(Можно задаться вопросом: если это все, что было сказано в первоначальном издании, почему тогда это заняло так много места?) В скобках приведены свежие комментарии.

Большинство этих предложений можно проверить на практике. Излагая их в сжатой форме, я надеюсь сконцентрировать мысли читателя, измерения и комментарии.

Глава 1. Смоляная яма

1.1 Для создания системного программного продукта требуется примерно в девять раз больше усилий по сравнению с составляющими его программами, написанными отдельно для частного использования. По моей оценке, превращение программы в продукт вводит коэффициент, равный трём; проектирование, интеграция и тестирование компонентов, которые должны образовать согласованную систему, также вводит коэффициент, равный трём; все эти составляющие стоимости существенно независимы друг от друга.

1.2 Занятие программированием «отвечает глубокой внутренней потребности в творчестве и удовлетворяет чувственные потребности, которые есть у всех у нас», доставляя пять видов радости:

• Радость, получаемая при создании чего-либо своими руками.

• Удовольствие создавать вещи, которые могут быть полезны другим людям.

• Очарование создания сложных головоломных объектов, состоящих из взаимодействующих движущихся частей.

• Радость, получаемая от неизменного узнавания нового, неповторяемости задачи.

• Удовольствие от работы со столь податливым материалом — чистой мыслью, который, тем не менее, существует, движется и работает так, как не могут словесные объекты.

1.3 В то же время этому занятию присущи и огорчения:

• При изучении программирования труднее всего привыкнуть к требованию совершенства.

• Постановка задач осуществляется другими людьми и приходится зависеть от вещей (особенно, программ), которые нельзя контролировать; полномочия не соответствуют ответственности.

• Страшно только на словах: фактическая власть приобретается как следствие успешного выполнения задач.

• Программный проект приближается к окончательному виду тем медленнее, чем ближе окончание, хотя кажется, что к концу сходимость должна быть более быстрой.

• Программному продукту грозит устаревание ещё до его завершения. Настоящий тигр — не пара бумажному, если требуется реальное использование.

Глава 2. Мифический человеко-месяц

2.1 Программные проекты чаще проваливаются из-за нехватки календарного времени, чем по всем остальным причинам, вместе взятым.

2.2 Чтобы приготовить вкусную пищу, нужно время; некоторые задачи нельзя ускорить, не испортив результат.

2.3 Все программисты являются оптимистами: «Всё будет хорошо».

2.4 Поскольку программист работает с чистыми идеями, мы не ожидаем особых трудностей при реализации.

2.5 Но сами нашиидеибывают ошибочными — отсюда и ошибки в программах.

2.6 Наши методы оценивания, основанные на учёте затрат, смешивают затраты с полученным результатом.Человеко-месяц является ошибочным и опасным заблуждением, поскольку предполагает, что месяцы и количество людей можно менять местами.

2.7 Разделение задачи между несколькими людьми вызывает дополнительные затраты на обучение и обмен информацией.

2.8 Моё практическое правило: 1/3 времени — на проектирование, 1/6 — на написание программы, 1/4 — на тестирование компонентов и 1/4 — на системное тестирование.

2.9 Как научной дисциплине нам не хватает методов оценки.

2.10 Поскольку мы не уверены в своих оценках сроков работы, нам часто не достаёт смелости упрямо отстаивать их под нажимом руководства и клиентов.

2.11 Закон Брукса: если проект не укладывается в сроки, то добавление рабочей силы задержит его ещё больше.

2.12 Добавление рабочей силы увеличивает общий объём затрат тремя путями: труд по перекраиванию задач и происходящее при этом нарушение работы, обучение новых людей, дополнительное общение.

Глава 3. Операционная бригада

3.

1 Самые лучшие программисты-профессионалы в 10 раз продуктивнее слабых при равной подготовке и двухлетнем стаже (Сакман, Грант и Эриксон).

3.2 Данные Сакмана, Гранта и Эриксона не выявили корреляции между опытом и продуктивностью. Я думаю, что это всегда так.

3.3 Лучше всего иметь маленькую активную команду — как можно меньше мыслителей.

3.4 Часто лучше всего, если команда состоит из двух человек, один из которых является лидером. (Обратите внимание, как Богом задуман брак.)

3.5 Для создания действительно крупных систем маленькая активная команда работает слишком медленно.

3.6 Опыт разработки большинства действительно больших систем показывает, что подход к ускорению с позиций грубой силы оказывается дорогостоящим, медленным, неэффективным и приводит к появлению систем, не являющихся концептуально целостными.

3.7 Организация по типу хирургических бригад с главным программистом предлагает способ достижения целостности продукта благодаря его проектированию в нескольких головах и общей продуктивности благодаря наличию многочисленных помощников при радикально сокращённом обмене информацией.

Глава 4. Аристократия, демократия и системное проектирование

4.1 «Концептуальная целостность является наиболее важным соображением при проектировании систем.»

4.2 «Окончательную оценку проекту системы даёт отношение функциональности к сложности концепций», а не только богатство функций. (Это соотношение является мерой простоты использования, пригодной как для простого, так и для сложного использования.)

4.3 Для достижения концептуальной целостности проект должен создаваться одним человеком или группой единомышленников.

4.4 «Отделение разработки архитектуры от реализации является эффективным способом достижения концептуальной целостности при работе над очень большими проектами.» (И маленькими тоже.)

4.5 «Если вы хотите, чтобы система обладала концептуальной целостностью, кто-то один должен взять руководство концепциями. Это аристократизм, который не нуждается в извинениях.»

4.6 Дисциплина полезна искусству. Получение архитектуры извне усиливает, а не подавляет творческую активность группы исполнителей.

4.7 Концептуально целостные системы быстрее разрабатываются и тестируются.

4.8 Проектирование архитектуры, разработку и реализацию можно в значительной мере осуществлять параллельно. (Проектирование аппаратного и программного обеспечения тоже могут проходить параллельно.)

Глава 5. Эффект второй системы

5.1 Связь, установленная на ранних этапах и продолжающаяся непрерывно, может дать архитектору верную оценку стоимости, а разработчику — уверенность в проекте, не снимая при этом чёткого разграничения сфер ответственности.

5.2 Как архитектору успешно влиять на реализацию:

• Помнить, что ответственность за творчество, проявляемое при реализации, несёт строитель, поэтому архитектор только предлагает.

• Всегда быть готовым предложить некоторый способ реализации своих замыслов и быть готовым согласиться с любым другим способом, который не хуже.

• Выдвигая такие предложения, действовать тихо и частным образом.

• Не рассчитывать на признательность за предложенные усовершенствования.

• Выслушивать предложения разработчиков по усовершенствованию архитектуры.

5.3 Из всех проектируемых систем наибольшую опасность представляет вторая по счёту; обычно её приходится перепроектировать заново.

5.4 OS/360 является ярким примером эффекта второй системы. (Похоже, что Windows NT — это пример для 1990 года.)

5.5 Достойной внимания практикой является предварительное назначение функциям величин в байтах и микросекундах.

Глава 6. Донести слово

6.

Назад Дальше