Está en la página 1de 77

Universidad Central “Marta Abreu” de las Villas.

Facultad Matemática Física y Computación

Ingeniería Informática.

Sistema informático para el entrenamiento en línea sobre


programación competitiva para los concursos del

ACM-ICPC

Autor: Jorge Vidal Barreto Carrazana.

Tutores: Lic. Reinier Millo Sánchez.


Lic. Dennis Denis González.

Lic. Jorge Enrique Moreira.

“Año 55 de la Revolución.”

Santa Clara

2013
“Nunca consideres el estudio un deber sino una oportunidad de penetrar en el bello y
maravilloso mundo del saber”

Albert Einstein

“La verdad es como la luz: una y varia;


y como la naturaleza: una y fecunda;
y como Dios: una e inmensa.”

Niccolò Tommaseo
Dedicatoria
Dedico esta tesis especialmente a mi mama, mis abuelas, mi hermano Ramón y mi tía
Odalys y demás familiares que nunca dejaron de confiar en mí en los momentos más
difíciles de toda mi carrera estudiantil.
A mi novia y a mis grandes amigos que es lo más grandioso que las personas ganan en la
vida.
Agradecimientos generales
A mi tutor Reinier Millo por su apoyo y paciencia en los infinitos días de trabajo,
por su dedicación y por sobre todas las cosas por motivarme y exigirme la
realización de un trabajo de calidad.
A Fredy Mederos: por ser mi amigo y por su ayuda en los momentos que la
necesite, por enseñarme que todo profesional debe dejar un sello de calidad en
sus trabajos.
A Jorge Moreira por ser el autor intelectual de este tema y por confiar en mi para
su realización.
Al claustro de profesores de la Facultad de Matemática-Física y Computación
quienes contribuyeron a que hoy nos encontremos aquí.
A todas aquellas personas que de una manera u otra contribuyeron en la
realización de esta investigación.
Agradecimientos específicos
A Dios… por dibujar en mi corazón el amor hacia los demás.
A mi mamá… por ser una de las personas que ha estado en los momentos
cruciales de mi vida, por hacer posible todos mis sueños. Por ser capaz de cumplir
la meta más difícil de las madres; hacer creer a sus hijos que es la mejor madre
del mundo.
A mi abuela Magnolia….por criarme como un hijo mas. Por ser dueña de todos
mis logros.
A mi tía Odalys por demostrarme que la familia es única en la vida, por confiar en
mí, por hacerme saber cuál importante soy, por enseñarme a estar preparado en
la vida antes de dar cualquier paso decisivo, por ser como una madre para mí.
A mi abuela Migdalia por preocuparse siempre por mí y hacerme sentir parte de la
familia en los momentos que dude.
A mi novia por el apoyo, paciencia y amor que depositó en mí en los momentos
más difíciles, por comprender todo el sacrificio que me llevo este trabajo y por
todos sus consejos. A su familia que me apoyo en los momentos que los necesite.
A mi tío Javier….por cuidarme y quererme como a un hijo, por ser el mejor padre
que he tenido.
A mi tío Morfi: por ser el mejor padrino y sobre todo el mejor esposo que he visto
en mi vida, por ser como un padre para mí.
A mi prima Lisi: por ser la hermana que me falto, por quererme
incondicionalmente.
A mis hermanos Ramoncito y Erick.
A mi papa: por todo el cariño dado en mis primeros años de vida, por saber
ganarse mi cariño, por ser sobre todas las cosas mi padre.
A mis amigos en la vida… por ser una de las cosas más preciadas en mi vida
Osmany: por estar siempre, por ser intachable, por haber sido mí primer amigo.
Por ser un amigo en el sentido amplio, por ser incondicional.
Gendry: por ser el risueño de siempre y por oír mis problemas. Por todos los
momentos juntos, por insertarme en el grupo de tu familia, por estar presente
cuando te necesito.
Humberto: por enseñarme cosas básicas para la vida, por abrirme las puertas de
tu casa y por considerarme con derecho a opinar en tu vida. Por estar en los
momentos más duros que he tenido en estos últimos cinco años, por siempre
estar ahí cuando necesite de un amigo, por crecerte en algunos momentos de la vida
donde has parecido ser mi padre.
Emilito: por ser tan pasivo y comprensivo, por estar siempre en mi vida desde que
éramos unos críos, gracias por considerarme un amigo.
Ainara: por ser como meñique, pequeña pero grande de corazón. Por ser mi mejor
amiga, por tus consejos que son muy sabios para mí, por tener tanta confianza en
mí, gracias chiquita.
A Roxanna Rodríguez Saborit: por ser una de las mujeres más especiales que he
conocido en mi vida, por enseñarme a valorar lo positivo antes de emitir cualquier
criterio, por estar pendiente de mi y acordarte hasta en lugares más lejanos de
nuestro continente.
Gretter Fernández: por ser tan dulce y especial en mi vida, por ser mi amiga en las
mayores dificultades, por tus consejos, sin ti la vida no sería igual.
Eniel Rodríguez: por dedicarme muchísimo tiempo a mis problemas en este
trabajo, por dejarme convertirme en tu amigo, si tuviera que compartir este trabajo
con alguien seguro que ese serías tu mi hermano, usted puede contar conmigo
para lo que necesite.
Enier: por ser sencillo, humilde y trabajador. Por ayudar a todos sin pedir nada a
cambio, por su lealtad, por todos los aprietos que me quitaste desde que te
conocí, por todo lo aportado en este tiempo.
Carlos García y Carlos Rodríguez (C++): por ser parte de mi equipo en todo
momento, por sacarme de aprietos y por todo lo vivido en la UCLV.
Aimara: por ser una amiga que está de regreso en mi vida, por ser quien fue y por
ser quien es hoy. Por ser una muchacha tan especial. ¿Espero que lo sepas y no
se olvide?
Yaumara y Danay: por ser dos muchachas muy especiales, por ser las muchachas
más cariñosas que he conocido en la universidad, por ocuparse siempre de
nosotros y de nuestras comodidades, la verdad me considero dichoso por haber
conocido a dos grandes mujeres, no cambien nunca, tienen algo encantador que
ni en cien hojas blancas pudiera explicar.
Betsy por ser una pieza clave en mi vida universitaria y en el grupo, sin ti no
hubiera sido lo mismo
Leandro por mantener el grupo más animado, por estar en los momentos que te
necesite.
Iselys que no me puede faltar por ser una personita especial en mi vida, por
regalarme tu tiempo libre cuando yo lo necesitaba, por ser una mujer de gran
corazón, gracias por tus consejos.
Armando Campos e Ileana: por acogerme siempre en su casa y ayudarme en todo
lo posible.
A martica por ser tan amable en sus explicaciones, por estar pendiente a todas las
tareas y nunca decir no a una pregunta, por demostrar ser una persona muy tenaz
en los momentos en que la vida le ha puesto pruebas muy difíciles, gracias por
enseñarnos a todos con tu ejemplo.
Agustín: por toda la ayuda prestada en tiempos difíciles, gracias por inculcarme
valores imprescindibles en el hombre. Aunque no estés presente entre nosotros tú
nunca podrás ser olvidado.
A todos los jóvenes de la Iglesia “EL CARMEN” por estar siempre ahí en los
momentos más difíciles.
DICTAMEN
Hago constar que el presente trabajo fue realizado en la Universidad Central Marta Abreu
de Las Villas como parte de la culminación de los estudios de la especialidad de Ingeniería
Informática, autorizando a que el mismo sea utilizado por la institución, para los fines que
estime conveniente, tanto de forma parcial como total y que además no podrá ser
presentado en eventos ni publicado sin la autorización de la Universidad.

Firma del autor

Los abajo firmantes, certificamos que el presente trabajo ha sido realizado según acuerdos
de la dirección de nuestro centro y el mismo cumple con los requisitos que debe tener un
trabajo de esta envergadura referido a la temática señalada.

Firma del tutor Firma del jefe del laboratorio


Resumen
Actualmente existen diferentes jueces en línea y varios sitios de entrenamientos como
USACO que permiten realizar el entrenamiento para concursos de programación
competitiva, pero no permiten realizar un entrenamiento diferenciado teniendo en cuenta
las características individuales de cada competidor. Los requerimientos funcionales del
sistema se definieron con la dirección del movimiento del ACM-ICPC en la UCLV, los
cuales fueron implementados en el sistema. También se definió en que consiste un
entrenamiento, el cual está formado por tareas que pueden ser atendidas o desatendidas. Se
diseñó e implemento un sistema de entrenamiento en línea sobre programación competitiva
para los concursos del ACM-ICPC usando Symfony2 como framework de desarrollo.
Además se redactó un manual de usuario para facilitar el uso del sistema por los usuarios.
Abstract
Actually there are different online judges and several trainings sites as USACO, that allow
training for competitive programming contests, but don't allow a differentiated training
taking into account the individual characteristics of each competitor. The functional
requirements of the system were defined with the direction of the ACM-ICPC movement at
UCLV, which were implemented in the system. Also is defined what is a training, which
consists of several tasks that can be attended or unattended. An online training system for
competitive programming contests of ACM-ICPC was designed and implemented using
Symfony2 as development framework. It also drafted a manual to facilitate the use of the
system by users.
Tabla de contenido
INTRODUCCIÓN ........................................................................................................................................... 1

ANTECEDENTES .................................................................................................................................................. 2
PLANTEAMIENTO DEL PROBLEMA ........................................................................................................................... 3
OBJETIVO GENERAL ............................................................................................................................................. 3
OBJETIVOS ESPECÍFICOS ....................................................................................................................................... 3
PREGUNTAS DE INVESTIGACIÓN ............................................................................................................................. 4
VALOR PRÁCTICO DEL SISTEMA .............................................................................................................................. 4
ESTRUCTURA DEL TRABAJO ................................................................................................................................... 4

CAPÍTULO 1. FUNDAMENTACIÓN TEÓRICA .................................................................................................. 5

1.1. COMPETENCIAS DE PROGRAMACIÓN ................................................................................................................ 5


1.1.1. Copas de programación en Cuba .................................................................................................... 7
1.2. APLICACIONES PARA REALIZAR ENTRENAMIENTOS ONLINE .................................................................................... 7
1.2.1. TopCoder ......................................................................................................................................... 8
1.2.2. USA Computing Olympiad (USACO) ................................................................................................ 8
1.2.3. Jueces en línea ................................................................................................................................ 8
1.2.3.1. Juez en Línea de la Universidad de Valladolid (UVA) ................................................................................ 9
1.2.3.2. Juez en Línea de Pekín (POJ)..................................................................................................................... 9
1.2.3.3. Sphere Online Judge (SPOJ) ...................................................................................................................... 9
1.2.3.4. Codeforces ............................................................................................................................................. 10
1.2.3.5. Caribbean Online Judge (COJ) ................................................................................................................ 10
1.3. FRAMEWORKS DE DESARROLLO ..................................................................................................................... 10
1.3.1. Zend Framework ........................................................................................................................... 11
1.3.2. CodeIgniter .................................................................................................................................... 11
1.3.3. Symfony2....................................................................................................................................... 11
1.3.3.1. Propel ..................................................................................................................................................... 12
1.3.3.2. Doctrine .................................................................................................................................................. 13
1.4. LENGUAJES DE PROGRAMACIÓN PARA LA WEB ................................................................................................. 13
1.4.1. HTML ............................................................................................................................................. 14
1.4.2. CSS ................................................................................................................................................. 14
1.4.3. JavaScript ...................................................................................................................................... 15
1.4.4. PHP ................................................................................................................................................ 16
1.5. SERVIDORES DE APLICACIONES WEB............................................................................................................... 17
TABLA DE CONTENIDO

1.6. GESTORES DE BASE DE DATOS ...................................................................................................................... 17


1.6.1. PostgreSQL .................................................................................................................................... 18
1.6.2. MySQL ........................................................................................................................................... 18
1.7. HERRAMIENTAS DE DESARROLLO DE SOFTWARE................................................................................................ 19
1.7.1. Visual Paradigm para UML ........................................................................................................... 19
1.7.2. NetBeans IDE 7.2.1 ........................................................................................................................ 20
1.7.3. JetBrains PhpStorm ....................................................................................................................... 20
CONSIDERACIONES FINALES DEL CAPÍTULO ............................................................................................................. 21

CAPÍTULO 2. DISEÑO E IMPLEMENTACIÓN ................................................................................................ 22

2.1. REQUISITOS FUNCIONALES ........................................................................................................................... 22


