Я работаю над проектом, который нуждается в некоторой настройке производительности.
Как мне написать тест, который не проходит, если мои оптимизации не улучшают скорость программы?
Для уточнения:
Проблема не в том, чтобы определить, какие части оптимизировать. Для этого я могу использовать различные инструменты профилирования и бенчмаркинга.
Проблема заключается в использовании автоматических тестов для документирования того, что определенная оптимизация действительно имела ожидаемый эффект. Также было бы очень желательно, если бы я мог использовать набор тестов, чтобы позже обнаружить возможные регрессии производительности.
Полагаю, я мог бы просто запустить свои инструменты профилирования, чтобы получить некоторые значения, а затем утверждать, что мой оптимизированный код дает лучшие значения. Однако очевидная проблема заключается в том, что сравнительные значения не являются жесткими значениями. Они различаются в зависимости от местной среды.
Итак, является ли ответом всегда использовать одну и ту же машину для такого интеграционного тестирования? Если это так, вам все равно придется учесть некоторую неопределенность в результатах, поскольку даже на одном и том же оборудовании результаты тестирования производительности могут отличаться. Как тогда принять это во внимание?
Или, может быть, ответ - сохранить старые версии программы и сравнить результаты до и после? Это был бы мой предпочтительный метод, так как он в основном не зависит от окружающей среды. У кого-нибудь есть опыт работы с таким подходом? Я полагаю, что будет необходимо сохранить только одну более старую версию, если все тесты можно будет пройти, если производительность последней версии будет, по крайней мере, такой же хорошей, как и у предыдущей версии.