Orientando Sistemas de Programas a Objetos: Un segundo experimento docente

Alejandro Teruel
Departamento de Computación y T.I.
Universidad Simón Bolívar

14 de junio de 2000


Tabla de contenido

1. Introducción

2. Las nuevas condiciones del segundo experimento

    2.1 Adopción de un nuevo libro de texto.
    2.2 Adopción de la notación UML y de la metodología RPM.
    2.3 Integración de Sistemas de Programas con su Taller.
    2.4 Mayor cobertura de la Programación Orientada por Objetos.
    2.5 Mayor cobertura de patrones y principios de diseño.
    2.6 Atención a la evaluación de los diseños propuestos.
    2.7 Explicitación de elementos de Control de Proyectos.
    2.8 Cobertura débil de pruebas (testing).
3. La descripción del curso
3.1 Programas y calendarios.
3.2 La evaluación del curso.
3.3 Recursos.
3.4 El proyecto de desarrollo.
 
4. El desarrollo del curso
    4.1 La fase de entrenamiento.
    4.2 La fase de elicitación de requerimientos.
    4.3 La fase del modelado de uso.
    4.4 La fase del modelado estructural.
    4.5 La fase de diseño de la interfaz del sistema.
    4.6 La fase del modelado del comportamiento.
    4.7  La fase del modelado de la interacción.
    4.8 La fase de implementación.
    4.9 La entrega del sistema.
    4.10 Observaciones sobre la dinámica de grupos.
     
5. Resultados del experimento
5.1 Logros
5.1.1 ¿Qué fue lo que más le gustó a los estudiantes?
5.1.2 ¿Qué fue lo que le pareció más útil a los estudiantes?
5.2 Contratiempos y fallas
5.2.1 ¿Qué fue lo que menos le gustó a los estudiantes?
5.2.2 ¿Qué fue lo que le pareció menos útil?
5.2.3 En un espectro entre motivante (por lo novedoso y útil) y desmotivante (por la densidad y quizás, superficialidad de cobertura de los tópicos) , ¿dónde ubica esta asignatura?
5.2.4  ¿Qué debe mejorarse? ¿Eliminarse? ¿Expandirse? ¿Cambiar de orden?
5.2.5 ¿Qué recomendaciones le haría al profesor para que mejore el curso?
5.2.6 Otras observaciones.
6. Conclusiones y recomendaciones

Agradecimientos

 

1. Introducción

En el trimestre Enero-Abril de 1999, los profesores Alejandro Teruel, Víctor Theoktisto, Sandra Zabala y Marilenis Olivera, la ayudante docente Carolina Martínez y el preparador Pedro García reorganizamos experimentalmente las asignaturas de Sistemas de Programas (CI-3711) y Taller de Sistemas de Programas (CI-3791) con el objetivo de basarlos en la tecnología orientada por objetos.

Los cursos se fundamentaron sobre la metodología OMT de desarrollo de software orientado a objetos (Object Modeling Technique) enriquecida con el modelo de uso de Ivar Jacobson y patrones (patterns). En el Taller los estudiantes se agruparon en equipos de entre 10 y 20 personas y ejercitaron OMT  en el contexto del desarrollo de un proyecto programado en Java.

Los detalles de este primer experimento docente se encuentran en Orientando Sistemas de Programas a Objetos: Un Experimento Docente. En base a las recomendaciones reportadas, el profesor Alejandro Teruel llevó a cabo en el trimestre Abril-Julio de 1999 una nueva y aún experimental versión del curso, con el apoyo del preparador Pedro García.

Las características principales del nuevo curso fueron:

  1. Se conservó el objetivo del primer experimento en cuanto a basar el curso en la tecnología orientada por objetos.

  2.  
  3. Se adoptó como libro de texto, el libro de C. Larman Applying UML and Patterns (Prentice-Hall, 1998).

  4.  
  5. Se adoptó la notación UML y la metodología incremental para la captura, análisis y diseño orientados a objetos  descrita en el texto antes citado. Esta metodología incluye:

  6.  
    1. La captura informal de requerimientos y su estructuración en:
    2. El modelo de uso;

    3.  
    4. El modelo estructural (simplificado);

    5.  
    6. El modelo de comportamiento del sistema (diagramas de secuencias de eventos del sistema y los contratos de eventos del sistema);

    7.  
    8. El modelo de interacción (diagramas de colaboración entre clases).
     
  1. Se integraron conceptualmente las asignaturas Sistemas de Programas con el Taller de Sistemas de Programas a pesar que administrativamente las dos asignaturas siguieron separadas y que un porcentaje significativo de estudiantes cursaron una sola de las asignaturas.Entre los mecanismos de integración resaltaron el uso de un mismo proyecto de desarrollo para las dos asignaturas, equipos de desarrollo formado por estudiantes inscritos en ambas asignaturas y en una sola de ellas y un elevado porcentaje de evaluación conjunta para ambas asignaturas.

  2.  
  3. Se dedicó más tiempo a la programación orientada por objetos.

  4.  
  5. Se incrementó la cobertura de patrones y se introdujeron algunos principios de diseño recomendados por el texto adoptado.

  6.  
  7. Se prestó especial atención a la evaluación de los diseños propuestos.

  8.  
  9. Se explicitaron algunos elementos de control de proyectos que se han venido trabajando en el Taller de Sistemas de Programas tales como:
  10. Se debilitó la cobertura del tópico de pruebas (testing).
Estas características plasman muchas de las recomendaciones formuladas al finalizar el primer experimento. La única característica que contradice esas recomendaciones es la última; esencialmente se agravó una falla que ya estaba presente en el primer experimento.

En balance, los ajustes realizados fueron positivos y alentadores mas no definitivos. Opino que el curso, al igual que su predecesor inmediato, resultó altamente motivante, por cuanto los estudiantes se entusiasmaron al sentirse ubicados en una tecnología de punta --o al menos percibida como tal-- en un ambiente integrador de mucha más colaboración e intercambio entre pares  y que perciben  como muy cercano a la realidad de su futura vida profesional. El curso integra los tópicos cubiertos mejor que su predecesor y los cubre a un nivel más cónsono con el nivel alcanzado por el estudiante.

En este reporte presentaré:

  1. Las nuevas condiciones del segundo experimento;
  2. La descripción del curso;
  3. Los resultados alcanzados;
  4. Las recomendaciones que se derivan de la experiencia.

2. Las nuevas condiciones del segundo experimento

Comenzaré por describir en más detalle cada uno de las novedades que caracterizaron al segundo experimento.
 

2.1 Adopción de un nuevo libro de texto.

El libro de texto principal utilizado para el primer experimento docente fue el libro de J. Rumbaugh, M. Blaha, W. Premerlani, F. Eddy y W. Lorensen titulado Object-Oriented Modeling and Design (Prentice-Hall, 1991). Este libro resultó insatisfactorio por cuanto:


El libro de C. Larman Applying UML and Patterns corrige  estos defectos y tiene un nivel  más cónsono con el nivel de los estudiantes. Su adopción como libro de texto puede considerarse exitoso en lo que se refiere a la cobertura de los tópicos de análisis y diseño de software orientado por objetos.
 

2.2 Adopción de la notación UML y de la metodología RPM