2.2. MODELO DE CASOS DE USO .......................................................................................................................... 24
2.2.1. Diagrama de casos de uso ............................................................................................................ 24
2.3. MODELO DEL ANÁLISIS ................................................................................................................................ 26
2.3.1. Diagramas de actividades ............................................................................................................. 26
2.3.2. Diagramas de colaboración .......................................................................................................... 28
2.4. MODELO DE DISEÑO ................................................................................................................................... 31
2.4.1. Diagramas de navegación............................................................................................................. 31
2.5. MODELO DE DATOS .................................................................................................................................... 33
2.5.1. Diagrama entidad-relación ........................................................................................................... 34
2.6. MODELO DE IMPLEMENTACIÓN .................................................................................................................... 34
2.7. MODELO DE DESPLIEGUE ............................................................................................................................. 35
CONSIDERACIONES FINALES DEL CAPÍTULO ............................................................................................................. 36

CAPÍTULO 3. MANUAL DE USUARIO ........................................................................................................... 37

3.1. REQUERIMIENTOS NO FUNCIONALES DEL SISTEMA ............................................................................................ 37


3.1.1. Requerimientos de hardware ........................................................................................................ 37
3.1.2. Requerimientos de software ......................................................................................................... 37
3.2. GUÍA PARA EL USUARIO ............................................................................................................................... 37
3.2.1. Acceso al sistema .......................................................................................................................... 38
3.2.2. Composición del sitio..................................................................................................................... 40
3.2.3. Usuario competidor ...................................................................................................................... 41
3.2.3.1. Mis entrenamientos ............................................................................................................................... 41
3.2.3.2. Mis tareas enviadas ................................................................................................................................ 44
3.2.3.3. Mis tareas erróneas ................................................................................................................................ 44
3.2.3.4. Documentos ........................................................................................................................................... 45
3.2.3.5. Histórico ................................................................................................................................................. 46
TABLA DE CONTENIDO

3.2.4. Usuario entrenador ....................................................................................................................... 46


3.2.4.1. Entrenamiento ....................................................................................................................................... 46
3.2.4.2. Asignaciones ........................................................................................................................................... 48
3.2.4.3. Revisar .................................................................................................................................................... 49
3.2.5. Usuario administrador .................................................................................................................. 49
3.2.5.1. Instituciones ........................................................................................................................................... 49
3.2.5.2. Usuarios.................................................................................................................................................. 50
3.2.5.3. Solicitud entrenador ............................................................................................................................... 51
CONSIDERACIONES FINALES DEL CAPÍTULO ............................................................................................................. 51

CONCLUSIONES .......................................................................................................................................... 52

RECOMENDACIONES .................................................................................................................................. 53

REFERENCIAS BIBLIOGRÁFICAS .................................................................................................................. 54


TABLA DE FIGURAS

Tabla de figuras
FIGURA 2.1. DIAGRAMA DE CASOS DE USO ................................................................................................................. 25
FIGURA 2.2. DIAGRAMA DE ACTIVIDADES: INSERTAR ENTRENAMIENTO ............................................................................ 27
FIGURA 2.3. DIAGRAMA DE ACTIVIDADES: REALIZAR TAREA ATENDIDA ............................................................................. 28
FIGURA 2.4. DIAGRAMA DE COLABORACIÓN: INSERTAR ENTRENAMIENTO ........................................................................ 29
FIGURA 2.5. DIAGRAMA DE COLABORACIÓN: EDITAR ENTRENAMIENTO............................................................................ 30
FIGURA 2.6. DIAGRAMA DE COLABORACIÓN: ASIGNAR ENTRENAMIENTO ......................................................................... 30
FIGURA 2.7. DIAGRAMA DE NAVEGACIÓN: USUARIO ANÓNIMO...................................................................................... 31
FIGURA 2.8. DIAGRAMA DE NAVEGACIÓN: USUARIO COMPETIDOR ................................................................................. 32
FIGURA 2.9. DIAGRAMA DE NAVEGACIÓN: USUARIO ENTRENADOR ................................................................................. 33
FIGURA 2.10. DIAGRAMA DE NAVEGACIÓN: USUARIO ADMINISTRADOR ........................................................................... 33
FIGURA 2.11. DIAGRAMA DE LA BASE DE DATOS: MODELO ENTIDAD-RELACIÓN ................................................................. 34
FIGURA 2.12. DIAGRAMA DE COMPONENTES ............................................................................................................. 35
FIGURA 2.13. DIAGRAMA DE DESPLIEGUE .................................................................................................................. 36
FIGURA 3.1. PÁGINA INICIAL DEL SITIO ...................................................................................................................... 38
FIGURA 3.2. MENÚ DE NAVEGACIÓN DEL USUARIO COMPETIDOR.................................................................................... 40
FIGURA 3.3. MENÚ DE NAVEGACIÓN DEL USUARIO ENTRENADOR................................................................................... 40
FIGURA 3.4. MENÚ DE NAVEGACIÓN DE USUARIO ADMINISTRADOR ................................................................................ 40
FIGURA 3.5. PÁGINA INICIAL DE UN USUARIO AUTENTICADO .......................................................................................... 41
FIGURA 3.6. LISTADO DE ENTRENAMIENTOS ASIGNADOS AL USUARIO AUTENTICADO ........................................................... 41
FIGURA 3.7. LISTADO DE TAREAS QUE CONFORMAN UN ENTRENAMIENTO ........................................................................ 42
FIGURA 3.8. DETALLES DE UNA TAREA ATENDIDA ......................................................................................................... 43
FIGURA 3.9. DETALLES DE UNA TAREA DESATENDIDA .................................................................................................... 43
FIGURA 3.10. TAREAS ENVIADAS POR EL COMPETIDOR PARA SER REVISADAS POR EL ENTRENADOR ........................................ 44
FIGURA 3.11. TAREAS ERRÓNEAS DEL COMPETIDOR ..................................................................................................... 45
FIGURA 3.12. LISTADO DE LOS DOCUMENTOS ............................................................................................................. 45
FIGURA 3.13. HISTORIAL DE LAS TAREAS RESUELTAS POR EL COMPETIDOR ........................................................................ 46
FIGURA 3.14. GESTIÓN DE LOS ENTRENAMIENTOS ....................................................................................................... 47
FIGURA 3.15. AGREGAR TAREAS QUE COMPONEN UN ENTRENAMIENTO........................................................................... 48
FIGURA 3.16. GESTIÓN DE LAS ASIGNACIONES DE LOS ENTRENAMIENTOS ......................................................................... 48
FIGURA 3.17. LISTADO DE LAS TAREAS PENDIENTES POR REVISAR .................................................................................... 49
FIGURA 3.18. LISTADO DE LAS INSTITUCIONES............................................................................................................. 50
FIGURA 3.19. LISTADO DE LOS USUARIOS REGISTRADOS EN EL SISTEMA ............................................................................ 50
FIGURA 3.20. LISTADO DE LAS SOLICITUDES PARA ENTRENADOR ..................................................................................... 51
Introducción
Introducción

A lo largo de la historia de la humanidad el hombre ha utilizado las competencias como vía


para lograr algún tipo de reconocimiento, tanto material como moral. Este reconocimiento
es otorgado a los competidores de mejores resultados. A medida que las formas de competir
se han ido desarrollando han aparecido nuevas técnicas para la adquisición de
conocimientos y habilidades. Este proceso de adquisición de los conocimientos y las
habilidades previo a una competencia se conoce como entrenamiento.
Los entrenamientos se pueden clasificar en individuales o colectivos, teniendo en cuenta si
está dirigido a un solo individuo o un colectivo de individuos que conforman un equipo de
competencia. En la actualidad los entrenamientos son desarrollados por un especialista que
es el encargado de dirigir el entrenamiento y brindar los conocimientos y habilidades que
deben dominar los competidores. Este especialista es conocido como entrenador. A nivel de
equipos, los entrenamientos son imprescindibles para lograr buenos resultados en la
competencia, pues es donde el entrenador debe seleccionar, según sus criterios, aquellos
competidores cuyos conocimientos y aptitudes puedan dar el mejor resultado para el
equipo. A esta elección deberá sumarse el estudio de la estrategia adecuada, punto casi
ineludible en cualquier entrenamiento.
La expansión acelerada de la computación ha traído consigo diferentes formas de competir
y esto a su vez distintos tipos de entrenamientos. El surgimiento de las redes de
computadoras y de la Internet tuvo un impacto profundo en la forma de elaborar una
competencia y de entrenar para la misma, surgiendo así las competencias y entrenamientos
de programación.
Los programación competitiva tiene sus orígenes en los años '70, en un concurso local
desarrollado en la Universidad A&M en Tejas, Estados Unidos. En el año 1977, por
primera vez se realizó una final mundial auspiciada por la "Association for Computing
Machinery" (ACM), luego de varias rondas clasificatorias (Pearson, 2006, Poucher, 2011).
Durante muchos años este era el único evento de su tipo y sólo equipos de las grandes
potencias como Estados Unidos y Canadá podían participar. En el año 1997 la
"International Business Machines" (IBM) comienza el patrocinio de este evento (2013c),

1
INTRODUCCIÓN

permitiendo el aumento considerable de la cantidad de equipos, instituciones y países


participantes. Actualmente el evento es conocido como "ACM International Collegiate
Programming Contest" (ACM-ICPC) (2013a).
Para la realización de estos concursos un conjunto de jueces proponen varios problemas a
resolver en un tiempo establecido, y para validar las soluciones se emplean casos de
pruebas propuestos por los propios jueces, teniendo en cuenta restricciones como: límite de
tiempo de ejecución, límite de memoria, tamaño de código fuente, restricciones de
seguridad, entre otras.
La calificación manual de las soluciones es una tarea casi imposible cuando el número de
participantes es considerable, por lo que en el año 1988 surge el proyecto PC^2 (Samir E.
Ashoo, 2011), uno de los primeros evaluadores automáticos empleado en los eventos de
programación competitiva. Con el aumento de la interconectividad de las redes de
computadoras los evaluadores automáticos han evolucionado hacia la web, y son conocidos
como jueces en línea (Revilla, 2002).

Antecedentes
Cuba tuvo su primera participación en concursos del ACM-ICPC en el año 1999, en el
Concurso Regional de Suramérica con sede en Venezuela. En esta ocasión participaron dos
equipos cubanos, un equipo del Instituto Superior Politécnico José Antonio Echeverría
(CUJAE) y un equipo de la Universidad Central "Marta Abreu" de Las Villas (UCLV). En
el año 2000, dos equipos vuelven a participar en el concurso regional, pero en esta ocasión
un equipo de la CUJAE y un equipo de la Universidad de la Habana (UH). En el año 2001,
un equipo de la UH y un equipo de la UCLV, participan nuevamente en el concurso
regional, logrando ubicarse el equipo de la UCLV en el escaño 15 de la región.
Hasta el año 2007 Cuba no volvió a participar en concursos regionales. En este año y en el
2008, participó un equipo de la Universidad de las Ciencias Informáticas (UCI) en el
Concurso Regional de Suramérica, logrando ubicarse en el escaño 11 y 9 respectivamente.
En el año 2009 se realiza por primera vez en Cuba un Concurso Regional Caribeño del
ACM-ICPC como parte de la sede de México. En este año Cuba clasifica un equipo de la
UCLV a la gran final mundial. A partir del año 2010 se conforma el Concurso Regional

2
INTRODUCCIÓN

Caribeño de Programación de la ACM (The ACM Caribbean Programming Contest)


(2010a, Ponce, 2011), que se efectúa todos los años entre septiembre y noviembre; lo cual
garantiza que al menos un equipo caribeño participará en las finales mundiales.
Para el entrenamiento de los estudiantes de las universidades caribeñas se dispone del juez
en línea "Caribbean Online Judge" (COJ) (Alvarez, 2012a), orientado a la competición. El
juez en línea es empleado para el entrenamiento de aquello competidores que ya han
adquirido las habilidades de programación necesarias para estos eventos. Se hace necesario
un sistema que este orientado al entrenamiento, donde sea posible una interacción entre
competidores y entrenadores, lo cual permite aumentar la calidad de la preparación y
preparar nuevos concursantes. Es necesario que el sistema permita desarrollar un
entrenamiento online donde el entrenador pueda guiar a cada uno de los integrantes del
equipo en su entrenamiento y a su vez este pueda discernir las tareas de cada cual dentro
del equipo. De todo lo planteado anteriormente surge la necesidad de realizar este trabajo
de diploma.

Planteamiento del problema


