Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
сокращено.docx
Скачиваний:
8
Добавлен:
16.08.2019
Размер:
766.9 Кб
Скачать
  1. Эффективность и технологичность программного обеспечения.

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

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

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

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

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

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

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

  • выносить вычисление константных, т.е. не зависящих от параметров цикла, выражений из циклов;

  • избегать «длинных» операций умножения и деления, заменяя их сложением, вычитанием и сдвигами:

  • минимизировать преобразования типов в выражениях;

  • оптимизировать запись условных выражений – исключать лишние проверки;

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

•избегать использования различных типов в выражении и т.п.

  1. Программирование с «защитой от ошибок».

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

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

  • правильность выполнения операций ввода-вывода;

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

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

ошибки передачи – аппаратные средства, например, вследствие неисправности, искажают данные;

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

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

ошибки данных – пользователь вводит неверные данные.

Ошибки передачи обычно контролируются аппаратно.

Проверка допустимости промежуточных результатов.

Имеет смысл проверять не все промежуточные результаты, а только те, проверка которых целесообразна, т.е. возможно позволит обнаружить ошибку, и не сложна. Пр

  • если каким-либо образом вычисляется индекс элемента массива, то следует проверить, что этот индекс является допустимым;

  • если строится цикл, количество повторений которого определяется значением переменной, то целесообразно убедиться, что значение этой переменной не отрицательно;

  • если определяется вероятность какого-либо события, то целесообразно проверить, что полученное значение не более 1, а сумма вероятностей всех возможных независимых событий равна 1 и т.д.

Предотвращение накопления погрешностей. Чтобы снизить погрешности результатов вычислений, необходимо: избегать вычитания близких чисел (машинный ноль);

  • избегать деления больших чисел на малые;

  • сложение длинной последовательности чисел начинать с меньших по абсолютной величине;

  • стремиться по возможности уменьшать количество операций;

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

  • не использовать условие равенства вещественных чисел:

  • вычисления производить с двойной точностью, а результат выдавать – с одинарной.

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

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

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