Для того, чтобы выполнить на компьютере работу, связанную с решением задачи пользователя, необходимо оформить задание и передать его машине. В задании указывается последовательность системных программ, которые машина должна выполнить и приводятся характеристики всех данных, с которыми имеют дело эти системные программы. Задание для компьютера является внешней единицей работы и определяет ей последовательность шагов для своего выполнения. При этом каждый шаг предписывает выполнение отдельной системной программы. Важно понять, что для автоматизации программирования решения задач на современных компьютерах имеются развитые системы программирования, основу которых составляют языки программирования высокого уровня и системные программы, осуществляющие обработку программ в среде компьютера.
Для того чтобы правильно решить задачу с помощью автоматизированного подхода на компьютере, необходимо пройти определенные этапы ее решения:
1. Формализация данных
2. Создание математической модели
3. Детальное описание алгоритма (блок-схема, текстовое)
4. Реализация на языке программирования
5. Отладка программы
6. Тестирование программы
7. Анализ результатов работы
Этапы, начиная с четвертого, выполняются в компьютерной среде.
Реализация на языке программирования.
Составление программы на языке программирования высокого уровня выполняется в среде и под управлением специальной системной программы – текстового редактора. В результате создается, так называемый исходный модуль – текстовый файл в формате соответствующего языка программирования с расширением: .pas, .bas, .c и т.д. Исходный модуль – это еще не программа. С помощью языка программирования создается не готовая программа, а только ее текст, описывающий ранее разработанный алгоритм.
Исходный модуль специальными служебными программами, которые называются трансляторами, либо автоматически переводится в машинный код, либо исполняется.
Трансляторы реализуются в виде компиляторов или интерпретаторов. С точки зрения выполнения работы компилятор и интерпретатор существенно различаются.
Интерпретация в разработке программ – процесс непосредственного покомандного выполнения программы без предварительной компиляции, «на лету». В большинстве случаев интерпретируемая программа работает намного медленнее, чем скомпилированная программа, но не требует затрат на компиляцию, что в случае небольших программ может повышать общую производительность. Интерпретация связана с получением переменными значений в процессе работы программы.
Интерпретатор берет очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. Только после того как текущий оператор успешно выполнен, интерпретатор перейдет к следующему. При этом если один и тот же оператор будет выполняться в программе многократно, интерпретатор будет выполнять его так, как будто встретил впервые.
Компиляция в программировании – преобразование программы, представленной на одном из языков программирования, в коды на машинно-ориентированномязыке, которые принимаются и исполняются непосредственно процессором. Результатом компиляции является объектный модуль – файл с расширением .obj. Программа уже переведена в машинные инструкции, однако еще не полностью готова к выполнению.
Компиляторы полностью обрабатывают весь текст программы. Процесс компиляции состоит из двух частей: анализа и синтеза. Анализирующая часть компилятора разбивает исходную программу на составляющие ее элементы (конструкции языка) просматривает их в поиске синтаксических ошибок (иногда несколько раз), производит определенный смысловой анализ и создает промежуточное представление исходной программы. Синтезирующая часть из промежуточного представления создает новую программу, которую компьютер в состоянии понять. Такая программа называется объектной программой или объектным модулем.
Откомпилированные программы работают быстрее, но интерпретируемые проще исправлять и изменять.
В случае, когда трансляция выполняется способом компиляции, необходим еще один этап подготовки программы к исполнению – этап компоновки. С процедурой интерпретации компоновка не связана.
Компоновка – это один из этапов создания исполняемого файла. Компилировать – это значит проводить трансляцию машинной программы с проблемно-ориентированного языка на машинно-ориентированный язык (создание объектного кода) для ее исполнения. Результатом компиляции является объектный файл с необходимыми внешними ссылками для компоновщика. Программа уже переведена в машинные инструкции, однако еще не полностью готова к выполнению. В объектном файле имеются ссылки на различные системные функции. Даже если в программе явно не упомянута ни одна функция, необходим, хотя бы один вызов системной функции – завершение программы и освобождение всех принадлежащих ей ресурсов.
Компоновку осуществляет еще одна системная программа, которая называется редактор связей или компоновщик.
Компоновщик – модуль системы программирования или самостоятельная программа, которая собирает результирующую программу из объектных модулей и стандартных библиотечных модулей. Этот процесс называется компоновкой, его результатом и будет исполняемый модуль – файл с расширением .exe.
Исполняемый модуль – это файл, который может быть обработан или выполнен компьютером без предварительной трансляции. Обычно исполняемый файл получается в результате компиляции и компоновки объектных модулей и содержит машинные команды и/или команды операционной системы. Строго говоря, не текст на языке программирования, а именно исполняемый модуль является компьютерной программой, пригодной для автоматического исполнения.
Итак, в обработке текста программы, составленной на языке высокого уровня, принимают участие разные системные программы. Для каждой последующей исходными данными являются результаты работы предыдущей. Для первых систем программирования такая раздельная поэтапная технология была обычным делом. В целом разработка программы затягивалась по времени, потому что на каждом этапе требовалось запускать отдельно соответствующую системную программу.
Этот недостаток был преодолен в системах программирования, ориентированных на персональные компьютеры. Эти системы программирования получили название интегрированных систем с ускоренной (турбо) обработкой.
Интегрированные системы программирования включают в себя
- текстовый редактор
- компилятор
- редактор связей
- библиотеки функций
- отладчик (пошаговое выполнение)
Взаимодействие этих программ и переход с этапа на этап скрыты от пользователя системы. В результате создается иллюзия, как будто исполняется программа, составленная на языке программирования. Но это не так, все системные программы выполняют свои функции как положено.
Отладка программы.
Отладка означает устранение ошибок. Это необходимый этап работы с программой, поскольку всегда есть вероятность допустить ошибку при составлении текста программы. Наличие ошибок в программе это нормальная ситуация и на нее нужно настраиваться положительно.
Ошибки бывают разные. Наиболее типичные – синтаксические ошибки. Они выявляются просто. Транслятор на стадии синтаксического анализа текста программы находит ошибки и выдает соответствующие диагностические сообщения. Но следует помнить, что транслятор реагирует не на саму ошибку, а на ее следствие. Например, в программе пропущен символ ; после оператора, транслятор укажет не то место где была допущена ошибка, а то, где он обнаружил ошибку.
Значительно сложнее дело обстоит с содержательными, неформальными ошибками, так как отсутствует формальный аппарат их обнаружения. Часть ошибок такого рода может быть обнаружена на стадии компоновки, а некоторые только в результате анализа результатов решения при исполнении программы.
Отладка представляет собой сложную и трудоемкую процедуру, требует большого опыта и высокой квалификации программиста. Ошибки могут проявиться на любом этапе компьютерной обработки программы и потребовать возврата на предыдущие этапы вплоть до самого первого – составления текста программы. Отладка сопровождается внесением в текст программы исправлений. Эффективность отладки помимо всего прочего зависит от эффективности технологии обработки программ в компьютере. В этой связи интегрированные системы программирования выгодно отличаются от традиционных технологий.
Тестирование программы
Тестирование программного обеспечения — процесс исследования программного обеспечения с целью получения информации о качестве продукта (в том числе поиск ошибок в программе).
Различают:
Альфа-тестирование – тестирование готового продукта на специально созданных задачах.
Бета-тестирование – опробование бесплатной тестовой версии программного продукта на реальных задачах.
Различают так же:
- Тестирование «белого ящика»
- Тестирование «чёрного ящика»
В терминологии профессионалов тестирования (программного и некоторого аппаратного обеспечения), фразы «тестирование белого ящика» и «тестирование чёрного ящика» относятся к тому, имеет ли разработчик тестов доступ к исходному коду тестируемого ПО, или же тестирование выполняется через пользовательский интерфейс либо прикладной программный интерфейс, предоставленный тестируемым модулем.
Если «альфа-» и «бета-тестирование» относятся к стадиям до выпуска продукта, тестирование «белого ящика» и «чёрного ящика» имеет отношение к способам, которыми тестировщик достигает цели (т.е. имеем другое основание для классификации).
При тестировании белого ящика (англ. white-box testing, также говорят — прозрачного ящика), разработчик теста имеет доступ к исходному коду программ и может писать код, который связан с библиотеками тестируемого программного обеспечения. Это типично для юнит-тестирования (англ. unit testing), при котором тестируются только отдельные части системы. Оно обеспечивает то, что компоненты конструкции — работоспособны и устойчивы, до определённой степени.
При тестировании чёрного ящика, тестировщик имеет доступ к программному обеспечению только через те же интерфейсы, что и заказчик или пользователь, либо через внешние интерфейсы, позволяющие другому компьютеру либо другому процессу подключиться к системе для тестирования. Например, тестирующий модуль может виртуально нажимать клавиши или кнопки мыши в тестируемой программе с помощью механизма взаимодействия процессов, с уверенностью в том, все ли идёт правильно, что эти события вызывают тот же отклик, что и реальные нажатия клавиш и кнопок мыши. Как правило, тестирование чёрного ящика ведётся с использованием спецификаций или иных документов, описывающих требования к системе.
Применяют также регрессионное тестирование. После внесения изменений в очередную версию программы, регрессионные тесты подтверждают, что сделанные изменения не повлияли на работоспособность остальной функциональности приложения. Регрессионное тестирование может выполняться как вручную, так и средствами автоматизации тестирования.
Анализ результатов работ
При условии, что модель отражает статические (структурные) и динамические (процедурные) свойства предметной области, самой крупной проблемой является адекватность, полнота соответствия модели оригиналу. Поэтому на этапе анализа результатов проверяется адекватность используемой модели. Решить эту проблему можно, если поведение модели оказывается ожидаемым, в достаточной степени сходным с поведением оригинала.
В связи с этим в рамках определенных принятых критериев проводится сопоставление полученных результатов с теоретическими прогнозами, с данными экспериментов. В результате становится ясно, удачно или нет построена модель и вычислительный алгоритм.
Если в математической модели обнаруживаются изъяны, а полученные с ее помощью результаты противоречат наблюдаемым фактам, то модель модифицируют, изменяют, усложняют. При необходимости весь цикл исследования результатов может быть повторен еще раз на более совершенной основе.
В итоге результатом компьютерного моделирования являются новые знания об объекте исследования, формализованные в
Статьи к прочтению:
Основы Программирования — #11 — Первая программа (Калькулятор на JavaScript)
Похожие статьи:
-
Интегрированные среды разработки программ
Дальнейшим развитием локальных средств разработки программ, которые объединяют набор средств для комплексного их применения на всех технологических…
-
Этапы разработки сложных программ
Отдельный человек не в состоянии полностью осмыслить и построить программное обеспечение большой системы. В данном контексте под построением программного…