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 ). Alternativamente, puede denominarse 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 continúa ganando reconocimiento, particularmente en el espacio móvil, la ingeniería de rendimiento de las aplicaciones ha asumido un papel preventivo y perfectivo [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 eficazmente 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 visión macro. El cumplimiento de los requisitos no funcionales también se valida después de la implementación mediante el seguimiento de los sistemas de producción. Esto es parte de la gestión de servicios de TI (ver también ITIL ).
La ingeniería de rendimiento se ha convertido en una disciplina separada en varias grandes corporaciones, con tareas separadas pero paralelas a la ingeniería de sistemas. Es generalizado e involucra a personas de múltiples unidades organizativas; pero predominantemente dentro de la organización de tecnología de la información .
Debido a que esta disciplina se aplica dentro de múltiples metodologías, las siguientes actividades ocurrirán dentro de fases especificadas de manera diferente. Sin embargo, si se utilizan como marco las fases del proceso unificado racional (RUP), entonces las actividades ocurrirán de la siguiente manera:
Durante la primera fase, la conceptual, de un programa o proyecto, se identifican los procesos comerciales críticos. Por lo general, se clasifican como críticos según el valor de los ingresos, el ahorro de costos u otro valor comercial 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 el rendimiento del sistema. Un ejemplo podrían ser los riesgos de rendimiento conocidos para un sistema de proveedor en particular. Finalmente, se identifican las actividades de desempeño, roles y entregables 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.
Durante esta fase de definición, los procesos comerciales 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 estarán sujetos a pruebas de rendimiento basadas en scripts .
El tipo de requisitos que se relacionan con la ingeniería del desempeño son los requisitos no funcionales o NFR. Mientras que un requisito funcional se relaciona con qué operaciones comerciales se deben realizar, un requisito no funcional relacionado con el desempeño se relacionará con la rapidez con la que se realiza esa operación comercial en circunstancias definidas.
Al principio de esta fase se requieren una serie de actividades relacionadas con las herramientas de desempeño. Estos incluyen:
El equipo de pruebas de rendimiento normalmente no ejecuta pruebas de rendimiento en el entorno de desarrollo, sino en un entorno especializado previo a la implementación que está configurado para ser lo más cercano posible al entorno de producción planificado. Este equipo ejecutará pruebas de rendimiento contra casos de prueba , validando que los casos de uso críticos cumplan con los requisitos no funcionales especificados. El equipo ejecutará pruebas de carga con una carga normalmente esperada (mediana), así como con una carga máxima. A menudo realizará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, el sistema se ajustará para que las pruebas no conformes cumplan con los requisitos no funcionales.
Si la ingeniería de rendimiento se ha aplicado 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 prácticas de trabajo de ingeniería de rendimiento adecuadas) hay pruebas que no se pueden ajustar para que cumplan, entonces 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.
Durante esta fase final, el sistema se implementa en el entorno de producción. Se requieren una serie de pasos preparatorios. Estos incluyen:
Una vez que se implementa el nuevo sistema, las operaciones en curso aumentan las actividades de rendimiento, que incluyen:
En el dominio operativo (implementación de posproducció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 .
En el área de gestión del nivel de servicio, la ingeniería de desempeño se ocupa de los acuerdos de nivel de servicio y el monitoreo de sistemas asociados que sirve para validar el cumplimiento del nivel de servicio, detectar problemas e identificar tendencias. Por ejemplo, cuando se implementa el monitoreo de usuarios reales, es posible garantizar que las transacciones de los usuarios se ejecuten de conformidad con requisitos no funcionales específicos. El tiempo de respuesta de la transacción se registra en una base de datos de modo que se puedan ejecutar consultas e informes con los datos. Esto permite un análisis de tendencias que puede ser útil para la gestión de la capacidad. Cuando las transacciones de los usuarios se salen de banda, los eventos deben generar alertas para que se pueda prestar atención a la situación.
Para la gestión de la capacidad, la ingeniería del rendimiento se centra en garantizar que los sistemas se mantengan dentro del cumplimiento del rendimiento. Esto significa ejecutar un análisis de tendencias sobre los datos generados por el monitoreo histórico, de modo que el tiempo futuro de incumplimiento sea predecible. Por ejemplo, si un sistema muestra una tendencia a ralentizar el procesamiento de transacciones (lo que podría deberse a tamaños cada vez mayores de conjuntos de datos, o a un número cada vez mayor de usuarios simultáneos, u otros factores), entonces en algún momento el sistema ya no cumplirá los criterios especificados en los acuerdos de nivel de servicio. La administración de capacidad se encarga de garantizar que se agregue capacidad adicional antes de ese punto (CPU adicionales, más memoria, nueva indexación de bases de datos, etc.) para que las líneas de tendencia se restablezcan y el sistema permanezca dentro del rango de rendimiento especificado.
Dentro del dominio de la gestión de problemas, las prácticas de ingeniería del desempeño se centran en resolver la causa raíz de los problemas relacionados con el desempeño. Por lo general, estos implican 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.
Para garantizar que exista una retroalimentación adecuada que valide que el sistema cumple con las métricas de desempeño especificadas por NFR, cualquier sistema importante necesita un subsistema de monitoreo. La planificación, diseño, instalación, configuración y control del subsistema de seguimiento se especifican mediante un proceso de seguimiento adecuadamente definido. Los beneficios son los siguientes:
No se puede subestimar el componente de análisis de tendencias. Esta funcionalidad, implementada correctamente, permitirá predecir cuándo una aplicación determinada sometida a cargas de usuarios que aumentan gradualmente y conjuntos de datos en crecimiento excederá los requisitos de rendimiento no funcionales especificados para un caso de uso determinado. Esto permite una gestión adecuada del presupuesto, la adquisición y el despliegue de los recursos necesarios para mantener el sistema funcionando dentro de los parámetros de los requisitos de rendimiento no funcionales.