Программное обеспечение и его разработка. Дж.Фокс

| рубрика: Библиотечка | автор: st
Метки:

Автор книги - Джозеф Фокс - руководитель проектов в IBM. Хотя книга была издана в 1982 году (в СССР - в 1985), она представляет собой не только исторический, но и практический интерес. Прежде всего, потому что автору удалось оторваться от конкретных аппаратных платформ, изложив свой многолетний опыт в форме попыток обобщения и конкретных примеров из практики не только в отдельных проектах, но и в масштабах компании.

Но сначала про историю и в несколько курьезном ракурсе. Мне показались интересными фразы: "...Давайте бросим взгляд на вычислительный мир. В 1952 году он состоял из одной машины - UNIVAC I..." (стр. 40) и "...может получиться и так, что более легкий язык будет побежден более сложным. Программисты из Советского Союза рассказывают аналогичные истории. По-видимому, один из первых полученных ими языков был Кобол - англоязычный COBOL. Видимо, первые вычислительные машины попали туда из Соединенных Штатов, и программисты должны были учить английский язык, для того чтобы воспользоваться оператором PRINT. Англоязычный COBOL выжил! Потому что старики были настроены против русскоязычного Кобола: "Пусть новички помучаются!" (стр. 196). В примечаниях редактора справедливо отмечено, что эти утверждения не соответствуют реальному положению дел и лишний раз доказывают, сколь мало знают в США о нашей стране. В самом деле, в 1952 году в СССР уже была построена первая отечественная ЭВМ МЭСМ (малая электронно-счетная машина), руководил разработкой академик С. А. Лебедев.

К счастью, незнание положения дел в СССР нисколько не помешало автору хорошо разобраться с ситуацией в разработке программных систем у себя в стране. Но, чтобы не заниматься пересказами, по основному содержанию я приведу несколько ссылок, показавшихся мне интересными и актуальными на сегодняшний момент.

Не раз упомянутый в книге классик жанра Брукс на стр. 210 обретает конкретные очертания. Приводится пример 22-месячного проекта для издательства "Нью-Йорк Таймс", выполненного по схеме "хирургической бригады" (т.е. фактически одним разработчиком). По утверждению автора, фирма сэкономила на этом 700 тыс. долларов.

На стр. 197, Фокс рассуждает о тесной связи мышления и языка программирования: "...Выбор языка оказывает на весь дальнейший процесс глубокое воздействие. Почему Вирт предложил Паскаль? Потому что ему надоело учить студентов языкам, которые слишком часто нельзя было логически объяснить. Нотация, или система обозначений, помогает процессу мышления... хорошая система обозначений способна освобождать мозг от излишних деталей и переключать его на обдумывание других вещей... конструкция языка ограничивает возможности мышления". Автор пишет эти строки в 1981, а в 1983 появляется первый транслятор С++...

Мнение автора о специалистах тестирования в IBM стоит того, чтобы быть приведенным целиком. "В отделениях тестирования работают очень квалифицированные, всесторонне развитые люди. Тестовики должны уметь видеть всю систему, ее цели, структуру, иначе проверить ее нельзя. Лишь очень немногие среди людей, работающих в большом проекте, еще обладают таким кругозором. Остальные строят отдельные части, и лишь немногие проектировщики, руководство и занятые в тестировании видят целое. При тестировании происходит целеустремленный поиск слабых мест, а для этого нужно проштудировать всю систему. Это хорошая тренировка. В течение многих лет мы замечаем, что люди, начинавшие с тестирования, становятся проектировщиками и руководителями новейших систем. Мы всегда преднамеренно поручаем тестирование очень способным молодым программистам, поскольку знаем, что уклонение от тестирования при реальном использовании приведет систему к краху. Лучше потерпеть крах до реального использования!" (стр. 239)

Не оставлена без внимания тема индустриализации процесса разработки. Но Фокс гораздо более осторожен в подходе и менее оптимистичен в прогнозах. На стр. 262 справедливо отмечается (со ссылкой на исследования реальных материальных производств), что программа - это штучная продукция. Тем самым процесс производства характеризуется как "трудноконтролируемый", потому что "предсказать результаты работ по разработке ни в терминах временных затрат, ни в терминах денежных вложений не удается никогда". Тем не менее, к стр. 297 автор выдвигает ряд экспертных оценок и метрик проекта, по которым можно попытаться создать и собственную статистическую базу. А на 336 стр. приводится и более уместная, на мой взгляд, аналогия с кинопроизводством.

"Разработчик, который хочет применять самые новые и самые современные методы, просто искатель приключений" (стр. 348). Это мнение среди прочих выводов, хотя и выглядит не бесспорным, но в большинстве случаев верно. Я бы добавил, что если эти методы навязываются поставщиком, то речь идет уже о грубой попытке увеличения прибылей за счет давления на пользователей. И поспешный выход очередной версии .NET или Windows Vista в нынешнем 2007 году - только подтверждает тенденцию.

На стр. 351 в главе про терминологию область разработки ПО охарактеризована, как "семантическое болото", так как "общепринятой терминологии в ней просто не существует". Мне кажется, что ситуация мало изменилась. Сколько существует определений казалось бы устоявшегося термина framework (не говоря уже об отсутствии адекватного русского перевода)? Термин "рефакторинг" может иметь смысл и как реструктуризация и как факторизация, хотя адепты одной религиозной методологии считают свою трактовку единственно правильной. Что такое "менеджер программы" для человека, никогда не сталкивающегося с методикой Microsoft (MSF)? Что такое модульный тест в языке, который не поддерживает модульность? И таких примеров масса.

И в завершении - о прогнозах. Как оказалось, в 1982 году прогнозы мало отличались от даваемых в 2007.

  • Программное обеспечение станет решающим фактором, влияющих на качество продаваемых крупных программных систем.
  • Недостаточное число программистов... которое существует сейчас, со временем еще больше усугубится.
  • Вычислительная техника станет настолько дешевой, что появятся системные конструкторы. Они будут связывать квазиуниверсальные программы, создавая "обрабатывающие системы".
  • Разрыв между стремительным развитием микроэлектроники и инерцией разработки программного обеспечения станет наиболее известным примером неодолимой силы и недвижимого объекта. В результате разработка программного обеспечения достигнет небывалых высот... произойдет подлинная революция. Появятся новые языки общения пользователей с вычислительными машинами; это будут языки не такого типа, как Ада и Паскаль, но языки типа "Запрос с помощью примеров"... Пропасть между языками высокого уровня, используемыми при программировании, и языками пользователей быстро становится меньше.

Сергей Тарасов, апрель 2007