Пиши Дома Нужные Работы

Обратная связь

Использование сведения о машине и компиляторе

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

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

Номера операторов записывают в пяти строках таблицы соглас­но последней цифре номера оператора. Номера операторов, окан­чивающиеся на 0 или 1, размещаются в первой строке, на 2 или .4 — во второй строке, на 4 или 5 — в третьей и т. д. Таким обра­зом, если номера операторов распределены равномерно, сокраща­ется время компилирования.

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

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



Советы программисту по оптимизации программ

 

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

 

 

Контрольные вопросы

 

 

  1. Что является наиболее важным при написании эффективных программ?
  2. Какой тип программ следует оптимизировать? Какой тип программ оптимизировать не надо?
  3. Что означают понятия: оверлейность программ, свертка, уменьшение силы операции, исключение повторяющихся выражений, исключение циклов, исключение инвариантных выражений, развертка цикла, критическая область, локализованность?
  4. В каком случае использовать цикл менее эффективно, чем программировать последовательно?
  5. Как следует располагать вложенные циклы, чтобы сократить число инициирований и проверок цикла?
  6. Какие области программы наиболее выгодны для оптими­зации?
  7. Расположите нижеуказанные операции по скорости их вы­полнения— от самой быстрой к самой медленной:

1) деление, 4) извлечение корня,

2) сложение, 5) возведение в степень,

3) умножение, 6) вычитание.

  1. Имеется ли оптимизирующий компилятор, пригодный для нашего языка программирования? Если да, то какие типы оптимизации он выполняет?
  2. Имеется ли в вашем компиляторе версия, минимизирующая использование объема памяти в объектной программе за счет снижения скорости выполнения? Можно ли повысить скорость выполнения за счет памяти?
  3. Выберите два различных оператора в вашем языке програм­мирования и разработайте тесты, выявляющие, какой оператор выполняется быстрее.
  4. Охарактеризуйте типы программ по степени важности для них эффективности.
  5. Почему удобочитаемость программ зачастую более существенна, чем эффективность?
  6. В чем особенности оптимизирующего компилятора?
  7. Что понимают под машинно-зависимой и машинно-независимой оптимизацией?
  8. Что такое критическая точка программы? Как это понятие используется при оптимизации?
  9. Охарактеризуйте приемы чистки и перепрограммирования программного кода.
  10. Каковы шаги оптимизации программы?
  11. Особенности оптимизации использования памяти?
  12. Какова роль описания переменных, инициирования переменных, вычисления констант, арифметических операций в повышении эффективности программ?
  13. Охарактеризуйте влияние циклов на эффективность программы.

 

Глава 13. Структурное тестирование ПО

 

Основные понятия и принципы тестирования ПО

Тестированиепроцесс выполнения программы с целью обнаружения ошибок.Шаги процесса задаются тестами. Каждый тест определяет:

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

Другое название теста – тестовый вариант. Полную проверку программы гарантирует исчерпывающее тестирование. Оно требует проверить все наборы исходных данных, все варианты их обработки и включает большое количество тестовых вариантов. Исчерпывающее тестирование во многих случаях остается только мечтой – срабатывают ресурсные ограничения (прежде всего, ограничения по времени). Хорошим считают тестовый вариант с высокой вероятностью обнаружения еще не раскрытой ошибки. Успешным называют тест, который обнаруживает до сих пор не раскрытую ошибку.

Целью проектирования тестовых вариантов является систематическое обнаружение различных классов ошибок при минимальных затратах времени и стоимости. Тестирование обеспечивает:

· обнаружение ошибок;

· демонстрацию соответствия функций программы ее назначению;

· демонстрацию реализации требований к характеристикам программы;

· отображение надежности как индикатора качества программы.

Тестирование не может показать отсутствия дефектов (оно может показывать только присутствие дефектов). Важно помнить это (скорее печальное) утверждение при проведении тестирования.

Рассмотрим информационные потоки процесса тестирования. Они показаны на рис. 1.

 

Рис. 1.Информационные потоки процесса тестирования

На входе процесса тестирования три потока:

  • текст программы;
  • исходные данные для запуска программы;
  • ожидаемые результаты.

Выполняются тесты, все полученные результаты оцениваются. Это значит, что реальные результаты тестов сравниваются с ожидаемыми результатами. Когда обнаруживается несовпадение, фиксируется ошибка – начинается отладка. Процесс отладки непредсказуем по времени. На поиск места дефекта и исправления может потребоваться час, день, месяц. Неопределенность в отладке приводит к большим трудностям в планировании действий.

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

  • качество и надежность ПО удовлетворительны;
  • тесты не способны обнаруживать серьезные ошибки.

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

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

Существуют 2 принципа тестирования программы:

· функциональное тестирование (тестирование «черного ящика»);

· структурное тестирование (тестирование «белого ящика»).

 






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2024 pdnr.ru Все права принадлежат авторам размещенных материалов.