El cambio notacional que conlleva pasar de la notación de OMT enriquecido con casos de uso a UML es trivial y no amerita mayores explicaciones ni justificaciones que la de ubicarse en un estándar más amplio y actual.

Es mucho más significativo el cambio de la metodología OMT (Object Modeling Technique) a la metodología RPM (Recommended Process and Models) presentada en el libro texto de C. Larman. El propio Larman aclara que:

This is not a new method, but a description of fairly common, recommmended process and models applied by practitioners and presented in other object-oriented analysis and design methods under varying names and with slight shifts in emphasis...
De hecho Larman considera que RPM es una metodología representativa de:
...best practices, basic activities and models in a development process for object-oriented systems based on an iterative and incremental, use case driven approach.
RPM constituye una metodología de análisis y diseño inspirado por y similar a metodologías como OOSE (Jacobson), OMT (Rumbaugh et al), Fusion (Coleman), diseño dirigido por responsabilidades (Wirfs-Brock) así como aportes de Booch, Martin y Odell. Considero que representa un buen (y coherente) punto de compromiso y balance entre estas opciones metodológicas.

Larman expone una metodología incremental e iterativa que comienza por la captura de requerimientos. Esta fase se estructura en los siguientes renglones:

Esta estructura es lo suficientemente rica como para introducir los estudiantes a la problemática típica de un buen proceso de elicitación de requerimientos, sin apabullarlos con ella, quedando motivados para tratar el tema en más profundidad en la cadena de Sistemas de Información.

Como el grueso de las metodologías orientadas a objetos, el núcleo de la metodología RPM consta de una serie de modelos que se proponen y evalúan. La multiplicidad de tipos de modelos es clave para analizar y diseñar el sistema final enfatizando diferentes criterios, así como es clave la consistencia y facilidad de interrelación entre los modelos. La analogía con los distintos tipos de planos y modelos de una obra civil (planos de fachada, planta, perfil y servicios)  o artefacto mecánico (modelo mecánico, termodinámico y eléctrico) es inmediato --un artefacto complejo no puede diseñarse bajo una sola óptica ni puede capturarse en un solo modelo.

El primer modelo que se construye en RPM es el modelo de uso, basado en los casos de uso propuestos por Ivar Jacobson. La identificación de los actores que interactúan con el sistema y la descripción informal pero estructurada de esa interacción son ejercicios importantes para el estudiante que no está acostumbrado a manejar con precisión la narrativa informal ni a analizarla.

El segundo modelo es el modelo conceptural (o estructural). Este modelo se basa en el diagrama estructural de las clases del dominio de la aplicación, donde se identifican y grafican las clases y las relaciones de herencia y asociación entre clases. Larman maneja nociones muy simples, casi operacionales, de relaciones entre clases, lo que es una ventaja importante, si se recuerda que los estudiantes del curso aún no han visto modelos de datos en general y el modelo E-R en particular en comparación con los diagramas manejados por Rumbaugh que incluyen relaciones adicionales de generalización y agregación.

Un paso simple pero muy necesario es la identificación de los eventos del sistema y sus diagramas de secuencias. En RPM este paso constituye una abstracción gráfica de los casos de uso, complementados por los contratos. Un contrato es una especificación de las responsabilidades asociadas al sistema para cada uno de los eventos exteriores que inciden sobre él. Siguiendo a Wirfs-Brocks, Larman exige que se expliciten las precondiciones, postcondiciones, excepciones  y efectos secundarios asociados a los eventos del sistema, así como exige enlazar los requerimientos a la reacción del sistema ante los eventos exteriores (requirements traceability).

Una vez explicitados los contratos, RPM sugiere que se elaboren los diagramas de colaboración entre los objetos que conforman el sistema de forma de cumplir con esos contratos respetando el modelo estructural de clases. Esta fase del diseño es sumamente rica y de manera muy natural Larman incorpora nociones de arquitectura de software, patrones orientados por objetos y principios de diseño.

En mi opinión la metodología es convincente, coherente y fluida. El texto incluye algunos tópicos "avanzados", entre los que incluye el modelo dinámico. Considero que este modelo escapa al alcance del curso.

Como metodología de desarrollo, RPM adolece de algunos defectos evidentes:

  1. Como metodología de análisis y diseño que es, ignora la problemática de validación (testing);
  2. No cubre adecuadamente la evaluación de opciones de diseño;
  3. No cubre aspectos básicos de control de proyectos.
Estos puntos serán desarrollados más adelante. A pesar de estos defectos, opino que desde el punto de vista pedagógico, RPM constituye una excelente introducción a la elicitación y análisis de requerimientos y al diseño orientado a objetos.
 
He revisado parcialmente la propuesta metodológica de los proponentes de UML (I. Jacobson, G. Booch y J. Rumbaugh: The Unified Software Development Process. Addison-Wesley, 1999) y  mi primera impresión es que es inferior a la propuesta de C. Larman. Parte de la razón puede atribuirse a la pomposa  y repetitiva redacción de este libro de Jacobson, Booch y Rumbaugh, parte a la ausencia de ejemplos concretos y el resto a una cobertura francamente superficial de tópicos claves. Adicionalmente el libro no parece del nivel adecuado para los estudiantes de mi curso. Del lado positivo,  hay algunos puntos innovadores que vale la pena rescatar de los escombros del libro: la identificación del actor iniciador de un caso de uso, la insistencia en incorporar la gestión del riesgo, el diagrama arquitectural del sistema y el diagrama de emplazamiento (deployment diagram).  En todo caso, la opinión definitiva queda pendiente hasta que culmine la revisión del libro.

 

2.3 Integración de Sistemas de Programas con su Taller

En el reporte previo argumenté que la asignatura Sistemas de Programas y Taller de Sistemas de Programas forman una unidad natural motorizada por la práctica del desarrollo (development-driven). Es decir, es el Taller quien empuja el curso. El próximo año, al entrar en vigencia el pensum nuevo, las dos asignaturas efectivamente se fusionarán, sin embargo, como parte de este segundo experimento se adelantó una fusión virtual.

La fusión consistió en tratar ambas asignaturas como una sola, realizando sesiones de práctica, laboratorio o teoría según los requerimientos dictados por el proceso mismo de llevar a cabo  un mismo proyecto de desarrollo de software en el que intervenían tanto los estudiantes inscritos en una de las asignaturas como aquellos inscritos en ambas. Se prestó particular atención a que los equipos de desarrollo, formados por 6 a 10 personas, tuvieran un núcleo de estudiantes que cursaran ambas asignaturas y que las responsibilidades de los miembros fueran cónsonas con su inscripción. Así los estudiantes que sólo cursaron el Taller de Sistemas de Programas tuvieron responsabilidades de programación que no fueron asignadas a los estudiantes que sólo cursaban Sistemas de Programas.

Es conveniente explicitar la distribución de estudiantes en las asignaturas: Nótese que el número total de estudiantes es bajo respecto a los estándares de la carrera. De 80 a 100 estudiantes toman las asignaturas anualmente, pero el grueso de los estudiantes las toma en el período anterior al que realizó este experimento.


