Основы алгоритмизации и программирования
Понятие и свойства алгоритма, примеры его предоставления и записи. Специфика алгоритмического языка, их уровни и примеры. Примеры стандартных математических функций для некоторых языков программирования. Эволюция развития программирования как науки.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лекция |
Язык | русский |
Дата добавления | 12.02.2013 |
Размер файла | 3,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
· состав и глубина проработки реализованных функций обработки;
· полнота и системность функций обработки;
· объем файлов программ;
· требования к операционной системе и техническим средствам обработки со стороны программного средства;
· объем дисковой памяти;
· размер оперативной памяти для запуска программ;
· тип процессора;
· версия операционной системы;
· наличие вычислительной сети и др.
5. Технология программирования - совокупность методов и средств, используемых в процессе разработки программного обеспечения. Различают технологии, используемые на конкретных этапах разработки или для решения отдельных задач этих этапов, и технологии, охватывающие несколько этапов или весь процесс разработки.
6. Основные этапы развития технологий программирования:
· «стихийное» программирование (конец 40-х - средина 60-х годов XX в.),
· структурный подход к программированию (60-70-е годы XX в.),
· объектный подход к программированию (середина 80-х - конец 90-х годов XX в.)
· компонентный подход и CASE-технологии (с середины 90-х годов XX в. до нашего времени).
ПРИЛОЖЕНИЕ 1
Процесс создания программы решения задачи
1. Основные понятия и определения
Возможности ЭВМ как технической основы системы обработки данных связаны, в первую очередь, с используемым программным обеспечением (программами).
Программа - это упорядоченная последовательность команд (инструкций) компьютера для решения конкретной задачи.
Программы предназначены для машинной реализации задач.
Задача - это проблема, подлежащая реализации с использованием средств информационных технологий.
Существует большое число разнообразных классификаций задач. С позиций специфики разработки программ различаются два класса задач - технологические и функциональные.
Технологические задачи ставятся и решаются при организации технологического процесса обработки информации на ЭВМ. Они являются основой для разработки сервисных средств ПО в виде утилит, сервисных программ, библиотек процедур и др., применяемых для обеспечения работоспособности компьютера, разработки других программ или обработки данных функциональных задач.
Функциональные задачи требуют решения при реализации функций управления в рамках информационных систем определенных предметных областей. Например, управление деятельностью предприятия, планирование выпуска продукции, управление перевозкой грузов и т.п. Функциональные задачи в совокупности образуют предметную область и полностью определяют ее специфику.
Предметная (прикладная) область - совокупность связанных между собой функций, задач управления, с помощью которых достигается выполнение поставленных целей.
В достаточно общем виде подготовка задачи к решению на ЭВМ (процесс создания программы решения задачи) можно представить как последовательность действий, показанных на рис. П1.1. Более подробно этот процесс рассмотрен в приложении 2 к данной лекции.
Постановка задачи - это точная формулировка решения задачи на компьютере с описанием входной и выходной информации.
К основным характеристикам задач, уточняемым в процессе ее формализованной постановки, относятся:
· цель или назначение задачи, ее место и связи с другими задачами;
· условия решения задачи с использованием ЭВМ;
· содержание функций обработки входной информации при решении задачи;
· требования к периодичности решения задачи;
· ограничения по срокам и точности выходной информации;
· состав и форма представления выходной информации;
· источники входной информации для решения задачи;
· пользователи задачи.
Алгоритмизация решения задачи заключается в разработке алгоритма - системы точно сформулированных правил, определяющая процесс преобразования допустимых исходных данных (входной информации) в желаемый результат (выходную информацию) за конечное число шагов.
В алгоритме отражаются логика и способ формирования результатов решения с указанием необходимых расчетных формул, логических условий, соотношений для контроля достоверности выходных результатов. В нем обязательно должны быть предусмотрены все ситуации, которые могут возникнуть в процессе решения комплекса задач.
Программирование - это теоретическая и практическая деятельность, связанная с созданием программы.
Программирование является собирательным понятием и рассматриваться с одной стороны как наука, а с другой - как искусство, на этом основан научно-практический подход к разработке программ.
Программа - это результат интеллектуального труда, для которого характерно творчество. В любой программе присутствует индивидуальность ее разработчика, программа отражает определенную степень искусства программиста. Вместе с тем программирование предполагает и рутинные работы, которые могут и должны иметь строгий регламент выполнения и соответствовать определенным стандартам.
Программирование базируется на комплексе научных дисциплин, направленных на исследование, разработку и применение методов и средств разработки программ (специализированного инструментария создания программ). При разработке программ используются ресурсоемкие и наукоемкие технологии, высококвалифицированный интеллектуальный труд.
В связи с ростом потребности в разнообразных программах обработки данных весьма актуален вопрос применения эффективных технологий программирования и их перевода на промышленную основу. Это означает:
· стандартизованность, тиражируемость и воспроизведение различными разработчиками методов программирования;
· внедрение прогрессивных инструментальных средств разработки программ;
· использование специальных методов и приемов организации работ по разработке программ.
Разрабатываемые программы по характеру использования делятся на утилитарные программы и программные продукты (изделия).
Утилитарные программы предназначены для удовлетворения нужд их разработчиков. Чаще всего они выполняют роль сервиса в технологии обработки данных либо являются программами решения функциональных задач, не предназначенных для широкого распространения.
Программный продукт (изделие) - это комплекс взаимосвязанных программ для решения определенной проблемы (задачи) массового спроса, подготовленный к реализации как любой вид промышленной продукции.
Как правило, программный продукт разрабатывается на основе промышленной технологии выполнения проектных работ с применением современных инструментальных средств программирования. Специфика заключается в уникальности процесса разработки алгоритмов и программ, зависящего от характера обработки информации и используемых инструментальных средств. На создание программных продуктов затрачиваются значительные ресурсы - трудовые, материальные, финансовые; требуется высокая квалификация разработчиков.
Как правило, программные продукты требуют сопровождения - поддержки работоспособности, переход на новые версии, внесение изменений, исправление обнаруженных ошибок и т.п.
Основными характеристиками программ являются:
· алгоритмическая сложность (логика алгоритмов обработки информации);
· состав и глубина проработки реализованных функций обработки;
· полнота и системность функций обработки;
· объем файлов программ;
· требования к операционной системе и техническим средствам обработки со стороны программного средства;
· объем дисковой памяти;
· размер оперативной памяти для запуска программ;
· тип процессора;
· версия операционной системы;
· наличие вычислительной сети и др.
Программные продукты имеют многообразие показателей качества, которые отражают следующие аспекты:
· насколько хорошо (просто, надежно, эффективно) можно использовать программный продукт;
· насколько легко эксплуатировать программный продукт;
· можно ли использовать программный продукт при изменении условия его применения и др.
В качестве основных характеристик качества программных продуктов выступают:
· мобильность - независимость программ от технического комплекса системы обработки данных, операционной среды, сетевой технологии обработки данных, специфики предметной области и т.п.;
· надежность работы - определяется бессбойностью и устойчивостью в работе программ, точностью выполнения предписанных функций обработки, возможностью диагностики возникающих в процессе работы программ ошибок;
· эффективность - оценивается как с позиций прямого назначения программного продукта - требований пользователя, так и с точки зрения расхода вычислительных ресурсов (объема внешней памяти для размещения программ, объема оперативной памяти для запуска программ и др.), необходимых для его эксплуатации;
· учет человеческого фактора - обеспечение дружественного интерфейса для работы конечного пользователя, наличие контекстно-зависимой подсказки или обучающей системы в составе программного средства, хорошей документации для освоения и использования заложенных в программном средстве функциональных возможностей, анализ и диагностику возникших ошибок и др.;
· модифицируемость - способность к внесению изменений, например расширение функций обработки, переход на другую техническую базу обработки и т.п.;
· коммуникативность - максимально возможная интеграция с другими программами, обеспечение обмена данными в общих форматах представления (экспорт/импорт баз данных, внедрение или связывание объектов обработки и др.).
Спецификой программных продуктов (в отличие от большинства промышленных изделий) является также и то, что их эксплуатация должна выполняться на правовой основе - лицензионные соглашения между разработчиком и пользователями с соблюдением авторских прав разработчиков программных продуктов.
Этапы проектирования программ
Для получения полезного и надежного программного продукта независимо от принятого метода проектирования и используемого инструментария его разработка должна осуществляться поэтапно.
1. Составление технического задания на программирование. На данном этапе заказчик ставит перед программистом задачу, в которой формулирует, что он хочет получить. Программист пытается уяснить, что хочет заказчик. Для этого ему приходится анализировать и уточнять постановку задачи. В результате создается спецификация задачи - точное, полное и однозначное ее описание (что должно быть сделано), из которой становится ясно, какие действия нужно выполнить в процессе решения задачи на ЭВМ.
Частью спецификации задачи является определение вида входных и выходных данных. Задание входных данных должно быть как можно более удобным и привычным для пользователя программы. Выходные данные должны быть оформлены так, чтобы их было легко проанализировать без привлечения других источников информации.
Рассмотрим пример спецификации задачи.
Постановка задачи: по заданному треугольнику и точке на плоскости определить, находится ли она внутри треугольника.
Спецификация задачи (что должно быть сделано):
· Получить точки А, B, C, D.
· Определить, лежит ли точка D в треугольнике ABC.
· Дать ответ.
Уточнение: в каком виде задаются точки и выдается ответ?.
Предположим, что две действительные координаты точки вводятся с клавиатуры в одной строке через пробел.
Перед заданием треугольника и точки должны выдаваться на экран приглашения.
Вход программы образован четырьмя строками на клавиатуре, содержащими по две действительные константы, разделенные пробелом.
· Перед первыми тремя должно появиться приглашение на ввод треугольника, перед последним - на ввод точки.
· Приглашение имеет вид: «Задайте три пары координат вершин треугольника:» и «Задайте две координаты точки:».
· Выходом программы является фраза: «Точка в треугольнике» или «Точка не внутри треугольника».
Это и есть спецификация задачи.
В соответствии с описанной спецификацией задачи оформляется техническое задание на проектирование, которое включает:
· определение аппаратно-программной платформы разрабатываемой программы - типы ЭВМ и операционной системы);
· оценку необходимости сетевого варианта работы программы;
· определение необходимости разработки программы, которую можно переносить на различные платформы;
· обоснование целесообразности работы с базами данных под управлением СУБД.
На этом этапе также осуществляется:
· выбор методов решения задачи;
· разработка обобщенного алгоритм решения комплекса задач, функциональной структуры алгоритм;
· определение требований к комплексу технических средств системы обработки информации, интерфейсу конечного пользователя и др.
Проектируя программу, важно правильно выбрать язык разработки программы и систему программирования. Язык должен как можно более адекватно выражать понятия задачи, а система программирования -- обеспечивать эффективные средства создания и отладки программы. Иногда отдельные подзадачи одной задачи решаются с помощью нескольких языков.
Во многих задачах большое значение имеет эффективность алгоритма ее решения.
Например, чтобы проверить, является ли натуральное число n простым, нужно убедиться, что оно не делится на целые числа от 2 до n - 1. Однако вместо этого достаточно проверить числа от 2 до , что при простом n приблизительно в раз быстрее. Так, при простых n порядка 108 второй способ окажется в десять тысяч раз быстрее.
2. Технический проект. На этом этапе, основываясь на спецификацию задачи, разрабатывается спецификация программы. К важнейшим работам данного этапа следует отнести:
· уточнение состава объектов программы, их свойств, методов обработки событий;
· разработку детального алгоритма обработки данных с учетом принятого подхода к проектированию программного продукта;
· определение состава необходимого общесистемного программного обеспечения (операционной системы, СУБД, методоориентированных и функциональных пакетов прикладных программ и т.п.);
· разработку внутренней структуры программного продукта;
· выбор инструментальных средств разработки программных модулей.
Работы данного этапа существенно зависят от принятых решений по технической части системы обработки данных и операционной среде, от выбранных инструментальных средств проектирования алгоритмов и программ, технологии работ.
Например, для создания Windows-приложения могут быть использованы интегрированные объектно-ориентированные системы Borland Delphi, Borland C++ Builder. Если необходима переносимость программ на другие ЭВМ или другие операционные платформы, выбирается среда Windows 2000 или Windows ХР.
Возможно применение технологии OLЕ 2.0 для создания приложений, включающих объекты других приложений. Определяется способ использования объектов: внедрение (Embedding) или связывание (Linking).
Приложение может работать с базами данных различных СУБД, для этого служит стандартная технология интерфейса Open Database Connectivity (ODBC). Работа в режиме телекоммуникаций обеспечивается стандартной технологией Messaging Application Program Interface (MAPI).
3. Рабочий проект. На данном этапе осуществляется:
· адаптация выбранных базовых средств ПО к решению поставленной задачи;
· разработка программных модулей - собственно программирование (кодирование), т.е. создание программного кода;
· автономная и комплексная отладка программного продукта;
· испытание работоспособности программных модулей и базовых программных средств.
Для комплексной отладки готовится контрольный тест, позволяющий проверить соответствие возможностей созданного программного продукта заданным спецификациям.
Кроме того, в процессе рабочего проектирования создается эксплуатационная документация на программный продукт, включающая:
· описание применения - дает общую характеристику программного изделия с указанием сферы его применения, требований к базовому ПО, комплексу технических средств;
· руководство пользователя - включает детальное описание функциональных возможностей и технологии работы с программным продуктом. Данный вид документации ориентирован на конечного пользователя и содержит необходимую информацию для самостоятельного освоения и нормальной работы пользователя (с учетом требуемой квалификации пользователя);
· руководство программиста (оператора) - указывает особенности установки (инсталляции) программного продукта и его внутренней структуры: состав и назначение модулей, правила эксплуатации и обеспечения надежной и качественной работы программного продукта.
В ряде случаев на данном этапе для программных продуктов создаются обучающие системы, демоверсии, гипертекстовые системы помощи.
4. Ввод в действие и сопровождение программы. Готовый программный продукт сначала проходит опытную эксплуатацию, а затем сдается в промышленную эксплуатацию (тиражирование и распространение программного продукта). В процессе эксплуатации в программу могут вноситься изменения и исправления ошибок, выявленных в процессе работы.
Может оказаться и так, что при проектировании программы был выбран не самый удачный алгоритм, из-за которого программа выполняется слишком медленно или расходует слишком много памяти. Начинаются изменения программы, требующие нового кодирования и отладки. Потом заказчика осеняют новые идеи, и приходится вообще заново ставить задачу и проектировать программу.
В настоящее время наблюдается тенденция возрастания продуктивности работы программистов. Причин несколько. Одна из них -- для каждого этапа создания программы существуют и развиваются технологии, т.е. определенные системы методов, применение которых позволяет «не делать лишних движений». Кроме того, постоянно совершенствуются инструменты, ускоряющие и облегчающие процесс разработки, -- системы программирования. Кроме всего прочего, они реализуют очень важный принцип повторного использования кода. Дело в том, что во многих задачах возникают одни и те же подзадачи, для которых можно использовать одни и те же программы (они называются подпрограммами), не создавая их заново. Такие подпрограммы собираются в специальные библиотеки подпрограмм. Чем богаче библиотеки, тем проще процесс разработки программ.
ПРИЛОЖЕНИЕ 2
Подготовка задачи к решению на ЭВМ
Классический подход
Подготовка задачи к решению на ЭВМ представляет собой достаточно сложный, трудоемкий, а иногда и довольно длительный процесс, состоящий из ряда характерных этапов. К ним относятся (рис.П2.1):
1. Постановка задачи;
2. Математическое описание (формализация) задачи;
3. Разработка алгоритма решения задачи (алгоритмизация);
4. Составление программы (программирование);
5. Запись программы на стандартный бланк (лист бумаги)
6. Ввод программы в ОЗУ ЭВМ;
7. Трансляция программы;
8. Отладка программы;
9. Оформление программы.
Рассмотрим сущность перечисленных этапов подготовки задачи к решению на ЭВМ более подробно.
Для того чтобы задачу решить, ее надо сначала поставить (сформулировать), а затем описать на языке математики. Как правило, две названные процедуры выполняются различными людьми. Первая, чаще всего, заказчиками (людьми, ставящими задачу), а вторая - людьми, решающими ее (программистами). Все эти действия относятся к подготовительным этапам решения задачи, постановку задачи; математическое описание (формализацию) задачи.
Постановка задачи
Начальным этапом решения на ЭВМ любой задачи является ее постановка, оформление в виде специального задания по разработке программы. Такое задание должно содержать точную формулировку задачи, раскрывать цель ее решения, определять объем и специфику исходных данных, указывать перечень окончательных результатов и формы их представления.
Кроме того, при постановке задачи формулируются основные критерии решения, принимаемые ограничения и допущения.
Постановка задачи (problem definition) - это точная формулировка решения задачи на компьютере с описанием входной и выходной информации.
Постановка задачи - обобщенный термин, который означает определенность содержательной стороны обработки данных. Постановка задачи связана с конкретизацией основных параметров ее реализации, определением источников и структурой входной и выходной информации, востребуемой пользователем.
К основным характеристикам задачи, уточняемым в процессе ее формализованной постановки, относятся:
* цель или назначение задачи, ее место и связи с другими задачами;
* условия решения задачи с использованием ЭВМ;
* содержание функций обработки входной информации при решении задачи;
* требования к периодичности решения задачи;
* ограничения по срокам и точности выходной информации;
* состав и форма представления выходной информации;
* источники входной информации для решения задачи;
* пользователи задачи (кто осуществляет ее решение и пользуется результатами решения).
Рис.П2.1. Этапы подготовки задачи к решению на ЭВМ
Выходная информация по задаче может быть представлена в виде документов (типа листинга или машинограммы), сформированных кадров - видеограммы на экране монитора, файла базы данных, выходного сигнала устройству управления (рис.П2.2).
Входная информация по задаче определяется как данные, поступающие на вход задачи и используемые для ее решения. Входной информацией служат первичные данные документов ручного заполнения, информация, хранимая в файлах базы данных (результаты решения других задач, нормативно-справочная информация - классификаторы, кодификаторы, справочники), входные сигналы отдатчиков (см. рис. П2.2).
Обычно постановка задач выполняется в едином комплексе работ по созданию структуры внутримашинной базы данных, проектированию форм и маршрутов движения документов, изменению организации управления в рамках предметной области.
Пример: На уроке математики преподавателем ставится задача определить корни квадратного уравнения, коэффициенты которого соответственно равны:
а = 1; b = -5; с = 6.
Требуется: определить корни квадратного уравнения и представить результат решения в следующем виде
(х-х1)(х-х2)=0.
Рис. П2.2. Схема взаимосвязи входной и выходной информации для решения задачи
Математическое описание (формализация) задачи
На данном этапе, в результате анализа сущности решаемой задачи устанавливается принадлежность ее к одному из известных классов задач, вводится система условных обозначений, выбирается математический аппарат, при помощи которого можно описать зависимость всех искомых результатов от заданных исходных данных, и разрабатываются такие способы получения результатов, которые могут быть реализованы на ЭВМ.
Пример: Продолжим решение задачи. Данная задача относится к классу алгебраических задач на нахождение корней квадратного уравнения.
В качестве неизвестного (переменной) выберем - X. Запишем заданное квадратное уравнение в виде:
x2-5x+6=0.
Для решения квадратного уравнения нам будут необходимы следующие математические зависимости:
дискриминант определяется как D =b2 -- 4ас,
корни квадратного уравнения определяются из выражения:
- b ±v D
х1,2 = --------------
2a
результат решения должен быть записан в виде: (x-x1) (x-x2) = 0.
После завершения подготовительных этапов начинается самый ответственный и творческий этап подготовки задачи к решению на ЭВМ. От качества его решения зависит не только правильность полученных результатов, но и гибкость программы, подготовленной для решения целого класса аналогичных задач. В отличие от таких же этапов при решении задач с использованием обычных вычислительных средств (например, калькулятора), при решении задачи на ЭВМ особую важность приобретает гибкость предлагаемого алгоритма и широкая известность и оправданное применение алгоритмического языка.
При разработке алгоритмов необходимо использовать специальные методы описания систем и процессов на основе анализа их функционирования. Соблюдением всех установленных правил достигается высокая эффективность получаемых алгоритмов.
Процедура составления алгоритмов для решения задач на ЭВМ получила название - алгоритмизация (algorithmization).
Разработка алгоритма решения задачи (алгоритмизация)
Этот этап непосредственно связан с предыдущим. Его цель состоит в том, чтобы получить точное и детальное описание процесса переработки исходных данных для получения требуемого результата в соответствии с выбранным методом решения задачи. Алгоритмизация занимает центральное место в процессе подготовки задачи к решению на ЭВМ.
В общем случае алгоритм решения задачи содержит в своем составе несколько обязательных блоков (рис. П2.3).
Первый и последний блоки самые маленькие. Они определяют момент начала и окончания выполнения алгоритма и сигнализируют ЭВМ об временных и координатных рамках решения задачи.
Второй блок необходим для расширения возможностей разрабатываемого алгоритма по решению выбранного класса задач. Чем большее количество исходных данных мы будем вводить перед началом вычислений, тем более гибким будет наш алгоритм, и тем самым большее количество аналогичных задач мы можем охватить.
Третий блок определяет собственно выбранный алгоритм вычислений искомого результата. Его сложность и громоздкость зависит от класса решаемых задач. Наиболее сложными являются, как правило, математические задачи.
Четвертый блок предназначен для организации вывода результатов вычислений для их дальнейшей обработки вне ЭВМ. Сложность данного блока зависит от выбранного уровня сервиса работы разрабатываемого алгоритма.
Рис. П2.3. Типовая структура алгоритма решения задачи на ЭВМ
Составление программы (программирование)
Целью данного этапа является представление алгоритма решения задачи на одном из языков, понятных ЭВМ. В настоящее время для этих целей широко применяются алгоритмические языки, реализованные в специальных средах (системах) программирования. Они легко осваиваются и позволяют получать компактные и наглядные программы.
Этап программирования в последнее время все чаще называют кодированием, подчеркивая тем самым его механический, нетворческий характер.
Запись программы на стандартный бланк
Текст составленной программы (и данные) обычно записывают на листах бумаги или специальных (стандартных) бланках. Это позволяет облегчить ввод информации в ОЗУ ЭВМ, предупредить и сократить возможные ошибки.
Опытные программисты в процессе подготовки к решению на ЭВМ простых задач данный этап могут пропускать.
Следующие три этапа (ввод, трансляция и отладка программы) зависят, как правило, от технических и программных средств реализации разрабатываемых алгоритмов и программ.
Ввод программы в ОЗУ ЭВМ
Наиболее удобным современным способом ввода программ (и данных) в ОЗУ ЭВМ является их посимвольный набор с помощью клавиатуры с одновременным отображением результатов ввода на экране дисплея и последующей записью на носители информации внешних запоминающих устройств (ВЗУ). Ввод программы и данных в ОЗУ ЭВМ может быть осуществлен и с ВЗУ, если она была ранее туда записана.
Для проверки правильности ввода программы в ОЗУ ЭВМ получают ее распечатку (листинг) на экране дисплея (бумаге), после чего сравнивают выведенный текст программы с исходным.
Трансляция программы
ЭВМ может выполнить программу, представленную только на языке машинных команд. Однако этот язык очень неудобен и на этапе программирования практически не применяется.
Программа записывается чаще всего на алгоритмическом языке. Ввиду этого возникает необходимость перевода программы с алгоритмического языка на язык машинных команд. Такой перевод называется трансляцией и осуществляется автоматически с помощью специальных системных программ - трансляторов.
Различают два вида трансляторов - компиляторы и интерпретаторы. Отличие их состоит в следующем:
* компилятор переводит с алгоритмического языка на машинный всю программу, после чего она может выполняться;
* интерпретатор транслирует и сразу выполняет небольшую законченную часть программы, после чего переходит к обработке последующей части и т. д. Такой подход позволяет экономить ОЗУ, но значительно увеличивает время выполнения программы.
Отладка программы
Подготовка задачи к решению на ЭВМ - трудоемкая и кропотливая работа, требующая много времени и большого внимания. На любом из ее этапов могут быть допущены различного рода ошибки. Поэтому перед использованием новой программы необходимо убедиться в том, что она работает правильно.
Опыт решения задач на ЭВМ показывает, что вновь разработанная программа содержит, как правило, ошибки. Процесс выявления и устранения этих ошибок с использованием ЭВМ называется отладкой программы. Её сущность состоит в следующем.
Один из вариантов задачи решается вручную. Его называют контрольным, или отладочным. Исходные данные для контрольного варианта подбирают таким образом, чтобы максимально упростить ручные вычисления. Необходимость проведения расчета в полном объеме не противоречит целесообразности разработки программы, так как последняя обычно предназначается для многократного решения задачи при различных наборах исходных данных.
Затем для этих же исходных данных получают решение задачи на ЭВМ.
Результаты решения задачи вручную и на ЭВМ сравниваются. Если они не совпадают, то в программе имеется, по крайней мере, одна ошибка.
Общим методом поиска ошибок является пошаговое выполнение программы, вывод на печать промежуточных результатов и сравнение их с соответствующими данными ручного расчета. Такой подход позволяет обнаружить ошибку за конечное число шагов. После устранения очередной ошибки процесс отладки продолжается до тех пор, пока результат контрольного варианта и результат, полученный после реализации программы на ЭВМ, не совпадут. В последнем случае программа считается отлаженной и готовой к эксплуатации.
Поиск и исправление ошибок в программе происходят и на более ранних этапах ее разработки, но там они носят подготовительный характер и отличаются тем, что основным материалом при этом является текст программы, а не результат ее работы.
Оформление программы
Для того чтобы программа могла быть использована кем-либо, кроме автора, необходимо ее соответствующим образом оформить. С этой целью составляется описание программы.
Основную часть описания составляют результаты обработки предыдущих этапов подготовки задачи к решению на ЭВМ (излагается метод решения, приводятся алгоритмы, текст программы, а также контрольный вариант задачи: исходные данные, промежуточные и окончательный результаты). В описание программы включают инструкцию по ее использованию.
В случае если программа проста и предназначена для эксплуатации только ее автором, оформление программы может производиться уже после решения задачи на ЭВМ.
На этом подготовка задачи к решению на ЭВМ считается оконченной и можно приступать собственно к решению задачи.
Современный (визуальный) подход
Развитие методов, средств и технологий программирования привело к модернизации рассмотренной выше классической схемы подготовки задачи к решению на ЭВМ. В частности, в процессе создания Windows-приложений выделяются следующие этапы:
1. Постановка задачи -- составление по возможности точного и понятного словесного описания того, как должно работать будущее приложение, -- что должен делать пользователь в процессе его работы. Это описание должно объяснять и то, как будет выглядеть экранная форма (окно) этого приложения, в каком виде будет представлена информация, которую нужно преобразовать с помощью этого приложения -- например, исходные данные и результаты. В сложных приложениях используется не одна, а несколько экранных форм (окон).
2. Разработка интерфейса -- создание экранной формы (окна приложения) со всеми находящимися на этой форме объектами и свойствами этих объектов.
3. Алгоритмизация и программирование -- определение того, какие события будут происходить в процессе работы приложения, составление алгоритмов процедур для этих событий и написание программы (программных кодов этих процедур).
4. Отладка программы -- устранение логических ошибок в процедурах и достижение того, чтобы приложение удовлетворительно работало в среде проектирования.
5. Сохранение проекта ("итоговое" или для дальнейшей доработки) и, при желании, компиляция -- превращение проекта в исполняемое приложение, способное работать самостоятельно -- за пределами среды проектирования.
Нетрудно заметить, что эта последовательность действий является, по существу, адаптацией приведенной выше схемы к современным условиям. Подробное её рассмотрение на конкретном примере будет проведено на следующей лекции.
ПРИЛОЖЕНИЕ 3
1. Блочно-иерархический подход к созданию сложных программных систем
Практика показывает, что подавляющее большинство сложных систем как в природе, так и в технике имеет иерархическую внутреннюю структуру. Используя различие связей, можно каждую систему разделить на подсистемы и т.д. до самого нижнего «элементарного» уровня. На элементарном уровне система, как правило, состоит из немногих типов подсистем, по-разному скомбинированных и организованных. Иерархии такого типа получили название «целое-часть». В природе существует еще один вид иерархии - иерархия «простое-сложное» или иерархия развития (усложнения) систем в процессе эволюции. В этой иерархии любая функционирующая система является результатом развития более простой системы. Именно данный вид иерархии реализуется механизмом наследования ООП.
Будучи в значительной степени отражением природных и технических систем, программные системы обычно являются иерархическими, т.е. обладают описанными выше свойствами. На этих свойствах иерархических систем строится блочно-иерархический подход к их исследованию или созданию, предполагающий сначала создавать части таких объектов (блоки, модули), а затем собирать из них сам объект.
Процесс разбиения сложного объекта на сравнительно независимые части получил название декомпозиции. При создании очень сложных объектов процесс декомпозиции выполняется многократно: каждый блок, в свою очередь, декомпозируют на части пока не получают блоки, которые сравнительно легко разработать. Данный метод разработки получил название пошаговой детализации.
Существенно и то, что в процессе декомпозиции стараются выделить аналогичные блоки, которые можно было бы разрабатывать на общей основе. Таким образом обеспечивают увеличение степени повторяемости кодов и, соответственно, снижение стоимости разработки.
Результат декомпозиции представляют в виде схемы иерархии, на нижнем уровне которой располагают сравнительно простые блоки, а на верхнем - объект, подлежащий разработке. На каждом иерархическом уровне описание блоков выполняют с определенной степенью детализации, абстрагируясь от несущественных деталей. Следовательно, для каждого уровня используют свои формы документации и свои модели, отражающие сущность процессов, выполняемых каждым блоком (рис. П3.1).
При соблюдении этого принципа разработчик сохраняет возможность осмысления проекта и, следовательно, может принимать наиболее правильные решения на каждом этапе, что называют локальной оптимизацией (в отличие от глобальной оптимизации характеристик объектов, которая для действительно сложных объектов не всегда возможна).
Таким образом, в основе блочно-иерархического подхода лежат декомпозиция и иерархическое упорядочение. Важную роль играют также следующие принципы:
· непротиворечивость -- контроль согласованности элементов между собой;
· полнота -- контроль на присутствие лишних элементов;
· формализация -- строгость методического подхода;
· повторяемость -- необходимость выделения одинаковых блоков для удешевления и ускорения разработки;
локальная оптимизация -- оптимизация в пределах уровня иерархии.
Совокупность языков моделей, постановок задач, методов описаний некоторого иерархического уровня принято называть уровнем проектирования.
Каждый объект в процессе проектирования, как правило, приходится рассматривать с нескольких сторон.
Различные взгляды на объект проектирования принято называть аспектами проектирования.
Помимо того, что использование блочно-иерархического подхода делает возможным создание сложных систем, он также:
· упрощает проверку работоспособности, как системы в целом, так и отдельных блоков;
· обеспечивает возможность модернизации систем, например, замены ненадежных блоков с сохранением их интерфейсов.
Использование блочно-иерархического подхода применительно к программным системам стало возможным только после конкретизации общих положений подхода и внесения некоторых изменений в процесс проектирования. При этом структурный подход учитывает только свойства иерархии «целое-часть», а объектный - использует еще и свойства иерархии «простое-сложное».
2. Жизненный цикл и этапы разработки программного обеспечения
Жизненным циклом программного обеспечения называют период от момента появления идеи создания некоторого программного обеспечения до момента завершения его поддержки фирмой-разработчиком или фирмой, выполнявшей сопровождение.
Состав процессов жизненного цикла регламентируется международным стандартом ISO/IEC 12207: 1995 «Information Technologe - Software Life Cycle Processes» («Информационные технологии - Процессы жизненного цикла программного обеспечения»). ISO/IEC - International Organization for Standardization/International Electrotechnical Commission - Международная организация по стандартизации/Международная комиссия по электротехнике.
Стандарт описывает структуру жизненного цикла ПО и его процессы. Процесс жизненного цикла определяется как совокупность взаимосвязанных действий, преобразующих некоторые входные данные в выходные (рис. П3.2). Каждый процесс характеризуется определенными задачами и методами их решения, а также исходными данными и результатами.
Процесс разработки (development process) предусматривает действия и задачи, выполняемые разработчиком, и охватывает работы по созданию ПО и его компонентов в соответствии с заданными требованиями, включая оформление проектной и эксплуатационной документации, а также подготовку материалов, необходимых для проверки работоспособности и соответствия качества программных продуктов, материалов, необходимых для обучения персонала, и т.д.
По стандарту процесс разработки включает следующие действия:
· подготовительную работу - выбор модели жизненного цикла, стандартов, методов и средств разработки, а также составление плана работ;
· анализ требовании к системе - определение ее функциональных возможностей, пользовательских требований, требований к надежности и безопасности, требований к внешним интерфейсам и т.д.;
· проектирование архитектуры системы - определение состава необходимого оборудования, программного обеспечения и операций, выполняемых обслуживающим персоналом;
· анализ требований к ПО - определение функциональных возможностей, включая характеристики производительности, среды функционирования компонентов, внешних интерфейсов, спецификаций надежности и безопасности, эргономических требований, требований к используемым данным, установке, приемке, пользовательской документации, эксплуатации и сопровождению;
· проектирование архитектуры ПО - определение структуры программного обеспечения, документирование интерфейсов его компонентов, разработку предварительной версии пользовательской документации, а также требований к тестам и плана интеграции;
· детальное проектирование ПО -- подробное описание компонентов ПО и интерфейсов между ними, обновление пользовательской документации, разработка и документирование требований к тестам и плана тестирования компонентов ПО, обновление плана интеграции компонентов;
· кодирование и тестирование ПО -- разработку и документирование каждого компонента, а также совокупности тестовых процедур и данных для их тестирования, тестирование компонентов, обновление пользовательской документации, обновление плана интеграции ПО;
· интеграцию ПО - сборку программных компонентов в соответствии с планом интеграции и тестирование ПО на соответствие квалификационным требованиям, представляющих собой набор критериев или условий, которые необходимо выполнить, чтобы квалифицировать программный продукт, как соответствующий своим спецификациям и готовый к использованию в заданных условиях эксплуатации;
· квалификационное тестирование ПО - тестирование ПО в присутствии заказчика для демонстрации его соответствия требованиям и готовности к эксплуатации; при этом проверяется также готовность и полнота технической и пользовательской документации
· интеграцию системы - сборку всех компонентов системы, включая ПО и оборудование;
· квалификационное тестирование системы - тестирование системы на соответствие требованиям к ней и проверка оформления и полноты документации;
· установку ПО - установку ПО на оборудовании заказчика и проверку его работоспособности;
· приемку ПО - оценку результатов квалификационного тестирования ПО и системы в целом и документирование результатов оценки совместно с заказчиком, окончательную передачу ПО заказчику.
Указанные действия можно сгруппировать, условно выделив следующие основные этапы разработки программного обеспечения (в скобках указаны соответствующие стадии разработки по ГОСТ 19.102-77 «Стадии разработки»):
· постановка задачи (стадия «Техническое задание»);
· анализ требований и разработка спецификаций (стадия «Эскизный проект»);
· проектирование (стадия «Технический проект»);
· реализация (стадия «Рабочий проект»).
Традиционно разработка также включала этап сопровождения (началу этого этапа соответствует стадия «Внедрение» по ГОСТ). Однако по международному стандарту в соответствии с изменениями, произошедшими в индустрии разработки ПО, этот процесс теперь рассматривается отдельно.
Условность выделения этапов связана с тем, что на любом этапе возможно принятие решений, которые потребуют пересмотра решений, принятых ранее.
Постановка задачи. В процессе постановки задачи четко формулируют назначение ПО и определяют основные требования к нему. Каждое требование представляет собой описание необходимого или желаемого свойства программного обеспечения. Различают функциональные требования, определяющие функции, которые должно выполнять разрабатываемое ПО, и эксплуатационные требования, определяющие особенности его функционирования.
Требования к ПО, имеющему прототипы, обычно определяют по аналогии, учитывая структуру и характеристики уже существующего ПО. Для формулирования требований к ПО, не имеющему аналогов, иногда необходимо провести специальные исследования, называемые предпроектными. В процессе таких исследований определяют разрешимость задачи, возможно, разрабатывают методы ее решения (если они новые) и устанавливают наиболее существенные характеристики разрабатываемого ПО. Для выполнения предпроектных исследований, как правило, заключают договор на выполнение научно-исследовательских работ. В любом случае этап постановки задачи заканчивается разработкой технического задания, фиксирующего принципиальные требования, и принятием основных проектных решений.
Анализ требований и определение спецификаций. Спецификациями называют точное формализованное описание функций и ограничений разрабатываемого программного обеспечения. Соответственно различают функциональные и эксплуатационные спецификации. Совокупность спецификаций представляет собой общую логическую модель проектируемого программного обеспечения.
Для получения спецификаций выполняют анализ требований технического задания, формулируют содержательную постановку задачи, выбирают математический аппарат формализации, строят модель предметной области, определяют подзадачи и выбирают или разрабатывают методы их решения. Часть спецификаций может быть определена в процессе предпроектных исследований и, соответственно, зафиксирована в техническом задании.
На этом этапе также целесообразно сформировать тесты для поиска ошибок в проектируемом программном обеспечении, обязательно указав ожидаемые результаты.
Проектирование. Основной задачей этого этапа является определение подробных спецификаций разрабатываемого ПО. Процесс проектирования ПО обычно включает:
· проектирование общей структуры - определение основных компонентов и их взаимосвязей;
· декомпозицию компонентов и построение структурных иерархий в соответствии с рекомендациями блочно-иерархического подхода;
· проектирование компонентов.
Результатом проектирования является детальная модель разрабатываемого ПО вместе со спецификациями его компонентов всех уровней. Тип модели зависит от выбранного подхода (структурный, объектный или компонентный) и конкретной технологии проектирования. Однако в любом случае процесс проектирования охватывает как проектирование программ (подпрограмм) и определение взаимосвязей между ними, так и проектирование данных, с которыми взаимодействуют эти программы или подпрограммы. Принято различать также два аспекта проектирования:
· логическое проектирование, которое включает те проектные операции, которые непосредственно не зависят от имеющихся технических и программных средств, составляющих среду функционирования будущего программного продукта;
· физическое проектирование - привязка к конкретным техническим и программным средствам среды функционирования, т.е. учет ограничений, определенных в спецификациях.
Реализация представляет собой процесс поэтапного написания кодов программы на выбранном языке программирования (кодирование), их тестирование и отладку.
Сопровождение. Это процесс создания и внедрения новых версий программного продукта. Причинами выпуска новых версий могут служить:
· необходимость исправления ошибок, выявленных в процессе эксплуатации предыдущих версий;
· необходимость совершенствования предыдущих версий, например, улучшения интерфейса, расширения состава выполняемых функций или повышения его производительности;
· изменение среды функционирования, например, появление новых технических средств и/или программных продуктов, с которыми взаимодействует сопровождаемое программное обеспечение.
На этом этапе в программный продукт вносят необходимые изменения, которые могут потребовать пересмотра проектных решений, принятых на любом предыдущем этапе. С изменением модели жизненного цикла ПО роль этого этапа существенно возросла, так как продукты теперь создаются итерационно: сначала выпускается сравнительно простая версия, затем следующая с большими возможностями, затем следующая и т.д. Именно это и послужило причиной выделения этапа сопровождения в отдельный процесс жизненного цикла в соответствии со стандартом ISO/IEC 12207.
Рассматриваемый стандарт только называет и определяет процессы жизненного цикла ПО, не конкретизируя в деталях, как реализовывать или выполнять действия и задачи, включенные в эти процессы. Эти вопросы регламентируются соответствующими методами, методиками и т.п.
3. Модели жизненного цикла программного обеспечения
На протяжении последних тридцати лет в программировании сменились три модели жизненного цикла ПО: каскадная, модель с промежуточным контролем и спиральная.
Каскадная модель разработки ПО (1970-1985 годы) предполагает, что переход на следующую стадию осуществляется после того, как полностью будут завершены проектные операции предыдущей стадии и получены все исходные данные для следующей стадии (рис. П3.3). Достоинствами такой схемы являются:
· получение в конце каждой стадии законченного набора проектной документации, отвечающего требованиям полноты и согласованности;
· простота планирования процесса разработки.
Именно такую схему используют обычно при блочно-иерархическом подходе к разработке сложных технических объектов, обеспечивая очень высокие параметры эффективности разработки. Однако данная схема оказалась применимой только к созданию систем, для которых в самом начале разработки удавалось точно и полно сформулировать все требования. Это уменьшало вероятность возникновения в процессе разработки проблем, связанных с принятием неудачного решения на предыдущих стадиях. На практике такие разработки встречается крайне редко.
В целом необходимость возвратов на предыдущие стадии обусловлена следующими причинами:
· неточные спецификации, уточнение которых в процессе разработки может привести к необходимости пересмотра уже принятых решений;
· изменение требований заказчика непосредственно в процессе разработки;
· быстрое моральное устаревание используемых технических и программных средств;
· отсутствие удовлетворительных средств описания разработки на стадиях постановки задачи, анализа и проектирования.
Отказ от уточнения (изменения) спецификаций приведет к тому, что законченный продукт не будет удовлетворять потребности пользователей. При отказе от учета смены оборудования и программной среды пользователь получит морально устаревший продукт. А отказ от пересмотра неудачных проектных решений приводит к ухудшению структуры программного продукта и, соответственно, усложнит, растянет по времени и удорожит процесс его создания. Реальный процесс разработки, таким образом, носит итерационный характер.
...Подобные документы
Особенности способов описания языков программирования. Язык программирования как способ записи программ на ЭВМ в понятной для компьютера форме. Характеристика языка Паскаль, анализ стандартных его функций. Анализ примеров записи арифметических выражений.
курсовая работа [292,0 K], добавлен 18.03.2013Понятия языка программирования, разновидности и характеристика языков. Исторический обзор их создания и применения. Классификация, примеры использования. Характеристики языков программирования с точки зрения элементов объектной модели, их популярность.
реферат [463,6 K], добавлен 07.09.2009Понятие алгоритма, его свойства. Дискретность, определенность, результативность, формальность как свойства алгоритма. Программа как описание структуры алгоритма на языке алгоритмического программирования. Основные структурные алгоритмические конструкции.
реферат [1,3 M], добавлен 18.11.2010Характеристика алгоритма, его свойств, способов записи. Особенности, типовые примеры линейной алгоритмической структуры. Анализ разветвляющей алгоритмической структуры. Изучение основных операторов циклов. Эволюция, классификация языков программирования.
контрольная работа [492,2 K], добавлен 15.02.2010Язык BASIC как семейство высокоуровневых языков программирования. Средства алгоритмического языка программирования и их типы. Способы ввода исходных данных. Особенности оператора условного перехода. Детальная характеристика циклических вычислений.
реферат [64,4 K], добавлен 02.05.2015История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.
курсовая работа [795,9 K], добавлен 14.12.2012История развития языка программирования Pascal, его основные концепции. Вычисления в математических задачах. Изменение порядка выполнения инструкций программы. Выполнение оператора цикла. Логические выражения, линейные алгоритмы, условные операторы.
методичка [847,6 K], добавлен 10.01.2013Производственная функция и ее свойства и экономическое содержание. Краткая история PHP - языка программирования, используемого на стороне WEB-сервера для динамической генерации HTML-страниц. Возможности и примеры использования MySQL (сервера баз данных).
курсовая работа [572,4 K], добавлен 15.05.2015Язык программирования как формальная знаковая система, предназначенная для записи программ, его отличие от естественных языков. Прописные и строчные буквы латинского алфавита. Ключевые слова языка программирования. Классическая схема создания программы.
презентация [1,2 M], добавлен 19.02.2014Сущность и функции языков программирования, их эволюция и оценка популярности различных видов. Особенности компьютерных программ, разработанных на компилируемом, интерпретируемом или смешанном языке. Основные классы и иерархия языков программирования.
презентация [873,4 K], добавлен 23.01.2013Оценка современного этапа развития компьютерных технологий. История развития, классификации, сведения и уровни языков программирования. Обзор современных языков программирования: Си, его разовидности, Паскаль, Фортран, Бейсик - тенденция их развития.
курсовая работа [46,5 K], добавлен 22.12.2010Понятие алгоритма. Цикл программы. Структурная схема алгоритма. Элементы языка Тurbo Рascal. Алфавит. Идентификаторы. Комментарии. Лексика языка С++. ESC-последовательности. Операции. Ключевые слова. Комментарии.
контрольная работа [43,0 K], добавлен 24.04.2006Основные свойства алгоритма. Формальный и неформальный исполнитель алгоритма, система его команд. Способы записи алгоритма. Словесное описание, построчная запись, опорный конспект. Характеристики алгоритмического языка. Выполнение алгоритма компьютером.
презентация [2,0 M], добавлен 04.04.2014Характеристика базовых конструкций языков программирования. Изучение истории их развития и классификации. Определение основных понятий языков программирования. Описание основных операторов, которые используются в языках программирования высокого уровня.
курсовая работа [400,6 K], добавлен 10.11.2016Машинные коды и ассемблер. Первые языки программирования высокого уровня. Язык программирования FORTRAN. Достоинства и недостатки ALGOL. Научные и бухгалтерские программы. Основные принципы, которые соблюдались при создании языка программирования Basic.
курсовая работа [407,4 K], добавлен 21.06.2014Цели и задачи дисциплины "Технология программирования". Программные средства ПК. Состав системы программирования и элементы языка. Введение в систему программирования и операторы языка Си. Организация работы с файлами. Особенности программирования на С++.
методичка [126,3 K], добавлен 07.12.2011Рассмотрение общих сведений и уровней языков программирования. Ознакомление с историей развития, использования языков программирования. Обзор достоинств и недостатков таких языков как Ассемблер, Паскаль, Си, Си++, Фортран, Кобол, Бейсик, SQL, HTML, Java.
курсовая работа [759,5 K], добавлен 04.11.2014Функции и основные компоненты систем программирования. Средства создания программ. Трансляторы языков программирования. Принципы и фазы работы компилятора, трансформация языка программирования в машинный код. Механизм преобразования интерпретатора.
презентация [3,3 M], добавлен 07.02.2012Основные понятия и назначение языка программирования СИ. Скалярные типы данных. Арифметические, логические и битовые операции над переменными целочисленного, вещественного, символьного, перечислимого типов. Примеры программ, выполняющие операции над ними.
презентация [269,9 K], добавлен 26.07.2013Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.
курсовая работа [276,1 K], добавлен 19.07.2014