Aplicaciones Web

19 Proyecto de clase

Introducción

El siguiente texto es una descripción muy general, a vista de pájaro o a tres metros sobre el cielo, del proyecto que se desarrollará a lo largo del curso.

En una situación real, puedes comenzar un proyecto a partir de diferentes escenarios, como por ejemplo:

  • Puede ser que tengas que iniciar el proyecto desde cero a partir de una o varias entrevistas con el cliente que te solicita la realización del proyecto. El cliente es la persona (que puede representar a una empresa u organización), que te solicita el proyecto y puede ser un cliente "de verdad", es decir, alguien ajeno a la empresa en la que trabajas, puede ser un departamento de tu propia empresa, puede ser tu vecino o familiar que te viene con el rollo de "¿me puedes hacer una web?, eso para ti es fácil, lo haces en una tarde y además seguro que te diviertes" o, si el proyecto es para ti, el cliente serías tú mismo.
  • Puede ser que tengas que iniciar el proyecto a partir del análisis y diseño que ha realizado previamente otra persona, como por ejemplo otro compañero de trabajo. Según el nivel de madurez del equipo de trabajo, puede ser que inicies tu trabajo a partir de unas pocas hojas con manchas de café, a partir de una descripción textual y algunos diagramas informales, o en el otro extremo, puede ser que se disponga de una amplia documentación alojada en un repositorio compartido que incluso incluye control de versiones (si se da ese caso, significa que alguien del equipo ha trabajado antes en la NASA, seguro).
  • Puede ser que tengas que iniciar el proyecto a partir de un proyecto a medio hacer, o incluso, un proyecto ya terminado al que hay que cambiarle algo, añadirle algo nuevo o hacerle "unos pequeños retoques" (mantenimiento de software, lo que ningún informático quiere hacer: ¿Por qué a la mayoría de los programadores no les gusta modificar el código de otros programadores?). Esto es bastante ingrato, se puede convertir en un verdadero infierno (hasta con el software hecho por uno mismo) y es mejor que no pensemos en ello.

En este curso, el escenario es una mezcla entre el primero y el segundo, porque en algunos momentos la información que recibirás es la misma que puedes recibir de un cliente medio:

Cliente: quiero una web.

Desarrollador: ¿qué tipo de web?

Cliente: pues una web.

Desarrollador: ¿y cómo la quiere?

Cliente: sorprendente, única, que deje a la gente con la boca abierta.

Desarrollador: ¿y qué presupuesto tiene?

Cliente: ¿Ehhh, es que te tengo que pagar?

Sin embargo, en otras ocasiones (por ejemplo, en el diseño de la base de datos) recibirás una información más completa y detallada, como si la hubiese realizado un compañero de trabajo.

El objetivo de este escenario mixto es que en algunas partes tengas libertad para pensar, ser creativo e intentar encontrar la mejor solución por ti mismo, mientras que en otras partes estarás limitado a hacer lo que se te pida y tendrás que cumplir la especificación ``al pie de la letra''.

Muy importante: la siguiente descripción, y la que se te proporcionará en el resto de las prácticas, no está basada en ninguno de los formalismos que se emplean en la ingeniería del software para la recogida de requisitos y el análisis y el diseño del software. En un proyecto real deberías de aplicar las buenas prácticas de la ingeniería del software.

Descripción del sistema

Con esta práctica vamos a empezar el desarrollo de un sitio web de gestión de álbumes de fotos llamado "PI - Pictures & Images" (este es el nombre que nosotros le hemos dado, tú lo puedes llamar como quieras).

El objetivo es crear un sistema gestor de álbumes de fotos que admita múltiples usuarios, una especie de flickr, pero de juguete. Un usuario se tendrá que registrar para poder emplear el sistema y publicar fotos. Una vez registrado podrá crear todos los álbumes que quiera y en cada álbum podrá publicar todas las fotos que quiera. Para visualizar las fotos no es necesario estar registrado: cualquiera puede ver los álbumes y sus fotos, aunque no todo.

