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

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

Введение.

Фактически книга Ф. Брукса представляет собой сборник очерков, в которых последовательно обсуждаются узловые проблемы разработки крупных программных проектов (а их актуальность в течение последних 30 лет только возрастает): повышение производительности труда программистов, организация коллективной работы, планирование и выполнение графика реализации.

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

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

Резюмируя, можно сказать, что книга Брукса «Мифический человеко-месяц» является единственным печатным изданием в России, которое ориентировано именно на управленца в области разработки ПО. Читать - обязательно.

Есть книги, которым программисты присваивают статус «must have». То есть такие, которые следует изучить, чтобы по праву называться специалистом. Книга Фредерика Брукса, рассчитанная не столько на рядовых программистов, сколько на менеджеров по разработке программных систем, несомненно, заслужила место в этом ряду.

В одной из глав Брукс пишет о документации для программных проектов и не раз упоминает, что нужно постоянно делать общеплановые наброски, выделять тезисы, делать ударение на идеях и целях проекта. Он и сам не отступает от этого принципа и в 18-й главе «Заявления «Мифического человека-месяца» : правда или ложь?» делает обзор всей своей книги в виде набора тезисов. Это, пожалуй, самое лучшее освещение его фантастического произведения. Далее оно изложено.

XVIII Заявления "Мифического человеко -месяца": правда или ложь?

Краткость очень полезна,

Когда нас понимают или не понимают.

СЭМЮЭЛ БАТЛЕР, "ГУДИБРАС"

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

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

Глава 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.1 Даже в большой команде проектировщиков оформление результатов нужно поручить одному или двум людям, чтобы обеспечить согласованность мини-решений.

6.2 Важно явно определить те части архитектуры, которые не прописаны столь же тщательно, как остальные.

6.3 Необходимо иметь как формальное описание проекта - для точности, так и текстуальное - для понимания.

6.4 Либо формальное, либо текстуальное определения выбираются в качестве стандарта, при этом второе определение является производным. Каждое определение может выступать в любой из ролей.

6.5 Реализация, в том числе модель, может служить определением архитектуры; такое использование имеет существенные недостатки.

6.6 Прямое включение является очень искусным приемом для осуществления стандартов архитектуры в программном обеспечении (в аппаратном обеспечении - тоже: возьмите интерфейс Mac WIMP, встроенный в ROM).

6.7 Архитектурное "определение будет яснее, а (архитектурная) дисциплина крепче, если изначально строятся как минимум две реализации".

6.8 Важно, чтобы архитектор в телефонных разговорах отвечал исполнителям на их вопросы; обязательно нужно регистрировать эти разговоры в журнале и доводить их до общего сведения. (Сейчас для этого предпочтительнее электронная почта.)

6.9 "Лучший друг менеджера проекта - его постоянный противник, независимая организация, тестирующая продукт."

Глава 7. Почему не удалось построить Вавилонскую башню?

7.1 Проект Вавилонской башни провалился из-за недостатка обмена информацией и, как следствие, организации.

Обмен информацией

7.2 "Отставание от графика, несоответствие функциональности, системные ошибки - все это из-за того, что левая рука не знает, что творит правая." Предположения команд расходятся.

7.3 Бригады должны поддерживать между собой связь всеми возможными способами: неформально, путем регулярных совещаний по проекту с техническими отчетами и через общую рабочую тетрадь проекта. (А также электронную почту.)

Рабочая тетрадь проекта

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

7.5 "Все документы проекта должны входить в эту структуру (рабочей тетради)."

7.6 Структуру рабочей тетради нужно проектировать тщательно и рано.

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

7.8 "Каждый член команды должен видеть все материалы (рабочей тетради)." (Сейчас я бы сказал "должен иметь возможность видеть". Например, достаточно WWW-страниц.)

7.9 Своевременное обновление может иметь критическое значение.

7.10 Необходимо, чтобы внимание пользователя было особо привлечено к изменениям, произошедшим после его последнего прочтения, причем с пометками об их значении.

7.11 Рабочая тетрадь проекта OS/360 начиналась с бумажного варианта с последующим переходом на микрофиши.

7.12 Сегодня (и даже в 1975 году) общий электронный блокнот является значительно лучшим, более дешевым и простым механизмом достижения этих целей.

7.13 Необходимо помечать текст с помощью полосок изменения дат пересмотра (или их функционального эквивалента). Так же необходима сводка изменений по типу стека.

7.14 Парнас старается доказать, что стремление к тому, чтобы каждый видел все, совершенно ошибочно: части должны инкапсулироваться таким образом, чтобы никому не требовалось или не разрешалось видеть содержание каких-либо частей, кроме своих собственных, а видны могут быть только интерфейсы.

7.15 Предложение Парнаса - путь к катастрофе. (Парнас вполне убедил меня в обратном, и я совершенно изменил свое мнение. )

Организация

7.16 Задачей организации является сокращение объема необходимого общения и согласования.

7.17 Организация заключает в себе разделение труда и специализацию функций с целью сократить обмен информацией.

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

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

7.20 В каждом субпроекте есть две руководящие должности: продюсер и технический директор, или архитектор. Их функции совершенно различны и требуют разных способностей.

7.21 Вполне эффективным может быть любой тип взаимоотношений между этими двумя должностями:

Это может быть одно лицо.

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

Директор может быть начальником, а продюсер - его правой рукой.

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

    Документ
    Томасу Дж. Уотсону Младшему, чье глубокое внимание к людям по-прежнему ощущается в его фирме, и Бобу О. Эвансу, чье смелое руководство превратило работу в приключение.
  2. Мифический человеко-месяц или как создаются программные системы

    Документ
    Посвящается двоим людям, благодаря которым мои годы в IBM былиособенно насыщенными: Томасу Дж. Уотсону Младшему, чье глубокое внимание клюдям по-прежнему ощущается в его фирме, и Бобу О.
  3. Доклад (кому хватит) в конце курса вопросы по пропущенным лекциям

    Доклад
    Основная задача курса — дать студентам разносторонний и по возможности полный обзор вопросов, из которых состоит предмет "программной инженерии" (software engineering).
  4. Программа государственного экзамена по направлению 230100 «информатика и вычислительная техника» цикла магистерской подготовки

    Программа
    (специализации 23010011 – «Базы данных». 23010013 – «Сети ЭВМ и телекоммуникации», 23010031 – «Проектирование встроенных вычислительных систем» и 23010032 – «Системотехника интегральных вычислителей.
  5. Учебное пособие по курсу «Технология программирования»

    Учебное пособие
    Учебное пособие по курсу «Технология программирования» написано на основе одноимённого курса лекций читаемых автором в Ухтинском Государственном Техническом Университете.
  6. Методические рекомендации для студентов специальностей 230105 Программное обеспечение вычислительной техники и автоматизированных систем

    Методические рекомендации
    на методическое пособие по дипломному проектированию для студентов специальности «Программное обеспечение вычислительной техники и автоматизированных систем», разработанное преподавателем АКИТ И.
  7. Свободное программное обеспечение в школе.

    Лекция
    Разрешается использование на условиях или последующих версий, опубликованных . Документ не содержит неизменяемых разделов в терминологии GNU FDL. Прочие права сохраняются за авторами.
  8. Алтайский колледж информационных технологий

    Документ
    Представленное на рецензию методическое пособие предназначено для студентов специальностей 230105 «Программное обеспечение вычислительной техники и автоматизированных систем», 230103 «Автоматизированные системы обработки информации
  9. Книга, которую вы держите в руках, возникла благодаря телефонному

    Книга
    Не верите? Прочитайте - и убедитесь сами! Очень легко - может быть, слишком легко - делать посвящение мертвецам.

Другие похожие документы..