Delta Pensum 1.1:

Bitácora de Desarrollo


Semana del 19 al 23 de junio 2000

En esta semana empecé a revisar el detalle de los modelos y el software de Delta Pensum. Utilicé sobre todo el Modelo Conceptual, la versión javadoc del software desarrollado y el código específico.

Empaqueté las clases del Modelo Conceptual de una manera más fácil de manejar (para evitar el síndrome de la hoja gigante). También extraje parcialmente el diagrama de clases de la interfaz, deduciéndolo a partir del código.

Adicionalmente comencé una evaluación de Delta Pensum 1.0, que incluye tambien las mejoras posibles.
El reporte de la evaluación mencionada nunca fue completada y su estado es bastante deficiente. Actualmente (Septiembre 2000) es preferible consultar el reporte de la evaluación de la versión 1.1.
 

Al realizar la evaluación empecé a detectar fallas en el software.
 

Falla #1

Descripción

Delta Pensum 1.0 de Southpark tiene "cableado" (hard-wired) el valor por defecto del trimestre del año a partir del cual se elabora la Recomendación Curricular. Este valor estaba colocado en el trimestre Abril-Julio.
 

Parche

Cambié el valor por defecto ("recablé") al trimestre Septiembre-Diciembre y llevé a cabo ciertas refactorizaciones sencillas en varias clases de modo que en el futuro este recableado consista de cambiar el atributo periodopordefecto de Despachador.java. Los cambios afectaron las siguiente clases:
  1. Despachador,
  2. RecomendacionCurricular
  3. DP_recomendacion
  4. CalendarioCurricular


Evidentemente se trata de un "parche" --a futuro este valor debe poderse modificar desde un menú de Preferencias. Esta preferencia debe persistir no sólo de una consulta a otra, sino de una sesión a otra.
 

Lunes, 26 de junio

Enriquecí la evaluación de Delta Pensum 1.0 .

Actualicé la versión de Delta Pensum de la Coordinación de Computación para que Maruja la pudiera usar en esta semana de consultas y solicitudes de permisos. Tuve dificultades con el classpath (resuelto con ayuda de un preparador del LDC) y luego con la resolución de la pantalla de la PC (Maruja lo resolvió al escoger el refresh mode de defecto).
 

Falla # 2

Descripción

El software no funciona bien despues de una consulta. Al intentar pasar a una segunda consulta en la misma sesión, CalendarioCurricular.improbarEncajable() lanza un nullPointerException.

Específicamente si uno realiza la siguiente secuencia de acciones:
       #Determinar estado de un estudiante en pensum viejo
       #Pasar a pensum nuevo
       #Elaborar recomendación (con desempates nulos)
       #Salir de recomendación
       #Seleccionar nueva consulta
       #Determinar estado del estudiante en pensum viejo
       #Pasar a pensum nuevo

Al llegar a este punto el software se "paraliza" (no pasa al pensum nuevo) y en la ventana del terminal emite el siguiente mensaje de error:
 

Exception occurred during event dispatching:
java.lang.NullPointerException
at deltapensum.CalendarioCurricular.improbarEncajable(Compiled Code)
at deltapensum.Despachador.improbarEncajable(Compiled Code)
at deltapensum.Despachador.improbarMaterias(Compiled Code)
at interfaz.DP_oldPensum.realizarAprobaciones(Compiled Code)
at interfaz.DP_mainWindow.actionPerformed(Compiled Code)
  ...

Corrección

Faltó agregar una condición de seguridad ("if (e != null)") en una clase (se me olvidó cuál...)

Al agregarla permite entrar a una segunda consulta.
 

Falla # 3

Descripción

Al entrar en una segunda consulta, el sistema no borra correctamente las aprobaciones de la consulta anterior.
 

Correción

La falla fue corregida el día siguiente. La corrección requirió cambios a las siguientes clases:
  1. Bloque
  2. BloqueHeterogeneo
  3. CalendarioCurricular
  4. Despachador
  5. DP_mainWindow (genera dos archivos tipo class el usual y $1)
  6. Pensum
Borrar o limpiar los encajables aprobados fue relativamente sencillo (aunque interesante por el uso de iteradores en Despachador.java para iterar sobre todas los encajables catalogados en el pensum viejo y en el pensum nuevo).