Desde el punto de vista del control de acceso (seguridad), la aplicación web (o sitio web) está divida en tres partes:

  • La parte pública es la parte abierta a la que tiene acceso cualquier usuario, ya que no hace falta estar registrado para su consulta.
  • La parte pública restringida es la parte abierta a la que sólo tienen acceso los usuarios que estén registrados y se hayan identificado. Es pública porque es común a múltiples usuarios (no es única a cada usuario), pero es restringida porque sólo es accesible por los usuarios registrados.
  • La parte privada} es la parte personal de cada usuario, a la que sólo tiene acceso el usuario correspondiente.

En la página principal se mostrará, entre otras cosas, un formulario de acceso a la parte privada y un enlace para registrase como nuevo usuario. También se mostrará un listado con las últimas fotos subidas y un enlace para ir a la página con el formulario de búsqueda, que contiene un formulario para poder realizar búsquedas de fotos en base a diferentes criterios, como por ejemplo, el título de la foto, la fecha de realización de la foto, o el país en el que se tomó la foto.

Además, en la página principal se tiene que incluir un apartado de "fotos seleccionadas" donde se muestran, de entre todas las fotografías existentes en los álbumes, algunas fotografías seleccionadas por críticos de fotografía. Las fotografías seleccionadas se seleccionan a mano y se gestionan mediante un fichero de texto en el que se almacena una referencia a las fotografías seleccionadas, junto con el nombre de la persona que ha seleccionado cada fotografía y un comentario que explica las razones de dicha selección. Cada vez que se cargue la página principal se tiene que elegir una fotografía distinta seleccionada de forma aleatoria: se tiene que mostrar la fotografía, la información disponible sobre ella, el nombre de la persona que la ha seleccionado y su comentario.

La página de registro como nuevo usuario contiene un formulario con los datos necesarios para registrarse:

  • Nombre de usuario.
  • Contraseña.
  • Repetir contraseña.
  • Dirección de email.
  • Sexo.
  • Fecha de nacimiento.
  • Ciudad de residencia.
  • País de residencia.
  • Foto.

La página de resultado de una búsqueda contiene un listado con un resumen (foto, título, fecha y país) de las fotos que cumplen los criterios de una búsqueda (el criterio de la búsqueda se debe visualizar en la página). El usuario pueda ordenar, de forma ascendente y descendente, el listado resultado de una búsqueda de fotos por los campos título, fecha y país. El proceso de ordenación se tiene que realizar en la misma página, en el lado del cliente, sin recargarla.

Los formularios de la parte pública de la aplicación poseen ciertas restricciones que se deben comprobar tanto en el lado del cliente como en el lado del servidor:

  • Página principal: contiene un formulario (nombre de usuario y contraseña) para acceder como usuario registrado. Antes de enviar el formulario, debes comprobar que el usuario ha escrito algo en ambos campos, pero evita que el usuario escriba únicamente espacios en blanco o tabuladores.
  • Página con el formulario de registro como nuevo usuario: contiene un formulario con los datos necesarios para registrarse (nombre de usuario, contraseña, repetir contraseña, dirección de email, sexo, fecha de nacimiento, ciudad y país de residencia, foto). Antes de enviar el formulario, debes realizar las siguientes comprobaciones:
    • nombre de usuario: sólo puede contener letras del alfabeto inglés (en mayúsculas y minúsculas) y números; longitud mínima 3 caracteres y máxima 15.
    • contraseña: sólo puede contener letras del alfabeto inglés (en mayúsculas y minúsculas), números y el subrayado; al menos debe contener una letra en mayúsculas, una letra en minúsculas y un número; longitud mínima 6 caracteres y máxima 15.
    • repetir contraseña: su valor debe coincidir con el escrito en el campo contraseña.
    • dirección de email: no puede estar vacío, hay que comprobar que cumple el patrón de una dirección de email (no permitir dominios principales de menos de 2 caracteres y más de 4 caracteres).
    • sexo: se debe elegir un valor.
    • fecha de nacimiento: comprobar que es una fecha válida.
    • El resto de campos no indicados se pueden quedar vacíos.