Debo admitir que la logística de las clases fue complicada y el naufragio general fue evitado gracias a un extenso horario de consultas y a la dinámica misma de los equipos de desarrollo que, en general, supieron convertirse en equipos de estudio y de desarrollo. Los estudiantes más golpeados por este esquema fueron aquellos que sólo cursaron Sistemas de Programas. Sin embargo, la experiencia mostró que el esquema es viable y sigo convencido que es necesario para enfatizar el trabajo en equipo como parte importante de la formación de nuestros Ingenieros de la Computación. Evidentemente la fusión real de las dos asignaturas previstas en el cambio de pensum, solucionará muchos de los problemas que se presentaron, a condición que la nueva asignatura se estructure en secciones integrales de teoría y laboratorio con no más de veinte estudiantes por sección.
 

2.4 Mayor cobertura de la Programación Orientada por Objetos

Se dedicaron más sesiones de taller a introducir los mecanismos del lenguaje de programación Java así como algunas de las clases de las librerías de JDK (Java Development Kit), en relación al primer experimento. A pesar de esto,  los resultados no fueron muy satisfactorios.

Aprender los elementos de un lenguaje orientado por objetos como Java es una tarea relativamente fácil ya que el lenguaje per se es pequeño. El problema, como bien lo saben los proponentes de Smalltalk, surge cuando el programador debe enfrentarse con las librerías del lenguaje y adoptar el nuevo estilo de programación. Se decía que los elementos de Smalltalk podían aprenderse en una hora pero que aprender a programar en el estilo Smalltalk aprovechando las clases de sus librerías básicas se llevaba entre tres y seis meses.

Programar una interfaz sencilla en Java implica aprovechar las clases de las librerías AWT y Swing, , las cuales se basan en un modelo de programación reactivo a eventos, elaborado para permitir y estimular una clara separación entre la capa de presentación y la del dominio de la aplicación. Ni las clases ni el estilo ni la filosofía de diseño de la librería AWT o Swing es conocida por el estudiante o de facil dominio.

Hay definitivamente un problema tipo huevo y gallina --¿qué debe enseñarse primero, las clases para construir una interfaz o la filosofía de diseño de esas clases? Debo admitir que este problema sigue sin resolver y que la programación de las interfaces del proyecto se realizaron gracias a que algunos de los estudiantes ya traían conocimientos de Java (33% de los estudiantes que cursaron el Taller) o habían construido una interfaz gráfica, típicamente en Visual Basic, Pascal o Java (66% de los estudiantes que cursaron el Taller) , pero se realizaron irrespetando el grueso de  la filosofía de diseño de estas clases.
 
 

2.5 Mayor cobertura de patrones y principios de diseño

Se incrementó la cobertura de patrones y se introdujeron algunos principios de diseño recomendados por el texto adoptado. Los principios cubiertos fueron: Los patrones cubiertos fueron: En mi opinión faltó tiempo para que los estudiantes asimilaran correcta y completamente estos conceptos. Es probable que deben de reducirse el número de patrones cubiertos en esta asignatura, dejando el resto para la cadena recien creada de Ingeniería de Software.

Conviene advertir que el material del texto adoptado debe complementarse con el texto clásico en el área:

2.6 Atención a la evaluación de los diseños propuestos

Se prestó especial atención a la evaluación de los diseños propuestos en base a criterios como facilidad de uso, eficiencia, seguridad, complejidad, flexibilidad, auditabilidad y esfuerzo de implementación.

Esta atención está poco apoyado por parte del texto adoptado y diría que constituye la parte más dificil, característica, importante, artesanal y trabajosa del curso. Estoy convencido que el diseño se aprende analizando diseños sobresalientes, creando diseños propios y sometiéndolos a la crítica constructiva de un diseñador experto.

Para ello el aprendiz de diseño tiene que aprender a aceptar y aprovechar críticas y el maestro diseñador tiene que aprender a hacer críticas constructivas, explícitas y comprensibles. Es dificil, máxime cuando no hay una tradición crítica explícita en nuestra disciplina, salvo en lo que se refiere al criterio de eficiencia y, en menor y más reciente grado, facilidad de uso.
 

2.7 Explicitación de elementos de Control de Proyectos

Uno de los objetivos explícitos del curso pasó a ser aprender a trabajar en equipos de desarrollo. En el programa sinóptico del experimento se indica como tópico:
Introducción al trabajo en equipo, el control de proyectos y otros aspectos de la dimensión no técnica del desarrollo de software.
Para cubrir el tópico se explicitaron algunos elementos de control de proyectos que se han venido trabajando en el Taller de Sistemas de Programas tales como: El texto adoptado no cubre estos tópicos. El libro: presenta algunas observaciones interesantes específicas al desarrollo de software orientada a objetos, pero en muchos casos tuve que depender de mi experiencia y  mi (rudimentaria y deficiente) intuición de dinámica de grupos.
 
Entrenamiento en dinámica de grupos
Considero que los profesores de Computación requerimos entrenamiento en el manejo de la dinámica de grupos. Con miras a cubrir esta deficiencia solicité un curso de entrenamiento al Dpto. de Ciencia y Tecnología del Comportamiento de la Universidad Simón Bolívar quienes gentilmente nos armaron el curso de Formación de Grupos y Equipos Efectivos que coordinan actualmente en el trimestre Abril-Julio del año 2000 las profesoras Belinda Bozo y Rocío Meneses. También elaboro unas notas sobre técnicas de dinámica de grupos que podrían ser de utilidad. Un libro de enfoque muy práctico sobre el tópico es Team Leader's Problem Solver de Clay Carr (Prentice-Hall, 1996) ; las profesoras B. Bozo y R. Meneses completan su curso principalmente con lecturas del libro de Stephen Robbin titulado Fundamentos de Comportamiento Organizacional: Teoría y Práctica (Prentice-Hall Hispanoamericana, 1999).
Experiencias previas de los estudiantes en trabajo en grupo
Puede ser interesante indicar que si bien las asignaturas previas de la carrera concretan experiencias de trabajo en equipos de dos personas, 33% de los estudiantes encuestados del curso indicaron que habían tenido alguna experiencia en grupos de más de dos personas:

2.8 Cobertura débil de pruebas (testing)

Se debilitó la cobertura del tópico de pruebas (testing). Por un lado, la eliminación de los  modelos dinámicos del temario del curso, impidió el uso del material desarrollado en el primer experimento. Por otro lado, los retrasos en  la cobertura de los distintos modelos y en el desarrollo del proyecto impactaron la disponibilidad de tiempo para este tema.

Este sigue siendo el tema peor cubierto del curso y amerita un estudio más exhaustivo. En el trimestre Enero-Marzo del 2000, exploré el tema en el  curso recien aprobado denominado Ingeniería de Software 3.
 

3 La descripción del curso

3.1 Programas y calendarios

El programa sinóptico de la asignatura Sistemas de Programas fue:
Introducción a los problemas y métodos para desarrollar software de mediana envergadura. El modelo de la cascada y el modelo de desarrollo incremental. Íntroducción a la captura y análisis de requerimientos. Modelado de software. Diseño de software. La prueba (testing) de software. Introducción al trabajo en equipo, el control de proyectos y otros aspectos de la dimensión no técnica del desarrollo de software.
El programa detallado de Sistemas de Programas fue:
Introducción a la Ingeniería del software: El desarrollo de software de mediana envergadura, necesidad de trabajo disciplinado en equipo, etapas en el ciclo de vida del software, modelo de la cascada, modelo de desarrollo incremental, factores críticos, definición e importancia de la IS . Software orientado a objetos.

