scieee Science in your language
[es] (orig)

Integración de Qwizer con Moodle

Abstract

Qwizer es una aplicación web que permite la realización de cuestionarios dirigida sobre todo al ámbito académico. A diferencia de otras herramientas como los cuestionarios de Moodle, añade la característica de ser una aplicación web progresiva, es decir, permite al usuario utilizar la aplicación mientras que este no tenga una conexión a Internet activa. En este caso el usuario/alumno tendrá la capacidad para poder realizar los cuestionarios que tenga pendientes. Una vez que el alumno finalice un cuestionario se le generará un código QR que el profesor tendrá que escanear para obtener constancia de las respuestas enviadas por el estudiante. En el momento que el usuario recupere la conexión, las soluciones se mandarán al servidor y se registrará su intento. Este proyecto es una ampliación de la aplicación Qwizer, en la que se han añadido nuevas funcionalidades como las siguientes: -Aleatorización de cuestionarios: La aplicación contendrá la posibilidad de poder entregar a los alumnos cuestionarios aleatorizados, de modo que cada estudiante recibe una variante distinta de un cuestionario. En estos las preguntas elegidas para el cuestionario se aleatorizarán una vez el alumno se descargue el mismo. -Inclusión de enunciados en formato Markdown: El lenguaje Markdown es un lenguaje de marcado que permite la inclusión de fórmulas y enunciados con distintos formatos de texto. Los cuestionarios y preguntas en Qwizer soportarán ahora este lenguaje. -Integración con Moodle: Moodle es una de las herramientas más conocidas relacionadas con la gestión del aprendizaje. Una de las nuevas funcionalidades añadidas es la interoperabilidad entre Qwizer y la plataforma del Campus Virtual de la UCM para la gestión de calificaciones y cuestionarios. Este proyecto no ha sido solo una ampliación, si no que también se ha centrado en una buena parte de estabilidad, refactorización y despliegue de la aplicación, haciendo que la misma sea más robusta, segura y amigable. Enlace al proyecto en Github: https://github.com/Qwizer-UCM/Qwizer

Read accessible full text

Integración de Qwizer con Moodle

Author: Tiberius Roman, Vicentiu; Bartha de las Peñas, José Luis
Year: 2023
Source: https://docta.ucm.es/bitstreams/6848db34-bb37-4ea6-82cc-e670051f6f46/download
In eg ación de Qwize con Moodle
Qwize ’s in eg a ion wi h Moodle
T abajo de Fin de G ado
Cu so 2022–2023
Au o
Vicen iu Tibe ius Roman
José Luis Ba ha de las Peñas
Di ec o
Manuel Mon eneg o Mon es
G ado en Ingenie ía del So wa e
Facul ad de In o má ica
Uni e sidad Complu ense de Mad id
In eg ación de Qwize con Moodle
Qwize ’s in eg a ion wi h Moodle
T abajo de Fin de G ado en Ingenie ía Del So wa e
Au o
Vicen iu Tibe ius Roman
José Luis Ba ha de las Peñas
Di ec o
Manuel Mon eneg o Mon es
Con oca o ia: Junio 2023
G ado en Ingenie ía del So wa e
Facul ad de In o má ica
Uni e sidad Complu ense de Mad id
29 de mayo de 2023
Ag adecimien os
P ime o de odo, que emos ag adece a nues o u o Manuel Mon eneg o Mon-
es, po habe nos ayudado y aconsejado a lo la go de odo el p oyec o. Su eno me
paciencia pa a esol e nues as dudas y su lexibilidad pa a man ene nues as
euniones a lo la go del cu so, han pe mi ido que podamos saca es e p oyec o ade-
lan e.
Y en segundo luga , pe sonalmen e, yo, José Luis Ba ha, quie o a ag adece a
mi compañe o Tibe ius po habe se in oluc ado an o en es e p oyec o. G acias a él
se han cumplido muchos de los obje i os plan eados pa a es e T abajo Fin de G ado
e incluso algunos que no es aban ni plani icados. Asimismo, he ap endido nume osas
ecnologías que no pensaba que iba aplica en es e p oyec o, que además econoce é,
que si no hubie a sido po él, no c eo que las hubie a ap endido nunca y menos a
u iliza . De ini i amen e, sin él, no hubié amos a anzado an o como hemos hecho.
Y po úl imo, nos gus a ía ag adece a nues os amigos y amilia es, aquellas
pe sonas que han hecho que nues o paso po la acul ad sea lo más ag adable
posible y siemp e a an de apoya nos a segui en los peo es momen os. Si ellos no
hubié amos sido capaces de llega has a aquí.
Vicen iu Tibe ius Roman y José Luis Ba ha de las Peñas

Resumen
In eg ación de Qwize con Moodle
Qwize es una aplicación web que pe mi e la ealización de cues iona ios di igida
sob e odo al ámbi o académico. A di e encia de o as he amien as como los cues-
iona ios de Moodle, añade la ca ac e ís ica de se una aplicación web p og esi a,
es deci , pe mi e al usua io u iliza la aplicación mien as que es e no enga una
conexión a In e ne ac i a. En es e caso el usua io/alumno end á la capacidad pa a
pode ealiza los cues iona ios que enga pendien es. Una ez que el alumno inalice
un cues iona io se le gene a á un código QR que el p o eso end á que escanea pa a
ob ene cons ancia de las espues as en iadas po el es udian e. En el momen o que
el usua io ecupe e la conexión, las soluciones se manda án al se ido y se egis a á
su in en o.
Es e p oyec o es una ampliación de la aplicación Qwize , en la que se han añadido
nue as uncionalidades como las siguien es:
Alea o ización de cues iona ios: La aplicación con end á la posibilidad
de pode en ega a los alumnos cues iona ios alea o izados, de modo que
cada es udian e ecibe una a ian e dis in a de un cues iona io. En es os las
p egun as elegidas pa a el cues iona io se alea o iza án una ez el alumno se
desca gue el mismo.
Inclusión de enunciados en o ma o Ma kdown: El lenguaje Ma kdown
es un lenguaje de ma cado que pe mi e la inclusión de ó mulas y enuncia-
dos con dis in os o ma os de ex o. Los cues iona ios y p egun as en Qwize
sopo a án aho a es e lenguaje.
In eg ación con Moodle: Moodle es una de las he amien as más conocidas
elacionadas con la ges ión del ap endizaje. Una de las nue as uncionalidades
añadidas es la in e ope abilidad en e Qwize y la pla a o ma del Campus
Vi ual de la UCM pa a la ges ión de cali icaciones y cues iona ios.
Es e p oyec o no ha sido solo una ampliación, si no que ambién se ha cen ado
en una buena pa e de es abilidad, e ac o ización y despliegue de la aplicación,
haciendo que la misma sea más obus a, segu a y amigable.
Enlace al p oyec o en Gi hub: h ps://gi hub.com/Qwize -UCM/Qwize
Palab as cla e
Qwize , Campus Vi ual, aplicación web p og esi a, Alea o ización, Ma kdown, Doc-
ke , Reac , Django
ii
Abs ac
Qwize ’s in eg a ion wi h Moodle
Qwize is a web applica ion ha allows he comple ion o es s, aimed abo e all
a he academic ield. Unlike o he ools such as Moodle quizzes, i adds he ea u e
o being a p og essi e web applica ion, which allows he use o use he applica ion
while hey do no ha e an ac i e In e ne connec ion. In his case, he use / s uden
will ha e he possibili y o comple e he es s ha a e pending. Once he s uden
comple es a es , a QR code will be gene a ed ha he eache will ha e o scan
o ob ain p oo o he answe s sen by he s uden . As soon as he use eco e s
he connec ion, he solu ions will be sen o he se e and hei a emp will be
eco ded.
This p ojec is an ex ension o he Qwize applica ion, in which new ea u es
ha e been added, such as he ollowing:
Randomiza ion o es s: The applica ion will con ain he possibili y o
being able o gi e s uden s andomized es s, so ha each s uden ecei es a
di e en a ian o he es . In hese, he ques ions chosen o he es will be
andomized once he s uden downloads i .
Inclusion o Ma kdown and ma hema ical o mulas: The Ma kdown
language is a ma kup language ha allows he inclusion o o mulas and s a e-
men s wi h di e en ex o ma s. Tes s and ques ions in Qwize will now
suppo his language.
In eg a ion wi h Moodle: Moodle is one o he bes -known ools ela ed o
lea ning managemen . One o he new ea u es added is he in e ope abili y
be ween Qwize and he UCM Vi ual Campus pla o m o he managemen
o quali ica ions and ques ionnai es.
This p ojec has no only been an expansion, bu has also ocused in a good pa
o s abili y, e ac o and deploymen o he applica ion, making i mo e secu e and
iendly o use o he use s.
Link o he p ojec on Gi hub: h ps://gi hub.com/Qwize -UCM/Qwize
Keywo ds
Qwize , Vi ual Campus, P og essi e Web App, Randomiza ion, Ma kdown, Docke ,
Reac , Django
ix
6.3. Subida de la lis a de es udian es . . . . . . . . . . . . . . . . . . . . . 56
6.4. Lis a de es udian es gene ada po Moodle . . . . . . . . . . . . . . . 57
6.5. Selección de la columna y la asigna u a . . . . . . . . . . . . . . . . . 57
6.6. Selección del cues iona io . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.1. Fiche o de con igu ación docke -compose.yml . . . . . . . . . . . . . . 61
7.2. Con igu acióndeNginx.......................... 62

Cap´
ı ulo 1
In oducción
En es a memo ia habla emos del desa ollo de la ampliación y mejo a de una
aplicación p og esi a pa a ealiza cues iona ios en línea: Qwize [4]. Empeza emos
p esen ando que nos lle ó a segui es e p oyec o, qué obje i os hemos enido a lo
la go del p oyec o y inalmen e desc ibi emos nues o plan de abajo a lo la go del
cu so académico.
1.1. Mo i ación del p oyec o
El año pasado nos encon ábamos en la si uación de elegi un abajo que de
e dad nos mo i a á a desa olla nues o úl imo p oyec o den o de la acul ad.
Además, como es udian es de la Facul ad de In o má ica, que íamos un p oyec o
que de e dad impac ase en la e olución de la misma y nos pe mi ie a ayuda a
mejo a sus se icios.
Manuel nos habló de una posible mejo a y ampliación de una aplicación web
p og esi a basada en la ealización de cues iona ios que pe mi a ealiza los sin co-
nexión a in e ne : Qwize . Es a aplicación es aba di igida a usua ios como noso os,
alumnos que a lo la go de nues a ayec o ia den o de la acul ad hemos enido
que ealiza nume osos cues iona ios, sin añadi , que a mi ad de nues o paso, es-
alló una pandemia mundial debido al COVID-19 y es e ipo de o ma o pa a la
e aluación de nues as asigna u as ue algo u ina io.
Inicialmen e, la p opues a ya nos llamó la a ención pe o además iden i icamos
una se ie de causas que nos decan a on po p og esa y con inua es e p oyec o.
En e ellas podemos nomb a las siguien es:
Nue as ecnologías: Es a aplicación u ilizaba ecnologías con las cua-
les no es ábamos amilia izados ninguno de los dos. Tan o Reac como
Django e an dos ecnologías que desconocíamos pe o sabíamos que iban a se
esenciales de domina pa a nues o desa ollo pe sonal y p o esional. Además,
el hecho de se una aplicación que unciona sin conexión a In e ne , nos pe mi e
in oluc a nos en el mundo de las aplicaciones p og esi as, un me cado que
hoy en día es a en auge po lo que es muy in e esan e desa olla y descub i
las posibilidades de es as aplicaciones.
Uso p ác ico en un u u o: O o pun o impo an e que nos hizo decidi -
1
2Capí ulo 1. In oducción
nos po es e p oyec o, ue el uso p ác ico que le imos a la aplicación. Bajo
un buen desa ollo y el añadido de un mínimo de uncionalidades necesa ias,
eíamos que es e p oyec o pod ía llega a se ú il. A lo la go de la ca e a,
hemos desa ollado nume osos p oyec os con el único in de se cali icados y
ocalizados a una simple en ega. Pos e io men e, quedan ol idados o aban-
donados po al a de iempo o mo i ación pa a segui los. En cambio, con es e
p oyec o eíamos que si conseguíamos cumpli los obje i os pod íamos hace
una aplicación digna que pod ían u iliza nues os compañe os de la
acul ad en un u u o.
P oyec o de inno ación educa i a de la UCM (p oyec os INNOVA):
Finalmen e, además de los o os mo i os, Manuel nos in o mó, como ya hemos
comen ado an e io men e, que es e p oyec o es aba des inado a segui siendo
desa ollado po algunos p o eso es de la acul ad. De hecho, habían plan eado
un p oyec o de inno ación de la acul ad, pa a que la aplicación ue a u ilizada
en los labo a o ios de algunas asigna u as pa a cali ica exámenes. Es o nos lla-
mó bas an e la a ención y, ligado a lo que comen ábamos al p incipio, eíamos
que inalmen e es e p oyec o pod ía deja huella en nues a acul ad.
1.2. Obje i os
Una ez ya eníamos la p opues a del p oyec o u imos que pensa en unos
obje i os pa a desa olla a lo la go de odo el cu so académico. Es a a ea ue
algo sencilla debido a que nues os compañe os del año pasado y ambién nues o
u o , nos ayuda on a iden i ica qué nue as uncionalidades pod ían añadi se a la
aplicación Qwize . Po lo que, inalmen e, en e los consejos ecibidos llegamos a
plan ea y es ablece los siguien es p ime os obje i os pa a el nue o abajo:
Alea o ización de cues iona ios: Uno de los obje i os p incipales a u u o
de nues os compañe os del año pasado, ue el hecho de la alea o ización
den o de los p opios cues iona ios. O ece la capacidad de alea o iza
las p egun as de los cues iona ios es esencial en es e ipo de aplicaciones pa a
e i a copias en e los es udian es. Po es a azón, llegamos a la conclusión
que es a ca ac e ís ica o ece ía a Qwize un alo añadido.
Pa a la implemen ación de es a ace a u imos que pensa de enidamen e co-
mo aplica íamos la alea o ización den o de la aplicación, dado que den o
de un cues iona io se puede aplica es o de nume osas mane as. Finalmen e,
iden i icamos es obje i os p incipales:
•Alea o ización a ni el de p egun as, es deci , las p egun as de un cues-
iona io debe ían apa ece en un o den alea o io pa a cada usua io que
ealice el mismo.
•Alea o ización a ni el de opciones, es deci , las opciones den o de las
p egun as ipo es debe ían mos a se en un o den alea o io pa a cada
usua io.
1.3. Plan de abajo 3
•P egun as de selección alea o ia, es deci , den o de los cues iona ios ha-
b á una o a ias p egun as que pa a cada usua io se elegi á en base a un
subconjun o de p egun as del banco de p egun as.
Adap ación de aplicación a disposi i os mó iles: El diseño adap able es
un paso undamen al en las aplicaciones web. Da a los usua ios que u ilicen
disposi i os mó iles la posibilidad de e nues a aplicación de mane a co ec a
es muy impo an e y más en el con ex o de nues a aplicación. Po al mo i o
decidimos in en a adap a nues a in e az a los disposi i os mó iles
y in en a que la na egación po la aplicación ue a lo más cómoda posible.
Inclusión de Ma kdown y ó mulas ma emá icas: Ma kdown es un ipo
de lenguaje de ma cado que pe mi e añadi a la aplicación ex o en i-
quecido pe mi iendo la inclusión de palab as en neg i a, cu si a, imágenes,
e c... Nues o u o iden i icó la inco po ación de Ma kdown como uno de
los obje i os p incipales del TFG y ag egándole ambién la posibilidad de
edac a enunciados y soluciones con ó mulas ma emá icas, pe mi-
iendo la o mulación de p egun as más complejas.
In eg ación con Moodle: Finalmen e, el úl imo obje i o que plan eamos
ue la in eg ación con los o ma os de la pla a o ma Moodle. Moodle
ue una de las he amien as que inspi ó el desa ollo de Qwize , de hecho,
ac ualmen e es la pla a o ma en la que se basa el Campus Vi ual de la
nues a acul ad. Dado que, a día de hoy, se sigue u ilizando, la capacidad
de in eg a Qwize con Moodle ue uno de nues os obje i os más espe ados.
Pa a ello nos quisimos cen a en que se pudie an impo a p egun as del
banco de p egun as de Moodle ype mi i expo a las no as de los
es udian es que ealiza on cues iona ios en Qwize a Moodle.
1.3. Plan de abajo
A lo la go de es e cu so académico, hemos pasado po nume osas ases den o
del desa ollo de nues o TFG. El hecho de amplia un p oyec o comple o, impli-
caba e apas de es udio no solo de las nue as ecnologías con las que no es ábamos
amilia izados, sino ambién g andes es uc u as de códigos que hacen uso de las
mismas. Debido a odo es o, necesi ábamos un plan de abajo que nos pe mi ie a i
es ableciendo pequeños obje i os pa a comple a las a eas que eníamos plan eadas.
G acias a las euniones que ealizábamos con nues o u o Manuel Mon eneg o,
las cuales se hacían cada dos semanas, nos o ganizábamos pa a i cumpliendo una
se ie de a eas pa a cada eunión. Es a me odología nos ayudaba, al p incipio, a i
en endiendo poco a poco pa es del código y empeza a cumpli las p ime as me as,
y pos e io men e, en e apas más a anzadas del p oyec o, a inaliza los obje i os
p incipales del abajo. Dicho es o, la dis ibución gene al de las ases de nues o
p oyec o ue on las siguien es:
4Capí ulo 1. In oducción
Re ac o ización, es ing, ac ualización y despliegue de la aplicación
(sep iemb e de 2022 - eb e o de 2023) Una de las e apas más la gas de desa-
ollo. Al p incipio, nos dedicamos a en ende g an pa e del código y pos e-
io men e e ac o iza an o el on end como se comen a en el capí ulo 3.5.1
como en el backend como se comen a en el capí ulo 3.5.2. También ac ualiza-
mos odas las lib e ías a la ul ima e sión in en ando e i a con lic os po los
cambios de e siones. Po úl imo, p epa amos mejo el en o no de desa ollo
añadiendo lin e s, a iables de en o no pa a los sec e os, diseñando algunos
es s pa a el back-end, usando un ges o de paque es pa a es e úl imo y usando
Docke pa a desplega el p oyec o de mane a co ec a.
Alea o ización de cues iona ios (ma zo de 2023): Du an e es a e apa, se
implemen ó la uncionalidad de alea o ización de cues iona ios. Es e p oceso
in oluc ó ealiza a ios cambios en el modelo elacional de la aplicación y en
lógica de la aplicación como se de alla en p o undidad en el capí ulo 4, lo que
equi ió un iempo signi ica i o pa a ac ualiza el código co espondien e.
Ma kdown, p egun as alea o ias e in eg ación con Moodle (ab il de
2023): Du an e es a ase, se abo da on a ios aspec os cla e. La implemen a-
ción del o ma o Ma kdown pa a las p egun as y la in eg ación con Moodle
ue on ela i amen e sencillas, a excepción de la ges ión de las imágenes en
el caso de Ma kdown. Sin emba go, la inco po ación de p egun as alea o ias
esul ó se un desa ío conside able, ya que u o un impac o en g an pa e del
código del back-end de la aplicación. Es as inco po aciones es án desc i as en
los capí ulos 4,5y6.
Comp obaciones inales y memo ia (mayo de 2023): Du an e el úl imo
mes de desa ollo, nos en ocamos en ealiza los ajus es inales en la in e az de
la aplicación, puliendo los de alles pa a log a una expe iencia de usua io me-
jo ada. También dedicamos iempo a edac a la memo ia del T abajo de Fin
de G ado (TFG), documen ando odo el p oceso de desa ollo, las decisiones
omadas y los esul ados ob enidos.
Cap´
ı ulo 2
Selección de he amien as y ecnologías
En nues o p oyec o hemos hecho uso de nume osas ecnologías que nos han
ayudado a la implemen ación inal de nues a aplicación. Dado que es e p oyec o es
una con inuación de uno an e io , hemos enido que, no solo adecua nos a muchas de
las ecnologías que nues os compañe os u iliza on el año pasado, sino que ambién
hemos enido que in es iga nume osas ecnologías pa a implemen ación de nues os
nue os obje i os. En es a sección amos a explica qué he amien as y ecnologías
hemos u ilizado inalmen e pa a el desa ollo de Qwize .
2.1. Lenguajes de p og amación, ges ión de bases
de da os y amewo ks u ilizados
P ime o de odo, empeza emos nomb ando que ipos de lenguajes de p og ama-
ción, ges o es de bases de da os y ma cos de abajo han sido u ilizados pa a el
desa ollo del p oyec o.
2.1.1. Py hon
Py hon es un lenguaje de p og amación in e p e ado y al amen e conocido en
é minos de aplicaciones web y desa ollo de so wa e. En nues o caso es el p inci-
pal lenguaje que inco po a el ma co de abajo que hemos u ilizado en la pa e de
se ido de nues a aplicación. Dado que ue una decisión de nues os compañe os
del año pasado, es e año hemos decidido segui con es e mismo lenguaje pa a la im-
plemen ación del se ido . Además, es e año hemos hecho uso de en o nos i uales
con la lib e ía Poe y, pe mi iéndonos no ene que ins ala odas las lib e ías que
equie e el p oyec o en nues os equipos. Es a posibilidad nos ha ayudado a añadi
una capa de aislamien o con nues os sis emas y hace más li iana su ins alación.
2.1.2. Django
Django [3] es uno de los amewo ks, o los ambién conocidos como ma cos de
abajo, que más se u ilizan en el desa ollo de las aplicaciones web. Su obus a y
as a capacidad de posibilidades pa a el con ol de la segu idad sob e las ulne abi-
5

