Эволюция разработки программного обеспечения

История развития вычислительной техники. Появление в конце 50-х годов языков программирования высокого уровня. Применение ЭВМ для решения задач искусственного интеллекта и обработки текстов. Работы по организации процесса тестирования. Книга Брукса.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 21.11.2013
Размер файла 16,4 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru

Эволюция разработки программного обеспечения

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

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

По мере того как вычислительные машины становились мощнее и надежнее, значение программного обеспечения осознавалось все большим количеством ученых и практиков. Важнейший прорыв произошел в конце 50-х годов, когда появились языки программирования высокого уровня: Фортран, Алгол и др. Появление языков программирования высокого уровня было обусловлено прежде всего тем, что написание программ без них становилось все более сложной задачей. Решив текущие проблемы, эти языки создали новые. Ускорив и упростив программирование, языки программирования существенно расширили круг задач, которые стали решаться с помощью ЭВМ. Новые задачи, более сложные, чем решавшиеся раньше, привели к тому, что имеющихся средств снова стало недостаточно для успешного их решения. 

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

Прежде всего усилия были сосредоточены на создании новых языков программирования. Появился язык Кобол, который должен был решать задачи обработки экономической информации. Он создавался таким образом, чтобы программа на нем выглядела почти как текст на английском языке. Появился язык PL/1, призванный объединить все возможности, которые только можно представить себе в языке программирования. 

Языки, которые мы уже упоминали (Фортран, Алгол, PL/1) поддерживают процедурный стиль программирования. Программа разрабатывается в терминах тех действий, которые, она выполняет. Основной единицей программы является процедура. Процедуры вызывают другие процедуры, все вместе они работают по определенному алгоритму, который ведет к решению задачи. Алгоритм - -это точная последовательность действий для получения необходимого результата. 

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

Слово «алгоритм» (algoNthmi, algorismus) произошло от латинской транслитерации имени среднеазиатского математика аль-Хорезми, который описал точную последовательность действий для вычисления наибольшего общего делителя . 

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

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

Первой, пожалуй, была осознана проблема ошибок. Сравнивая программирование с другими инженерными дисциплинами, многие задавались вопросом: почему можно добиться безошибочной работы радиоприемника или даже процессора ЭВМ, но чрезвычайно сложно добиться безошибочной работы программы- Нельзя ли так организовать тестирование и проверку программ, чтобы добиться 100-процентной уверенности в ее правильности- 

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

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

В 70 -- 80-х годах бурно развивалась теория доказательства правильности программ. Она основывалась на том, что текст программы задает все, что она делает. Утверждалось, что, имея формальное описание семантики всех конструкций языка, можно на основе анализа текста строго математически вывести заключение о правильности или неправильности программы. 

Прежде всего, было необходимо создать строгое описание не только синтаксиса языка, но и смысла всех его конструкций. Если с синтаксисом принципиально проблема была решена еще в конце 50-х годов созданием формальной теории грамматики языка Хомского и способа записи грамматики Бэкуса -- Каура, то с семантикой оказалось сложнее. Было разработано несколько методов описания семантик: W-грамматики, аксиоматический подход, денотационный метод, атрибутные грамматики, Венский метод описания и ряд других. С помощью этих методов было описано несколько реальных языков программирования: PL/1, Алгол-68, Паскаль и др. 

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

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

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

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

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

Следствием интенсивных исследований в области методов программирования явилось появление большого числа средств автоматизации разработки программ (CASE-средств, Computer Aided Software Engineering). Предполагалось, что после записи задачи на каком-либо высокоуровневом языке эти системы автоматически (или хотя бы с минимальным участием человека) сгенерируют готовую, правильно работающую программу, которая адекватно решает поставленную задачу. 

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

Несмотря на провал при достижении основной цели, опыт разработки САЗЕ-средств дал очень много для развития методов программирования. Небольшая часть систем используется напрямую (например, генераторы компиляторов lex и уасс), часть идей была использована в современных средствах быстрой разработки программ (RAD, Rapid Application Development), таких, как JBuilder, Delphi, Powerbuilder и др. Кроме того, методы анализа и проектирования программ очень много унаследовали от методов, использовавшихся при разработке средств автоматизированного программирования. вычислительная техника программная

По мере увеличения сложности решаемых задач и соответственно увеличения размеров программных систем все большее значение приобретали вопросы организации процесса разработки программного обеспечения. Широко известна (и не потеряла своего значения до сих пор) книга Брукса. Автор -- один из руководителей разработки операционной системы OS/360 для ЭВМ IBM/360 -- показал значение организации работы программистских коллективов для успеха (или провала) проекта. Ценность этой книги даже не в том, что приведены конкретные организационные структуры (например, метод хирургических бригад не нашел широкого применения), а в том, что она развеяла миф о человеко-месяцев. Механическое увеличение количества людей, работающих над программой, не ускорит процесса ее разработки. 

В 70-е годы была сформулирована модель процесса разработки. Эта модель выделяла несколько фаз процесса: анализ, дизайн, кодирование, тестирование, внедрение. Каждая последующая стадия «вытекает» из предыдущей, поэтому и модель получила название каскадной. 

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

Приведенный исторический экскурс развития методологии программирования иллюстрирует то, что все время программирование «боролось» за возможность решать все более сложные задачи, создавать все более сложные программные системы и делать это как можно быстрее. Периодически то или иное достижение объявлялось панацеей (будь то структурное программирование, САSЕ-средства или что-либо еще). С той же закономерностью оказывалось, что широко разрекламированное средство не способно решить все проблемы. 

Размещено на Allbest.ru


Подобные документы

  • Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.

    курсовая работа [381,7 K], добавлен 10.05.2018

  • Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.

    курсовая работа [345,6 K], добавлен 13.11.2009

  • Описание вычислительной техники, характеристика операционных систем и языков программирования. Сравнительный анализ аналогов и прототипов. Разработка алгоритма решения задачи. Выбор средств и методов решения задач. Проектирование программного обеспечения.

    отчет по практике [1,0 M], добавлен 23.03.2015

  • Классификация экспертных систем и программного обеспечения для их разработки. Практическое применение искусственного интеллекта на машиностроительных предприятиях и в экономике. Составление дерева решения. Язык функционального программирования LISP.

    курсовая работа [542,6 K], добавлен 12.12.2013

  • Понятия структурного программирования и алгоритма решения задачи. Краткая история развития языков программирования от машинных до языков ассемблера и языков высокого уровня. Процедурное программирование на C#. Методы и программы для моделирования.

    учебное пособие [1,7 M], добавлен 26.10.2010

  • Основные этапы разработки программного обеспечения (пакета программ), анализ требований к системе. Метод пошаговой детализации. Языки программирования низкого уровня и высокого уровня (императивные, объектно-ориентированные, функциональные, логические).

    презентация [41,4 K], добавлен 13.10.2013

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

    курсовая работа [400,6 K], добавлен 10.11.2016

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

    отчет по практике [700,5 K], добавлен 24.11.2014

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

    контрольная работа [27,9 K], добавлен 07.12.2009

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

    реферат [29,0 K], добавлен 09.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.