Análisis orientado a objetos: captura de requerimientos, roles del analista, el usuario y el patrocinador. Metas, funciones y atributos del software. El modelo de uso: actores, casos de uso. Análisis de requerimientos.

Modelado orientado a objetos: Necesidad de múltiples modelos. El modelo estructural: clases, atributos,
métodos, herencia y asociaciones. Diagramas de secuencias de eventos del sistema. Contratos. Diagramas de colaboración.

Diseño orientado a objetos:  Principios de diseño: experticia, acoplamiento y cohesión. Patrones: Observador (model-view-controller, publish-subscribe), iterador, estrategia, apoderado (proxy), decorador, fábrica abstacta y compuesto. Arquitectura de capas: presentación, aplicación, almacenamiento. Evaluación de diseños según criterios como facilidad de uso, eficiencia, seguridad, complejidad, flexibilidad, auditabilidad y esfuerzo.

Pruebas (testing): Definición. Barreras psicológicas. Planificación y seguimiento del proceso de pruebas.
Pruebas unitarias. Pruebas de integración. Pruebas de sistemas.

Documentación: Elaboración de manuales. El manual de instalación. El manual del usuario.

Control de proyectos: Nociones básicas de trabajo en equipo, roles (miembro, líder, editor técnico, webmaster, coordinador de reuniones), planificación, control, seguimiento, coordinación de reuniones, manejo de agenda, distribución explícita de tareas, identificación y manejo de riesgos, confidencialidad, relaciones con el cliente, estimación de tiempo, caminos críticos y análisis post-mortem

También puede consultar el calendario de Sistemas de Programas y el calendario del Taller de Sistemas de Programas.
 

3.2 La evaluación del curso

La siguiente tabla resume el mecanismo de evaluación de de los dos cursos. En Sistemas de Programas se manejaron seis renglones de evaluación (cinco tareas y una aprecicación sobre el grado de participación en clase) y en el Taller de Sistemas de Programas se manejaron nueve renglones. Cuatro de esos renglones fueron comunes a ambas asignaturas y correspondieron al desarrollo incremental de una primera versión del software Delta Pensum (en la tabla las actividades relacionadas con el este proyecto vienen precedidas por las siglas DP).
 
Tópico
Entrega
Valor(Teoría)
Valor(Taller)
Agrupamiento
Elaboración de un sitio www
 Semana 3
 
5%
Individual
Captura de requerimientos, modelo de uso
Semana 5
15%
  Grupos de 2-3
Programación en Java
Semana 4
10%
Grupos de 1-2
Proyecto DP: Fundar equipo para proyecto,  requerimientos, modelo de uso, modelo estructural y planificación de incrementos
Semana 6
20%
10%
Grupos de 4-6
DP: Eventos del sistema, contratos, diagramas de colaboración y diseño gráfico de la interfaz
Semana 7
20%
10%
Grupos 6-9
DP: Revisión de modelos, formatos de archivos y  diseño de algoritmo clave
Semana 8
5%
Grupos 6-9
DP: Revisión de modelos y rehacer diagramas de colaboración
Semana 9
10%
10%
Grupos 6-9
DP: Codificación, plan de pruebas, pruebas, instalación y manuales (entregas escalonadas)
Semana 12
25%
25%
Grupos 6-9
Apreciación por participación en clases
Semanas 2-12
10%
15%
Reportes  web de avance
Semanas 3-12
10%
Grupos 4-9

Para reducir el riesgo de copia de las tareas, en cada entrega de la tarea se seleccionaron varios estudiantes al azar para ser interrogados. Si no estaban presentes o no lograban explicar satisfactoriamente lo que habían escrito recibían una nota de cero por la tarea.
 

3.3 Recursos

Los recursos utilizados en esta edición del curso fueron los siguientes:

3.4 El proyecto de desarrollo

En el curso se acometió el desarrollo de  una aplicación de apoyo a un cambio de pensum en la carrera de Ingeniería de Computación en particular y cambios de pensa en la USB en general. El proyecto y el software recibió el nombre de Delta Pensum.

El objetivo de Delta Pensum es permitirle al estudiante que vive un proceso de cambio de pensum determinar, a
partir de las asignaturas que tiene aprobadas en el viejo pensum:

Delta Pensum también debe apoyar al Coordinador y Asistente de la carrera en las consultas que al respecto le
puedan hacer los estudiantes.

El único incremento desarrollado completamente en el trimestre Abril-Julio 1999 (Delta Pensum 0.1.1) le permite sólo al Coordinador de la carrera realizar una consulta relacionado únicamente con los primeros dos objetivos. También se documentaron algunos aspectos de incrementos futuros (Delta Pensum 0.1 y Delta Pensum 1.0).

El desarrollo se llevó a cabo en paralelo con el proceso final de aprobación del cambio de pensum. En la novena semana del trimestre el Consejo Directivo de la USB aprobó el nuevo pensum para que entrara en vigencia para Septiembre 1999.  Por ende, desde el principio del proyecto se vivió con una fuerte presión para culminar el proyecto para la semana 10. En un momento crítico del trimestre opté por darle mayor prioridad a los aspectos pedagógicos del proyecto a costa de la posibilidad de culminar el producto a tiempo. El proyecto efectivamente no culminó a tiempo para el cambio de pensum de Septiembre pero se espera proseguir su desarrollo en la cadena de Ingeniería de Software con miras a lograr un producto útil y robusto.

4. El desarrollo del curso

4.1 La fase de entrenamiento

La fase de entrenamiento pasó de tres a cuatro semanas (cuatro sesiones de clase) en relación al curso anterior. La sesión de la primera semana fue dedicada a la familiarización con Internet, HTML y la elaboración de páginas www. El resto de las semanas fue dedicado a la programación en Java.

Durante esta fase, los estudiantes tuvieron que desarrollar dos tareas, a saber:

Pese al esfuerzo de reducir el tamaño de la aplicación, ésta resultó más trabajosa de lo esperado y ejercitó muy parcialmente los aspectos de la programación Java que se habían cubierto, por lo que a lo largo del curso se dictaron aproximadamente seis horas adicionales de tópicos en programación Java, la mayoría dedicadas al modelo de eventos y excepciones en Java, la librería Swing (interfaces gráficas) y algunas clases interesantes  adicionales de JFC (Java Foundation Classes) que se requerían para el proyecto (e.g. hashtable).
 

4.2 La fase de elicitación de requerimientos

Se realizaron ejercicios interesantes en clase y por correo electrónico basado en técnicas de role-playing. El profesor hizo las veces de tres hermanos que deseaban automatizar las operaciones de una juguetería nueva en un centro comercial costoso, mientras que los estudiantes jugaban el rol de equipos de analistas (3-4 personas por equipo) que intentaron capturar los requerimientos. Los hermanos eran dueños de una importadora tradicional  de juguetes y tenían enfoques diferentes de negocio: un hermano era innovador y pro-nuevas tecnologías, otro era conservador y más centrado en los problemas financieros y de seguridad y el tercer hermano tenía poco interés por los aspectos operacionales del negocio y más por la adquisición de mercancía en el exterior.

