В этой книге мы обсудим
В этой книге мы обсудим относительную эффективность различных программных конструкций, но этой информацией стоит воспользоваться только при выполнении трех условий:
• Текущая эффективность программы неприемлема.
• Не существует лучшего способа улучшить эффективность. В общем случае выбор более эффективного алгоритма даст лучший результат, чем попытка перепрограммировать существующий алгоритм (для примера см. раздел 6.5).
• Можно выявить причину неэффективности.
Чрезвычайно сложно обнаружить причину неэффективности без помощи измерительных средств. Дело в том, что временные интервалы, которые мы инстинктивно воспринимаем (секунды), и временные интервалы работы компьютера (микро- или наносекунды) отличаются на порядки. Функция, которая нам кажется сложной, возможно, оказывает несущественное влияние на общее время выполнения программы.
Профилировщик периодически опрашивает указатель выполняемой команды компьютера и затем строит гистограмму, отображающую процент времени выполнения для каждой процедуры или команды. Очень часто результат удивляет программиста, выявляя узкие места, которые совсем не были очевидны. Крайне непрофессионально выполнять оптимизацию программы без использования профилировщика.
Даже с профилировщиком может оказаться трудно улучшить эффективность программы. Одна из причин состоит в том, что большая часть времени выполнения тратится в получаемых извне компонентах программы, таких как базы данных или подсистемы работы с окнами, которые часто разрабатываются больше по критериям гибкости, чем эффективности.
3.8. Средства тестирования
Тестирование большой системы может занять столько же времени, сколько и программирование вместе с отладкой. Для автоматизации отдельных аспектов тестирования были разработаны программные инструментальные средства. Одно из них — анализатор покрытия (coverage analyzer), который отслеживает, какие команды были протестированы.