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é:

  1. La motivación para el experimento;
  2. Los alcances del experimento;
  3. Los resultados alcanzados;
  4. Las recomendaciones que se derivan de la experiencia.
concentrándome en Sistemas de Programas.

2. Motivación del experimento

Los cambios propuestos:

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:
    1. Incrementen la productividad del desarrollador de software;
    2. Permitan controlar la complejidad inherente a sistemas de mediana envergadura;
    3. 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:
  1. 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;
  2. La tecnología ha madurado notablemente en la última década;
  3. La tecnología presenta importantes ventajas en cuanto a sus posibilidades de estructuración y reutilización;
  4. 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:
  1. Introducción

  2. Los sistemas de programa de mediana y gran envergadura. Características. El ciclo de vida de un sistema de programas.
  3. Diseño de sistemas de programas

  4. 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.
  5. Validación de sistemas de programas

  6. 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.
  7. Herramientas básicas para el equipo de desarrollo

  8. Control de configuraciones.
  9. 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: Conscientes de ciertas deficiencias en OMT, decidimos incorporar material sobre patrones de: y material sobre la prueba de sistemas orientados por objetos e ingeniería de software de: En consecuencia, el programa del curso resultó ser:
  1. Introducción.

  2. 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.
  3. Programación orientada a objetos.

  4. Cases, atributos, métodos, objetos y herencia.
  5. Modelado orientado a objetos.

  6. Los modelos de OMT (Object Modeling Technique) para Ingeniería de Software Orientado a Objetos. La problemática de las especificaciones informales.
    1. El modelo estructural o estático:

    2. Clases, herencia, agregación y asociación. El diagrama de relaciones estructurales entre clases, Identificación de clases.
    3. El modelo dinámico:

    4. Eventos, estados, transiciones y acciones. Trazas de eventos. Operaciones en estados. Autómatas anidados asociadas a clases. Concurrencia entre autómatas.
    5. El modelo de uso:

    6. Actores y casos de uso. Acciones y respuestas. Acciones alternas. La relación usa entre casos de uso.
    7. El modelo funcional:

    8. Actores, procesos, flujos y repositorios. Diagrama de flujo de datos (DFD). Niveles de un DFD.
  7. Pruebas (Testing) de sistemas orientados a objetos.

  8. Definición del proceso de pruebas. Barreras psicológicas, sociales y culturales. Etapas de prueba:
    1. Pruebas caja blanca y caja negra de métodos de clases.
    2. Pruebas unitarias de clases.
    3. Pruebas de integración,
    4. Pruebas de validación de requerimientos
    5. Pruebas del sistema.
    Planificación, ejecución y evaluación de las etapas de prueba.
  9. Análisis orientado a objetos.

  10. Requerimientos del usuario y requerimientos del patrocinante. Requerimientos funcionales y no funcionales. Uso de los modelos en el proceso de análisis.
  11. Diseño orientado a objetos.

  12. 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:
  1. Diseño estructurado.

  2. 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.
  3. Estrategia de programación en ambientes tipo Unix.

  4. 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.
  5. Inspecciones formales.

  6. 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.
  7. Control de configuraciones.

  8. Este tópico también fue eliminado. Normalmente ocupaba una sesión (dos horas) de clase.
  9. La dimensión no técnica del desarrollo del software.

  10. 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:

  1. Las tareas se entregaban sólo con el número de carnet del participante;
  2. Las tareas de una sección se corregían por los estudiantes de la otra sección;
  3. La corrección se realizaba en una sesión de clase como parte de la discusión de soluciones;
  4. 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: 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:
  1. 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.
  2. 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.
  3. 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.
  4. 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: 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?

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:

  1. El modelo estructural.

  2. 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.
     
  3. El modelo dinámico.

  4. 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."
     
  5. El modelo de uso.

  6. 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.
     
  7. El modelo funcional.

  8. 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í.
     
  9. Análisis orientado por objetos.

  10. 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.
     
  11. Diseño orientado a objetos.

  12. 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:
      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.
     
  13. Pruebas orientadas a objetos.

  14. 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.
     
  15. Patrones.

  16. 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:
  1. Dificultades para cubrir ciertos tópicos en teoría (Sistemas de Programas) antes que fueran requeridos en el Taller de Sistemas de Programas.

  2.  
  3. 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:
    1. No distinguir entre un grafo y un multigrafo ( visto en la asignatura Algoritmos y Estructuras III);
    2. Ignorar la importancia del orden en una secuencia de aplicación de métodos de generación de pruebas (Estructuras Discretas I);
    3. Ignorar la posibilidad de encontrar bases alternas linealmente independientes con propiedades más cercanas a las buscadas (Estructuras Discretas II);
    4. Incomprensión de las implicaciones de imponer una precondición a una rutina (Algoritmos y Estructuras II);
    5. Olvidar las características básicas de la representación punto flotante (Organización del Computador).
  1. Orden inadecuado de los modelos. El modelo de uso debe preceder a los demás.

  2.  
  3. Falta de ejemplos en software. Hay que enriquecer los ejemplos tratados en clase.

  4.  
  5. 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:

  6.  
    1. El servicio de transporte de la USB, que efectivamente parece tener cada vez menos unidades que llegan antes de las 7:30 am.
    2. Trasnochos.

    3.  
  7. 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. 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: Otros señalan algún tema específico, entre los que destacan patrones, pruebas y el modelo funcional: Otra queja es el exceso de contenidos nuevos: Uno señala: Mientras que otros apuntan a la evaluación:

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: 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: 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?

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

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

