Текст книги "Программное обеспечение и его разработка"
Автор книги: Джозеф Фокс
Жанр:
Базы данных
сообщить о нарушении
Текущая страница: 2 (всего у книги 21 страниц)
Это развитие вычислительной техники в двух направлениях вроде бы не должно никого удивлять и смущать, но иногда это происходит. Программное обеспечение для верхнего уровня становится все более сложным, для нижнего же уровня программы постоянно упрощаются.
Программное обеспечение состоит из множества программ различных типов. Программы делают все, что только можно; они бывают маленькими и тривиальными, но бывают также большими и сложными, весьма дорогостоящими. Говорить о программном обеспечении можно только употребляя при этом по крайней мере одно уточняющее слово. О чем мы говорим – о «программном обеспечении проекта» или о «программном обеспечении как продукции»? О «реальном времени» или о «пакете»? А может быть о «диалоге»? Что мы имеем в виду: «помехозащищенность», «помехобезопасность» или просто надежность? О каком программном обеспечении идет речь – о «инструментальном», «системном» или «прикладном»? О «крупномасштабном» или «мелкомасштабном» программном обеспечении? Каждая из этих категорий обладает собственными, характерными только для нее чертами.
Жизнь программы делится на три фазы. Слишком часто разработчики программ фокусируют свое внимание только на фазе разработки, иногда еще и на фазе использования и очень редко на фазе сопровождения или продолжающейся разработки к большему ущербу для последней. Кое-что можно и нужно делать во время разработки для облегчения других фаз. Большинство разработчиков этот аспект игнорируют. Во многих книгах, посвященных разработке и использованию программ, игнорируется тот факт, что эти три фазы существуют отдельно друг от друга, имеют различные цели и часто к тому же проводятся под разным руководством (см. рис. 1.1).
Разработка программного обеспечения состоит из шести фаз: определение требований, проектирование, написание команд, компоновка, тестирование и документирование. Простейшее в этом списке – написание команд. Очень трудно проектировать оптимальное или хотя бы правильное взаимодействие большого числа программ. Для больших систем труднее всего сформулировать требования пользователей, а следовательно, и самих этих систем. И все же большинство учебных курсов и книг в основном делает упор именно на написание команд. Как мы увидим в дальнейшем, особое внимание надо уделять определению требований и проектированию.
Разработка программного обеспечения для больших систем часто зависит от аппаратуры. Большие системы обычно требуют, чтобы аппаратура в них использовалась оптимальным образом в целях экономии и увеличения производительности.
Рис 1.1 Три фазы жизненного цикла программы
Особенно важно правильно спланировать загрузку центрального процессора (ЦП) и определить все требования к памяти. Все это заставляет разработчиков при проектировании программ учитывать параметры и характеристики аппаратуры системы. В случае разработки маленьких программ дело обстоит совсем иначе.
Производительность системы – т. е. способность вычислительной машины выполнить задание за определенный промежуток времени – в большой степени зависит от используемой аппаратуры, ее мощности и состава. Если аппаратура плохо подходит для решения поставленной задачи, вся тяжесть достижения необходимых пределов производительности ложится на плечи разработчиков программного обеспечения, и в особенности на тех, кто занимается проектированием. Это основная причина того, что иногда разработчики больших систем или систем реального времени вынуждены отказываться от использования языков высокого уровня. Мы увидим еще несколько примеров того, как требование достижения высокой производительности усложняет разработку.
Любой процесс может быть описан несколькими различными «правильными» последовательностями команд. Сотня программистов смогла бы написать сто различных программ платежной ведомости, каждая из которых будет выполнять то, что от нее требуется. Небольшое количество среди них будет оптимальным. Важные характеристики каждой программы порой конфликтуют друг с другом, подобно тому как при конструировании самолетов размеры вступают в конфликт со скоростью. Прочитав гл.5, вы узнаете, что каждая программа имеет по крайней мере 12 характеристик и некоторые из них, находя воплощение в одной программе, могут вступать с другими в противоречие. Множественность возможных решений является серьезным препятствием для правильного управления процессом разработки программного обеспечения.
Абстрактный характер программного обеспечения. Ни одним из пяти человеческих чувств нельзя ощутить большую программную систему. Она абстрактна. Можно увидеть и пощупать вычислительную машину стоимостью в 20 млн. долларов или мост, стоящий 100 млн. долларов. По мере увеличения числа команд в программе ее обозрение все более затрудняется.
Посмотреть на список из миллиона строк команд отнюдь не так же легко, как посмотреть на мост. Невозможно увидеть ни последовательность выполнения команд, ни структуру программы. Можно увидеть лишь толстую пачку бумаги, строки различных символов, но никак не программное обеспечение. Это свойство программного обеспечения делает управление его разработкой очень трудным.
Основным инструментом создания нового программного обеспечения является вычислительная машина и ее программное обеспечение. Разработчики программного обеспечения в своей работе используют ЭВМ и программное обеспечение как основной инструмент для формирования и создания новых программ. Программное обеспечение является при таком использовании «инструментом для изготовления инструментов».
Рассматривать программное обеспечение можно либо в роли исполнителя задания (период использования), либо в роли помощника при создании нового дополнительного программного обеспечения (период разработки). Эти роли абсолютно различны, и тот факт, что одну и ту же аппаратуру можно использовать для выполнения обеих функций, является источником крайнего изумления для многих новичков.
Для тех же, кто постоянно работает с вычислительными машинами и программным обеспечением, этот факт настолько очевиден, что они думают, что это и для всех само собой разумеется. Их не смущает, что в одном предложении они обсуждают, скажем VAX-11 в роли исполнителя операционной системы, контролирующей полет ракеты, а в следующем предложении переходят к обсуждению работы той же физической машины, расположенной в том же самом месте, работающей в той же конфигурации, но уже в роли «инструментальной» машины, которая используется для сопровождения программ, выполняемых в тот момент, когда VAX-11 контролирует полет ракеты.
Для людей, далеких от таких способов разработки, такое изложение может показаться туманным, поскольку в тексте перемешиваются предложения, рассказывающие о двух совершенно различных способах использования одной и той же машины.
Эту двойную роль следует четко выделить. Переходить с описания одной роли машины к описанию другой профессиональные программисты должны с осторожностью, обязательно оговаривая такие переключения.
Трудность разработки программного обеспечения часто заключается не в тех функциях, которые оно выполняет, а в способе взаимодействия с пользователем. Требования к надежности системы часто гораздо сильнее затрудняют разработку, чем та функция, которую должно исполнять программное обеспечение. Программу, управляющую полетом самолета, сделать легко. Очень трудно добиться того, чтобы эта программа никогда не переставала работать, несмотря на аппаратные и программные сбои и ошибки летчиков. И все же факторы взаимодействия часто остаются вне поля зрения разработчиков либо рассматриваются ими неверно. Разрабатывать самовосстанавливающиеся программы это одно из самых сложных дел.
Некоторые виды программного обеспечения могут разрабатываться теми же методами, что и аппаратура, другие же так разрабатывать нельзя. Программное обеспечение состоит из отдельных команд, а мы можем написать команды, чтобы выполнить почти все что угодно, да еще массой различных способов. Команда не является физической «вещью». Аппаратура же – вещь физически реальная, и поэтому переставлять и комбинировать ее так свободно нельзя. Мы выделяем те отдельные случаи, когда программы становятся похожими на аппаратуру и должны разрабатываться теми же методами. Однако в больших системах аппаратура и программы имеют существенные различия. Аппаратуру можно здесь сравнивать с роялем, а программное обеспечение с музыкой. Аппаратура это словарь, а программное обеспечение – роман. Итак, несмотря на большое количество сходного в аппаратуре и программах, при разработке больших систем на первый план выступает их принципиальное различие. Более подробно этот вопрос будет рассмотрен далее.
Правильное программное обеспечение не подвержено никаким отказам. Оно, следовательно, не нуждается в техническом обслуживании. Подобный процесс нужно называть не обслуживанием, а продолжающейся разработкой. Если команды написаны правильно, они не могут вдруг стать неправильными. Они могут устареть, но происходит это по другим причинам. Они могут также быть неверными с самого начала, что, однако, не было обнаружено при тестировании. Обслуживание программы, иначе говоря продолжающаяся разработка, состоит в выявлении ранее не обнаруженных ошибок, добавлении новых функций, модификации некоторых функций, повышении производительности.
Этот факт чрезвычайно важен! Многие программисты считают, что обслуживание – это дело не интересное и не такое престижное, как разработка программ. Однако продолжающаяся разработка часто оказывается делом более сложным, чем первоначальная разработка. Мы должны называть этот процесс более точно – именно продолжающейся разработкой – и тем содействовать стиранию позорного и незаслуженного пятна, лежащего на тех, кто занимается обслуживанием.
Разработка программного обеспечения – это многогранная деятельность, связанная не только с работой на вычислительной машине. При работе над проектом большой программной системы обычно необходимо быть компетентным и в общих инженерных вопросах, и в математике, нужно разбираться в различных видах вооружения, знать законы небесной механики, разбираться в военной логистике, знать методы экономического планирования, понимать, что такое резервирование; необходимо ориентироваться в теории межпланетных полетов и в аэродинамике, а также еще в огромном количестве различных областей знаний. Руководитель разработки программного обеспечения должен в своем проекте все это учитывать. Это означает, что этот руководитель должен обладать способностью управлять группой специалистов из различных областей.
Большая программная система никогда не может быть отлажена до конца, даже после многих лет тестирования и использовании. До конца могут быть отлажены только маленькие программы, большие же и сложные не могут. Слишком много путей предусматривает общий алгоритм программы, слишком много возможных вариантов вводимых данных или действий пользователей.
Даже сотни лет продолжающегося тестирования – если бы, конечно, это стало возможно – не хватило бы для проверки всех возможных ветвей большой, сложной программы. И несмотря на это, находятся люди, всерьез говорящие о «программном обеспечении, свободном от ошибок»!
Разработка программного обеспечения часто весьма трудоемкий и дорогостоящий процесс. В Соединенных Штатах Америки каждый год вкладывается в разработку программного обеспечения больше 20 млрд. долларов. Это очень много, а ведь имеется устойчивая тенденция роста таких вкладов. И не все капиталовложения окупаются.
В начале 1970-х гг. две основные авиакомпании возбудили судебное дело против своих подрядчиков, поскольку созданная ими система стоимостью 40 млн. долларов не только не работала, но и вообще не подавала никаких признаков жизни. Крупный европейский банк направил в суд иск о взыскании 70 млн. долларов, выплаченных за программное обеспечение. Военно-воздушные силы США затратили более 300 млн. долларов на тщетную попытку автоматизировать комплексную систему перевозок и снабжения.
Программное обеспечение – это средство, а не цель. Одна из замечательных технических групп работает в National Security Agency (NSA). Она специализируется в области защиты и разгадывания шифров и привлекает в свои ряды и воспитывает знатоков различных технологических методов.
Недавно один человек, занимающийся вычислительными машинами и средствами связи, поведал мне о событиях, происшедших несколько лет назад, когда он был председателем Комитета определения стандартов для приобретаемого программного обеспечения.
Один из членов его комиссии, страшный зануда, постоянно настаивал на том, чтобы методика «сверху – вниз», весьма популярная среди разработчиков программного обеспечения, использовалась и в их комитете. Это означало, что им нельзя проводить совещания по программному обеспечению, пока не обсуждены системы, для которых необходимо это обеспечение и частью которых оно должно стать.
Наконец председатель был вынужден сходить к главе NSA и заявить ему, что указанный член комиссии был прав – сначала комитет должен разработать стандарты и руководства на приобретение систем, а уж затем переходить к программному обеспечению.
Хотя глава NSA чувствовал, что им известно, как нужно производить приобретение систем, первым документом, изданным комитетом, был документ под названием «Политика приобретения систем». Лишь затем удалось заняться программным обеспечением!
Программное обеспечение это продукция «третьего порядка», оно помогает работать всей системе, а система уже достигает нужных результатов.
Само по себе программное обеспечение никогда нельзя рассматривать как конечную продукцию. Даже как рыночный товар оно имеет вспомогательный характер и должно разрабатываться и продаваться с учетом этого.
Что мы имеем в виду под «третьим порядком»? На первом месте, безусловно, находится желаемый результат. Например, увеличение продажи билетов, происшедшее из-за введения в действие системы предварительного заказа. Результат – это то, к чему мы стремимся, он является целью первостепенной. На втором плане находится система, достигающая данного результата, а программное обеспечение, как часть этой системы, занимает лишь третье место. Важное, это верно. Может быть, самое важное, но все же лишь третье.
Зачем заострять внимание на этом очевидном факте? Уинстон Черчилль определял фанатика как человека, который не изменяет своего решения и не переводит разговор на другую тему. Нам же постоянно приходится сталкиваться с «программистами-фанатиками», которые считают, что важнее программного обеспечения нет ничего на свете. Этим фанатикам нельзя доверять руководство системами или проектами, поскольку у них искаженное представление об окружающем мире и извращенное суждение о программном обеспечении, системе и результате.
Определение требований – это наиболее неразработанная область, связанная с созданием программного обеспечения. Эта область связана отнюдь не только с программным обеспечением; здесь поднимаются вопросы, связанные и с всевозможными типами аппаратуры, и с людьми, и с технологией! Если программное обеспечение рассматривать как вспомогательный механизм, получающаяся в результате продукция будет значительно лучше, чем в том случае, если считать его первостепенным и наиважнейшим фактором.
Две роли программного обеспечения
Очевидная роль программного обеспечения – заставить работать аппаратуру! Но давайте заглянем поглубже. Этим роль программного обеспечения не ограничивается. Оно еще должно быть легко модифицируемым.
Никто без серьезных оснований не станет ломать антенну радиолокатора или новый спутник (ценой около 50 млн. долларов). Однако руководители различных систем с легкостью идут на изменения в программном обеспечении! Они должны даже заранее планировать эти изменения. Такая роль была уготована программному обеспечению с самого его возникновения. Изучение истории этого вопроса возвращает нас к понятию запоминаемой программы.
Универсальным устройством вычислительная машина стала с появлением возможности стирать и изменять информацию в своей памяти. Но эта же возможность привела и к тому, что ЭВМ стали гибкими, легко адаптирующимися устройствами. Универсальность и гибкость одинаково связаны с возможностью изменения состояния памяти. Чтобы лучше использовать все выгоды гибкости вычислительных машин, нам необходимо очень тщательно подходить к вопросу контроля программного обеспечения и быть всегда готовыми внести все нужные изменения.
Почему проблема программного обеспечения еще не полностью решена?
Почему разработка программного обеспечения часто так трудна? Ниже изложены причины, всевозможные комбинации которых дают ответ на этот вопрос.
1. Сложность. Внутренняя сложность автоматизируемого процесса, т. е. научная сложность (лунное притяжение и т. д.), или логическая сложность (число ветвей в программе может достичь значения 103000), или и та и другая вместе.
2. Абстрактность. Управление и создание его происходит «вслепую», и, для того чтобы «увидеть», что происходит, требуются весьма сложные приспособления.
3. Путаница в требованиях. Руководство обычно убеждено, что вполне понимает все требования пользователей, даже в том случае, если пользователь до того ни разу не видел подобной системы. Кроме того, распространено заблуждение, что первоначально поставленная цель системы (в тех случаях, когда она известна не изменяется. Отсюда часто возникает абсурдное представление, что большая программная система может быть разработана с помощью «большого взрыва».
4. Социальные факторы. Постоянно предпринимаются усилия по снижению стоимости разработки системы. Программная часть системы, как наименее понятная, подвергается наибольшим денежным ограничениям. Именно из-за малопонятности программного обеспечения легче всего доказать необходимость ограничения капиталовложений в него. Программное обеспечение «невидимо».
5. Управление взаимодействием с пользователем с помощью программного обеспечения. Создаваемое для такого взаимодействия программное обеспечение должно выполнять следующее:
а) обеспечивать, чтобы работа системы никогда не прекращалась, т. е. программы должны управлять аппаратурой, данными и другими программами так, чтобы при возникновении ошибок работа возобновлялась без вмешательства человека.
б) обеспечить, чтобы программа выполняла задание за определенный период времени: таким образом, программы должны управлять распределением временных отрезков и состояниями составных частей, меняя, если это необходимо, последовательность выполнения работ.
в) интерфейс с пользователем ориентирован на удобство работы пользователя, а не системы, при этом пользователь может использовать систему с минимумом специальных навыков.
Разрабатывать программное обеспечение очень и очень трудно. Оно имеет весьма запутанную логическую структуру.
Глава 2
Вычислительная машина и способы ее использования
Определение вычислительной машины
Едва ли возможно изучать законы полета, не изучая самого самолета. Обсуждение этих законов обычно проводится в предположении, что слушатели понимают основные принципы действия рулей, закрылков и т. п. К моему ужасу, я часто обнаруживал, что мое представление об аппаратуре вычислительной машины немного, но в главном отличается от представлений моих коллег. Итак, прежде чем заняться более глубоким изучением программного обеспечения, мы просто обязаны изучить ЭВМ и способы ее использования.
Одним из значений слова «определить» является «установить границы». Предлагаемое ниже определение как раз и обрисовывает и устанавливает границы. Определение дается в два этапа, сначала определяется собственно вычислительная машина, а затем запоминаемая программа и универсальная ЭВМ.
Определение: Вычислительная машина – устройство, которое автоматически и непрерывно что-то вычисляет, выбирая свои действия из множества заранее установленных.
Подробнее обсудим некоторые моменты.
Вычислить: «Выяснить или определить с помощью какого-либо процесса». Это слово можно интерпретировать многими способами, я использую его в самом широком смысле. Сравнить – это вычислить. Измерение это также вычисление.
Автоматически и непрерывно: Пущенное в ход человеком, данное устройство будет работать «до конца» – до тех пор, пока задание не будет выполнено полностью. Теоретически оно может работать бесконечно долго, если управляемый устройством процесс не имеет логического конца. Здесь мы отмечаем способность проводить операции в течение длительного периода времени без вмешательства человека.
Выбор действия из множества заранее установленных: Человек вводит несколько альтернативных вариантов последовательностей операций, а вычислительная машина в соответствии со своими собственными внутренними процессами «выбирает» ту ветвь, которую надо выполнять в данный момент. Все ветви заранее определяются человеком, который программирует для этой машины.
Это определение подходит для всех вычислительных машин, а не только для универсальных. Попробуем теперь обрисовать различия между специализированными и универсальными ЭВМ. Наиболее четкое из всех когда-либо встречавшихся мне разграничений проведено в высказывании знаменитого Джона фон Неймана, написавшего в 1946 г. меморандум, навсегда связавший его имя стой архитектурой ЭВМ, которая используется нами и до сих пор. В этом меморандуме впервые появилась четкая формулировка определения универсальной вычислительной машины. Там говорилось, что во всех специализированных машинах, которые применялись уже много лет, все команды были встроены таким образом, что являлись неотъемлемой частью самого устройства. Другими словами, алгоритм, выполняемый машиной, является частью конструкции этой машины. Фон Нейман указал, что машина может и другим способом контролировать ход операций – с помощью чисел, заносимых в машину.
Очевидно, что машина должна иметь возможность запоминать некоторым образом не только цифровую информацию, необходимую для проведения данных вычислений, например граничные значения, таблицы функций и промежуточные результаты вычислений, а также и команды, которые управляют последовательностью операций, выполняемые с числовыми данными. В специализированной машине эти команды являются неотъемлемой частью устройства и составляют часть разрабатываемой структуры. Универсальная машина должна иметь возможность проводить любые вычисления, которые могут быть выражены как вычисления над числами.
Определение универсальной вычислительной машины
Универсальная вычислительная машина – это такая вычислительная машина, команды которой записаны в память и могут быть достаточно быстро заменены там другими командами без какого-либо инженерного вмешательства.
Даже если бы смена команд происходила медленно (скажем, за несколько часов), мы все же имели бы универсальную машину, хотя и медленную.
Это определение отделяет универсальную цифровую вычислительную машину (ЦВМ) от ручного калькулятора и от сложных автоматов, плотно заселивших наше технологическое общество.
Это определение может быть применимо к замечательным и недорогим устройствам, которые производятся на основе больших интегральных схем (БИС). Оно проводит различие между электрической схемой и вычислительной машиной, между калькулятором и ЭВМ.
Это определение охватывает все вычислительные машины, будь то микро-, мини-, миди– или макси-машины. Различие между микро– и мини-ЭВМ очень нечеткое, и постепенно сотрется по мере прогресса БИС. Через несколько лет все вычислительные машины станут микро-ЭВМ и будут целиком располагаться на одном полупроводниковом кристалле.
Не будем продолжать обсуждение этого определения. Это уведет нас в сторону от вопросов программного обеспечения. Всякое определение важно, а это к тому же точно и полезно.
Вычислительная машина: орудие труда нового типа
То, как будет использоваться вычислительная машина, определяет и потребность в программном обеспечении. Здесь нам полезно будет взглянуть, как человек использует орудия труда. Мак Лухан утверждает, что каждое орудие представляет собой продолжение функций человеческих органов.
Нога | Колесо, велосипед, автомобиль, самолет |
Кулак | Камень, дубинка, ружье |
Кожа | Одежда |
Глаз | Телескоп, микроскоп, радиолокатор |
Рот, ухо | Радио, микрофон |
Мозг | Бумага (память), калькулятор, арифмометр |
Мозг | Вычислительная машина |
Воля[3]3
Имеется в виду воля как способность принимать решения в ходе выполнения какого-либо задания. – Прим. перев. [Закрыть] | Вычислительная машина |
Какие же способности людей расширяются с помощью вычислительных машин? Оказывается, две очень разные человеческие характеристики – его ум и воля.
«Новинка» – популярная телевизионная передача рассказала однажды о вычислительной машине, названной «умной машиной». Однако ЭВМ это больше, чем просто дополнительный мозг, и этот факт имеет глубокое влияние на программное обеспечение, которое мы должны разрабатывать с учетом того, что вычислительная машина является еще и продолжением нашей воли.
«Продолжение» мозга. Высокая скорость работы ЭВМ позволит людям решить неразрешимые до сих пор задачи. Тысячи людей, вооруженных арифмометрами, работая тысячи лет, не смогли бы проделать тех вычислений, которые проводит большая ЭВМ за считанные минуты. Такое использование позволяет вооружить наш мозг, дать возможность решить задачу, выполнить огромное множество арифметических операций.
«Продолжение» воли. В несколько ином смысле вычислительная машина «продолжает» человеческую волю. Она выполняет приказы и делает выбор между вариантами, невзирая на то, присутствует рядом человек или нет. Именно эта способность выбирать из разных вариантов и делает ее продолжением человеческой воли. Причем в этом смысле скорость работы ЭВМ совершенно несущественна.
Если лишить машину возможности выбора, она превратится в простое расширение человеческого мозга! Реализуется такой выбор с помощью команд условного перехода, которые являются воплощением функции выбора.
Люди и новые орудия труда. Люди всегда начинают с того, что используют новые орудия труда для решения старых задач. Только через годы или даже десятилетия продолжительного опыта новое орудие начинает использоваться для новых целей. Вычислительные машины быстро проникают во все новые области применения. И именно для этих новых применений разработка программного обеспечения особенно трудна.
Телеграф заменил верховых посыльных. Радио сменило телеграф. Однако надежды на то, что радио будет использоваться вместо телефона (что приведет в исчезновению проводов), не оправдались; это, по-видимому, связано с отсутствием секретности при радиопередачах. Любой, кто имеет радиоприемник, может спокойно слушать все разговоры. Прошло 20 лет использования радио, прежде чем совершенно случайно не было обнаружено, что радио это великое средство для развлечения – некий дантист из Питтсбурга начал по субботним дням «трансляцию» музыки из своего гаража, и началась новая эра радиовещания и развлечений с доставкой на дом. То самое свойство, которое не позволило радио сделаться заменой телефона, и сделало его мощным орудием индустрии развлечений.
Дэвид Сарнов, предвидя такое использование радио, в своем полуфантастическом меморандуме писал за целое десятилетие до начала передач упомянутого дантиста:
Мне пришел в голову план развития, в результате выполнения которого радио станет обычным предметом домашнего обихода, каким является пианино или фонограф. Идея состоит в доставке музыки на дом без использования проводов. В прошлом уже делались такие попытки с проводами, но они не удались, так как провода в эту схему явно не вписываются. Радио – это как раз то, что нам необходимо. Можно разработать специальный приемник в виде простейшего «музыкального радиоящика», приспособленного для работы на нескольких различных длинах волн, менять которые можно будет простым поворотом выключателя и нажатием единственной кнопки…
Меморандум Сарнова в точности предсказал то, что и произошло в действительности. Однако его руководство посмеялось над ним, и передачи начала вести первой не его фирма.
Прогресс в использовании вычислительных машин шел в точности по общей схеме. Сначала они выполняли то, что делалось и раньше, без них, и было хорошо известно – платежные ведомости, инвентаризация, баллистические и инженерные расчеты. Лишь постепенно захватывались новые области применения – справочные системы, управление информационными системами и системы разделения времени.
Наконец, вычислительные машины начали использовать в той области, которую я называю управление процессами, и именно здесь, в этой новой области использования теперь уже «старого» орудия труда, нам наиболее трудно проводить разработку программного обеспечения.
Использование вычислительной машины
Одна из главнейших проблем, связанных с вычислительными машинами, состоит в их крайней разносторонности – их можно использовать буквально для всего. Как еще в 1936 г. показал Тюринг, любая функция или процесс, которые можно выразить с помощью какого-либо алгоритма, могут быть выполнены очень простой машиной, если, конечно, не принимать во внимание временные факторы.
В 1910 г. Бертран Рассел и Альфред Норт Уайтхед выпустили труд «Principia Mathematica», в котором выдвинули принцип, согласно которому основанием всех математических дисциплин является логика. Тем самым доказательство теорем, решения различных задач можно рассматривать в терминах специального вида утверждений, каждое из которых может быть истинным или ложным. Мы обнаруживаем, что вычислительная машина это гораздо более сложное устройство, нежели просто арифметический вычислитель, это еще и логическая машина.
Документы, описывающие различные использования вычислительных машин, состоят из сотен и сотен пунктов. Можно продолжать составление таких списков до бесконечности, но занятие это совершенно бесполезное. Куда больше пользы принесет попытка разделить виды использования вычислительных машин на качественные категории, отличающиеся друг от друга требованиями к аппаратуре, программному обеспечению, людям. Различия должны быть достаточно глубокими, чтобы такое деление было полезным всем тем, кто создает сложные системы, основанные на использовании вычислительных машин.
Мы будем рассматривать пять различных типов использования:
Тип 1. Обработка данных
Тип 2. Решение научных задач
Тип 3. Информационные системы
Тип 4. Диалоговые системы решения задач
Тип 5. Управление процессами
И история развития, и терминология вычислительной техники провели четкое различие между машиной, используемой для коммерческих расчетов – процесса, который отмечен как обработка данных, – и машиной для решения задачи, той машиной, что, собственно, и называется вычислительной машиной. Аппаратура, разрабатываемая для одного из этих использований, сильно отличалась от аппаратуры, применявшейся в другой области. Лишь недавно (1964) одна и та же аппаратура получила возможность работать и там и там, выполняя обе задачи.