Este juego permitió mostrar muy gráficamente la compleja situación de elicitación de requerimientos en sus dimensiones financieras, de seguridad, competitivas, políticas y comunicacionales.

En general resultó muy popular entre los estudiantes, pero dado los objetivos limitados  del curso en cuanto a esta problemática, puede debatirse si no consumió tiempo que hubiera sido mejor invertir en el desarrollo del proyecto principal.

Este entrenamiento en la elicitación de requerimientos se intentó aprovechar para capturar (algo apresuradamente) los objetivos del proyecto Delta Pensum. Para ello invité a la Coordinadora de Computación (pregrado), la Prof. Maruja Ortega y a la Asistente de la Coordinación (Lic. Montezuma), como usuarios/patrocinantes del futuro sistema Delta Pensum. El proceso de captura de requerimientos fue relativamente pobre ya que los estudiantes se alejaron de su rol de analistas para caer en el rol de afectados por el cambio de pensum. Por ende las preguntas estuvieron dirigidas más a  conocer cómo los afectaría, en lo personal, el cambio de pensum que en las funciones y atributos del software a desarrollar.

El tipo de error más común que cometieron los estudiantes en esta parte fue:

Finalmente la estructura propuesta por el texto para ubicar el sistema en su contexto y explicitar sus atributos resultó una guía muy útil.

4.3 La fase del modelado de uso

Esta fase se llevó más tiempo que el que le correspondía ya que se ejercitó dos veces, una para el ejercicio de la automatización de una juguetería criolla y otra para Delta Pensum. Esta fase requiere: Las fallas y dificultades de los estudiantes fueron:

4.4 La fase del modelado estructural

El modelo estructural o conceptual consistió en la elaboración de un diagrama de clases. Para ello los estudiantes deben identificar las clases del sistemas, las asociaciones entre las clases, con su multiplicidad, los atributos y métodos de las clases.

Las fallas y dificultades de los estudiantes fueron las mismas que se observan cuando aprenden modelos Entidad-Interrelación (ER). Estas dificultades sugieren que este curso debe tener como requisito un curso introductorio de Bases de Datos para agilizar la cobertura de estos tópicos.

Esta es una fase muy rica para el estudiante por lo que es cuando el estudiante requiere un retroalimentación a la brevedad posible sobre sus diagramas. En el curso se enfatizó más la identificación de clases y de las asociaciones entre clases y la determinación de la multiplicidad de las asociaciones. Se trabajó superficialmente la identificación de atributos y de métodos y ello tuvo efectos negativos en el desarrollo posterior.

Conviene también indicar que en esta fase introduje los estudiantes a algunos patrones. Cometí un error interesante de diseño al insistir en que incorporaran una instancia del patrón Compuesto (en Inglés Composite), el cual se utiliza para expresar estructuras arborescentes entre clases. Despues de implementado el prototipo resultó claro que como  la instancia en cuestión siempre es una estructura de dos niveles (el pensum de una carrera está organizado por años y cad año está organizado por períodos trimestrales), la generalidad que aporta el uso del patrón no aportó beneficio alguno y complicó el desarrollo posterior.

Finalmente es interesante observar que los diseños de los estudiantes sobresimplificaban no-intencionalmente la realidad. Existen una serie de restricciones que los estudiantes no detectaron ni analizaron, ni surgían directamente del modelo de uso. Operativamente el corazón del sistema es el algoritmo de elaboración de un plan de estudios , el cuál recomienda qué asignaturas cursar en qué trimestres. El caso de uso esconde la complejidad del algoritmo bajo una línea "Elaborar un plan de estudios". El exagerado enfoque que hicimos en el curso en concebir el sistema en base a los objetos que lo componen, nos hizo omitir capturar adecuadamente los requerimientos de este algoritmo clave. Al no tener tales requerimientos en forma explícita, el análisis fue incapaz de identificar la existencia de clases adicionales importantes. Cuando en etapas posteriores se hizo evidente que faltaban clases y por ende se empezó a revelar la verdadera dimensión del problema de elaboración del algoritmo, cundió la angustia, el pánico y el desfallecimiento y al curso le costó superar ese "balde de agua fría". Ello obligó a redefinir drásticamente el alcance del proyecto, el cual de hecho no llega a plantear el algoritmo, quedando tal actividad pendiente para cursos futuros.
 

4.5 La fase de diseño de la interfaz del sistema

Los estudiantes elaboraron sus propuestas de diseño para la interfaz y las discutimos en clase. A raiz de estas discusiones corrigieron sus diseños. Estas sesiones resultaron muy populares y animadas.

Preocupado por la cantidad y legibilidad de los datos que se deben mostrar del pensum (vista además clave a lo largo del sistema), yo recomendé fuertemente mostrar sólo un año del pensum en la pantalla a la vez. Afortunadamente uno de los equipos insistió en criticar mi propuesta, hizo caso omiso de mis recomendaciones y demostró que era perfectamente factible mostrar, legiblemente, el pensum completo en pantalla. Su mayor reinvindicación fue la clara preferencia del usuario potencial por su diseño de interfaz.

De nuevo hay que insistir que una buena parte de la fascinación del curso estriba en discusiones y evaluaciones como ésta, donde es importante que el profesor ocasionalmente le permita a sus estudiantes persistir en un diseño aún a riesgo de que no sea el óptimo y que mantenga la mente abierta y flexible. Por eso considero tan pedagógico el desarrollo en equipos que compiten entre si para desarrollar el mejor producto. El análisis de las diferencias entre los diseños y la comparación de los productos (y procesos!) finales suele ser uno de los aspectos más pedagógicos y motivantes del curso.

4.6 La fase del modelado del comportamiento

En el primer paso de esta fase, se debe identificar los eventos que se origen en el exterior del sistema e inciden en éste. Este es un paso bastante mecánico si los casos de uso han sido elaborados con suficiente cuidado y los estudiantes no tuvieron mayores contratiempos al respecto.

En un segundo paso se debe elaborar un contrato por cada evento del sistema, en el que básicamente se explicitan las precondiciones necesarias para admitir el evento, las excepciones que pueden producirse y las acciones o postcondiciones producidas en el sistema al reaccionar ante el event. Estas postcondiciones indican qué objetos y asociaciones se crean, modifican o destruyen en el sistema a raiz de la aceptación del evento.

El segundo paso causó varios problemas:

  1. La nomenclatura de precondición, postcondición parecer estimular los prejuicios de los estudiantes que le huyen a los tópicos más formales como Lógica Simbólica. Este problema es menor y se logró superar rápidamente, quizás en buena parte por ser la notación muy poco formal.

  2.  
  3. Elaboración mecánica de los contratos debido a:
    1. La cantidad de eventos que surgieron y para los cuáles debían escribirse contratos;
    2. Escepticismo respecto a  la utilidad de escribir contratos.
    Los primeros contratos típicamente eran (muy) incompletos ya que tendían a limitarse a las reacciones más inmediatas al evento aceptado.
     
  4. Confusión en la relación entre precondición y excepción. Si una precondición no se cumple, ¿el evento no puede producirse, igual puede producirse pero debe disparar una excepción o igual puede producirse pero al no ajustarse el medio al contrato, el sistema tiene libertad realizar cualquier acción --incluso caerse? Esta confusión no vino a disiparse sino en cursos posteriores cuándo empecé a distinguir entre una precondición supuesta (assumed precondition) y una precondición garantizada (enforced precondition), distinción tomada de R. Marick (The Craft of Software Testing, Prentice-Hall 1995).

