Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛЕКЦИЯ 16.doc
Скачиваний:
6
Добавлен:
04.06.2015
Размер:
96.77 Кб
Скачать

16.5. Этапы решения задач на эвм

16.5.1. Основные этапы

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

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

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

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

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

тестирование;

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

Рассмотрим их.

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

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

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

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

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

Какими ресурсами располагает проектировщик?

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

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

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

Тестирование. На этом этапе производится всесторонняя проверка программы. Тестирование более подробно будет рассмотрено ниже.

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

16.5.2. Тестирование программы

Рассмотрим этап тестирования программ более подробно. Существуют три аспекта проверки программы на:

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

эффективность реализации;

вычислительную сложность.

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

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

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

Первый способ основан на следующем правиле. Сложение и вычитание выполняются быстрее, чем умножение и деление. Целочисленная арифметика быстрее арифметики вещественных чисел. Таким образом, x+x лучше, чем 2*х, а i+0.5*j хуже, чем (2*i+j)*0.5. При выполнении операций над целыми числами следует помнить, что благодаря применению двоичной системы счисления умножение на числа, кратные двум, можно заменить соответствующим количеством сдвигов влево.

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

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

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

Четвертый прием– исключение циклов:

Например, фрагмент (вычисление произведения матриц)

может быть заменен на следующий:

В данном примере выигрыш достигается, во-первых, за счет уменьшения количества циклов (два вместо трех), а во-вторых, за счет того, что введением временной переменной s уменьшено количество операций вычисления адресов элементов массива.

Пятый прием– развертывание циклов. Запись

можно переписать так:

Выигрыш в скорости вычислений вполне очевиден.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]