martes, 18 de diciembre de 2012

Ingeniería de rendimiento del software

Autor:
PhD. Guillermo Choque Aspiazu
http://www.eldiario.net/
Publicado en:
Junio 7 de 2010

La ingeniería del software se podría definir como el establecimiento y aplicación de principios de la ingeniería para obtener un producto denominado software. Teniendo en cuenta factores tan importantes como el costo económico, la fiabilidad del sistema y un funcionamiento eficiente que satisfaga las necesidades del usuario. Como concepto de software se entienden las aplicaciones, toda aquella parte de la informática que se desarrolla, y que posee un difícil mantenimiento debido al corto período de tiempo en el que queda obsoleto. La ingeniería del software se preocupa de la fiabilidad y el rendimiento, tratando de reducir costos y complejidad. Los modelos que utiliza están basados en teorías matemáticas bastante sólidas.


La ingeniería del rendimiento al interior de la ingeniería del software, abarca el conjunto de roles, habilidades, actividades, prácticas, herramientas y resultados aplicados a cada fase del ciclo de vida del desarrollo de sistemas, hecho que asegura que una solución sea diseñada, implementada y que cuente con el apoyo operativo para cumplir con los requerimientos de desempeño de funciones definidas para la solución. Desde la tradicional ingeniería del software, el rendimiento es mucho más que sólo el desarrollo del producto software, la ingeniería de rendimiento, a diferencia de la ingeniería del software es preferible a largo plazo. El cumplimiento de los requisitos no funcionales se valida mediante la supervisión de los sistemas de producción. La ingeniería de rendimiento se ha convertido en una disciplina independiente en una serie de grandes corporaciones, y puede ser afiliada con el grupo de arquitectura empresarial. Es bastante persuasivo, lo invade todo, recabando la colaboración de múltiples unidades de la organización, pero sobre todo dentro de la tecnología de la información propia de la organización.

Típicamente las aplicaciones del software de múltiples capas son bastante complejas y están basadas en muchos componentes y varias tecnologías que abarcan desde la interfaz del usuario hasta la base de datos y varias capas intermedias. Estas capas pueden estar basadas en marcos de trabajo, hechos internos o sistemas de terceros, bien sea comerciales o de dominio público. Respecto a las aplicaciones basadas en la “arquitectura orientada a servicios” crean complejidades adicionales. Encontrar el balance perfecto entre alto rendimiento y elevado consumo de recursos tiende a ser un gran reto tecnológico.

La ingeniería de rendimiento es parte integral del proceso creativo del diseño y arquitectura de aplicaciones del software. Como tal, puede ser descrita como la verificación y validación de varias opciones que emergen durante el diseño de la aplicación, donde se hacen y prueban prototipos para tomar la decisión más apropiada basada en las prioridades y restricciones definidas para la aplicación. De esta manera se puede encontrar el balance ideal y el más alto rendimiento posible. El análisis riguroso del rendimiento, al principio del proceso de diseño de la aplicación, es un paso crítico en la arquitectura del software para garantizar que los componentes que se van a crear satisfagan los requerimientos operacionales.

Generalmente la ingeniería de rendimiento es un proceso interactivo, donde el arquitecto trabaja de manera cercana con los desarrolladores y el ingeniero de rendimiento para obtener un conocimiento detallado de las opciones que incrementen el rendimiento y la seguridad de la aplicación. Este proceso de investigación, por el cual el equipo de profesionales va analizando y diseñando la aplicación permite desarrollar un nivel de entendimiento tan detallado, que trae como resultado la configuración ideal de todos los componentes que forman parte de la solución total para lograr el más alto rendimiento en el ambiente de producción con la carga de trabajo esperada y con capacidad de crecimiento.

Se está en presencia del cambio que se experimenta en el paradigma de gestión del rendimiento del software, con la solución de problemas a las mejores prácticas que tienden a la excelencia en el rendimiento. Con el enfoque de la ingeniería del rendimiento se producen las siguientes prácticas: (1) Los arquitectos conocen que su arquitectura soportará requerimientos de rendimiento antes de solamente comprometerse con el desarrollo del código. (2) Los gerentes de proyecto pueden continuar con el estado de resultados, de manera paralela al desarrollo del software. (3) Los especialistas de rendimiento tienen el tiempo suficiente para ejecutar las pruebas de carga y de estrés sin encontrarse con algunas "sorpresas". (4) Los riesgos para el logro de los requisitos de desempeño son identificados y direccionados al principio del proceso, ahorrando tiempo y dinero. (5) El software que cumple con los requisitos de rendimiento se entrega a tiempo y dentro de lo presupuestado.