Es necesario mejorar el entrenamiento de los estudiantes para lograr mejores resultados en
el concurso del ACM-ICPC.

Objetivo general

Diseñar e implementar una aplicación Web para dar seguimiento al entrenamiento de los
estudiantes que participan en la competencia anual del ACM-ICPC.

Objetivos específicos
1. Realizar un estudio crítico de las aplicaciones Web existentes para el entrenamiento
de competencias de programación, así como las herramientas de desarrollo.
2. Determinar los requisitos funcionales de una aplicación Web que permita un
entrenamiento diferenciado para cada competidor.
3. Diseñar una aplicación Web que permita dar seguimiento diferenciado al
entrenamiento de los estudiantes.
4. Implementar una aplicación Web que permita dar seguimiento diferenciado al
entrenamiento de los estudiantes.

3
INTRODUCCIÓN

5. Brindar soporte y documentación para que los usuarios puedan interactuar mejor
con el sistema.

Preguntas de investigación
¿Los sistemas informáticos existentes satisfacen las necesidades actuales del entrenamiento
para los concursos del ACM-ICPC?
¿Qué características debe tener un sistema para cumplir con los requisitos mínimos de un
entrenamiento?

Valor práctico del sistema


La obtención de un sistema que permita el control y seguimiento del entrenamiento de los
estudiantes, permite ayudar a la selección de las funciones que debe cumplir cada
estudiante dentro del equipo, y así poder realizar una preparación específica mediante
tareas asignadas por el entrenador de acuerdo a la función que desempeñe el competidor
dentro del equipo. El sistema puede ser empleado como una herramienta para el apoyo al
proceso de enseñanza-aprendizaje, pues fortalecería la práctica de los estudiantes tanto de
estudios de pregrado como postgrado en diferentes materias como pueden ser:
programación, estructuras de datos, teoría numérica, diseño y análisis de algoritmos, entre
otras.

Estructura del trabajo


El documento está compuesto por tres capítulos. En el capítulo 1 “Fundamentación
teórica” se hace un estudio sobre las competencias de programación y las aplicaciones
disponibles para el entrenamiento online. También se hace un estudio de los lenguajes y
herramientas empleadas para el desarrollo de estas aplicaciones. El capítulo 2 “Diseño y
implementación” se centra en el proceso del diseño y la implementación del sistema
propuesto a través de algunos modelos y diagramas de la metodología de desarrollo RUP.
En el capítulo 3 “Manual de usuario” se abordan de manera general los requerimientos
para el funcionamiento del sistema y se explica la forma en que los usuarios pueden
interactuar con el sistema a través de capturas de pantalla del sistema y una amplia
explicación de las mismas.

4
Capítulo 1
Fundamentación teórica
Capítulo 1. Fundamentación teórica

En este capítulo se hace un estudio sobre las competencias de programación que se


desarrollan a nivel internacional y nacional. También se hace una revisión sobre las
aplicaciones Web disponibles para el entrenamiento online de los competidores y las
tecnologías en las que se apoya el desarrollo de estas tipos de sistemas en función de un
análisis de las tendencias actuales.

1.1. Competencias de programación


La mayoría de las competencias de programación son anuales, pero algunas son continuas y
permiten participar en cualquier momento de forma online. En muchas de estas
competencias, una vez finalizadas permiten acceder a las soluciones de otros
programadores, lo cual contribuye al proceso educativo y permite mejorar las habilidades
del programador. Hay diferentes concursos, entre los que se destacan:

• Concurso ACM-ICPC: Este es uno de los concursos de programación más


antiguos, iniciado en 1970 en Texas. Se desarrolla de forma anual con la
participación de miles de equipos procedentes de diferentes universidades y
colegios que compiten a nivel local, regional y mundial. El concurso estipula que
cada equipo estará integrado como máximo por 3 miembros y durante la
competición los equipos tienen 5 horas para resolver los problemas propuestos
(2013a).
• Concurso ICFP (International Conference on Functional Programming):
Concurso de programación funcional que se desarrolla anualmente en el mes de
junio o julio. Aunque el concurso se desarrolla en Alemania, se puede participar
desde cualquier región del orbe. La inscripción de los equipos es gratis y estos no
tienen una limitante en cuanto a la cantidad de integrantes (SwIG and He, 2013).
• Concurso IPSC (International Problem Solving Contest): Concurso de
programación desarrollado de forma anual, donde participan equipos integrados por
3 miembros. La competencia se desarrolla a través de la Web y se orientan 6
problemas que deben solucionarse en un período de 5 horas (Ltd., Mayo, 2013).

5
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

• Google Code Jam: Competencia auspiciada por Google, en funcionamiento desde


el año 2008 y “abierta a todos los participantes”. Los participantes no pueden tener
vínculos laborales con Google, ni ser residentes de Quebec, Cuba, Irán, Siria, Corea
del Norte, Sudán o Myanmar, y no ser una persona o entidad objeto de sanciones o
controles de exportación por parte de las autoridades de los Estados Unidos de
América (Park, 2013).
• Competición ORTS (Open Real Time Strategy game): ORTS es un entorno de
programación para el estudio de problemas de la Inteligencia Artificial (IA) en
tiempo real, tales como: la búsqueda de caminos, tratamiento de información,
programación y planificación en el ámbito de los juegos de estrategia en tiempo
real. Este es un concurso de estrategia de IA, que se desarrolla anualmente para ver
quién desarrolla la mejor estrategia de IA (Buro, 2010).
• Innovation Challenge: Conjunto de retos que permite crear aplicaciones
innovadoras en cualquier plataforma, por ejemplo: aplicación de cliente, aplicación
basada en Web, aplicaciones Java, Facebook App, iPhone App, Android, etc. Por
más de diez años, las personas más brillantes y más creativas de todo el mundo han
sido igualados con empresas líderes en una experiencia diseñada para hacer frente a
nuestros desafíos de innovación social más apremiante y de negocios (2013a).
• Concurso IOCCC (International Obfuscated C Contest Code): Es un concurso de
programación que tuvo sus inicios en 1984. Se desarrolla a través de Internet y
envíos de correos electrónicos. Las soluciones propuestas son evaluadas
anónimamente por un panel de jueces. El concurso se basa en escribir un programa
en ANSI C ofuscado en menos de 4096 caracteres(Misner, 2012).
• Premio Loebner: Es una competición de carácter anual que concede premios a un
programa de computación. El formato de la competición sigue el estándar
establecido en el test de Turing (2006). El objetivo es que el programa interactúen
con los jueces de forma tal que estos crean que están hablando con un ser humano.
El juez plantea preguntas a dos pantallas y recibe respuestas. En base a las
respuestas, el juez debe decidir qué pantalla es la controlada por el ser humano y
cuál es la controlada por el programa de ordenador (2012b).

6
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

1.1.1. Copas de programación en Cuba


Cuba no ha quedado exenta de los concursos de programación competitiva. Varias
universidades del territorio nacional han desarrollado sus movimientos de programación
competitiva a través de copas de programación de carácter anual. En la Universidad de
Matanzas "Camilo Cienfuegos" (UMCC) se lleva a cabo al Copa UMCC con dos ediciones,
en la Universidad de Oriente (UO) la Copa UO con cuatro ediciones y en la Universidad
Agraria de La Habana “Fructuoso Rodríguez Pérez” (UNAH) la Copa UNAH en su
primera edición.
La UCI es la universidad cubana de mayor tradición en copas de programación competitiva.
Dos de sus principales eventos son la Copa UCI de Programación que cuenta con ocho
ediciones y el Campamento Caribeño con vistas a la preparación para la final mundial del
ACM-ICPC, el cual se viene celebrando desde el año 2009. Internamente la UCI celebra
otro grupo de copas interfacultades, entre las que se encuentran: la Copa Pascal, la Copa
Euler de Programación, la Copa MAXCODER, la Copa Java y la Copa Gauss.

1.2. Aplicaciones para realizar entrenamientos online


En la actualidad las TIC (Tecnologías de la Información y las Comunicaciones) han hecho
impacto en todas las áreas del saber. Con el auge de las competencias de programación, se
ha hecho necesario aumentar la preparación de los competidores para obtener mejores
resultados. En este proceso de preparación han surgido los jueces en línea, que no son más
que una herramienta que permiten a los competidores probar sus habilidades e intercambiar
experiencias con otros competidores de cualquier región del orbe a través de la red de
redes.
Aunque los jueces en línea han sido muy empleados como medios de entrenamiento y
preparación, no cumplen todos los requisitos necesarios para esta función, pues de un
principio los competidores deben tener un conocimiento básico de programación
competitiva para poder practicar. Además los jueces en línea no permiten que un entrenador
asista a un estudiante de forma virtual, y pueda darle un seguimiento a la evolución de su
entrenamiento. También hay que destacar que no todos los competidores deben tener el
mismo entrenamiento pues las características y niveles cognitivos son diferentes en cada
competidor.

7
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

A continuación se hace una breve introducción a los sistemas de entrenamientos que son
empleados en la preparación de los competidores con el objetivo de obtener mejores
resultados en competencias de programación.

1.2.1. TopCoder
TopCoder (Pacheco, 2011) es una compañía que organiza concursos de programación de
diferentes estilos: algoritmos, diseño, maratones y detección de errores. La empresa se
vende a sí misma como un producto para encontrar a los mejores. No en vano, entre sus
clientes se encuentran empresas como Intel, Facebook, Paypal y la Agencia Nacional de
Seguridad de los Estados Unidos, las cuales organizan eventos patrocinados con distintas
pruebas especialmente definidas por ellos a los que cualquier persona podría acceder y
mostrar sus capacidades. El rasgo más distintivo de la plataforma es la integración como
plataforma educativa y empresarial al mismo tiempo, además de incluir novedosos estilos
de competencias, así como nuevos sistemas de puntuación.

1.2.2. USA Computing Olympiad (USACO)


USACO (Park, 2013) es una plataforma dedicada a la preparación, información y apoyo a
los competidores de IOI. Está compuesta por varias subplataformas, entre las cuales
destacan: USACO Contest Gateway y USACO Training Gateway. La primera permite
realizar competencias de programación al estilo IOI, incluyendo el mismo sistema de
puntuación. Por otra parte USACO Training Gateway (2013d) está destinada a la
preparación de los competidores, con una serie de problemas que se organizan por
secciones y capítulos. Los usuarios deben ir venciendo los problemas de cada una de las
secciones para poder pasar a la próxima sección de entrenamiento. El entrenamiento es
igual para todos los competidores sin diferenciar niveles de preparación.

1.2.3. Jueces en línea


Los jueces en línea por lo general son aplicaciones Web que permite evaluar programas de
computación que intentan solucionar tareas propuestas. Estos sistemas son capaces de
compilar y ejecutar el código fuente de la solución propuesta, y validarlo con los juegos de
datos definidos para la tarea que se intenta resolver. A continuación se describen algunos de
los jueces en líneas internacionales y nacionales de mayor popularidad.

8
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

1.2.3.1. Juez en Línea de la Universidad de Valladolid (UVA)


UVA (2013a) es uno de los jueces en línea más antiguos y prestigiosos del mundo. Surge
en el año 1995, pero comienza a cobrar fuerzas en la comunidad internacional en el año
1997. Se emplea como herramienta de entrenamiento para concursos de programación y
posee uno de los mejores archivos de problemas del mundo.
Dispone de varios módulos que brindan una mayor funcionalidad al juez en línea. El
módulo de estadísticas permite acceder a la información detallada de los usuarios,
problemas y concursos. El archivo 24 horas permite a los usuarios probar sus soluciones en
tiempo real durante todo el día. Hay que destacar que UVA a pesar de ser un juez en línea
está integrado con la plataforma EduJudge (Misner, 2012), lo cual lo vincula al proceso de
enseñanza-aprendizaje de la programación competitiva.

1.2.3.2. Juez en Línea de Pekín (POJ)


El POJ (Ying Fuchen, 2003) es uno de los jueces en línea de mayor demanda entre la
comunidad universitaria china, pues es uno de los más antiguos de esa región. Es muy
empleado para el entrenamiento de los competidores para participar en el concurso del
ACM-ICPC. Se caracteriza por poseer una interfaz intuitiva, ligera y fácil de usar, además
de ser uno de los jueces en línea con menores tiempos de respuesta en su interfaz.

1.2.3.3. Sphere Online Judge (SPOJ)


