Columnista Invitado. Reutilización y automatización al desarrollar software para las nuevas tecnologías

Escrito por  Viernes, 27 Septiembre 2013 11:48

Esta columna plantea el tema de reutilización y automatización en los proyectos de software, como una manera de lograr agilidad y competitividad en el contexto actual del desarrollo de software para nuevas tecnologías.

María Consuelo Franky

 

Numerosos y profundos cambios se están produciendo en estos últimos años en el mundo del software. Las nuevas tecnologías abren enormes posibilidades para diseñar nuevos productos de software y se dispone de nuevos ambientes de desarrollo muy poderosos, pero requieren largas curvas de aprendizaje.

 

 

Grandes consultoras como Gartner, Infoqo Forbes, así como revistas de divulgación internacionales, señalan como fuertes tendencias tecnológicas para el desarrollo del software las aplicaciones web con interfaces flexibles, la computación móvil, la computación en la nube, las redes sociales y los video-juegos, entre otras. Para cada una de estas tendencias hay una manera particular de desarrollar los productos de software y de manejar los procesos de desarrollo. Los ingenieros de sistemas y las empresas deben conocer estas técnicas y metodologías, si quieren participar en los mercados emergentes para estas tendencias tecnológicas.

 

Para lograr agilidad en el mercado las empresas del sector de software deben agilizar sus procesos de desarrollo,  además de aplicar y adaptar prácticas ágiles como XP[1] o metodologías ágiles como Scrum [2]. Estas empresas deben estandarizar la manera como desarrollan sus proyectos de software. De esta estandarización deberían pasar a la reutilización y automatización, de tal manera que cada nuevo proyecto sea generado parcialmente y pueda aprovechar componentes ya utilizados en otros.

 

Con esta reutilización y automatización las empresas del sector de software logran beneficios de disminución de tiempos y costos en el desarrollo de los proyectos, con lo cual aseguran competitividad especialmente en este nuevo mercado de productos de software para las nuevas tecnologías.

 

A continuación presentaré en forma general las estrategias que pueden aplicar las empresas del sector de software para lograr una alta reutilización y automatización en sus proyectos de software.

 

Reutilización y automatización mediante servicios web

Cuando los proyectos trabajan bajo una arquitectura SOA[5], se busca con frecuencia la integración de aplicaciones existentes para implantar procesos de negocio BPM[6].

 

En el caso general hay que enfrentar el problema de heterogeneidad, pues estas aplicaciones están construidas bajo diversas tecnologías. Una solución a este problema es que cada aplicación exponga sus funcionalidades mediante servicios Web[7], los cuales atienden pedidos bajo un protocolo estándar.

 

En esta alternativa los componentes reutilizables están constituidos por servicios web disponibles para aplicaciones que actúan como clientes. Para favorecer la reutilización y facilitar la administración de estos servicios web, se utilizan buses de servicios[8], en donde se inscriben y en los que se pueden aprovechar servicios agregados (por ejemplo, de seguridad o de transformación de datos).

 

Entre los beneficios de los servicios web como componentes reutilizables se puede nombrar su disponibilidad para cualquier tipo de aplicación cliente, sin importar la tecnología en que esté construido el servicio web ni la tecnología en que está construida la aplicación cliente. Otro beneficio es que no hay que acoplar este tipo de componentes a las aplicaciones que los van a utilizar.

 

Sin embargo, el costo de utilizar servicios web como componentes es el overead de invocarlos, especialmente cuando se trabaja dentro de una misma tecnología (i.e. no hay heterogeneidad) y su exposición como servicios web resulta innecesaria y pesada en tiempo de respuesta al usuario. Actualmente,  ha tomado popularidad una alternativa de servicios web basada en el protocolo RESTful[4] y no SOAP[3], los cuales son más simples y representan menor overead en la invocación.

 

Reutilización y automatización mediante generadores de componentes

 

Otra alternativa para aumentar la reutilización de componentes en diversos proyectos de software es construir generadores de estos componentes que produzcan su código fuente y lo acoplen a un proyecto.

 

Hay varias técnicas para construir generadores de código [9]:

 

·                     Técnica de plantillas: para cada componente se tienen uno o varios archivos de plantillas con propiedades que son reemplazadas por los valores que suministra el usuario, con el fin de obtener los archivos fuentes del componente. Los procesadores de lenguajes de plantillas permiten expresar reemplazos condicionales y ciclos; también permiten indicar el subdirectorio específico del proyecto de software en donde debe colocarse el archivo resultante de una plantilla; por medio de macros es posible prever la extensión incremental de un mismo archivo fuente del proyecto de software.

 

