• No se han encontrado resultados

Sistema informático para el entrenamiento en línea sobre programación competitiva para los concursos del ACM ICPC

N/A
N/A
Protected

Academic year: 2020

Share "Sistema informático para el entrenamiento en línea sobre programación competitiva para los concursos del ACM ICPC"

Copied!
77
0
0

Texto completo

(1)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.

(2) “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.

(3) 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..

(4) 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..

(5) 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..

(6) 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..

(7) 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..

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

(9) 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..

(10) 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..

(11) 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.

(12) 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.

(13) 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.

(14) 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.

(15) Introducción.

(16) 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.

(17) 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.

(18) 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.

(19) 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.

(20) Capítulo 1 Fundamentación teórica.

(21) 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.

(22) 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.

(23) 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.

(24) 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.

(25) 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.

(26) 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.

(27) 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-vistacontrolador (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 vistacontrolador (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.

(28) 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.

(29) 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.

(30) 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.

(31) 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.

(32) 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.

(33) 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.

(34) 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.

(35) 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.

(36) 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.

(37) 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.

(38) Capítulo 2 Diseño e implementación.

Figure

Figura 2.1. Diagrama de casos de uso
Figura 2.2. Diagrama de actividades: Insertar entrenamiento
Figura 2.3. Diagrama de actividades: Realizar tarea atendida
Figura 2.4. Diagrama de colaboración: Insertar entrenamiento
+7

Referencias

Documento similar

A partir de los resultados de este análisis en los que la entrevistadora es la protagonista frente a los entrevistados, la información política veraz, que se supone que

El Programa de Mecenazgo organiza un concurso para "Amigos del IAC" en el cual podrán realizar una propuesta de observación para un telescopio robótico 1. Aquellas que

El modelo de negocio es un anteproyecto relativo a la estrategia de la empresa que se aplicará a todas las estructuras, procesos y sistemas (Osterwalder, Pigneur y

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

Missing estimates for total domestic participant spend were estimated using a similar approach of that used to calculate missing international estimates, with average shares applied

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

En cada antecedente debe considerarse como mínimo: Autor, Nombre de la Investigación, año de la investigación, objetivo, metodología de la investigación,

Partiendo de las ideas sobre el liberalsocialismo en el pensamiento de Norberto B OBBIO y hallando en el ámbito del constitucionalismo el terreno propicio, no ya para un