danielsp13 / CorrectIt

CorrectIt: un corrector de exámenes escritos en lenguaje natural.
GNU General Public License v3.0
0 stars 0 forks source link

[M0-Dev] Definición del modelo del problema #11

Open LuisMart7 opened 1 year ago

LuisMart7 commented 1 year ago

Para la definición de las clases, tenía varias dudas. Para la clase Examen, supongo que primero habremos de desarrollar la clase Pregunta donde se encontrará el número de la pregunta, un enunciado relativo a una cuestión del temario además de un texto asociado a la respuesta del alumno, ¿es así? Hay más campos que se tendrían que tener en cuenta en la pregunta para luego la posterior corrección como por ejemplo: palabras clave, número de palabras, tema de historia asociado a la pregunta para agilizar la corrección, etc (si consideras alguno de estos campos o más para la clase Pregunta, coméntamelo). En la clase Alumno, me imagino que tendrá los campos que lo identifican y el historial de notas. En la clase Examen, tendremos el número de preguntas así como la puntuación asociada a cada una. Si crees que he de tener en cuenta algo más, me lo comentas. Gracias.

LuisMart7 commented 1 year ago

Si puedes asignarle el M0 a este issue te lo agradezco.

LuisMart7 commented 1 year ago

Además, ¿la clase Pregunta tendría otro campo que fuera la respuesta correcta de donde fuera buscando el algoritmo parecidos entre la respuesta correcta y la respuesta del alumno? @danielsp13

danielsp13 commented 1 year ago

Es un buen intento para empezar, aunque hay ciertos aspectos con los que hay que tratar también. Lo primero que tienes que tener en cuenta en este punto ahora, qué tipo de datos son simplemente "datos", es decir, cuáles NO van a mutar desde su creación, y cuáles son entidades.

A continuación, esta primera representación del modelo, por el momento es una buena aproximación pero será necesario algunas clases intermedias que permitan un acoplamiento mejor de la estructura para después aplicar la lógica de negocio que tengo en mente. Te lo explico a continuación:

Con respecto a la clase Pregunta: Realmente considero que me interesa más que aquí esté únicamente la respuesta correcta (incluyendo otros atributos para la lógica como palabras clave, etc.), dejando la respuesta del alumno en otro sitio.

Con respecto a la clase Alumnos: No tengo muy claro que el histórico de notas tenga que ir necesariamente ahí, principalmente por la historia de usuario #6 , en la que quizá me interesa tener un módulo / clase en la que se genere una recopilación de notas para el examen en cuestión, en la que haya un par con el id del alumno y su nota, sólo para ese examen en concreto.

Con respecto a la clase Examen: Hay que tener en cuenta la diferencia del examen en sí, de lo que sería una respuesta de un alumno. Por lo pronto lo que comentas lo veo correcto para esta clase, pero quizá sería necesario una entidad en la que se relacione un examen con un alumno, de alguna manera.

Te dejo esto abierto de momento para que le des una vuelta. No estoy siendo concluyente en mi forma de expresarme ya que me gustaría que me dieses feedback de esta proposición y más sugerencias si lo estimas oportuno.

LuisMart7 commented 1 year ago

Por lo que he entendido entonces: En la clase Pregunta: Tendremos la respuesta correcta añadiendo las palabras clave así como distintos tips que nos ayuden a conseguir a posteriori conseguir comparar las respuestas correcta y del alumno. Incluso, se podría tener en cuenta la valoración de cada palabra clave como un par de la palabra clave y la puntuación que le da al valor de la pregunta. Por lo que tendríamos una clase objeto valor, es decir, inmutable. En la clase Alumno: Además de los campos identificadores del mismo, mi recomendación sería tener un histórico de exámenes clasificados por temas donde tenga realizados los que haya querido de prueba, además de la nota real en el examen del profesor/a. Entidad. En la clase Examen: Tendríamos una secuencia de preguntas con una puntuación asociada a cada una. Objeto valor. Desde mi punto de vista, debería de incorporarse una clase Respuesta donde venga la respuesta personal de cada alumno que se pueda asociar al examen y a la pregunta correspondiente dentro del mismo. En conclusión, creo que debería de haber esas 4 clases. Ya me comentas que opinas por ir desarrollando las mismas.

LuisMart7 commented 1 year ago

Además, la clase pregunta como se identificaría: con un enunciado o con el número de la pregunta. Gracias.

danielsp13 commented 1 year ago

Vale. Has hecho un buen trabajo identificando lo que se necesita. Por el momento estoy de acuerdo con todo y me parecen interesantes tus recomendaciones. Sólo, como te comenté en un comentario en el PR asegúrate de usar Dataclass para los objetos inmutables.

Con respecto a la identificación de la pregunta, me interesa que sea por un ID, mejor así.