El SPOJ (Bolton, 2007) es un juez en línea desarrollado por el proyecto Sphere Research
Labs. Se caracteriza por tener una interfaz intuitiva, sencilla y ligera, propiciando a usuarios
nuevos e inexpertos la fácil comprensión del propósito de la herramienta. Permite hacer
diferenciación de problemas en cuanto a dificultad y propósito. Tiene soporte para más de
40 lenguajes de programación. Posee tiempos de evaluación muy rápidos, a pesar de las
pocas prestaciones del servidor sobre el cual está desplegado.
Uno de los elementos más destacables del SPOJ es el empleo de MOSS, como herramienta
de detección de plagios, y la posibilidad brindada a determinados usuarios de organizar
concursos bajo sus propias reglas y problemas. El sitio carece de referencias a
documentación o tutoriales destinados a la preparación de los usuarios en los temas
relacionados con la programación competitiva.

9
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

1.2.3.4. Codeforces
Codeforces (Buro, 2010) es uno de los jueces en línea más populares, surgido en el año
2010 cambiando la dinámica de los jueces en línea existentes hasta el momento. Se
caracteriza por ser uno de los pocos jueces en línea que aplica la Web 2.0 (Arnal, 2007) y
constituir un sistema predominantemente para la realización de competencias de
programación en varios estilos existentes. Para incrementar la preparación de los
concursantes Codeforces permite clasificar los problemas por áreas temáticas. También
permite el acceso a los códigos fuentes de las soluciones una vez finalizados los concursos.

1.2.3.5. Caribbean Online Judge (COJ)


El COJ (Alvarez, 2012a) es un juez en línea cubano desarrollado en la Universidad de las
Ciencias Informáticas (UCI). Aunque está orientado a la competición es muy utilizado en
los entrenamientos por los estudiantes que se preparan para los concursos del ACM-ICPC.
Permite el intercambio de experiencias y conocimientos entre los usuarios del sistema. Se
encuentra accesible a través de la Internet desde el año 2010. Hay que destacar que se le
han ido incorporando nuevas funcionalidades que le hacen comparable con el resto de los
jueces en línea a nivel mundial.

1.3. Frameworks de desarrollo

Un framework (Mendez, 2009) es una estructura conceptual y tecnológica de soporte,


definida normalmente con artefactos o módulos de software concretos, con base en la cual
otro proyecto de software puede ser organizado y desarrollado. Aceleran la programación
de una aplicación informática, proveyendo una metodología de trabajo que sistematiza y
facilita la generación de formularios, funciones y módulos de uso común, permitiendo al
desarrollador dedicar su atención hacia los aspectos específicos de cada aplicación.
Los frameworks pueden incluir soporte de programas, bibliotecas, un lenguaje interpretado,
entre otras herramientas para ayudar a desarrollar y unir los diferentes componentes de un
proyecto. Existen numerosos frameworks de desarrollo para PHP y cada uno ofrece una
amplia gama de funcionalidades que adicionan gran versatilidad a las aplicaciones Web.
Algunos de los más populares son: Zend Framework(Ltd., Mayo, 2013), CodeIgniter
(Alvarez, 2012b), Symfony (Pacheco, 2011) y CakePHP (Foundation, 2013). También
existen otros frameworks para otros lenguajes de programación como son: RubyOnRails

10
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

(Saasen, 2006), Django (Kaplan-Moss, 2008), Springs (Rod Johnson et al., 2008), entre
otros.
A continuación se hace una descripción de varios frameworks de desarrollo. Para el
desarrollo de la aplicación propuesta en este trabajo se decidió emplear Symfony2 por todas
las ventajas que ofrece este framework de trabajo.

1.3.1. Zend Framework


Zend Framework es un framework de código abierto para desarrollar aplicaciones Web y
servicios Web con PHP5 como lenguaje de programación (D.P.Valdez., 2007). Cada
componente que compone el framework está construido con una baja dependencia de otros
componentes, lo cual permite que los componentes sean empleados por separado. Zend
Framework ofrece un gran rendimiento y una robusta implementación del modelo-vista-
controlador (MVC). También implementa una abstracción del sistema de base de datos y
un componente de formularios para la generación de formularios HTML, permitiendo la
validación y filtrado de datos de forma sencilla.

1.3.2. CodeIgniter
CodeIgniter (Alvarez, 2012b) es un framework de código abierto basado en MVC para el
desarrollo aplicaciones Web en PHP. Ha ganado gran popularidad por ser flexible a las
modificaciones en su estructura. CodeIgniter puede ser empleado solamente como vista-
controlador (VC), es decir, sin ser necesario el empleo de una base de datos. A diferencia
de otros frameworks que incluyen un sistema de validación de usuarios por defecto,
CodeIgniter no lo tiene, lo cual puede verse como una ventaja o desventaja según la
naturaleza del proyecto que se desea desarrollar.

1.3.3. Symfony2
Symfony2 (Eguiluz, 2012) es un framework que ayuda a desarrollar las aplicaciones de una
manera más simple y rápida generando formularios y clases de manera automática. Su
arquitectura interna está completamente desacoplada, lo que permite reemplazar o eliminar
fácilmente aquellas partes innecesarias en el proyecto. Symfony2 también es el framework
que más ideas incorpora del resto de los framework (Mendez, 2009), incluso de aquellos
que no están programados con PHP.

11
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

Aunque el funcionamiento interno de Symfony2 se basa en la arquitectura MVC, su creador


plantea que no es framework MVC, pues el desarrollador debe garantizar la parte
correspondiente al modelo (Pacheco, 2011). Para garantizar el modelo existen librerías
conocidas como ORM (Object-Relational Mapping) (ORSÁG, 2006), que proporciona
persistencia transparente de objetos de PHP. Los ORM actúan como una capa de
abstracción de bases de datos de gran alcance, lo cual le brinda al desarrollador
independencia del sistema gestor de base de datos. Los ORM más populares son: Doctrine
(Pacheco, Noviembre 03, 2011) y Propel (2010b).
Las características principales de Symfony2 se resumen en:

• Publicado bajo licencia MIT de software libre.


• Framework multiplataforma fácil de instalar y configurar.
• Soporta los sistemas gestores de bases de datos más comunes: MySQL, PostgreSQL,
SQLite, Oracle, Microsoft SQL Server, entre otros.
• Es compatible solamente con PHP5, para asegurar el mayor rendimiento y acceso a
las características avanzadas de este lenguaje.
• Flexible y extensible mediante un completo mecanismo de plugins.
• Soporte para plantillas que pueden ser construidas por diseñadores Web que no
posean conocimientos de este framework de trabajo.
• Los formularios soportan la validación automática, lo cual asegura mejor calidad de
los datos en la base de datos.
• Reduce el uso de banda ancha y la carga del servidor haciendo uso de una caché.
• Soporta autenticación y credenciales, facilitando la creación de áreas restringidas y
manejo de seguridad de los usuarios.

1.3.3.1. Propel
El ORM Propel se basa en el proyecto Apache Torque (2012a), un ORM de Java. La
función primaria de Propel es proveer un mapa entre las clases de PHP y las tablas de la
base de datos. Con el fin de lograr esto, Propel incluye un componente generador que usa
generación de código fuente para construir clases PHP basadas en una definición del
modelo de datos, escrita en XML. Otras características de Propel son:

• Publicado bajo licencia MIT de software libre.

12
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

• ORM orientado a objetos.


• Soporte para varios sistemas gestores de base de datos como son: MySQL,
PostgreSQL, SQLite, Microsoft SQL Server y Oracle.
• Incluye un componente de ejecución que maneja conexiones y transacciones con la
base de datos.

1.3.3.2. Doctrine
El ORM Doctrine tiene sus orígenes en el año 2006. Doctrine toma las ideas fundamentales
de Hibernate (Albiol, 2003), el ORM de Java, y de ActiveRecord (Saasen, 2006), el ORM
de RubyOnRails, con el propósito de construir una solución igual de potente en PHP.
Doctrine puede generar clases a partir de una base de datos existente y después el
programador puede especificar relaciones y añadir funcionalidad extra a las clases
autogeneradas. A diferencia de otros ORM, no es necesario generar o mantener complejos
esquemas XML de la base de datos. Otras características de Doctrine son:

• Publicado bajo la licencia LGPL.


• Soporte para datos jerárquicos.
• Herencia.
• Soporte para hooks, métodos que pueden validar o modificar la lectura/escritura de
la base de datos.
• Soporte para escribir consultas de base de datos en un dialecto propio orientado a
objetos llamado SQL Query Language Doctrina (DQL), inspirado en Hiberna HQL.

1.4. Lenguajes de programación para la Web


Desde los inicios de la Web han existido los lenguajes de programación orientados a la
Web. En un inicio eran lenguajes estáticos, lo cual no permitía variabilidad del contenido
mostrado. La Web ha ido evolucionando hacia una Web dinámica, lo cual ha provocado la
aparición de nuevos lenguajes de programación para cubrir las necesidades de una Web
dinámica, que permiten interactuar con los usuarios y los sistemas gestores de bases de
datos.
Teniendo en cuenta donde es ejecutado el código, los lenguajes de programación Web se
pueden dividir en dos grupos (A.D.L.TORRE., 2006): los lenguajes del lado del servidor y

13
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

los lenguajes del lado del cliente. Los lenguajes del lado del servidor, son aquellos cuyo
código se ejecuta en el servidor y genera una salida que se envía al cliente para ser
ejecutada. Esta salida generada se encuentra en un lenguaje de programación que se ejecuta
del lado del cliente.
Los lenguajes del lado del cliente por lo general son más sencillos que los lenguajes del
lado del servidor, y son interpretados por todos los navegadores Web. Entre los lenguajes
de programación del lado del cliente más empleados se encuentra: HTML
(Á.M.Echeverría., 1995), CSS (J.E.Pérez., 2009), JavaScript (Eguiluz, 20 de febrero de
2008) y los Java Applets (SwIG and He, 2013). Los lenguajes de programación del lado del
servidor más empleados son: PHP (R.R.Hinostroza., 2005), ASP (Powers, 2004), PERL
(2009b), Python (Rossum, 16 de octubre de 2000), Java Server Pages (Bergsten, August
2002 ), Ruby (matz, 2006), entre otros.
A continuación se muestra una breve descripción de los lenguajes de programación más
utilizados en la actualidad para el desarrollo de una aplicación Web y que van a ser
utilizados para el desarrollo de la aplicación que se propone en este trabajo.

1.4.1. HTML
El lenguaje HTML “HyperText Markup Language” es un lenguaje estático empleado para
el desarrollo de sitios Web. Este lenguaje es un estándar reconocido en todo el mundo,
desarrollado por el World Wide Web Consortium (W3C). Los archivos pueden tener las
extensiones htm, html, son pequeños y de rápido despliegue.
Es un lenguaje sencillo que permite presentar la información de forma estructurada y
agradable. Es aceptado por todos los navegadores Web y no es necesario tener grandes
conocimientos de él cuando se dispone de un editor de páginas Web o WYSIWYG.
A pesar de ser interpretado por todos los navegadores, la representación en cada uno de
ellos puede variar. Es un lenguaje organizado por etiquetas, las cuales son muy limitadas, lo
que produce que el diseño sea más lento.

1.4.2. CSS
Las hojas de estilo en cascada CSS (Cascading Style Sheets), es un lenguaje diseñado y
desarrollado por la W3C. Las hojas de estilos son empleadas por los navegadores Web para
redefinir las propiedades de los distintos elementos y las etiquetas en el código HTML.

14
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

Permiten dar formato a los documentos de forma global y proporcionan al diseñador de


páginas Web la posibilidad de definir un conjunto de ampliaciones HTML especiales y
aplicarlas al documento.
Los estilos CSS permiten separar los contenidos de la forma de presentación, lo cual se
hace imprescindible para crear páginas Web complejas. Separar la definición de los
contenidos y la definición de su aspecto presenta numerosas ventajas, ya que obliga a crear
documentos HTML/XHTML bien definidos y con significado completo. Además, mejora la
accesibilidad del documento, reduce la complejidad de su mantenimiento y permite
visualizar el mismo documento en diferentes dispositivos.
Las definiciones del formato de un documento se pueden colocar en archivos separados y
aplicarlas a un grupo de documentos. Posibilitan además aplicar un formato modificado a
documentos HTML ya existentes. Con los CSS se puede aplicar a un documento diferentes
estilos de orígenes.

1.4.3. JavaScript
JavaScript es un lenguaje de programación interpretado que se ejecuta del lado del cliente.
Es empleado para crear pequeños programas que luego son insertados en una página Web y
en programas más grandes. Los programas escritos con JavaScript se pueden probar
directamente en cualquier navegador sin necesidad de procesos intermedios.
Permite a los desarrolladores crear acciones en sus páginas Web como pueden ser crear
efectos para interactuar con los usuarios pues gran parte de la programación en este
lenguaje está centrada en describir objetos, escribir funciones que respondan a efectos tales
como: movimientos del mouse, aperturas, utilización de teclas, cargas de páginas entre
otros.
Es un lenguaje seguro y fiable, el cual por razones de seguridad tiene capacidades de
funcionamiento limitadas. Una de las principales desventajas es que para que ejecute
correctamente el código debe ser descargado completamente por el cliente y este código es
visible por cualquier usuario. Actualmente existen tecnologías para el desarrollo de
aplicaciones Web que basan su funcionamiento en JavaScript, como son: jQuery y AJAX
(Asynchronous JavaScript + XML).

15
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

La aplicación propuesta en este trabajo hace uso de tres bibliotecas de JavaScript para
mejorar la apariencia de la información mostrada a los usuarios: jQuery, tinyMCE y
clueTip.

1.4.4. PHP
PHP (PHP Hypertext Preprocessor) es un lenguaje de programación implementado
especialmente para el desarrollo Web. Es un lenguaje de alto nivel que se ejecuta en el
servidor. Este lenguaje ofrece una gran variedad de funciones que permiten desarrollar
múltiples funcionalidades como por ejemplo interactuar con diversos protocolos de
comunicación, con documentos XML y autenticación.
Se distingue además por su rapidez; su facilidad de aprendizaje; tiene un soporte
multiplataforma tanto de diversos sistemas operativos, como servidores HTTP y de gestores
de bases de datos. Dispone de una gran cantidad de características que lo convierten en la
herramienta ideal para la creación de páginas Web dinámicas:
Entre las principales ventajas del empleo del lenguaje se encuentran:

• Es libre distribuido bajo la licencia GPL.


• Es un lenguaje muy rápido y muy fácil de aprender.
• Soporta la programación orientada a objetos.
• Es un lenguaje multiplataforma.
• Capacidad de conexión con la mayoría de los manejadores de base de datos
empleados en la actualidad: MySQL, PostgreSQL, Oracle, MS SQL Server, entre
otras.
• Extensible mediante módulos.
• Posee documentación en su página oficial la cual incluye descripción y ejemplos de
cada una de sus funciones.
• Incluye gran cantidad de funciones.
Entre las principales desventajas del empleo del lenguaje se encuentran:

• Se necesita instalar un servidor Web.


• Todo el trabajo lo realiza el servidor y no delega al cliente. Por tanto puede ser más
ineficiente a medida que las solicitudes aumenten de número.

16
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

• La legibilidad del código puede verse afectada al mezclar sentencias HTML y PHP.

1.5. Servidores de aplicaciones Web


Los servidores Web (2012c) son aplicaciones que permite el acceso a sitios Web
hospedados en el servidor, a través de la red TCP/IP. El servidor Web es el encargado de
procesar las peticiones recibidas desde un cliente, enviando como respuesta información en
un lenguaje comprendido por el cliente, como es el HTML, CSS y JavaScript.
Para permitir el desarrollo de aplicaciones Web dinámicas, los servidores han incorporado
nuevas tecnologías como son: scripts CGI, páginas activas del servidor (ASP) y el soporte
para lenguajes que ejecutan del lado del servidor. Existen muchos servidores de aplicación
Web, ejemplos de estos son: Apache (Bolton, 2007), AOLServer (2013b), Covalent
Enterprise Ready Server (mayo, 2013), Java Tomcat (Brittain), JBoss Server (Andreadis,
2008), Zope (2009c), RubyOnRails Server (Saasen, 2006), entre otros.
Apache es un servidor Web flexible, rápido y eficiente, continuamente actualizado. Entre
sus características destacan (Bolton, 2007):

• Es multiplataforma y de código abierto.


• Es un servidor de web conforme al protocolo HTTP/1.1.
• Es modular, por lo que puede ser adaptado a diferentes entornos y necesidades, con
los diferentes módulos de apoyo que proporciona, y con la API de programación de
módulos, para el desarrollo de módulos específicos.
• A partir de la versión 2.0 hace uso de la programación concurrente.
• Tiene soporte para diferentes extensiones, entre las que destaca el soporte para
PHP, un lenguaje de programación del lado del servidor.
Por las características presentadas y las ventajas que proporciona se ha escogido Apache2
para el desarrollo de la aplicación propuesta en el presente trabajo.

1.6. Gestores de Base de Datos


Un Sistema de Gestión de Bases de Datos (SGBD) o DBMA (DataBase Management
System) es una colección de programas cuyo objetivo es servir de interfaz entre la base de
datos, el usuario y las aplicaciones (2004). Se compone de un lenguaje de definición de
datos, un lenguaje de manipulación de datos y un lenguaje de consulta. Un SGBD permite

17
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

definir los datos a distintos niveles de abstracción y manipular dichos datos, garantizando
su seguridad e integridad. Ejemplos de SGBD son Oracle (Lilian Hobbs, 2005), DB2
(2011), MySQL (2002), PostgreSQL (Lockhart), SQLite (Kemper), Microsoft SQL Server
(Misner, 2012), Microsoft Access (Michael R. Groh, 2007), etc., siendo MySQL y
PostgreSQL los más empleados en el desarrollo de aplicaciones Web.

1.6.1. PostgreSQL
PostgreSQL es un sistema manejador de bases de datos de código abierto, capaz de
administrar grandes cantidades de datos. Implementa el estándar SQL92/SQL99, y soporta
gran cantidad de tipos de datos para el almacenamiento de la información. También permite
la creación de tipos de datos propios e incorpora una estructura de datos para almacenar
arreglos de datos. Permite la declaración de funciones, así como la definición de
disparadores. PostgreSQL permite la gestión de diferentes usuarios a través de roles, así
como los permisos asignados a cada uno de ellos.

1.6.2. MySQL
MySQL es un sistema de gestión de bases de datos relacional, licenciado bajo la licencia
GPL de la GNU. Su diseño multihilo le permite soportar una gran carga de forma muy
eficiente. Este gestor de bases de datos es muy usado en el mundo del software libre debido
a su gran rapidez y facilidad de uso. Existen infinidad de librerías y otras herramientas que
permiten su uso a través de gran cantidad de lenguajes de programación, además de su fácil
instalación y configuración. Sus principales características son:

• Es multiplataforma distribuido bajo la licencia GPL.


• Aprovecha la potencia de sistemas multiprocesador.
• Soporta gran cantidad de tipos de datos.
• Dispone de API en la mayoría de los lenguajes de programación.
• Soporta hasta 32 índices por tabla.
• Permite la gestión de usuarios y contraseñas con buen nivel de seguridad en los
datos.

18
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

1.7. Herramientas de desarrollo de software


Las herramientas de desarrollo de software, conocidas como CASE (Computer Aided
Software Engineering) son diversas aplicaciones informáticas destinadas a aumentar la
productividad en el desarrollo de software reduciendo el costo del desarrollo en términos de
tiempo y de dinero.(RIVAS, 2006) Las herramientas CASE se encuentran presentes en
todas las etapas de desarrollo del software. Entre sus objetivos principales se encuentran:

• Permitir la aplicación práctica de metodologías estructuradas.


• Facilitar la realización de prototipos y el desarrollo conjunto de aplicaciones.
• Facilitar la reutilización de componentes de software.
• Aumentar la portabilidad de las aplicaciones.
• Mejorar y estandarizar la documentación.
• Permitir un desarrollo y refinamiento visual de las aplicaciones, mediante la
utilización de interfaces gráficas.
• Simplificar el mantenimiento de los programas.

1.7.1. Visual Paradigm para UML


Visual Paradigm para UML (Misner, 2012, Mar 05, 2007) es una herramienta profesional
que soporta el ciclo de vida completo del desarrollo de software: análisis y diseño
orientados a objetos, construcción, pruebas y despliegue. El software de modelado UML
ayuda a una más rápida construcción de aplicaciones de calidad. Permite gran variedad de
diagramas, aplicar ingeniería inversa, generar documentación y generar código a partir de
los diagramas. Tiene soporte para UML versión 2.1, soporte para ORM, transformación de
diagramas de entidad-relación en tablas de base de datos e integración con diferentes IDE
como son el Visual Studio y el NetBeans, entre otros.
El UML (Unified Modeling Language) es un lenguaje de modelado empleado para
especificar o describir métodos o procesos(Grady Booch, 1998). Se utiliza para definir un
sistema, detallar los artefactos que componen el sistema, documentar y construir el sistema.
Está compuesto por un grupo de especificaciones orientadas a Objeto, las cuales están
compuestas por distintos diagramas, que representan las diferentes etapas del desarrollo de

19
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

un proyecto de software. UML ofrece muchos beneficios por la cual es necesario adoptarlo
como lenguaje de modelado:

• Mejor entendimiento del riesgo del proyecto antes de construir el sistema.


• Mejores tiempos totales de desarrollo.
• Especificación de la estructura y el comportamiento del sistema.
• Obtención del “plano” del sistema.
• Mejor soporte a la planeación y al control del proyecto.
• Aumento en la calidad del desarrollo.

1.7.2. NetBeans IDE 7.2.1


El IDE NetBeans (Abela) es un entorno de desarrollo integrado de código abierto
disponible para Windows, Mac, Linux y Solaris. Aunque está programado en Java tiene
soporte para varios lenguajes de programación como son: PHP, JavaScript, Ajax, Groovy,
Grails, C/C++ y Ruby. El proyecto NetBeans está apoyado por una amplia comunidad de
desarrolladores y ofrece una amplia documentación y recursos de capacitación, así como
una gran cantidad de plugins de terceros.
Esta versión permite crear e importar proyectos de Symfony2, así como utilizar la consola
de comandos de este framework de desarrollo. También proporciona soporte para crear
aplicaciones añadiéndoles flags o parámetros y además posibilita expandir o minimizar las
secciones de los archivos YAML. La versión 7.2.1 de este IDE (Eguiluz, 2012) ofrece un
rendimiento significativamente mejorado en las experiencias de codificación con las nuevas
capacidades de análisis de código estático en el editor y una exploración de proyectos más
inteligente.

1.7.3. JetBrains PhpStorm


JetBrains PhpStorm (Alvarez, 2012a) es un IDE de desarrollo de PHP multiplataforma
basado en la plataforma IntelliJ (2009a). Provee un potente editor para PHP, HTML y
JavaScript que permite realizar análisis de código, completamiento de código y corrección
de errores de forma automática on-the-fly. También incluye un editor de consultas SQL. Es
extensible mediante plugins. Entre otras características se encuentran:

• Soporte para HTML5.

20
CAPÍTULO 1: FUNDAMENTACIÓN TEÓRICA

• Soporte para PHP 5.3 y 5.4.


• Soporte para varios estilos de codificación como son: PSR1/PSR2, Drupal,
Symfony2 y Zend Framework.
• Detección de código duplicado.
• Refactorización de código.
• Integrable con Symfony2 y Yii Framework.
• Soporte para la edición de plantillas Smarty.

Consideraciones finales del capítulo


En este capítulo se hizo un estudio sobre las competencias de programación a nivel
internacional y nacional. También se analizaron las principales herramientas empleadas
como medio de entrenamiento para la participación en estas competencias, pudiéndose
constatar que existen gran cantidad de jueces en línea, pero pocos sistemas de
entrenamiento que permitan dar un seguimiento de la preparación de los competidores y
que permitan realizar un entrenamiento diferenciado en dependencia de las características
de cada competidor.
Se realizó un estudio de las tecnologías más empleadas en el desarrollo de aplicaciones
Web, seleccionando Symfony2 como framework de desarrollo, Doctrine para el manejo del
modelo de datos , PHP5 como lenguaje de programación, MySQL como gestor de base de
datos y. Visual Paradigm para UML será empleado para el modelado del sistema propuesto.

21
Capítulo 2
Diseño e implementación
Capítulo 2. Diseño e implementación

En este capítulo se describe la aplicación web propuesta para el entrenamiento en línea.


Inicialmente se hace un análisis de los requisitos funcionales de la aplicación, y se realiza
su modelación a través de los diferentes modelos y diagramas de la metodología de
desarrollo RUP teniendo en cuenta los casos de uso y actores que interactúan con ellos.

2.1. Requisitos funcionales