·                     Técnica de expresiones regulares: para evitar el costo de tener que mantener un gran conjunto de plantillas que representan múltiples componentes, se pueden programar procesadores que por medio de Expresiones Regulares [10] buscan patrones en un proyecto de software para insertar el código fuente correspondiente a un componente. El código fuente insertado es tomado de otro proyecto considerado modelo y es transformado mediante Expresiones Regulares.

 

Tanto la técnica de Plantillas como la técnica de Expresiones Regulares permiten materializar las buenas prácticas de una empresa que desarrolla proyectos de software, construyendo incrementalmente un "framework de generación" constituido por las plantillas o los procesadores de Expresiones Regulares, que permiten generar componentes y acoplarlos a un nuevo proyecto. Cada framework de generación está destinado para una tecnología específica pues plantillas o Expresiones Regulares se escriben a partir de fuentes de proyectos realizados para una tecnología.

 

Los frameworks de generación favorecen la reutilización de componentes por múltiples proyectos y promueven la mejora continua de estos componentes, a medida que la empresa evoluciona en sus buenas prácticas.

 

Sin embargo, los frameworks de generación tienen el costo de tener que mantener un gran número de plantillas o un número no tan grande de procesadores de Expresiones Regulares. Además, la depuración de plantillas o de Expresiones Regulares resulta compleja.

 

 

Reutilización y automatización mediante el desarrollo dirigido por Modelos (MDA-MDE)

El enfoque metodológico MDA-MDE promueve el desarrollo de proyectos de software basándose en diseños expresados en un lenguaje de modelado [11] [12].

 

Parte de esta metodología es la definición del lenguaje mediante un meta-modelo que puede ser textual y/o gráfico. El lenguaje debe permitir expresar el modelo de un proyecto de forma independiente a la tecnología en que se vaya implementar, por lo cual hay que contar con un transformador por cada tecnología contemplada; ese transformador generará el código fuente a partir del modelo.

 

Los transformadores de MDA-MDE pueden desarrollarse con las técnicas de plantillas o técnicas de Expresiones Regulares descritas en la sección anterior.

 

Un modelo en MDA-MDE puede incluir elementos que se refieran a componentes reutilizables. Al generar código fuente en una tecnología específica, un transformador acoplará a ese código fuente la implementación de los componentes para esa tecnología.

 

El enfoque MDA-MDE trae grandes beneficios como poder expresar una sola vez el diseño de un proyecto a través de un modelo y luego obtener su implementación en múltiples tecnologías. Esto simplifica el desarrollo de los proyectos y los vuelve mucho más mantenibles.

 

En las nuevas tecnologías asociadas a computación móvil se programa en múltiples lenguajes para múltiples plataformas (i.e. sistemas operacionales). Muchas empresas de servicios quieren poner en operación sus aplicaciones sobre dispositivos de computación móvil, lo cual implica un esfuerzo de desarrollo por cada plataforma. MDA-MDE permite reducir este esfuerzo modelando la aplicación una sola vez y usando transformadores (uno por plataforma) para obtener la aplicación ejecutable de cada plataforma.

 

El costo de MDA-MDE es el asociado a la definición de lenguajes de modelado y a la construcción de transformadores. Adicionalmente, si el código fuente obtenido es modificado y extendido, hay que prever mecanismos para asegurar que se preserve la consistencia respecto al modelo [13].

 

 

Reutilización y automatización mediante líneas de productos de software

En el enfoque de Líneas de Productos las similitudes entre múltiples  aplicaciones (desarrolladas por una empresa de software) se convierten en elementos reutilizables que deben ser expuestos como activos con interfaces bien definidas [14] [16]. Adicionalmente, se establecen las relaciones de composición y de dependencias que hay entre esos activos, expresándolas mediante  árboles jerárquicos. Establecer las interfaces y las relaciones entre activos facilita su acople para generar nuevos productos.

 

En este enfoque de Líneas de Productos de software se trabaja en 2 procesos [15]:

·                     La ingeniería de dominio se centra en el análisis y la elaboración de activos.

·                     La ingeniería de la aplicación se centra en la elaboración de productos utilizando los activos.

 

El beneficio de este enfoque de Línea de Productos de software es que es fácil lograr nuevos productos mediante composición de los activos establecidos en el proceso de ingeniería de dominio.

 