4.7  La fase del modelado de la interacción

La meta de esta fase es elaborar un diseño detallado al precisar la secuencia de mensajes que se envían los objetos del sistema para cumplir con un contrato.

En lo personal he encontrado que esta es una fase muy rica en decisiones de diseño y efectivamente donde introduzco o considero para su uso a más patrones. Sin embargo el curso se estrelló en esta fase. Los estudiantes no lograban entender cómo elaborar un diagrama de colaboración, cometían errores sintácticos y semánticos y la calidad de sus diseños era muy pobre. Tuve que explicar tres veces los diagramas y rechazar igual número de veces los diagramas propuestos por los estudiantes. Pasamos varias semanas estancados en esta fase hasta que finalmente llegamos a unos diagramas de colaboración que consideré apropiados... ¡pero que fueron en buena parte ignorados por los estudiantes cuando programaron el prototipo del sistema! Los diagramas no fueron del agrado de los estudiantes, los consideraron pesados, complejos, difíciles e irrelevantes.

Uno de mis colegas, el Prof. Víctor Theoktisto me observó que los diagramas de colaboración se basan en un paradigma de agentes que se intercambian mensajes. Como mis estudiantes no tenían cursos previos donde los hubiesen introducidos, aunque fuera rudimentariamente a elementos de este paradigma (digamos en la noción de procesos en un curso básico de Sistemas de Operación), lo que yo veía como una notación simple a ellos les resultaba un muro de confusión.

La hipótesis del Prof. Theoktisto me resultó muy convincente, por lo que esperaba que esa dificultad se subsanaría al dictarle el mismo material a estudiantes del último año en el curso Ingeniería de Software 2.  Para mi gran sorpresa, las dificultades persistieron, por lo que pienso que hay factores adicionales al hipotetizado por mi colega.
Finalmente es importante destacar la dificultad que tuvieron los estudiantes en mantener los distintos modelos consistentes entre sí. Estas dificultades fueron tanto de índole técnica (falta de una herramienta CASE que apoyara las validaciones necesarias) como conceptuales (los estudiantes le atribuían poco tiempo e importancia a esas actividades de validación). Las inconsistencias se hicieron particularmente notorias entre los diagramas de colaboración por un lado y los contratos y el diagrama de clases por otro.

Finalmente se integró mejor el tópico de patrones de diseño orientado a objetos, gracias a la cobertura y la estrategia pedagógica del texto de C. Larman. Inspirado en dicha estrategia se trataron de cubrir con más énfasis un número reducido de patrones con incidencia directa en el proyecto desarrollado. Aún así el éxito debe considerarse relativo.

4.8 La fase de implementación

Los estudiantes insistían en querer acometer prematuramente la codificación del sistema. Me atrevería a considerar que el curso llega a sentirse reprimido, sobre todo considerando el retraso que se dio en culminar la fase de diseño, sobre todo por cuanto estaban motivados a  entregar un prototipo funcional para uso de la Coordinación de la carrera.

Como mencioné en el párrafo anterior, lamentablemente hicieron caso omiso de su propio diseño (detallado), por lo que su implementación final no siguió todos los parámetros del diseño. Por ejemplo, el diseño separó claramente la capa de la interfaz de la capa del dominio de la aplicación; la implementación entremezcló las dos capas. Las consecuencias de esto se vieron en los cursos posteriores que trataron, con relativamente poco éxito, de reutilizar el diseño y especialmente el software desarrollado.

Adicionalmente estuvo evidente que muchos de los estudiantes no habían recibido el entrenamiento suficiente en el uso de librerías de JDK, por los que los pocos estudiantes con un dominio más avanzado de Java estuvieron sobrecargados pues no sólo se encargaron de las tareas más delicadas de programación sino que adicionalmente tuvieron que asesorar y ayudar a sus compañeros en cuanto a estilo de programación, identificación y uso de clases de librería y depuración de programas en Java.

Respecto a las pruebas, sólo dio tiempo de presentar los estándares de la IEEE (IEEE 829-1983, ANSI/IEEE  1008-1987) respecto a la planificación y documentación de pruebas unitarias, pruebas de integración y pruebas de sistema e intentar llevarlas a cabo de manera representativa e informal. Como he comentado previamente en este reporte, este aspecto del curso fue claramente insatisfactorio y conllevó a dedicar un curso posterior (Ingeniería de Software 3) a explorar las pruebas de sistemas orientados a objetos.
 

4.9 La entrega del sistema

Afortunamente insistí que todo el material elaborado para el curso fuese instalado en mi máquina para poder llevar a cabo la evaluación final del curso. De esta manera se detectó entregas incompletas , versiones inconsistentes de clases  y algunas fallas de portabilidad entre Visual Java y JDK.

Si el profesor quiere conservar el material elaborado por los estudiante para su uso futuro, esta actividad debe ser planificada cuidadosamente.
 

4.10 Observaciones sobre la dinámica de grupos

En la fase de entrenamiento los estudiantes trabajaron en grupos de dos a tres miembros. Al comenzar el proyecto Delta Pensum, los quince estudiantes se agruparon en tres grupos, InterSoft (7 miembros), Warem Systems (5 miembros)  y Sistemas Clan-Roy (5 miembros).

El equipo InterSoft estaba constituido por seis muchachos y una muchacha. En principio, era el equipo más fuerte pues todos sus integrantes  cursaban las dos asignaturas. Dos de los estudiantes tenían buenos conocimientos de Java.

El equipo Warem Systems estaba constituido por tres muchachos y dos muchachas. Solamente dos de sus miembros cursaban las dos asignaturas, mientras que los otros tres sólo cursaban Sistemas de Programas, por lo que a estos últimos no se les podía exigir tanto trabajo de desarrollo. El grupo tenía poca experticia en Java.

El equipo Sistemas Clan-Roy  estaba constituido por cinco muchachos. Uno sólo de sus miembros cursaba las dos asignaturas; el resto cursaba sólo el Taller de Sistemas de Programas. El grupo tenía poca experticia en Java.