6Capí ulo 2. Selección de he amien as y ecnologías
lidades más ecuen es en el en o no web, un panel de adminis ación sencillo y bien
in eg ado y un ex enso ORM ue on las azones po las que nues os compañe os del
año pasado decidie on u iliza es a he amien a pa a el desa ollo de la aplicación
Qwize en la pa e del se ido . Pese a es a más amilia izados con Node.js hemos
decidido segui con es a ecnología pa a ap o echa el código ya esc i o.
2.1.3. Ja aSc ip
Ja aSc ip es un lenguaje de p og amación in e p e ado al amen e conocido po
su uso en el desa ollo web. Pa a noso os, es el p incipal lenguaje de p og amación
u ilizado po el amewo k que u ilizamos pa a el lado del clien e en la aplicación.
Además, es e lenguaje es esencial pa a una de las uncionalidades más a ac i as de
Qwize , los Se ice wo ke s. Es os pe mi en que la aplicación uncione aun es ando
el clien e sin conexión. Es a p opiedad hace que las aplicaciones web sean conocidas
como aplicaciones web p og esi as. Ag egado a lo an e io , dado que la aplicación
se puede u iliza en el na egado , podemos hace uso del almacenamien o in e no
del mismo g acias a es e lenguaje. Con es o podemos hace que los usua ios gua -
den da os en es e pequeño almacenamien o, como son sus da os de sesión y algunos
cues iona ios desca gados que pod án ealiza en caso de que la aplicación se quede
sin conexión. También, g acias a su as o núme o de lib e ías y de acilidades, Ja as-
c ip o ece una es uc u a sólida pa a ealiza llamadas HTTP a nues o se ido
de mane a sencilla.
2.1.4. Reac
Reac [13] es una de las biblio ecas más conocidas de Ja asc ip pa a el desa ollo
de aplicaciones web. Su a qui ec u a basada en el modelo SPA de aplicaciones web,
consis en es en una sola página, ue una de las azones p incipales po la que nues os
compañe os del año pasado decidie on u iliza es a ecnología.
Una de las en ajas más impo an es de Reac es su es uc u a po componen es.
La p og amación po componen es se basa en la c eación de pequeñas pa es de
la is a con incluso lógica p opia. Es o pe mi e que se pueda eu iliza y hace
mucho más en endible el código. La p og amación en Reac se basa en la c eación
de componen es es uc u ados median e clases o median e unciones. El año pasado,
nues os compañe os decidie on esc ibi los po clases. Hoy en día las de iniciones
median e clases, han quedado p ác icamen e obsole as po lo que hemos decidido
da le un en oque uncional a es as. En es e ipo de de iniciones los componen es se
encapsulan en unciones y en la unción de e o no es donde se esc ibe el código JSX
que más adelan e se mos a á al usua io. El o ma o JSX, pe mi e in eg a código
HTML den o de Ja aSc ip lo cual hace mas cómodo el desa ollo con Reac .
An e io men e se u ilizaba c ea e- eac -app pa a la compilación del código.
Sin emba go, debido a los nume osos a isos que nos salían en la consola al ejecu a
la aplicación y al len o man enimien o que se le daba a la he amien a decidimos in-
2.2. Lenguajes de in e cambio de da os y ma cado 7
es iga y busca alguna al e na i a. Llegamos a una he amien a denominada Vi e
que, además de es a mejo man enida, ambién o ecía mejo as en el endimien o a
la ho a de desa olla ya que en ez de ecompila el p oyec o en e o cada ez que
se ealizaba algún cambio, solo se ecompilaban los iche os con cambios. Al p oba
la he amien a po p ime a ez nos so p endimos po la apidez con la que se ponía
el p oyec o en uncionamien o.
2.1.5. SQL
SQL es un lenguaje u ilizado pa a el acceso y ges ión de las bases de da os. En
nues o p oyec o, g acias al ORM de Django, hemos podido e i a ene que u iliza
es e lenguaje pa a muchas de las consul as de la aplicación. Aun así, en algunos casos
pun uales hemos necesi ado de es e lenguaje pa a hace consul as muy especi icas
que el ORM Django no sopo aba.
2.1.6. Se ice wo ke s
Un Se ice wo ke es la ecnología que pe mi e gene a una aplicación web p o-
g esi a. Básicamen e, consis e en un iche o Ja aSc ip que se ejecu a en segundo
plano, o eciendo al clien e soluciones en caso de que se quede sin conexión a In e -
ne o el se ido al que aya a ealiza las pe iciones no es é disponible. En nues a
aplicación, u ilizamos es a ecnología pa a gua da los ecu sos necesa ios pa a que
mien as el clien e se encuen e sin conexión, pueda dis u a de una expe iencia
limi ada de nues os se icios. O as de las a eas undamen ales que desempeña,
es la de almacena las pe iciones que ealice el clien e en el pe iodo que es e sin
conexión, y una ez que la ecupe e, ol e á a manda es as pe iciones al se ido .
2.1.7. Boo s ap
Boo s ap [8] en una biblio eca CSS de Ja aSc ip que hemos u ilizado pa a el
es ilado gene al de oda la aplicación. Apa e que nues os compañe os ya la u iliza-
on pa a es e mismo mo i o, noso os hemos decidido man ene la dado que hemos
u ilizado es a he amien a en nume osas asigna u as y es amos bas an e amilia iza-
dos con ella. Además, nos pe mi e gene a una in e az adap able a las dimensiones
de cualquie disposi i o y así cumpli uno de los obje i os p incipales. Cabe des aca
ambién, que es a lib e ía dispone de una documen ación muy ex ensa e incluso con
ejemplos explica i os.
2.2. Lenguajes de in e cambio de da os y ma cado
Como segundo apa ado habla emos de los lenguajes que hemos enido que u i-
liza pa a in e cambia da os en e el se ido y el clien e de nues a aplicación.
8Capí ulo 2. Selección de he amien as y ecnologías
Apa e ambién in oduci emos uno de los p incipales lenguajes de ma cado del
p oyec o que ha pe mi ido el desa ollo de uno de los obje i os de nues o TFG.
2.2.1. JSON
JSON es un o ma o de iche o de ex o ampliamen e u ilizado pa a el in e cam-
bio de da os den o de las aplicaciones. Dadas su lexibilidad y as o uso den o
de las implemen aciones de las APIs y el desa ollo web hemos decidido u iliza lo
pa a in e cambia in o mación a a és de nues a API. Su sin axis es lige a, lo que
acili a los abajos de decodi icación y codi icación de los da os u ilizados. Como
o a en aja a añadi , la posibilidad de se u ilizado en cualquie lenguaje de p o-
g amación nos ayuda en el a amien o de da os en e el lado clien e y se ido de
la aplicación.
2.2.2. YAML
YAML es un o ma o de se ialización de da os, con simili udes a los o ma os
XML y JSON. El p incipal a ac i o de es e o ma o es su ácil lec u a y legibilidad.
Dado que es a aplicación a di igida a usua ios que a lo mejo no son expe os en
o ma os algo más écnicos como pueden XML y JSON, nues os compañe os del
cu so an e io decidie on elegi es e o ma o pa a la subida de a chi os e e en es a
la c eación de cues iona ios y p egun as.
2.2.3. XML-Moodle
XML-Moodle [9] es un o ma o que u iliza la pla a o ma de Moodle pa a impo a
y expo a p egun as. En nues o caso lo hemos u ilizado pa a cumpli el obje i o
de la impo ación de p egun as desde Moodle a Qwize . El uso de es e o ma o se
de alla más en el Capí ulo 6.
2.2.4. Ma kdown
Ma kdown es un lenguaje de ma cado que pe mi e la c eación de ex o especiali-
zado sin u iliza ningún o ma o especi ico. Es e lenguaje pe mi e esc ibi ó mulas
ma emá icas, ag ega imágenes o mejo a el es ilo a ex os con una sin axis muy
sencilla. Es e lenguaje es esencial pa a uno de nues os obje i os del TFG, po lo
que la adición a nues o p oyec o e a esencial. En capí ulos pos e io es explica emos
las p incipales azones de su uso pe o se enca ga á de p o esionaliza más nues a
aplicación.
2.3. O as he amien as o ecnologías 9
2.3. O as he amien as o ecnologías
En es e úl imo apa ado añadi emos ecnologías o he amien as que no podemos
ag upa y explica emos en gene al de mane a independien e el uso que ienen den o
de nues a aplicación.
2.3.1. Gi
Gi es uno de los ges o es más conocidos po la indus ia del desa ollo pa a el
con ol de e siones. En es os p oyec os en los que se a an con una al a can idad
de a chi os, lle a un con ol de odos ellos es algo complicado y de inc eíble im-
po ancia. Gi nos ayuda y libe a de es e p oblema, con una lis a de comandos muy
sencilla y ácil de ap ende . Además, con su posibilidad de es au a cualquie e -
sión an e io de los a chi os nos pe mi e abaja anquilos an e e o es inespe ados
o no deseados.
2.3.2. Gi hub
Gi hub es un pla a o ma de alojamien o de p oyec os que u ilizan el con ol
de e siones de Gi . Dado que u ilizamos Gi como sis ema de con ol de e siones,
aloja nues o p oyec o en Gi hub e a sumamen e sencillo y nos apo aba nume osos
bene icios, como la mejo isualización del p oyec o y la acilidad pa a segui el
abajo de ambos.
2.3.3. Docke
Docke [17] es una he amien a de despliegue de so wa e en sus llamados con-
enedo es i uales. Con la inalidad de desplega nues o p oyec o, hemos u ilizado
Docke pa a p epa a la aplicación pa a un en o no de p oducción y no solo de
desa ollo.
Una pa e impo an e de cualquie p oyec o es el despliegue del mismo. Pa a
acili a el despliegue de Qwize en cualquie ipo de maquina y sin necesidad de
muchos conocimien os en las ecnologías usadas decidimos usa Docke pa a modu-
la iza nues a aplicación median e con enedo es. Empezamos po in es iga como
se desplegaban co ec amen e las aplicaciones con Reac yDjango. Con la ayuda de
docke -compose pa a ejecu a a ios con enedo es hemos hecho uso de las siguien es
imágenes:
Pos g eSQL
Node
Py hon
16 Capí ulo 3. A qui ec u a global del sis ema
api_asigna u a
id BIGINT
nomb eAsigna u aCHARACTER VARYING(254)
api_cues iona io
id BIGINT
i ulo CHARACTER VARYING(100)
du acion INTEGER
secuencial BOOLEAN
passwo d CHARACTER VARYING(300)
echa_ isible TIMESTAMP(6) WITH TIME ZONE
echa_ape u aTIMESTAMP(6) WITH TIME ZONE
echa_cie e TIMESTAMP(6) WITH TIME ZONE
alea o iza BOOLEAN
asigna u a_id BIGINT
p o eso _id BIGINT
api_cu sa
id BIGINT
alumno_id BIGINT
asigna u a_idBIGINT
api_impa e
id BIGINT
asigna u a_idBIGINT
p o eso _id BIGINT
api_ins anciaopcion es
id BIGINT
o den SMALLINT
espues a_idBIGINT
ins ancia_idBIGINT
api_ins anciap egun a
id BIGINT
o den SMALLINT
in en o_id BIGINT
p egun a_idBIGINT
seleccion_idBIGINT
api_ins anciap egun a es
ins anciap egun a_p _idBIGINT
espues a_id BIGINT
api_ins anciap egun a ex
ins anciap egun a_p _idBIGINT
espues a CHARACTER VARYING(254)
api_in en o
id BIGINT
no a NUMERIC(10,2)
hash CHARACTER VARYING(254)
hash_offline CHARACTER VARYING(254)
echa_inicio TIMESTAMP(6) WITH TIME ZONE
echa_fin TIMESTAMP(6) WITH TIME ZONE
es ado CHARACTER VARYING(3)
cues iona io_idBIGINT
usua io_id BIGINT
api_opcionp egun aalea o ia
id BIGINT
p egun a_id BIGINT
p egun a_alea o ia_idBIGINT
api_opcion es
id BIGINT
opcion CHARACTER VARYING(254)
o den SMALLINT
fija BOOLEAN
p egun a_idBIGINT
api_p egun a
id BIGINT
p egun a CHARACTER VARYING(254)
i ulo CHARACTER VARYING(254)
asigna u a_idBIGINT
api_p egun a es
p egun a_p _idBIGINT
espues a_id BIGINT
api_p egun a ex
p egun a_p _idBIGINT
espues a TEXT
api_seleccionp egun a
id BIGINT
pun osAcie oNUMERIC(30,2)
pun osFallo NUMERIC(30,2)
o den SMALLINT
fija BOOLEAN
alea o iza BOOLEAN
ipo CHARACTER VARYING(3)
cues iona io_idBIGINT
p egun a_id BIGINT
api_use
id BIGINT
passwo d CHARACTER VARYING(128)
las _login TIMESTAMP(6) WITH TIME ZONE
is_supe use BOOLEAN
email CHARACTER VARYING(255)
fi s _name CHARACTER VARYING(30)
las _name CHARACTER VARYING(150)
ole CHARACTER VARYING(7)
is_ac i e BOOLEAN
is_s affBOOLEAN
da e_joined TIMESTAMP(6) WITH TIME ZONE
api_use _g oups
id BIGINT
use _id BIGINT
g oup_idINTEGER
api_use _use _pe missions
id BIGINT
use _id BIGINT
pe mission_idINTEGER
Figu a 3.4: Modelo elacional
esquema de la base de da os que he edamos de nues os compañe os, sino ambién
pa a ayuda en un u u o a posibles compañe os que decidan p osegui con nues o
abajo.
Como podemos e en la igu a 3.4, ealizamos un modelo elacional en la apli-
cación con la he amien a D aw.IO que nos ayudó eno memen e a lo la go de es e
p oyec o.
3.2. API de comunicación en e back-end y on -
end
Como hemos ido an icipando, la comunicación en e los dos lados de la aplicación
es impo an e pa a el uncionamien o de la misma. Pa a ello se ealizan las APIs,
que pe mi en que el back-end y el on -end se comuniquen, in e cambiando da os o
ejecu ando acciones especi icas. Como p oyec o con inuación de o o an e io , he e-
damos una API ya ealizada con an e io idad po nues os compañe os, que hemos