Los requisitos funcionales del sistema describen todas las operaciones que pueden realizar
los usuarios que van a emplear la aplicación desarrollada, representan las características
que desea el cliente que cumpla la aplicación. Los requisitos funcionales de la aplicación
propuesta en este trabajo fueron propuestos por la Dirección del Movimiento ACM-ICPC
de la UCLV. A continuación se muestran los requisitos funcionales definidos para la
aplicación propuesta y algunas de las acciones principales que debe realizar la aplicación
para cumplir con los requisitos:
R1: Autenticar usuario

• Permitir al usuario introducir nombre de usuario y contraseña al sistema.


• Validar datos introducidos del usuario.
• Permitir al usuario utilizar las funcionalidades que brinda el sistema en
dependencia del rol de usuario.
R2: Gestionar usuario

• Permitir registrar usuarios según los roles definidos para el uso de la aplicación.
• Permitir gestionar la información de las instituciones.
• Asignar una institución a cada usuario.
• Permitir modificar la información de un usuario.
• Permitir cambiar la contraseña de un usuario.
R3: Gestionar entrenamientos

• Permitir crear nuevos entrenamientos.


• Permitir editar los entrenamientos creados por cada entrenador.

22
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

• Permitir cancelar el entrenamiento, con lo cual el entrenamiento no se mostrará


más en la aplicación hasta que sea activado.
• Permitir listar todos los entrenamientos creados por cada entrenador.
• Permitir al entrenador asignarle entrenamientos a los competidores
individualmente.
• Permitir asignarle documentos a cada entrenamiento creado por el entrenador.
R4: Gestionar tareas

• Permitir crear nuevas tareas en los entrenamientos creados.


• Permitir editar las tareas creadas por cada entrenador.
• Permitir listar las tareas pertenecientes a los entrenamientos.
• Listar historial de tareas realizadas por los competidores asociados a cada
entrenador.
• Listar historial de tareas por cada usuario registrado en el sistema.
• Diferenciar las dos tipos de tareas que componen un entrenamiento, atendidas y
desatendidas.
R5: Realizar tareas

• Permitir a los competidores enviar tareas para ser revisadas por los
entrenadores.
• Permitir listar las tareas asociadas a un entrenamiento que se deben resolver por
el competidor.
• Permitir listar las tareas revisadas por los entrenadores y que deben ser resueltas
nuevamente por los competidores por estar incorrectas.
Para dar cumplimiento a los requisitos funcionales antes descritos, en la solución propuesta
se emplean tres tipos de roles de usuarios: competidor, entrenador y administrador. Por
decisión de la Dirección del Movimiento del ACM-ICPC en la UCLV todos los usuarios
registrados en el sistema son competidores, por lo tanto en la solución propuesta sólo se
hace necesario diferenciar cuando un usuario tiene el rol de entrenador, administrador o
ambos. En el capítulo 3 se muestra una descripción más detallada de cada uno de los roles
de usuarios del sistema.

23
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

En la solución propuesta el entrenamiento está compuesto por tareas y documentos. El


entrenamiento se define como un proceso compuesto por dos momentos: un primer
momento en el cual los competidores deben adquirir los conocimientos básicos sobre un
tema específico, el cual se lleva a cabo a través de las tareas atendidas y un segundo
momento donde los competidores deben poner en práctica los conocimientos y habilidades,
adquiridas en el primer momento, a través de las tareas desatendidas. Los documentos del
entrenamiento son materiales de consulta que brindan los conocimientos necesarios para la
realización de las tareas atendidas.
Las tareas atendidas son tareas que los entrenadores deben revisar y definir si fueron
resueltas de forma correcta o incorrecta. En este tipo de tarea los competidores deben
entregar un informe a los entrenadores donde se evidencie que ha adquirido los
conocimientos básicos sobre el tema que abarca la tarea. Este informe es subido a través del
sistema. Por otra parte las tareas desatendidas son tareas que deben ser evaluadas de forma
automática por el sistema. Este tipo de tarea se corresponde a la solución de problemas
disponibles en el juez en línea COJ. La evaluación automática de este tipo de tarea aún no
está implementada en el sistema pues aún no se dispone de los “Web Services” del juez en
línea, por lo que queda propuesto para futuras modificaciones del sistema.

2.2. Modelo de casos de uso


El modelado de casos de uso es un método para identificar las necesidades funcionales del
sistema. A continuación se muestra el diagrama de casos de uso en función de los requisitos
funcionales del sistema.

2.2.1. Diagrama de casos de uso


El diagrama de casos de uso refleja de forma gráfica todos los requisitos funcionales
asociados a cada uno de los actores que pueden interactuar con el sistema. Un caso de uso
se define de forma precisa como sigue (Grady Booch, 1998):
“Un caso de uso especifica una secuencia de acciones, incluyendo variantes, que el
sistema puede llevar a cabo, y que producen un resultado observable de valor para un
actor concreto”

24
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Los casos de uso se definen examinando los requisitos funcionales del sistema. Cada uno
de las funcionalidades que añaden un valor al usuario es considerado un caso de uso. En la
figura 2.1 se muestra el diagrama de casos de uso del sistema propuesta, teniendo en cuenta
los requisitos funcionales antes expuestos. En el diagrama se recogen todos los requisitos
funcionales del sistema de un modo sencillo comprendido por la Dirección del Movimiento
del ACM-ICPC de la UCLV.

Figura 2.1. Diagrama de casos de uso

Los casos de uso más importantes del sistema son: gestionar la información de los
entrenamientos y revisar tareas por parte de los entrenadores, además de realizar tareas por
parte de lo competidores. A continuación en la tabla 2.1 se describe el caso de uso de
gestionar la información de los entrenamientos.

25
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Tabla 2.1. Descripción del caso de uso: Gestionar entrenamiento

Actor Entrenador

Resumen El caso de uso se inicia cuando se selecciona la opción


“Gestionar Entrenamientos”. Seguidamente se muestra una
lista de los entrenamientos que tiene definido el entrenador,
donde podrá insertar, editar, activar o desactivar cualquiera
de sus entrenamientos.
A través de la opción “Gestionar Asignaciones” el
entrenador puede asignar cualquiera de sus entrenamientos
a cualquiera de los competidores registrados.

Precondiciones El usuario debe estar autentificado en la aplicación.


El usuario debe tener el rol de entrenador.

Requisito funcional R3

2.3. Modelo del análisis


El modelo del análisis se basa en un modelo de objetos conceptuales y permite una mayor
comprensión del problema para modelar la solución. Mediante su flujo de trabajo se
profundiza en el dominio de la aplicación y en la comprensión de los requisitos,
permitiendo un acercamiento a la lógica de cómo resolver el problema. Este modelo crece
incrementalmente a medida que se analizan más y más los casos de uso. En cada iteración
se selecciona un conjunto de casos de uso y se reflejan en el modelo.

2.3.1. Diagramas de actividades


Los diagramas de actividades muestran el flujo de control entre actividades. Son muy
usados para el modelado de procesos de negocio en estructuras y flujos de trabajo
organizacionales, y para modelar los aspectos dinámicos de un sistema, lo cual implica
representar los pasos secuenciales, posiblemente concurrentes, de un proceso
computacional. (JAMES RUMBAUGH, 2000)
A continuación en la figura 2.2 y en la figura 2.3 se presentan los diagramas de actividades
para el proceso de insertar un entrenamiento, correspondiente al caso de uso “Gestionar

26
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

entrenamiento” y el proceso de realizar una tarea atendida correspondiente al caso de uso


“Realizar tarea”.
Como se observa en la figura 2.2 el entrenador debe seleccionar la opción “Gestionar
entrenamientos” para acceder a las opciones de gestión de los entrenamientos y seleccionar
la opción de “Insertar entrenamiento”. Seguidamente debe introducir toda la información
referente al entrenamiento en el formulario mostrado, el cuál una vez finalizado es validado
por la aplicación.

Figura 2.2. Diagrama de actividades: Insertar entrenamiento

27
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Figura 2.3. Diagrama de actividades: Realizar tarea atendida

Como se muestra en la figura 2.3, en el proceso completo de realizar una tarea atendida
parte de que el entrenador debe asignar un entrenamiento a un competidor. Una vez
asignado el entrenamiento, el competidor puede acceder al entrenamiento y sus tareas
correspondientes. Para dar respuesta a una tarea atendida el competidor debe subir un
informe con su respuesta para que el entrenador lo revise y le asigne una calificación de
“Bien” o “Mal”. Si la calificación es de “Bien” la tarea se marca como resuelta y en caso
de “Mal” se marca la tarea como incorrecta y deberá ser respondida nuevamente por el
competidor.

2.3.2. Diagramas de colaboración


Un diagrama de colaboración muestra una interacción organizada basándose en los objetos
que toman parte en la interacción y los enlaces entre los mismos. Los objetos interactúan
entre sí pasándose mensajes y se conectan a través de enlaces. Los mensajes especifican la
transmisión de información entre objetos y el enlace especifica un camino a lo largo del
cual un objeto puede enviar un mensaje a otro objeto.

28
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Figura 2.4. Diagrama de colaboración: Insertar entrenamiento

En la figura 2.4 se muestra el diagrama de colaboración para el proceso de insertar un


nuevo entrenamiento en el sistema. Para poder insertar un entrenamiento el entrenador
selecciona la opción de gestionar entrenamientos, luego la clase controladora muestra la
interfaz de gestionar entrenamientos, donde el entrenador selecciona insertar entrenamiento
y la clase controladora muestra la interfaz de inserta un entrenamiento para insertar los
datos del entrenamiento. Estos datos son validados por el sistema e insertados en la base de
datos.
La figura 2.5 muestra el diagrama de colaboración para el proceso de editar un
entrenamiento. El entrenador debe seleccionar la opción gestionar entrenamientos, luego la
clase controladora muestra la interfaz de gestionar entrenamientos, donde el entrenador
selecciona el entrenamiento que desea editar y la clase controladora muestra la interfaz de
editar el entrenamiento indicado, para que el entrenador modifique la información del
entrenamiento. La nueva información del entrenamiento es validada e insertada en la base
de datos por el sistema.

29
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Figura 2.5. Diagrama de colaboración: Editar entrenamiento

Figura 2.6. Diagrama de colaboración: Asignar entrenamiento

Como se puede observar en el diagrama de colaboración para asignar un entrenamiento


mostrado en la figura 2.6, el entrenador parte de seleccionar la opción de gestionar
entrenamientos, la clase controladora muestra la interfaz de gestionar entrenamiento y el
entrenador selecciona la opción asignar entrenamiento. Seguidamente la clase controladora
muestra la interfaz de asignar entrenamiento, donde el entrenador debe seleccionar que

30
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

entrenamiento desea asignar y a que competidor. El sistema se encarga de verificar que ese
entrenamiento no haya sido asignado a ese competidor con anterioridad.

2.4. Modelo de diseño


La fase de diseño expande y detalla los modelos del análisis tomando en cuenta todas las
implicaciones y restricciones técnicas. El propósito del diseño es especificar una solución
funcional y pueda ser convertida en código fuente, además de construir una arquitectura
simple y fácilmente extensible. El modelo de diseño representa los componentes de la
aplicación y determina su colocación adecuada y su uso dentro de la arquitectura en
general.

2.4.1. Diagramas de navegación


El diagrama de navegación constituye un mapa que permite visualizar la estructura general
de la aplicación, ilustrando las vías de navegación directa entre cada una de sus páginas
para cada actor del sistema. En las figuras 2.7, 2.8, 2.9 y 2.10 se muestran los diagramas de
navegación para los diferentes roles de usuarios definidos en el sistema. Como se puede
observar todos los roles tienen la navegación del usuario anónimo, mientras que los
entrenadores y administradores también tienen los elementos de la navegación del usuario
competidor.

Figura 2.7. Diagrama de navegación: Usuario anónimo

31
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Figura 2.8. Diagrama de navegación: Usuario competidor

32
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Figura 2.9. Diagrama de navegación: Usuario entrenador

Figura 2.10. Diagrama de navegación: Usuario administrador

2.5. Modelo de datos


Un modelo de datos es un conjunto de herramientas conceptuales para describir datos, sus
relaciones, su significado y sus restricciones de consistencia. Este permite describir los
elementos de la realidad que intervienen en un problema dado y la forma en que se
relacionan esos elementos entre sí.

33
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

2.5.1. Diagrama entidad-relación


En la figura 2.11 se muestra el diagrama entidad-relación del modelo de datos del sistema
propuesto.

Figura 2.11. Diagrama de la base de datos: Modelo entidad-relación

