Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
140
Добавлен:
13.03.2015
Размер:
580.61 Кб
Скачать

Тема 5. Разработка программных средств для решения экономических задач

Вопросы темы

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

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

2. Инструментальные средства программирования и их состав.

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

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

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

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

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

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

Роль ТП менялась на разных этапах развития программирова­ния. По мере повышения мощности компьютеров и развития средств и методологии программирования росла и сложность ре­шаемых на компьютерах задач, что привело к повышенному вни­манию к технологии программирования. Резкое удешевление сто­имости компьютеров привело к широкому внедрению компьюте­ров практически во все сферы человеческой деятельности. Человеческий фактор стал играть в ТП решающую роль. Сформирова­лось достаточно глубокое понятие качества ПС, в котором упор делается не столько на его эффективность, сколько на удобство работы с ним для пользователей и его надежность. Широкое ис­пользование компьютерных сетей привело к интенсивному раз­витию распределенных вычислений, дистанционного доступа к информации и электронного способа обмена сообщениями меж­ду людьми. Компьютерная техника из средства решения отдель­ных задач все более превращается в средство информационного моделирования реального мира, способное быстро и качественно отвечать людям на интересующие их вопросы. Начинается этап глубокой и полной информатизации человеческого общества. Все это ставит перед технологией программирования новые и доста­точно трудные проблемы.

Развитие технологии программирования следует продемонст­рировать следующим образом.

В 1950-е годы возможности компьютеров (первого поколения) были весьма ограниченными и программирование велось в ос­новном в машинном коде. Решались главным образом научно-технические задачи (расчет по формулам). Задание на программи­рование уже содержало, как правило, достаточно точную поста­новку задачи. Минимальная документация оформлялась уже после того, как программа начинала работать. Однако именно в этот период родилась фундаментальная для технологии программи­рования концепция модульного программирования. Появились первые языки программирования высокого уровня, из которых только ФОРТРАН пробился для использования в следующие де­сятилетия.

В 1960-е годы наблюдалось бурное развитие и широкое исполь­зование языков программирования высокого уровня (ЯПВУ. АЛГОЛ 60, ФОРТРАН, КОБОЛ и др.). Роль ЯПВУ в ТП явно преувеличивалась. Эти языки не могут решать все проблемы, воз­никающие при разработке больших программ. В результате по­вышения мощности компьютеров и накопления опыта програм­мирования на ЯПВУ быстро росла сложность решаемых на ком­пьютерах задач. Ввиду этого выявилась ограниченность языков, в которых отсутствовала возможность модульной организации про­грамм. Кроме того, было понято, что важно не только то, на ка­ком языке мы программируем, но и то, как мы программируем. Это было уже началом серьезных размышлений над методологи­ей и технологией программирования. Появление в компьютерах второго поколения прерываний привело к развитию мультипрог­раммирования и созданию больших программных систем.

В 1970-е годы получили широкое распространение информаци­онные системы и базы данных. Интенсивно развивалась техноло­гия программирования: обоснование и широкое внедрение нис­ходящей разработки и структурного программирования, разви­тие абстрактных типов данных и модульного программирования, исследование проблем обеспечения надежности и мобильности ПС, создание методики управления коллективной разработкой ПС, появление инструментальных программных средств поддержки программирования.

1980-е годы характеризуются широким внедрением персональ­ных компьютеров во все сферы человеческой деятельности и тем самым созданием обширного и разнообразного контингента пользователей ПС. Это привело к бурному развитию пользова­тельских интерфейсов и созданию четкой концепции качества ПС. Появляются языки программирования (например, Ада), учиты­вающие требования технологии программирования. Развивают­ся методы и языки спецификации ПС. Передовые позиции начина­ет занимать объектноориентированный подход к разработке ПС. Создаются различные инструментальные среды разработки и со­провождения ПС. Развивается концепция компьютерных сетей.

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

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

При создании программного продукта необходимо выполнить следующие действия:

  • описать алгоритм (каким-либо способом);

  • написать программу, реализующую этот алгоритм;

  • отладить программу.

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

