Como conduzir testes de desempenho em bibliotecas escritas em diferentes linguagens de programação?

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

Pergunta

O problema é : Dado um número de bibliotecas com escopo semelhante ou igual a programação (por exemplo parser XML, regex, marcação, ...); Existem ferramentas, com o qual se pode executar testes de desempenho nessas bibliotecas e comparar (e gerar relatórios), mesmo que as bibliotecas podem ser escritos em diferentes linguagens de programação (tais como Java, C #, Ruby, Python, Perl, ...) ?

Eu olhei para estes opensourcetesting.org/performance.php , mas nenhum deles equipado na exigência (um pouco embaçada) acima.

Existem toolkits ou quadros lá fora, para os testes de desempenho multi-plataforma cross-language?

Graças.

Foi útil?

Solução

Eu não iria tentar usar um único conjunto de ferramentas para vários idiomas. Isso é improvável que trazer o melhor (ou mesmo da média) de desempenho para cada aplicativo.

Em vez disso, gostaria de tentar chegar a um desenho da estrutura que define o que vai teste, e tem um conjunto de dados comum. Em seguida, cada idioma / biblioteca pode fornecer seu próprio quadro aplicação que testa as operações que são apropriados para essa biblioteca. Dessa forma, as operações podem ser "logicamente equivalente", mesmo que não use o exata mesma sintaxe / chamadas. Você acaba de testar o idiomática código para essa biblioteca / linguagem, ao invés de apenas um menor denominador comum.

Esta é a abordagem que eu tomei para aferir Protocol Buffers. Até agora o meu quadro muito básico tem implementações em C # e Java, e eu estou escrevendo agora um quadro mais rico que permite um "script de referência" Toda a ser executado. Um objectivo ideal é que diferentes implementações dentro da mesma plataforma (por exemplo, diferentes implementações .NET do Protocolo Buffers) deve ser capaz de ligar para o mesmo código de benchmarking núcleo com muito pouco esforço.

O importante, na minha opinião, é ter um conjunto comum de operações (mesmo se eles não são todas implementada pelo todas bibliotecas) e um conjunto de dados comuns conjunto. Essa é a única maneira dos benchmarks pode ser significativo.

Outras dicas

Se possível, seria o melhor para usar alguma forma de injeção de dependência para que possa ligar a um módulo e ligá-lo com outro. Você precisaria criar interface única para essas bibliotecas antes que tho (invólucro que é), que faz um trabalho mais difícil, mas concepção global melhor. No lado positivo, se você quiser referência da interface anterior não tem que ser completa, mas apenas para expor o que você acha que seria mais benéfico quando perf. está em questão.

As habilidades dependem muito da linguagem utilizada.

Eu não gosto testes artificiais. Eles são na maioria das inacurate tempo IMO, as pessoas tendem a ignorar que uma função de biblioteca faz mais ou menos, em seguida, outra função de biblioteca enquanto ambos olhar como a mesma coisa. Eu raramente encontrar benchmarks que não têm esse tipo de propriedade.

Por outro lado, raramente existe tal coisa a como totalmente melhor biblioteca. Muitas bibliotecas presente bom desempenho em alguns cenários onde outras bibliotecas semelhantes podem sugar, e vice-versa.

Assim, se o desempenho é a coisa mais importante para a sua aplicação, a melhor coisa a fazer IMO é criar interface para as operações que você gostaria de importação, em seguida, plug-in / out par de bibliotecas e ver as diferenças em benchmarks reais, benchmarks do seu aplicativo em ação, e não algum artifical matemática patranhas ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top