Test de Rendimiento
¿Qué son?
Son aquellas pruebas realizadas al final el proceso de desarrollo. Este tipo de test consisten en someter a un sistema con una carga de trabajo, la cual se define en función del tipo de prueba a realizar, con la finalidad de medir su fiablidad, velocidad y estabilidad en las distintas condiciones de trabajo.
Necesidad
Este tipo de test son necesarios ya que, por ejemplo, con los test unitarios comprobamos el funcionamiento de cada uno de los elementos de nuestro código por separado, en este ultimo paso de la pirámide de arquitectura comprobamos en conjuntos todos los elementos que van a formar nuestro producto (Base de datos, código, servidor ...). Los objetivos que nos llevarán a realizar este tipo de test son los siguientes:
Localizar cuellos de botella: Dado que vamos a hacer pruebas de rendimiento tanto en las condiciones normales que se darán en el sistema, como en condiciones excepcionales, esto nos permitirá observar los tiempos de respuesta, que, si son altos o directamente el sistema colapsa, podremos ver si es debido a la CPU, a la falta de memoria o ancho de banda entre otros.
Localizar e identificar problemas de rendimiento en la aplicación: Entrando más en detalle, cuando probemos las distintas funcionalidades, podremos ver cuales tienen un funcionamiento inesperado y así ver que servicios tienen un funcionamiento inesperado y, o solucionarlo, u optimizarlo en el caso que el tiempo de respuesta sea exageradamente alto.
Verificar los Acuerdos de Nivel de Servicio: Por último, podremos ver si se cumplen los requerimientos esperados del producto. Es decir, si hemos realizado una aplicación que tendrá de manera concurrente 500 usuarios, y el tiempo de respuesta debe ser menor a 4ms, podremos comprobar que dichos requerimientos se cumplen con este tipo de pruebas.
Estructura de las pruebas
Dicho lo anterior, en este punto veremos que etapas debemos seguir para la realización de los test así como los distintos tipos de pruebas a realizar. En cuanto a las etapas deberemos seguir las siguientes:
Planificación: En primer lugar deberemos definir la estrategia de las pruebas, fijando objetivos medibles, concretos y evaluables para así saber las herramientas que necesitaremos, personas implicadas ... Por otro lado analizaremos los casos de prueba que serán incluidos en nuestras pruebas de rendimiento.
Preparación: Configuración de todos los elementos necesarios para las pruebas y testearemos que funcionan correctamente.
Ejecución: Realizaremos las pruebas que hemos definido en los objetivos del punto de planificación.
Resultados: Obtendremos los resultados de las pruebas, observaremos cuales han sido los datos, deberemos hacer un informe de los mismos y ver que es lo que podría haber ido mejor. Una vez tengamos los puntos a mejorar deberemos volver a realizar los puntos vistos anteriormente.
Una vez vistas las etapas vamos a definir los tipos fundamentales de pruebas de rendimiento que se pueden realizar:
Pruebas de carga: Con esta prueba comprobamos que el sistema es capaz de asumir la carga esperada, con tiempos de respuesta aceptables y consumo de recursos que no pongan en peligro la producción.
Pruebas de capacidad: Con este tipo de pruebas se obtienen los limites de funcionamiento del sistema así como los elementos limitantes dentro de la plataforma.
Pruebas de estabilidad: Permite garantizar el correcto uso de los recursos por parte de la aplicación durante un periodo prolongado de tiempo.
Pruebas de estrés: Se somete al sistema a un nivel de carga por encima de lo esperado, pero que puede llegar a producirse bajo determinadas circunstancias.
Buenas prácticas
Para ser lo más óptimos posible con la realización de este tipo de test debemos tener en cuenta los siguientes puntos:
Se debe elegir cuidadosamente el plan de pruebas porque, aunque en una primera versión si se debe probar todo, en posteriores solo debe probarse aquello que haya sido modificado.
Se debe dar prioridad a la corrección de errores en función del uso de los distintos elementos.
El producto debe ser probado tanto en tu maquina como en condiciones de producción ya que, si funciona en tu maquina no quiere decir que funciona en producción una vez desplegado.
Por último sería interesante recoger datos de rendimiento de los clientes para así poder analizar los mismos y observar posibles mejoras.
¿Cuándo se deben realizar los test?
Para alcanzar en nuestro sistema un nivel de rendimiento acorde a los requerimientos establecidos deberemos comenzar estas pruebas en el inicio de desarrollo e irlas realizando paulatinamente durante su construcción ya que, cuanto más se tarde en detectar un defecto de rendimiento, mayor es el coste de la solución.