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:
-
Se conservó el objetivo del primer experimento en cuanto a basar
el curso en la tecnología orientada por objetos.
-
Se adoptó como libro de texto, el libro de C. Larman Applying
UML and Patterns (Prentice-Hall, 1998).
-
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:
-
La captura informal de requerimientos y su estructuración en:
-
Breve descripción del sistema (system overview);
-
Identificación de clientes;
-
Metas;
-
Funciones del sistema;
-
Atributos del sistema;
-
Suposiciones;
-
Riesgos;
-
Dependencias.
-
El modelo de uso;
-
El modelo estructural (simplificado);
-
El modelo de comportamiento del sistema (diagramas de secuencias de eventos
del sistema y los contratos de eventos del sistema);
-
El modelo de interacción (diagramas de colaboración entre
clases).
-
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.
-
Se dedicó más tiempo a la programación orientada
por objetos.
-
Se incrementó la cobertura de patrones y se introdujeron
algunos principios de diseño recomendados por el texto adoptado.
-
Se prestó especial atención a la evaluación de
los diseños propuestos.
-
Se explicitaron algunos elementos de control de proyectos que se han venido
trabajando en el Taller de Sistemas de Programas tales como:
-
Nociones básicas de trabajo en equipo, roles (miembro, coordinador
de equipo, 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.
-
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é:
-
Las nuevas condiciones del segundo experimento;
-
La descripción del curso;
-
Los resultados alcanzados;
-
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:
-
No cubre el modelo de uso, un modelo que, a juicio de varios autores, resulta
clave el el desarrollo de software orientado a objetos;
-
Cubre demasiado superficialmente la problemática de la captura de
requerimientos, la cual reduce al problema de hallar un enunciado
del problema a resolver;
-
Los diagramas propuestos para el modelo estructural resultan demasiado
ricos conceptualmente para un estudiante que aún no ha visto los
rudimentos de un modelo de datos E-R. En particular distinguir el concepto
de generalización (distinguiéndolo de herencia)
y el concepto de agregación son sutilezas que lucen prematuras para
el nivel del curso.
-
Los mecanismos propuestos para el modelo dinámico (autómatas
anidados concurrentes) son escesivamente sofisticados para un grupo
de estudiantes que aún no han visto autómatas finitos.
-
El modelo funcional es de importancia secundaria en comparación
con otros modelos de comportamiento introducidos más recientemente
como el modelo de colaboración entre objetos. En particular considero
el uso que hace este texto de un modelo funcional
basado en diagramas de flujo de datos (DFDs) es inadecuado.
En un libro más reciente de los mismos M. Blaha
y W. Premerlani, titulado Object-Oriented Modeling and Design for Database
Applications (Prentice-Hall, 1998), los autores abandonan DFDs y recomiendan
usar varias notaciones entre las que destacan pseudo-código extendido
con con una notación de navegación por objetos (ONN). Esta
es una interesante opción que no he explorado aún
-
La notación OMT del texto ha sido sustituida por la notación
UML por la mayoría de los autores en el área, incluyendo
los autores del texto.
-
El texto no cubre el tópico de patrones y su uso dentro del
diseño orientado por objetos.
-
La cobertura del tópico de arquitectura de software es demasiado
avanzado para el nivel de los estudiantes.
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:
-
Breve descripción del sistema (system overview);
-
Identificación de clientes;
-
Metas;
-
Funciones del sistema;
-
Atributos del sistema;
-
Suposiciones;
-
Riesgos;
-
Dependencias.
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:
-
Como metodología de análisis y diseño que es, ignora
la problemática de validación (testing);
-
No cubre adecuadamente la evaluación de opciones de diseño;
-
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:
-
9 estudiantes inscribieron las dos asignaturas;
-
4 estudiantes inscribieron sólo Sistemas de Programas;
-
4 estudiantes inscribieron sólo Taller de Sistemas
de Programas.
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:
-
Experticia;
-
Acoplamiento;
-
Cohesión.
Los patrones cubiertos fueron:
-
Model-view-controller (MVC);
-
Publish-subscribe;
-
Iterador;
-
Estrategia;
-
Apoderado (proxy);
-
Decorador;
-
Fábrica abstracta y
-
Compuesto.
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:
-
E. Gamma, R. Helm, R. Johnson y J. Vlissides: Design Patterns. (Addison-Wesley,
1995).
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:
-
Nociones básicas de trabajo en equipo,
-
Roles de un equipo de desarrollo(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.
El texto adoptado no cubre estos tópicos. El libro:
-
Murray Cantor: "Object-Oriented Project Management with UML", Wiley, 1998.
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:
-
Un estudiante indicó que había trabajado en
grupos de 4 y 5 miembros;
-
Un estudiante indicó que trabajó en grupos
de 4 a 6 personas en trabajos de Estudios Generales;
-
Un estudiante indicó haber trabajado en un grupo de
7 personas como preparador del CIC y en un grupo de 4 personas como miembro
del Laboratorio Docente de Computación (LDC).
A pesar de ello, las encuestas finales indican que
el trabajo de equipo en el curso les resultó novedoso y motivante
a todos los estudiantes. Sospecho que la diferencia está en que
el curso exige la formación de cierta estructura en el grupo,
con roles y responsabilidades separadas y claras, mientras que el grueso
de las experiencias previas eran en grupos menos estructurados.
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:
-
Hardware: Computadoras personales pues todo el software es portable
y de hecho estará incluido en el CD-ROM de la carrera. Se reservan
horas para el uso de Estaciones Sun del Laboratorio Docente de Computación
para montar toda la documentación generado por el proyecto y cerciorarse
que los desarrollos sean independientes de plataforma (al menos entre una
plataforma Wintel y plataforma Solaris.)
-
Software: Editores de Páginas Web (Composer bajo Netscape
4.5 o similar), JDK 1.2, correo electrónico.
-
Preparador: Apoyo para la instalación de JDK, consultas y
evaluación de Java en general y de la librería Swing en particular.
-
Bibliográficos:
-
Craig Larman: Applying UML and Patterns: An Introduction to Object-Oriented
Analysis and Design. Prentice-Hall, 1998. Texto.
-
Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides: Design Patterns:
Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.
Complemento para patrones.
-
Roger S. Pressman: Ingeniería del Software: Un Enfoque práctico.
Cuarta edición. McGraw-Hill, 1998. Complemento para pruebas (testing).
-
Cay Horstmann y Gary Cornell: Core Java 2 : Volume I -Fundamentals.
Prentice-Hall,
1999.
-
WWW:
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:
-
Las asignaturas que tiene aprobadas en el nuevo pensum;
-
Las asignaturas que tiene que cursar en el nuevo pensum;
-
Un plan de estudios para culminar la carrera (es decir una indicación
de las asignaturas que debe cursar, por trimestre).
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:
-
La elaboración de un sitio www;
-
Programar una pequeña aplicación en Java.
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:
-
Redacción inadecuada, pomposa o excesivamente ambicioso.
Considere estas descripciones de una de las metas para un sistema de
inventario para la juguetería mencionada previamente:
"Tener control absoluto del inventario".
"Realmente este sistema llevará un verdadero control
y manejo del inventario con una seguridad del 100%".
O considere parte de la descripción del sistema de inventario:
"Otra gran ventaja del sistema es su implementación
inteligente que permite, por ejemplo, notificar mediante una
alerta cuando un producto está por debajo de una cantidad estipulada,
marcando
un umbral el cual sugiere la solicitud al distribuido encargado del producto
el envío de más mercancía al local, procedimiento
el cual el mismo sistema se encarga enviando un fax o un e-mail
al distribuidor con la cantidad solicitada."
En ambos casos he enfatizando én letra itálica fallas de
forma, contenido o ambas.
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:
-
Identificar los actores del sistema;
-
Identificar los casos de uso;
-
Describir cada caso de uso.
Las fallas y dificultades de los estudiantes fueron:
-
No se identifican todos los actores y para algunos actores no se identifican
todos los casos en que intervienen (fallas comprensibles, pues generalmente
los estudiantes no conocen bien el dominio de la aplicación);
-
No se enlazan los casos de uso con las funciones y atributos capturados
previamente. En general, el estudiante no verifica la consistencia entre
sus modelos y en muchos casos tampoco documenta los enlaces entre los modelos.
Este último caso conduce, entre otros problemas, a no perderle la
traza a los requerimientos (lost requirements traces).
-
Dificultad en redactar de forma precisa el diálogo entre los actores
y el sistema en cada caso de uso. Esto incluye el problema de escoger nombres
pobres para los casos de uso como por ejemplo llamar Introducir datos
al caso de uso correspondiente a Elaborar un Plan de Estudios.
-
Ignorar la notación del caso de uso, en particular en lo que concierne
a las acciones optativas o alternas. En uno de los grupos, este problema
persistió hasta bien entrado el trimestre.
-
Introducción prematura de aspectos algorítmicos en la descripción
de la reacción del sistema.
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:
-
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.
-
Elaboración mecánica de los contratos debido a:
-
La cantidad de eventos que surgieron y para los cuáles debían
escribirse contratos;
-
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.
-
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:
-
Asistencia irregular a las reuniones del equipo.
Los estudiantes se quejaron de las dificultades de encontrar un horario
común para poder realizar reuniones fuera de las horas de clase.
Adicionalmente algunos estudiantes empezaron a acumular un número
significativo de inasistencias a reuniones, así como a llegar con
hasta dos horas de retraso respecto a la hora fijada.
Este problema fue reducido al empezar los estudiantes a llevar minutas
de sus reuniones con una clara indicación de inasistencias e impuntualidades.
Se explicó a los estudiantes que las minutas era el único
mecanismo que permitía "probar" el incumplimiento de un estudiante
respectos a las reuniones. Por supuesto que la incompatibilidad de horarios
no se resuelve con minutas, pero el llevar minutas con listas de asistencias
sí ayuda a reducir las inasistencias más flagrantes y cierto
nivel de impuntualidad
-
Manejo inadecuado de tiempo en reuniones.
Como queja general fue que las reuniones se hacían demasiado
largas. Evidentemente los estudiantes deben aprender a llevar una agenda
y a aprender a hacer reuniones efectivas y eficientes. Si bien se empezó
a llevar agenda, hubo poca guía respecto a cómo hacer las
reuniones más productivas, por lo que el problema continuó
durante el resto del trimestre.
-
Fallas de comunicación entre miembros del equipo.
A pesar del uso de correo electrónica, algunas de las fallas
de comunicación que se presentaron fueron muy llamativas:
-
El editor técnico de uno de los equipos renunció pero la
mayoría de los miembros de su equipo no se enteró hasta la
víspera de una entrega importante, con lo que la calidad de la entrega
quedó seriamente comprometida.
-
Por razones poco claras, uno de los miembros de un equipo tuvo problemas
en mantener su dirección de correo electrónica en la lista
de distribución del Coordinador de Reuniones. Este miembro alegó
que muchas de sus inasistencias a reuniones se debieron a que sencillamente
no le llegaban las notificaciones de las reuniones.
-
Un estudiante tuvo una participación bastante pobre durante casi
todo el trimestre; faltaba a reuniones y no cumplía con las tareas
que le encomendaban. El equipo a que pertenecía logró ocultarme
esta situación durante bastante tiempo pero a costa de un creciente
resentimiento contra el miembro "perezoso" del equipo. Finalmente en una
reunión muy tensa, el equipo confrontó al miembro errante,
sólo para enterarse que un familiar muy cercano del estudiante sufría
la etapa final de un cáncer. Por supuesto que el sentimiento de
furia se convirtió en un inmenso y desalentador sentimiento de culpa.
-
Dedicación dispareja al proyecto.
El tiempo y esfuerzo invertido por los estudiantes fue bastante disparejo.
Cada equipo debía designar los siguientes roles:
-
Coordinador del equipo;
-
Webmaster;
-
Editor técnico;
-
Coordinador de reuniones.
Los estudiantes que se encargaron de los primeros dos roles tendieron a
sobrecargarse de trabajo con respecto a los demás estudiantes. Sospecho
que entre dos estudiantes podía haber hasta un orden de magnitud
de diferencia entre el esfuerzo y la contribución al proyecto, pero
resultaba muy dificil comprobarlo. Traté que formalizaran
y explicitaran la repartición de tareas con relativo poco éxito.
En cursos posteriores tuve mejor éxito al respecto, solicitando
el número de minutos de dedicación a la asignatura por semana
de cada estudiante, sus responsabilidades y haciendo uso de encuestas de
evaluación interpares de dos a tres veces por trimestre.
-
Sobre-especialización en roles.
Cada equipo debía determinar a quién asignar los roles
mencionados previamente y sólo habían cambios en esa asignación
si el responsable renunciaba. La tendencia fue que los estudiantes que
ya tenían conocimientos especiales que les facilitaba desempeñar
un rol son los que tomaban el rol y aprendían más sobre su
realización, mientras que los estudiantes con menos experiencia
(y por ende con más necesidades de aprendizaje) fueron los que menos
oportunidad tuvieron de aprender a ejercer esos roles. En particular los
webmaster
eran estudiantes que ya traían al curso buenos conocimientos
de construcción de páginas web y si bien pudieron ejercitarse
en una actividad de su gusto, realmente técnicamente aprendieron
muy poco adicional sobre tal actividad. En cursos posteriores experimenté
con la rotación de cargos o roles entre los miembros del equipo,
lo que permite a los estudiantes apreciar mejor las dificultades inherentes
a un rol particular.
-
Formación de cliques
Algunos de los estudiantes hubieran querido participar más de
las decisiones pero sentían que el "poder" en el equipo estaba en
manos de un grupo de tres a cinco estudiantes. En tales casos daba la impresión
que el clique se formaba muy temprano en la vida del grupo y que despues
se hacía difícil romperlo. Por ende la solución a
este problema parece pasar por mayor cuidado en la fase de formación
del grupo, mayor atención a su evolución (aquí son
útiles las encuestas inter-pares) y la rotación de cargos.
-
Manejo inadecuado de tensión.
Más de un grupo pasó por etapas de conflicto sordo innecesario.
Afortunadamente, ajuzgar por las encuestas finales, las etapas fueron transitorias
y como veremos en la próxima sección, los estudiantes consideraron
la experiencia altamente positiva.
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.
-
El factor tradicional asociado con Sistemas de Programas, los estudiantes
tienen la sensación que se trata de la primera materia de la carrera
donde "le ven el queso a la tostada", es decir que les permite extrapolar
sus estudios a su vida profesional para aclarar cómo y en qué
trabaja el Ingeniero de Computación cuando desarrolla software.
-
La sensación de estar aprendiendo tecnología de punta, o
al menos herramientas y procesos mencionados emocionadamente como
novedades en la literatura popular tales como:
-
Elaboración de páginas WWW;
-
Java;
-
Tecnología orientada por objetos;
-
El efecto Hawthorne.
En general yo diría que los cambios resultaron positivos.
5.1 Logros
Creo que los estudiantes han:
-
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.
-
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.
-
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:
-
"Poder desarrollar un proyecto real, lo que me permitió sentir más
de cerca la responsabilidad y el compromiso de un desarrollador frente
a un cliente. Otro punto importante de lo que más disfruté
fue el poder compartir con otras personas de la carrera, algo a lo que
la comunidad de la USB no está muy acostumbrada."
-
"El trabajo en equipo y la división de roles en los grupos de trabajo."
-
"La idea de las compañías [desarrolladoras de software].
Me pareció muy creativa y útil."
-
"La oportunidad y experiencia de trabajar en equipos grandes donde cada
quien tiene un rol y realiza sus actividades."
-
"Que tratamos con un problema de la vida real, es el primer curso de la
carrera en que nos preocupamos por resolver una situación que nos
afecta a todos [...] La materia que más me gustó fue la primera
parte: Captura de requerimientos que es algo que siempre (en los cursos
anteriores) se había pasado por encima pero a mi modo de ver es
de suma importancia."
-
"1. [Trabajar] en un problema (proyecto) real. 2. El lenguaje de programación
empleado. 3. Nos enseñó a pensar un poco más (y mejor).
-
"La programación orientada a objetos".
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?
-
"Aprender un modelo para estructurar un problema específico".
-
"Sin lugar a duda, creo que este curso en su totalidad es de gran utilidad
para la vida estudiantil y profesional. Es lo que realmente se espera desde
que se entra en carrera."
-
"Aprender a diseñar un problema para luego facilitar la codificación
y además me pareció útil aprender a codificar en Java."
-
"El diseño de proyectos me pareció muy útil, haberlo
hecho como una compánía me pareció muy pedagógico."
-
"El aprendizaje efectivo logrado en la parte de captura de requerimientos
y diseño. La programación en Java y orientada a objetos."
-
"La idea de trabajar en grupo de mayor cantidad de gente en el que cada
uno tiene un cargo definido. La simulación de una companía
me pareció excelente."
-
"1. El trabajo en grupo. 2. Capturar requerimientos, funciones, atributos,
etc. 3. Los modelos. 4. La orientación a objetos."
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:
-
"La forma de evaluación de la materia no estuvo muy clara.".
-
"Tener que compartirlo con otras materias en un trimestre."
-
"El curso exige una carga de trabajo muy grande y vale muy pocos créditos
(en mi caso que sólo estoy viendo el Taller)."
-
"Haber tenido que recortar tanto el proyecto y en consecuencia no haber
podido terminar lo inicialmente planteado".
-
"La falta de tiempo para culminar el proyecto efectivamente."
-
"Es un curso muy absorbente, requiere de mucha dedicación y trabajo
continuo. Otra cosa que me disgustó fue el hecho de que a mitad
de trimestre se torna muy repetitivo (aunque reconozco que fue la única
manera de aprender) por el hecho de que teníamos que repetir los
trabajos porque su calidad no era la más óptima."
-
"La constante creación de documentos."
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:
-
"Nada".
-
"No creo que haya nada inútil, todo es importante."
-
"En realidad todo me pareció útil".
-
"Todo me pareció útil".
-
"Nada, creo que todos, algunos aspectos más que otros, son útiles."
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:
-
"Motivante."
-
"Motivante."
-
"Motivante."
-
"Me parece una materia muy importante y motivante, aunque sería
un mayor estímulo si se obtuviesen calificaciones un poco mejores
(relación esfuerzo-calificación)."
-
"Muy motivante."
Otros califican más el grado de motivación:
-
"Un poco desmotivante pero fue porque no hay incentivo de producir o simplemente
algo de apoyo moral (por parte de todos), por lo demás fue motivante."
-
"Al principio del trimestre es un curso motivante, debido a que todo es
nuevo y por fin es un curso que nos sirve para el futuro, ya al final del
trimestre la motivación baja debido a la gran cantidad de trabajo
y dedicación que requiere."
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:
-
"Debe mejorarse la enseñanza que tuvimos del lenguaje de programación
usado (Java)".
-
"Debe mejorarse la forma de dar las clases de Java. El hecho de que el
preparador conozca el lenguaje no implica que lo sepa impartir. "
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:
-
"En la parte de Pruebas e Integración no se hizo tanto énfasis
como en la parte de Diseño."
-
"Hacer más énfasis en los diagramas de colaboración
y la parte de planificación de pruebas."
-
"Creo que la parte de los diagramas de colaboración y modelo estructural
deben profundizarse. Los ejemplos del libro texto y los dados en clase
no se comparan con los que tuvimos que realizar en el trabajo."
-
"Debe expandirse testing y diagramas de colaboración."
Para un estudiante de la teoría, fue mucho trabajo práctico:
-
"En mi caso que sólo curso la teoría, me pareció que
debía trabajar mucho a nivel práctico, aunque ese problema
se eliminará al unir la teoría con la práctica."
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:
-
"Creo que debe comenzar la parte práctica (realización de
tareas) un poco más temprano. Si vemos el desarrollo de Delta Pensum
y la elaboración de la página web, ambas contaron con una
duración de 15 días para su elaboración, sin embargo
los niveles exigidos entre uno y otro no tienen comparación. Por
otro lado considero importante que los trabajos teóricos vayan de
la mano con la codificación, ya que muchas veces encontramos obstáculos
a la hora de programar lo que teníamos pensado; lo que trae como
consecuencia que se presenten discordancias entre el diseño y el
sistema como tal."
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:
-
"Explicar los defectos de cada uno (o del grupo) de una forma más
clara, si es posible mostrando ejemplos concretos."
-
"Me parece que el curso mejoraría si esta materia es sólo
diseño y en la cadena se continúa con el resto de la materia,
sería más fácil de asimilar."
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:
-
¿Qué recomendaciones le haría al profesor para que
mejore su pedagogía? ¿Qué aspectos importantes considera
que él domina?
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.
-
"El profesor conoce los comportamientos y tendencias que existen
cuando se trabaja con más de 7 personas en un grupo de desarrollo
de software".
-
"A veces una persona del grupo de trabajo se siente motivado y quiere trabajar
pero no siempre las demás personas ven este incentivo y simplemente
no la dejan trabajar, luego esta persona se desmotiva y no produce lo que
hubiese podido si desde un principio le hubiesen dado la oportunidad."
-
"...No pierda nunca las herramientas (tan importantes para un estudiante)
como la comunicación, la comprensión y el interés
por el aprendizaje."
-
"Espero que conserve la terapia de los oreos, creo que dio muy buenos
resultados, al igual que el humor aplicado en el ejemplo de la juguetería."
-
"Me pareció excelente el feedback que recibíamos casi inmediatamente
luego de una entrega, otros profesores se quedan durante semanas con los
trabajos..."
-
"Que fuese menos estricto en cuanto a las notas."
-
"Creo que los proyectos que se asignan a este curso y la manera de evaluar
deben considerar el hecho de que es un salto bastante grande en cuanto
a la forma de trabajar y tiempo y dedicación requeridos [...] Sería
muy ambicioso pensar que podemos rendir igual que en otros cursos cuando
primero tenemos que acostumbrarnos a trabajar con tantas otras personas
en un proyecto comparativamente Macro."
6. Conclusiones y recomendaciones
En conclusión:
-
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
-
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.
-
A los estudiantes les costó mucho lograr consistencia entre sus
modelos.
-
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).
-
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.
-
El tópico técnico más dificultoso fue sin lugar a
dudas la elaboración de diagramas de colaboración.
-
El orden de cobertura de tópicos fue adecuado y representa un avance
respecto al primer experimento docente.
-
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.
-
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.
-
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.
-
Surgieron problemas interesantes en la dinámica de los equipos de
estudiantes que ameritan más estudio y preparación por parte
del profesor.
-
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:
-
Conservar el texto y enfoque utilizados.
-
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.
-
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.
-
Planificar con mayor cuidado el alcance del proyecto, ajustándose
a desarrollos incrementales e iterativos con horizontes de
desarrollo mayores al trimestre.
-
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.
-
Colocar Bases de Datos I como requisito de Sistemas de Programas.
-
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.
-
Estudiar y resolver los problemas de los estudiantes en la elaboración
de diagramas de colaboración.
-
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.
-
Repensar el tópico de pruebas (testing) orientado por objetos
a la luz del poco tiempo disponible en el curso.
-
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.
-
Formalizar los tópicos de dinámica de grupos que puedan resultarle
de interés a los estudiantes.
-
Estudiar la posibilidad de incluir inspecciones formales para desarrollos
orientados por objetos.
-
Revisar la cobertura del tópico de Patrones.
-
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.
-
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.