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

Дж. Фокс

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

Предисловие редактора перевода

Использование ЭВМ в различных системах управления привело к тому, что в последнее десятилетие стала создаваться индустрия программного обеспечения. Программы, ранее бывшие лишь продуктом творческой деятельности программиста, стали стремительно превращаться в продукцию — плод организованной деятельности многих людей. В последние же годы программы, это специфическое творение человеческого мозга, стали даже товарной продукцией. Они уже продаются не с машиной, не как составные части сложных систем, а сами по себе. Они уже стали «программными средствами».

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

В вышедшей несколько лет назад книге «Мифический человеко-месяц»[1] Брукс отчасти пытался заполнить пробел в этой области. Книга Джозефа М. Фокса, в прошлом руководителя отдела программирования фирмы IBM, перевод которой вы, читатель, держите в руках, похожа по тематике, но гораздо более основательна. В ней обсуждаются весьма общие проблемы создания комплексов программ; она расчитана на самые широкие круги читателей.

На наш взгляд, работа Д. М. Фокса оказалась очень удачной. Для нее характерны широкий взгляд на предмет и обилие конкретного материала. Следует отметить очень хорошее образное изложение, великолепно подобранные цитаты (иногда ставившие в тупик и переводчика и редактора) и примеры. Весьма убедительно выглядят, например, апелляции к повседневной жизни, мгновенно разъясняющие суть дела. И конечно, самое главное то, что мы получаем сведения из первых рук.

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

Подшивалов Д. Б.

Предисловие

Четырем ребятишкам из Бруклина: Джиму, Джоан, Джоку, Пэту.

В 1620 г. Френсис Бэкон написал, что беседы ученых мужей часто оканчиваются разногласиями по поводу смысла слов. По-видимому, ни для какой области это не является столь верным, как для вычислительной техники. Родившись в конце сороковых годов, вычислительная машина еще не вышла из младенческого возраста, и научный мир продолжает бороться за создание достаточно объемлющей, согласованной и ясной терминологии.

В 1978 г. мне посчастливилось стать председателем комиссии по обследованию вычислительных машин, действующих в ВМФ США, которая готовила доклад для заместителя военно-морского министра США по вопросам научных исследований, техники и систем. Мне сразу стало ясно, что большинство терминов вычислительной техники и программирования все члены комиссии определяли немного по-разному. Не раз нам приходилось прерывать наши заседания, чтобы найти определения, удовлетворившие бы всех.

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

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

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

Вычислительные машины, несколько десятилетий назад доступные только крупным организациям, входят теперь в домашний обиход, а их цена значительно снизилась. То, что стоило двадцать лет назад 2 млн. долларов, теперь можно купить за тысячу. Производители цифровой электроники совершили экономическое чудо: в 1960 г. транзистор стоил около двадцати долларов, а в 1980 г., если бы вам удалось выделить его из большой интегральной схемы, он стоил бы всего 0,000 002 доллара!

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

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

Данная книга посвящена программному обеспечению, разработке программного обеспечения и главным образом разработке крупномасштабного обеспечения.

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

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

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

Итак, в первой части книги возводится фундамент, на котором строятся идеи программного обеспечения. Здесь я даю определения, разъясняю их смысл и делаю различия между ними. Я вполне осознаю, что многие из них не согласуются с общепринятыми в некоторых областях, но я не знаю никакого другого способа ясно изложить материал. Останется ли пользователь со своей старой терминологией или начнет привыкать к терминологии книги — не так важно; гораздо важнее, чтобы идеи излагались ясно, не запутывались второстепенными понятиями из-за неопределенности формулировок.