- •Методические указания
- •Для студентов специальности 6.050102
- •Всех форм обучения
- •1.Разработка технического задания. Лабораторная работа № 1
- •1.1 Теоретические сведения
- •1.2 Задание на лабораторную работу
- •1.3 Список контрольных вопросов
- •2.Оформление программной документации. Лабораторная работа № 2
- •2.1 Теоретические сведения
- •2.2 Задание на лабораторную работу
- •2.3 Список контрольных вопросов
- •3. Расчет метрик холстеда. Лабораторная работа № 3
- •3.1 Описание метрик Холстеда
- •3.2 Пример определения характеристик программы
- •3.3 Порядок выполнения работы
- •3.4 Список контрольных вопросов
- •4. Оптимизация программ. Лабораторная работа № 4
- •4.1 Теоретические сведения
- •4.2 Порядок выполнения работы
- •4.3 Список контрольных вопросов
- •5. Структурное тестирование. Лабораторная работа № 5
- •5.1 Задачи и методы тестирования
- •5.2 Структурное тестирование
- •5. 3 Выполнение работы
- •5.5 Список контрольных вопросов
- •6. Метод эквивалентных разбиений. Лабораторная работа № 6
- •6.1 Теоретические сведения
- •6.2 Выделение классов эквивалентности
- •6.3 Построение тестов
- •6.4 Порядок выполнения работы
- •6.5 Список контрольных вопросов
- •7. Метод функциональных диаграмм. Лабораторная работа n 7
- •7.1 Особенности метода функциональных диаграмм
- •7.2 Базовые символы для записи функциональных диаграмм
- •7.3 Пример построения функциональной диаграммы
- •7.4 Преобразование функциональной диаграммы в таблицу решений и построение тестов
- •7.5 Порядок выполнения работы
- •7.6 Список контрольных вопросов
- •8. Расстановка контрольных точек. Лабораторная работа №8
- •8.1 Теоретические сведения
- •8.2 Порядок выполнения работы
- •8.3 Список контрольных вопросов
- •9. Мутационный анализ. Лабораторная работа № 9
- •9.1 Теоретические сведения
- •9.2 Описание мутаций
- •9.3 Порядок выполнение работы
- •9.4 Список контрольных вопросов
- •10. Оценка надежности программ. Лабораторная работа № 10
- •10.1 Теоретические сведения
- •10.2 Порядок выполнения работы
- •10.3 Список контрольных вопросов
- •11. Определение показателей качества программного средства. Лабораторная работа № 11
- •11.1 Теоретические сведения
- •11.2 Номенклатура показателей качества
- •11.3 Методы оценки уровня качества пс
- •11.3 Порядок выполнения работы
- •11.5 Содержание отчета
- •11.6 Список контрольных вопросов
- •12. Расчет метрик чидамбера-кемерера. Лабораторная работа № 12
- •12.1 Теоретические сведения
- •12.2 Использование метрик Чидамбера-Кемерера
- •12.3 Порядок выполнения работы
- •12.4 Содержание отчета о выполнении работы
- •12.5 Список контрольных вопросов
4. Оптимизация программ. Лабораторная работа № 4
Цель работы: Ознакомление с видами оптимизации программы, оптимизация индивидуального модуля по выбранному параметру (время выполнения, объем памяти).
4.1 Теоретические сведения
Оптимизация - преобразование программы, сохраняющее ее семантику (конструкции языка программирования), но уменьшающие ее размер и время выполнения.
Виды оптимизация программы:
- глобальная (всей программы);
локальная (нескольких соседних операторов, образующих линейный участок);
- квазилокальная (фрагментов программы фиксированной структуры, например, циклов).
Способы оптимизации
1 Разгрузка участков повторяемости: вынесение вычислений из многократно проходимых исполняемых участков программы на участки программы, редко проходимые. Таким образом, это преобразование тела цикла или рекурсивных процедур.
2 Упрощение действий: улучшение программы за счет замены групп вычислений на группу вычислений, дающих тот же результат с точки зрения всей программы, но имеющих меньшую сложность.
а) упрощение действий происходит при замене сложных операций в выражениях более простыми: x / 0.4 -> x*0.25;
б) преобразование по объединению или расчленению циклов, по перестановке заголовков циклов, по удалению избыточных выражений (замене их на переменную)
3 Реализация действия: действия над константами заменяются на константы; ликвидация константных распознавателей - замена условного оператора на одну из его ветвей, если его выбирающее условие- выражение имеет постоянное значение;
удаление из программы ненужных пересылок вида:
Y=F(W), X=Y на X=F(W)
4 Чистка программы (удаление ненужных конструкций): недостижимых операторов, существенных операторов, неиспользуемых переменных, видов, операций.
5 Сокращение размера программы: вынесение одинаковых конструкций в начальную или конечную точку программы; поиск в программе похожих объектов и оформление их в виде процедуры.
6 Экономия памяти - уменьшение объема памяти, отводимые под информационные объекты программы (например, параметры процедуры).
Для оценки экономии времени можно использовать метод nanoTime() класса System.
public static long nanoTime()
Например, вычисление того, сколько выполняется некоторый код, можно выполнить так:
long startTime = System.nanoTime();
// ... the code being measured ...
long estimatedTime = System.nanoTime() - startTime;
Возвращает текущее значение системного таймера в наносеундах.
4.2 Порядок выполнения работы
1. Для индивидуального модуля сравнить влияние различных способов оптимизации (1-6) на выбранные параметры оптимизации(объем памяти, быстродействие). Выполнить не менее трех экспериментов.
2. Оформить отчет, содержащий описание, обоснование и результаты оптимизации программы.
4.3 Список контрольных вопросов
Почему необходимо проводить оптимизацию, а не минимизацию программы?
От чего зависит выбор метода оптимизации?
Почему большое внимание уделяется циклическим участкам?
К каким нежелательным последствиям может привести оптимизация?