La ingeniería de rendimiento abarca las técnicas aplicadas durante el ciclo de vida del desarrollo de sistemas para garantizar que se cumplan los requisitos no funcionales de rendimiento (como el rendimiento , la latencia o el uso de memoria ). También se la conoce como ingeniería de rendimiento de sistemas dentro de la ingeniería de sistemas , y como ingeniería de rendimiento de software o ingeniería de rendimiento de aplicaciones dentro de la ingeniería de software .
A medida que la relación entre el éxito de las aplicaciones y el éxito empresarial sigue ganando reconocimiento, especialmente en el ámbito móvil, la ingeniería del rendimiento de las aplicaciones ha asumido un papel preventivo y perfectivo [ 1 ] dentro del ciclo de vida del desarrollo de software. Por ello, el término se utiliza habitualmente para describir los procesos, las personas y las tecnologías necesarias para probar eficazmente los requisitos no funcionales, garantizar el cumplimiento de los niveles de servicio y optimizar el rendimiento de la aplicación antes de su implementación.
El término ingeniería de rendimiento abarca más que el software y la infraestructura de soporte, por lo que resulta preferible desde una perspectiva macro. El cumplimiento de los requisitos no funcionales también se valida después del despliegue mediante la monitorización de los sistemas de producción. Esto forma parte de la gestión de servicios de TI (véase también ITIL ).
La ingeniería de rendimiento se ha convertido en una disciplina independiente en varias grandes corporaciones, con tareas distintas pero paralelas a la ingeniería de sistemas. Es una disciplina generalizada que involucra a personas de diversas unidades organizativas, aunque principalmente dentro del departamento de tecnología de la información .
Objetivos de ingeniería de rendimiento
- Incremente los ingresos de su negocio asegurándose de que el sistema pueda procesar las transacciones dentro del plazo requerido.
- Eliminar las fallas del sistema que requieren desechar y dar por perdido el esfuerzo de desarrollo del sistema debido a fallas en los objetivos de rendimiento.
- Eliminar el retraso en la implementación del sistema debido a problemas de rendimiento.
- Eliminar el retrabajo evitable del sistema debido a problemas de rendimiento.
- Eliminar los esfuerzos de ajuste del sistema que se pueden evitar
- Evite costos adicionales e innecesarios de adquisición de hardware.
- Reduzca el aumento de los costos de mantenimiento del software debido a problemas de rendimiento en producción.
- Reduzca el aumento de los costos de mantenimiento del software debido al impacto del software en correcciones de rendimiento puntuales.
- Reduzca los gastos operativos adicionales derivados del manejo de problemas del sistema debido a problemas de rendimiento.
- Identificar futuros cuellos de botella mediante simulación sobre prototipos
- Aumentar la capacidad del servidor
Enfoque de ingeniería de rendimiento
Debido a que esta disciplina se aplica dentro de múltiples metodologías, las siguientes actividades se desarrollarán en fases especificadas de manera diferente. Sin embargo, si se utilizan las fases del proceso racional unificado (RUP) como marco de referencia, las actividades se desarrollarán de la siguiente manera:
Durante la primera fase conceptual de un programa o proyecto, se identifican los procesos de negocio críticos . Generalmente, se clasifican como críticos según su valor en términos de ingresos, ahorro de costes u otro valor empresarial asignado. Esta clasificación la realiza la unidad de negocio, no el departamento de TI. En esta fase, se identifican y describen los riesgos de alto nivel que pueden afectar al rendimiento del sistema. Un ejemplo podrían ser los riesgos de rendimiento conocidos para un sistema de un proveedor específico. Finalmente, se definen las actividades, los roles y los entregables para la fase de elaboración. Las actividades y la asignación de recursos se incorporan a los planes de proyecto de esta fase.
Elaboración
Durante esta fase de definición, los procesos de negocio críticos se descomponen en casos de uso críticos . Los casos de prueba se descompondrán aún más, según sea necesario, en transiciones de una sola página (pantalla). Estos son los casos de uso que se someterán a pruebas de rendimiento basadas en scripts .
Los requisitos relacionados con la ingeniería de rendimiento son los requisitos no funcionales (RNF). Mientras que un requisito funcional se refiere a las operaciones comerciales que deben realizarse, un requisito no funcional relacionado con el rendimiento se refiere a la rapidez con la que se ejecuta dicha operación comercial en circunstancias definidas.
Construcción
Al comienzo de esta fase se requieren varias actividades relacionadas con las herramientas de rendimiento. Estas incluyen:
- Identificar a los miembros clave del equipo de desarrollo como expertos en la materia para las herramientas seleccionadas.
- Especifique una herramienta de análisis de rendimiento para el entorno de pruebas unitarias de desarrollo/componentes.
- Especifique una herramienta automatizada de prueba de rendimiento de unidades (componentes) para el entorno de prueba de unidades de desarrollo/componentes; esto se utiliza cuando aún no existe una interfaz gráfica de usuario para controlar los componentes en desarrollo.
- Especifique una herramienta automatizada para controlar las unidades (componentes) del servidor para el entorno de pruebas unitarias de desarrollo/componentes.
- Especifique una herramienta automatizada, multiusuario y basada en scripts, de extremo a extremo, para el entorno de pruebas unitarias de desarrollo/componentes; esta se utiliza para ejecutar casos de uso controlados por pantalla.
- Identifique una herramienta de carga de datos de prueba de base de datos para el entorno de pruebas unitarias de desarrollo/componentes; esto es necesario para garantizar que el optimizador de la base de datos elija las rutas de ejecución correctas y para permitir la reinicialización y recarga de la base de datos según sea necesario.
- Implementar las herramientas de rendimiento para el equipo de desarrollo.
- Se deberán impartir presentaciones y capacitaciones a los miembros del equipo de desarrollo sobre las herramientas seleccionadas.
El equipo de pruebas de rendimiento normalmente no realiza pruebas de rendimiento en el entorno de desarrollo, sino en un entorno de preimplementación especializado, configurado para ser lo más similar posible al entorno de producción previsto. Este equipo realizará pruebas de rendimiento con casos de prueba , validando que los casos de uso críticos cumplan con los requisitos no funcionales especificados. El equipo realizará pruebas de carga con una carga normal (media) y una carga máxima. Con frecuencia, realizarán pruebas de estrés para identificar los cuellos de botella del sistema. Los datos recopilados y su análisis se compartirán con el grupo encargado de la optimización del rendimiento . Cuando sea necesario, el sistema se optimizará para que las pruebas que no cumplan con los requisitos no funcionales se ajusten a ellos.
Si la ingeniería de rendimiento se ha aplicado correctamente en cada iteración y fase del proyecto hasta el momento, es de esperar que esto sea suficiente para que el sistema obtenga la certificación de rendimiento. Sin embargo, si por alguna razón (quizás no se aplicaron las prácticas adecuadas de ingeniería de rendimiento) existen pruebas que no se pueden ajustar para cumplir con los requisitos, será necesario devolver partes del sistema al equipo de desarrollo para su refactorización. En algunos casos, el problema se puede resolver con hardware adicional, pero añadir más hardware conlleva rápidamente una disminución de los beneficios.
Transición
Durante esta fase final, el sistema se implementa en el entorno de producción. Se requieren varios pasos preparatorios, entre los que se incluyen:
- Configurar los sistemas operativos, la red, los servidores (aplicación, web, base de datos, balanceador de carga, etc.) y cualquier software de cola de mensajes de acuerdo con las listas de verificación básicas y las optimizaciones identificadas en el entorno de prueba de rendimiento.
- Asegurar que todo el software de monitoreo del rendimiento esté implementado y configurado.
- Ejecutar estadísticas en la base de datos una vez completada la carga de datos de producción.
Una vez implementado el nuevo sistema, las operaciones en curso retoman las actividades de rendimiento, que incluyen:
- Validar que los informes de rendimiento semanales y mensuales indiquen que los casos de uso críticos funcionan dentro de los criterios de requisitos no funcionales especificados.
- Cuando los casos de uso queden fuera de los criterios NFR, envíe los defectos.
- Identificar las tendencias proyectadas a partir de los informes mensuales y trimestrales y, trimestralmente, ejecutar las actividades de gestión de la planificación de la capacidad.
Gestión de servicios
En el ámbito operativo (despliegue posterior a la producción), la ingeniería de rendimiento se centra principalmente en tres áreas: gestión del nivel de servicio , gestión de la capacidad y gestión de problemas .
Gestión del nivel de servicio
En el ámbito de la gestión del nivel de servicio, la ingeniería de rendimiento se centra en los acuerdos de nivel de servicio y la monitorización de sistemas asociada, que permite validar el cumplimiento de dichos acuerdos, detectar problemas e identificar tendencias. Por ejemplo, al implementar la monitorización de usuarios reales, es posible garantizar que las transacciones de los usuarios se ejecuten de acuerdo con los requisitos no funcionales especificados. El tiempo de respuesta de las transacciones se registra en una base de datos, lo que permite realizar consultas e informes sobre los datos. Esto posibilita el análisis de tendencias, útil para la gestión de la capacidad. Cuando las transacciones de los usuarios se desvían del rango establecido, se generan alertas para que se pueda abordar la situación.
Gestión de la capacidad
En la gestión de capacidad, la ingeniería de rendimiento se centra en garantizar que los sistemas cumplan con los requisitos de rendimiento. Esto implica realizar análisis de tendencias sobre los datos históricos generados por el monitoreo, de manera que se pueda predecir el momento futuro en que se produzca un incumplimiento. Por ejemplo, si un sistema muestra una tendencia a la ralentización en el procesamiento de transacciones (que podría deberse al aumento del tamaño de los conjuntos de datos, al incremento del número de usuarios concurrentes u otros factores), llegará un punto en que el sistema dejará de cumplir con los criterios especificados en los acuerdos de nivel de servicio. La gestión de capacidad se encarga de garantizar que se agregue capacidad adicional antes de que se produzca ese punto (CPU adicionales, más memoria, nueva indexación de bases de datos, etc.) para que las tendencias se restablezcan y el sistema se mantenga dentro del rango de rendimiento especificado.
Gestión de problemas
Dentro del ámbito de la gestión de problemas, las prácticas de ingeniería de rendimiento se centran en resolver la causa raíz de los problemas relacionados con el rendimiento. Estas prácticas suelen implicar la optimización del sistema, el cambio de parámetros del sistema operativo o del dispositivo, o incluso la refactorización del software de la aplicación para solucionar un rendimiento deficiente debido a un diseño inadecuado o a malas prácticas de codificación.
Escucha
Para garantizar una retroalimentación adecuada que valide que el sistema cumple con las métricas de rendimiento especificadas por la NFR, todo sistema importante necesita un subsistema de monitoreo. La planificación, el diseño, la instalación, la configuración y el control del subsistema de monitoreo se especifican mediante un proceso de monitoreo definido adecuadamente. Los beneficios son los siguientes:
- Es posible establecer acuerdos de nivel de servicio a nivel de caso de uso.
- Es posible activar y desactivar la monitorización periódicamente o para facilitar la resolución de problemas.
- Permite la generación de informes periódicos.
- Permite realizar un seguimiento de las tendencias a lo largo del tiempo, como el impacto del aumento de la carga de usuarios y del crecimiento de los conjuntos de datos en el rendimiento a nivel de caso de uso.
El componente de análisis de tendencias es fundamental. Esta funcionalidad, implementada correctamente, permitirá predecir cuándo una aplicación con cargas de usuarios y conjuntos de datos en constante crecimiento superará los requisitos de rendimiento no funcionales especificados para un caso de uso determinado. Esto facilita la correcta presupuestación, adquisición y despliegue de los recursos necesarios para que el sistema funcione dentro de los parámetros de dichos requisitos.
Véase también
Referencias
- ↑ "Lecciones aprendidas por la industria bancaria en la subcontratación de servicios de pruebas", Gartner. 2 de agosto de 2012.
Lecturas adicionales
- Guía de optimización del rendimiento de la base de datos
- Analista práctico de rendimiento - Comunidad y conjunto de conocimientos de ingeniería de rendimiento
- Metodología de ingeniería de rendimiento
- Una estrategia de ingeniería de rendimiento
- Un modelo de madurez del proceso de desempeño
- El libro sobre el rendimiento de cualquier ordenador
- Explorando UML para la ingeniería de rendimiento
- Introducción a la ingeniería de rendimiento basada en modelos
- Aprovechamiento de ITIL para mejorar el rendimiento de las aplicaciones. Archivado el 27/02/2009 en Wayback Machine.
- Patrones y prácticas de ingeniería de rendimiento
- Rendimiento y escalabilidad de las arquitecturas de software distribuidas
- Mejores prácticas de ingeniería de rendimiento (nivel general)
- Ingeniería de software y rendimiento: una hoja de ruta
- El círculo vicioso del rendimiento de los sistemas informáticos y los costes operativos de TI
- Equipo de rendimiento de Microsoft Windows Server. Archivado el 4 de mayo de 2010 en Wayback Machine.
- Recopilación de requisitos de rendimiento
- Pruebas de rendimiento de servicios web: estrategias y mejores prácticas
- Evaluación del rendimiento de un sistema de control de tráfico aéreo mediante el estándar de medición de respuesta de la aplicación (ARM).
- Integración de la gestión del rendimiento en ITIL
- Gestión del rendimiento del software
- Optimización de software