В качестве примера декомпозиции рассмотрим решение следу­ющей задачи. Даны списки сотрудников подразделения с указанием их заработанных плат. Требуется вывести фамилии и зара­ботную плату сотрудников, у которых зарплата наиболее близка к средней зарплате по отделу.

Решение этой задачи можно представить в виде последователь­ного выполнения следующих подзадач:

1. ввести число п сотрудников подразделения;

2. заполнить массив т1[п] фамилий сотрудников;

3. заполнить массив т2[п] значений зарплат;

4. найти сумму S элементов массива т2;

5. найти среднюю по отделу зарплату SRZ по формуле SRZ = = S/n;

6. заполнить массив т3[п] меры близости зарплаты сотрудника к SRZ по формуле т3[i]= [т2[i]SRZ];

7. в массиве т3 найти минимальное значение min;

8. вывод результата.

Для 1< i<n , если т3[i]= min, то вывести т1[i] и т2[i].

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

  • формулировку задачи;

  • математическую постановку задачи;

  • определение и анализ метода решения поставленной задачи:

  • составление внешней спецификации разрабатываемого алго­ритма;

  • конструирование и анализ правильности и эффективности ал­горитмов на основе выбранных методов решения и выбранной внешней спецификации;

  • кодирование программы на заданном языке программиро­вания;

  • составление тестов и отладка программы.

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

Обычно процесс формализации задачи сводится к постановке и получению ответов на ряд вопросов.

Понятна ли терминология, используемая в предваритель­ной формулировке?

Что дано?

Что нужно найти?

Каких данных не хватает?

Являются ли какие-то имеющиеся данные бесполезными?

Какие сделаны допущения?

Возможны и другие вопросы в зависимости от конкретной за­дачи. После получения полных или частичных ответов на некото­рые из вопросов иногда их приходится задавать снова. Результа­том этого процесса является постановка задачи, которая включает:

  • содержательную постановку задачи;

  • исходные (входные) данные;

  • требуемые (выходные) данные;

  • описание зависимостей выходных данных от исходных;

  • описание условий зависимости.

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

Поскольку данный этап плохо формализуется, что связано, с одной стороны, с чрезвычайно широким разнообразием задач и методов их решения, а с другой — с существованием большого количества задач, решение которых возможно только эвристичес­ки (то есть с попыткой воспроизвести действия человека), метод решения может быть представлен в виде:

  • системы формул;

  • словесного изложения последовательности действий;

  • их комбинации.

Внешняя спецификация представляет собой руководство по ис­пользованию программы.

Внешние спецификации прикладных программ состоят из трех разделов:

  • описание форм записи входных данных;

  • описание форм выходных данных при правильных входных данных;

  • описание реакции программы на аномалии во входных дан­ных.

Под аномалиями будем понимать различные варианты нарушений данных или правил их записи.

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

Анализ алгоритма состоит из двух частей:

  • анализа правильности;

  • анализа эффективности.

Анализ правильности — это обязательная фаза в создании ал­горитмов и программ. Под правильностью программы понимают соответствие программы постановке задачи и внешней специфи­кации.

Существуют два способа анализа правильности алгоритмов и программ:

  • проверка правильности алгоритмов на конкретных входных данных (тестирование);

  • доказательство правильности работы алгоритма на всех до­пустимых данных (верификация).

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

Проверка правильности алгоритма или программы тестирова­нием состоит в следующем:

  • выбираются конкретные входные данные;

  • проводится трассировка алгоритма на выбранных входных данных;

  • полученные после трассировки результаты сверяются с внеш­ней спецификацией и постановкой задачи.

Трассировка алгоритма или программы — это последователь­ная запись результатов последовательного выполнения шагов ал­горитма при заданных входных данных. Отметим, что все среды программирования имеют средства трассировки программ.

Важнейшим вопросом при проверке алгоритмов и программ с помощью контрольных примеров является полнота тестирова­ния.

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

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