3.3. Aspec os de Django 17
Figu a 3.5: Vis a del panel de adminis ación de Django
modi icado y adap ado mucho mejo al en o no de Django y Reac , nues as dos
ecnologías p incipales pa a cada lado espec i amen e.
3.3. Aspec os de Django
En es a sección habla emos sob e los aspec os más especí icos del amewo k
Django que hemos u ilizado pa a el desa ollo back-end de nues a aplicación.
3.3.1. Panel de adminis ación
Una de las he amien as más po en es de Django es su e minal de adminis-
ación. Es a he amien a o ece la posibilidad a los usua ios .adminis ado es" de
ealiza consul as e inse ciones en la base de da os con mucha acilidad. De hecho, al
y como ambién hicie on nues os compañe os del cu so pasado, es posible delega
en es a he amien a de adminis ación algunas de las uncionalidades que no se han
implemen ado di ec amen e en la aplicación web de Qwize , ales como el egis o
de p o eso es o el egis o de nue as asigna u as. En la igu a 3.5 podemos e la
is a de la he amien a.
Lo que sí hemos a ado de hace du an e es e año es mejo a el uso del panel de
adminis ación, exp imiéndola lo máximo posible y ajus ándola solo a las unciona-
lidades que necesi amos que enga. En e las mejo as ealizadas podemos encon a
las siguien es:
Focalización en las opciones más ele an es: An e io men e, el panel
de adminis ación o ecía el acceso a odas las ablas de la aplicación, donde
18 Capí ulo 3. A qui ec u a global del sis ema
algunas de ellas no e an necesa ias, ya que den o de Qwize es aban esas un-
cionalidades. Po lo que decidimos elimina el acceso a las ablas innecesa ias y
deja la in e az mucho más limpia y escue a pa a los p opios adminis ado es.
Regis o de usua ios: Cuando se incluye la abla de usua ios en el panel de
adminis ación, po de ec o, se u iliza la en idad Usua ios de Django, la cual
iene nume osos campos que noso os no enemos en cuen a pa a el almacena-
mien o de los mismos. Es o hacía que la c eación de usua ios ue a algo len a
e incluso pesada. Po ello decidimos elimina los a ibu os innecesa ios y así
simpli ica el p oceso de egis o.
Inse ción en lo e de usua ios: Una nue a uncionalidad que nos pa eció
bas an e ú il ue el hecho de añadi la posibilidad de inse a usua ios en
lo e. An e io men e, los usua ios se enían que c ea uno a uno. Po an o
pe mi imos que los adminis ado es pudie an añadi a ios usua ios de una
sola ez. Pa a ello, en la abla de usua ios hay una opción de impo a usua ios
donde podemos in oduci un iche o CSV que con enga oda la in o mación de
los usua ios pa a egis a los di ec amen e. Un ejemplo de es o se ía la igu a
3.6.
email i s name las name passwo d ole
[email p o ec ed] alumno 1 1 s uden
[email p o ec ed] alumno 2 2 s uden
[email p o ec ed] p o eso 3 eache
Figu a 3.6: Fiche o CSV con usua ios
3.4. Lib e ías ex e nas
En es a sección habla emos sob e las lib e ías ex e nas de Django y Reac que
hemos u ilizado en la aplicación.
3.4.1. Lib e ías pa a el back-end
django es amewo k [19]: Pe mi e la c eación de una API REST de mane-
a sencilla. El año pasado, en e o as cosas, nues os compañe os la u iliza on
po el sis ema de Tokens de sesión que u ilizaba es a lib e ía, la cual sim-
pli icaba el complejo sis ema de sesiones de Django y conseguía los obje i os
elacionados con el apa ado o line de la aplicación. Noso os hemos decidido
i un poco más lejos y ap o echa más es a lib e ía u ilizando sus componen es
básicos pa a la c eación p opia de la API. Dado que es o supone una mejo a
sus ancial en la implemen ación, habla emos más ex ensamen e sob e el uso
de es a lib e ía en el apa ado 3.5.2.
3.4. Lib e ías ex e nas 19
1#qwize _be/.en .sample
2REACT_APP_API_URL=
3REACT_HOST=
4REACT_PORT=
5
6#qwize _ e/.en .sample
7SECRET_KEY=
8DEBUG=
9ALLOWED_HOSTS=
10 DATABASE_ENGINE=
11 DATABASE_NAME=
12 DATABASE_USER=
13 DATABASE_PASSWORD=
14 DATABASE_HOST=
15 DATABASE_PORT=
16 CORS_ALLOW_ALL_ORIGINS=
17 CORS_ORIGIN_WHITELIST=
18 CSRF_TRUSTED_ORIGINS=
19
Figu a 3.7: Fiche o en de Django
django-en i on [15]: Pe mi e la c eación de un en o no de desa ollo en
Django más amigable y segu o. Tan o en el despliegue como en el desa ollo
del p oyec o, Django maneja nume osas a iables de con igu ación y hacen que
sus iche os sean di íciles de segui . Además, el uso de es a biblio eca pe mi e
encapsula en un solo iche o .en odas las a iables de con igu ación que
se necesi en. Es o acili a el en endimien o gene al de la con igu ación del
p oyec o y ayuda a ealiza modi icaciones de mane a más simple. En la igu a
3.7 podemos e un ejemplo de es e iche o de con igu ación.
django-impo -expo [2]: Pe mi e impo a y expo a obje os elaciona-
dos con las ablas de la base de da os. En la sección an e io hablamos del uso
del panel de adminis ación den o de nues o p oyec o. Es a lib e ía es la que
nos ha pe mi ido añadi usua ios en lo e.
djose [18]: O ece una se ie de endpoin s elacionados con acciones básicas
como son el egis o, inicio y cie e de sesión. Es a lib e ía se in eg a con el mo-
delo de Tokens de la biblio eca django es amewo k pa a in en a mejo a
el sis ema de sesiones sob e odo con amewo ks como Reac , que man ienen
un modelo SPA que di icul a el man enimien o de las p opias sesiones.
d -spec acula [6]: Pe mi e la documen ación de la API en Django. Es a
lib e ía, que abaja con el es ánda de Open API 3, pe mi e la in eg ación
con Swagge ( e subsección 2.3.7) nos ha ayudado a una gene ación de la
documen ación de la API muy de allada.
gunico n [1]: También conocido como G een Unico n, es un se ido HTTP
20 Capí ulo 3. A qui ec u a global del sis ema
compa ible con Django que se u iliza pa a ejecu a aplicaciones web Django.
Ac úa como un se ido in e media io en e el se ido web y la aplicación
Django, ges ionando las solici udes HTTP y en iando las espues as co es-
pondien es. Gunico n implemen a el es ánda WSGI (Web Se e Ga eway
In e ace), que de ine una in e az común en e los se ido es web y las aplica-
ciones web en Py hon. En esumen, Gunico n es una pa e in eg al del en o no
de Django, b indando un se ido HTTP obus o y e icien e pa a ejecu a apli-
caciones web Django en p oducción.
3.4.2. Lib e ías pa a el on -end
axios [10]: Pe mi e ene un clien e HTTP pa a hace llamadas a la API de
mane a más cómoda. En la sección de mejo as ( e sección 3.5) habla emos
más ex ensamen e de cómo hemos añadido es a lib e ía a nues o p oyec o,
pe o el año pasado, nues os compañe os u ilizaban la p opia llamada e ch
de Ja aSc ip pu o, donde enían que cons ui ellos sus p opias pe iciones
pa a llama a la API. Con axios es e p oceso se simpli ica con una sin axis
muy sencilla y pe mi iendo cen aliza odo el manejo de llamadas a la API
en un solo componen e.
local o age [12]: Pe mi e el acceso al almacenamien o local y a la base de
da os indexada en el na egado a a és de un p og ama en Ja aSc ip . En
nues a aplicación hacemos un g an uso del almacenamien o local pa a gua da
cues iona ios, okens e incluso in o mación del usua io. Es a biblio eca nos
pe mi e accede a es e almacenamien o y ambién a la base de da os indexada
que hay en los na egado es, la cual pe mi e almacena mucho más con enido
que los escasos 5MB del almacenamien o local. Además, la lib e ía o ece una
in e az muy ácil de usa muy pa ecida al esquema de cla e- alo que es amos
acos umb ados a usa .
eac - ou e -dom [14]: Pe mi e simula en Reac la unción de se i dis-
in as páginas al clien e desde di e en es u as. No malmen e, en las páginas
web que no u ilizan Reac , cuando accedemos a un u a especi ica el se ido
nos de uel e un iche o HTML único pa a esa u a. Como Reac se basa en un
modelo SPA no podemos pe mi i nos es a ca ac e ís ica, po lo que enemos
que simula la de alguna mane a. Es a lib e ía nos pe mi e de ol e un com-
ponen e de Reac po cada u a ins anciada en la aplicación man eniéndose
siemp e en una sola página.
hello-pangea/dnd [5]: Pe mi e un sis ema de d ag and d op en las lis as de
nues a aplicación. Algunas eces, den o de Qwize necesi amos que nues os
usua ios coloquen una se ie de p egun as en o den, po lo que con el in de
acili a les es a a ea hemos decidido añadi es a lib e ía, que apa e de hace
más es é ico es e p oceso, pe mi e cambia el o den en e los elemen os den o
de una lis a. En la igu a 3.8 podemos e un ejemplo de es a lib e ía en uso.
3.5. Mejo as ealizadas sob e el abajo an e io 21
Figu a 3.8: Ejemplo de lib e ía hello-pangea/dnd
3.5. Mejo as ealizadas sob e el abajo an e io
En es a sección amos a habla de las mejo as que hemos ealizado a lo la go
del p oyec o sob e los elemen os que ya enían implemen ados en el abajo del año
pasado.
3.5.1. F on -end
3.5.1.1. Re ac o ización de clases a unciones
El código de un componen e en Reac se puede es uc u a de dos mane as:
median e clases o median e unciones. Según los p opios desa ollado es de Reac ,
el sis ema median e clases ha quedado o almen e obsole o debido al cambio en el
es ánda de Ja aSc ip y a p oblemas de endimien o. Po es a azón, decidimos que
debíamos cambia odos los componen es de nues os compañe os del año pasado
a un en oque uncional, es deci , componen es basados en unciones. Es o, además
de mejo a el endimien o de la aplicación, nos ayuda ía a ac ualiza el código y
p og ama en la mane a más co ec a de Reac .
A lo la go de la e ac o ización, ambién nos encon amos con nume osas a ia-
bles decla adas con el ipo a de Ja aSc ip que según el es ánda se debe ían de
e i a po su compo amien o den o del código, po lo que uimos cambiando las
a iables a la decla aciones ac uales de le ycons . O o da o a menciona ue el
hecho de cambia las ex ensiones de odos los iche os de los componen es de Reac
a iche os JSX. An e io men e, odos los componen es es aban esc i os en o ma o
JSX pe o los iche os es aban decla ados como iche os de Ja aSc ip .
Apa e de es os cambios, ambién decidimos o dena y o ganiza el código pa a
un mejo en endimien o a la ho a de desa olla , es uc u ando mejo sob e odo la
ca pe a s c del p oyec o, sepa ando componen es, hooks, se icios, iche os CSS e
imágenes.
3.5.1.2. Ac ualización de lib e ías
Debido al cambio de es uc u a del código de Reac y el paso del iempo, muchas
de las lib e ías que se u ilizaban el p oyec o del año pasado queda on algo desac ua-