Puedes continuar con el desarrollo. Seguiré pendiente.

danielsp13 commented 1 year ago

Tengo que hacerte una pregunta para que puedas superar correctamente este objetivo, ¿con qué historia(s) de usuario de las que tengo, asociarías este issue? Cuando lo sepas, menciónalo en un comentario en este issue.

LuisMart7 commented 1 year ago

Para hacer este issue estoy teniendo en cuenta tanto HU1 como HU3. En el aspecto de HU1, quiero tener en cuenta que para que la profesora tenga facilidad de corrección pueda relacionar de manera sencilla al alumno con cada examen (definido como una composición de preguntas y respuestas). El otro aspecto que quiero modelar, está relacionado con la HU3 donde quiero definir las relaciones entre las respuestas del alumno y las respuestas correctas del examen; de ahí mi duda de cómo deberíamos correlacionar ambas. Estoy teniendo en cuenta ambas ya que ambas están asociadas a este milestone. Para ello quiero realizar el producto más mínimamente viable de manera pero de manera que estén bien relacionadas entre sí.

LuisMart7 commented 1 year ago

Haré uso del dataclass en la clase Pregunta ya que únicamente contendrá la respuesta correcta aspecto que será inmutable. La duda que tengo sería si en la clase Alumno deberíamos de definirla igual ya que puede ir variando conforme vayamos añadiendo puntuaciones, exámenes de prueba o reales, etc. ¿Qué opinas?

LuisMart7 commented 1 year ago

En la clase Alumno he definido las características particulares de cada uno como dni, nombre, etc... pero no sé que más añadir ya que para mí se debería definir una lista de pares de exámenes con una nota para cada uno que vaya haciendo y ya en la clase examen se definirá una lista de preguntas y respuestas.

danielsp13 commented 1 year ago

Con todo lo que me has comentado, quizá podamos hacer una hoja de ruta ahora mucho mejor definida para que puedas seguir desarrollando código.

  1. Con respecto a #6, se menciona que: 1.1 Visualización global de todas las notas. Concretamente, para un examen concreto sea del tipo que sea, no me interesa buscar alumno por alumno la calificación que ha obtenido. El aspecto de almacenar en una entidad alumno (llamémosla así por el momento), una tupla con examen:nota, puede ser interesante para un seguimiento individualizado (que ahora hablaré de eso), pero para la tarea que hay que realizar, no considero que sea suficiente. 1.2 Análisis de las preguntas. Se necesita ver qué preguntas de entre todas las que hay, han sido las peores en cuanto a respuesta de los alumnos (y mejores aunque no es una cuestión tan interesante). Así que tienes que tener esto también en cuenta.

  2. Con respecto a #7 , se menciona que: 2.1 Seguimiento. Ahí es en lo que entramos con respecto al seguimiento del alumno en 1.1.

En conclusión, deberías saber gestionar esta información de las calificaciones desde ambos puntos de vista.

danielsp13 commented 1 year ago

Y con esto, y por tus sugerencias, una forma de representar el modelo adecuadamente tendría que tener:

Hasta ahí, tendrías considero un intento de pmv muy próximo. Sólo faltaría definir (según lo que he estado pensando cuando me escribiste), una entidad que englobe un examen y todas sus resoluciones.

LuisMart7 commented 1 year ago

He completado la clase Pregunta de acuerdo a lo establecido. Revísala y me comentas @danielsp13.

danielsp13 commented 1 year ago

He completado la clase Pregunta de acuerdo a lo establecido. Revísala y me comentas @danielsp13.

A lo largo de la mañana te enviaré una respuesta.

LuisMart7 commented 1 year ago

Gracias.

JJ commented 1 year ago

Los issues siempre se tienen que referir a una historia de usuario.

LuisMart7 commented 1 year ago

De acuerdo. Dejaré este issue para la HU01 y abriré otro para vincularlo con la HU03.

JJ commented 1 year ago

El cuerpo del issue sigue sin referirse a ninguna historia de usuario. Por favor consultad los objetivos de aprendizaje de las últimas semanas.

JJ commented 1 year ago

Un issue de "definición de modelo del problema" tampoco ayuda a nada. En el hackatón del viernes pasado vimos como se va descomponiendo el problema hasta llegar a un punto donde se puede programar. Si se hace codificación sin descomposición, da lugar a las disfunciones que se están viendo en #10

danielsp13 commented 1 year ago

@LuisMart7 en el cuerpo de este issue referéncialo a la HU correspondiente por favor.

JJ commented 1 year ago

Si este es inválido, el código que se ha desarrollado según él tiene que eliminarse, porque no puede ser válido. Este commit: https://github.com/danielsp13/SuperCatch/commit/99895f163d9961fc5acaf4022e0581fd0551510d que, además, tiene la definición de los atributos, sigue en el PR