如何对用不同编程语言编写的库进行性能测试?

时间:2009-04-25 17:34:52

标签: performance cross-platform testing cross-language

问题是:给定了许多具有相似或相同范围的编程库(例如XML解析器,正则表达式,标记......);是否存在工具,使用这些工具可以对这些库运行性能测试并比较(并生成报告),即使库可能使用不同的编程语言编写(例如java,C#,ruby,python,perl,...) ?

我查看了这些opensourcetesting.org/performance.php,但没有一个符合上述(有点模糊)的要求。

是否有用于跨语言跨平台性能测试的工具包或框架?

感谢。

2 个答案:

答案 0 :(得分:1)

我不会尝试将单个工具包用于多种语言。这不太可能为每个应用程序带来最佳(甚至是平均)性能。

相反,我会尝试提出一个框架设计来定义它要测试的内容,并且有一个共同的数据集。然后,每个语言/库都可以提供自己的框架实现,它可以测试适合该库的操作。这样,即使操作不使用 exact 相同的语法/调用,操作也可以“逻辑上等效”。您最终会测试该库/语言的惯用代码,而不仅仅是最低的公分母。

这是我用于对协议缓冲区进行基准测试的方法。到目前为止,我的基本框架都在C#和Java中实现,现在我正在编写一个更丰富的框架,允许运行整个“基准脚本”。一个理想的目标是同一平台内的不同实现(例如,协议缓冲区的不同.N​​ET实现)应该能够轻松地挂钩到相同的核心基准测试代码。

在我看来,重要的是拥有一组通用的操作(即使它们不是所有所有库实现的所有)和一个公共数据组。这是基准有意义的唯一方式。

答案 1 :(得分:1)

如果可能的话,最好使用某种形式的依赖注入,这样你就可以插入一个模块并用另一个模块切换。您需要在此之前为这些库创建唯一的接口(包装器),这会使工作更难,但总体设计更好。从积极的方面来说,如果你想要进行基准测试,那么早期的界面不一定是完整的,只是为了暴露你认为最有利于perf的东西。是有问题的。

能力在很大程度上取决于所使用的语言。

我不喜欢人工测试。他们大部分时间都在IMO中,人们倾向于忽略一个库函数或多或少与其他库函数一样,而它们看起来都是一样的。我很少遇到没有那种财产的基准。

另一方面,很少有像图书馆那样好的东西。许多库在某些情况下表现出良好的性能,其他类似的库可能会很糟糕,反之亦然。

因此,如果性能对您的应用程序来说是最重要的事情,那么做IMO最好的事情就是为您想要导入的操作创建界面,然后插入/删除几个库并查看真实基准测试中的差异,你的应用程序在行动中的基准,而不是一些人工数学mumbo jumbo ......

相关问题