22 Capí ulo 3. A qui ec u a global del sis ema
Figu a 3.9: Ejemplo de lin e de Reac
lizadas o obsole as. Po ese mo i o necesi ábamos ac ualiza las lib e ías y elimina
las que no se u iliza án. G acias a que cualquie p oyec o de Reac abaja sob e un
en o no de Node.js, podemos ac ualiza odas las lib e ías que u ilicemos de mane a
p ác icamen e ins an ánea ejecu ando el comando de npm upda e, el cual ac uali-
za á odas las lib e ías que engamos decla adas en el iche o package.json. En el
caso que quisié amos elimina cualquie biblio eca, simplemen e debemos ejecu a
el comando npm unins all <nomb e-del-paque e>.
Apa e de es os cambios, que emos des aca el cambio de e sión de la p o-
pia lib e ía de Reac . La e sión an e io men e u ilizada po nues os compañe os,
Reac 17, enía nume osos p oblemas de ejecución con la de inición de componen es
median e unciones, po lo que u imos que ealiza un cambio a la e sión más
ac ualizada, Reac 18, en la que cambiaba como se a aba el ende izado p incipal
de la página.
3.5.1.3. A eglo de e o es y lin ing
Pa a el a eglo de e o es gene alizado du an e la e ac o ización del código y
nues o u u o desa ollo en la aplicación, decidimos que lo mejo se ía añadi lin e s
a nues o edi o de ex o, Visual S udio Code. Los lin e s son ex ensiones de Visual
S udio Code que pe mi en mos a e o es en la sin axis o da consejos sob e cómo
es uc u a mejo el código bajo un es ánda . En nues o caso, añadimos lin e s
an o de Reac como de Ja aSc ip pa a que nos ayudasen a encon a e o es más
dep isa y e i a que come iésemos e o es innecesa ios. En la igu a 3.9 podemos e
una de las ecomendaciones que nos hace el lin e de Reac .
3.5.1.4. Con igu ación del en o no del desa ollo
Pa a acili a el desa ollo a lo la go del p oyec o pensamos que una buena con i-
gu ación de nues o en o no y edi o de abajo es esencial. An e io men e, ya hemos
hablado de la mejo a con los lin e s pa a la iden i icación de e o es y mejo as en
nues o código, pe o ambién cabe des aca la con igu ación del en o no con nues o
nue o compilado de Reac , Vi e.
De la misma mane a que en Django, Reac maneja una se ie de con igu aciones
básicas pa a ejecu a su código. Vi e pe mi e, al igual que hacíamos con django-
en i on ( e sección 3.4.1), almacena en un iche o ipo .en odas las a iables
de con igu ación necesa ias, abs ayendo así odo en un simple iche o y mejo ando
la legibilidad del código en gene al.
3.5. Mejo as ealizadas sob e el abajo an e io 23
1expo cons Subjec s = {
2ge All: (_da a = {}, con ig = {}) =>
3clien .ge (’subjec ’, con ig),
4ge Tes s: ({ idAsigna u a }, con ig = {}) =>
5clien .ge (‘subjec /${idAsigna u a}/cues iona ios‘, con ig),
6ge Ques ions: ({ idAsigna u a }, con ig = {}) =>
7clien .ge (‘subjec /${idAsigna u a}/p egun as‘, con ig),
8ge F omS uden O Teache : (_da a = {}, con ig = {}) =>
9clien .ge (’subjec /me’, con ig),
10 en ollS uden s: ({ alumnos, asigna u a }, con ig = {}) =>
11 clien .pos (‘subjec /${asigna u a}/en oll‘, { alumnos }, con ig),
12 dele eS uden sF omSubjec : ({ alumnos, asigna u a }, con ig = {}) =>
13 clien .pos (‘subjec /${asigna u a}/dele e_en oll‘, { alumnos }, con ig)
,→,
14 };
15
Figu a 3.10: F agmen o del iche o de comunicación con la API
Además, Visual S udio Code pe mi e con igu a comandos pe sonalizados pa a
ejecu a den o de nues os p oyec os. En nues o caso hemos con igu ado una se ie
de comandos pa a a anca la aplicación, a ancando an o el back-end como el
on -end de mane a au omá ica en sus espec i os pue os, inicia es s de p ueba
ydepu a nues a aplicación. Todo es os comandos se encuen an especi icados en
el iche o asks.json.
3.5.1.5. Mejo as gene ales
Abs acción de la API: An e io men e, las llamadas a la API es aban espa -
cidas po odos los componen es de la aplicación, donde po cada llamada se
o maba la pe ición, epi iendo así muchísimo código y haciendo que el con ol
y man enimien o de odas las llamadas ue a complicado de ges iona . Po es a
azón, p ime o, o mamos con la nue a lib e ía axios un mé odo que c ea á
la pe ición pa a e i a epe i lineas de códigos po cada llamada a la API y
después, decidimos uni ica en un iche o odas las llamadas pa a mejo a el
con ol y la expansión de la API. En la igu a 3.10 podemos e como quedó
pa e del dicho iche o, donde se ap ecian odas las llamadas elacionadas con
las asigna u as.
Abs acción de u as: An e io men e, ambién odas las u as que hay en
el lado del clien e se colocaban di ec amen e en el código, y como buena p ác-
ica decidimos añadi un iche o de cons an es que eunie a odas las u as
u ilizadas y así hace más legible el código.
Reac Rou e y P o ec edRou es: Como ya comen amos en la sección de
lib e ías ex e nas ( e sección 3.4.2), el uso de eac - ou e ayudaba a man-
24 Capí ulo 3. A qui ec u a global del sis ema
ene la a qui ec u a SPA de Reac aunque se cambia á de u a. Es a lib e ía
o ece un componen e Rou e que engloba a odas las u as de la API, donde a
cada una se le asigna un componen e especi ico de Reac que se debe de ol e
cuando se acceda a esa u a. El año pasado, nues os compañe os no llega on
a aplica es a lib e ía co ec amen e, debido a que decla a on un componen e
Rou e po cada u a de la API y pensaban que enían que es uc u a den o
oda la página que que ían de ol e al usua io. Es o desembocó en un mal uso
de es a lib e ía y en un componen e App.js demasiado ex enso. Po lo que
es e año hemos conseguido implemen a la co ec amen e, educiendo eno me-
men e el código del componen e p incipal y hemos añadido que cie as u as
sean exclusi as solo pa a cie os ipos de usua io. Po ejemplo, si un es udian e
a a a de accede a la is a de c ea cues iona ios in oduciendo di ec amen e
la u a en la ba a de di ecciones del na egado , no se le pe mi i ía el acceso.
useFe ch,hook pa a llamadas asínc onas: Cuando el es ado de un elemen-
o de Reac depende de da os asínc onos se suele u iliza el hook useE ec
de Reac pa a con ola cuándo debe de ende iza se o a ez el componen e
una ez ac ualizado dicho elemen o. Como es o es algo ecu en e den o de
nues a aplicación, con el a án de eu iliza código decidimos c ea un hook
pe sonalizado que a a a odas es as si uaciones de igual mane a.
useAu h,hook de au en icación: Con el in de cen aliza oda la lógica
elacionada con la au en icación de los usua ios, decidimos c ea un hook pe -
sonalizado que engloba a odas las ope aciones de au en icación y maneja a la
in o mación del usua io que es á logueado en ese momen o.
3.5.2. Back-end
3.5.2.1. Re ac o ización de código
Lo p ime o que in en amos hace al p incipio del p oyec o, e a comp ende el
código del p oyec o an o a ni el de back-end como on -end. A ni el de back-end,
ya que nunca habíamos u ilizado Django, en ende odo el código al p incipio ue
una a ea bas an e du a. La o ganización del código e a algo compleja y di ícil de
en ende , con iche os ex ensos y es uc u as muy p o undas. Po ello empezamos un
p oceso de e ac o ización de código en el que nues o obje i o e a undamen almen e
o ganiza el código de una mane a que noso os lo en endié amos.
P ime o de odo, empezamos o ganizando los nomb es de las u as de la API.
An es, se u ilizaban nomb es poco especí icos que no dejaban cla o qué hacía cada
mé odo. Después, empezamos a es uc u a el código de una mane a o ganizada,
eliminando edundancias y haciendo más legible cada mé odo. Además, odas las
llamadas a la API es aban con mé odos POST, cuando debe ían se GET y ambién
los ajus amos.
Finalmen e, pasamos a es udia más en p o undidad la lib e ía de django es -
amewo k. En es a lib e ía explicaban el uso de algunas he amien as que nos
3.5. Mejo as ealizadas sob e el abajo an e io 25
se i ían a mejo a la es uc u a gene al de la API. Den o de es os consejos se en-
con aban los conocidos como iewse s, que explica emos en el apa ado de mejo as
gene ales ( e sección 3.5.2.5).
3.5.2.2. Ac ualización de lib e ías
De la misma mane a que ac ualizamos las biblio ecas del on -end ambién
nos en ocamos en pone al día odas las lib e ías u ilizadas en el back-end. Pa a
empeza , an es de ac ualiza odas las biblio ecas, decidimos implemen a un en o no
i ual de Py hon en nues a aplicación. Los en o nos i uales pe mi en ene una
ins ancia de Py hon especi ica con una se ie de dependencias ins aladas asociadas al
p oyec o, sin obliga al clien e a ene que ins ala odas es as en su p opio equipo.
An e io men e, pa a pode abaja sob e el p oyec o eníamos que ins ala odas
las dependencias y lib e ías asociadas una a una en nues os equipos, con el iesgo
de ene con lic os con nues as lib e ías p opias ins aladas y además haciendo es e
p oceso edioso y moles o pa a los desa ollado es. Con un en o no i ual e i amos
es o y abs aemos así el en o no del p oyec o de la con igu ación p opia de nues os
equipos.
Pa a man ene el p oyec o de mane a más segu a y es able, necesi ábamos un
ges o de dependencias pa a odas las lib e ías del p oyec o y una he amien a que
c ea á el en o no i ual. Po es e mo i o, al p incipio, u ilizamos pipen .Pipen es
un ges o de dependencias que abaja con en o nos i uales. Pe mi e c ea en o nos
i uales y a a és de un iche o Pip ile, donde se gua dan odas las dependencias
del p oyec o e ins ala en el mismo en o no i ual odos las lib e ías especi ica-
das. Du an e pa e del pe iodo de desa ollo, u ilizamos es e ges o has a que más
adelan e decidimos pasa nos a o o ges o de dependencias llamado Poe y.
Poe y, del mismo modo que pipen , es o o ges o de dependencias, pe o en es e
caso pe mi e almacena odas las dependencias del p oyec o con sus con igu aciones
en un solo iche o . oml. Según los es ánda es de Py hon más ac uales, la ges ión
de un p oyec o se debe man ene median e es e ipo de iche os, po lo que pa a
man ene nues o p oyec o lo más ac ualizado y co ec o posible decidimos cambia
pipen po poe y.
Po úl imo, añadimos la ac ualización de Django a su e sión más ac ualizada,
Django 4.1. En el p oyec o an e io , se u ilizaba Django 3, po lo que emíamos
que su ac ualización die a muchos p oblemas de compa ibilidad. Aún así, no hubo
muchas di icul ades en es e p oceso.
3.5.2.3. A eglo de e o es y lin ing
Al igual que en el on -end, pa a el a eglo de e o es decidimos u iliza los lin e s
de Django y Py hon. Es os nos ayuda ían a de ec a e o es básicos en la sin axis
de Py hon, como e o es de espaciados, excepciones o allos gene ales. Respec o a
Django, ambién incluía consejos de cómo u iliza de e minados elemen os y dónde
32 Capí ulo 3. A qui ec u a global del sis ema
Figu a 3.15: Nue a en ana modal pa a la ma iculación de alumnos

Cap´
ı ulo 4
Alea o ización de cues iona ios
En es e capí ulo amos a explica cómo a lo la go de es e p oyec o hemos im-
plemen ado uno de los p incipales obje i os plan eados pa a nues o p oyec o: la
alea o ización de cues iona ios.
4.1. Obje i o p incipal / In oducción
La alea o ización de los cues iona ios es un obje i o muy amplio que aba ca
nume osos pun os a desa olla . P incipalmen e, el obje i o inicial e a o ece la
posibilidad de la alea o ización de las p egun as de un cues iona io, es deci , en el
caso que un p o eso decidiese elabo a un cues iona io en el que sus p egun as se
mos a ían de o ma alea o ia, cada es udian e e ía su cues iona io en el que las
p egun as apa ecen en un o den dis in o al de los demás es udian es. Poco a poco,
es a idea se ue ag andando y uimos ex endiendo es e obje i o a algo más complejo,
en los que podemos iden i ica los siguien es obje i os:
Alea o ización de las opciones: Qwize cuen a con un banco de p egun as
con di e en es ipos de p egun a. Den o de los ipos que nos podemos encon-
a , se encuen an las llamadas p egun as ipo es . En es e ipo de p egun as
se le o ece al usua io un núme o de opciones especi ico con di e en es es-
pues as an e una p egun a. Al a a el ema de la alea o ización, decidimos
o ece es a p opiedad ambién a las opciones den o de una p egun a de ipo
es , po lo que el p o eso end ía la opción de elegi si quie e que las opciones
se ba ajen de mane a alea o ia a los alumnos.
Fijación de p egun as y opciones: La alea o ización de las p egun as o de
las opciones de un cues iona io supone cambia el o den ela i o de las mismas.
Sin emba go, a lo mejo los p o eso es en la c eación de sus cues iona ios
quie en man ene una p egun a o una opción en un luga ijo. Po ejemplo, en
las opciones de una p egun a ipo es , nos podemos encon a la opción de
Ninguna de las an e io es. En es e caso, dado el signi icado de la misma
opción, lo co ec o se ía coloca la en la úl ima opción posible. Si el p o eso
aún así quie e que las opciones se dispongan de mane a alea o ia, end ía que
ene la posibilidad de man ene algunas opciones en una cie a posición ija.
P egun as alea o ias: Apa e de la alea o ización de las p egun as den o
de un cues iona io, el p o eso ambién ag adece ía la posibilidad de, en un nú-
33
34 Capí ulo 4. Alea o ización de cues iona ios
me o de p egun a especi ico de su cues iona io, ag ega una se ie de p egun as
a apa ece an e los usua ios. Po ejemplo, en un cues iona io un p o eso deci-
de que en la p egun a 3 no quie e que apa ezca una p egun a especi ica, sino
que quie e que la aplicación elija en e un pa de p egun as que él señale, es
deci , siguiendo el ejemplo an e io y eniendo en nues o banco de p egun as
las p egun as 1,2,3 y 4, el p o eso quie e que una de e minada p egun a de
su cues iona io, puedan apa ece la p egun a 1,2 o 3 del banco de p egun as.
Es o es lo que noso os hemos iden i icado como p egun as alea o ias.
4.2. Cambios en la base de da os
La inco po ación de mecanismos de alea o ización en nues os cues iona ios p o-
ocó g andes cambios en la es uc u a gene al de la base de da os, haciendo que la
misma pasase po nume osas modi icaciones pa a la buena adap ación a es a nue a
ca ac e ís ica. En es a sección i emos iendo la p og esión de la base de da os a
medida que íbamos cumpliendo los obje i os ma cados.
4.2.1. C eación de en idad In en o e ins ancias
El añadido de la alea o ización de las p egun as a un cues iona io plan eaba
un g a e p oblema an e nues o modelo en idad- elación inicial. An e io men e, las
espues as de los es udian es a las p egun as de un cues iona io se almacenaban
en una en idad llamada Respues as en iadas. Cada ez que cualquie es udian e
espondía una p egun a de un cues iona io, se gua daba en es a abla la espues a
del mismo. Es a en idad no enía ninguna elación con el cues iona io al que se
con es aba y sabe el o den en el que un cues iona io se había con es ado y qué
espues a pe enecía a dicha p egun a e a algo al amen e complicado, po lo que po
el a án de cen aliza mejo la lógica p opia de los cues iona ios y sus ealizaciones,
c eamos la en idad In en o.
La en idad de in en o almacena ía oda la in o mación que se almacenaba an es
en e a ias en idades en una sola, es deci , se gua da ía que es udian e espondió
dicho in en o sob e un cues iona io y qué espues as había mandado ese es u-
dian e an e las di e en es p egun as. Más adelan e, decidi íamos que las espues as
de los es udian es se pod ían in e p e a como ins ancias de p egun as que el usua io
esponde, po lo que con es o inició el concep o de las Ins ancias de p egun as.
Las ins ancias de p egun as almacena ían la espues a de un usua io a una p e-
gun a y el o den en la que apa eció en un in en o. Es o nos ayuda ía eno memen e
después pa a el a amien o de la alea o ización den o de la aplicación, de ca a, a
ecupe a el o den inal de las p egun as de un cues iona io pa a un usua io.
Con los modelos de Django, c eamos es as dos nue as en idades de una mane a
muy sencilla y ápida. En el caso de las ins ancias end íamos ins ancias pa a las
p egun as ipo es y las ipo ex . Po lo que el modelo inal de las ins ancias
4.2. Cambios en la base de da os 35
queda ía algo así:
1class Ins anciaP egun a(models.Model):
2objec s = Ins anciaP egun aManage ()
3in en o = models.Fo eignKey(In en o,
4on_dele e=models.CASCADE)
5seleccion = models.Fo eignKey(SeleccionP egun a,
6on_dele e=models.CASCADE)
7p egun a = models.Fo eignKey(P egun a,
8on_dele e=models.CASCADE)
9o den = models.Posi i eSmallIn ege Field()
10
11 class Me a:
12 o de ing = ["p egun a"]
13
14 class Ins anciaP egun aTes (Ins anciaP egun a):
15 objec s = Ins anciaP egun aTes Manage ()
16 espues a = models.Fo eignKey(OpcionTes ,
17 on_dele e=models.CASCADE
18 ,null=T ue, blank=T ue)
19
20
21 class Ins anciaP egun aTex (Ins anciaP egun a):
22 objec s = Ins anciaP egun aTex Manage ()
23 espues a = models.Cha Field(null=T ue, blank=T ue,
24 max_leng h=254,
25 e bose_name=" espues a")
y el modelo de in en o llega ía a se algo así:
1class In en o(models.Model):
2objec s = In en oManage ()
3usua io = models.Fo eignKey(Use ,
4on_dele e=models.CASCADE)
5cues iona io = models.Fo eignKey(Cues iona io,
6on_dele e=models.CASCADE)
7no a = models.DecimalField(de aul =0, max_digi s=10,
8decimal_places=2,
9 e bose_name="no a")
10 hash = models.Cha Field(blank=T ue, max_leng h=254,
11 e bose_name="hash")
12 hash_o line = models.Cha Field(blank=T ue,max_leng h=254,
13 e bose_name="hash_o line")
14 echa_inicio = models.Da eTimeField(null=T ue,blank=False,
15 e bose_name=" echa_inicio")
16 echa_ in = models.Da eTimeField(null=T ue,blank=False,
17 e bose_name=" echa_ in")
18
19 class Es ado(models.Tex Choices):
20 PENDIENTE = ’PEN’, _(’Pendien e’)
21 ENTREGADO = ’ENT’, _(’En egado’)
36 Capí ulo 4. Alea o ización de cues iona ios
22
23 es ado = models.Cha Field(
24 max_leng h=3,
25 choices=Es ado.choices,
26 de aul =Es ado.PENDIENTE,
27 )
Una ez enemos un modelo en idad- elación más óp imo y p epa ado pa a es a
nue a ca ac e ís ica, ya podemos segui con nue as p opiedades.
4.2.2. Alea o ización de p egun as
Inicialmen e, nues os compañe os del año pasado, mos aban las p egun as de un
cues iona io de mane a secuencial, es deci , según el o den en el que hubie an añadido
el p o eso las p egun as al cues iona io en sí. Pa a consegui la alea o ización de
las p egun as simplemen e u imos que añadi un nue o a ibu o en la en idad
Cues iona ios que con olase si el p o eso quie e que las p egun as apa ezcan de
mane a alea o ia o no den o de un cues iona io.
Como nos apoyamos en el ORM de Django, u imos que modi ica el modelo de
la clase Cues iona io, añadiéndole el a ibu o nue o de alea o ización, quedando
así un modelo como el siguien e:
1class Cues iona io(models.Model):
2objec s = Cues iona iosManage ()
3p o eso = models.Fo eignKey(Use ,
4on_dele e=models.CASCADE)
5asigna u a = models.Fo eignKey("Asigna u a",
6on_dele e=models.CASCADE)
7...
8...
9alea o iza = models.BooleanField(de aul =False)
Den o de la aplicación, como podemos e en la igu a 4.1, hay un pequeño
ejemplo de cómo un p o eso pod ía modi ica es e a ibu o a su an ojo.
En el caso en que el p o eso decidiese añadi un cues iona io a a és de un
iche o YAML, simplemen e end ía que añadi un pequeño campo de alea o iza
como se puede e en la igu a 4.2.
Cabe eco da que, g acias a nues o modelo basado en ins ancias de las p e-
gun as, pod íamos gua da en qué posición apa eció cada p egun a del cues iona io
en cada in en o, pe mi iéndonos con es e sis ema ecupe a de mane a sencilla el
o den de odas las p egun as den o de un in en o.
4.2. Cambios en la base de da os 37
Figu a 4.1: Modi icación de alea o ización en c eación de cues iona ios
1cues iona io:
2 i ulo: "Tema 8"
3passwo d: "1234"
4asigna u a: "Es uc u as de da os"
5secuencial: 0 #0 es que no es secuencial, 1 es secuencial
6du acion: 10 #minu os que du a a el es
7 echa_ape u a: ’21/02/20 11:00:00’ #Fo ma o espe ado: yy:mm:dd hh:mm:ss
8 echa_cie e: ’23/03/24 11:59:59’ #Fo ma o espe ado: yy:mm:dd hh:mm:ss
9 echa_ isible: ’21/02/20 11:00:00’ #Fo ma o espe ado: yy:mm:dd hh:mm:ss
10 alea o iza : T ue #Indica que se quie e alea o iza el cues iona io
11
Figu a 4.2: Alea o ización en cues iona ios ía YAML

