355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Джозеф Фокс » Программное обеспечение и его разработка » Текст книги (страница 1)
Программное обеспечение и его разработка
  • Текст добавлен: 11 июля 2017, 12:00

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


Автор книги: Джозеф Фокс


Жанр:

   

Базы данных


сообщить о нарушении

Текущая страница: 1 (всего у книги 21 страниц)

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

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

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

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

В вышедшей несколько лет назад книге «Мифический человеко-месяц»[1]1
  Брукс Ф. П. мл. Как проектируются и создаются программные комплексы. Мифический человеко-месяц. Очерки по системному программированию / Пер, с англ. – М: Наука, 1979.


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

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

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

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

Предисловие

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Изучение процесса разработки будет продолжаться в гл.5. Основной объем текста связан с этим процессом, но первые четыре главы все же особенно важны для ясного понимания остальной части книги. Я призываю профессиональных программистов не пропускать первой части книги: хотя многое из нее всем известно, но в ней есть некоторые тонкости классификации, необходимые в повседневной деятельности.

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

Но в очень немногих книгах ставится цель осветить проблемы, возникающие у руководителей процессом программирования и ходом работ над проектом, а также у руководителей высшего ранга, – каково общее положение дел, что наиболее важно, каковы тенденции, какие возможны ловушки, какие наиболее важные уроки извлечены за последнее время в мире программирования? В течение семи с половиной лет я имел счастье руководить большим программистским предприятием – отделением фирмы IBM. В моем подчинении было 4400 человек, в большинстве своем профессионалы, в основном создававшие программное обеспечение для больших систем реального времени. Многие уроки достались мне очень тяжело. Мы всегда шли непроторенными путями, одновременно приходилось выполнять работы по сотне и более контрактов.

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

Мы работали над крупными проектами: 700 человек в течение 10 лет в Хьюстоне, шт. Техас, создавали систему наземного управления пилотируемыми космическими полетами; 500 человек в течение 10 лет в Атлантик-Сити, шт. Нью-Джерси, в местном отделении FAA, разрабатывали систему управления транспортным воздушным сообщением; 700 человек в течение 5 лет в Уиппани, шт. Нью-Джерси, работали над программной частью системы противоракетной обороны; 500 человек в Лос-Анджелесе в течение 5 лет делали спутниковую систему ВВС США.

Ниже я привожу примеры работ, проведенных под моим руководством за 7,5 лет, с 1969 по 1977 г.:


700/7Хьюстон, шт. Техас«Аполлон», «Скайлэб», «Шаттл»
700/5Уиппани, шт. Нью-ДжерсиПротиворакетная система «Сэйфгард»
500/7Атлантик-Сити, шт. Нью-ДжерсиУправление воздушными транспортными линиями FAA (Federal Aviation Agency – Федеральное авиационное агентство)
200/2Мыс Кеннеди, шт. ФлоридаСистема запуска ракет
60/3Гейтсбург, шт. МэрилендЯпонская издательская система
20/3Нью-Йорк, шт. Нью-ЙоркДиспетчерская служба полиции города
5/1Гейтсбург, шт. МэрилендАвтоматизация службы сбора информации газеты «Нью-Йорк таймс»
5/5Лондон, ВеликобританияОбщенациональная банковская система
53/3Гейтсбург, шт. МэрилендСистема межиздательских связей США
200/3Хьюстон, шт. ТехасАвтоматизация нефтеочистительных заводов (Канада, Бельгия)
15/2Сент-Луис, шт. МиссуриАвтоматизация железнодорожной связи, МОРАС

Один вывод, который можно сделать из этого списка, состоит в том, что программирование по контракту имеет разбросанный, кочевой характер. Контора моя была в Гейтсбурге, шт. Мэриленд, хотя большая часть работ проводилась по месту расположения заказчиков. И для этого были причины – разработка программного обеспечения проходит достаточно сложно, даже когда разработчики и пользователи находятся в одном месте.

