Archivo de la categoría: Bheudek

DSLs

Los lenguajes específicos de dominio (Domain-Specific Languages – DSLs) son lenguajes de programación diseñados para definir, de una manera más precisa y expresiva, áreas particulares, bien sean técnicas o de negocio.

Se denominan así en contraposición a los lenguajes de propósito general (General Purpose Languages – GPLs – Java, C#, C++, etc), ofreciendo un enfoque menos amplio pero más preciso, es decir, su objetivo es cubrir únicamente el área o dominio para el que se diseñan pero hacerlo con las estructuras gramaticales y/o abstracciones gráficas que mejor le definen.

Para entender estos lenguajes vamos a verlos desde dos puntos de vista: como una evolución a partir de la generación de código y como una evolución desde los GPLs.

DSLs desde la generación de código
Existen diferentes formas, más o menos sofisticadas, para generar código: macros, datos estructurados en tablas, generación dinámica, parseo de estructuras simples, modelados tipo CASE, etc, pero siempre que hablemos de un nivel elevado hablaremos de lenguajes (de tipo texto o gráfico), donde se define de manera formal las estructuras lingüísticas, su representación y su interpretación.

De este modo, entendemos que los DSLs son la vía más sofisticada en la generación de código.

DSLs desde los GPLs
Los GPLs son potentes porque permiten definir todos los problemas (Turing completo) pero en muchos casos son expresivamente pobres debido al salto entre la definición del problema (mundo real) y su solución (código fuente). Esto hace muy complicada la programación y el mantenimiento porque se hace difícil entender lo que se pretende solucionar.Pongamos por ejemplo la definición de una interfaz de usuario web y su representación en HTML: el salto expresivo es enorme.

En base a esta necesidad surgen los DSLs.

Características y ventajas de los DSLs

  • Mayor nivel de abstracción. Definen conceptos más complejos, más abstractos y por tanto más expresivos.
  • Tienen menos grados de libertad. Normalmente no son Turing completos. Permiten definir el dominio, nada más que el dominio y con las reglas que rigen el dominio, lo cual les dota de una enorme potencia (en ese dominio, claro).
  • Aumentan la productividad ya que permiten programar de una manera más rápida y eficiente.
  • Mejoran la calidad del software. Abstraen de la complejidad técnica, generalmente resuelta por el generador de código, evitando errores.
  • Soporte IDE (entorno de desarrollo integrado). Validaciones, comprobación de tipos, autocompletar, etc. Esto es una gran diferencia respecto a la definición del dominio mediante APIs o Frameworks.
  • Independientes de la plataforma.
  • En general todos las ventajas de la generación de código.
Los DSLs son comunes en el mundo real, a lo largo de la historia han sido creados en matemáticas, ciencia, medicina… Es el momento de usarlos en el desarrollo de software.
 

Ver todos los posts Teórico.
 

XV Foro de Inversión Madri+d

Hemos sido seleccionados para presentar en el XV Foro de Inversión Madri+d, un foro para empresas tecnológicas organizado por BAN Madrid (Business ANgels Madrid) y la Fundación Madri+d.

Image

¡Hablemos!.

10 Ventajas de la Generación de Código

Vayamos al grano. He aquí la lista:

  • Calidad SW: En todos los aspectos: rendimiento, fiabilidad, seguridad, etc.
  • Estandarización: no sólo en el código fuente: en la interfaz de usuario, en las estructuras de base de datos, etc.
  • Centralización: políticas globales tales como el manejo de errores, la gestión de excepciones, el formato de visualización de datos, las validaciones de datos, comprobar los permisos, etc. están centralizados en el generador. Este tipo de políticas son también conocidos como funcionalidades transversales y es un tema abordado por la Programación Orientada a Aspectos (AOP en inglés) en la programación tradicional. La centralización evita este problema.
  • Refactorización: relacionado con el beneficio anterior, la refactorización de código es fácil y segura.
  • Productividad: Menor coste y menor tiempo de lanzamiento al mercado (entre versiones).
  • Habilidades Analíticas: la generación de código requiere un análisis más profundo del dominio antes de implementar la solución a través del generador.
  • Habilidades de Diseño: requiere un buen arquitecto, con una visión más amplia.
  • Crecimiento Sano: previene la degradación de la arquitectura.
  • Integración de Nuevos Miembros: la cultura o las normas de desarrollo son menores cuando se trabaja con generación de código.
  • Nivel de abstracción: la programación a un nivel más abstracto, además de fácil de entender (es más intencional), abre la puerta a nuevas posibilidades, tales como: generación de pruebas unitarias, auto-documentación, carga automática de datos, semántica, racionamiento automático, etc.
 
La generación de código no es fácil, la implementación de un generador requiere de tiempo y esfuerzo, y más aún si se trata de un Language Workbench, pero, sin duda, los beneficios son enormes.
 

Ver todos los posts Teórico.
 

Programa “Soy Emprendedor”

Hemos sido seleccionados para el programa “Soy Emprendedor, Soy de la Mutua”, un programa de la Mutua Madrileña para Startups.

Image

¡Vamos a disfrutarlo!

Video Presentación

Aquí os dejamos el vídeo presentación que hemos hecho.

¡Esperamos que os guste!

Glosario

Comenzamos nuestros artículos de carácter académico con el glosario de términos de la metodología.

AOP
Aspect-oriented programming. La programación orientada a aspectos es un paradigma de programación que permite la separación de aspectos trasversales. Aspectos diferentes, tales como seguridad, log contable, avisos, etc. pueden ser definidos en áreas diferentes, obteniéndose el comportamiento final del sistema mediante a través de un proceso de tejido.
Dominio
Un dominio es un área, de negocio en nuestro caso, en el cual reside un conocimiento particular y una terminología específica para definirlo.
DSL
Domain Specific Language. Un lenguaje específico de dominio es un lenguaje de programación diseñado para representar los conceptos de un dominio dado. Puede ser tanto gráfico como texto.
FW
Framework. Un framework es una plataforma software reutilizable para desarrollar aplicaciones. Se trata de una abstracción donde sus funcionalidades genéricas pueden ser extendidas de manera selectiva para conseguir un aplicación software específica.
FM
Feature Model. Modelo para representar las partes comunes y opcionales que puede haber en una línea de producción. Es utilizado en PLE.
LW
Language Workbench. Herramienta que permite la definición y uso de lenguajes formales: sintaxis abstracta y concreta y semántica estática y dinámica. Se podría considerar como una herramienta para definir el lenguaje, el compilador y el IDE de un determinado dominio.
MDA
Model Driven Architecture. Estándar OMG para el desarrollo de software basado en modelos. Se puede considerar como un caso particular de MDSD.
MDSD
Model-driven Software Development. Se trata de un paaradigma de programación que basa el desarrollo de software a nivel de modelos.
Meta-modelo
Reglas, construcciones, relaciones, etc. que definen los modelos que pueden ser construidos en un dominio determinado.
PLE
Product Line Engineering. Disciplina para la creación de software a través de líneas de producción de software (SPL).
SPL
Software Product Lines. Metodología de desarrollo enfocada en la producción de software tal y como se hace en la producción de otros bienes: compartiendo los procesos comunes y aislando los particulares.
Ver todos los posts Teórico.
 

Automatización de software. Introducción

La automatización del desarrollo de software, como todo proceso de automatización, consiste en delegar a la máquina algunas de las tareas que implica este proceso productivo. El objetivo es conseguir una metodología de desarrollo más rápida, y por tanto con menos costes, así como una mayor calidad en el producto final.

La automatización en el SW ha sido una meta perseguida con anterioridad aunque no con mucho éxito. Estándares de diseño tipo UML o herramientas de tipo CASE (Computer Aided Software Engineering) no han conseguido los frutos esperados debido a que intentan dar una solución genérica (de “propósito general”) al conjunto de problemas a los que el SW intenta dar respuesta.

Por el contrario, los nuevos métodos de automatización ofrecen la posibilidad de diseñar, de forma simple y rápida, lenguajes que se adapten y puedan describir cada problema particular. Es este enfoque específico, y no de propósito general, el que permite lograr casos de éxito en la automatización del desarrollo de sw.

La automatización se asocia principalmente a la generación de código porque al fin y al cabo, el código fuente, es el resultado del proceso productivo, pero no conviene olvidar que una vez que se utilizan estas técnicas, la programación pasa de ser una mera declaración funcional a una verdadera representación del conocimiento, a partir de lo cual se pueden aplicar diversas disciplinas como la semántica o el razonamiento automatizado.

Podemos concluir esta introducción diciendo que a lo largo de la historia el sw a optimizado muchos procesos productivos, es el momento de que optimice el suyo propio.

Con este artículo iniciamos una serie en la que iremos describiendo en profundidad esta disciplina así como su implementación en Bheudek.
 

Ver todos los posts Teórico.
 

¡Hora de acudir al mercado!

Tras medio año de trabajo, nos complace informar que hemos finalizado nuestro primer producto.

Una vez alcanzada esta cima, nos ha llegado el momento de acudir al mercado en busca de clientes, socios y cualquier tipo de compañero que quiera recorrer esta nuevo camino con nosotros.

Encontrarás más informacion del producto en el area 1er Producto.

¡Herramientas terminadas!

Nos sentimos orgullosos de anunciar que hemos terminado nuestras herramientas de desarrollo y estamos preparados para iniciar nuestro primer producto: un servicer financiero.

A través de este proceso perseguimos crear un producto final a la vez que sumergimos a las herramientas en un proceso real de producción para probarlas y optimizarlas.

Encontrarás más información en el área de Tecnología.

Code Generation 2012

El pasado 24 de marzo parte del equipo de Bheudek se desplazó a Cambridge para asistir a la conferencia Code Generation 2012. Code Generation es una conferencia anual que reúne a los más destacados profesionales en el ámbito de MDSD, LW, SPL y en general todas aquellas disciplinas de Ingeniería del SW basadas en la automatización y enfocadas en mejorar el proceso de producción y el producto final.
La conferencia se dividió en dos partes: el martes 27 Language Workbench Challenge y del miercoles 28 a viernes 30 la conferencia propiamente dicha.

Language WorkBench Challenge
El objetivo de este evento no es encontrar un vencedor sino comparar, mediante la resolución de un ejercicio, los logros técnicos logrados por estas herramientas en este área.
Siguiendo la política de aumentar la dificultad del ejercicio, este año se trataba de un circuito de calefacción, esto es, un dominio eminentemente gráfico (en comparación con el del año pasado que era modo texto). Parece ser que para el año que viene el ejercicio tratará de ser un proceso completo: desde el modelado a la generación del código y su ejecución en una plataforma.
Respecto a la competición decir que fue un día realmente interesante, donde pudimos ver y aprender del trabajo del resto, compararlo con el nuestro y sobre todo pudimos compartir nuestras opiniones acerca de este tipo de herramientas.
Respecto a las herramientas, considerando que todas ellas son grandes proyectos, queremos mencionar a MetaEdit + (MetaCASE), AtomWeaver (Rui Curado) y Enso (Alex Loh, Universidad de Texas).

La conferencia
El resto del evento, la conferencia en sí, se basa en la presentación de experiencias, casos prácticos, manejo de herramientas, tutoriales y sobre todo en promover contactos entre los asistentes. Las presentaciones van desde las 9:00 a las 17:00 horas con recesos intermedios y para la comida, después de ellas se producen todo tipo de eventos como foros, reuniones alrededor de una cerveza, cena etc.
En estos tres dias pudimos asistir a un amplio abanico de presentaciones de entre las cuales queremos destacar:

  • Markus Völter y Jan Bosch como ponentes principales y sus presentaciones sobre el diseño de DSLs y la innovación a través de la arquitectura.
  • MPS con varias presentaciones sobre su herramienta y sobre el contenido que un LWB debería tener.
  • Enrico Persiani / Ricardo Solmi y su interesante herramienta (whole platform) aplicada a un proyecto real.
  • Icinetic con Radarc y como hacer MDSD en .NET.
  • CollectionsPro y sus experiencias prácticas con MDSD continuo y bases de datos.
  • Holger Tschöpe y el desarrollo de una SPL en Eurocopter.
  • Medata mostrando su herramienta de modelado en web.
  • Steven Kelly y sus reflexiones sobre la importancia de la sintaxis concreta.
  • Finalmente, en un campo técnico más global, el ponente invitado David Woods y su presentación sobre como llego el Apolo a la luna.

Sin duda una experiencia maravilloso que esperamos repetir incluso como ponentes presentando nuestros logros.
Gracias a la organización tanto por la conferencia como por los eventos sociales que nos permitieron contactar y compartir buenos ratos con otros asistentes.