1. Ingeniería de Requerimientos

La Ingeniería de Requerimientos ha sido definida como la rama de la Ingeniería de Software que se ocupa de los objetivos del mundo real para las funciones y restricciones de sistemas de software. Es una etapa básicamente interdisciplinaria y considera la educación de requerimientos, la modelación y análisis de los requerimientos, la comunicación de estos, la obtención de acuerdos incluyendo además la preocupación por cómo los requerimientos evolucionan dentro del ciclo de desarrollo de software. La fase de requerimientos es considerada la etapa más crítica dentro de las fases de un proyecto de software. Por ejemplo se reconoce que más del 50% de los errores de un producto de software son introducidos en la fase de requerimientos. Por otra parte, también se reconoce el esfuerzo para corregir un error en la fase de uso de un sistema es entre 10 a 100 veces lo que este costaría resolverlo en la fase de requerimientos.

Últimas investigaciones en el área abarcan aspectos amplios, desde aspectos más sociales, como por ejemplo propuestas metodológicas para asegurar el involucramiento de los usuarios, hasta propuestas técnicas, como por ejemplo cómo conectar las representaciones de requerimientos como parte de enfoques de desarrollo basado en modelos (MDD). Los denominados requerimientos no funcionales, concebidos como calidades transversales, es un tema que se ha desarrollado con fuerza los últimos 10 años, en este aspecto la seguridad es un requerimiento sobre el cual se mantiene un foco de investigación importante. Pero también han surgido nuevos requerimientos no funcionales de mucha relevancia, por ejemplo la transparencia, que afecta principalmente al sector de la industria focalizada a sistemas de gobierno electrónico.

En términos de lenguajes y modelos la irrupción de lenguajes orientados a objetivos, como por ejemplo i* y KAOS, han marcado un sector importante de la investigación en Ingeniería de Requerimientos. Estos lenguajes permiten especificar los contextos de uso y la red de objetivos de una organización donde se inserta un nuevo sistema de software respondiendo básicamente la pregunta relacionada al porqué determinadas automatizaciones se hacen relevantes. En particular i* modela además requerimientos no funcionales y calidades transversales para un producto de software teniendo, a la época, un espectro de aplicaciones bastante amplio.

Los principales desafíos de esta línea de investigación en el Centro radican en poder reubicar la importancia de la Ingeniería de Requerimientos en la producción de software y realizar estudios empíricos respecto de la adopción de procedimientos, modelos y herramientas que apoyen esta fase.

2. Gestión del Proceso de Producción de Software

Los procesos de la Ingeniería de Software bien aplicados, inciden muy directamente en la cuenta de resultados: “comprar barato sale doblemente caro”, muchos estudios y publicaciones avalan y muestran los buenos resultados de la aplicación de procesos de mejora de la calidad (como CMMI), especialmente en el ajuste de costos.

La Gestión de Proyectos de Software es un área crítica dentro de la Ingeniería de Software. Existe una historia importante de fracasos en proyectos de software que queda de manifiesto en ahora un libro clásico de la Ingeniería de Software como lo es el llamado “El mítico hombre-mes”. En este, un capítulo destacado es el que lleva por título “No hay Balas de Plata” haciendo alusión a que no existen formulas mágicas para enfrentar un proyecto de software exitoso si no son con los tiempos, presupuesto y personal adecuado. Sin embargo, y a pesar que desde muy temprano en la disciplina se advirtió sobre los fracasos en la gestión de proyectos de software, es un área que teniendo un alto impacto económico, sigue con deficiencias en la industria tal como lo demuestran los reportes CHAOS (ver tabla de la figura).

La reciente historia y evolución de la ingeniería de software nos muestra que aún persisten problemas importantes en la capacidad de gestionar procesos de desarrollo de software, uso de técnicas, herramientas y sobretodo buenas prácticas de ingeniería. En la tabla  de la figura se muestra que en el 2009 solo el 32 % de los proyectos de desarrollo de software es considerado exitoso, el 44 % se impugna por problemas de atraso y/o cambio significativo del presupuesto o porque no incluye las características o funcionalidades requeridas. Lo más preocupante es que el 24 % de los proyectos fallan, es decir no termina con un producto usable. Es importante destacar que el 1994  solo el 16% de los proyectos era exitoso. El resto es impugnado y/o fallido. A partir del 1996 se ha mantenido una mejora hasta llegar a más del doble en 10 años lo que indica una tendencia de mejora que podemos suponer se debe a la mejora en el uso de métodos, técnicas, herramientas y prácticas de ingeniería.

A pesar de no contar con cifras para Chile nuestra experiencia lamentablemente indica que estas cifras son, al menos, igualmente malas (ejemplo, sistema de control y gestión del transantiago, Sistema de gestión FONASA, Sistema de Registro Civil, etc). Las causas de este comportamiento han sido estudiadas y las conclusiones apuntan fundamentalmente a aspectos de gestión de procesos, como por ejemplo compromiso de los clientes, factibilidad de trazabilidad de requerimientos, control de calidad de productos intermedios entre otros factores.