Нашей группе из Гейтсбурга прекрасно удалось автоматизировать выпуск двух японских газет после полосы неудач. В течение всех 7,5 лет я имел удовольствие получать отчеты от Милса, его огромный талант помогал нам неоднократно. X. Милс и Т. Бэйкер создали архивную систему газеты «Нью-Йорк таймс» с поразительной производительностью. По окончании работ у нас получилось, по моему мнению, самое большое в мире запрограммированное собрание статистических данных. Эта система используется уже более 8 лет и стала национальным богатством. В этой книге мы неоднократно будем обращаться к проекту «Нью-Йорк таймс».

Председатель правления фирмы IBM говорил мне, что система управления транспортными авиалиниями никогда не заработает, я же отвечал, что уверен в успехе. Наша система была раскритикована и конгрессом США за то, что в ней повторно тратились усилия на то, что уже было сделано нами в Хьюстоне для посадки человека на Луну.

Оглядываясь назад, я вижу, что короткий промежуток лет вместил много систем, кризисов, ошибок, успехов. Система управления воздушными транспортными линиями не просто работает, Великобритания купила у IBM вычислительное оборудование на сумму 10 млн. долларов, став тем самым двадцать первым участком этой системы. Для работы над этим проектом мы выделили десять человек, которые располагаются в Гейтвиче, Англия. То, что другая страна, к тому же располагающая собственным агентством по управлению воздушными перевозками (и ограниченная беспощадной политикой «покупать только британское»), готова заплатить 10 млн. долларов за «американскую систему», заставило замолчать всех критиков.

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

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

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

В частности, я хочу признать огромный вклад Эндрью Ферентино, моего коллеги по работе в IBM, а теперь также по фирме Software Architecture and Engineering, Inc. Интуиция Энди, его глубокое понимание программного обеспечения, его определения помогли сформироваться многим идеям этой книги. Многие цифры и понятия принадлежат ему.

По мнению многих, выражение: «May you live in interesting times»[2]2
  «Желаю вам жить в интересное время» (англ.)


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

Я хочу также поблагодарить Лауру-Анну Чарлз и Жанет Далчер за помощь, оказанную в подготовке книги к печати.

Вашингтон, Джозеф М. Фокс

Глава 1
Что такое программное обеспечение?

Необыкновенные достижения вычислительной техники привели к тому, что термин «программное обеспечение» стал толковаться чрезвычайно широко. Столь разнообразна эта область, что утверждения, кажущиеся противоречащими другим, безусловно верным утверждениям, также могут оказаться верными.

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

Важные для себя вещи или абстрактные понятия люди всегда обозначали особыми словами.


СнегУ эскимосов в словаре 20 слов; у ацтеков – ни одного
Коровья шкураУ гаучо (южноамериканские ковбои) – 30 слов
То, что летаетВ языке хапи одно слово служит одновременно для обозначения комара и самолета

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


Определение программы

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

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

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

Рабочая программа это программа на машинном языке. Исходная программа может быть написана на языке ассемблера или на языке более высокого уровня (ЯВУ). С помощью программы-транслятора она переводится на машинный язык.

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


Программное обеспечение и программы

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

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

Что делает окрестность окрестностью? Как отличить одну окрестность от другой? Когда небольшой город становится большим городом?

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

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

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

Программное обеспечение – это группа взаимодействующих друг с другом программ.

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


Что же не входит в программное обеспечение?

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

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

Однако принципиальные схемы не являются продукцией. Автомобиль это система, выполняющая некоторую работу. Он может возить меня, куда я захочу. Учебники по вождению, справочники по уходу, рисунки, необходимые для ремонта или производства, сделанные с различными уровнями детализации, важны, но они не являются частью автомобиля! Существенны и важны по многим причинам, но все же они существуют отдельно. Они производятся совместно с автомобилем.

Все это верно и для программного обеспечения. Программное обеспечение – это наш автомобиль: это та «вещь», которая выполняет работу. Мы должны тратить много времени на создание сопроводительной документации на программное обеспечение и на процесс взаимодействия пользователей с системой при помощи программного обеспечения.

Одно из наиболее вредных часто встречаемых высказываний состоит в том, что некто «пишет программное обеспечение». Получается так, будто программное обеспечение это что-то вроде письма.

