jueves, enero 31

Performance Testing

Quisiera empezar con las definiciones básicas utilizadas en todo lo referido a las pruebas de carga y performance Testing (Performance & Load Testing).
Performance Testing
Definición según la IEEE:
“El grado en que un sistema o componente realiza sus funciones designadas dentro de las limitaciones dadas, tales como la velocidad, precisión, o el uso de la memoria.”
Enfocadas en ¿Cuanto? y ¿Que tan rápido? funciona la aplicación, no se hace juicio de la aplicación solo se mide y analiza.
Durante estas pruebas no se busca encontrar errores, pero si se busca enfocarse en procesos individuales de la aplicación  (Base de Datos, Algoritmos, Red, etc…) en busca de probables cuellos de botella (Les dejo una presentación sobre esto realizada por Scott Barber) y poder determinar una base a considerar en futuros cambios de la aplicación.
Se considera como principal objetivo, predecir anticipadamente problemas de rendimiento y degradación de recursos del sistema antes de su paso a producción y así facilitar su corrección.
Puede implicar pruebas cuantitativas realizadas en un laboratorio (tiempo de respuesta de la aplicación, rendimiento, etc ..) así como  también pruebas cualitativas como confiabilidad, escalabilidad y la interoperabilidad.
Se espera que las pruebas se realicen sobre una aplicación estable sonde sea posible la ejecución de los distintos escenarios que se consideren críticos (telemarketer que necesita información rápidamente para poder realizar la venta) o frecuentes (lo que implica mayor cantidad de usuarios concurrentes y una necesidad de disponibilidad de la aplicación) desde el lado del negocio. Además es vital tener objetivos claros para poder definir correctamente las métricas que vamos a utilizar y como las vamos a utilizar.
Performance Validation es la etapa donde se apunta a medir si se cumplen con los requerimientos establecidos por el cliente, donde se juzga los resultados medidos y analizados para poder determinar el porque y como solucionar estos. Se estima que en el 80 % de los casos los problemas de performance se deben a una incorrecta elección de la arquitectura de la aplicación. Para prevenir estos  casos existe PASA (Ver).
Performance Engineering es la etapa final donde se realizan los cambios necesarios (tunning) para alcanzar lo esperado por la aplicación, esto puede incluir cambios de codigo, hard o red entre los principales para luego ser testeado nuevamente.
Les dejo una presentación que realice sobre Performance Testing, pueden bajarla aqui
Conceptos más puntuales:
Availability:  El grado en que un sistema es funcional, estable y eficiente. Se mide por el tiempo de funcionamiento (el tiempo entre fallos).
Baseline: Referencia del rendimiento del sistema utilizada para comparar el rendimiento contra otras / pruebas de carga.
Capacity Planning: La medición, la previsión y la planificación para el crecimiento del sistema en el tiempo.
Latency: El tiempo de retraso entre el momento en que se inicia una transacción y el momento en que se completa. A veces se denomina tiempo de respuesta en forma incorrecta, ya que forma parte del tiempo de respuesta latency + Processing Time= Response time pero no es igual al tiempo de respuesta.
Load: La cantidad de demanda o de trabajo en un sistema. Para una aplicación web, esto significa transacciones de usuarios concurrentes o conexiones.
Reliability: La capacidad de un sistema para ser funcional, estable y eficiente, tanto en circunstancias de rutina como en condiciones adversas.
Scalability: La capacidad de un sistema para crecer a la par de la carga sobre este o  de incrementar su capacidad. Esta se mide por los cambios de uso de recursos como unidades de trabajo al crecer en número o tamaño. El último objetivo es que el rendimiento tenga una escalabilidad lineal, lo que significa que el rendimiento disminuye a un ritmo constante en relación con la carga.
Test Harness: Un programa informático utilizado para realizar pruebas y recoger los resultados.
Throughput: La tasa de operaciones por unidad de tiempo.
Virtual User: Un usuario creado para aplicar la carga a un sistema. Cada usuario virtual simula las acciones reales de los usuarios mediante el envío de peticiones HTTP a un servidor de la misma manera que un cliente.

Bottleneck: Punto donde la congestión y los retrasos se producen en una aplicación, ralentizando la tramitación de las solicitudes y causando que los usuarios experimenten retrasos inaceptables en el servicio.

Profiling: Recolección de datos sobre el funcionamiento de la aplicación. Ejemplos Jprofiler, JProbe, JXInsight y dynaTrace.


http://josepablosarco.wordpress.com/performance-testing/

No hay comentarios.:

Publicar un comentario