En general todo lo que significa el mejoramiento de la gestión de los procesos de software se enfrenta hoy por la vía de las certificaciones de calidad del proceso de producción de software. En este sentido diversos estándares se han desarrollado para apoyar esta industria. Algunos apuntan a asuntos específicos dentro del ciclo de vida de un producto de software, por ejemplo el IEEE Std 1063-2001 para documentación de usuarios del software, o el IEEE Std 1540-2001 que apunta a la gestión de riesgos en proyectos de desarrollo de software. También, y un poco más difundidos existen los estándares que apuntan a la gestión del proceso completo de desarrollo de software en un proyecto, por ejemplo el ISO/IEC 12207, ISO/IEC 15504 que apunta a aspectos de mejoramiento continuo, y el IEEE Std 730-1998 para planes de aseguramiento de calidad en proyectos de software entre varios otros. En este amplio escenario se ha destacado CMMI que es un estándar propuesto por el Software Engineering Institute de la Carnigie Mellon University (www.sei.ucm.edu). Este estándar de la industria es diferente porque se basa sobre una categorización de 5 niveles de madurez para las organizaciones que desarrollan software, abriendo la posibilidad de obtener certificaciones de nivel intermedio. A continuación se presenta una tabla con la descripción de cada nivel.

Los principales desafíos de esta línea de investigación en el Centro radican en poder reubicar la importancia del mejoramiento continuo del proceso del software sobre todo por medio de procesos de investigación-acción poniendo en práctica las recomendaciones del área conocida como SPI (Software Process Improvement), buscar modelos más adecuados para empresas pequeñas. Últimas investigaciones ponen el foco en equipos multiculturales, mejoramiento del proceso con débil apoyo de la gestión, o incluso el uso de redes sociales de Internet como apoyo al mejoramiento continuo.

3. Desarrollo Dirigido por Modelos (MDD)

El Desarrollo dirigido por modelos (conocido también como Model-driven development, MDD, Model-driven engineering, o MDE) es una tendencia contemporánea relevante de la Ingeniería de Software. Los beneficios del MDD radican en poder manejar proyectos complejos, acortar los ciclos de desarrollo y gestionar adecuadamente los niveles de expectativas de los interesados (stakeholders).

La idea fundamental es representar los diversos aspectos y fases del desarrollo de un producto de software comenzando desde modelos del ámbito del problema, pudiendo incluso utilizar lenguajes de modelado propios de este ámbito, y vía transformaciones, obtener productos de software confiables y que respondan a las necesidades del ámbito de aplicación. Lo anterior permite mejorar la gestión y el control de calidad sobre proyectos de software debido a que el control es establecido sobre modelos más que sobre porciones de un programa. En la siguiente figura se ilustra esta idea y su diferencia básica con enfoques anteriores.

El desarrollo dirigido por modelos permite lidiar con los problemas propios de la gestión de código de tecnologías de tercera generación en el sentido de representar soluciones en el lenguaje de modelado del ámbito de acción. La forma de enfrentar estos procesos es bajo la interacción desde lenguajes de modelación específicos de un dominio, y por lo tanto independientes de la tecnología, hasta modelos que sí son dependientes de las tecnologías y por lo tanto contribuyen a detallar una solución técnica computacional específica para dicho ámbito de aplicación. En esta forma de operar, elementos relevantes son las denominadas máquinas de transformación que permiten ir derivando un modelo a partir de otro.

Dentro de las tecnologías involucradas en esta línea está el lenguaje unificado de modelado UML, lenguajes de restricciones de modelado OCL, lenguajes de especificación de metamodelos, lenguajes extensibles de interoperabilidad, XML y lenguajes de transformaciones XSLT.

Los últimos resultados de investigación en torno a MDD van por la línea de aplicaciones, por ejemplo para el desarrollo de simulación de trabajo colaborativo, Implementación de protocolos relacionados a salud como parte de plataformas de desarrollo de software, Implementación de estándares geoespaciales en Sistemas de Información vía MDD, Diversificación de la oferta en aplicaciones web orientadas al mercado de servicios entre muchas diferentes aplicaciones.

Los principales desafíos de esta línea de investigación en el CEIS son transferir procedimientos y tecnologías a la industria local. La línea de investigación va por proponer y adaptar metodologías para la adecuada absorción en la industria de software regional y  nacional. Un partner relevante para cumplir este objetivo es el Departamento de Ingeniería de Conocimiento de la Universidad de Viena quienes tienen la experiencia de haber desarrollado una herramienta de modelado y haber generado un spin-off a nivel europeo en empresas de pueden soportar metamodelado.