Areas de Investigación
1. Ingeniería de Aplicaciones Web
En la actualidad, una porcentaje muy significativo de proyectos de desarrollo de software tienen que ver con las llamadas aplicaciones Web. Estas aplicaciones tienen un origen en las páginas Web simples o sitios Web con algo de contenido dinámico pero han evolucionado hasta convertirse en piezas de software bastante complejas. Esto hace posible por ejemplo no solo solicitar información sino que efectuar transacciones directamente desde un browser. Las arquitecturas cliente-servidor de los años 80's y 90's están siendo reemplazadas por soluciones de 3 capas llamadas también de cliente delgado en que la capa de presentación es manejada por un browser standard y la capa intermedia por un servidor de aplicaciones.
El desarrollo de estas aplicaciones presenta algunos desafíos especiales:
- son especialmente difíciles de mantener
- hay una presión de tiempo aún mayor
- los aspectos de usabilidad son cruciales
- muchas tecnologías disponibles que cambian día a día
- la arquitectura es relativamente compleja
- deben interactuar diseñadores gráficos con programadores
- deben ser altamente escalables
- programadores generalmente poco capacitados
El objetivo de la investigación en esta área es proponer procesos de desarrollo, mecanismos de especificación y arquitecturas de software que permitan construir aplicaciones robustas, extensibles y confiables con el presupuesto asignado y en los plazos estipulados.
2. Diseño de Software, Patrones y Frameworks
Tal vez la actividad que más se
identifica como perteneciente a la esencia de la
Ingeniería es la de diseño. El estereotipo más común
de un ingeniero muestra a una persona observando o
manipulando complejos planos o diagramas de los
artefactos que están siendo construidos. Un buen
ingeniero de software debe también diseñar el software
antes de que éste sea construido, idealmente razonando
en un lenguaje gráfico de alto nivel independiente del
lenguaje de programación a usar en la
implementación.
El producir un diseño que exhiba características deseables de calidad requiere de muchos años de experiencia. Una manera muy promisoria de lograr buenos diseños con menor experiencia es el uso de patrones de diseño. Un patrón de diseño muestra una solución general a un problema recurrente o común por lo cual es en cierto modo una especie de experiencia encapsulada. Un ingeniero de software que conozca en profundidad un número de patrones de diseño será capaz de generar diseños comparables a los de gente de mucha experiencia.
A veces no hay tiempo suficiente para construir una nueva aplicación (casi siempre) desde cero. Lo que se requiere es una especie de aplicación genérica capaz de ser convertida fácilmente en la aplicación requerida mediante un enfoque similar a como uno utiliza una presentación modelo o plantilla para producir una presentación en PowerPoint o una carta modelo en Word. Esta aplicación modelo se refleja en un conjunto de clases interconectadas entre sí. La generación de la aplicación involucra escribir sólo algunos métodos adicionales, reescribir algunos otros y posiblemente agregar algunas clases más específicas que las suministradas. Esta aplicación genérica se denomina framework.
La investigación en esta área se centra en
- estudiar la forma de hacer más efectivo el trabajo con
patrones por ejemplo mediante la construcción de
herramientas, la generación de taxonomías y catálogos, etc.
- estudiar metodologías y procesos para producir frameworks
de aplicación
- estudiar la relación entre frameworks y patrones
(generación e ingeniería en reversa)
- estudiar y proponer procesos de desarrollo de frameworks
- estudiar y proponer procesos de desarrollo de
aplicaciones basados en frameworks