A muchos les gusta el curso:

Otros lo ubican en un punto medio: Uno considera que, en balance,  la cantidad de materia ahoga la motivación:

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: Algunos se sienten más insatisfechos con la cantidad de trabajo que exigen, su nivel de dificultad, su correción o su cantidad: Es un sólo estudiante él que asoma, tímidamente, que sería conveniente volver a un esquema con exámenes:

6. Conclusiones y Recomendaciones

En conclusión:
  1. El nuevo contenido del curso cumple con el objetivo general de las asignaturas Sistemas de Programas y Taller de Sistemas de Programas.

  2.  
  3. El contenido de Sistemas de Programas ha sido modificado, eliminándose los temas de:
    1. Diseño Estructurado,
    2. Estrategia de programación en ambientes tipo Unix,
    3. Inspecciones Formales y
    4. Control de Configuraciones.
    La cobertura del tópico de la dimensión no técnica del desarrollo de software fue reducido.
     
  4. 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:
    1. Elementos de análisis orientado a objetos,
    2. El modelo estructural,
    3. El modelo dinámico,
    4. El modelo de uso,
    5. Pruebas unitarias de clases.

    6.  
  5. El modelo funcional no encaja bien con los otros modelos orientados a objetos.
    1.  
  6. El contenido del nuevo curso es demasiado denso en términos de cantidad de material nuevo presentado.

  7.  
  8. 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.

  9.  
  10. El orden de cobertura de tópicos no fue el más adecuado.

  11.  
  12. 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.

  13.  
  14. 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.

  15.  
  16. Hacen falta más ejemplos de diseño y software orientado a objetos que ilustren los conceptos vistos.

  17.  
  18. Los resultados del curso fueron positivos en lo que se requiere a la tasa de aprobados y la motivación suscitada entre los estudiantes.
En cuanto a las recomendaciones:
  1. 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 .
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. MIentras se ajusta el contenido de la asignatura, ésta debe permanecer previa a Bases de Datos.
  7. 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.
  8. 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.
  9. 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.
  10. Adoptar la notación UML.
  11. Introducir el modelo de colaboración y eliminar el modelo funcional.
  12. Estudiar si es factible eliminar el modelo dinámico de este primer curso. Si no es factible, ¿puede al menos eliminarse la concurrencia?
  13. Profundizar en formas de generar pruebas para software orientada a objetos. Las formas vistas son superficiales y poco satisfactorias.
  14. Incluir inspecciones formales para desarrollos orientados por objetos.
  15. Evaluar la asignatura más idónea para introducir y trabajar la noción de arquitecturas de software.
  16. 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.
  17. 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.
  18. Introducir el uso de CASE en el Taller de Sistemas de Programas.
  19. 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.
  20. 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.
  21. Mejorar y enriquecer los ejemplos usados en el curso.
  22. 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.
  23. 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.
Para comentarios favor contactar al Profesor Alejandro Teruel