38 Capí ulo 4. Alea o ización de cues iona ios
Figu a 4.3: Elección de alea o ización de opciones
4.2.3. Alea o ización de opciones
La alea o ización se debe hace ambién a ni el de opciones den o de las p egun-
as ipo es . El p o eso debe ía de pode elegi si las opciones de una p egun a es
deben mos a se de mane a alea o ia den o de un in en o. Al igual que nos pasó
con las p egun as den o de los cues iona ios, nues o modelo en idad- elación no
es aba oda ía lo su icien emen e p epa ado como pa a almacena si una p egun a
den o de un in en o debe ía mos a sus opciones de mane a alea o ia y ampoco
es aba es uc u ado pa a gua da el o den con el que se mos a ían las opciones a
los es udian es.
Pa a el p ime o de los p oblemas, añadimos un nue o a ibu o en la clase
que almacenaba las p egun as pe enecien es a un cues iona io, al igual que en la
alea o ización de las p egun as, es e nue o a ibu o gua da ía si la p egun a den o
del cues iona io debe ía mos a sus opciones de mane a alea o ia. A consecuencia
de es a solución, el p o eso pod ía ma ca si las opciones de una p egun a ipo es
se mos a ían de o ma alea o ia. Como podemos e en la igu a 4.3 es muy ácil
de con ola .
En el caso en que el p o eso decida añadi un cues iona io a a és de un iche o
YAML, lo único que end á que hace es añadi un nue o a ibu o en las p egun as
ipo es , como se puede e en la igu a 4.2, pe o en ez de añadi lo a ni el de
cues iona io, debe á añadi lo a ni el de p egun a.
Con o me a es o pod íamos con ola pe ec amen e el p ime o de los p oblemas,
pe o pa a busca una solución al segundo p oblema necesi amos pensa en cómo al-
macena el dis in o o den de las opciones en los di e en es in en os de los es udian es.
Pa a soluciona es o u ilizamos de nue o nues a men alidad de las ins ancias y
con ello c eamos así la clase de Ins anciaOpcionTes . En es e nue o modelo de la
base de da os se gua da ía una e e encia de la opción es que gua dase esa nue a
ins ancia y además el o den en el que apa eció es a opción en el in en o a la que
es a asignada.
El nue o modelo en Django es á indicado en la Figu a 4.4, donde se puede
obse a que gua da odos los da os an e io men e edac ados:
4.3. P egun as alea o ias 39
1class Ins anciaOpcionTes (models.Model):
2objec s = Ins anciaOpcionTes Manage ()
3ins ancia = models.Fo eignKey(Ins anciaP egun aTes ,
4on_dele e=models.CASCADE)
5 espues a = models.Fo eignKey(OpcionTes ,
6on_dele e=models.CASCADE,
7null=T ue, blank=T ue)
8o den = models.Posi i eSmallIn ege Field()
9
Figu a 4.4: Modelo Ins anciaOpcionTes
4.2.4. Fijación de p egun as y opciones
Como ya hablamos con an e io idad, la alea o ización p esen aba el p oblema
de p egun as o opciones de p egun as ipo es que el p o eso quisiese que se que-
da án ijadas en una posición conc e a. Po ejemplo, en el caso de la opción de
Ninguna de las an e io es, coloca la en una posición di e en e a la úl ima p o-
oca ía con usión en la p opia p egun a. Po es a azón, pa a soluciona es e pequeño
con a iempo, decidimos almacena un nue o campo ija en los modelos donde se
gua da la in o mación co espondien e a las p egun as pe enecien es a un cues io-
na io, Pe eneceCues iona io y al modelo donde se gua da la in o mación sob e
las opciones de las p egun as de es e ipo.
G acias a es a implemen ación, una ez se ecupe ase una p egun a o una opción
de un in en o se pod ía comp oba si la misma debe ía i ijada a la posición en la
que se encuen a o no. En el apa ado de la aplicación, en la is a de la c eación de
un cues iona io, pa a la ijación de las p egun as, el p o eso simplemen e, una ez
elegido el o den en el que una p egun a debe apa ece , ma ca á si quie e que se ije
a esa posición como podemos e en la igu a 4.3 al lado del bo ón de alea o iza .
En el caso en que el p o eso decida subi un cues iona io median e un iche o
YAML, una ez que o dene las p egun as en el o den canónico que quie e que apa-
ezcan, pod á añadi un nue o campo ija como podemos e en las p egun as de
un cues iona io en la igu a 4.5.
En elación a la ijación de las opciones de una p egun a, dado que nues a
aplicación solo pe mi e la inco po ación de p egun as ía YAML, el p o ocolo pa a
ello es muy pa ecido a como se mues a en la igu a an e io . Simplemen e se debe
coloca el campo ija en la opción que se quie a man ene en una posición conc e a.
4.3. P egun as alea o ias
An e io men e, in oducimos el concep o de p egun as alea o ias den o de
nues a aplicación Qwize . Es a uncionalidad no es aba p e is a den o de nues-
40 Capí ulo 4. Alea o ización de cues iona ios
1p egun as:
2- ipo: " es "
3p egun a: "El p oblema de la mochila usa el esquema de :"
4 i ulo: "Ti ulo 3"
5opciones:
6- op: "Di ide y Vence as"
7 ija : False
8- op: "Vuel a a as"
9 ija : T ue
10
Figu a 4.5: Fijación en cues iona ios ía YAML
os obje i os iniciales, pe o, como nos comen ó nues o u o , es a ca ac e ís ica es
muy habi ual en aplicaciones elacionados con cues iona ios, como es el ejemplo de
nues a mayo inspi ación, Moodle. La posibilidad de c ea una p egun a den o de
nues os cues iona ios donde a cada usua io le apa eciese una p egun a elegida de
un conjun o de p egun as seleccionadas especí icamen e pa a que esa p egun a, e a
algo mo i ado y, desde nues o pun o de is a, algo complicado de ealiza .
Desde un inicio, eíamos complicado la in eg ación de es a uncionalidad den o
de nues o sis ema, dado a a ios ac o es, en e ellos:
Cambios en la base de da os: Desde un p incipio, nos dio la sensación de
que es e nue o añadido en la aplicación pod ía p o oca o o g an cambio en
la base de da os. El hecho de ene que cambia la es uc u a gene al después
de habe ajus ado odo a un modelo mucho más limpio y ú il pa a nues as
uncionalidades p incipales, nos p o ocó, a p ime a is a, una sensación de
echazo.
Impac o en el código: Pensando más en el código y su o ganización, el
añadido de las p egun as alea o ias p o oca ía segu amen e muchos cambios en
la lógica p incipal de muchas de nues as u as en la API, p o ocándonos una
sensación de miedo a gene a e o es en algunas pa es conc e as del código.
Aún así con es os ac o es en men e y g acias a la mo i ación de nues o u o ,
decidimos añadi es a uncionalidad pa a aumen a el alo de nues a aplicación y
hace la mucho más compe en e en su ámbi o.
4.3.1. Nue o modelo, SelecciónP egun a
P ime o de odo, la implemen ación de es a uncionalidad p o ocaba, como ya
habíamos es imado, un g an cambio en la base de da os. La mane a en la que se
almacenaban las p egun as pe enecien es a un cues iona io solo pe mi ía almace-
na p egun as del p opio banco de p egun as, po lo que añadi a un cues iona io
4.3. P egun as alea o ias 41
una p egun a que ue a de o o ipo, en es e caso una p egun a alea o ia, e a algo
imposible po como es aba es uc u ado el modelo en idad- elación.
Pa a ello u imos que cambia la men alidad con la que almacena íamos las
p egun as pe enecien es a un cues iona io, llegando a la conclusión y a la ejecución
de un nue o modelo SelecciónP egun a. Es e nue o modelo cambia ía o almen e
la pe spec i a de la inco po ación de p egun as a un cues iona io. Aho a, en ez de
añadi di ec amen e p egun as del banco se añadi ían selecciones de p egun a.
Es as selecciones pueden se di ec amen e p egun as del banco de p egun as,
o bien o o ipo de p egun as, como pueden se las p egun as alea o ias.
Es e modelo nos pe mi i ía añadi , en un u u o, o os ipos de p egun as que no
engan ninguna elación con el banco de p egun as o solo pa cialmen e, ampliando
así la capacidad de la aplicación pa a escala de mane a mucho más sencilla. Como
podemos ap ecia en la igu a 3.2 se puede e cómo pa íamos de un modelo más
escue o y pasamos a un modelo más complejo con la inco po ación del modelo
SeleccionP egun a como podemos e en la igu a 3.3.
4.3.2. Uso den o de la aplicación
Es a nue a uncionalidad es á disponible pa a los cues iona ios que se suban ía
YAML. En el momen o que los p o eso es quie an añadi una p egun a alea o ia,
end án que segui los siguien es pasos pa a consegui lo:
1. En el apa ado de las p egun as del iche o YAML, añadi una p egun a nue a
con el nue o ipo de p egun a, alea o ia.
2. A con inuación, añadi el campo de p egun as_elegidas después del campo
ipo an es explicado. En es e nue o campo se in oduci á el subconjun o de
p egun as del banco que que emos que puedan apa ece . Pa a e e encia las
p egun as del banco, eco da u iliza el campo e y esc ibi el í ulo de la
p egun a a e e encia .
3. Al igual que las p egun as egula es del banco, debemos añadi una pun-
uación posi i a y una pun uación nega i a, con los campos pun _posi i a
ypun _nega i a espec i amen e.
La Figu a 4.6.mues a un ejemplo de inclusión de una p egun a alea o ia.
Además, den o de los ejemplos de cues iona ios ya c eados, se encuen a uno
con un es con una única p egun a alea o ia pa a que si a de ayuda a los p o eso es
que comiencen a u iliza la aplicación. Es e cues iona io se llama es 2.yml.
48 Capí ulo 5. In oducción de Ma kdown y ó mulas
Figu a 5.1: Nue a is a pa a subi p egun as
1de ge _opcion(sel ,obj):
2 s = FileSys emS o age()
3opcion = obj.opcion
4imagenes_de ol e = e. indall(
5 "! [(.*?) ] (([ w / - : ._]+?) )", obj.opcion)
6 o img in imagenes_de ol e :
7name = s (img[1])
8 o ma = name.spli (".")[1]
9i o ma == "s g":
10 o ma +="+xml"
11 pa h = s.pa h(name)
12 wi h open(pa h, " b") as image_ ile:
13 encoded_s ing = base64.b64encode(image_ ile. ead())
14 .decode(’u -8’)
15 imagen_base64 = ’da a:image/ %s;base64, %s’
16 % ( o ma , encoded_s ing)
17 opcion = opcion. eplace(name, imagen_base64)
18 e u n opcion
19
Figu a 5.2: Cambios en se ializado es pa a ecupe ación de imágenes

5.3. Resul ados 49
1- ipo: " es "
2p egun a: "La o mula de la ene gia es"
3 i ulo: "Ti ulo Ma kdown Tes 2"
4opciones:
5- op: "$E = mc^2$"
6 ija : False
7- op: "$E = mc^3$"
8 ija : False
9- op: "$E = mc * 2$"
10 ija : False
11 - op: "Ninguna de las an e io es"
12 ija : T ue
13 op_co ec a: 0 #id de opcion co ec a
14
Figu a 5.3: P egun a con ex o Ma kdown y ó mulas ma emá icas
1p egun as:
2- ipo: " es "
3p egun a: "El simbolo del amewo k de Reac es:"
4 i ulo: "Ti ulo Ma kdown SVG"
5opciones:
6- op: "No se"
7 ija : False
8- op: "![Image]( eac .s g)"
9 ija : False
10 - op: "![Image](h ml.s g)"
11 ija : False
12 - op: "Ninguna de las an e io es"
13 ija : T ue
14 op_co ec a: 1 #id de opcion co ec a
15
16
Figu a 5.4: P egun a con imágenes
50 Capí ulo 5. In oducción de Ma kdown y ó mulas
Figu a 5.5: Visualización de p egun as con ó mulas
5.3. Resul ados 51
Figu a 5.6: Visualización de p egun a con imágenes
52 Capí ulo 5. In oducción de Ma kdown y ó mulas
Figu a 5.7: Visualización de p egun a con imágenes en disposi i o mó il
Cap´
ı ulo 6
In eg ación con Moodle
Uno de los p incipales obje i os del T abajo de Fin de G ado e a acili a la
mig ación de p egun as y cali icaciones en e Moodle y Qwize . Nos p opusimos
alcanza los siguien es obje i os:
Impo a p egun as desde Qwize gene adas a pa i de un banco de
p egun as de Moodle. Es o pe mi i ía ap o echa el con enido exis en e en
Moodle y u iliza lo en Qwize .
Expo a las cali icaciones desde Qwize pa a que puedan se impo adas
en Moodle. De es a mane a, se pod ía man ene un seguimien o cohe en e de
las cali icaciones de los alumnos, u ilizando Qwize pa a e alua su desempeño
y luego e leja esas no as en Moodle.
Es os obje i os es aban o ien ados a acili a la in e ope abilidad en e las pla-
a o mas y b inda a los p o eso es la capacidad de ap o echa el con enido y las
cali icaciones exis en es en Moodle en el en o no de Qwize , y ice e sa.
6.1. Mig ación de las p egun as de Moodle
En es a sección, abo da emos el p oceso de mig ación de p egun as desde Moodle
a nues o sis ema. Pa a lle a a cabo es a mig ación, u ilizamos el o ma o de Moodle
XML, que nos b inda la capacidad de impo a y expo a p egun as en Moodle.
6.1.1. Fo ma o Moodle XML
El o ma o de Moodle XML1pe mi e impo a y expo a p egun as desde Mood-
le. En nues o caso solo necesi ábamos sabe como es aban de inidas las p egun as
de espues a co a (Figu a 6.1) y las p egun as de opción múl iple (Figu a 6.2), pa a
inse a las en nues a base de da os pos e io men e.
Teniendo conocimien o de la es uc u a del iche o, ex ajimos selec i amen e los
da os necesa ios pa a nues a aplicación haciendo uso de la lib e ía Elemen T ee
como se de alla en la sección 6.1.2.
1h ps://docs.moodle.o g/all/es/Fo ma o_Moodle_XML
53