Una vez comenzado el curso se hizo patente que la división en equipos no estaba funcionando bien. En particular Warem Systems mostraba claras señales de que el trabajo rebasaba su capacidad de trabajo, por cuánto la mayor parte de los integrantes no tenían la disponibilidad de tiempo necesario para llevar a cabo un desarrollo. Por otro lado la dependencia de Sistemas Clan-Roy del único miembro que cursaba las dos asignaturas para poderse enterar de lo que ocurría en las sesiones de Sistemas de Programas constantemente hacía temer en fallas de comunicación. La situación la resolví, juntando estos dos equipos para formar un equipo de 10 miembros que pasó a llamarse Warem and Roy Corporation (Warem&Roy). Esta fusión fue mucho más arriesgada que lo indicado aquí pues habían ciertos prejuicios entre los dos equipos. Warem proyectaba la imagen de un equipo formado por personas tranquilas, de trato suave y muy clase media mientras que Clan-Roy proyectaba una imagen de una banda de rebeldes iconoclaustas. Afortunadamente (¡y parta suerte mía!) el proceso de fusión fue excelente. Sistemas Clan-Roy cedió la coordinación general del proyecto al coordinador de Warem, y el Coordinador de Clan-Roy desempeño un excelente rol de puente inicial entre los dos grupos. Los dos grupos lograron aprovechar su potencial conjunto a tal punto que cuando el Coordinador de Warem renunció a la Coordinación conjunta, todos estuvieron de acuerdo en que el coordinador original de Clan-Roy pasara a coordinador Warem&Roy. Al terminar el proyecto, los miembros de ambos equipos coincidieron en señalar que la experiencia de fusión les había sido altamente positiva. De hecho, la heterogeneidad del grupo le terminó aportando mayor creatividad que a InterSoft --de hecho Warem&Roy no dieron muestras de group-think , mientras que esto le ocurrió en dos ocasiones claves a InterSoft.

La dinámica de los grupos prepara muchas sorpresas para un profesor que pretende apoyarse en el trabajo en equipo. Para comenzar, la presión de los pares hace que los grupos se vuelvan "opacos"; es decir, los problemas se esconden dentro del grupo y éste presenta una fachada de control y previsión que se desmorona cuando la situación es insostenible.

Durante el curso se presentaron las siguientes situaciones:

5. Resultados del experimento

Los dos cursos siguen siendo exigentes pero son mucho más asimilables en cuanto a cantidad y nivel del material que los cursos que se dieron como parte del primer experimento. Si bien no es descartable que siga imperando cierto efecto Hawthorne en la apreciación positiva, el texto y la metodología escogidas son más cónsonos con el nivel del estudiante.

Los estudiantes siguen gustando del curso y pienso que siguen válidos las razones indicadas para el primer experimento docente.

En general yo diría que los cambios resultaron positivos.
 

5.1 Logros

Creo que los estudiantes han:
  1. Salido motivados para trabajar en equipos medianos (4-10 personas) y con una importante experiencia positiva al respecto. En este sentido se conserva y consolida el logro reportado en el primer experimento.
  2. Obtenido un dominio más sólido en tecnología orientada a objetos de lo que han obtenido en el pasado --y aquí incluyo la experiencia del primer experimento. La adopción del Larman permitió impartir una visión mucho más coherente del análisis y diseño orientado a objetos y más acorde con el nivel del estudiante. También me parece que el conocimiento logrado de la programación orientada por objetos y el uso de patrones y principios de diseño fue superior al logrado (en promedio) en el primer experimento.
  3. Mejorado su enfoque de cómo desarrollar software de envergadura mediana y en particular  la utilidad de los modelos como herramienta de análisis y diseño de software y el trabajo en equipo.
Los estudiantes llenaron una encuesta anónima de formato mucho más libre que la encuesta oficial de percepción estudiantil y más enfocada hacia los contenidos de las asignaturas. Algunos aspectos de la encuesta tuvieron que ver con logros y se resumirán a continuación.
 

5.1.1 ¿Qué fue lo que más le gustó a los estudiantes?

Según la encuesta: En conclusión, se indican aspectos muy similares a los reportados en el primer experimento. Se destaca más el hecho que el problema se siente más real que en el primer experimento (donde se desarrolló una versión en el computador de Scrabble), la programación orientada por objetos per se y el trabajo en equipos/empresas. Curiosamente no se mencionan, como en la experiencia pasada, modelos o procesos específicos (con excepción de la captura de requerimientos). En comparación, en el primer experimento se nombraban los casos de uso, los patrones, aprender a diseñar una página web, el modelo estructural y el modelo dinámico  como lo que más le había gustado a los estudiantes. Sin embargo en el próximo punto se verá que la metodología tuvo una excelente acogida.

5.1.2 ¿Qué fue lo que le pareció más útil a los estudiantes?

Estos comentarios son muy halagadores ya que muestran claramente que los estudiantes consideran sumamente útiles los objetivos del curso.

5.2 Contratiempos y fallas

 A continuación resumiré algunos de los resultados obtenidos en la encuesta de formato libre a los estudiantes.
 

5.2.1 ¿Qué fue lo que menos le gustó a los estudiantes?

De acuerdo con la encuesta: En el primer experimento, los estudiantes señalaron que lo que menos les gustó era el retraso de la teoría con respecto al taller, el exceso de contenidos nuevos y la carga de trabajo, el horario de las clases y la evaluación. En esta segunda oportunidad no se apunta a contenidos excesivos sino a trabajo excesivo (¡pero disfrutado!) y frustración de no haber culminado el proyecto. En mucho menor grado se señala la evaluación (concuerdo con la observación, ¡me sorprende que no haya sido más criticada!) y la cantidad de documentos que la aplicación de la metodología exige. En general el descontento parece menor que en el primer experimento.

5.2.2 ¿Qué fue lo que le pareció menos útil?

Dos estudiantes no contestaron esta pregunta. Los que respondieron, indicaron: Esta unanimidad contrasta con el primer experimento donde algunos estudiantes señalaban temas como el modelo funcional, los patrones (aparentemente por el escaso tiempo que se les dedicó) y los casos de uso. Considero lícito deducir que el segundo experimento logró una mejor integración de los tópicos que lo logrado en cualquiera de los cursos anteriores. Sospecho que en esto influye la integración de la teoría con el taller para un grupo menor de veinte estudiantes.

5.2.3 En un espectro entre motivante (por lo novedoso y útil) y desmotivante (por la densidad y quizás, superficialidad de cobertura de los tópicos) , ¿dónde ubica esta asignatura?

El estudiante puede sentirse muy motivado por las técnicas nuevas que encuentra en el curso, sobre todo por cuánto le proporcionan una sensación de estar ubicada cerca de la innovación tecnológica más difundida, pero también puede sentirse desmotivado y hasta confuso por la cantidad y densidad de conceptos y técnicas que se cubren, posiblemente sin darle tiempo de digerirlas. ¿Cuál es la opinión del estudiante al respecto?

A muchos les gusta el curso:

Otros califican más el grado de motivación: Los resultados son mejores que los del primer experimento, pero los estudiantes señalan claramente que persisten problemas de carga de trabajo, percepción de esfuerzo-calificación y dinámica de grupos que hay que atender.

5.2.4 ¿Qué debe mejorarse? ¿Eliminarse? ¿Expandirse? ¿Cambiar de orden?

