
- •56. Понятие корректно и некорректно поставленных задач.
- •57. Метод простой интерации явного типа решения некорректных задач с апостериорным выбором числа итераций
- •Доказательство.
- •56. Понятие корректно поставленной и некорректно поставленной задачи. Пример. Неявный метод простой итерации решения некорректных задач с априорным выбором числа итераций.
- •59. Сходимость метода итераций явного типа решения некорректных задач в энергетической норме.
- •Полагаем и рассмотрим разность
- •Доказательство.
- •7. Обзор популярных технологий программирования.
- •8. Стиль программирования.
- •10. Проектирование программ. Возможности реализации.
- •11. Эффективность программ.
- •Отношение к эффективности
- •Эффективность или удобочитаемость?
- •Оптимизирующие компиляторы
- •Оптимизация программ
- •Оптимизаци памяти
- •Вычислительные составляющие
- •12. Отладка программ.
- •Отличие отладки от тестирования
- •Отладочный барьер
- •Наиболее распространенные ошибки
- •Бесхитростное программирование
- •Синтаксические ошибки
- •Ошибки не обнаруживаемые компилятором
- •Виды отладки
- •Общие рекомендации
- •Средства отладки
- •Программирование без ошибок
- •Предотвращение ошибок
- •13. Тестирование программ.
- •Уровни тестирования
- •Методы тестирования Тестирование «белого ящика» и «чёрного ящика»
- •Статическое и динамическое тестирование
- •Регрессионное тестирование
- •Покрытие кода
- •Пример тестовых данных
11. Эффективность программ.
Основная задача программирования — создание правильных, а не эффективных программ. Эффективная программа бесполезна, если не обеспечивает правильных результатов.
Эффективность является дополнительной характеристикой программы в отличие от правильности. Эффективная, но неправильная программа редко может быть сделана правильной, а правильную, хотя и неэффективную программу можно оптимизировать и сделать эффективной. Оптимизация является вторым этапом программирования. Первый этап — получение правильной программы.
Обычно, большая часть времени расходуется на выполнение очень небольшой части программы (5% ее объема), называемой критической областью.
Требования к эффективности следует определять на этапе проектирования.
Отношение к эффективности
Существуют три типа программ по требованиям к эффективность:
часто используемые программы;
производственные программы (используются длительное время);
единажды или редко используемые программы (например, для однократных вычислений или испытаний).
Следует оптимизировать те программы, которые используются многократно.
Эффективность или удобочитаемость?
Методы, делаюшие программу эффективной и не наносящие ущерба удобочитаемости, нужно использовать всегда.
Удобочитаемость важнее эффективности.
Оптимизирующие компиляторы
Оптимизация программного кода — это модификация программ, выполняемая оптимизирующим компилятором или интерпретатором с целью улучшения их характеристик, таких как производительности или компактности, — без изменения функциональности. Оптимизация — не обязательный, но важный этап компиляции.
Типы оптимизации компилятора:
низкоуровневая (машинно-зависивамая) — на уровне элементарных команд, например, инструкций процессора;
высокоуровневая (машинно-независимая) — на уровне структурных элементов программы, н-р, ветвления и циклы.
Оптимизация программ
Производится по двум критериям: время и память.
Когда возникает необходимость оптимизации рабочей программы сначала проверяется используемый алгоритм на возможноть улучшения, если алгоритм такой возможности не дает, то следует попробовать выбрать другой алгоритм.
Стадии оптимизации по времени:
Сегментация программы — разбиение на подпрограммы.
Профилировка подпрограмм — определение процента времени выполнения отдельных подпрограмм.
Оценка возможных улучшений: не стоит улучшать не поддающиеся улучшению подпрограммы.
Для каждой подпрограммы вычисляется коэффициент улучшения = (процент времени × процент улучшения) / усилия; подпрограммы с большим значением коэффициента подлежат оптимизации в первую очередь.
Подходы к оптимизации: «чистка» и перепрограммирование.
Оптимизаци памяти
Экономное использование памяти почти всегда сопровождается увеличением времени работы программистов и времени выполнения программы.
Оверлейность — возможность перенесения подпрограмм в ОЗУ из другого типа памяти , что позволяет нескольким подпрограммам использовать одну область памяти. Недостаток — постоянное обращение к диску. Возможности оверлея доступны только при наличии вирт памяти.
Заголовки сообщений лучше хранить в оверлейном сегменте, т.к. используются редко.
Эквивалентность: В большинстве машинных языков предусмотрены операторы, позволяющие двум переменным занимать одну и ту же ячейку памяти.