54 Capí ulo 6. In eg ación con Moodle
1<ques ion ype="sho answe ">
2<answe ac ion="100">
3< ex >La espues a co ec a</ ex >
4< eedback>< ex >Co ec o</ ex ></ eedback>
5</answe >
6</ques ion>
7
Figu a 6.1: P egun a co a
1<ques ion ype="mul ichoice">
2<name>
3< ex >Ti le</ ex >
4</name>
5<ques ion ex o ma ="h ml">
6< ex ><![CDATA[<p>Choose one:</p>]]></ ex >
7</ques ion ex >
8<answe ac ion="100" o ma ="h ml">
9< ex ><![CDATA[<p>op ion</p>]]</ ex >
10 </answe >
11 <answe ac ion="0" o ma ="h ml">
12 < ex ><![CDATA[<p>op ion</p>]]></ ex >
13 </answe >
14 <answe ac ion="0" o ma ="h ml">
15 < ex ><![CDATA[<p>op ion</p>]]></ ex >
16 </answe >
17 <answe ac ion="0" o ma ="h ml">
18 < ex ><![CDATA[<p>op ion</p>]]></ ex >
19 </answe >
20 </ques ion>
21
Figu a 6.2: P egun a de opción múl iple
6.2. Expo a no as 55
6.1.2. Elemen T ee
Pa a p ocesa el a chi o XML de Moodle, empleamos la biblio eca Elemen T ee.
Es a he amien a nos b inda la capacidad de eco e el XML de mane a je á qui-
ca, como si es u ié amos na egando po un á bol, y nos pe mi e busca elemen os
especí icos u ilizando exp esiones XPa h.
G acias a es as uncionalidades, log amos ealiza una manipulación e icien e
y p ecisa de los da os que necesi ábamos ex ae del a chi o de Moodle. Una ez
que p ocesamos el a chi o XML, c eamos las p egun as en la base de da os, pe o
an es u imos que ealiza o o a amien o en el ex o de las p egun as. Como se
puede obse a en la igu a 6.2, las p egun as es án en o ma o HTML, po lo que
u imos que u iliza una exp esión egula adicional pa a elimina odas las e ique as
innecesa ias.
Además, es impo an e menciona que es e p oceso de manipulación de da os se
lle a a cabo de mane a simila al caso del YAML, con la di e encia de que en es e
caso los da os necesa ios pa a las p egun as se ex aen del a chi o XML en luga
del a chi o YAML.
6.2. Expo a no as
La expo ación de cali icaciones de los es udian es in oluc a un p oceso que cons-
a de a ias e apas. Pa a comp ende mejo es e p oceso, es necesa io es ablece
el con ex o en el que se u iliza Moodle. Moodle o ece la capacidad de impo a
cali icaciones en o ma o CSV ( alo es sepa ados po comas). Es o pe mi e a
los p o eso es ans e i y egis a las cali icaciones de los es udian es de mane a
e icien e.
Pa a es o Moodle puede gene a una abla que con iene un lis ado de es-
udian es, donde cada es udian e iene su in o mación pe sonal como co eo elec-
ónico, DNI, en e o os da os. Una de las columnas de es a abla co esponde a
las cali icaciones, y es en es a columna donde el p o eso debe comple a las no as
co espondien es a cada es udian e.
Una ez que el p o eso ha comple ado las cali icaciones en la columna co es-
pondien e de la abla CSV, el siguien e paso es ca ga el a chi o CSV con las cali i-
caciones en Moodle. Al hace es o, Moodle inco po a la in o mación de cali icaciones
p opo cionada en el a chi o CSV a su base de da os.
Pa a pode ellena adecuadamen e las no as de los es udian es en nues a apli-
cación de o ma sencilla y au oma izada se siguen los siguien es pasos:
En Qwize se ca ga el lis ado de es udian es en o ma o CSV de Moodle, como
se mues a en la Figu a 6.3. Es e a chi o con iene la lis a de es udian es jun o
con la columna de cali icaciones que se desea comple a , como se ilus a en el
ejemplo de la Figu a 6.4.
56 Capí ulo 6. In eg ación con Moodle
Figu a 6.3: Subida de la lis a de es udian es
En Qwize , se selecciona la columna co espondien e a las no as a ellena y
se indica la asigna u a a la que pe enecen, como se mues a en la Figu a 6.5.
Es o pe mi e a Qwize iden i ica co ec amen e la columna de cali icaciones
en el a chi o CSV, ya que puede habe a ias.
A con inuación, se elige el cues iona io pe inen e en Qwize , que se u iliza á
pa a asigna las cali icaciones a los es udian es co espondien es, como se indi-
ca en la Figu a 6.6. Cabe acla a que pa a iden i ica a que alumno pe enece
cada no a usamos la columna de Di ección de co eo, que es la que se usa á
pa a iden i ica uní ocamen e a cada alumno en nues a aplicación.
Po úl imo, se ealiza la desca ga del a chi o inal, que incluye la columna
de cali icaciones debidamen e ellenada. Es e a chi o inal puede se ca gado
nue amen e en Moodle pa a que las cali icaciones se inco po en en la base de
da os de Moodle.
De es a mane a, nues a aplicación Qwize acili a el p oceso de impo ación
de no as, pe mi iendo a los p o eso es comple a las cali icaciones en un lis ado de
alumnos expo ado desde Moodle pa a su pos e io ca ga en la misma pla a o ma.
6.2. Expo a no as 57
Nomb e Apellidos DNI Di eccion de co eo I em de cali icacion
oo oo 1234567Q oo @ oo .com
x x 2222222Q [email p o ec ed]
Figu a 6.4: Lis a de es udian es gene ada po Moodle
Figu a 6.5: Selección de la columna y la asigna u a
Figu a 6.6: Selección del cues iona io
64 Capí ulo 8. Conclusiones y abajo u u o
Po o a pa e, conseguimos comple a o os obje i os, los cuales ue on apa-
eciendo a medida que el p oyec o a anzaba. En e ellos podemos encon a los
siguien es:
Cambios en el diseño p incipal: Inicialmen e, no eníamos pensado cam-
bia el diseño de las is as de nues os compañe os, pe o, ligado al obje i o del
diseño adap able, nos imos obligados a ealiza algunos cambios sob e casi o-
das las is as iniciales pa a mejo a la expe iencia gene al de nues os usua ios.
Incluso llegamos a in oduci nue as uncionalidades de las que p e iamen e
Qwize no disponía (sección 3.5.3).
Documen ación de la API: Como ya explicamos en la pa e de mejo as ( e
sección 3.5.2), una buena documen ación de una API nos pa ece algo esencial
ya que sin ella se di icul a eno memen e en ende cada llamada y el po qué
de la misma. Al p incipio, noso os nos encon amos en es a si uación y po
el bien de unos posibles u u os compañe os o simplemen e alguien que quie a
en ende nues o abajo, hemos desa ollado una documen ación ex ensa e
in e ac i a sob e cada llamada de la API, acili ando su comp esión a ojos de
cualquie a.
Tes ing: Al igual que una buena documen ación, cualquie desa ollo de so -
wa e implica una e apa de es eo, donde se hagan nume osas p uebas que com-
p ueben si el código desa ollado unciona como lo espe ado. Po es e mo i o,
desa ollamos un apa ado de es ing pa a la pa e back-end de la aplicación,
en la que se p obaba la lógica de las llamadas a la API.
Despliegue de aplicación: Finalmen e, si que íamos p oba nues a apli-
cación en un en o no de p oducción eníamos que explo a la posibilidad de
p epa a la pa a su despliegue, po lo que con igu amos y adap amos nues o
en o no de desa ollo pa a desplega la aplicación en cualquie momen o. De
hecho en el capí ulo 7hemos desa ollado más en de alle la solución a es e
obje i o.
Además ambién conseguimos comple a pa e de los obje i os que enían nues-
os compañe os plani icados pa a abajo a u u o. En e ellos conseguimos imple-
men a :
1. La ealización de cues iona ios de mane a secuencial, donde aho a los p o eso-
es pueden elegi si un cues iona io se debe hace seguidamen e, es deci , sin
pode ol e a la p egun a an e io una ez se pase a la siguien e.
2. Resolución de más de un cues iona io a la ez de mane a o line. An e io men-
e, solo se podía esol e un cues iona io si el es udian e pe día la conexión. En
cambio, aho a g acias a la nue a ges ión del almacenamien o de cues iona ios,
se puede ealiza más de un cues iona io de mane a o line.
3. Mejo a de in e az de la c eación de cues iona ios y, como ya hemos comen ado
en los obje i os p incipales, adap ación de in e az a disposi i os mó iles.

8.2. Di icul ades encon adas 65
8.2. Di icul ades encon adas
A lo la go del desa ollo del p oyec o, se encon a on algunas di icul ades que
a ec a on el p oceso de implemen ación de los obje i os:
Código he edado: Uno de los mayo es desa íos ue lidia con código he edado
del p oyec o an e io . El uso de código p eexis en e p esen ó di icul ades pa a
comp ende su uncionamien o y adap a lo a los nue os equisi os, desembo-
cando en nume osas semanas de e ac o ización y mejo as al código inicial.
Po es a azón, el pe iodo de adap ación y amilia ización con el p oyec o se
ex endió más de lo no mal, impidiendo cumpli algunos obje i os secunda ios
plan eados.
Desconocimien o de las ecnologías: Cabe des aca que ambos in eg an-
es del equipo pa íamos sin una base de las ecnologías u ilizadas den o del
p oyec o, po lo que la u ilización de es as nue as ecnologías y he amien-
as du an e el desa ollo del p oyec o implicó un pe íodo de ap endizaje y
amilia ización. Tan o Django como Reac e an amewo ks que p esen aban
mecanismos complicados de en ende y asimila al p incipio. Po ello podemos
ag ega los p incipales p oblemas encon ados du an e el desa ollo con ambos
ma cos de abajo:
•Django: Una de las lib e ías que se ha u ilizado más a ondo es e año es
la llamada django es amewo k. El uso de la misma es á explicado en la
sección de 3.5. La ampliación en el uso de es a lib e ía aca eó nume osos
p oblemas dado que el uso de se ializado es, iewse s y o os mecanismos
de la misma ue on algo complicados de implemen a en el código he eda-
do ecibido. Es o, sumado a la poca comp esión que eníamos de Django
en las p ime as e apas de desa ollo nos p o oca on g andes complicacio-
nes al inicio del p oyec o, que saldamos g acias a la documen ación o icial
an o de Django como de la lib e ía.
•Reac : Apa e del desconocimien o gene al de Reac , el hecho de a on a
componen es con an a lógica esul ó algo ab umado inicialmen e. T as
a ias semanas de desa ollo, es e sen imien o de p esión se ue educiendo
e incluso acabó en nume osas mejo as en cada uno de los componen es.
Tiempo: El ac o empo al ue o o desa ío signi ica i o. G an pa e del de-
sa ollo ue adecua y mejo a el código an e io , y eso dio luga a un meno
iempo pa a desa olla las nue as uncionalidades. Aunque se cumplie an los
obje i os iniciales ma cados pa a el abajo, una e apa de comp obación y
es eo en un en o no eal hubie a ayudado al p oyec o a llega a un ni el de
e inamien o más ele ado. Todo es o sin con a la poca disponibilidad en al-
gunos momen os del p oyec o debido a la p esión del cu so y en momen os
pun uales, de los exámenes.
66 Capí ulo 8. Conclusiones y abajo u u o
8.3. T abajo u u o
Si bien los obje i os plan eados se han log ado con éxi o, conside amos que el
p oyec o aún iene ma gen de mejo a. Pa a ello, p oponemos las siguien es modi i-
caciones:
Accesibilidad: Aunque hemos adecuado la mayo pa e de la aplicación pa a
odos los disposi i os, c eemos que oda ía se pod ía amplia la accesibilidad de
nues a aplicación pe mi iendo que odo ipo de usua ios, independien emen e
de sus capacidades ísicas o cogni i as, pueda hace uso de Qwize . El uso
de écnicas de accesibilidad como a iación de colo es, cambios en los emas,
desc ipciones con ex os de ayuda, uso de ipog a ías sencillas y bo ones y
paneles g andes y áciles de localiza ayuda ían a ajus a Qwize a un ámbi o
más inclusi o.
Tes ing en el on -end: Como ya explicamos an e io men e, uno de los
obje i os secunda ios cumplidos ue el hecho de documen a y es ea el back-
end de nues a aplicación. Es o ha concluido en nume osos bene icios a lo la go
del desa ollo de la aplicación. En cambio, uno de los abajos que nos hubie a
gus ado ealiza y po al a de iempo no se ha podido comple a es el hecho
de ealización de p uebas de la in e az y de los componen es p incipales del
on -end de nues a aplicación. En nume osas ocasiones, hemos enido que
comp oba el co ec o uncionamien o de la lógica de los componen es, en los
que a eces p o ocaba llamadas a la API y consecuen emen e, cambios en el
es ado de la base de da os. Es e edioso p oceso nos hizo plan ea nos ealiza
una se ie de p uebas a las is as más esenciales de la in e az, pe mi iéndonos
p oba es a lógica y ealiza las p uebas bajo una base de da os p epa ada
pa a los es s. Además, es e ipo de p uebas encamina el código po un camino
más sos enible y es able, po los que u u os desa ollos se e ían ag adecidos
po las mismas.
In e az p opia pa a mó iles: A lo la go del desa ollo del p oyec o, ha ha-
bido nume osas ocasiones en los que nos hemos eplan eado hace una in e az
p opia pa a los disposi i os mó iles, po que aunque hayamos dedicado iempo
a consegui un diseño adap able de nues a aplicación, siemp e quedan algunos
componen es o algunos agmen os de las is as que quedan lige amen e ue a
del es ilo de una aplicación mó il. Pa a es o es udiamos Ionic, un amewo k
cen ado en el desa ollo de in e aces de usua ios en disposi i os mó iles, el
cual, dado que su sin axis es muy pa ecida a nues o p incipal amewo k de
es ilado, Boo s ap, nos pe mi i ía habe diseñado una in e az única y exclu-
si a pa a los disposi i os mó iles. Al inal, e minamos abandonando la idea
debido a que e a un obje i o muy complicado de comple a en el poco iempo
que nos quedaba, pe o en un u u o, es a idea pod ía da le a Qwize un alo
undamen al pa a su implemen ación den o de las asigna u as de la acul ad.
Más ipo de p egun as: Qwize es una aplicación basada en la ealización
de cues iona ios y uno de los apa ados en los que oda ía cojea es su pequeño
8.3. T abajo u u o 67
ca alogo de p egun as. Aunque es e año hemos dedicado pa e del iempo a
la c eación de un nue o ipo de p egun a (las p egun as de selección alea o-
ia) pensamos que pod ían añadi se muchos más ipos de p egun as, como po
ejemplo, p egun as de elaciona , p egun as de ellena huecos, e c... Además,
g acias a la nue a es uc u a de la base de da os, añadi es os nue os ipos de
p egun a se ía algo sencillo de ealiza . Po al mo i o, pensamos que es a nue-
a inco po ación de p egun as pod ía da le o a imagen a Qwize y impulsa la
a un en o no más llama i o.
Impo a más ipos de p egun as: En elación a la impo ación de p e-
gun as, ambién enemos nume osos en es abie os que pod íamos aba ca ,
como puede se el hecho de impo a o o ipo de p egun as de Moodle, ya
que aho a mismo, solo se pueden impo a p egun as de espues a co a y p e-
gun as de mul iopción. Al mismo iempo, nos hemos eplan eado la idea de
impo a p egun as con o os o ma os. Ac ualmen e, Qwize solo pe mi e im-
po a p egun as con o ma o XML-Moodle cen ando oda es a uncionalidad
en un solo o ma o. Po lo que, en esumen, impo a o os ipos de p egun as
de Moodle y aumen a la can idad de o ma os pa a impo a p egun as, nos
pa ece un obje i o que se pod ía plan ea pa a u u o.
Usa API de moodle. Mejo a la conec i idad con Moodle: Ligado a la
expo ación de las cali icaciones de Qwize a Moodle, c eemos que es e obje i o
se puede mejo a haciendo más cómoda la in e ope abilidad en e Qwize y
Moodle. Pa a ello, pensamos en que se ía mejo u iliza la p opia API de
Moodle pa a amplia las posibilidades de in eg ación con nues a aplicación.
Cap´
ı ulo 9
Con ibuciones pe sonales
En es e capí ulo amos a habla de nues as con ibuciones po sepa ado al p o-
yec o. Ambos hemos abajado de mane a sínc ona, ocando aspec os an o del
on -end como del back-end, po lo que en nues as explicaciones algunas eces se
combina án a eas en las que ambos hemos abajado. Aún así, cabe ema ca que
ambos hemos abajado jun os en los siguien es apa ados:
Re ac o ización del código
Ac ualización de lib e ías
Nue o diseño de la base de da os: Los p incipales cambios en la es uc u a
gene al de la base de da os ue on desa ollados en e los dos.
Co ección de e o es: Ambos hemos abajado en co egi los e o es que
iban su giendo an o en el on -end como en el back-end.
69