Como se puede observar en modelo existen dos casos de herencia, en la relación “Usuario”
y “Tarea”. Al transformar este modelo al modelo relacional en el caso de herencia de la
relación “Usuario”, los atributos de los subtipos pasan al supertipo, y en el caso de
herencia de la relación “Tarea”, se mantienen las tres relaciones “Tarea”, “Tarea
atendida” y “Tarea desatendida”, propagándose la llave del supertipo a los subtipos.

2.6. Modelo de implementación


El diagrama de componentes describe los elementos físicos del sistema y sus relaciones,
mostrando opciones de realización, incluyendo código fuente, binario y ejecutable. Los
componentes representan todos los tipos de elementos software que entran en la fabricación
de aplicaciones informáticas y pueden ser simples archivos, cabeceras, bibliotecas
compartidas, módulos, ejecutables, o paquetes(Grady Booch, 1998). En la figura 2.12 se
muestra el diagrama de componentes del sistema propuesto. Como puede observarse se
emplearon bibliotecas de JavaScript para darle una mayor organización y funcionalidad al
sistema. El resto de los componentes fueron implementados siguiendo los estándares para
el desarrollo con Symfony2.

34
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Figura 2.12. Diagrama de componentes

2.7. Modelo de despliegue


El diagrama de despliegue (2013a) se utiliza para modelar el hardware utilizado en las
implementaciones de sistemas y las relaciones entre sus componentes. En este tipo de
diagrama no existen actores para relacionarse con los nodos, todas las relaciones que
pueden existir siempre serán entre los nodos.
En la figura 2.13 se muestra el diagrama de despliegue de la aplicación propuesta. El
diagrama está compuesto por un servidor Web, un servidor de base de datos y un conjunto
de máquinas para el cliente.
La máquina del cliente permite a los usuarios interactuar directamente con la aplicación. El
servidor Web se encarga de ejecutar el código PHP, así como interactuar con el servidor de
bases de datos y garantizar una interacción más fuerte entre el cliente y el servidor.

35
CAPÍTULO 2: DISEÑO E IMPLEMENTACIÓN

Figura 2.13. Diagrama de despliegue

Consideraciones finales del capítulo

En este capítulo se hizo un análisis de los diferentes requisitos funcionales que tiene el
sistema propuesto. Estos requisitos se modelaron a través del diagrama de casos de uso,
donde se refleja su relación con cada uno de los actores del sistema. Se hizo un análisis del
diseño y la implementación planteando la concepción general del sistema, apoyado en los
diagramas de actividad, diagramas de colaboración, diagramas de navegación, diagrama de
entidad-relación, diagrama de componentes y el diagrama de despliegue.
Con ayuda del framework de desarrollo Symfony2 se logró implementar el sitio Web que
permite dar seguimiento diferenciado al entrenamiento de los estudiantes que participan en
el concurso de programación del ACM-ICPC. Además este sistema puede ser empleado
con fines docentes para la realización de actividades prácticas de los estudiantes en
diferentes materias impartidas en carreras con perfil relacionado con la computación.

36
Capítulo 3
Manual de usuario
Capítulo 3. Manual de usuario

Este capítulo brinda los conocimientos necesarios al usuario para que aprenda a trabajar en
el sitio web; es la elaboración de un manual de usuario definido como un documento de
comunicación técnica que busca brindar asistencia a los sujetos que usan un sistema.

3.1. Requerimientos no funcionales del sistema


Los requerimientos no funcionales del sistema son restricciones de los servicios o
funciones ofrecidos por el sistema. Incluyen restricciones de tiempo, sobre el proceso de
desarrollo y estándares. Los requerimientos no funcionales a menudo se aplican al sistema
en su totalidad. Normalmente apenas se aplican a características o servicios individuales del
sistema. Los requerimientos no funcionales, como su nombre sugiere, son aquellos
requerimientos que no se refieren directamente a las funciones específicas que proporciona
el sistema, sino a las propiedades emergentes de éste como la fiabilidad, el tiempo de
respuesta y la capacidad de almacenamiento. De forma alternativa, definen las restricciones
del sistema como la capacidad de los dispositivos de entrada/salida y las representaciones
de datos que se utilizan en las interfaces del sistema. (Sosa, 2010)

3.1.1. Requerimientos de hardware


En cuanto a requisitos de hardware en el servidor donde se instalará el sitio Web
desarrollado no hay requerimientos en cuanto al tipo de PC a emplear, sólo es necesario
que disponga de una tarjeta de red y al menos 256 Mb de espacio disponible en disco.

3.1.2. Requerimientos de software


En el servidor donde se instalará el sitio es necesario tener instalado un servidor Web con
soporte para PHP 5.3 o superior y un gestor de bases de datos, MySQL o PostgreSQL. El
sistema propuesto es independiente del sistema operativo donde se ejecuta. Por otra parte
en los clientes sólo es necesario tener un navegador Web para que los usuarios puedan
acceder al sitio.

3.2. Guía para el usuario

El sitio Web para el entrenamiento en línea sobre programación competitiva para los
concursos del ACM-ICPC es una aplicación que permite gestionar toda la información de

37
CAPÍTULO 3: MANUAL DE USUARIO

los entrenamientos asignados a los competidores de forma diferenciada. Esta aplicación


cuenta con interfaces sencillas y amigables, que permiten a los usuarios agilizar y
perfeccionar su trabajo. En la figura 3.1 se muestra la página inicial del sitio, donde se
brinda información general del sistema y la posibilidad de autenticarse o registrarse en el
sistema.

Figura 3.1. Página inicial del sitio

3.2.1. Acceso al sistema


Para acceder al sistema se debe utilizar un navegador Web. Cada usuario registrado tiene
sus privilegios que le permiten navegar por el sitio con diferentes permisos y restricciones.
Existen cuatro roles de usuarios según sus permisos como se describe en la tabla 3.1, estos
son: usuario anónimo, competidor, entrenador y administrador.
Tabla 3.1 .Roles de usuarios del sistema

Rol Descripción

Usuario anónimo El usuario anónimo sólo puede acceder a la información


general del sistema y registrarse en el sistema.

38
CAPÍTULO 3: MANUAL DE USUARIO

Competidor El competidor puede realizar las tareas que dan


cumplimiento a los entrenamientos que le son asignados.
Puede consultar información de los entrenamientos del
sistema y sus tareas. También puede acceder a los
documentos del sistema y intercambiar opiniones con otros
usuarios a través del propio sistema.

Entrenador El entrenador es el responsable de gestionar los


entrenamientos y las tareas asociadas a cada entrenamiento.
También es responsable de asignar sus entrenamientos a los
competidores que considere pertinente. Puede consultar
información de todos los entrenamientos del sistema y sus
tareas. Como se explicó en el capítulo anterior todos los
usuarios registrados en el sistema son competidores, por lo
que el entrenador también puede realizar tareas que dan
cumplimiento a los entrenamientos que le son asignados por
otro entrenador.

Administrador El administrador es el responsable de gestionar la


información básica del sistema, por ejemplo las
instituciones, usuarios y las solicitudes de entrenador. Como
se explicó en el capítulo anterior todos los usuarios
registrados en el sistema son competidores, por lo que el
administrador también puede realizar tareas que dan
cumplimiento a los entrenamientos que le son asignados.

En la figura 3.2 se muestran las opciones del menú de navegación vertical para el usuario
competidor. Las opciones más importantes para este rol de usuario son “Mis
entrenamientos”, “Mis tareas enviadas” y “Mis tareas erróneas”, las cuales serán
descritas posteriormente.

39
CAPÍTULO 3: MANUAL DE USUARIO

Figura 3.2. Menú de navegación del usuario competidor

En la figura 3.3 se muestran las opciones del menú de navegación vertical para el usuario
entrenador, donde podemos resaltar que las opciones más importantes en este caso son
“Entrenamiento”, “Asignaciones” y “Revisar”, las cuales serán descritas posteriormente.

Figura 3.3. Menú de navegación del usuario entrenador

En la figura 3.4 se muestran las opciones del menú de navegación vertical para el usuario
administrador, donde todas las opciones serán descritas posteriormente.

Figura 3.4. Menú de navegación de usuario administrador

3.2.2. Composición del sitio


La página principal del sitio para los usuarios autenticados en el sistema está compuesta por
un menú vertical y otro en la parte superior del área de contenido de forma horizontal,
como se muestra en la figura 3.5. A través del menú vertical el usuario puede acceder a
todas las opciones permitidas según su rol de usuario en el sistema, y a través del menú
vertical puede acceder a la información general del sistema.

40
CAPÍTULO 3: MANUAL DE USUARIO

Figura 3.5. Página inicial de un usuario autenticado

3.2.3. Usuario competidor


A continuación se describen las diferentes opciones a las cuales puede acceder el usuario
competidor a través del menú de navegación vertical.

3.2.3.1. Mis entrenamientos


La opción “Mis entrenamientos” muestra una lista de los entrenamientos que le han sido
asignados al competidor por un entrenador, como se muestra en la figura 3.6. El usuario
tiene la posibilidad de acceder a la información detallada del entrenamiento y a los
documentos asignados a cada entrenamiento.

Figura 3.6. Listado de entrenamientos asignados al usuario autenticado

41
CAPÍTULO 3: MANUAL DE USUARIO

Cuando el usuario accede a la información detallada de un entrenamiento se le muestra una


lista de las tareas que conforman el entrenamiento, como se muestra en la figura 3.7. El
usuario tiene la posibilidad de acceder a la descripción completa de la tarea que desea
resolver y no existe un orden obligatorio en el cual los competidores deban resolver las
tareas. Cuando una tarea fue resuelta correctamente se indica con una marca de aprobación.

Figura 3.7. Listado de tareas que conforman un entrenamiento

En la figura 3.8 se muestra la descripción completa de una tarea atendida. Como se puede
observar se muestra la descripción y orientación de la tarea, además de la opción para subir
el informe que da respuesta a dicha tarea.

42
CAPÍTULO 3: MANUAL DE USUARIO

Figura 3.8. Detalles de una tarea atendida

Figura 3.9. Detalles de una tarea desatendida

43
CAPÍTULO 3: MANUAL DE USUARIO

En la figura 3.9 se muestra la descripción completa de una tarea desatendida. Como se


puede observar se muestra la descripción, la orientación y la dirección URL donde puede
ser probada la solución propuesta. Como se explicó en el capítulo anterior el sistema aún no
evalúa de forma automática este tipo de tareas.

3.2.3.2. Mis tareas enviadas


La opción “Mis tareas enviadas”, como se muestra en la figura 3.10, muestra una lista de
las tareas que el competidor ha resuelto pero que aún no han sido revisadas por el
entrenador que le asignó el entrenamiento al cual pertenecen las tareas.

Figura 3.10. Tareas enviadas por el competidor para ser revisadas por el entrenador

3.2.3.3. Mis tareas erróneas


La opción “Mis tareas erróneas” muestra una lista con las tareas que fueron revisadas por
el entrenador, pero que están incorrectas y deben ser resueltas nuevamente. Como se puede
observar en la figura 3.11 el entrenador puede dejar un comentario o sugerencia para
orientar al competidor, una vez corregida la tarea puede volver a ser enviada para ser
calificada nuevamente.

44
CAPÍTULO 3: MANUAL DE USUARIO

Figura 3.11. Tareas erróneas del competidor

3.2.3.4. Documentos
La opción “Documentos” muestra para todos los usuarios autenticados en el sistema una
lista de los documentos del sistema agrupados por categorías, como se muestra en la figura
3.12.

Figura 3.12. Listado de los documentos

45
CAPÍTULO 3: MANUAL DE USUARIO

3.2.3.5. Histórico
La opción “Histórico”, como se muestra en la figura 3.13, muestra un resumen detallado
de todos los intentos de solución de tareas del competidor, donde se almacena el
entrenamiento, la tarea, el comentario ofrecido por el entrenador, la evaluación recibida, y
la fecha de evaluación.

Figura 3.13. Historial de las tareas resueltas por el competidor

3.2.4. Usuario entrenador


A continuación se describen las diferentes opciones a las cuales puede acceder el usuario
entrenador a través del menú de navegación vertical.

3.2.4.1. Entrenamiento
La opción “Entrenamiento” permite a los entrenadores gestionar la información de sus
entrenamientos o definir nuevos entrenamientos, como se muestra en la figura 3.14. Para
definir las tareas que componen un entrenamiento es necesario acceder al entrenamiento y
luego adicionarle las tareas, como se muestra en la figura 3.15.

46
CAPÍTULO 3: MANUAL DE USUARIO

Figura 3.14. Gestión de los entrenamientos

47
CAPÍTULO 3: MANUAL DE USUARIO

