Схема подготовки исполняемой программы

Раздел 2. Технология создания программ

Тема 2. 1. Интегрированная среда программирования

Схема подготовки исполняемой программы на языке С++

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

#include <iostream.h>

вставляет в текст программы текст из заголовочного файла iostream.h.

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


Схема подготовки исполняемой программы

 
 

 

 


 

Тема 2. 2. Жизненный цикл программного обеспечения (Этапы подготовки и решения задач на ЭВМ)

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

- постановка задачи;

- математическое описание задачи;

- выбор и обоснование метода решения;

- алгоритмизация вычислительного процесса;

- составление программы;

- отладка программы;

- решение задачи на ЭВМ и анализ результатов.

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

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

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

Жизненный цикл программного обеспечения включает в себя шесть этапов:

- анализ требований;

- определение спецификаций;

- проектирование;

- кодирование;

- тестирование, оптимизация и отладка;

- внедрение сопровождение.

Рассмотрим эти этапы подробнее.

Анализ требований (постановка задачи, обследование)

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

Для создания конкурентоспособных продуктов в ходе выполнения этого этапа должны быть получены четкие ответы на следующие вопросы:

- Что должна делать программа?

- В чем состоят реальные проблемы, разрешению которых она должна способствовать?

- Что представляют собой входные данные?

- Какими должны быть выходные данные?

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

- общая характеристика задачи;

- описание входных данных;

- описание выходных данных;

- описание алгоритмов решения задачи;

- источники разработки.

Определение спецификаций

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

Данный этап должен завершиться составлением и подписанием документа «Техническое задание», в котором, как правило, содержатся следующие разделы

- название системы (полное и сокращенное название, версию);

- цели создания;

- характеристика области применения;

- перечень автоматизируемых функций и требования к системе в целом (требования к соблюдению режимов безопасности, функциональной согласованности, к интерфейсу, степень взаимодействия с другими программами);

- информационная база (все используемые файлы, их структура, организация взаимодействия пользователя с данными);

- программное обеспечение (интегрированные среды программирования, СУБД);

- аппаратное обеспечение (обычно указывается нижние пределы характеристик аппаратного обеспечения, но следует указать и оптимальную конфигурацию);

- график работ.

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

 

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

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

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

На этапе проектирования необходимо описать модульное дерево, то есть количество модулей, их подчиненность, для каждого модуля определить функциональность. Для каждого модуля должна быть составлено собственное описание – спецификация. Сложно ввести стандарт на степень детализации спецификации модуля, но обычно придерживаются следующих рекомендаций. В спецификации модуля приводится только интерфейсная часть. Можно высказать пожелания к общим типам данных и классов объектов, которые может быть доступны из других модулей. Если описываются спецификации на подпрограммы, в них указывает назначение подпрограммы, а также количество и тип формальных параметров, их порядок, тип возвращаемого значения для функции. Кроме того, следует указать изменение изображение на экране или вывод печатного документа, который может произойти в результате вызова подпрограммы.

Кодирование

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

- тщательно выбирать имена переменных и других программных объектов;

- переменные желательно инициализировать при их объявлении, а объявлять их как можно ближе к месту их непосредственного использования;

- избегать использования в программе чисел в явном виде;

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

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

- конец длинного составного оператора желательно помечать комментарием
while()
{…
}//while