70 Capí ulo 9. Con ibuciones pe sonales
Vicen iu Tibe ius Roman
Du an e el desa ollo del T abajo de Fin de G ado he ealizado las siguien es
apo aciones:
Ac ualizaciones: Me enca gué de ac ualiza Reac , Django y odas sus de-
pendencias a las úl imas e siones es ables. Además elimine múl iples depen-
dencias innecesa ias que no se usaban en el p oyec o.
P epa ación del en o no de desa ollo: Dado que íbamos a es a nume o-
sos meses desa ollando es e p oyec o, que íamos ene un en o no de desa ollo
p epa ado y cómodo pa a abaja . Po es a azón, p epa é nues o en o no y
edi o de abajo añadiendo lo siguien e:
•Lin e s pa a mejo a la calidad del código y man ene la consis encia del
es ilo en odo el p oyec o.
•Sc ip s pa a el inicia , de ene y depu a Reac y Django.
•Ex ensiones y con igu aciones pa a acili a el desa ollo.
Ges ión segu a de sec e os median e a chi os .en : Iden i iqué un im-
po an e p oblema en el p oyec o elacionado con la exposición de con aseñas
en el eposi o io de Gi Hub. Pa a abo da es a p eocupación, ealicé la sepa-
ación de odos los sec e os en a chi os indi iduales, los cuales se leen pos-
e io men e pa a ca ga su con enido. Además, p opo cioné una plan illa de
es os a chi os pa a que cada desa ollado conozca las a iables necesa ias, pe-
o sin la necesidad de subi las al eposi o io. Es o ga an iza una ges ión segu a
de los sec e os en el p oyec o además de pe mi i cambia con igu aciones del
p oyec o sin oca el código y únicamen e cambiando las a iables de en o no.
En la Figu a 3.7 podemos e un ejemplo de los iche os de con igu ación que
ges ioné.
Docke : Pa a acili a el despliegue, u ilicé Docke pa a el empaque ado y
la dis ibución de las aplicaciones Reac y Django jun o con el se ido web
Nginx. Realice los ajus es necesa ios pa a desplega Django co ec amen e, ya
que no es aba p epa ado pa a esa a ea y me enca gué de añadi ce i icados
SSL a la aplicación. Además de es e p oceso, ambién ayudé a José Luis a
con igu a odo pa a que pudie a u iliza lo co ec amen e, ya que él desa olla
en Windows y la con igu ación con Docke es di e en e que en Linux.
Vi e: Al e la g an can idad de ad e encias que salían al inicia la aplicación
de Reac , decidí p oba Vi e, una al e na i a que esul ó se mucho más ápida
y además acili ó el desa ollo al e esca las páginas sin elimina el es ado
an e io .
Re ac o ización de componen es: Den o de la e ac o ización de los com-
ponen es de Reac , además de aduci algunos componen es de clases a un-
ciones yo me enca gué de a egla y eesc ibi la lógica de los componen es
71
eliminando nume osos e o es en su lógica, adap ando las a iables al es án-
da más ac ual de Ja aSc ip , ajus ando los componen es a la sin axis más
ecien e de Reac y a eglando el manejo del es ado de los componen es que
se habían hecho isibles a causa del cambio de e sión de Reac , al no segui
las ecomendaciones sob e cómo a a el es ado en e siones an e io es.
Ru as en la aplicación: P e iamen e, el manejo de las u as e a e á ico. No
se u ilizaba Reac Rou e , una de las soluciones más popula es pa a in eg a
las u as en Reac y se ealizaba de o ma manual. Es o implicaba lo siguien e:
•No ene u as eales ya que la URL de la ba a de na egación no cam-
biaba en ningún momen o.
•El pun o de en ada a la aplicación (App.js) e a de una ex ensión inasu-
mible al usa condiciones anidadas pa a sabe en qué u a se encuen a
en cada momen o.
•Todo el es ado de la aplicación es aba concen ado en App.js, es de-
ci , los componen es no e an independien es y enían su es ado en sus
an eceso es.
Todo es o implicó un g an abajo pa a eesc ibi casi odos los componen-
es, sepa ando su lógica y haciéndolos más legibles y escalables, además de
implemen a de ce o la ges ión de los pe misos pa a cada u a.
Abs acción de API: Realicé una comple a abs acción de la API en el
on -end de la aplicación. En luga de ene las llamadas dispe sas po a ios
componen es, cen alicé la comunicación en e el back-end y el on -end en
un solo a chi o. Pa a log a es o, p ime o con igu é nues o clien e axios pa a
inclui el oken de usua io en cada llamada, en el a chi o clien .js. Luego,
es uc u é odas las llamadas a la API en el a chi o API.js. Es a implemen-
ación simpli icó eno memen e el desa ollo u u o, ya que cualquie cambio
en la API solo eque ía modi ica un único a chi o.
C eación de hooks pe sonalizados: He c eado ambién los hooks pe sonali-
zados que explicamos en la sección de 3.5.1. De es a mane a e i é la epe ición
del código y una mejo ges ión de las llamadas a la API.
Cues iona ios: Me enca gué de co egi odos los e o es elacionados con la
ealización y e isión de cues iona ios, además de implemen a las siguien es
mejo as:
•Pe mi i la ealización y desca ga de múl iples cues iona ios de mane a
simul ánea.
•Ag ega la posibilidad de elimina cues iona ios desca gados.
•Paso a IndexedDB pa a e i a la ans o mación de los cues iona ios a
cadenas de ex o, además de e i a los p oblemas con el lími e de alma-
cenamien o del localS o age.
72 Capí ulo 9. Con ibuciones pe sonales
In e az de la aplicación: A lo la go del p oyec o, me he enca gado de
ealiza múl iples cambios pa a adap a la aplicación a disposi i os mó iles,
además de c ea los modales pa a la ges ión de los e o es en oda la aplicación.
Ma kdown: Con espec o al Ma kdown, yo me enca gué de la in es igación de
las lib e ías que nos podían ayuda a la implemen ación de es a uncionalidad
e hice un ejemplo de como se usa ían y después ue José Luis el que se enca gó
de implemen a lo den o de la aplicación.
Ges ión de dependencias en Django: También me enca gué de mejo a
la ges ión de dependencias en Django, ya que an e io men e la única mane a
de sabe qué dependencias enía el p oyec o e a i añadiendo dependencias
según salían e o es has a que no al a a ninguna. Po es e mo i o me de-
cidí inalmen e po usa Poe y lo que me pe mi ió c ea un único iche o
pyp ojec . oml donde es án de inidas odas las dependencias del p oyec o y
sus con igu aciones, pe mi iendo así ins ala las mismas en un en o no aislado
pa a e i a con lic os con o as dependencias del equipo.
Viewse s, Manage s y Se ializado es: Al i ap endiendo Django, me di
cuen a de que no se es aban usando odas sus capacidades, así que decidí e-
esc ibi las is as a iewse s y c ea a ios se ializado es pa a la aplicación,
además de c ea manage s pa a odos los modelos, pe mi iendo una e ac o i-
zación más sencilla en el u u o.
Documen ación de la API: Una de las cosas de la que me enca gué pe -
sonalmen e ue de cómo documen a la API. Desde el p incipio del p oyec o,
es u e in es igando cómo podía documen a la aplicación pa a acili a nos el
en endimien o de la misma an o a mí como a mi compañe o. Pa a es a a ea,
encon é una lib e ía denominada d -spec acula , que po de ás u ilizaba
Swagge pa a gene a la documen ación de la API. Me enca gué de documen a
llamada a llamada, explicando an o las en adas, salidas y ope aciones espe a-
das. Finalmen e el esul ado ue una documen ación muy ex ensa y elabo ada
que cualquie desa ollado que p osiga con el p oyec o puede dis u a .
Tes ing de API: En elación al es ing de la API, asumí la esponsabilidad
de in es iga las mejo es p ác icas pa a ealiza p uebas en nues a aplicación,
añadiendo una opción pa a e la cobe u a del es ing, pa a pode obse a
qué po cen aje del código se había es ado.
Alea o ización, back-end: En el ema de la alea o ización, mi ol ue so-
b e odo la p epa ación del back-end pa a la alea o ización de cues iona ios
y las opciones de las p egun as ipo es . Me cen é en añadi a los modelos
los a ibu os necesa ios pa a la alea o ización, p epa a la lógica pa a de ol-
e y almacena cues iona ios alea o ios y modi ica la lógica de subida de
cues iona ios pa a almacena los nue os da os de los cues iona ios.
P egun as de selección alea o ia: Respec o al nue o ipo de p egun as, me
enca gué sob e odo de ayuda a José Luis a en ende oda la nue a lógica que
había ealizado pa a la alea o ización de los cues iona ios y las opciones de las
73
p egun as ipo es que he explicado an e io men e. Una ez que e minó de
implemen a las le ayudé con algunos e o es que habían quedado pendien es
y e minamos en e los dos esa uncionalidad.
In eg ación con Moodle: Mien as mi compañe o abajaba en el nue o
ipo de p egun as, me dediqué a a anza en nues o siguien e obje i o, la in-
eg ación con Moodle. In es igué sob e el o ma o XML-Moodle y sob e qué
lib e ías nos pod ían ayuda pa a implemen a es as uncionalidades. Du an e
la in es igación empecé a ealiza una se ie de p uebas con la lib e ía Elemen -
T ee y conseguí el obje i o de impo a p egun as de Moodle. Más adelan e,
as una eunión con nues o u o , nos explicó más en de alle que debíamos
pe mi i expo a cali icaciones desde Qwize a Moodle y decidí ambién im-
plemen a lo, ya que había es ado in es igando en ese ema.
80 Capí ulo 9. Con ibuciones pe sonales
discussed in chap e 3.5.2. We also upda ed all lib a ies o he la es e sion
ying o a oid con lic s due o e sion con ol. Finally, we p epa ed he de-
elopmen en i onmen by adding lin e s, en i onmen a iables o sec e s,
designing some es s o he back-end, using a package managemen ool and
using Docke o deploy he p ojec co ec ly.
Ques ionnai e Randomiza ion (Ma ch 2023): Du ing his s age, he ques-
ionnai e andomiza ion unc ionali y was implemen ed. This p ocess in ol ed
making se e al changes o he applica ion’s ela ional model and applica ion
logic as de ailed in dep h in Chap e 4, which equi ed signi ican ime o
upda e he co esponding code.
Ma kdown, Random Ques ions and Moodle In eg a ion (Ap il 2023):
Du ing his phase, se e al key aspec s we e add essed. The implemen a ion o
he Ma kdown o ma o ques ions and he in eg a ion wi h Moodle we e ela-
i ely easy, wi h he excep ion o image managemen in he case o Ma kdown.
Howe e , inco po a ing andom ques ions p o ed o be a signi ican challenge,
as i impac ed much o he applica ion’s back-end code. These inco po a ions
a e desc ibed in chap e s 4,5y6.
Final checks and memo y (May 2023): Du ing he las mon h o de elop-
men , we ocused on making inal adjus emen s o he app’s in e ace, polishing
he de ails o an imp o ed use expe ience. We also dedica e ime o w i -
ing he Final Deg ee P ojec documen , documen ing he en i e de elopmen
p ocess, he decisions made and he esul s ob ained.

