Desarrollo de software dirigido por modelos: Teoria y Aplicacion
El Desarrollo de Software Dirigido por Modelos (MDD en su acepción en inglés “Model-Driven Development” es una disciplina que está generando muchas expectativas como alternativa sobresaliente a los métodos convencionales de producción de software, más orientado al Espacio de la Solución que al Espacio del Problema. Después de muchos años intentándolo, parece que por fin la comunidad de la Ingeniería del Software acepta que un proceso robusto de producción de software debe estar soportado por Modelos Conceptuales y dirigido por las Transformaciones correspondientes entre Modelos definidas de forma precisa.
Una gran cantidad de trabajos teóricos y prácticos acompañan a este movimiento. Existen también herramientas que lo hacen ya realidad a nivel comercial. Pero a menudo se olvida un componente fundamental para que su éxito sea una realidad tangible: la necesidad de disponer de material didáctico ágil, actualizado, preciso y riguroso, que permita entender los fundamentos del MDD, las abstracciones en que se basa, los estándares que lo soportan, los problemas que hay que abordar para ponerlo en práctica exitosamente, y las ventajas concretas derivadas de su adopción.
Ese es justamente el gran valor proporcionado por este libro. Sus autoras proyectan toda su amplia experiencia didáctica e investigadora en ambientes MDD sobre un documento que introduce al lector de una manera clara, sencilla, eficaz y eficiente en el mundo del MDD y de todo lo que representa. Sus contenidos están actualizados, e incluyen todos los temas que son hoy en día esenciales para entender las peculiaridades del Desarrollo Dirigido por Modelos. Modelos, transformaciones y herramientas, sus implicaciones metodológicas en un proceso software MDD, el rol del metamodelado, las herramientas de soporte a la creación de modelos de software y para la definición de transformaciones de modelos, las tecnologías más relevantes existentes en la actualidad, los lenguajes para definir las transformaciones, el testing dirigido por modelos…
En definitiva, todos los aspectos ciertamente significativos del MDD y necesarios para entenderlo, están presentes, correctamente desarrollados, y están descritos con rigor y claridad, combinando aspectos teóricos y prácticos de una manera equilibrada, utilizando ejemplos ciertamente clarificadores para que los conceptos lleguen al lector con nitidez. Todo ello hace de este libro una referencia seguro que indispensable en la docencia de las técnicas de Desarrollo de Software Dirigido por Modelos. Su estilo ameno, sistemático y siempre orientado a facilitar la entendibilidad del enfoque MDD permite concluir que se trata de un libro del que se van a poder beneficiar tanto estudiantes de pre y postgrado, como profesionales del software que quieran conocer de forma suficientemente exhaustiva las particularidades del MDD para poder explotarlo en entornos industriales. Invito por lo tanto al lector a sumergirse con la ayuda de este libro en el apasionante mundo del Desarrollo Dirigido por Modelos, y a disfrutar de una obra que le permitirá conocer los secretos de un enfoque al que está intensamente e ilusionadamente orientada la Ingeniería del Software moderna.
A lo largo de estos años hemos visto surgir el Desarrollo de Software Dirigido por Modelos (MDD) como una nueva área dentro el campo de la ingeniería de software. MDD plantea una nueva forma de entender el desarrollo y mantenimiento de sistemas de software con el uso de modelos como principales artefactos del proceso de desarrollo.
A lo largo de estos años hemos visto surgir el Desarrollo de Software Dirigido por Modelos (MDD) como una nueva área dentro el campo de la ingeniería de software. MDD plantea una nueva forma de entender el desarrollo y mantenimiento de sistemas de software con el uso de modelos como principales artefactos del proceso de desarrollo.
En MDD, los modelos son utilizados para dirigir las tareas de comprensión, diseño, construcción, pruebas, despliegue, operación, administración, mantenimiento y modificación de los sistemas. En este libro explicamos los fundamentos de MDD, respondiendo a preguntas tales como “¿Qué son los modelos, cómo se construyen y cómo se transforman hasta llegar al código ejecutable?”. También nos referimos a los estándares que soportan a MDD y discutimos las ventajas que se introducen en el ciclo de vida del software como consecuencia de adoptarlo. El libro contiene un ejemplo completo de un desarrollo dirigido por modelos. El desarrollo comienza con la definición de un modelo abstracto expresado en UML y finaliza con el despliegue de un programa ejecutable escrito en Java. La transformación del modelo a código es realizada a través de la aplicación de transformaciones expresadas en un lenguaje estándar. Este ejemplo brinda un panorama completo y comprensible sobre los aspectos técnicos de MDD.
¿A quién está dirigido este libro?
Si bien este libro está dirigido principalmente a estudiantes de carreras de grado y postgrado relacionadas con la ingeniería de sistemas de software, también constituye una lectura recomendable para cualquier persona, con conocimientos básicos sobre sistemas, que esté interesada en incursionar en el desarrollo de software guiado por modelos. Este libro intenta ser fácil de abordar, ya que presenta los temas de manera auto-contenida, gradual, sistemática y recurriendo a numerosos ejemplos.
Profesionales del software con mayor experiencia también pueden beneficiarse con la lectura de este libro, ya que obtendrán un mejor entendimiento de MDD que los ayudará a juzgar cuándo y cómo las ideas de MDD pueden ser aplicadas en sus proyectos. Para entender este libro se requiere conocimiento básico sobre el paradigma de Orientación a Objetos y el lenguaje Unified Modeling Language (UML). Para comprender los ejemplos en detalle, contar con conocimiento sobre el lenguaje Object Constraint Language (OCL), Java, el framework Spring, SQL y Java Server Pages (JSP) es beneficioso pero no indispensable.
¿Cómo debe leerse este libro?
Si bien es recomendable leer el libro en forma completa y secuencial, podemos sugerir dos caminos abreviados de lectura apropiados para cada perfil de lector:
Un camino para los gerentes de proyectos: los gerentes que no deseen adentrarse en los detalles de la tecnología que sustenta a MDD deben leer desde el capítulo 1 al 2 y luego los capítulos 11 y 12.
Un camino para los desarrolladores de software: la gente interesada en la aplicación de MDD para desarrollar software debería leer desde el capítulo 1 hasta el capítulo 9.
También puede omitirse la lectura detallada del ejemplo que desarrollamos a partir del capítulo 5. Dicho ejemplo incluye varios niveles de modelos y transformaciones. El lector podría focalizarse sólo en uno de dichos niveles (por ejemplo, el nivel del modelo relacional), sin perjuicio de perder la información que el ejemplo transmite.
Material didáctico e implementación del ejemplo
La implementación completa y ejecutable del ejemplo del Bookstore que desarrollamos a partir del capítulo 5 puede ser descargada desde la siguiente página Web:
http://www.lifia.info.unlp.edu.ar/bookstore
Dicha página también incluye presentaciones y ejercicios cuyo objetivo es servir de material didáctico en cursos sobre MDD.
Desarrollo de Software Dirigido por Modelos. Conceptos básicos
En este capítulo introduciremos los fundamentos del paradigma de desarrollo de software dirigido por modelos, relataremos sus orígenes y sus principales beneficios
La crisis del software
Históricamente, el proceso de desarrollo de software ha resultado caro, riesgoso, incierto y demasiado lento para las condiciones de negocio modernas. Estos inconvenientes dieron origen al concepto de “crisis del software” que prácticamente surgió conjuntamente con la creación del software. La crisis del software es un término informático acuñado en 1968, en la primera conferencia organizada por la OTAN sobre desarrollo de software.
¿A quién está dirigido este libro?
Si bien este libro está dirigido principalmente a estudiantes de carreras de grado y postgrado relacionadas con la ingeniería de sistemas de software, también constituye una lectura recomendable para cualquier persona, con conocimientos básicos sobre sistemas, que esté interesada en incursionar en el desarrollo de software guiado por modelos. Este libro intenta ser fácil de abordar, ya que presenta los temas de manera auto-contenida, gradual, sistemática y recurriendo a numerosos ejemplos.
Profesionales del software con mayor experiencia también pueden beneficiarse con la lectura de este libro, ya que obtendrán un mejor entendimiento de MDD que los ayudará a juzgar cuándo y cómo las ideas de MDD pueden ser aplicadas en sus proyectos. Para entender este libro se requiere conocimiento básico sobre el paradigma de Orientación a Objetos y el lenguaje Unified Modeling Language (UML). Para comprender los ejemplos en detalle, contar con conocimiento sobre el lenguaje Object Constraint Language (OCL), Java, el framework Spring, SQL y Java Server Pages (JSP) es beneficioso pero no indispensable.
¿Cómo debe leerse este libro?
Si bien es recomendable leer el libro en forma completa y secuencial, podemos sugerir dos caminos abreviados de lectura apropiados para cada perfil de lector:
Un camino para los gerentes de proyectos: los gerentes que no deseen adentrarse en los detalles de la tecnología que sustenta a MDD deben leer desde el capítulo 1 al 2 y luego los capítulos 11 y 12.
Un camino para los desarrolladores de software: la gente interesada en la aplicación de MDD para desarrollar software debería leer desde el capítulo 1 hasta el capítulo 9.
También puede omitirse la lectura detallada del ejemplo que desarrollamos a partir del capítulo 5. Dicho ejemplo incluye varios niveles de modelos y transformaciones. El lector podría focalizarse sólo en uno de dichos niveles (por ejemplo, el nivel del modelo relacional), sin perjuicio de perder la información que el ejemplo transmite.
Material didáctico e implementación del ejemplo
La implementación completa y ejecutable del ejemplo del Bookstore que desarrollamos a partir del capítulo 5 puede ser descargada desde la siguiente página Web:
http://www.lifia.info.unlp.edu.ar/bookstore
Dicha página también incluye presentaciones y ejercicios cuyo objetivo es servir de material didáctico en cursos sobre MDD.
Desarrollo de Software Dirigido por Modelos. Conceptos básicos
En este capítulo introduciremos los fundamentos del paradigma de desarrollo de software dirigido por modelos, relataremos sus orígenes y sus principales beneficios
La crisis del software
Históricamente, el proceso de desarrollo de software ha resultado caro, riesgoso, incierto y demasiado lento para las condiciones de negocio modernas. Estos inconvenientes dieron origen al concepto de “crisis del software” que prácticamente surgió conjuntamente con la creación del software. La crisis del software es un término informático acuñado en 1968, en la primera conferencia organizada por la OTAN sobre desarrollo de software.
La causa de esta crisis reside en la complejidad inherente a la tarea de construir sistemas de software, y también en los cambios constantes a los que tiene que someterse el software para adaptarse a las necesidades cambiantes de los usuarios y a las innovaciones tecnológicas. Actualmente, la magnitud de este problema continúa creciendo, ya que se incrementan las demandas de funcionalidades más sofisticadas y de software más fiable (como Grady Booch apunta, en cierto modo “software runs the world” [Booch 04a]). Por lo tanto, es fundamental comprender donde se encuentran las fuentes de esta complejidad y lo que podemos hacer con ella. En las siguientes secciones estudiaremos de que forma los métodos de desarrollo de software actuales enfrentan a la crisis del software.
El desarrollo de software basado en modelos (MBD)
La ingeniería de software establece que el problema de construir software debe ser encarado de la misma forma en que los ingenieros construyen otros sistemas complejos, como puentes, edificios, barcos y aviones. La idea básica consiste en observar el sistema de software a construir como un producto complejo y a su proceso de construcción como un trabajo ingenieril. Es decir, un proceso planificado basado en metodologías formales apoyadas por el uso de herramientas. Hacia finales de los años 70, Tom Demarco en su libro “Structured Analysis and System Specification” [Demarco 79] introdujo el concepto de desarrollo de software basado en modelos o MBD (por sus siglas en inglés Model Based Development). DeMarco destacó que la construcción de un sistema de software debe ser precedida por la construcción de un modelo, tal como se realiza en otros sistemas ingenieriles (Figura 1-1). El modelo del sistema es una conceptualización del dominio del problema y de su solución.
El desarrollo de software basado en modelos (MBD)
La ingeniería de software establece que el problema de construir software debe ser encarado de la misma forma en que los ingenieros construyen otros sistemas complejos, como puentes, edificios, barcos y aviones. La idea básica consiste en observar el sistema de software a construir como un producto complejo y a su proceso de construcción como un trabajo ingenieril. Es decir, un proceso planificado basado en metodologías formales apoyadas por el uso de herramientas. Hacia finales de los años 70, Tom Demarco en su libro “Structured Analysis and System Specification” [Demarco 79] introdujo el concepto de desarrollo de software basado en modelos o MBD (por sus siglas en inglés Model Based Development). DeMarco destacó que la construcción de un sistema de software debe ser precedida por la construcción de un modelo, tal como se realiza en otros sistemas ingenieriles (Figura 1-1). El modelo del sistema es una conceptualización del dominio del problema y de su solución.
El modelo se focaliza sobre el mundo real: identificando, clasificando y abstrayendo los elementos que constituyen el problema y organizándolos en una estructura formal. La abstracción es una de las principales técnicas con la que la mente humana se enfrenta a la complejidad. Ocultando lo que es irrelevante, un sistema complejo se puede reducir a algo comprensible y manejable. Cuando se trata de software, es sumamente útil abstraerse de los detalles tecnológicos de implementación y tratar con los conceptos del dominio de la forma más directa posible. De esta forma, el modelo de un sistema provee un medio de comunicación y negociación entre usuarios, analistas y desarrolladores que oculta o minimiza los aspectos relacionados con la tecnología de implementación.
Actualmente casi todos los métodos de desarrollo de software utilizan modelos. Lo que varía de un método a otro es la clase de modelos que deben construirse, la forma de representarlos y manipularlos. A grandes rasgos podemos distinguir dos tendencias principales: los métodos matemáticos y los métodos diagramáticos.
Métodos Matemáticos:
Existen técnicas y herramientas formales que ayudan a modelar el problema y razonar sobre la solución de una manera precisa y rigurosa. Estos métodos utilizan lenguajes de especificación de naturaleza matemática, tales como: Z [DB 01], VDM [EF 94], B [BM 00] y OCL [OCL], los cuales permiten demostrar si la especificación cumple ciertas propiedades (ej., consistencia), derivar información implícita a partir de la especificación (ej., usando probadores de teoremas), derivar código automáticamente (ej., aplicando cálculos de refinamientos [BW 98]), verificar formalmente que el software satisface la especificación (ej., aplicando la lógica de Hoare [Hoare 69]).
Actualmente casi todos los métodos de desarrollo de software utilizan modelos. Lo que varía de un método a otro es la clase de modelos que deben construirse, la forma de representarlos y manipularlos. A grandes rasgos podemos distinguir dos tendencias principales: los métodos matemáticos y los métodos diagramáticos.
Métodos Matemáticos:
Existen técnicas y herramientas formales que ayudan a modelar el problema y razonar sobre la solución de una manera precisa y rigurosa. Estos métodos utilizan lenguajes de especificación de naturaleza matemática, tales como: Z [DB 01], VDM [EF 94], B [BM 00] y OCL [OCL], los cuales permiten demostrar si la especificación cumple ciertas propiedades (ej., consistencia), derivar información implícita a partir de la especificación (ej., usando probadores de teoremas), derivar código automáticamente (ej., aplicando cálculos de refinamientos [BW 98]), verificar formalmente que el software satisface la especificación (ej., aplicando la lógica de Hoare [Hoare 69]).
Es innegable que el desarrollo de software usando formalismos lleva a generar sistemas robustos y consistentes, en los cuales es posible tanto la validación de la especificación por parte del usuario (detección y corrección temprana de defectos), como la verificación del software. Sin embargo éstos no han sido adoptados masivamente en la industria debido a la complejidad de sus formalismos matemáticos que resultan difíciles de entender y comunicar.
Métodos Diagramáticos:
Por otra parte, los procesos basados en modelos gráficos –como el UP [JBR 99] con su especialización RUP (Rational Unified process) [Krutchten 00]– constituyen una propuesta más amigable, fácil de utilizar y comprender que los métodos formales.
Métodos Diagramáticos:
Por otra parte, los procesos basados en modelos gráficos –como el UP [JBR 99] con su especialización RUP (Rational Unified process) [Krutchten 00]– constituyen una propuesta más amigable, fácil de utilizar y comprender que los métodos formales.
El éxito de estos procesos se basa principalmente en el uso de lenguajes diagramáticos, tales como UML [UML 03] que transmiten un significado intuitivo. A diferencia de las notaciones matemáticas, estos lenguajes diagramáticos son aceptados más fácilmente por los desarrolladores de software. Además, no por ser amigables los modelos dejan de tener una base formal. En efecto la tienen, pero permanece oculta tras la notación gráfica.
SIGUE APRENDIENDO DESCARGANDO EL ARCHIVO