La ingeniería de rendimiento del software es un enfoque cuantitativo, y sistemático de la evolución del costo-eficacia de los sistemas de software, útil para satisfacer los requisitos de desempeño. Este tipo de ingeniería es una tendencia orientada al software, se enfoca en las opciones de arquitectura, diseño e implementación del software. La ingeniería del rendimiento proporciona la información necesaria para construir software que satisface los requisitos de desempeño de manera adecuada y, como se dijo anteriormente, se encuentra dentro de lo presupuestado.

El concepto básico de la ingeniería de rendimiento del software es la separación del modelo de software de su entorno o modelo de hardware. El modelo de software captura los aspectos esenciales del comportamiento del software; sino que puede ser representado por medio de “grafos de ejecución”. Un grafo de ejecución es un grafo cuyos nodos representan los componentes del software de carga de trabajo y cuyas aristas representan las transferencias de control. Cada nodo se pondera mediante el uso de un vector de demanda que representa el uso de los recursos del nodo, es decir, la demanda de cada recurso.

Los modelos de hardware representan la plataforma de maquinaria y se basan en modelos de red de colas. Para especificar una red de colas, se tiene que definir: los componentes, es decir los centros de servicios; la topología, referida a las conexiones entre los centros y algunos parámetros relevantes, tales como las clases de trabajo, las tareas de enrutamiento entre los centros, la planificación de la disciplina en el servicio y la demanda en los centros de servicio). Los componentes y la especificación de la topología se realizan según la descripción del sistema, mientras que la especificación de los parámetros se obtiene de la información generada por los grafos de ejecución y del conocimiento de los recursos y capacidades. Esta distinción, por un lado, permite definir modelos de software y modelos de hardware por separado además de la solución de su combinación, por otra parte mejora la portabilidad de los modelos, por ejemplo, el rendimiento de un sistema de software específico puede ser evaluado en diferentes plataformas, y el rendimiento de una plataforma específica puede ser validado en diferentes sistemas de software. Después de haber establecido los objetivos de rendimiento, los modelos de software y hardware son construidos y por lo tanto, evaluados por un método de análisis adecuado para calcular la predicción del rendimiento.

Los objetivos de la ingeniería del rendimiento son: (1) Aumentar los ingresos comerciales al garantizar que el sistema puede procesar las transacciones dentro de los plazos necesarios. (2) Eliminar la falla del sistema que requiere de la cancelación de las actividades de desarrollo del sistema debido a falta objetiva de rendimiento. (3) Eliminar la implementación del sistema con retraso debido a problemas de rendimiento. (4) Eliminar el reproceso del sistema disponible debido a problemas de rendimiento. (5) Eliminar esfuerzos evitables del sistema de afinación. (6) Evitar costos adicionales e innecesarios en adquisición de hardware. (6) Reducir el aumento de los costos de mantenimiento del software, debido a los problemas de rendimiento en la producción. (7) Reducir los altos costos de mantenimiento del software debido al software afectado por costos fijos para un desempeño ad hoc. (8) Reducir gastos generales operativos adicionales para el manejo de problemas en el sistema debido a los problemas de rendimiento

Para obtener un buen rendimiento de las aplicaciones de software, es necesario seguir algunas reglas que garantizan la buena ejecución del software: (1) La primera medida consiste en encontrar los cuellos de botella del software y enfocar los esfuerzos en esos lugares. (2) Los patrones de uso eficiente de acceso a los datos, también conocido como entrada-salida, su uso eficiente, la reducción de la lentitud y otros accesos. (3) Diseñar los argumentos para reducir la baja concurrencia de los recursos compartidos. (4) Aprender cómo se supone que deben utilizarse la interfaz de programación de aplicaciones y los componentes de terceros. (5) Utilizar una cantidad realista de datos y usuarios para las pruebas de rendimiento, también conocido como “no prueba” con una base de datos vacía. (6) Hacer el trabajo de ingeniería de rendimiento de todo el proyecto, empezando por la capacidad de planificación de base. (7) No dedicarse solamente a “optimizar el código programado", debido a que casi nunca es útil para el rendimiento, si no tiene un proceso de ingeniería asociado.

Para conocer más acerca del Doctor Choque y sus publicaciones, haz clic en el siguiente vínculo: