La ingeniería de rendimiento abarca las técnicas que se aplican durante el ciclo de vida del desarrollo de un sistema para garantizar que se cumplan los requisitos no funcionales de rendimiento (como el rendimiento , la latencia o el uso de la memoria ). También se la puede denominar ingeniería de rendimiento de sistemas dentro de la ingeniería de sistemas e ingeniería de rendimiento de software o ingeniería de rendimiento de aplicaciones dentro de la ingeniería de software .
A medida que la conexión entre el éxito de las aplicaciones y el éxito empresarial sigue ganando reconocimiento, en particular en el ámbito móvil, la ingeniería del rendimiento de las aplicaciones ha asumido un papel preventivo y perfeccionador [1] dentro del ciclo de vida del desarrollo de software. Como tal, el término se utiliza normalmente para describir los procesos, las personas y las tecnologías necesarias para probar de forma eficaz los requisitos no funcionales, garantizar el cumplimiento de los niveles de servicio y optimizar el rendimiento de las aplicaciones antes de su implementación.
El término ingeniería de rendimiento abarca más que solo el software y la infraestructura de soporte, y como tal, el término ingeniería de rendimiento es preferible desde una perspectiva general. El cumplimiento de los requisitos no funcionales también se valida después de la implementación mediante el monitoreo de los sistemas de producción. Esto es parte de la gestión de servicios de TI (consulte también ITIL ).
La ingeniería de rendimiento se ha convertido en una disciplina independiente en varias grandes corporaciones, con tareas independientes pero paralelas a la ingeniería de sistemas. Es omnipresente e involucra a personas de múltiples unidades organizacionales, pero predominantemente dentro de la organización de tecnología de la información .
Objetivos de la ingeniería de rendimiento
- Aumente los ingresos comerciales al garantizar que el sistema pueda procesar transacciones dentro del plazo requerido
- Eliminar fallas del sistema que requieran descartar y cancelar el esfuerzo de desarrollo del sistema debido a fallas en los objetivos de rendimiento.
- Eliminar la implementación tardía del sistema debido a problemas de rendimiento
- Eliminar la repetición de trabajos evitables del sistema debido a problemas de rendimiento
- Eliminar esfuerzos evitables de ajuste del sistema
- Evite costes de adquisición de hardware adicionales e innecesarios
- Reducir los costos incrementados de mantenimiento de software debido a problemas de rendimiento en producción
- Reducir los costos de mantenimiento de software incrementados debido al software afectado por correcciones de rendimiento ad hoc
- Reducir la sobrecarga operativa adicional para gestionar 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 llevarán a cabo dentro de fases específicas diferentes. Sin embargo, si se utilizan las fases del proceso unificado racional (RUP) como marco, las actividades se llevarán a cabo de la siguiente manera:
Durante la primera fase conceptual de un programa o proyecto, se identifican los procesos empresariales críticos . Normalmente, se clasifican como críticos en función del valor de los ingresos, los ahorros de costes u otro valor empresarial asignado. Esta clasificación la realiza la unidad de negocio, no la organización de TI. En este momento, 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 en particular. Por último, se identifican las actividades de rendimiento, los roles y los resultados para la fase de elaboración. Las actividades y la carga de recursos se incorporan a los planes del proyecto de la fase de elaboración.
Elaboración
Durante esta fase de definición, los procesos empresariales 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 tipos de requisitos relacionados con la ingeniería de rendimiento son los requisitos no funcionales o NFR. Mientras que un requisito funcional se relaciona con las operaciones comerciales que se deben realizar, un requisito no funcional relacionado con el rendimiento se relacionará con la velocidad con la que se realiza esa operación comercial en circunstancias definidas.
Construcción
Al comienzo de esta fase se requieren una serie de actividades relacionadas con las herramientas de rendimiento, entre ellas:
- Identificar a los miembros clave del equipo de desarrollo como expertos en la materia para las herramientas seleccionadas.
- Especifique una herramienta de creación de perfiles para el entorno de prueba unitaria de componentes/desarrollo.
- Especifique una herramienta de prueba de rendimiento de unidad (componente) automatizada para el entorno de prueba de unidad de componente/desarrollo; esto se utiliza cuando aún no existe una GUI para controlar los componentes en desarrollo.
- Especifique una herramienta automatizada para controlar la unidad del lado del servidor (componentes) para el entorno de prueba de unidad de componentes/desarrollo.
- Especifique una herramienta automatizada de extremo a extremo basada en scripts y con capacidad para múltiples usuarios para el entorno de pruebas unitarias de componentes/desarrollo; esto se utiliza para ejecutar casos de uso controlados por pantalla.
- Identificar una herramienta de carga de datos de prueba de base de datos para el entorno de prueba unitaria de componentes/desarrollo; esto es necesario para garantizar que el optimizador de base de datos elija 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 deben realizar presentaciones y capacitación a los miembros del equipo de desarrollo sobre las herramientas seleccionadas.
El equipo de pruebas de rendimiento normalmente no ejecuta pruebas de rendimiento en el entorno de desarrollo, sino en un entorno de preimplementación especializado que está configurado para ser lo más parecido posible al entorno de producción planificado. Este equipo ejecutará pruebas de rendimiento en relación con los casos de prueba , validando que los casos de uso críticos se ajusten a los requisitos no funcionales especificados. El equipo ejecutará pruebas de carga en relación con una carga esperada normalmente (mediana), así como una carga máxima. A menudo, ejecutarán pruebas de estrés que identificarán los cuellos de botella del sistema. Los datos recopilados y el análisis se enviarán al grupo que realiza el ajuste del rendimiento . Cuando sea necesario, se ajustará el sistema para que las pruebas no conformes se ajusten a los requisitos no funcionales.
Si se ha aplicado la ingeniería de rendimiento correctamente en cada iteración y fase del proyecto hasta este punto, es de esperar que esto sea suficiente para permitir que el sistema reciba la certificación de rendimiento. Sin embargo, si por alguna razón (tal vez no se aplicaron las prácticas de trabajo adecuadas de ingeniería de rendimiento) hay pruebas que no se pueden ajustar para cumplir con los requisitos, será necesario devolver partes del sistema al desarrollo para su refactorización. En algunos casos, el problema se puede resolver con hardware adicional, pero agregar más hardware conduce rápidamente a rendimientos decrecientes.
Transición
Durante esta fase final, el sistema se implementa en el entorno de producción. Se requieren una serie de pasos preparatorios, entre ellos:
- Configurar los sistemas operativos, la red, los servidores (de aplicaciones, web, de bases de datos, balanceadores de carga, etc.) y cualquier software de cola de mensajes de acuerdo con las listas de verificación base y las optimizaciones identificadas en el entorno de prueba de rendimiento.
- Garantizar que todo el software de monitoreo de rendimiento esté implementado y configurado
- Ejecutar estadísticas en la base de datos después de que se complete la carga de datos de producción
Una vez implementado el nuevo sistema, las operaciones en curso retoman actividades de rendimiento, incluyendo:
- 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 no cumplan con los criterios NFR, envíe los defectos
- Identificar tendencias proyectadas a partir de informes mensuales y trimestrales y, trimestralmente, ejecutar actividades de gestión de planificación de capacidad.
Gestión de servicios
En el dominio operativo (implementación 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 área de gestión de niveles de servicio, la ingeniería de rendimiento se ocupa de los acuerdos de niveles de servicio y de la supervisión de sistemas asociados que sirve para validar el cumplimiento de los niveles de servicio, detectar problemas e identificar tendencias. Por ejemplo, cuando se implementa la supervisión de usuarios reales, es posible garantizar que las transacciones de los usuarios se ejecuten de conformidad con los requisitos no funcionales especificados. El tiempo de respuesta de las transacciones se registra en una base de datos de modo que se puedan ejecutar consultas e informes en relación con los datos. Esto permite realizar análisis de tendencias que pueden resultar útiles para la gestión de la capacidad. Cuando las transacciones de los usuarios se salen de los límites, los eventos deben generar alertas para que se pueda prestar atención a la situación.
Gestión de capacidad
En el caso de la gestión de la capacidad, la ingeniería de rendimiento se centra en garantizar que los sistemas se mantengan dentro del cumplimiento de las normas de rendimiento. Esto significa ejecutar análisis de tendencias sobre los datos generados por el seguimiento histórico, de modo que se pueda predecir el momento en que se produzcan incumplimientos en el futuro. Por ejemplo, si un sistema muestra una tendencia a la ralentización del procesamiento de transacciones (que puede deberse a un aumento del tamaño de los conjuntos de datos, a un aumento de la cantidad de usuarios simultáneos o a otros factores), en algún momento el sistema dejará de cumplir los criterios especificados en los acuerdos de nivel de servicio. La gestión de la capacidad se encarga de garantizar que se añada capacidad adicional antes de ese punto (más CPU, más memoria, nueva indexación de bases de datos, etc.) de modo que las líneas de tendencia se restablezcan y el sistema se mantenga dentro del rango de rendimiento especificado.
Gestión de problemas
En el á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. Por lo general, esto implica ajustar el sistema, cambiar los parámetros del sistema operativo o del dispositivo o incluso refactorizar el software de la aplicación para resolver el bajo rendimiento debido a un diseño deficiente o malas prácticas de codificación.
Escucha
Para garantizar que exista una retroalimentación adecuada que valide que el sistema cumple con las métricas de rendimiento especificadas por el NFR, cualquier 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 el monitoreo en puntos periódicos o para apoyar 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 de este sistema no se puede subestimar. Esta funcionalidad, correctamente implementada, permitirá predecir cuándo una aplicación determinada que soporta cargas de usuarios en aumento gradual y conjuntos de datos cada vez mayores superará los requisitos de rendimiento no funcional especificados para un caso de uso determinado. Esto permite una gestión adecuada del presupuesto, la adquisición y la implementación de los recursos necesarios para mantener el sistema funcionando dentro de los parámetros de los requisitos de rendimiento no funcional.
Véase también
Referencias
- ^ "Lecciones de la industria bancaria aprendidas en la externalización de servicios de pruebas", Gartner, 2 de agosto de 2012.
Lectura adicional
- Guía de ajuste del rendimiento de la base de datos
- Analista de rendimiento práctico - Comunidad y cuerpo de conocimientos sobre ingeniería del rendimiento
- Metodología de ingeniería de desempeño
- Una estrategia de ingeniería de rendimiento
- Un modelo de madurez del proceso de desempeño
- El libro sobre el rendimiento de cada computadora
- Explorando UML para la ingeniería de rendimiento
- Introducción a la ingeniería de rendimiento basada en modelos
- Aprovechar ITIL para mejorar el rendimiento de las aplicaciones
- Patrones y prácticas Ingeniería de rendimiento
- Rendimiento y escalabilidad de arquitecturas de software distribuidas
- Mejores prácticas de ingeniería de rendimiento (nivel alto)
- Ingeniería de software y rendimiento: una hoja de ruta
- El círculo vicioso entre el 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 desempeño de un sistema de control de tráfico aéreo utilizando el estándar de medición de respuesta de aplicación (ARM)
- Integración de la Gestión del Desempeño en ITIL