Conclusions and u u e wo k
In his sec ion, we will p esen ou conclusions once he de elopmen o he
p ojec has inished. We will add ess issues such as: he le el o compliance wi h he
main objec i es, he di icul ies encoun e ed du ing he de elopmen o he p ojec
and he possible imp o emen s ha could be implemen ed in he u u e.
Achie ed goals
Du ing he cou se o he p ojec , all he objec i es ini ially se (in sec ion 1.2)
we e achie ed:
Ques ionnai e andomiza ion: The andomiza ion unc ionali y was suc-
cess ully implemen ed bo h a he ques ion and op ion le el wi hin he ques-
ionnai es. In addi ion, he a ie y o ques ions was expanded wi h he addi-
ion o andom selec ion ques ions. Now, eache s can o e unique quizzes o
hei s uden s which p e en s hem om chea ing.
Adap a ion o he applica ion o mobile de ices: We managed o o e
an adap able design o ou applica ion, in which we wo ked ha d o be able
o adap i s in e ace o all sc eens and imp o e he use expe ience so ha i
was com o able and in ui i e.
Inclusion o Ma kdown and ma hema ical o mulas: The success ul
implemen a ion o Ma kdown was achie ed, which allows use s o en ich he
con en wi h o ma s such as bold, i alics, images, among o he s. In addi ion,
he abili y o w i e s a emen s and solu ions wi h ma hema ical o mulas was
added, which expands he possibili ies o he c ea ion o mo e complex and
de ailed ques ions.
In eg a ion wi h Moodle: A success ul in eg a ion o Qwize wi h he o -
ma s used in he Moodle pla o m was achie ed. Now use s can impo ques-
ions om he Moodle ques ion bank, making i easy o euse and mig a e
exis ing con en . Likewise, he unc ionali y o expo he no es o he ques-
ionnai es ca ied ou in Qwize o Moodle was implemen ed, p o iding a
simple and mo e cen alized managemen o quali ica ions.
On he o he hand, we managed o comple e o he objec i es, which appea ed
as he p ojec p og essed. Among hem we can ind he ollowing:
81
82 Capí ulo 9. Con ibuciones pe sonales
Co e design changes: Ini ially we did no plan o change he design o ou
ellow colleagues iews, bu ied o he goal o esponsi e design, we we e
o ced o make some changes o almos all o he ini ial iews o imp o e he
o e all expe ience o ou use s. We e en in oduce new ea u es ha Qwize
did no p e iously ha e (sec ion 3.5.3).
API documen a ion: As we al eady explained in he imp o emen s pa
(see sec ion 3.5.2), a good documen a ion o an API seems essen ial o us
since wi hou i i is ex emely di icul o unde s and each call and he eason
o i . A he beginning, we ound ou sel es in his si ua ion and o he sake
o possible u u e colleagues o jus someone who wan s o unde s and ou
wo k, we ha e de eloped an ex ensi e and in e ac i e documen a ion on each
API call, making i easy o anyone o unde s and.
Tes ing: Jus like a good documen a ion, any so wa e de elopmen in ol es
a es ing phase, whe e nume ous es s a e ca ied ou o check i he de eloped
code wo ks as expec ed. Fo his eason, we de eloped a es ing sec ion o
he back-end pa o he applica ion, in which he logic o he API calls was
es ed.
Applica ion deploymen : Finally, i we wan ed o es ou applica ion in a
p oduc ion en i onmen , we had o explo e he possibili y o p epa ing i o
deploymen , so we con igu ed and adap ed ou de elopmen en i onmen o
deploy he applica ion a any ime. In ac , in chap e 7we ha e explained
he solu ion o his objec i e in mo e de ail.
In addi ion, we also managed o comple e pa o he objec i es ha ou col-
leagues had planned o u u e wo k. Among hem we managed o implemen :
1. The comple ion o ques ionnai es sequen ially, whe e eache s can now choose
whe he a ques ionnai e should be done immedia ely, ha is, wi hou being
able o e u n o he p e ious ques ion once hey mo e on o he nex one.
2. Resolu ion o mo e han one ques ionnai e a he same ime o line. P e iously,
a quiz could only be sol ed i he s uden los connec ion. Ins ead, now hanks
o he new ques ionnai e s o age managemen , mo e han one ques ionnai e
can be aken o line.
3. Imp o emen o he in e ace o he c ea ion o ques ionnai es and, as we
ha e al eady commen ed in he main objec i es, adap a ion o he in e ace o
mobile de ices.
Di icul ies encoun e ed
Th oughou he de elopmen o he p ojec , some di icul ies we e encoun e ed
ha a ec ed he p ocess o implemen ing he objec i es:
83
Legacy code: One o he bigges challenges was dealing wi h legacy code
om he p e ious p ojec . The use o p e-exis ing code p esen ed di icul ies
o unde s and i s ope a ion and adap i o he new equi emen s, leading
o many weeks o e ac o ing and imp o emen s o he ini ial code. Fo his
eason, he pe iod o adap a ion and amilia iza ion wi h he p ojec las ed
longe han no mal, p e en ing some seconda y objec i es om being me .
Lack o knowledge: I should be no ed ha bo h membe s o he eam
s a ed ou wi hou a base o he echnologies used wi hin he p ojec , so
he use o hese new echnologies and ools du ing he de elopmen o he
p ojec implied a pe iod o lea ning and amilia iza ion. Bo h Django and
Reac we e amewo ks ha had complica ed mechanisms o unde s and and
assimila e a i s . The e o e we can add he main p oblems encoun e ed
du ing de elopmen wi h bo h amewo ks:
•Django: One o he lib a ies ha has been used mos ex ensi ely his
yea is called django es amewo k. I s use is explained in sec ion 3.5.
The ex ension in he use o his lib a y caused nume ous p oblems since
he use o se ialize s, iewse s and o he mechanisms o he same we e
somewha complica ed o implemen in he ecei ed inhe i ed code. This,
added o he li le unde s anding ha we had o Django in he ea ly
s ages o de elopmen , caused us g ea complica ions a he beginning
o he p ojec , which we esol ed hanks o he o icial documen a ion o
bo h Django and he lib a y.
•Reac : Aside om he gene al un amilia i y o Reac , dealing wi h com-
ponen s so logically hea y was ini ially o e whelming. A e se e al weeks
o de elopmen , his eeling o p essu e lessened and e en led o nume ous
imp o emen s in each o he componen s.
Time: The ime ac o was ano he signi ican challenge. Much o he de-
elopmen was o adap and imp o e he p e ious code, and ha esul ed in
less ime o de elop new ea u es. E en i he ini ial objec i es se o he
wo k we e me , a e i ica ion and es ing s age in a eal en i onmen would
ha e helped he p ojec o each a highe le el o e inemen . All his wi hou
ega ding he li le a ailabili y a some momen s o he p ojec due o he
p essu e o he cou se and a speci ic momen s, o inal exams.
Fu u e wo k
Al hough he p oposed objec i es ha e been success ully achie ed, we belie e
ha he p ojec s ill has oom o imp o emen . To his end, we p opose he ol-
lowing modi ica ions:
Accessibili y: Al hough we ha e adap ed mos o he applica ion o all de-
ices, we belie e ha he accessibili y o ou applica ion could s ill be ex ended
84 Capí ulo 9. Con ibuciones pe sonales
allowing all ypes o use s, ega dless o hei physical o cogni i e abili ies,
o use Qwize . The use o accessibili y echniques such as changing colo s,
changing hemes, desc ip ions wi h help ex s, use o simple ypog aphy, and
la ge, easy- o-loca e bu ons and panels would help adjus Qwize o a mo e
inclusi e en i onmen .
Tes ing in he on -end: As we explained be o e, one o he seconda y
objec i es accomplished was he ac o documen ing and es ing he back end
o ou applica ion. This has esul ed in nume ous bene i s h oughou he
de elopmen o he applica ion. On he o he hand, one o he asks ha we
would ha e liked o ca y ou and due o lack o ime has no been able o
comple e is he ac o es ing he in e ace and he main componen s o he
on -end o ou applica ion. On nume ous occasions, we ha e had o check he
co ec unc ioning o he componen logic, which some imes caused API calls
and consequen ly, changes in he s a e o he da abase. This edious p ocess
made us conside ca ying ou a se ies o es s on he mos essen ial iews o
he in e ace, allowing us o es his logic and ca y ou he es s agains a
da abase p epa ed o he es s. In addi ion, his ype o es ing di ec s he
code on a mo e sus ainable and s able pa h, o which u u e de elopmen s
would be g a e ul o hem.
Own in e ace o mobiles: Th oughou he de elopmen o he p ojec ,
he e ha e been nume ous occasions in which we ha e econside ed making ou
own in e ace o mobile de ices, because e en i we ha e spen ime ge ing
an adap able design o ou applica ion, he e a e always some componen s
o some agmen s o he iews ha a e sligh ly ou o he s yle o a mobile
applica ion. Fo his we s udy Ionic, a amewo k ocused on he de elopmen
o use in e aces on mobile de ices, which, since i s syn ax is e y simila
o ou main s yling amewo k, Boo s ap, would allow us o ha e designed a
unique and exclusi e in e ace o mobile de ices. In he end, we ended up
gi ing up he idea because i was a e y di icul goal o comple e in he sho
ime we had le , bu in he u u e, his idea could gi e Qwize a undamen al
alue o i s implemen a ion wi hin he subjec s o he acul y.
Mo e ypes o ques ions: Qwize is an applica ion based on comple ing
ques ionnai es and one o he sec ions in which i s ill leaks is i s small ca alog
o ques ions. Al hough his yea we ha e spen some ime c ea ing a new
ques ion ype ( andom selec ion ques ions) we hough ha mo e ques ion
ypes could be added, such as ma ching ques ions, ill-in- he-blank ques ions,
among o he s. Also, hanks o he new da abase s uc u e, adding hese new
ques ion ypes would be easy o do. Fo his eason, we hink ha his new
addi ion o ques ions could gi e Qwize ano he image and p opel i in o a
mo e a ac i e en i onmen .
Impo mo e ypes o ques ions: In ela ion o he impo o ques ions,
we also ha e nume ous open on s ha we could co e , such as he ac o
impo ing o he ypes o ques ions om Moodle, since igh now, only can
be impo ed sho answe and mul i-choice ques ions. A he same ime, we
85
ha e e hough he idea o impo ing ques ions wi h o he o ma s. Cu en ly,
Qwize only allows you o impo ques ions wi h XML-Moodle o ma , con-
cen a ing all his unc ionali y in a single o ma . The e o e, in summa y,
impo ing o he ypes o ques ions om Moodle and inc easing he numbe
o o ma s o impo ques ions, seems o us o be an objec i e ha could be
conside ed o he u u e.
Use moodle API. Imp o e connec i i y wi h Moodle: Linked o he
expo o Qwize g ades o Moodle, we belie e ha his objec i e can be
imp o ed by making in e ope abili y be ween Qwize and Moodle mo e com-
o able. Fo his, we hough ha i would be be e o use Moodle’s own
API o expand he possibili ies o in eg a ion wi h ou applica ion.

Bibliog a ía
[1] Benoi Chesneau. gunico n. h ps://gunico n.o g/, 2023.
[2] Django Impo Expo . django-impo -expo . h ps://
django-impo -expo . ead hedocs.io/, 2023.
[3] Django So wa e Founda ion. Django. h ps://docs.djangop ojec .
com/en/4.2/, 2023.
[4] El Fakh i Ouajih, Z. yMa ínez Game o, P. Aplicación web p og esi a
pa a la ealización de cues iona ios, 2022. T abajo de Fin de G ado en Inge-
nie ía In o má ica, Facul ad de In o má ica UCM, Depa amen o de Sis emas
In o má icos y Compu ación, Cu so 2021/2022.
[5] Hello Pangea. hello-pangea/dnd. h ps://gi hub.com/hello-pangea/
dnd, 2023.
[6] Jens Neuhal en. d -spec acula . h ps://d -spec acula .
ead hedocs.io/, 2023.
[7] John Resig. jQue y. h ps://api.jque y.com/, 2023.
[8] Ma k O o and Jacob Tho n on. Boo s ap. h ps://ge boo s ap.
com/docs/5.3/ge ing-s a ed/in oduc ion/, 2023.
[9] Ma in Dougiamas. Moodle XML. h ps://docs.moodle.o g/all/es/
Fo ma o_Moodle_XML, 2023.
[10] Ma Zab iskie. axios. h ps://gi hub.com/axios/axios, 2023.
[11] Max Lynch, Ben Spe y, and Adam B adley. Ionic. h ps://
ionic amewo k.com/docs, 2023.
[12] Mozilla Con ibu o s. local o age. h ps://local o age.gi hub.io/
localFo age/, 2023.
[13] Reac Con ibu o s. Reac . h ps:// eac js.o g/, 2023.
[14] Reac T aining. eac - ou e -dom. h ps:// eac ou e .com/web/
guides/quick-s a , 2023.
[15] Rol Hå a d Blindheim. django-en i on. h ps://gi hub.com/joke2k/
django-en i on, 2023.
[16] Sma Bea So wa e. Swagge . h ps://swagge .io/, 2023.
87
88 BIBLIOGRAFÍA
[17] Solomon Hykes. Docke . h ps://docs.docke .com/, 2023.
[18] Sunsc ape s. djose . h ps://djose . ead hedocs.io/, 2023.
[19] Tom Ch is ie. django es amewo k. h ps://www.
django- es - amewo k.o g/, 2023.
Ap´
endice A
Documen ación de la API
En es e apéndice se encuen a la documen ación de la API gene ada a pa i del
a chi o JSON de Swagge y con e ida en o ma o PDF. Sin emba go, es impo an e
ene en cuen a que la in e az de Swagge es conside ablemen e supe io a es e
documen o en PDF.
89
2.3 GET /api/es udian es/{id}/disponibles
Lis a de los usua ios que ienen ol de es udian e que no es an cu sando una asigna u a
GET /es udian es/{id_asigna u a}/disponibles
REQUEST
PATH PARAMETERS
NAME TYPE DESCRIPTION
*id in ege
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
alumnos* [{
A ay o objec :
id* s ing
nomb e* s ing
apellidos* s ing
}]
}
7 o 21

3. QR
Q
3.1 POST /api/q
Inse a hash pa a un in en o
REQUEST
REQUEST BODY - applica ion/json
{
idUsua io* in ege
idCues iona io* in ege
hash* s ing
}
FORM DATA PARAMETERS
NAME TYPE DESCRIPTION
idUsua io in ege
idCues iona io in ege
hash s ing
FORM DATA PARAMETERS
NAME TYPE DESCRIPTION
idUsua io in ege
idCues iona io in ege
hash s ing
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
inse ed* s ing
message* s ing
}
STATUS CODE - 400: E o : Bad Reques
STATUS CODE - 403:
RESPONSE MODEL - applica ion/json
{
inse ed* s ing
message* s ing
}
3.2 GET /api/q /{id_usua io}/{id_cues iona io}
8 o 21
Comp obación hash q
GET /{idUsua io}/{idCues iona io}
REQUEST
PATH PARAMETERS
NAME TYPE DESCRIPTION
*id_usua io in ege
*id_cues iona io in ege
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
alumnos* [{
A ay o objec :
id* s ing
nomb e* s ing
apellidos* s ing
}]
}
9 o 21
4. QUESTION
P egun as
4.1 POST /api/ques ion
C ea p egun as a pa i de un iche o cs o xml
REQUEST
FORM DATA PARAMETERS
NAME TYPE DESCRIPTION
ile s ing(bina y)
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
inse ed s ing
message s ing
}
4.2 PUT /api/ques ion/{id}
Ac ualiza una p egun a
REQUEST
PATH PARAMETERS
NAME TYPE DESCRIPTION
*id in ege Id de la p egun a
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
message s ing
}
4.3 DELETE /api/ques ion/{id}
Bo a una p egun a
REQUEST
PATH PARAMETERS
10 o 21
NAME TYPE DESCRIPTION
*id in ege Id de la p egun a
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
message s ing
}
4.4 POST /api/ques ion/imagen
REQUEST
No eques pa ame e s
RESPONSE
STATUS CODE - 200: No esponse body
11 o 21
5. SUBJECT
Asigna u as
5.1 GET /api/subjec
Lis a de asigna u as
REQUEST
No eques pa ame e s
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
[{
A ay o objec :
asigna u as [{
A ay o objec :
id s ing
asigna u a s ing
}]
}]
5.2 GET /api/subjec /{id}/cues iona ios
Lis a de cues iona ios de una asigna u a
REQUEST
PATH PARAMETERS
NAME TYPE DESCRIPTION
*id in ege Id de la asigna u a
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
cues iona ios [{
A ay o objec :
id s ing
i ulo s ing
}]
nomb e s ing
}
5.3 POST /api/subjec /{id}/dele e_en oll
Desma icula una lis a de es udian es
12 o 21

DELETE /asigna u a/{pk}/en oll
REQUEST
PATH PARAMETERS
NAME TYPE DESCRIPTION
*id in ege Id de la asigna u a
REQUEST BODY - applica ion/json
{
alumnos [{
A ay o objec :
id in ege
nomb e s ing
apellidos s ing
}]
}
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
bo ados in ege
e o s [unde ined]
}
5.4 POST /api/subjec /{id}/en oll
Ma icula una lis a de es udian es
POST /asigna u a/{pk}/en oll
REQUEST
PATH PARAMETERS
NAME TYPE DESCRIPTION
*id in ege Id de la asigna u a
REQUEST BODY - applica ion/json
{
alumnos [{
A ay o objec :
id in ege
nomb e s ing
apellidos s ing
}]
}
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
13 o 21
{
inse ados in ege
e o s [unde ined]
}
5.5 GET /api/subjec /{id}/p egun as
Lis a de p egun as de una asigna u a
De uel e odas las p egun as de una asigna u a pa a el banco de p egun as
REQUEST
PATH PARAMETERS
NAME TYPE DESCRIPTION
*id in ege Id de la asigna u a
RESPONSE
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
p egun as
ONE OF
OPTION 1{
id in ege
ques ion s ing
i le s ing
ype enum ALLOWED: ex
co ec _op s ing
}
OPTION 2{
id in ege
ques ion s ing
i le s ing
ype enum ALLOWED: es
op ions [{
A ay o objec :
id s ing
op in ege
}]
co ec _op in ege
}
}
5.6 GET /api/subjec /me
Es ado de los cues iona ios de un usua io
REQUEST
No eques pa ame e s
RESPONSE
14 o 21
STATUS CODE - 200:
RESPONSE MODEL - applica ion/json
{
asigna u as [{
A ay o objec :
id in ege
nomb e s ing
cues iona ios {
nCues iona ios in ege
nCo egidos in ege
nPendien es in ege
}
}]
}
15 o 21
6. TEST
Cues iona ios
6.1 POST /api/ es
C ea cues iona io
REQUEST
REQUEST BODY - applica ion/json
{
cues iona io {
es Name s ing
es Pass s ing
es Subjec s ing
secuencial s ing
es Du a ion s ing
echaApe u a in ege
echaCie e in ege
echaVisible in ege
ques ionLis
ONE OF
OPTION 1{
id in ege
ques ion s ing
i le s ing
ipo s ing
co ec _op s ing
pun _posi i a in ege
pun _nega i a in ege
ija boolean
alea o iza boolean
}
OPTION 2{
id in ege
ques ion s ing
i le s ing
ipo s ing
op ions [{
A ay o objec :
id in ege
op s ing
}]
co ec _op in ege
pun _posi i a in ege
pun _nega i a in ege
ija boolean
alea o iza boolean
}
alea o iza s ing
}
}
RESPONSE
16 o 21