Los estudiantes recomiendan mejorar la forma de impartir la programación en Java: El descalabro con respecto a los diagramas de colaboración y la debilidad en la cobertura de las pruebas orientadas por objetos también se refleja en las recomendaciones de los estudiantes: Para un estudiante de la teoría, fue mucho trabajo práctico: Los cambios de objetivos y la modificación de requerimientos en el transcurso del desarrollo también fueron comentados:
  • "También creo que debido a que sólo tenemos 12 semanas de clases, no es posible hacer tantos cambios al proyecto, aunque se sabe que en la vida profesiona vamos a lidiar con cambios de requerimientos frecuentemente."
  • "No hacer tantos cambios de requerimientos al proyecto planteado."
  • Finalmente aún hay que ajustar el calendario y la integración de la teoría con el taller: Comparto los señalamientos y recomendaciones de los estudiantes.
     

    5.2.5 ¿Qué recomendaciones le haría al profesor para que mejore el curso?

    En cierto modo la pregunta es redundante respecto a la anterior y esto se refleja en que en algunas encuestas se contestan ambas preguntas junto. Sin embargo otros estudiantes señalan: Respecto al primer comentario, el éxito del curso requiere de retroalimentación clara, oportuna y continua respecto a las actividades que realiza tanto el grupo, como cada uno de sus miembros. Ello no es fácil, sobre todo que llega un punto en que es dificil ubicar la contribución del individuo a los resultados del grupo. Este es uno de los puntos para los que sería beneficioso que  los profesores tuviéramos más entrenamiento en la dinámica de grupos.

    El segundo  punto es muy interesante y de hecho lo tomaré en cuenta en el diseño de las asignaturas de la cadena.
     

    5.2.6 Otras observaciones

    La encuesta contenía una pregunta adicional: así como una sección para observaciones adicionales. Vale la pena referir algunas de las respuestas que se obtuvieron, en cuanto a que señalan aspectos críticos o de reflexión  para el éxito de cursos como éste.

     6. Conclusiones y recomendaciones

      En conclusión:
       
      1. Los nuevos cursos resultan una mejora respecto al experimento docente anterior. En particular la adopción del texto y enfoque de C. Larman resultó acertado

      2.  

         

      3. El contenido del curso se redujo en cuánto a tópicos, eliminándose el tema de modelos dinámicos y sustituyendo el modelo funcional por el modelo de colaboración y contratos.
        1.  
      4. A los estudiantes les costó mucho lograr consistencia entre sus modelos.
        1.  
      5. El contenido del nuevo curso sigue siendo demasiado ambicioso para el tiempo disponible. No dio tiempo de cubrir pruebas de sistemas orientados a objetos de manera satisfactoria nisiquiera a nivel introductorio y el uso de patrones no logró asentarse adecuadamente (aunque sí logró integrarse al curso).

      6.  
      7. Algunas de las técnicas siguen introduciéndose prematuramente; en particular parece ser el caso de modelado conceptual y de la elaboración de los diagramas de colaboración.

      8.  
      9. El tópico técnico más dificultoso fue sin lugar a dudas la elaboración de diagramas de colaboración.

      10.  
      11. El orden de cobertura de tópicos fue adecuado y representa un avance respecto al primer experimento docente.

      12.  
      13. La integración de los dos cursos resultó positivo, sobre todo a la luz de la integración oficial que se dará en el nuevo pensum. Sin embargo me persisten dudas sobre la escalabilidad de la experiencia y recomiendo que el Departamento planifique al respecto.

      14.  
      15. El alcance del proyecto escogido fue demasiado ambicioso. Adicionalmente no se logró detectar la dimensión real del proyecto a tiempo y, como profesor, debo admitir que no manejé apropiada y oportunamente ni el aspecto iterativo ni el aspecto incremental de la metodología adoptada.

      16.  
      17. La evaluación fue continua y se centró en el proceso de diseño. El volumen de corrección es muy alto y debe planificarse un volumen alto de sesiones de evaluación y discusión de de diseños concretos del proyecto. A medida que el diseño se hace más detallado se hace más dificil presentar varios diseños y mantener el interés de más de un grupo.

      18.  
      19. Surgieron problemas interesantes en la dinámica de los equipos de estudiantes que ameritan más estudio y preparación por parte del profesor.

      20.  
      21. Los resultados del curso fueron positivos en lo que se requiere a la tasa de aprobados y la motivación suscitada entre los estudiantes.


      En cuanto a las recomendaciones:
       

      1. Conservar el texto y enfoque utilizados.

      2.  
      3. Es importante abrir una cadena en Ingeniería de Software para cubrir adecuadamente tópicos como arquitectura de software, patrones de diseño y testing orientado por objetos.

      4.  
      5. Integrar Sistemas de Programas con el Taller de Sistemas de Programas. Las dos asignaturas forman una unidad natural motorizada por la práctica del desarrollo (development-driven). Es decir, es el Taller quien "lleva la cachucha" pero las dos partes de la unidad necesitan fusionarse.

      6.  
      7. Planificar con mayor cuidado el alcance del proyecto, ajustándose a desarrollos incrementales  e iterativos  con horizontes de desarrollo mayores al trimestre.

      8.  
      9. Ajustar el contenido de la asignatura (y de la cadena) revisando con cuidado las relaciones que presupone o requiere con asignaturas como Sistemas de Operación, Traductores e Interpretadores, Lenguajes de Programación, Sistemas de Información, Bases de Datos, Control de Proyectos e Interfaces Gráficas.

      10.  
      11. Colocar Bases de Datos I como requisito de Sistemas de Programas.

      12.  
      13. Cubrir más detalladamente la programación orientada por objetos, especialmente en lo que se refiere a los componentes de las librerías de clases a utilizar.

      14.  
      15. Estudiar y resolver los problemas de los estudiantes en la elaboración de diagramas de colaboración.

      16.  
      17. Introducir una herramienta CASE que reduzca el esfuerzo de graficar los distintos diagramas y que ayude a validar la consistencia de y entre los modelos.

      18.  
      19. Repensar el tópico de pruebas (testing) orientado por objetos a la luz del poco tiempo disponible en el curso.

      20.  
      21. Mejorar la supervisión de la formación y evolución de los equipos de estudiantes. Para ello es conveniente buscar apoyo en un departamento como el Departamento de Ciencias y Tecnología del Comportamiento.

      22.  
      23. Formalizar los tópicos de dinámica de grupos que puedan resultarle de interés a los estudiantes.

      24.  
      25. Estudiar la posibilidad de incluir inspecciones formales para desarrollos orientados por objetos.

      26.  
      27. Revisar la cobertura del tópico de Patrones.

      28.  
      29. Extender la noción de trabajos en equipos de más de dos personas paulatinamente a otros talleres posteriores a Sistemas de Programas, de modo que al graduarse el estudiante tenga una formación y una experiencia de trabajo exitoso en grupo.

      30.  
      31. Considerar la posibilidad de incrementar el tamaño máximo de los grupos que pueden acometer un proyecto de grado. Sería una valiosísima experiencia que el trabajo final integrador de la carrera sea realizado en grupo, por cuanto estoy convencido que el grueso de los desarrollos futuros en software serán hechos en equipos de al menos cuatro personas.
    Agradecimientos

    Las gracias no estarían completas sin un agradecimiento muy especial a los estudiantes que participaron en el experimento. El grupo trabajó con ahinco y determinación. ¡Esperemos que el curso les haya retribuido su tiempo y esfuerzo!

    También quisiera agradecerle al Departamento de Computación y Tecnología de la Universidad Simón Bolívar y en particular a su Jefe, Prof. Roger Soler, la confianza y la oportunidad de llevar a cabo este experimento y la Coordinación de Computación (pregrado) por estimularme a escribir este reporte y apoyar el proyecto Delta Pensum.
     
     



     
    Esta página fue creada entre el 30 de agosto y el 1 de septiembre de 1999.
    Ultima actualización: 14 de junio de 2000.
    Para comentarios favor contactar al Profesor Alejandro Teruel