Как проводить тесты производительности библиотек, написанных на разных языках программирования?

StackOverflow https://stackoverflow.com/questions/789376

Вопрос

Проблема в том, что:Учитывая ряд программных библиотек с аналогичной или равной областью применения (напримерАнализатор XML, регулярное выражение, разметка, ...);существуют ли инструменты, с помощью которых можно запускать тесты производительности этих библиотек и сравнивать (и генерировать отчеты), даже если библиотеки могут быть написаны на разных языках программирования (таких как java, C #, ruby, python, perl, ...)?

Я посмотрел на эти opensourcetesting.org/performance.php, но ни один из них не соответствовал приведенному выше (несколько размытому) требованию.

Существуют ли наборы инструментов или фреймворки для межъязыковых кроссплатформенных тестов производительности?

Спасибо.

Это было полезно?

Решение

Я бы не стал пытаться использовать один инструментарий для нескольких языков.Вряд ли это обеспечит наилучшую (или даже среднюю) производительность для каждого приложения.

Вместо этого я бы попытался разработать дизайн фреймворка, который определяет, что он собирается тестировать, и имеет общий набор данных.Тогда каждый язык / библиотека может предоставить свою собственную структуру реализация который проверяет операции, подходящие для этой библиотеки.Таким образом, операции могут быть "логически эквивалентны", даже если они не используют точный тот же синтаксис / вызовы.В конечном итоге вы тестируете идиоматический код для этой библиотеки / языка, а не просто наименьший общий знаменатель.

Это подход, который я использовал для сравнительного анализа буферов протокола.Пока что мой самый базовый фреймворк имеет реализации на C # и Java, и сейчас я пишу более богатый фреймворк, который позволяет запускать целый "тестовый скрипт".Одна из идеальных целей заключается в том, чтобы различные реализации на одной платформе (напримерразные .СЕТЕВЫЕ реализации буферов протокола) должны быть способны подключаться к одному и тому же базовому коду бенчмаркинга с очень небольшими усилиями.

На мой взгляд, важно иметь общий набор операций (даже если они не являются ВСЕ реализованный с помощью ВСЕ библиотеки) и общий набор данных.Это единственный способ, с помощью которого контрольные показатели могут быть значимыми.

Другие советы

Если возможно, было бы лучше всего использовать какую-либо форму внедрения зависимостей, чтобы вы могли подключить один модуль и переключить его на другой.Перед этим вам нужно было бы создать уникальный интерфейс для таких библиотек (то есть оболочку), что усложняет работу, но улучшает общий дизайн.С положительной стороны, если вы хотите протестировать более ранний интерфейс, он не обязательно должен быть полным, а просто показывать то, что, по вашему мнению, было бы наиболее полезным при доработке.находится под вопросом.

Способности во многом зависят от используемого языка.

Я не люблю искусственные тесты.Большую часть времени они неточны IMO, люди склонны упускать из виду, что одна библиотечная функция выполняет больше или меньше, чем другая библиотечная функция, в то время как они обе выглядят как одно и то же.Я редко сталкиваюсь с бенчмарками, у которых не было такого свойства.

С другой стороны, редко существует такая вещь, как абсолютно лучшая библиотека.Многие библиотеки обеспечивают хорошую производительность в некоторых сценариях, где другие подобные библиотеки могут быть плохими, и наоборот.

Итак, если производительность является наиболее важной вещью для вашего приложения, лучшее, что можно сделать IMO, - это создать интерфейс для операций, которые вы хотели бы импортировать, затем подключить пару библиотек и увидеть различия в реальных тестах, тестах вашего приложения в действии, а не в какой-то искусственной математической болтовне...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top