Estoy trabajando en un proyecto que necesita mucho ajuste de rendimiento.¿Mejores prácticas de prueba de rendimiento al hacer TDD?
¿Cómo escribo una prueba que falla si mis optimizaciones no mejoran la velocidad del programa?
Para elaborar un poco:
El problema no es descubrir qué partes de optimizar. Puedo usar varias herramientas de evaluación y evaluación comparativa para eso.
El problema es utilizar pruebas automatizadas para documentar que una optimización específica sí tuvo el efecto deseado. También sería muy conveniente si pudiera usar el conjunto de pruebas para descubrir posibles regresiones de rendimiento más adelante.
Supongo que podría simplemente ejecutar mis herramientas de generación de perfiles para obtener algunos valores y luego afirmar que mi código optimizado produce mejores valores. El problema obvio con eso, sin embargo, es que los valores de referencia no son valores difíciles. Varían según el entorno local.
Entonces, ¿la respuesta es utilizar siempre la misma máquina para realizar este tipo de pruebas de integración? Si es así, aún tendría que permitir cierta confusión en los resultados, ya que incluso en los mismos resultados de evaluación comparativa de hardware puede variar. ¿Cómo luego tomar esto en cuenta?
¿O tal vez la respuesta es mantener versiones anteriores del programa y comparar resultados antes y después? Este sería mi método preferido, ya que es en su mayoría agnóstico del medio ambiente. ¿Alguien tiene experiencia con este enfoque? Me imagino que solo sería necesario mantener una versión anterior si se puede hacer pasar todas las pruebas si el rendimiento de la última versión es al menos tan bueno como la versión anterior.
¿Confirma usted esta afirmación al control de revisión? ¿Espera que se revise en más de un tipo de máquina? Si es así (como me imagino), ¿cómo puede usted proporcionar una expectativa razonable de que sus afirmaciones son apropiadas en una máquina más lenta/más rápida? – bukzor