El costo es el asociado a la adecuación de los activos previamente existentes para lograr tener las interfaces requeridas por la Línea de Productos. Por otra parte, la reutilización que se logra con una Línea de Productos de software está limitada por el dominio de negocio específico con el que fue construida la línea.

 

Reutilización y automatización mediante Maven

Maven es en primera instancia una herramienta de software que permite realizar las tareas del ciclo de vida de los proyectos Java, como son la compilación, empaque, pruebas, publicación en un servidor, etc. [17]. Permite además, declarar las dependencias de librerías que tiene un proyecto: las librerías para Maven son artefactos identificados por nombre, grupo y versión, y residen en repositorios universales en sitios de Internet o en repositorios propios de la empresa que utiliza tales artefactos.

 

Existe una gran cantidad de plugins para Maven que permite realizar las tareas usuales del ciclo de vida de los proyectos o tareas más sofisticadas como, por ejemplo, generar la página web de un proyecto. También hay plugins para aplicar Maven a proyectos .NET.

 

Además de ser una herramienta de software que ofrece las facilidades ya mencionadas, Maven constituye una estrategia para manejar los proyectos de manera muy flexible, potenciando la reutilización y automatización.

 

Un ejemplo de aplicación de Maven para lograr reutilización y automatización de los proyectos de software lo constituye el proyecto "Lion: Soporte al desarrollo de aplicaciones empresariales mediante frameworks de generación". En este proyecto cofinanciado por Colciencias participaron el grupo de investigación SIDRe de la Pontificia Universidad Javeriana y la empresa Heinsohn Business Technology.

 

En el proyecto Lion se buscó como objetivo global aumentar la automatización y productividad de la empresa en el desarrollo de sus proyectos de software. Como estado inicial se partió de un conjunto de componentes de software que la empresa Heinsohn había desarrollado con funcionalidades comunes (como seguridad y auditoría) para sus proyectos Java EE. Aunque los componentes eran muy útiles, su acople podía tardar 1 a 3 semanas de trabajo, pues era una labor manual.

 

Apoyándose en Maven, en el proyecto Lion se siguieron los siguientes pasos:

·                     Se cambió la estructura de los componentes para volverlos más reutilizables, lo cual implicó convertirlos en proyectos Mavenmulti-módulo registrados como un conjunto de artefactos en un repositorio Maven.

 

·                     A partir de una aplicación modelo de la empresa, se utilizaron facilidades de Maven para construir un generador de una nueva aplicación como proyecto Mavenmulti-módulo (este tipo de generadores se denominan arquetipos Maven).

 

·                     Se construyó una herramienta “LionWizard” que permite construir una nueva aplicación (mediante el generador arquetipo Maven) tomando en cuenta valores de propiedades indicados por el usuario; luego la herramienta permite acoplar a la nueva aplicación los componentes que selecciona el usuario; este acople resulta sencillo de automatizar pues consiste en agregar las referencias de los componentes (i.e. artefactos Maven) como dependencias de la aplicación, y adicionalmente modificar algunos descriptores.

 

El resultado final es que la duración de la labor de acoplar componentes a un nuevo proyecto pasó de varias semanas a máximo algunas horas. Esto representa un aumento muy importante en la productividad de la empresa, un ahorro en costos y tiempos, y una mayor competitividad en el mercado

 

 

Conclusiones

En esta columna se presentaron varias estrategias que se pueden aplicar para lograr alta reutilización y automatización en los proyectos de software. Mediante estas estrategias técnicas, combinadas con procesos ágiles de Ingeniería de Software, las empresas del sector pueden lograr la agilidad y la competitividad tan necesarias para sobrevivir en el actual entorno de nuevas tecnologías y de nuevos mercados de productos de software.

 

Como experiencia concreta se presentó el proyecto universidad-empresa “Lion” dirigido por la autora de esta columna. En este proyecto se obtuvieron muy buenos resultados de reutilización y automatización mediante la estrategia Maven.  En un siguiente proyecto se quiere abordar el enfoque MDA-MDE para lograr trabajar el diseño de los proyectos de software, mediante modelos que incluyen componentes reutilizables. Tales modelos luego se transformarían a código fuente de tecnologías específicas. También como trabajo futuro se quiere establecer la Línea de Productos de la empresa y lograr el desarrollo de proyectos combinando el enfoque MDA-MDE con esta Línea de Productos.

 

