En la ingeniería del software, las pruebas de rendimiento son las pruebas que se realizan, desde una perspectiva, para determinar lo rápido que realiza una tarea un sistema en condiciones particulares de trabajo. También puede servir para validar y verificar otros atributos de la calidad del sistema, tales como la escalabilidad, fiabilidad y uso de los recursos. Las pruebas de rendimiento son un subconjunto de la ingeniería de pruebas, una práctica informática que se esfuerza por mejorar el rendimiento, englobándose en el diseño y la arquitectura de un sistema, antes incluso del esfuerzo inicial de la codificación.
Las pruebas de rendimiento pueden servir para diferentes propósitos en . Pueden área sistemas demostrar que el sistema cumpla los criterios de rendimiento. Pueden comparar dos sistemas para encontrar cual de ellos funciona mejor. O pueden medir que partes del sistema o de carga de trabajo provocan que el conjunto rinda mal. Para su diagnóstico, los ingenieros de software utilizan herramientas como pueden ser monitorizaciones que midan qué partes de un dispositivo o software contribuyen más al mal rendimiento o para establecer niveles (y umbrales) del mismo que mantenga un tiempo de respuesta aceptable.
Es fundamental para alcanzar un buen nivel de rendimiento de un nuevo sistema, que los esfuerzos en estas pruebas comiencen en el inicio del proyecto de desarrollo y se amplie durante su construcción. Cuanto más se tarde en detectar un defecto de rendimiento, mayor es el coste de la solución. Esto es cierto en el caso de las pruebas funcionales, pero mucho más en las pruebas de rendimiento, debido a que su ámbito de aplicación es de principio a fin.
En las pruebas de rendimiento, a menudo es crucial (y con frecuencia difícil de conseguir) que las condiciones de prueba sean similares a las esperadas en el uso real. Esto es, sin embargo, casi imposible en la práctica. La razón es que los sistemas en producción tienen un carácter aleatorio de la carga de trabajo y aunque en las pruebas se intente dar lo mejor de sí para imitar el volumen de trabajo que pueda tener el entorno de producción, es imposible reproducir exactamente la variabilidad de ese trabajo, salvo en el sistema más simple.
Los nuevos conceptos en la implementación de la arquitectura (por ejemplo: SOA) han añadido complejidad adicional a las pruebas de rendimiento.[1] Los servicios o recursos de la empresa (que comparten infraestructura o plataforma) requieren pruebas de rendimiento coordinadas (con la creación del volumen y carga de todos los sistemas que comparten la infraestructura o plataformas) para reproducir realmente el estado del entorno de producción. Debido a la complejidad, coste y tiempo necesario en torno a esta actividad, algunas organizaciones emplean herramientas que pueden mostrar y crear condiciones (también conocido como "ruido") en los entornos de pruebas de rendimiento para comprender la capacidad y las necesidades de recursos y verificar/validar los niveles de calidad.
Este es el tipo más sencillo de pruebas de rendimiento. Una prueba de carga se realiza generalmente para observar el comportamiento de una aplicación bajo una cantidad de peticiones esperada. Esta carga puede ser el número esperado de usuarios concurrentes utilizando la aplicación y que realizan un número específico de transacciones durante el tiempo que dura la carga. Esta prueba puede mostrar los tiempos de respuesta de todas las transacciones importantes de la aplicación. Si la base de datos, el servidor de aplicaciones, etc.. también se monitorizan, entonces esta prueba puede mostrar el cuello de botella en la aplicación.
Esta prueba se utiliza normalmente para romper la aplicación. Se va doblando el número de usuarios que se agregan a la aplicación y se ejecuta una prueba de carga hasta que se rompe. Este tipo de prueba se realiza para determinar la solidez de la aplicación en los momentos de carga extrema y ayuda a los administradores para determinar si la aplicación rendirá lo suficiente en caso de que la carga real supere a la carga esperada.
Esta prueba normalmente se hace para determinar si la aplicación puede aguantar una carga esperada continuada. Generalmente esta prueba se realiza para determinar si hay alguna fuga de memoria en la aplicación.
La prueba de picos, como el nombre sugiere, trata de observar el comportamiento del sistema variando el número de usuarios, tanto cuando bajan, como cuando tiene cambios drásticos en su carga. Esta prueba se recomienda que sea realizada con un software automatizado que permita realizar cambios en el número de usuarios mientras que los administradores llevan un registro de los valores a ser monitorizados.
Un desarrollo estable de la aplicación instalado en un entorno lo más parecido al de producción.[2]
El entorno de pruebas de rendimiento no debe cruzarse con pruebas de aceptación de usuarios ni con el entorno de desarrollo. Esto es tan peligroso que si las pruebas de aceptación de usuarios, o las pruebas de integración o cualquier otra prueba se ejecutan en el mismo entorno, entonces los resultados no son fiables. Como buena práctica, siempre es aconsejable disponer de un entorno de pruebas de rendimiento lo más parecido como se pueda al entorno de producción.
Algunos de los mitos más comunes son los siguientes.
Por otro lado, en relación con este mito, también es falso que cualquier cambio en la interfaz de usuario, especialmente en el ámbito Web, supone un completo desarrollo de los scripts desde cero. Este problema se vuelve mayor si los protocolos involucrados incluyen Web Services, Siebel, scripts de acciones, Citrix o SAP.
La tecnología de las pruebas de rendimiento utiliza uno o más PCs o servidores para actuar como peticionarios. Cada uno emula la presencia de un número de usuarios y cada uno ejecuta una secuencia automática de las interacciones[3] (registrada como una secuencia de comandos, o como una serie de scripts para simular los distintos tipos de uso por parte de los usuarios) con la aplicación cuyo rendimiento se pone a prueba. Por lo general, un PC actúa como gestor de prueba, coordinando, recopilando las métricas de cada uno de los ejecutores y acumulando los datos de rendimiento para la realización de los informes.
La secuencia habitual es incrementar la carga, comenzando con un pequeño número de usuarios virtuales y aumentando el número durante un periodo hasta alcanzar el máximo. El resultado de la prueba muestra la forma en que el rendimiento varía con la carga, mostrando como el número de usuarios modifica el tiempo de respuesta. Existen diversas herramientas disponibles para la realización de tales pruebas. Estas herramientas suelen ejecutar un conjunto de pruebas que simulan usuarios reales utilizando el sistema. A veces los resultados pueden revelar curiosidades, por ejemplo, si el promedio de tiempo de respuesta puede ser aceptable, si existen valores anómalos en las peticiones que necesitan tiempos considerablemente más largo para ejecutarse - algo que puede ser causado por peticiones poco eficientes a la base de datos, fotos, etc.
Las pruebas de rendimiento se pueden combinar con pruebas de estrés, con el fin de ver qué pasa cuando una carga aceptable se supera ¿Se cae el sistema? ¿Cuánto tiempo tarda en recuperarse si se reduce una gran carga? ¿Un fallo produce daños colaterales?
El modelo de análisis de rendimiento es un método para modelar el comportamiento de una aplicación en una hoja de cálculo. El modelo se alimenta con las mediciones de los recursos solicitados por las peticiones (CPU, IO, LAN, WAN), ponderado por el nivel de transacción (las peticiones realizadas por unidad de tiempo, habitualmente una hora).
La demanda de recursos de las peticiones son acumuladas para obtener la demanda de recursos por unidad de tiempo y divididas por la capacidad total de recursos por la misma unidad, obteniendo así la carga de recursos. Usando la fórmula de tiempo de respuesta (R=S/(1-U), R=tiempo de respuesta, S=tiempo del servicio, U=carga), los tiempos de respuesta pueden ser calculados y calibrados con los resultados de las pruebas de rendimiento. El modelo de análisis del rendimiento permite la evaluación de diferentes opciones de diseño y dimensionamiento del sistema sobre la base actual o la prevista del uso de la aplicación. Por lo tanto, es mucho más rápido y más barato que las pruebas de rendimiento, aunque requiere una alta comprensión de las plataformas de hardware.
Es fundamental detallar las especificaciones de rendimiento (requisitos) y documentarlas en algún plan de pruebas de rendimiento. Idealmente, esto se hace durante la fase de requisitos del desarrollo de cualquier proyecto de desarrollo de sistemas, antes de cualquier esfuerzo de diseño.
Sin embargo, con frecuencia las pruebas de rendimiento no se realizan teniendo en cuenta alguna especificación, es decir, nadie ha expresado cuál es el tiempo máximo de respuesta aceptable para un número determinado de usuarios. Las pruebas de rendimiento se utiliza con frecuencia como parte del proceso de ajuste de la ejecución. La idea es identificar el "eslabón más débil" - hay, inevitablemente, una parte del sistema que, si responde con mayor rapidez, eso se traducirá en un funcionamiento del sistema global más rápido.
A veces es una difícil tarea determinar qué parte del sistema representa esta ruta crítica, y algunas herramientas de prueba incluyen (o puede tener añadidos que lo proporcionan) instrumentos que se ejecuta en el servidor (agentes) y que informan de tiempos de transacción, número de accesos a bases de datos, sobrecarga de la red, y otros monitores del servidor, que pueden ser analizados junto con los datos principales de las estadísticas de rendimiento. Sin estos instrumentos se podría tener a alguien encargado de observar el administrador de tareas de Microsoft Windows del servidor para ver como se carga la CPU en las pruebas de rendimiento (suponiendo que se prueba un sistema de Windows).
Hay una supuesta historia de una empresa que gastó una gran cantidad de tiempo y dinero para optimizar su software sin haber realizado un análisis adecuado del problema. La empresa terminó reescribiendo el proceso de sistema ‘idle loop’, que es donde habían encontrado que el pasaba la mayor parte de su tiempo, pero incluso con el más eficiente proceso de espera en el mundo, obviamente, no mejoraron el rendimiento general ni un ápice.
Las pruebas de rendimiento se pueden realizar a través de la web, e incluso hacerse en diferentes partes del país, ya que es sabido que los tiempos de respuesta de Internet varían regionalmente. También se puede hacer en local, aunque el hardware de enrutamiento debe estar configurado para introducir el desfase de lo que suele ocurrir en las redes públicas. Las cargas deben ser realizadas en puntos realistas del sistema. Por ejemplo, si el 50% de usuarios de un sistema accede a través de una conexión de módem de 56K y la otra mitad a través de una T1, entonces la carga simulada (ordenadores que simulan los usuarios reales) se debe realizar, ya sea con las mismas conexiones (caso ideal) o simular la latencia de la red de conexiones de este tipo, siguiendo el mismo perfil de usuario.
Siempre es útil disponer de una estimación del pico de número de usuarios que se espera que utilicen el sistema en las horas punta. Si puede ser también una estimación del máximo tiempo de respuesta permitido en el percentil 95, para que la configuración de la ejecución de las pruebas se ajuste a estas especificaciones.
La especificación de rendimiento, como mínimo, debería responder a las siguientes preguntas:
Las tareas para realizar una prueba de este tipo serían las siguientes:
Según Microsoft Developer Network, la Metodología de las Pruebas de Rendimiento consiste en las siguientes actividades:
.--