Ingeniería de Software
La línea de Ingeniería de Software se ha dedicado, desde su creación en 1992, al desarrollo de principios de ingeniería, métodos, herramientas
y técnicas cuya finalidad es producir software de calidad. En este sentido, la actividad del Grupo de Ingeniería de
Software es totalmente acorde con el objetivo de la Ingeniería de Software al intentar especificar, en forma precisa,
la estructura y el comportamiento de sistemas y su implantación, las actividades que aseguren el cumplimiento de las
especificaciones y metas del mundo real, así como la evolución de sistemas en el tiempo y a través de familias de
sistemas. Como tal, la ingeniería de software es útil principalmente en el desarrollo intensivo de sistemas de
software, grandes y complejos.
Profesores de la línea de Ingeniería de Software
La ingeniería de software es un área muy grande y que aborda muchas temáticas, que van desde el modelado de negocios
para determinar los requisitos de un sistema, hasta las pruebas funcionales y no funcionales de los sistemas de
software desarrollados. Es por esta razón que la línea de Ingeniería de Software eligió algunos de los temas de
mayor impacto y aplicación práctica de esta disciplina, los cuales constituyen las líneas de generación del
conocimiento:
Áreas de investigación
- Reingeniería, Refactorización y Transformación de software
- Arquitecturas Orientadas a Servicios
- La Nube Computacional
- Calidad de Software
- Ingeniería de Procesos de Desarrollo de Software
- Herramientas de Soporte al Desarrollo y Modelado de Software
- Tecnología Digital para la Educación
- Ingeniería de procesos y Aplicaciones Novedosas de Tecnologías de Información
- Ingeniería de software aplicada a Big Data
• Reingeniería, Refactorización y Transformación de software
Esta línea consiste de la eliminación de código mal formado en sistemas existentes, la transformación de sistemas
existentes hacia nuevas plataformas, para la obtención de marcos de componentes o servicios de software de dominios
de aplicaciones, a partir de procesos de reingeniería y refactorización de software legado. El objetivo es ampliar
el tiempo de vida útil del software existente en las organizaciones empresariales, industriales, de gobierno y
académicas, la recuperación de la inversión en su desarrollo y el control de su evolución en el tiempo. Uno de
los proyectos más recientes de esta área es el SR2-Refactoring (Refactorización de software Legado integrado al
Sistema para Reuso de Software).
• Arquitecturas Orientadas a Servicios y Microservicios
Esta es una de las líneas de investigación más novedosas hoy en día, ya que la orientación a servicios es el paradigma
dominante para la programación de aplicaciones que requieran exponer parte de su funcionalidad a usuarios externos.
Actualmente es posible encontrar el paradigma orientado a servicios en diferentes etapas del desarrollo de software,
desde los modelos de negocios hasta la implementación de sistemas.
Uno de los proyectos específicos de esta área es la Transformación Automática de Código Orientado a Objetos hacia
Servicios Web y Microservicios. El Grupo de Ingeniería de Software ha trabajado durante varios años en crear una
infraestructura, física y de software, para convertir al CENIDET en un proveedor de servicios al resto de la comunidad tecnológica.
Clasificación y selección de servicios Web utilizando Recomendación Basada en Calidad |
 |
|
• La Nube Computacional
La Nube Computacional se ha convertido en un nuevo paradigma tecnológico ampliamente utilizado por la industria de las tecnologías
de información y telecomunicaciones, debido la facilidad que aporta en la oferta de servicios sobre demanda, elasticidad, flexibilidad
y suministro de recursos de cómputo. El Software como Servicio de la Nube Computacional (SaaS), es el tipo de software que resulta hoy
día un medio importante para el desarrollo de tareas de los procesos de negocios, propiciando impactos positivos en clientes, así como
ventajas competitivas de negocios a proveedores y desarrolladores de servicios.
Para la fabricación o personalización del SaaS de forma efectiva, es importante que los proveedores controlen de manera correcta las
características de calidad de éstos como son: reuso, composición, adaptabilidad y elasticidad de servicios atómicos o microservicios
así como los servicios de software compuesto. Se desarrolló un proyecto que propone un modelo de orquestación dinámica de servicios,
cuyo objetivo es verificar, en tiempo de ejecución, la disponibilidad real de los servicios atómicos o microservicios del flujo de trabajo
que componen al SaaS, y que permita reconstruirlo con aquellos servicios atómicos que cumplan con la disponibilidad necesaria para efectuar
en tiempo y forma los requerimientos del cliente.
• Calidad de Software
Es importante conocer la calidad como una filosofía de trabajo en donde se aprenda a definir que es el objeto
que se quiere medir y a especificar cuáles son las características de ese objeto desde el punto de vista del
desarrollo y definir cómo pueden medirse esas características durante el proceso de desarrollo.
Gran parte de las investigaciones miden la calidad sobre todo de los productos cuando estos ya se desarrollaron,
en lugar de hacerlo durante el desarrollo. Cuando un desarrollador pueda definir con precisión el objeto a medir,
las características a medir y como medirlas, estará estableciendo su competencia en cuanto a calidad de software,
es decir, entiende el qué y sabe el cómo.
Figura 1 |
Figura 2 |
 |
