RISCO- Red de Ingeniería de Software- Colombia
Plan de Proyectos
El objetivo de este documento es concretar proyectos para ser realizados por la Red de Ingeniería de Software-Colombia RISCO. Estos proyectos han sido definidos alrededor de los objetivos y estrategias definidos por RISCO en el documento RISCO- Definición de agosto de 1997.
Los siguientes proyectos van encaminados a mejorar la enseñanza de la Ingeniería de software, ya sea en cursos específicos sobre el tema o en aspectos para ser incluidos a lo largo de los cursos de la carrera.
Entre las estrategias definidas para alcanzar este objetivo están la capacitación y actualización permanente de profesores y la elaboración de material de apoyo a la enseñanza así como la realización de talleres docentes.
En nuestro medio, con frecuencia confundimos la ingeniería de software con simples cursos de aplicación de productos informáticas que no trascienden la selección, instalación y adaptación de tecnologías existentes en el mercado para ser utilizadas en alguna entidad. Asimismo, en las universidades no siempre reconocemos que la ingeniería de software va mucho más allá de una mera exposición discursiva sobre los diferentes métodos existentes para construir software y evitamos o relegamos a un segundo plano, la necesidad de promover actividades de aprendizaje y práctica grupal sostenida y continua a lo largo del desarrollo del curriculum del programa de ciencias de la computación.
La tarea de enseñar a producir software se constituye en un verdadero desafío por los múltiples aspectos que están involucrados en ella. En primera instancia, se requiere el esfuerzo adicional y simultáneo de que profesores y estudiantes realicen propuestas, investiguen y experimenten, trabajando en equipo para definir esquemas de cooperación, colaboración y sincronización entre todos los involucrados. Además, cada etapa del trabajo implica lograr una definición y diseños claros, precisos y metódicos, expresados en documentos que requieren un uso competente de lenguajes formales, lo cual permite llegar a la siguiente fase: la definición correcta de los procesos requeridos para el desarrollo del software. En cada aspecto se deben ir desarrollando las herramientas que permitan realizar las tareas de manera profesional. Por otro lado, enseñar el tema requiere, además de lo anterior, habilidades y destrezas en el manejo de grupos en los cuales cada persona debe aprender de los propios errores y colaborar en la identificación de los errores de los demás, asumiendo responsabilidades individuales y compromisos con el grupo.
El propósito de este proyecto de capacitación y actualización es el de realizar diversos seminarios-talleres sobre temas relacionados con los programas de sistemas y específicamente con la ingeniería de software. Estos seminarios deben ser un espacio de conocimiento y reflexión, frente a los desafíos actuales de la ingeniería de software y de los procesos de enseñanza-aprendizaje con miras a la generación de una cultura de construcción de software en sus respectivas instituciones en Colombia.
Evaluar y definir el curriculum de la carrera de sistemas relacionado con el área de Ingeniería de software
Incluir en sus cursos de la carrera aspectos de Ingeniería de Software los temas tratados en los seminarios.
Definir prácticas de los cursos de Ingeniería de Software utilizando ambientes adecuados siguiendo estándares internacionales de calidad.
Fomentar en dichas práctica, el trabajo en grupo y la interacción con los estudiantes.
Seminarios donde se estudian contenidos de cursos, metodología de enseñanza, utilización de herramientas como apoyo a la enseñanza.
Los seminarios están divididos en dos grupos. El primero pretende cubrir temas considerados básicos, según los diferentes estudios curriculares y los resultados del estudio realizado por la ACOFI sobre la carrera de sistemas. El segundo grupo pretende cubrir temas de más actualidad.
Áreas básicas de ciencias de la computación:
Contar con buen material para apoyar la docencia es fundamental para garantizar su calidad. En el caso de las áreas relacionadas con la Ingeniería de Software este material de apoyo debe permitir que el estudiante por una parte, desarrolle su capacidad y fomente su creatividad para construir software y, por otra, lo haga siguiendo las pautas metodológicas y los estándares de calidad internacionales requeridos.
El proyecto MULTIVERSIDAD propone la construcción de múltiples bibliotecas de software que funcionen en ambientes de programación multimediales (musicales, gráficos, procesadores de imagen y color) que hagan pleno uso de los recursos con que cuentan los computadoras hoy en día para atraer la atención y el interés del estudiante y le permitan reutilizar los componentes de dichas bibliotecas como cajas negras de una manera progresiva y sistemática. Este enfoque permitirá la enseñanza simultánea de diferentes áreas del saber (música, principios estéticos, artes gráficas, temas en las diferentes ciencias exactas y naturales) y de los principios básicos y fundamentales de la ciencia de computación y en general de la informática.
Existen muchas artes y disciplinas con temas de alto contenido metódico y algorítmico que se prestarían para el doble propósito de enseñar los principios de la programación y construcción de software además de la introducción y culturización del estudiante en diferentes áreas del arte y el conocimiento.
Se trata de que con este enfoque, los estudiantes comiencen a construir aplicaciones significativas que los inciten a dar sus primeros pasos en actividades creativas y de investigación en múltiples artes y disciplinas. Su tarea en un principio consistirá en combinar los componentes de las bibliotecas y ensamblar diferentes sistemas con ellos. A medida que los estudiantes progresen, se dará un proceso de apertura paulatina de las "cajas negras" . Los estudiantes se sentirán inclinados e interesados en comenzar a mirar dentro de la componentes mismas. Por múltiples razones, esta estrategia de enseñanza dará lugar a una introducción a los retos y satisfacciones del desarrollo de software definitivamente superior a los ejemplos de juguete que tradicionalmente han constituido parte integral de los cursos de introducción a la construcción de software.
El objetivo del taller de software es que los estudiantes construyan software de calidad siguiendo procesos definidos, medibles, evaluables y controlados. Para que esto sea posible, se requiere contar con material de apoyo que de soporte a las distintas actividades. Si se toma como marco de referencia las áreas claves de proceso definidas en el nivel 2 del CMM, el material de apoyo debe ayudar a ponerlas en práctica durante la construcción del software. Estas áreas son:
El objetivo del Laboratorio de Estructuras de Datos (LED) es desarrollar un conjunto de herramientas computacionales de apoyo a la enseñanza de la programación en el tema de algorítmica de estructuras de datos en memoria principal. Estas herramientas soportan el manejo de vectores, matrices, listas encadenadas, pilas, colas, árboles binarios, árboles ordenados, árboles balanceados, árboles n-arios, grafos, tablas de hashing, etc.
Dicho laboratorio debe permitir animar los algoritmos de manejo de estructuras de datos, permitiendo al estudiante su visualización y comprensión. Este debe incluir: editor de texto, compilador del lenguaje, depurador gráfico, intérprete gráfico del código, generador gráfico de datos de prueba, tutoriales, herramientas de medición de tiempo, herramientas de validación de estilo, formateadores de texto, etc. Se espera que el estudiante pueda desarrollar cualquier rutina (iterativa o recursiva) de manejo de estructuras de datos y evaluar su funcionamiento de manera gráfica, para cualquiera de las estructuras de datos planteadas anteriormente.
El estudio de tipos abstractos de datos (TADs) es fundamental en el aprendizaje de estructuras de datos y su utilización desde un punto de vista formal, con lo que se tiene la posibilidad de construir software correcto de manera sistemática. Los TADs pueden considerarse como módulos de programación independientes, consistentes en estructruras de datos provistas de operaciones que las manipulan. Su importancia es reconocida si se habla de programación modular o, más modernamente, de programación orientada por objetos.
El objetivo de este proyecto es desarrollar ManTa (Manejador de Tipos abstractos de datos) un ambiente de diseño que debe permitir la definición formal de un TAD, la verificación de propiedades semánticas interesantes de la estructura de datos subyacente y la implementación (automática y/o guiada por el usuario) del diseño en un lenguaje de programación. De esta forma se tendrá la posibilidad de generar código fuente de manera automática, manteniendo la semántica y corrección de las estructuras de datos cuyo diseño haya sido previamente verificado en el ambiente.
La Biblioteca Real de Software: Haciendo realidad la utopía de la Reutilización de programas.
La reutilización es una condición indispensable para cualquier concepto de progreso en software. De ninguna manera una condición suficiente pero sí, una sin la cual las otras: mejores métodos, mejores herramientas de desarrollo, hardware más rápido, enfoques más formales, técnicas superiores de administración no pueden satisfacer sus promesas. Mientras los constructores de software continúen consumiendo su tiempo en sinfines de variantes individuales de los mismos patrones básicos de programación el estado del software mundial no cambiará mucho, sin importar la cantidad de dinero que se invierta en grandiosas iniciativas estratégicas para la tecnología de la información.
Aunque en la literatura especializada en software, se acostumbra rendirle homenaje a la reutilización, muy pocas referencias mencionan bibliotecas bien conocidas de software y muchas menos proporcionan orientación sobre para una adecuada reutilización.
La Biblioteca Real de Software es un proyecto que se propone una reconstrucción intelectual y sistematica de las estructuras fundamentales de software inspirandose en el ejemplo de los naturalistas del siglo dieciocho Lineo y Buffon, quienes emprendieron esta clasificación para plantas y animales haciendo posible la definición como ciencia de la Zoología y la Botánica. Una empresa de esta naturaleza en nuestro país resulta fundamental para el despegue y consolidación de comunidades productoras de software de gran escala.
Entre las temáticas más básicas que deben orientar la construcción de bibliotecas de software se encuentran:
La biblioteca de estructuras de Datos: La más importante y que abarcaría algoritmos y estructuras de datos fundamentales organizados con una cuidadosa estructura taxonómica como la de Lineo.
La biblioteca de Iteradores: proporcionaría facilidades para realizar recorridos por ciertas estructuras de datos (las compuestas de partes)
La biblioteca de Visión: Permitiría construir sistemas interactivos avanzados apoyandose en interfaces gráficas de usuario.
La biblioteca de análisis sintáctico. La biblioteca de Persistencia: mecanismos de persistencia de propósito general
Material de apoyo a la labor de construir bases históricas de experiencias en desarrollo de software así como apoyar la utilización de métodos de estimación de esfuerzo en el desarrollo de proyectos.
Para que estos métodos de estimación sean aplicables y válidos se requiere contar con datos históricos reales de esfuerzo invertido en construcción de software.
La dimensión de investigación y desarrollo es muy importante para cumplir la misión de RISCO de mejorar la práctica de la ingeniería de software para apoyar la industria nacional. El objetivo principal en esta dimensión es el acercamiento de la Universidad y las empresas para lograr una sinergía que nos permita estar mas al tanto de los problemas industriales y propiciar una transferencia de tecnología adecuada y oportuna.
Se han identificado varias líneas de investigación cuyos proyectos tienen una aplicabilidad inmediata en la industria. Estas líneas, que consideramos estratégicas para el desarrollo de la industria son: Calidad en el proceso de desarrollo de Software, Comprensión y re-estructuración de programas y reutilización de componentes de software.
Estudiar y definir la manera de implementar en las empresas de Colombia los estándares y normas de calidad de procesos de construcción de software. En particular, se quiere poder definir planes de mejoramiento de procesos en empresas pequeñas de construcción de software.
Uno de los objetivos de definir modelos de procesos de software es que estos puedan ser usados para guiar las actividades de los usuarios. El propósito de este proyecto es pretende desarrollar ambientes cooperativos que faciliten la construcción de software. Aspectos como la integración y la inter-operabilidad entre herramientas son parte de la problemática de este proyecto.
La evolución tecnológica es un reto para la industria de software. Una tecnología que se acepta como buena para el desarrollo de nuevos sistemas, no lo es tanto si no puede ser aplicada a sistemas existentes. A través de esta línea se podrá hablar de modernización y renovación. Una aplicación de este proyecto es estudiar la problemática generada en el software existente con el cambio de siglo (el problema "del año 2000") y espera crear alianzas con empresas para aportar soluciones en el medio colombiano.
El objetivo de este proyecto es mejorar la labor de mantenimiento de Software. Según diversos estudios, el 80% de la tarea de mantenimiento (corrección, adaptación, extensión de programas) se gasta en comprender los programas (código mal estructurado, sin documentación, en diversos lenguajes, sin estándares, etc.). este proyecto pretende crear herramientas visuales y de interrogación que faciliten el entendimiento de los programas.
Reutilizar en lugar de reinventar cada vez es una preocupación mayor. Se pretende proveer soluciones a problemas comunes reutilizando esquemas de arquitectura de software, de diseño y de programas.
RISCO debe ser un medio de divulgación de información referente a procesos, avances y tecnologías desarrolladas dentro de la comunidad de ingeniería de software en el mundo.
Editar una revista que reúna resultados de proyectos, casos de estudio de los integrantes de la Red o personas externas invitadas para tal fin. Esta publicación deberá contar con un comité editorial cuya responsabilidad será velar por la pertinencia y calidad de los artículos publicados.
Mantener actualizado un sitio web sobre RISCO con la información acerca de su misión, visión, objetivos, estrategias, actividades, miembros y con enlaces a otras redes, universidades, centros de investigación, contactos externos, eventos, etc.