Referencias

 

[1] Beck, K. Extreme Programming Explained: Embrace Change. Upper Saddle River, NJ, USA, Addison Wesley, Professional, Second Edition. 2004.

 

[2] Schwaber, K. Agile project management with Scrum. Microsoft Press. 2004.

 

[3] Curbera, F., Leymann,F., Storey,T., Ferguson, D., Weerawarana, S. Web Services Platform Architecture: SOAP, WSDL, WS-Policy, WS-Addressing, WS-BPEL, WS-Reliable Messaging and More. Lavoisier S.A.S. 2005.

 

[4] Richardson, L., Ruby, S. RESTful web services. O'Reilly. 2007

 

[5]Rosen, M., et al. Applied SOA: Service-Oriented Architecture and Design Strategies.Wiley Publishing, Inc. 2008.

 

[6]Jeston, J, and Nelis J. Business Process Management. Elsevier.2007.

 

[7] Newcomer, E., and Lomow, G. Understanding SOA with Web Services, Addison-Wesley Professional, 1 edition.2004.

 

[8] Chappell, D. Enterprise Service Bus. O’Reilly.2004.

 

[9] Franky, M. C., and Pavlich-Mariscal, J. A. Improving Implementation of Code Generators: A Regular-Expression Approach. In CLEI 2012: XXXVIII Conferencia Latinoamericana en Informática (Medellín, Colombia,  Oct. 2012) .IEEE Catalog Number: CFP1225S-ART.2012.

 

[10] Friedl, J. Mastering Regular Expressions. O'Reilly.2002.

 

[11] Mellor, S., Scott, K., Uhl, A. , and Weise, D. MDA Distilled, Principles of Model Driven Architecture,  Addison-Wesley Professional.  2004.

 

[12] Kelly  S., and Tolvanen, J.-P.  Domain-specific modeling.Wiley-IEEE.2008.

 

[13] Pavlich-Mariscal, J. A. ,Franky, M. C. , and López, A. Towards Security Assurance in Roundtrip Engineering: A Type-Based Approach. In CLEI 2012: XXXVIII Conferencia Latinoamericana en Informática (Medellín, Colombia,  Oct. 2012) .IEEE Catalog Number: CFP1225S-ART.2012.

 

[14] Pohl, K. ,Böckle, G. , and Linden., F. J. v. d. Software Product Line Engineering: Foundations, Principles and Techniques. Springer-Verlag.2005.

 

[15] Clements, P.,  and Northrop, L. Software Product Lines : Practices and Patterns. Addison-Wesley Professional.2001.

 

[16] C. Parra, L. Giral, A. Infante, and C. Cortés. Extractive SPL adoption using multi-level variability modeling. In Proceedings of the 16th International Software Product Line Conference - Volume 2, SPLC 2012, ACM, pages 99-106, New York, NY, USA, 2012.

 

[17] Sonatype Company. 2008. Maven: The Definitive Guide. O'Reilly. 2008.

 

María Consuelo Franky: Ingeniera de Sistemas y Computación de la Universidad de los Andes. Master (D.E.A) y Doctorado en Informática de la Universidad de Lille I (Francia). Durante 16 años fue Profesora-Investigadora de la Universidad de los Andes. Fue profesora invitada de varias universidades latinoamericanas. Durante 10 años trabajó en CincoSOFTLtda, donde desarrolló sistemas en Java EE para empresas en EEUU y en Colombia, y también un framework para agilizar estos proyectos. Durante un año se desempeñó como arquitecta en Heinsohn Business Technology en donde dirigió proyectos relacionados con frameworks de desarrollo para Java EE. Ha sido miembro de la Junta Directiva de la ACIS y es actual codirectora del XXXIII Salón de Informática 2013. En la actualidad, es profesora de planta del Departamento de Ingeniería de Sistemas de la Pontificia Universidad Javeriana.

Califique este elemento
(2 votes)
Leido 6333 veces Modificado por ultima vez Viernes, 27 Septiembre 2013 16:13

Ingrese su comentario

Por favor confirme que ingreso la informacion requerida. Codigo HTML no esta permitido

Edición No. 128

Actividades Académicas

 

Sobre ACIS

La Asociación Colombiana de Ingenieros de Sistemas es una organización sin ánimo de lucro que agrupa a más de 1500 profesionales en el área de sistemas. ACIS nació en 1975 agrupando entonces a un número pequeño de profesionales en sistemas. Más información