Orientando Sistemas de Programas
a Objetos: Un experimento docente
Alejandro Teruel
Departamento
de Computación y T.I.
Universidad Simón
Bolívar
16 de Abril de 1999
Tabla de contenido
1. Introducción
2. Motivación del
experimento
2.1 Los cambios
respetan el objetivo general de las asignaturas.
2.2
Los cambios actualizan contenidos
2.2.1
Popularización de los lenguajes de programación orientados
a objetos
2.2.2 Ingeniería
de software orientada a objetos
2.2.3 Desarrollar software orientada
a objetos es más
que usar un lenguaje orientado a objetos
3. Alcance del cambio propuesto
3.1 El programa tradicional
3.2 El programa experimental
3.3 Temas afectados del programa
tradicional
4. Evaluación del curso
4.1 ¿Por qué tareas
y no exámenes?
4.2 ¿Por qué tantas
tareas?
4.3 ¿Por qué tareas
en grupo?
5. Resultados del curso
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é opina
de la forma de evaluar el curso?
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 programaron en Java.
Los resultados fueron alentadores pero no definitivos. Los cursos aún
requieren de ajustes importantes.
En este reporte presentaré:
-
La motivación para el experimento;
-
Los alcances del experimento;
-
Los resultados alcanzados;
-
Las recomendaciones que se derivan de la experiencia.
concentrándome en Sistemas de Programas.
2. Motivación del experimento
Los cambios propuestos:
-
Respetan los objetivos generales de las asignaturas;
-
Actualizan contenidos, sustituyendo técnicas más asociadas
al desarrollo de software imperativo no orientado a objetos por técnicas
más cónsonas con el desarrollo de software orientado por
objetos. El paradigma imperativo orientada por objetos tiende claramente
a ubicarse como el paradigma dominante tanto académica como industrialmente;
2.1 Los cambios respetan el objetivo general
de las asignaturas
El objetivo general de ambas asignaturas es:
Introducir al estudiante a la problemática y a aquellas técnicas
de desarrollo de software de mediana envergadura representativas del enfoque
disciplinado asociado con la Ingeniería de Software. Se enfatizarán
las técnicas de diseño y validación de sistemas de
programas que:
-
Incrementen la productividad del desarrollador de software;
-
Permitan controlar la complejidad inherente a sistemas de mediana envergadura;
-
Introducen al estudiante al desarrollo en equipos (teams).
Como las técnicas de desarrollo orientadas a objetos son tan
"...representativas del enfoque disciplinado asociado con la
Ingeniería del Software"
como las clásicas técnicas estructuradas que reemplazan,
el objetivo general permanece como tal. Sin embargo hay que
reconocer que el bien conocido efecto difuminador que tienen las técnicas
orientadas a objetos sobre la frontera entre los procesos de análisis
y diseño de software hicieron que se enfatizaran aspectos de análisis
que tradicionalmente no han sido cubiertos en estas asignaturas.
2.2 Los cambios actualizan
contenidos
La incorporación de la tecnología orientada a objetos a Sistemas
de Programas y su Taller, es necesario y oportuno por las siguientes
razones:
-
La tecnología se ha popularizado enormemente al punto que es la
tecnología más utilizada en un importante sector de la industria
de producción de software;
-
La tecnología ha madurado notablemente en la última década;
-
La tecnología presenta importantes ventajas en cuanto a sus posibilidades
de estructuración y reutilización;
-
Para usar bien esta tecnología se requiere de un aprendizaje considerable
en cuanto a tiempo y esfuerzo. No es en absoluto cierto que las técnicas
convencionales de desarrollo de software aplican al software orientado
por objetos y que basta con aprender un lenguaje de programación
orientado a objetos para desarrollar buen software orientado a objetos.
2.2.1
Popularización de los lenguajes de programación orientados
a objetos
La programación orientada a objetos aparece en 1968 con el lenguaje
Simula
68 como contribución pragmática a la exploración
del significado de la noción de tipos de datos. Transcurrió
casi una década para que ese lenguaje escandinavo inspirara
a los investigadores e Xerox Parc a inventar al lenguaje y ambiente de
programación Smalltalk . Smalltalk encendió el interés
académico por la orientación a objetos aprovechando un cierto
agotamiento en los trabajos que buscaban un mecanismo matemáticamente
más sólido basado en los llamados tipos abstractos de
datos. Para los investigadores en semántica de tipos abstractos
de datos, las nociones orientadas a objetos carecían de claridad
conceptual; para los programadores que buscaban sistemas más flexibles,
sobre todo para desarrollar interfaces gráficas más amigables,
Smalltalk
mostraba un potencial extraordinario --si su velocidad de ejecución
podía ser mejorado. Se suscitó una intensa competencia
por casar los nuevos conceptos con C, el lenguaje imperativo más
eficiente y barato para la programación de sistemas de software
de infraestructura (systems programming en la jerga de la época,
en contraposición a applications programming) de la época.
Así nació C++ que pasó a ser un éxito
tanto en el mundo académico como en el mundo comercial. La aparición
de Java, que puede considerarse como una versión de C++
simplificada, depurada y orientada a las necesidades del mundo interconectado
de Internet en general y el WWW en particular, terminan de despejar las
dudas; la programación orientada por objetos se establece firmemente
como el paradigma de preferencia para los nuevos desarrollos en interfaces
gráficas, aplicaciones multimedia, paquetes de simulación,
herramientas de análisis estadístico, manejadores de bases
de datos, paquetes integrados y aplicaciones como comercio electrónico.
2.2.2 Ingeniería de software orientada
a objetos
Sin embargo, los programadores e investigadores del nuevo paradigma de
programación orientada a objetos, rápidamente se percataron
que no lo lograban aprovechar los métodos y técnicas tradicionales
de desarrollo de software --para ser francos, en muchos casos los estorbaban.
En 1987, la entonces joven conferencia del Association for Computing Machinery
(ACM), OOPSLA 87 (Object Oriented Programming Systems, Languages and Applications)
presenta por primera vez una sesión (track) dedicada a la
orientación por objetos y la ingeniería del software. Sin
embargo son los libros de Booch ("Object-Oriented Design", 1990), Shlaer
y Mellor ("Object-Oriented Systems Analysis", 1988), Rumbaugh, Blaha, Premerlani,
Eddy y Lorensen ("Object-Oriented Modeling and Design",1991") y Jacobson
("Object-Oriented Software Engineering: A Use Case Driven Approach", 1992)
que presentan y divulgan técnicas de Ingeniería de Software
específicas a desarrollos orientados a objetos. La medida de la
adopción de estas técnicas Reconociendo claramente
el esfuerzo y popularización de estas técnicas, Roger Pressman
agrega dos capítulos sobre objetos (análisis, diseño)
a los veinticuatro capítulos de la tercera edición de
"Software Engineering: A Practitioner's Approach" (1992)--lo más
cercano que existe a un handbook para el área y libro de
referencia para las asignaturas de Sistemas de Programas. Cinco
años más tarde (1997) para la cuarta edición del libro,
Pressman dedica a la Ingeniería del Software Orientada por Objetos,
una
de las cinco partes en que organiza su libro. Es un total de cinco
capítulos, dedicados a conceptos básicos, análisis,
diseño , pruebas y métricas. En ese libro, Pressman precisa
claramente:
"Durante la primera mitad de los años 90, la ingeniería
de software orientada a objetos se convirtió en el paradigma de
elección para muchos productores de software y un creciente número
de sistemas de información y profesionales de la ingeniería.
A medida que pase el tiempo las tecnologías de objetos sustituirán
a los enfoques clásicos de desarrollo de software."
2.2.3 Desarrollar software orientada a objetos es más
que usar un lenguaje orientado a objetos
En 1994, Gamma, Helm, Johnson y Vlissides publicaron el libro "Design Patterns"
el cual tuvo un impacto inmediato en la comunidad de producción
de software orientada a objetos. Los investigadores argumentaron que
se repetían ciertos patrones (patterns) en la estructura
del diseño de muchos de los mejores software orientado a objetos,
En el libro identificaron veintiun patrones. En efecto mucho de estos patrones
conducen a software más flexible, reutilizable y legible. En los
años siguientes se produjo una explosión de investigación
de patrones que incluye cuatro conferencias internacionales dedicadas al
tema y libros como los de Buschmann, Meunier, Rohnert, Sommerlad y Stal
("A System of Patterns: Pattern-Oriented Software Architecture") y Fowler
("Analysis Patterns", 1997).
En 1997, supervisé a mis estudiantes en una búsqueda de
seis patrones básicos en los proyectos de grado de la carrera de
Ingeniería de Computación. No encontramos rastro de ninguno
de los seis patrones, a pesar que en todos los proyectos podía haber
incorporado, beneficiosamente, al menos un patrón. La revisión
de estilo de programación parecía sugerir que los estudiantes
programan en un lenguaje orientado a objetos ¡sin aprovechar, y en
algunos casos sin dominar, los conceptos y mecanismos orientados a objetos!
Algunos comentarios de pasillo de profesores de asignaturas como Lenguajes
de Programación, Sistemas de Información, Bases
de Datos e Interfaces con el Usuario corroboran que el estudiante
tiene un dominio insatisfactoria y precario de la tecnología orientada
a objetos.
La estructura del software orientado a objetos es diferente a
la estructura de software más convencional; por esta razón
se requieren de técnicas de diseño diferentes a las técnicas
tradicionales. Estas técnicas no son evidentes y por ende requieren
ser incorporadas en cualquier programa de estudios que pretenda formar
a profesionales capaces de manejar apropiadamente la tecnología
orientada a objetos. No es realista pretender que el estudiante las adquiera
por si sólo.
3. Alcance del cambio propuesto
Propusimos actualizar el programa de la asignatura de manera de cubrir
satisfactoriamente los elementos de diseño, programación
y validación de software orientado a objetos de envergadura mediana.
Desde un principio fue claro que para lograr una cobertura razonable
de estos elementos, algunos tópicos tradicionales en el programa
debían ser recortados o eliminados.
3.1 El programa tradicional
Tradicionalmente se cubrían los siguientes tópicos en Sistemas
de Programas:
-
Introducción
Los sistemas de programa de mediana y gran envergadura. Características.
El ciclo de vida de un sistema de programas.
-
Diseño de sistemas de programas
Criterios de diseño: modularidad, acoplamiento, cohesión,
ocultamiento de información, reutilizabilidad. Estrategia de programación
en ambientes tipo Unix. Diseño estructurado. Diseño orientado
a objetos.
-
Validación de sistemas de programas
Diseño de casos de pruebas: métodos caja blanca y caja
negra. Planificación de pruebas. Pruebas de integración.
Pruebas regresivas. Inspecciones formales.
-
Herramientas básicas para el equipo de desarrollo
Control de configuraciones.
-
Introducción a la dimensión no técnica del desarrollo
del software.
Conviene destacar que si bien el curso preveía el estudio del tópico
de diseño orientado a objetos, la cobertura era muy superficial,
tanto por el tiempo dedicado (seis a diez horas de clase) como por el momento
de la cobertura (dentro de las últimas diez a catorce horas de clase
de Sistemas de Programas).
3.2 El programa experimental
Consideramos que el curso experimental debía seguir de cerca una
metodología estable y un texto reconocido en el área y escogimos
el texto de Rumbaugh, Blaha, Premelani, Eddy y Lorensen ("Object-Oriented
Modeling and Design, Prentice-Hall, 1991) que además cuenta con
una traducción razonable al Castellano. Descartamos basar el curso
en la notación más reciente de UML (Unified Modeling Language)
por cuanto faltó tiempo para revisar dos posibles opciones:
-
Craig Larman: "Applying UML and Patterns: An Introduction to Object-Oriented
Analysis and Design". Prentice-Hall, 1998.
-
Murray Cantor: "Object-Oriented Project Management with UML", Wiley, 1998.
Conscientes de ciertas deficiencias en OMT, decidimos incorporar material
sobre patrones de:
-
Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides: "Design Patterns:
Elements of Reusable Object-Oriented Software". Addison-Wesley, 1995.
y material sobre la prueba de sistemas orientados por objetos e ingeniería
de software de:
-
Roger Pressman: "Software Engineering: A Practitioner's Approach". Cuarta
edición. McGraw-Hill, 1997 (la versión correspondiente en
Castellano es de 1998).
En consecuencia, el programa del curso resultó ser:
-
Introducción.
Los sistemas de programas de mediana y gran envergadura. Características.
Definición de Ingeniería de Software. Procesos y productos
en el desarrollo de software, Factores críticos en el desarrollo
de software, Elementos de gerencia de proyectos de desarrollo de software.
-
Programación orientada a objetos.
Cases, atributos, métodos, objetos y herencia.
-
Modelado orientado a objetos.
Los modelos de OMT (Object Modeling Technique) para Ingeniería
de Software Orientado a Objetos. La problemática de las especificaciones
informales.
-
El modelo estructural o estático:
Clases, herencia, agregación y asociación. El diagrama
de relaciones estructurales entre clases, Identificación de clases.
-
El modelo dinámico:
Eventos, estados, transiciones y acciones. Trazas de eventos. Operaciones
en estados. Autómatas anidados asociadas a clases. Concurrencia
entre autómatas.
-
El modelo de uso:
Actores y casos de uso. Acciones y respuestas. Acciones alternas. La
relación usa entre casos de uso.
-
El modelo funcional:
Actores, procesos, flujos y repositorios. Diagrama de flujo de datos
(DFD). Niveles de un DFD.
-
Pruebas (Testing) de sistemas orientados a objetos.
Definición del proceso de pruebas. Barreras psicológicas,
sociales y culturales. Etapas de prueba:
-
Pruebas caja blanca y caja negra de métodos de clases.
-
Pruebas unitarias de clases.
-
Pruebas de integración,
-
Pruebas de validación de requerimientos
-
Pruebas del sistema.
Planificación, ejecución y evaluación de las etapas
de prueba.
-
Análisis orientado a objetos.
Requerimientos del usuario y requerimientos del patrocinante. Requerimientos
funcionales y no funcionales. Uso de los modelos en el proceso de análisis.
-
Diseño orientado a objetos.
Criterios de diseño: encapsulamiento, reutilizabilidad, eficiencia,
seguridad y flexibilidad. Uso de los modelos en el proceso de diseño.
Patrones de diseño: Compuesto, Estrategia, Decorador, Fábrica
Abstracta, Comando, Iterador.
3.3 Temas afectados del programa tradicional
Los tópicos del programa tradicional que se vieron afectados fueron:
-
Diseño estructurado.
El método de diseño estructurado toma como punto de partida
un diagrama de flujo de datos (DFD) y, utilizando heurísticas para
reducir el grado de acoplamiento y aumentar el nivel de cohesión,
permite elaborar un diagrama jerárquico de estructura
para cada uno de los programas en un sistema de programas. El diagrama
de estructura indica la jerarquía entre las rutinas que conforman
cada programa.
Este tópico fue eliminado.
-
Estrategia de programación en ambientes tipo Unix.
Tradicionalmente se introducía la noción de filtro y
flujo (filter y pipe) para mostrar una sencilla arquitectura
tipo pipeline para un sistema de programas. Este tópico también
fue eliminado.
-
Inspecciones formales.
Las inspecciones formales son métodos grupales de validación
de los productos asociados al desarrollo de un software, Complementan los
métodos más conocidos de pruebas (testing) y se basan
en inspeccionar manualmente los productos en base a listas de revisión
(checklists). Este tópico no fue cubierto por cuanto no hemos
elaborado las listas de revisión para software orientado a objetos.
-
Control de configuraciones.
Este tópico también fue eliminado. Normalmente ocupaba
una sesión (dos horas) de clase.
-
La dimensión no técnica del desarrollo del software.
La cobertura de este tópico se redujo. Técnicamente el
tópico se cubría en una sesión de clase, pero su peso
era más importante por cuanto formaba la tarea final del curso.
Sin embargo, la organización del Taller de Sistemas de Programas
en equipos de diez a veinte personas, obligó a que algunos de los
puntos de este tópico salieran a relucir en el desarrollo del Taller.
4. Evaluación del curso
La descripción del experimento no estaría completo sin una
indicación de la forma que se decidió evaluar el desempeño
de los estudiantes.
La evaluación de Sistemas de Programas se basó
en seis tareas:
|
Tópicos cubiertos del programa
|
Tamaño de equipo
|
Porcentaje
|
| Introducción. Modelo estructural. |
Individual
|
17%
|
| Modelo dinámico |
Individual
|
16%
|
| Modelo de uso |
Hasta 2 personas
|
17%
|
| Pruebas de métodos y unitarias |
Hasta 2 personas
|
15%
|
| Integración y validación reqs. Patrones |
Grupos de Taller (10-20personas)
|
15%
|
| Transcripción de una sesión de clase |
Hasta 2 personas.
|
20%
|
Vale la pena dar algunas explicaciones sobre la última tarea. Más
que tarea era un trabajo en la que grupos de dos estudiantes debían
transcribir y elaborar una sesión de clase con miras a obtener un
libro
electrónico sobre el curso.
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.
4.1 ¿Por qué tareas y no exámenes?
Consideramos que que es injusto evaluar la capacidad de crear un diseño
en base a lo que el estudiante es capaz de hacer en un ambiente de exámen
de dos horas o tres horas, Nos parece más interesante permitirle
al estudiante mucho más tiempo de modo que pueda pensar bien sus
respuestas, planteándose quizás alternativas.
Idealmente cualquier asignatura sobre diseño debe requerir de
sus estudiantes que creen y evalúen diseños. En el
caso de la asignatura de Sistemas de Programas, donde se diseñan
artefactos de mediana envergadura, el mecanismo de un exámen in
situ de dos horas pueden evaluar cuán rápido puede
un estudiante crear analizar requerimientos, crear diseños o planificar
pruebas pero no cuan bien puede hacerlo.
4.2 ¿Por qué tantas tareas?
Hemos venido notando una tendencia cada vez más pronunciada por
parte del estudiante de estudiar para el exámen. Con este esquema
esperábamos lograr que el estudiante distribuyera sus esfuerzos
en forma más pareja a lo largo del trimestre.
Por supuesto que el problema que surge es el volumen de trabajo de corrección
que ello genera para el profesor de la asignatura. Para reducir este volumen
se hicieron algunas experiencias no convencionales de corrección
basadas en ideas del Prof. Nagib Callaos:
-
Las tareas se entregaban sólo con el número de carnet del
participante;
-
Las tareas de una sección se corregían por los estudiantes
de la otra sección;
-
La corrección se realizaba en una sesión de clase como parte
de la discusión de soluciones;
-
Despues de la corrección el profesor de la sección revisaba
las correcciones para ajustar las notas en caso que éstas no correspondieran
al trabajo presentado.
Este esquema tuvo sus bemoles, principalmente aquellos acarreados por la
variedad de soluciones de diseño presentadas y la dificultad para
los estudiantes de evaluarlas, por lo que las sesiones de discusión
de soluciones tendían a dedicarle demasiado tiempo a la discusión
del puntaje a colocar en un caso particular u otro.
4.3 ¿Por qué tareas en grupo?
Para ser honestos, comenzamos a solicitar las tareas en grupo para recortar
el volumen de tareas a corregir que amenazaba con sobrepasar nuestra capacidad
de respuesta despues de la segunda tarea sobre todo por las crecientes
necesidades de corrección de las transcripciones de sesiones de
clase.
Por supuesto que las tareas en grupo también reforzaba el objetivo
de aprender a trabajar en equipo y daba justamente la oportunidad de discusión
de alternativas de diseño o enfoques.
5. Resultados del curso
Los dos cursos resultaron trabajosos pero populares. Los estudiantes se
sintieron muy motivados, básicamente por tres factores:
-
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 pa'ginas WWW;
-
Java;
-
Tecnología orientada por objetos;
-
El efecto Hawthorne.
Las notas fueron ligeramente superiores a lo normal, con una media de 61.7
sobre 100 (63.83 en una sección y 59.7 en la otra) y una desviación
estándar de 13 puntos. Las notas se apelotonaron --el 85%
de los estudiantes obtuvieron notas en el rango de la media más
o menos una desviación estándar. Este apelotonamiento
puede explicarse parcialmente como consecuencia de las tareas en equipos
en Sistemas de Programas y el estar trabajando en equipos muchos
más grandes en Taller de Sistemas de Programas (con lo que
postulamos la existencia de un factor tipo group think).
5.1 Logros
Creemos que los estudiantes han:
-
Salido motivados para trabajar en equipos medianos (4-15 personas) y con
una importante experiencia positiva al respecto, básicamente gracias
a la excelente labor realizado en el Taller de Sistemas de Programas.
En
este sentido el experimento de incrementar el número de estudiantes
por equipo de trabajo en el Taller debe considerarse muy exitoso.
-
Obtenido un dominio mucho más sólido en tecnología
orientada a objetos de lo que han obtenido en el pasado --los comentarios
futuros de otros profesores que trabajen con este grupo de estudiantes
será valioso como confirmación de esta opinión. De
nuevo, esto no hubiera sido posible sin lel sacrificio de otros tópicos
para poder dedicar el trimestre completo a técnicas de Ingeniería
de Software Orientada a Objetos.
-
Obtenido mayor claridad sobre el rol de las asignaturas formales y las
cadenas (Sistemas de Operación, Interfaces con el Usuario, Bases
de Datos, Control de Proyectos y Sistemas de Información)
en su formación. La tecnología orientada a objetos en general
y el método OMT en particular establecen vinculaciones más
fuertes con asignaturas que tradicionalmente se mostraban más independientes.
-
Mejorado su enfoque de cómo desarrollar software de envergadura
mediana. No me atrevería sin embargo a indicar que la intuición
(insight)
que han desarrollado es superior a la desarrollada en cursos anteriores
--ciertamente no la siento inferior.
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:
-
"Diseño y planificación de todas las partes del software".
-
"Aprender algo del desarrollo sistemático de software de mediana
escala."
-
"Haber concientizado mi rol futuro [como] ingeniero... la aplicación
de las herramientas de diseño... la evaluación del curso,
tan fuerte como un taller pero con más dudas sobre qué hacer."
-
"Aprender a trabajar en un equipo numeroso."
-
"Aprender a realizar páginas web...[en la Teoría] aprender
el valor que tienen las fases de diseño y testing."
-
"Aprender a diseñar un programa grande".
-
"El diseño de clases."
-
"El estudio de los diferentes modelos que se pueden utilizar en el desarrollo
de software."
-
"Modelo estático, modelo de uso, patrones.... [En el taller trabajar]
en equipos con gente desconocida (simulación de trabajo real)."
-
"Modelos de uso, dinámico y estructural."
-
"Casos de uso".
-
"La parte de patrones..."
-
"Los modelos dinámicos."
-
"Casos de uso y modelo dinámico."
-
"La parte del modelo estructural."
-
"Programación orientada a objetos".
-
"La forma de evaluar."
En conclusión, ¡ no hay tópico del curso que no le
haya gustado más a al menos uno de los estudiantes!
5.1.2 ¿Qué fue lo que le pareció
más útil a los estudiantes?
-
"El trabajo en grupo."
-
"La experiencia de trabajar en un equipo tan grande y con gente nueva...
En realidad me pareció que el curso fue muy completo."
-
"El manejo de las etapas que hay que seguir para manejar software".
-
"El diseño orientado a objetos"
-
"El modelo estructural y el modelo dinámico"
-
"Aprender a diseñar... ver los problemas en forma más abstracta
y lograr solucionarlos más metodoógicamente."
-
"Todo me pareció útil".
-
"Aprender a diseñar un programa, trabajar en equipo."
-
"La aplicación de modelos, patrones y el análisis de dónde
pueden estar los posibles errores de un programa."
-
"Las formas de diseñar las pruebas."
-
"El modelo de clases [sic]".
-
"Aprender una metodología ingenieril para computación."
-
"Herramientas formales para el diseño, desarrollo y prueba del software."
-
"La metodología OMT (modelos) y las herramientas de programación
orientada a objetos. No considero que ningún aspecto haya sido inútil."
-
"La parte de diseño en general y de testing".
-
"La programación orientada a objetos y la programación en
Java."
-
"La programación orientada a objetos, pasos a seguir al desarrollar
un sistema."
5.2 Contratiempos y fallas
El curso es sumamente exigente por la cantidad y densidad de material nuevo
que el estudiante debe asimilar. En mi opinión estos aspectos fueron
neutralizados por el efecto Hawthorne y la novedad del material cubierto.
Me preocupa que en dos a tres años cuando la "novedad" desaparezca,
aparecerán serios problemas.
En buena medida el problema radica en el texto (y la metodología)
escogida. Considero que el texto de Rumbaugh et al es muy avanzado para
el nivel del estudiante y más cónsono con un curso de cuarto
o incluso quinto año de la carrera. Veamos los problemas que surgen,
tópico por tópico:
-
El modelo estructural.
Manejar con propiedad el modelo estructural propuesto en OMT se beneficiaría
enormemente de que los estudiantes ya dominaran el modelo E-R de Bases
de Datos. De hecho el modelo E-R puede verse como un modelo más
simple que el estructural y como tal obliga al estudiante a clarificar
conceptos importantes como relaciones sin que se vea obligado a hacer distinciones
(que pueden ser bastante sutiles) entre asociaciones y agregaciones. El
riesgo que se corre al introducir el modelo estructural en Sistemas
de Programas antes del modelo E-R en Bases de Datos es que se
confunda al estudiante y se sienten obstáculos para una comprensión
cabal en Bases de Datos. Para rematar, opino que la comunidad que
trabaja en bases de datos relacionales es en general mucho más formal
y cuidadosa en su manejo conceptual que la comunidad que trabaja en tecnología
orientada a objetos, lo que incrementa la posibilidad de sembrar confusiones
futuras en el estudiante. Al respecto, será instructivo e importante
ver el desempeño de este grupo de estudiantes en la asignatura de
Bases
de Datos.
-
El modelo dinámico.
El problema es análogo al del modelo estructural. En este caso
OMT maneja la noción de autómatas anidados concurrentes
cuando en el mejor de los casos, los estudiantes cursan en paralelo con
Sistemas
de Programas, la asignatura Traductores e Interpretadores donde
les introducen la noción de autómata finito (secuencial).
De nuevo la técnica de OMT es mucho más rica (anidación,
eventos comunes, acciones asociadas a transiciones, concurrencia, acciones
asociadas a estados) y en efecto puede estarse dando un fenómeno
de estarle exigiendo al estudiante que "corra antes que haya aprendido
a caminar."
-
El modelo de uso.
El modelo de uso se beneficiaría de un dominio de las nociones
de eventos y de manejadores de eventos que normalmente los estudiantes
obtienen despues de haber cursado Sistemas de Operación
e Interfaces Gráficas. Resulta evidente que para una proporción
no despreciable de estudiantes, la narrativa informal de los casos de uso
resulta demasiado soft ("paja" en su jerga). Hay que destacar que
el modelo de uso no forma parte de OMT pero se incorporó al curso
por lo cómodo que resulta comenzar un desarrollo orientado por objetos
por este tipo de modelo relativamente informal.
-
El modelo funcional.
En mi opinión el modelo funcional resulta singularmente inútil
y corresponde a uno de los pocos errores cometidos en OMT. Las razones
que subyacen esta afirmación pueden encontrarse haciendo clic
aquí.
-
Análisis orientado por objetos.
En el curso se trató de cubrir este tópico de la manera
más escueta posible, concentrándose en aquellos aspectos
necesarios para sentar la base del proceso de diseño y evitando
cubrir aspectos no menos importantes usualmente trabajados en Sistemas
de Información referentes a los mecanismos de interacción
entre el analista, el usuario y el patrocinante, cómo involucrar
a todos los interesados en el sistema, el manejo del cambio organizacional,
la estimación del costo y esfuerzo del desarrollo y la implantación
y finalmente el análisis de factibilidad del proyecto. En este sentido,
el texto de Rumbaugh sólo adolece del problema que no hace
esfuerzos por identificar la frontera del sistema, identificar las fuentes
de volatilidad de requerimientos e identificar requerimientos no funcionales,
todo lo cual tiene un gran impacto en el proceso de diseño. En este
sentido el capítulo que dedica al análisis se queda muy corto
al analizar un sistema de cajeros automáticos, cuando para simplificar
su tratamiento obvia completamente los aspectos de tiempo de respuesta,
seguridad y resguardos.
-
Diseño orientado a objetos.
Una vez identificados los diversos modelos de OMT, Rumbaugh et al sugiere
que los primeros tres pasos de diseño consisten en la selección
de la arquitectura del software, la identificación y estructuración
de la concurrencia existente en el sistema a desarrollar y la escogencia
del enfoque para manejar los repositorios de datos. Ante estas recomendaciones
el profesor de Sistemas de Programas se topa con los siguientes
problemas:
-
El estudiante no conoce arquitecturas de software . De hecho las primeras
dos arquitecturas (por capas y en pipeline) las verá
en Sistemas de Operación, la arquitectura típica basada
en manejadores de eventos la verá en Interfaces Gráficas
y
la arquitectura basada en reglas la verá en Lenguajes de Programación.
Es decir el tema es claramente prematuro.
-
El estudiante no tiene aún nociones de concurrencia, las que se
obtienen en Sistemas de Operación.
-
El estudiante no tiene ningún conocimiento de cómo manejar
volúmenes de datos. Estas nociones se imparten en Bases de Datos.
En resumen, para el estudiante muchos de los elementos de diseño
general recomendados por Rumbaugh et resultan decididamente prematuros
o desconocidos. Ello obliga al docente a obviar estos temas, lo cual deja
una sensible falta de clausura en el tema de diseño.
-
Pruebas orientadas a objetos.
El texto de Rumbaugh et al no trata el tópico de elaboración
de pruebas ni inspecciones para software orientado a objetos. Decidimos
(incorrectamente) basarnos en el libro de Pressman ("Software Engineering:
A Practitioner's Approach", 1997) . El material del libro es insuficiente
para el nivel de cobertura adecuado al tema. Tuve que adaptar el material
dictado en cursos anteriores a software orientado a objeto, lo que me llevó
a proponer dos métodos
nuevos para la generación de casos de prueba.
-
Patrones.
Un tema fascinante al que no le pudimos hacer justicia en esta versión
experimental del curso. El problema pedagógico del tema es que se
suele presentar como un catálogo exhaustivo y árido; el desafío
estriba en hacer atractivo este material. Lamentablemente el material sobre
patrones no fue utilizado en el Taller de Sistemas de Programas de
modo que sólo se cubrió en la penúltima semana del
trimestre, coincidiendo por los demás con un momento muy álgido
del trimestre. Sólo es a raiz de la última tarea (entregada
en la doceava y última tarea del trimestre) donde a los estudiantes
se les pide que rediseñen sus trabajos del taller usando patrones
es que la mayoría de los estudiantes palpa la importancia del tema.
Otros contratiempos o fallas que surgieron fueron:
-
Dificultades para cubrir ciertos tópicos en teoría (Sistemas
de Programas) antes que fueran requeridos en el Taller de Sistemas
de Programas.
-
Los estudiantes no hacen uso de su bagaje formal, aún cuando les
hace falta. Esto salió a relucir con particular claridad en la tarea
dedicada al tópico de pruebas donde los errores comunes incluyeron:
-
No distinguir entre un grafo y un multigrafo ( visto en la asignatura
Algoritmos
y Estructuras III);
-
Ignorar la importancia del orden en una secuencia de aplicación
de métodos de generación de pruebas (Estructuras Discretas
I);
-
Ignorar la posibilidad de encontrar bases alternas linealmente independientes
con propiedades más cercanas a las buscadas (Estructuras Discretas
II);
-
Incomprensión de las implicaciones de imponer una precondición
a
una rutina (Algoritmos y Estructuras II);
-
Olvidar las características básicas de la representación
punto flotante (Organización del Computador).
-
Orden inadecuado de los modelos. El modelo de uso debe preceder a los demás.
-
Falta de ejemplos en software. Hay que enriquecer los ejemplos tratados
en clase.
-
Lo temprano del horario del curso (a partir de las 7:30 am). Menciono este
aspecto por lo tarde que entraban los estudiantes a las sesiones de clase.
Según dicen los estudiantes, este problema tiene dos causas principales:
-
El servicio de transporte de la USB, que efectivamente parece tener cada
vez menos unidades que llegan antes de las 7:30 am.
-
Trasnochos.
-
Tiempo perdido en la universidad. Varios estudiantes se quejaron que comenzaban
clases a las 7:30 am con Sistemas de Programas y culminaban a las
7:30 pm con Traductores e Interpretadores, obliga'ndolos a permanecer
hasta seis horas en los predios de la universidad sin clases y con pocos
o nulos recursos computacionales.
Soy de la opinión que en Sistemas de Programas hay dos asignaturas
pugnando por expresarse.
-
La primera asignatura (Sistemas de Programas propiamente dicha)
es una introducción a técnicas de programación, diseño
detallado (patrones) y pruebas unitarias para software mediano orientado
a objetos. Esta asignatura precede y motiva las asignaturas relacionadas
de Sistemas de Operación, Interfaces Gráficas, Bases de
Datos, Sistemas de Información y Control de Proyectos. Esta
asignatura integra las asignaturas del segundo año de la carrera
y motiva las de tercero y cuarto.
-
La segunda asignatura (Ingeniería de Software) entraría
más de lleno en tópicos más avanzados de requerimientos,
arquitecturas de software, relación hardware-software, uso de CASE,
desarrollo y uso de frameworks de objetos, planificación,
estimación y control de proyectos de desarrollo, pruebas de integración,
validación de requerimientos y de sistemas y mantenimiento. Es una
asignatura posterior a las indicadas en el párrafo anterior. Esta
asignatura (o cadena de asignaturas) integrarían esas asignaturas
actualmente de tercero y cuarto año.
Un esquema como el propuesto ayudaría a descargar la actual asignatura.
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?
Hay estudiantes que se percataron del desfase entre entre las dos asignaturas:
-
"Algunas veces la teoría estaba atrasada en relación al taller..."
Otros señalan algún tema específico, entre los que
destacan patrones, pruebas y el modelo funcional:
-
"El área de patrones, ya que al principio fue un poco confuso."
-
"Los patrones (tal vez se debe a que se dio en las últimas semanas
de clase)".
-
"No me gustó patrones."
-
"Los patrones y errores se dieron muy superficialmente."
-
"La parte del modelo funcional."
-
"La generación de pruebas con el método ciclomático."
-
"Las metodologías de pruebas."
-
"Los casos de pruebas."
Otra queja es el exceso de contenidos nuevos:
-
"ES MUCHA MATERIA PARA UN SOLO TRIMESTRE".
-
"Existen demasiados contenidos para un trimestre."
-
"El contenido del curso me parece extenso y no asimilable en un trimestre."
-
"Falta de tiempo. El curso fue muy apresurado para el interés que
despierta (sería ideal si sólo estuviéramos viendo
este curso)."
-
"O sobra materia o falta tiempo."
Uno señala:
Mientras que otros apuntan a la evaluación:
-
"La evaluación fue bastante pesada, ya que se realizaron cinco tareas
extensas y difíciles."
-
"La evaluación del curso, tan fuerte como un Taller, pero con más
dudas sobre qué hacer."
-
"Densidad y complejidad de las tareas."
5.2.2 ¿Qué fue lo que le pareció
menos útil?
Para algunos todo luce útil o al menos le dan el beneficio de la
duda:
-
"En cuanto a lo menos útil, es un poco difícil , ya que todo
el curso es útil de una u otra forma."
-
"Todavía no lo sé".
-
"Todo me pareció útil".
-
"No considero que ningún aspecto haya sido inútil."
Otros señalan al modelo funcional o a los patrones. Curiosamente
en este último caso hay una tendencia a excusar la apreciación
en base al tiempo dedicado al tema:
-
"El modelo funcional."
-
"Me pareció inútil el modelo funcional para efectos del curso."
-
"No le he encontrado utilidad a los patrones... Sería agradabl expandir
la información sobre los patrones."
-
"El estudio de los patrones ya que no se utilizaron,.,, Debe expandirse
el uso de patrones."
Dos estudiantes señalan el caso de uso. Ambos casos parecen gustar
más de la programación orientada por objetos. ¿Estamos
en presencia de una mentalidad más cercana al hacker?
-
"El diagrama de uso."
-
"Los casos de uso parecen poco útil, no sé si porque no se
ahondó mucho en el tema o porque siempre se manejó el mismo
ejemplo."
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:
-
"Este curso me pareció super-estimulante porque se le ve el queso
a la tostada en todo momento; eso se refleja en el gran esfuerzo que
pusimos todos."
-
"Aunque sí fue un poco extenso, el curso fue motivante ya que uno
descubre nuevos aspectos de la carrera".
-
"Sí es motivante."
-
"El curso es muy motivante y ha sido uno de los cursos de mi carrera que
más me ha gustado."
-
"Me abrió curiosidad sobre la materia futura, el campo laboral y
las especializaciones que se pueden tomar."
-
"Motivante, ahora puedo diseñar mis propios programas sin hacerlo
a los golpes."
-
"El curso es totalmente motivante."
-
"Muy motivante"
-
"Motivante."
Otros lo ubican en un punto medio:
-
"En un punto medio pues es cierto que la densidad de materia nueva perturba,
pero motiva el hecho de que estamos conociendo cosas nuevas e interesantes
que nos van a ayudar más adelante."
-
"De todo un poco. Motiva en el sentido de ser un computista. Desmotiva
el gusto por el diseño al tener tantas asignaciones sobre lo mismo."
-
"Ni muy motivante, pero tampoco desmotivante. Es un curso base muy importante.
Nos da una primera visión acerca de lo que realmente es ser ingeniero
de computación."
-
"La densidad de la materia es la que lo desfavorece. ¿Sería
muy radical convertirla en dos materias?
Uno considera que, en balance, la cantidad de materia ahoga la motivación:
-
"Desmotivante debido al gran contenido de materia nueva que no se puede
asimilar completamente bien."
5.2.4 ¿Qué opina de la forma de evaluar
el curso? ¿Lo modificaría? ¿Cómo?
A la mayoría de los estudiantes les gustó el esquema de evaluación
aunque señalan fallas (ciertas) en los enunciados:
-
"Por el tipo de curso me pareció muy bien... lo modificaría
tal vez mandando más tareas cortas donde se vaya más por
etapas que tratar de englobar cada tema en una tarea."
-
"Me parece que la forma de evaluar es muy adecuada, el dividir en items
de poco peso porcentual... relaja la presión existente (en comparación
con un parcial). Además permite investigar más y madurar
mejor las ideas para solucionar las tareas".
-
"Me gustó mucho porque te mantiene al día y no se acumula
la materia pero hay que mejorar los enunciados."
-
"Estoy de acuerdo con las tareas, no lo modificaría ya que me parecen
que las tareas incentivan a los estudiantes. Sólo que debería
haber una mejor planificación de la tarea."
-
"La forma de evaluar el curso con tareas me parece perfecta porque hay
que pensar bastante sobre un modelo para que quede más o menos."
-
"Me parece la forma más adecuada. Por el tiempo que necesitan las
tareas recomendaría más personas en la realización
(3 o 4 personas por tarea).
-
"Para el alumno es más cómodo el esquema de las tareas...
La evaluación de la práctica [Taller] podría incluir
actividades más dinámicas en clase (que no sean sólo
entregar avances de proyectos)".
-
"Me parece excelente, con las tareas se explota la posibilidad de aplicar
la teoría a la vida diaria, lo cual es muy importante, pues nos
permite establecer la utilidad de la misma. Los exámenes son un
instante un día ...[despues] se olvida lo que se estudió
para él. Con las tareas sucede lo contrario, pues realizarlos requiere
análisis y estudio y siempre queda algo. Un aspecto a modificar
serían los enunciados, estos deben ser más claros y definitivos."
-
"Es ventajoso, en el sentido que el estudiante está al día
con la materia. Aunque es mucho más forzado porque todo el
tiempo hay que entregar las tareas... Creo que se aprende más haciendo
varias tareas que presentando dos o tres parciales."
-
"Muy buena. Las tareas permiten que el alumno asimile el contenido de forma
responsable.. Motiva a la investigación. Sin embargo la complejidad
debería ser menor. Opino que las tareas deberían tener más
contenido que mayor dificultad."
Algunos se sienten más insatisfechos con la cantidad de trabajo
que exigen, su nivel de dificultad, su correción o su cantidad:
-
"Modificaría el tema de las tareas para hacerlas más llamativas
y acortaría la longitud de las mismas (¡son muy trabajosas!)
-
"La evaluación por tareas es buena e ideal para el curso [nota
mía: este es el mismo estudiante que indica que ¡lo que menos
le gusta del curso es la complejidad y densidad de las tareas!] Las
mismas deben ser más cortas y no se les debe cambiar el enunciado
[nota
mía: una queja reiterada debido a la modificación (sustancial)
del enunciado de la Tarea 3].... Algunas preguntas de las tareas no
se ajustaban al nivel de las clases."
-
"Un poco desmotivante porque nos aplicábamos al hacer las tareas
y las notas obtenidas no eran las esperadas."
-
"Sería mejor colocar menos tareas, ya que las mismas consumen mucho
tiempo."
-
"No estoy de acuerdo con tantas tareas o que exijan tanto en cada una;
deben comenzar antes y tratar de sincronizar con otros cursos de manera
que no sea tan destrozante el trimestre. Integrar Scrabble
(el proyecto del Taller) con [las tareas de] la teoría, al principio
fue desesperante, pues organizar 20 personas del Taller que además
no necesariamente ven la Teoría, resulta complicado. Exámenes
es imposible. Lo más conveniente es tareas en parejas, menos tareas,
menos exigencias en las tareas y un estilo de preparaduría que sirva
para practicar directamente diseño, sin ser evaluado."
Es un sólo estudiante él que asoma, tímidamente, que
sería conveniente volver a un esquema con exámenes:
-
"Creo que debería cambiar... [Otra] cosa que afecta psicológicamente
es el hecho de llamarse tareas (una tarea me luce a una pequeña
asignación fácil) y no se le toma la verdadera importancia.
Quizás una opción sea hacer por lo menos dos exámenes
(de bajo peso) y algunos informes grandes. La evaluación de las
tareas son muy subjetivas."
6. Conclusiones y Recomendaciones
En conclusión:
-
El nuevo contenido del curso cumple con el objetivo general de las asignaturas
Sistemas
de Programas y Taller de Sistemas de Programas.
-
El contenido de Sistemas de Programas ha sido modificado, eliminándose
los temas de:
-
Diseño Estructurado,
-
Estrategia de programación en ambientes tipo Unix,
-
Inspecciones Formales y
-
Control de Configuraciones.
La cobertura del tópico de la dimensión no técnica
del desarrollo de software fue reducido.
-
El contenido del curso tomó es más actualizado al enfocarse
hacia la ingeniería de software orientada a objetos. Se extendió
considerablemente la cobertura de programación orientada a objetos
y diseño orientada a objetos. Se introdujo:
-
Elementos de análisis orientado a objetos,
-
El modelo estructural,
-
El modelo dinámico,
-
El modelo de uso,
-
Pruebas unitarias de clases.
-
El modelo funcional no encaja bien con los otros modelos orientados a objetos.
-
El contenido del nuevo curso es demasiado denso en términos de cantidad
de material nuevo presentado.
-
Algunas de las técnicas se introducen de manera prematura puesto
que en asignaturas posteriores a Sistemas de Programas se
introducen versiones menos sofististicadas de las mismas. Este claramente
es el caso del diagrama estructural de clases y de los autómatas
anidados concurrentes.
-
El orden de cobertura de tópicos no fue el más adecuado.
-
El libro de texto escogido (Rumbaugh et al) es demasiado avanzado para
el curso, muestra defectos en algunos de sus ejemplos y carece de tópicos
importantes como el modelo de uso y los patrones.
-
La evaluación en forma de seis tareas fue considerada positiva tanto
por los profesores como por los estudiantes, a pesar de ciertas dificultades
técnicas con el volumen de corrección requerido, el nivel
de dificultad y trabajo exigido con los estudiantes. Una asignatura de
diseño sólo puede evaluarse con tareas de diseño.
-
Hacen falta más ejemplos de diseño y software orientado a
objetos que ilustren los conceptos vistos.
-
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:
-
El enfoque orientado a objetos de la asignatura debe conservarse, realizando
ajustes adicionales respecto al método de desarrollo más
idóneo para el nivel de la asignatura y cambiando el orden de los
tópicos .
-
Debe explorarse la posibilidad de abrirse una cadena en Ingeniería
de Software para descargar el material más avanzado que se trabajó
en esta instancia de Sistemas de Programas.
-
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.
-
La cantidad de trabajo que exige el Taller a los estudiantes es
mayor que el exigido por Sistemas de Programas. Esto debería
reflejarse en el creditaje asociado a cada asignatura.
-
El contenido de la asignatura (y de la cadena) debe ajustarse 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.
-
MIentras se ajusta el contenido de la asignatura, ésta debe permanecer
previa a Bases de Datos.
-
Debe introducirse con más cuidado y en más tiempo la programación
orientada por objetos. En particular debe adquirirse un mayor sentido de
la bondad del diseño de una clase. Como ejemplos puede incluirse
la distinción entre la clase Date y la clase Day que
se presenta en "Core Java", el libro de G. Cornell y C. Horstmann (Prentice-Hall,
1996) así como más ejemplos de librerías como Java
Foundation Classes o su equivalente.
-
Introducir el modelo de uso como punto de partida del análisis/diseño.
Hay que evaluar la posibilidad de incluso enseñar a usar este
modelo pero no a construirlo, tal como se hacía con los DFD
en la versión tradicional de la asignatura.
-
Simplificar el modelo estructural. ¿Es posible no distinguir entre
asociación y agregación? ¿Es conveniente relajar la
noción de asociación? C. Larman ("Applying UML and Patterns")
muestra una posible simplificación.
-
Adoptar la notación UML.
-
Introducir el modelo de colaboración y eliminar el modelo funcional.
-
Estudiar si es factible eliminar el modelo dinámico de este primer
curso. Si no es factible, ¿puede al menos eliminarse la concurrencia?
-
Profundizar en formas de generar pruebas para software orientada a objetos.
Las formas vistas son superficiales y poco satisfactorias.
-
Incluir inspecciones formales para desarrollos orientados por objetos.
-
Evaluar la asignatura más idónea para introducir y trabajar
la noción de arquitecturas de software.
-
Reforzar los tópicos relacionados con el trabajo en equipo y con
la dimensión no técnica de los desarrollos. Para ello es
conveniente que los profesores de las asignaturas (particularmente del
Taller) tomen cursos en el área de Dinámica de Grupos.
-
Incrementar y adelantar el tópico de Patrones. Ello no va
a ser fácil y debe considerarse como el desafío docente más
importante por resolver en la asignatura.
-
Introducir el uso de CASE en el Taller de Sistemas de Programas.
-
Adoptar otro libro de texto. Sugiero probar el libro de C. Larman ("Applying
UML and Patterns: An Introduction to Object-Oriented Analysis and Design"),
a pesar de sus carencias explícitas en el área de pruebas
de software.
-
Considerar seriamente la posibilidad de reducir el número máximo
de estudiantes por sección de Sistemas de Programas con el
objeto de poder trabajar mejor el componente práctico de diseño.
-
Mejorar y enriquecer los ejemplos usados en el curso.
-
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
Quisiera agradecerle al profesor Victor Theoktisto el haber dictado conmigo
el curso experimental de Sistemas de Programas. Las discusiones
que tuvimos a lo largo del curso fueron interminables, continuas y muy
enriquecedoras. Las profesoras Sandra Zabala y Marilenys Olivares, la ayudante
docente Carolina Martínez y el preparador Pedro García hicieron
una labor encomiable para hacer del Taller de Sistemas de Programas
un
maravilloso éxito. En particular me asombraron con su capacidad
para organizar y supervisar equipos.
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.
Finalmente, quisiera reconocerle al Dr. Kurt Stirewalt y a su
ayudante docente Gopal Kandalurajaram la inspiración que nos brindó
la descripción www de su curso Software
Engineering --en particular a lo que se refiere a incorporar
OMT y a manejar equipos tan grandes de estudiantes.
áéíúó
ñ
ü¡¿Ñ
Esta página fue creada entre el 9 de abril y el 15 de abril de 1999.
Ultima actualización: 16 de abril de 1999.