Martes, 27 de junio

Corregí la falla 3.

En algunas corridas me encontré con el siguiente mensaje por terminal:

Ran out of swap space for compiled code.
Ran out of space for compiled code.
Current size is 16777216 bytes.
Increase code space with -Xmaxjitcodesize
Run-time exception error; current exception: xalloc
        No handler for exception.
Modifiqué el archivo DeltaPensum para incorporar el parámetro al comando java.

También me salió:

Exwin_CheckPoint: couldn't fork child process: not enough memory
Audit_CheckPoint: couldn't fork child process: not enough memory
Al parecer quedaban procesos viejos del java runtime, junto con DeltaPensum. Los maté con kill.
 

Falla #4

Descripción

Al adentrarse en una segunda consulta, el software lanza un nullPointerException:
 
Exception occurred during event dispatching:
java.lang.NullPointerException
        at java.util.Hashtable.get(Compiled Code)
        at deltapensum.CatalogoPrelacion.obtenerPrelacion(Compiled Code)
        at deltapensum.Pensum.chequearPrelaciones(Compiled Code)
        at deltapensum.Despachador.obtenerMateriasSinPrelaciones(Compiled Code)
        at interfaz.DP_oldPensum.realizarAprobaciones(Compiled Code)
        at interfaz.DP_mainWindow.actionPerformed(Compiled Code)

Parche

Introduje en Pensum.chequearPrelaciones() un if para filtrar apuntadores nulos y aparentemente resolvió el problema.

Este es un parche, ¿qué está haciendo un apuntador nulo aquí abajo? La falla tiene que venir de antes...
 

Miércoles, 28 de junio

Instalé la nueva versión de Delta Pensum (1.1) en la Coordinación de Computación.

Interesante el problema de la(s) clase(s) adicional(es) que genera el compilador de Java para los JFrame como DP_mainWindow. Tuve problemas al trasladar el archivo por el nombre peculiar (sobre sobre la barra acostada previa al símbolo de dólar --¿un caracter de escape?):

DP_mainWindow\$1.class
Comencé a escribir esta bitácora para llevar mejor las estadísticas de fallas.
 

Falla #5

Descripción

Despues de ejecutar varios casos en una sesión, se presenta un nullPointerException y el sistema no avanza a la próxima pantalla (típicamente la de iniciarRecomendación...)

Al principio no estaba claro si es un problema de embasuramiento progresivo en alguna parte del software o si hay casos específicos que lo producen. En la Coordinación se presentó un caso que al relanzar la aplicación ejecutó perfectamente por lo que pareciera más un problema de embasuramiento progresivo.

Un escenario para producir la falla es:
 
Caso Aprobado pensum viejo Aprobado pensum nuevo
1 1, 3 2
2 1,4 Algoritmos I,II
3 1,3 Algoritmos I,II, Lógica
4 2,5 -Algoritmos I,-II, BD, Sist. Progr.
5 1,4 ED1, Algoritmos III
6 2 BD, SO
7 1,3 Algoritmos I,II
8 1,4 Lógica, ED1
9 3,4 Algoritmos II
10 1,3, Mat IV,V Algoritmos III
11 Asignaturas alternadas de 1,3
 Los numerales denotan aprobación completa de ese año.

El sistema envía al terminal:

Exception occurred during event dispatching:
java.lang.NullPointerException
        at java.util.Hashtable.get(Compiled Code)
        at deltapensum.CatalogoPrelacion.obtenerPrelacion(Compiled Code)
        at deltapensum.Pensum.chequearPrelaciones(Compiled Code)
        at deltapensum.Despachador.obtenerMateriasSinPrelaciones(Compiled Code)
        at interfaz.DP_oldPensum.realizarAprobaciones(Compiled Code)
        at interfaz.DP_mainWindow.actionPerformed(Compiled Code)
        ...
Curiosamente la secuencia de casos en orden inverso no llega a producir la excepción.

Esta página fue creada el 23 de junio de 2000.
Ultima actualización: 22 de septiembre  de 2000.
Por favor dirija sus comentarios al Prof. Alejandro Teruel.