Университет XXI века: научное измерение
«Университет XXI века: научное измерение» – 2018 496 Оптимизацией программы называют такие преобразования, которые позво- ляют сделать ее более эффективной, т.е. более экономной по памяти и/или более быстрой по выполнению тех же функций, что и до оптимизационного преобра- зования [2]. Очевидно, что эффективность является дополнительным требовани- ем, предъявляемым к программе. Основное требование – правильность. Локальным инструментарием корректности проведения рефакторинга мо- жет служить грамотно организованный процесс тестирования на каждом этапе проведения преобразований. Причем изначально пакет данных тестирования должен гарантировать корректную работу программы на каждой оконечности алгоритма. Традиционно частными критериями оптимизации принято считать время выполнения программы и объем используемой ею памяти. Хотя в общем случае они могут находиться в обратно пропорциональной зависимости, не го- воря уже о том, что эффективное написание программы сопровождается увели- чением объема работы программиста. В начале работы программист осуществляет моделирование данных на уровне области видимости, использования механизмов обращения к памяти, оп- ределяет математическую модель для построения алгоритма и т.д. Но независи- мо от данного этапа при создании сложных приложений и комплексов проекти- рование подвергается изменениям в процессе разработки, а не выполняется целиком заранее. При реализации системы становится ясно, как можно улучшить ее проект. Происходящее взаимодействие приводит к созданию программы, ка- чество проекта которой остается высоким по мере продолжения разработки. Формирование умений оптимизации и рефакторинга кода программы осу- ществляется уже на начальных этапах обучения программированию на языке С++. В процессе изучения базовых алгоритмических конструкций и при разра- ботке функций пользователя задания подбираются таким образом, чтобы не только правильно составить программу, но и получить возможность обратить внимание студентов на возможность оптимизации кода. Яркими примерами этому являются доступные для большинства студентов задания по разработке итерационной функции распознавания простого числа (здесь важную роль иг- рает правильно выбранная математическая модель) и числа Мерсена. Во втором случае проводится сравнение итерационного алгоритма и вычислительного, ко- торый в полной мере использует возможности библиотеки математических функций. В тоже время студентам предъявляются примеры, провоцирующие применение функций из библиотек, в то время как итерационные алгоритмы и понятны, и эффективны (например, вычислить ). При дальнейшем про- движении необходимо использовать возможность оптимизации кода, предос- тавляемую компиляторами: оптимизация константных выражений, замена пе- ременных константными значениями, вычисление значения переменных на стадии компиляции и т. д. Параллельно проходит обучение студентов рефакто- рингу кода. Впечатляющими примерами являются: разработка шаблонов функ- ций пользователя (обмена значениями двух переменных различных типов, по- иска минимального/максимального значения в линейном массиве одного из стандартных типов данных и т. д.) и сравнительный анализ времени работы
Made with FlippingBook
RkJQdWJsaXNoZXIy ODQ5NTQ=