Systems, Software and Models (SOM Research Lab) es un equipo de investigación conjunto de ICREA y la UOC, con sede en el Internet Interdisciplinary Institute (IN3), que se interesa por la modelización del software (y de los sistemas con los que este software interactúa) como base para la optimización del proceso de desarrollo, mantenimiento y evolución del software. Parecido a lo que ocurre en el resto de ingenierías, el grupo SOM promueve el uso riguroso de modelos para mejorar la productividad y la calidad del software, pero sin perder de vista el factor humano, tanto en cuanto a la comunidad de usuarios del software, como en cuanto al grupo de desarrolladores que lo crean.
Para llevar a cabo esta visión, el SOM combina técnicas de modelización, de métodos formales, de desarrollo colaborativo, de aprendizaje automático (machine learning) y de análisis de comunidades de desarrolladores.
Métodos formales
En los sistemas de software, los errores pueden tener consecuencias catastróficas, sobre todo en los sistemas críticos para la seguridad, como los programas médicos o aeroespaciales. Las verificaciones y revisiones de código pueden reducir la tasa de errores, pero en algunos casos hay que disponer de un nivel de seguridad más alto. Con este fin, los métodos formales forman parte de una categoría de técnicas que analizan una descripción matemática del sistema para garantizar su exactitud. Algunas de las técnicas que se utilizan para la verificación formal del software son la comprobación de modelos, la demostración de teoremas y el análisis estático. Un problema que tienen en común todos estos métodos es la gran complejidad computacional, que puede limitar su aplicabilidad en ejemplos del mundo real. Esta línea de investigación tiene en cuenta los enfoques pragmáticos para garantizar la calidad de los sistemas de software a escala industrial, y explorar temas clave como la usabilidad, la eficiencia y la aplicabilidad.
Ingeniería dirigida por modelos
El desarrollo dirigido por modelos es un paradigma que promueve el uso de modelos de software en todas las tareas de diseño de programas (ingeniería directa, ingeniería inversa, interoperabilidad...), como se hace habitualmente en todas las otras disciplinas de ingeniería. Por ejemplo, intenta reducir los costes de desarrollo centrándose en la creación de modelos de software (especificados en UML o mediante lenguajes específicos del dominio) más que en el código y, una vez estos modelos han sido validados, se basa en herramientas de generación de código para generar automáticamente su implantación final. En esta línea de investigación exploramos técnicas y herramientas para apoyar todos los aspectos de la ingeniería dirigida por modelos, incluyendo la manipulación de modelos muy grandes, de modelos heterogéneos, el modelado colaborativo y el descubrimiento de modelos (de API a código fuente).
Analítica de software
La analítica de software es el estudio de todos los datos relacionados con los programas y sus procesos de ingeniería con el fin de entender mejor cómo se construye el software. El objetivo es ser capaces de predecir y mejorar importantes factores de calidad de los artefactos de software y conocer las mejores prácticas de los proyectos del pasado (tanto si han tenido éxito como si no). El aprendizaje de estos factores se lleva a cabo por medio de la minería masiva de repositorios de software como GitHub (con más de 50 millones de proyectos en este momento). La analítica de software incluye el análisis del código del programa, pero nos interesa especialmente estudiar todos los aspectos sociales y colaborativos que giran a su alrededor (cuál es la comunidad que construye el software, cómo se organiza, cuáles son las mejores prácticas que sigue, etc.). Últimamente hemos empezado también a estudiar cómo el uso de los bots (asistentes virtuales) puede ayudar en la gestión automatizada de estas comunidades.
Datos abiertos
Hoy en día, muchas instituciones publican sus datos y los ponen a disposición del gran público. Por desgracia, muy pocas veces los ciudadanos pueden hacer realmente uso de ellos, puesto que se publican en formatos muy heterogéneos (XML, CSV, API...) y sin una información precisa de sus contenidos. Nuestro grupo trabaja en la obtención automática de los esquemas/modelos que se esconden tras estos datos y en la eliminación de barreras técnicas de cara a facilitar un uso efectivo de los datos abiertos por parte de usuarios no técnicos.