Можно писать программу, но не программное обеспечение. И даже с программами трудности значительно возрастают с ростом их размеров.

Фраза «пишет программное обеспечение» не полностью отражает истинные усилия, затрачиваемые на разработку программного обеспечения.

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

Разработка программного обеспечения может быть разбита на шесть этапов:

Определение требований и заданий

Проектирование

Написание команд – программирование

Компоновка

Тестирование

Документирование

Относительно новым термином «программно-аппаратное обеспечение» часто обозначается программное обеспечение или просто программа, которая всегда находится в постоянной памяти, работающей только на чтение (ПЗУ), и выполняется непосредственно оттуда. Хотя тот факт, что запись в память исключается, и создает некоторые трудности проектирования и создания программного обеспечения, однако программно-аппаратное обеспечение не столь уж сильно отличается от программного обеспечения, работающего с обычной памятью, чтобы его нужно было выделять и рассматривать отдельно. Здесь применяются те же правила и практические приемы. Таким образом, мы будем рассматривать программно-аппаратное обеспечение как часть программного обеспечения. Мы еще столкнемся с программами, располагающимися в постоянных запоминающих устройствах.


Обзор программного обеспечения

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

Очень часто разработчики программного обеспечения не успевают выдать надежный продукт точно в назначенный срок или просто выходят из бюджета. Какая-либо помощь этим разработчикам практически не увеличивается, и разумного решения тут вообще не видно. Неудачи на поприще программного обеспечения постигают не только начинающих программистов. Случается, что даже самые крупные, самые солидные, самые технологически передовые организации страдают из-за серьезных препятствий, возникающих перед ними. За несколько недель до намеченной сдачи в эксплуатацию новой системы 138 фирма IBM объявила о годовой отсрочке, вызванной трудностями с программным обеспечением. За год до назначенного ввода в действие усовершенствованной системы связи фирма АТТ объявила о 18-месячной задержке.

Пользоваться программным обеспечением легко, разрабатывать его намного сложнее. Разработка программного обеспечения – это выпущенный из «волшебной» (электронной) лампы джинн, который скитается по свету и повсюду отравляет жизнь разработчикам систем.

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

Если мы оглянемся на проделанное нами, то увидим, каких гигантских успехов мы добились. Системы резервирования авиационных билетов работают – и работают прекрасно. Американская система авиалиний к весне 1979 г. обслуживала 13 500 присоединенных терминалов, через которые поступало до 10,6 млн. сообщений в день. Система управления транспортными авиалиниями работает и в США, и за их пределами. Работает спутниковая система. И эти успехи не случайны. На них было затрачено огромное количество ресурсов и усилий, но они работают.

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

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

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

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


Факты о программном обеспечении

Развитие программного обеспечения происходит одновременно в двух противоположных направлениях.

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

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

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

Любой процесс может быть выражен несколькими различными «правильными» последовательностями команд.

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

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

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

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

Правильное программное обеспечение не подвержено никаким сбоям. Термин «поддержка» по отношению к программному обеспечению является, следовательно, неправильным.

Разработка больших программ – это весьма многогранная деятельность, отнюдь не связанная только с работой на вычислительной машине.

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

Разработка программного обеспечения часто весьма трудоемкий и дорогостоящий процесс.

Программное обеспечение это не цель, а средство.

Развитие программного обеспечения происходит одновременно в двух противоположных направлениях. В середине 30-х гг. XX столетия английский математик Ален Тьюринг доказал, что любой процесс, который можно описать каким-либо алгоритмом, может быть реализован с помощью простейшей машины, которая выполняет всего шесть различных команд, хотя это может занимать весьма значительное время. Из этого принципа логически следует тот факт, что вычислительная машина – любая вычислительная машина общего назначения – может выполнить все, что только может быть описано с помощью алгоритма. Современное программное обеспечение становится все более сложным, находит все более широкие и сложные приложения и в то же время делается «обыкновенной» продукцией повседневного пользования обывателей.

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

Одновременное уменьшение стоимости и увеличение мощности машин расширили область применения ЭВМ сразу на верхнем и нижнем уровнях.

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


    Ваша оценка произведения:

Популярные книги за неделю