> |
La Figura 1 corresponde la definición de elementos acerca de un videojuego, mostrando de forma explícita las
características que tiene un videojuego. En la figura 2, se presenta un segmento de cómo los atributos de calidad
entendibilidad y usabilidad, pueden relacionarse con un producto de software que es un videojuego. Al final resulta
un conjunto de atributos y métricas que determinen la calidad de un videojuego. En el ejemplo, el requerimiento es
medir la jugabilidad.
• Ingeniería de Procesos de Desarrollo de Software y sus Datos Históricos
En esta línea se investigan maneras de desarrollar software orientadas a planificación y maneras ágiles de
desarrollar software. Una de estas maneras de desarrollar software, en la que se ha trabajado es el AGD,
un Método de Desarrollo Arquitectónico en Grupo. El AGD es un método que da más importancia a los productos
de trabajo (modelos) y que subordina el proceso en relación a los artefactos que se obtienen. Para lograr
sinergia cuando se integran, en un proceso sistémico, los modos apropiados de trabajo en grupo: Equipo,
Colaborativo, Cooperativo y Control.
El uso de datos históricos ofrece, a los interesados en el desarrollo de software, información pertinente y
actualizada. Los interesados en el desarrollo de software usan varios repositorios de software (Ejs. Sistemas
de control de versiones, rastreadores de defectos, y archivos de correos electrónicos), para compartir comunicar
y respaldar información relacionada a los proyectos de software.
Caso de estudio |
 |
|
Aunque puede haber abundante información en los repositorios de software, se dificulta la extracción exitosa de
información por la necesidad de analizar simultáneamente varios repositorios y combinar sus datos, relacionándolos
con eventos del desarrollo de software. Para esto se aplican técnicas de minería de datos, originalmente
desarrolladas para analizar el proceso de negocios.
Caso de estudio |
 |
|
• Herramientas de Soporte al Desarrollo y Modelado de Software
En esta línea se construyen herramientas de modelado y generación automática de código a partir de procesos de
Ingeniería Directa, así como de la obtención de la documentación y de los modelos a partir de procesos de Ingeniería
Inversa.
Caso de estudio |
 |
|
El modelado se orienta a subir el nivel de abstracción de sistemas físicos, y mejorar la productividad, mediante el
uso de lenguajes que incluyen modelos (que representan elementos del mundo real), metamodelos (para describir la
estructura de los modelos) y semántica de lenguajes; junto con transformaciones entre lenguajes; combinados con
lenguajes de dominio específico (DSL). Este tipo de desarrollo permite tratar la complejidad de la plataforma y
requiere un proceso asociado con los lenguajes y las transformaciones.
Caso de estudio |
 |
|
• Tecnología Digital para la Educación
La tecnología ha modificado la demanda de habilidades para el trabajo y generando cambios en los procesos de
producción, ampliando las cadenas de valor global, generando ubicuidad en los puestos de trabajo, así como cambios
en la forma de trabajar.
En la organización y gestión de procesos educativos en los que se utilicen tecnologías digitales, es importante
considerar tanto los entornos virtuales de aprendizaje como los recursos educativos y la manera como se entregan
en los diferentes sistemas de gestión de aprendizaje, cuya función principal se centra en gestionar contenidos
creados por fuentes diferentes.
Los proyectos de investigación se relacionan con la creación, administración, reusabilidad y calidad de los
servicios web de aprendizaje, así como, la entrega de recursos de aprendizaje para la capacitación laboral y su
impacto en la Industria 4.0.
Actualmente consideramos que el sistema gestor de aprendizaje idóneo para la integración de servicios Web de
aprendizaje es Moodle. Así, se determinaron los requerimientos generales para el desarrollo de la extensión o
plugin y se integró, con la arquitectura que se muestra en la figura siguiente.
Caso de estudio |
 |
|
• Ingeniería de Procesos de Negocio y Tecnologías de Información (9)
En esta área se realizan desarrollos tecnológicos novedosos, en los cuales se aplican directamente los principios,
modelos, técnicas y herramientas de la ingeniería de software (IS), así como infraestructura tecnológica de soporte
al desarrollo de software desarrollada en el área de IS para la construcción de sistemas que resuelven problemas
específicos de empresas externas al CENIDET.
Caso de estudio |
 |
|
• Ingeniería de software aplicada a Big Data
Big Data sobrepasa los recursos actuales de software y hardware disponibles debido a su volumen, velocidad y variedad.
Desde la perspectiva de la ingeniería de software, es necesario desarrollar o adoptar nuevos procesos de desarrollo de software innovadores que puedan incorporar y abordar todos los problemas y desafíos relacionados con Big Data.
Big Data e Ingeniería de Software |
 |
|