Figura 3.15. Agregar tareas que componen un entrenamiento

3.2.4.2. Asignaciones
La opción “Asignaciones” permite al entrenador asignar un entrenamiento a cualquier
competidor del sistema. Como se muestra en la figura 3.16, inicialmente se muestra el
listado de las asignaciones realizadas de sus entrenamiento y a que competidores. Al final
de este listado se muestra la opción para realizar una nueva asignación.

Figura 3.16. Gestión de las asignaciones de los entrenamientos

48
CAPÍTULO 3: MANUAL DE USUARIO

3.2.4.3. Revisar
La opción “Revisar” muestra un listado de las tareas que han resuelto los competidores y
que el entrenador debe revisar. Se muestra la tarea, el competidor que la realizó y la fecha
de envío, además de la opción de calificar, donde el entrenador podrá asignar una
calificación a la tarea, como se muestra en la figura 3.17.

Figura 3.17. Listado de las tareas pendientes por revisar

3.2.5. Usuario administrador


A continuación se describen las diferentes opciones a las cuales puede acceder el usuario
administrador a través del menú de navegación vertical.

3.2.5.1. Instituciones
La opción “Instituciones” muestra un listado de las instituciones que han sido agregadas
por el administrador como se muestra en la figura 3.18. Estas instituciones son empleadas
para identificar a que institución pertenece cada usuario registrado en el sistema.

49
CAPÍTULO 3: MANUAL DE USUARIO

Figura 3.18. Listado de las instituciones

3.2.5.2. Usuarios
La opción “Usuarios” muestra un listado de los usuarios registrados en el sistema además
de las opciones de editar la información y cambiar la contraseña de cada uno de los
usuarios, como se muestra en la figura 3.19.

Figura 3.19. Listado de los usuarios registrados en el sistema

50
CAPÍTULO 3: MANUAL DE USUARIO

3.2.5.3. Solicitud entrenador


La opción “Solicitud entrenador” muestra un listado de todos los usuarios que se han
registrado en el sistema solicitando permiso para ser entrenador. El administrador es el
encargado de aceptar o rechazar esta solicitud, como se muestra en la figura 3.20.

Figura 3.20. Listado de las solicitudes para entrenador

Consideraciones finales del capítulo


La realización de un manual de usuario en el que se explican brevemente las principales
funcionalidades de cada actor, facilita la navegación por el sitio con solo tener
conocimientos básicos. Permite además conocer las secciones más importantes del sitio, las
relacionadas con los entrenadores y competidores.

51
Conclusiones
Conclusiones

En la revisión bibliográfica realizada se detectó que existen muchos jueces en línea que son
empleados como medio de entrenamiento, y pocos sistemas de entrenamiento que permitan
dar un seguimiento de la preparación de los competidores, pero ninguno permite realizar un
entrenamiento diferenciado en dependencia de las características individuales de cada
competidor.
Los requisitos funcionales de un sistema de entrenamiento fueron definidos por la
Dirección del Movimiento del ACM-ICPC en la UCLV, y rigieron todo el proceso de
desarrollo de la solución.
Se diseñó e implementó el sitio Web para el entrenamiento diferenciado de los concursantes
que participan de forma anual en los concursos de programación del ACM-ICPC. Se utilizó
Symfony2 como framework de desarrollo, Doctrine para el manejo de datos, PHP como
lenguaje de programación y MySQL como gestor de base de datos.
El sitio Web también puede ser empleado con fines docentes para la realización de
actividades prácticas de los estudiantes en diferentes materias impartidas en carreras con
perfil relacionado con la computación.
Se redactó un manual de usuario describiendo de forma práctica las funcionalidades del
sistema, el cual facilita el empleo del sistema por otros usuarios.

52
Recomendaciones
Recomendaciones

1. Implementar la evaluación automática de las tareas desatendidas a través de los Web


Services del COJ.
2. Implementar un sistema de notificación automática a través del correo electrónico.

53
Referencias bibliográficas
Referencias bibliográficas

2002. MySQL Cookbook, O'Reilly.


2004. Sistemas de Gestión de Bases de datos y SIG.
2006. Test de Turing [Online]. Available:
http://www.dmae.upm.es/cienciaficcion/DIVULGACION/3/TestTuring.htm
[Accessed 24 mayo 2013].
2009a. IntelliJ IDEA [Online]. Available: http://www.software.com.ar/intellij-idea.html
[Accessed 24 mayo 2013].
2009b. Manual de PERL.
2009c. The Zope2 Book.
2010a. Concurso Internacional de Programación de la ACM en la Universidad de las
Ciencias Informáticas [Online]. Available:
http://www.cubadebate.cu/noticias/2010/10/24/concurso-internacional-de-
programacion-acm-universidad-ciencias-informaticas/ [Accessed 2013].
2010b. Practical symfony, second edition. Symfony 1.2 | Propel.
2011. Una descripción general de DB2 [Online]. Available: http://adsisena2011-
2013.bligoo.com.co/arquitectura-db2#.UZ_xwPKLqVo [Accessed].
2012a. Manual de operación control de torque V1.5 [Online]. Available:
http://es.pdfsb.com/readonline/5a31684365673131566e42344158396a56413d3d
[Accessed 24 mayo 2013].
2012b. Premio Loebner: [Online]. Available: http://dicyg.fi-
c.unam.mx:8080/lalo/news/concurso-por-el-premio-loebster-de-inteligencia-
artificial-2012 [Accessed 24 mayo 2013].
2012c. Qué es un servidor web ? [Online]. Available: http://www.misrespuestas.com/que-
es-un-servidor-web.html [Accessed].
2013a. About ACM-ICPC [Online]. Available: http://icpc.baylor.edu/ [Accessed 8-junio
2013].
2013b. AOL SERVER [Online]. Available: http://www.aolserver.com/ [Accessed mayo
2013].
2013c. IBM sponsorship [Online]. Available:
http://www.ibm.com/developerworks/university/students/contests/acm/index.html#
5 [Accessed].
2013d. USACO training gateway [Online]. Available:
http://discuss.codechef.com/questions/8517/broken-necklaceusaco-training-gateway
[Accessed 24 mayo 2013].
Mar 05, 2007. Paradigma Visual para UML [Online]. Available:
http://www.freedownloadmanager.org/es/downloads/Paradigma_Visual_para_UML
_%28M%C3%8D%29_14720_p/ [Accessed mayo 17 2013].

54
REFERENCIAS BIBLIOGRÁFICAS

mayo, 2013. Apache Gets Fortified for the Enterprise [Online]. Available:
http://www.serverwatch.com/stypes/servers/article.php/17073_3516651 [Accessed
mayo 2013].
A.D.L.TORRE. 2006. Lenguajes del lado del servidor o cliente.
Á.M.ECHEVERRÍA. 1995. Manual práctico de HTML, MADRID, ESPAÑA.
ABELA, C. Imperative and Object Oriented Programming.NetBeans Tutorial. In:
INTELLIGENCE, D. O. A. (ed.).
ALBIOL, F. R. 2003. INTRODUCCIÓN A HIBERNATE.
ALVAREZ, J. C. L. G. Y. J. L. R. 2012a. Desarrollo de la versión 2 del Juez Caribeño en
Línea. Trabajo de Diploma para optar por el título de Ingeniero en Ciencias
Informáticas, Universidad de las Ciencias Informáticas(UCI).
ALVAREZ, M. A. 2012b. Manual de CodeIgniter.
ANDREADIS, D. 2008. Introduction to JBoss Application Server 5.0.
ARNAL, D. M. 2007. Conceptos de web 2.0 y biblioteca 2.0: origen, definiciones y retos
para las bibliotecas actuales. 12.
BERGSTEN, H. August 2002 JavaServer Pages™, 2nd Edition O'Reilly.
BOLTON, D. 2007. The Sphere Online Judge (SPOJ) [Online]. Available:
http://cplus.about.com/b/2007/05/04/the-sphere-online-judge-spoj.htm [Accessed 24
mayo 2013].
BRITTAIN, I. E. D. J. Tomcat:The Definitive Guide.
BURO, M. 2010. ORTS - A Free Software RTS Game Engine [Online]. Available:
https://skatgame.net/mburo/orts/ [Accessed junio 2013].
D.P.VALDEZ. 2007. Los diferentes lenguajes de programación para la web.
EGUILUZ, J. 20 de febrero de 2008. Introducción a JavaScript.
EGUILUZ, J. 2012. DESARROLLO WEB ÁGIL CON SYMFONY2.
FOUNDATION, C. S. 2013. CakePHP Cookbook Documentation.
GRADY BOOCH, J. R., IVAR JACOBSON, 1998. The Unified Modeling Language User
Guide, Addison Wesley.
J.E.PÉREZ. 2009. Introducción a CSS.
JAMES RUMBAUGH, I. J., GRADY BOOCH 2000. El Lenguaje Unificado de modelado.
Manual de Referencia, Madrid.
KAPLAN-MOSS, A. H. Y. J. 2008. El libro de Django.
KEMPER, P. Android SQLite Database.
LILIAN HOBBS, S. H., SHILPA LAWANDE Y PETE SMITH 2005. Oracle Database
10g Data Warehousing.
LOCKHART, T. Tutorial de PostgreSQL El equipo de desarrollo de PostgreSQL.
LTD., Z. T. Mayo, 2013. Zend Framework 2 Documentation Release 2.2.0rc3.
MATZ 2006. Guía del usuario de Ruby.
MENDEZ, M. B. C. M. M. 2009. Frameworks para el desarrollo de aplicaciones con
PHP., Ciudad de la Habana. Cuba.

55
REFERENCIAS BIBLIOGRÁFICAS

MICHAEL R. GROH, J. C. S., GAVIN POWELL, CARY N. PRAGUE,MICHAEL R.


IRWIN, AND JENNIFER REARDON 2007. Access™ 2007 Bible.
MISNER, R. M. A. S. 2012. Introducing Microsoft SQL Server 2012.
ORSÁG, J. 2006. OBJECT-RELATIONAL MAPPING. COMENIUS UNIVERSITY,
BRATISLAVA
FACULTY OF MATHEMATICS, PHYSICS AND INFORMATICS.
PACHECO, D. P. T. T. P. N. Noviembre 03, 2011. Doctrine 2 ORM Documentation
Release 2.1.
PACHECO, N. 2011. Manual de Symfony2, Release 2.0.1.
PARK, J. 2013. CS 97SI: INTRODUCTION TO PROGRAMMING CONTESTS.
PEARSON, C. 2006. Battle of the Brains [Online]. Available:
http://battleofthebrains.podbean.com/about/ [Accessed].
PONCE, M. E. Á. 2011. Cuba a la final de Mundial Universitario de Programación
[Online]. Available: http://www.cubadebate.cu/noticias/2011/05/24/cuba-a-la-final-
de-mundial-universitario-de-programacion/ [Accessed].
POUCHER, M. 2011. The Early Years.
POWERS, S. 2004. ASP Components.
R.R.HINOSTROZA. 2005. Características de PHP.
REVILLA, S. S. S. A. M. A. 2002. Programming Challenges - The Programming Contest
Training Manual, Springer.
RIVAS, L. A., PÉREZ, M., MENDOZA, L. E. & GRIMÁN, A. 2006. Herramientas de
Desarrollo de Software: Hacia la Construcción de una Ontología.
ROD JOHNSON, J. H., ALEF ARENDSEN, COLIN SAMPALEANU,, ROB HARROP,
T. R., DARREN DAVISON, DMITRIY KOPYLENKO, MARK POLLACK,
THIERRY, TEMPLIER, E. V., PORTIA TUNG, BEN HALE, ADRIAN COLYER,
JOHN LEWIS, COSTIN LEAU, & MARK FISHER, S. B., RAMNIVAS
LADDAD, ARJEN POUTSMA 2008. The Spring Framework - Reference
Documentation Version 2.5.6.
ROSSUM, G. V. 16 de octubre de 2000. Guía de aprendizaje de Python Release 2.0.
SAASEN, S. 2006. Ruby on Rails Active Record.
SAMIR E. ASHOO, T. B., AND DOUGLAS A. LANE. . 2011. PC^2 Home Page
[Online]. Available: http://www.ecs.csus.edu/pc2/ [Accessed 8 de junio 2013].
SOSA, A. G. O. 2010. Ingeniería en Sistemas Computacionales.
SWIG & HE, J. 2013. Java applets.
YING FUCHEN, X. P., XIE DI. 2003. PKU JudgeOnline [Online]. Available:
http://poj.org/ [Accessed].

56

También podría gustarte