A continuación se describe el contenido de la parte pública restringida, que sólo debe ser visible para aquellos usuarios que se hayan registrado e identificado. Los usuarios no registrados o los usuarios registrados pero no identificados no pueden tener acceso a ella y se debe mostrar una página de aviso.

Cuando se visualiza la página de detalle de una foto, a la que se puede llegar de diferentes formas, como por ejemplo a partir del listado con las últimas fotos subidas desde la página principal o a partir de la página de resultado de una búsqueda, se debe mostrar la foto y toda la información disponible sobre la foto, como por ejemplo, el título de la foto, la fecha de realización de la foto, el país en el que se tomó la foto, el álbum al que pertenece la foto y el usuario que tomó la foto.

Desde la página de detalle de una foto se puede navegar a la página para ver un álbum, que muestra todas las fotos que contiene el álbum seleccionado. A esta página también se puede navegar desde la página con el detalle del usuario.

La página con el detalle del usuario muestra todos los datos de registro del usuario y un listado de todos sus álbumes. Si se selecciona un álbum, se muestra la página para ver un álbum con todas las fotos que contiene.

Muy importante: el objetivo de la práctica del curso es aprender a desarrollar aplicaciones web, el objetivo no es desarrollar una aplicación web "sorprendente, única, que deje a la gente con la boca abierta", como te pediría el típico cliente. Es decir, puedes pensar que hay cosas inútiles, tontas o que se podrían haber hecho mejor: puedes tener razón, pero no pasa nada, porque la aplicación que vas a desarrollar es simplemente una excusa para que practiques y aprendas. Cuando la termines, deberías tirarla a la basura, porque te darás cuenta de que si la tuvieras que volver a hacer, la harías de una forma totalmente diferente. Por supuesto, dentro de 15 semanas no sabrás lo mismo que ahora, no serás la misma persona, hoy es el primer día del resto de tu vida como desarrollador web. Recuérdalo, no lo olvides.

A continuación se describe el contenido de la parte pública restringida, que sólo debe ser visible para aquellos usuarios que se hayan registrado e identificado. Cada usuario tiene acceso a su parte privada que le muestra exclusivamente la información asociada a ese usuario. Para acceder a la parte privada un usuario se debe identificar con su nombre de usuario y su contraseña.

El formulario de acceso como usuario registrado debe ofrecer la opción de "recordarme en este equipo" para que el usuario no se tenga que identificar en próximas visitas. Cuando se esté recordando a un usuario, en vez del formulario de acceso se tienen que mostrar el nombre del usuario recordado y dos botones o enlaces: uno que permita acceder a la parte privada con el usuario recordado y otro que borre los datos del usuario recordado y permita acceder con otro usuario.

La página menú de usuario registrado contiene las funciones que puede realizar un usuario registrado: modificar sus datos, darse de baja, visualizar sus álbumes, crear un álbum nuevo y añadir una foto a un álbum.

La página mis datos permite al usuario visualizar y modificar sus datos de registro. En el formulario de modificación se tienen que mostrar los datos actuales del usuario.

La página darme de baja elimina al usuario de la base datos. Antes de realizar, la operación debe solicitar la confirmación del usuario para evitar que se produzca la operación de forma accidental.

La página mis álbumes muestra un listado con todos los álbumes del usuario. Desde esta página se puede acceder a la página ver álbum, que muestra todas las fotos que contiene un álbum concreto.

La página añadir foto a álbum contiene un formulario con los datos necesarios para añadir una foto (título, fecha, país, foto y álbum al que se añade la foto).

La página crear álbum contiene un formulario con los datos necesarios para crear un álbum (título, descripción, fecha y país).

Por último, la opción salir finaliza la sesión del usuario e impide un acceso posterior sin antes volver a introducir un nombre de usuario y una contraseña o volver a acceder como usuario recordado en el equipo.