domingo, 2 de octubre de 2016

Análisis y diseño de sistemas

Caso de estudio "Sistema para automatizar asistencia a clase"

En este post voy a hablar sobre el análisis y diseño de un sistema para automatizar la asistencia a clase.
Cuando asistimos a clases el profesor o profesora toma una hoja en blanco, en donde coloca títulos de los datos que debe llenar el estudiante en esa hoja que por lo general es el nombre, apellido, cédula y firma. Esto se va pasando de estudiante en estudiante que van firmando esa lista para que el profesor pueda ir generando un control de asistencias. A primera vista vemos este proceso sencillo, pero que pasa si queremos generar un sistema que haga esto y ahorre las hojas usadas para esto, y que garantice que los estudiantes que firmaron sean los pertenecientes a esa clase, o que haya firmado todos los presentes y no que alguien firme por otro.

A primera vista pareciera que al tomar la asistencia solo se debe guardar la información de los estudiantes y ya, pero no es así, debemos ir mas allá, debemos saber cuales estudiantes, si el estudiante pertenece a la universidad, si pertenece a la facultad, si esta inscrito en la materia, si está activo como estudiante y si esta activo en el período actual (semestre), además de saber si la clase a la que entra tiene un profesor asignado. 

El ser estudiante es una condición (voy a llamarlo así) que comienza desde el día en que nos inscribimos (Inscripción en Secretaría, luego en la facultad y escuela) y luego cuando inscribimos el semestre y las materias disponibles. Al culminar estas inscripciones como estudiantes, estamos habilitados (Activos) en el semestre y materias que inscribimos, y sabemos que aulas, horarios y profesores nos fueron asignados. Hasta este momento tenemos entonces ya una cierta cantidad de información que nos identifica:
  • Somos estudiantes activos de la UCV
  • Somos estudiantes activos de la facultad de Ciencias
  • Somos estudiantes activos de la escuela de Computación (en este caso)
  • Estamos activos para el semestre (en este caso 1-2016)
  • Y tenemos materias inscritas, aulas y profesores asignados.
Ahora, ¿que tiene que ver esto con el sistema a desarrollar? Tiene mucho que ver ya que si no somos estudiantes de la UCV, o somos de otra facultad o escuela, o no estamos inscritos en el semestre en el que se está dando la materia, o no estamos activos (Suspendido, Materia Retirada, Egresado) no deberíamos aparecer en el Sistema a desarrollar como un estudiante al cual se le deba tomar asistencia.

Este sistema es una herramienta para uso del profesor, ya que es el encargado de pasar la asistencia, pudiese ser también de acceso al estudiante, pero que este no tenga posibilidad alguna de crear, editar o borrar información del sistema, que en dado caso solo pueda ver sus asistencias.

Hemos hablado del profesor en este sistema ¿cual profesor? Al igual manera que el estudiante, el profesor, debe ser un profesor activo de la universidad, de la facultad y de la escuela y debe estar asignado a dictar una cátedra (materia) en un periodo (semestre) y en un horario y aula especifico.

En resumen, para efectos de automatizar la asistencia para la materia Introducción a la Informática, debe suceder que el Estudiante sea un estudiante (valga la redundancia) de la UCV, de la Facultad de Ciencias, de la Escuela de Computación, estar activo y estar inscrito en el semestre en que se está dictando la materia, y por supuesto estar inscrito en la materia, sin estas condiciones el estudiante no debería de aparecer en el listado de asistencia.

Igualmente como se ha mencionado el profesor debe ser de la UCV, de la Facultad de Ciencias, de la Escuela de Computación, estar activo, estar asignado al semestre y materia, de esta forma el profesor podrá ver en el sistema a que estudiantes les va a pasar la lista.

Si el estudiante tiene un estatus distinto al activo (Retirado, Suspendido, Egresado) no debería aparecer en el listado que el profesor verá, también si retiró la materia tampoco debería aparecer.

Estudiando todos estos escenarios nos lleva a describir no solamente el objeto Estudiante, sino también el objeto Profesor, Materia, Horario, Semestre, Escuela, Carrera, Facultad, Universidad. A lo largo del desarrollo lo mas probable es que sigamos descubriendo mas objetos que se relacionen con los ya mencionados.

PD : Mi nombre no es Javier, sino Jhonny.
Análisis y diseño de sistemas

En este post hablaré sobre el Análisis y diseño de sistemas.

Para crear cualquier tipo de sistemas, debe estudiarse a fondo lo que se desea hacer, cual es el requerimiento del usuario o cliente. Antes del desarrollo debe haber una investigación preliminar del sistema a desarrollar, de la entrada y salida de datos que tendrá, relaciones, almacenamiento de datos, etc.

Voy a citar del libro "Análisis y diseño de Sistemas" de Kendall y Kendall la necesidad del análisis y diseño de sistemas.
El análisis y diseño de sistemas, tal como lo realizan los analistas de sistemas, tiene el propósito de analizar sistemáticamente la entrada o el flujo de datos, procesar o transformar datos, el almacenamiento de datos y la salida de información en el contexto de una empresa en particular. Más aún, el análisis de sistemas se emplea para analizar, diseñar e implementar mejoras en el funcionamiento de las empresas, a través de sistemas de información computarizados.
Tal cómo se menciona, el analista de sistema debe analizar el flujo de información que tendrá el sistema. El análisis de sistemas también ayuda a generar la estructura del sistema y llegar a la necesidad del cliente. Cito en este momento un articulo de la página web de la "Red Escolar Nacional (RENa)" que habla del análisis y diseño de sistemas y que complementa la necesidad de hacer análisis y diseño de sistemas.
El análisis y diseño de sistemas es una guía que permite estructurar el proceso de desarrollo de sistemas de información.
Tal proceso siempre representará un esfuerzo, inversión de tiempo y recursos por parte de la organización. Acometer tal esfuerzo de manera casual, presenta un alto grado de riesgo al no garantizar la culminación del proyecto con éxito. Este procedimiento permite reducir al mínimo el riesgo de fracaso de nuevos proyectos, pues es común que muchos errores surjan al utilizar nuevos sistemas de información, bien por no adaptarse correctamente a las necesidades reales o por desempeñarse de forma inadecuada.
El análisis y diseño de sistemas es un procedimiento para la resolución de problemas, que podemos evaluar en un ciclo de vida de desarrollo de sistemas, en los cuales podemos ver los procedimientos que se van dando desde el conocimiento e investigación del problema hasta su implementación.

En el libro "Análisis y diseño de Sistemas" de Kendall y Kendall nos mencionan 7 pasos en el ciclo de vida de desarrollo de sistemas que podemos ver en esta gráfica




Identificar el problema
Esta primera fase tiene como finalidad identificar el problema, oportunidades y objetivos. Es un paso vital para el desarrollo del sistema, ya que si no conocemos lo que realmente quiere el usuario o cliente podemos cometer errores durante el desarrollo lo que conllevaría a no llegar al resultado esperado. Se requiere en esta fase que el analista de sistema , en conjunto con el usuario o cliente, determine con precisión cual es el problema.
El determinar los objetivos es también una parte importante en esta fase, ya que se debe averiguar lo que el cliente desea.

Determinar los requerimientos
En esta fase el analista de sistemas determina los requerimientos de información del cliente. El analista en esta fase trata de comprender la información que necesita el cliente para llevar a cabo sus actividades. Para comprender dicha información el analista usa una serie de métodos como entrevistas, cuestionarios, investigaciones entre otras. Esta fase es útil para que el analista confirme la idea que tiene del cliente y de sus objetivos. 
El analista en esta fase determinará las funciones del sistema: el quien (Gente involucrada), el qué (la actividad del negocio), el dónde (el entorno donde se desarrollan las actividades), el cuándo (el momento oportuno) y el cómo (la manera en que se realizaran los procedimientos) del negocio que se estudia. Si ya existe un sistema en uso, el analista debe determinar todas estas cosas con el sistema actual para poder diseñar un nuevo sistema.

Análisis de las necesidades
En esta fase se analiza las necesidades del sistema. A través de ciertas herramientas como el diagrama de flujo de datos, el analista grafica las entradas, procesos y salidas de las funciones del sistema. A partir de esto se desarrolla una lista de datos a usar en el sistema así como sus especificaciones. También, se analiza las decisiones estructuradas, que son aquellas en las cuales se pueden determinar las condiciones, alternativas y acciones.
En este punto el analista prepara una propuesta de sistema en la que sintetiza su investigación, un análisis costo/beneficio de las alternativas y recomendaciones sobre lo que se debe hacer. Si el cliente considera factible las recomendaciones, se continua con el ciclo de vida.

Diseño del sistema
En esta fase, el analista utiliza la información recopilada en las primeras fases para realizar el diseño lógico del sistema. Se diseñan los procedimientos para la captura de datos y que el ingreso de estos sean correctos. Facilitará la entrada eficiente de datos mediante el diseño de formularios y pantallas.
También diseñará la interfaz gráfica de usuario que conecta al usuario con el sistema.
De igual manera incluye esta fase el diseño de archivos o de base de datos que almacenaran todos los datos ingresados en el sistema. En esta fase el analista interactúa con el cliente para diseñar la salida de datos tanto en pantalla como en forma impresa.

Desarrollo y documentación
En esta fase, el analista trabaja conjunto con los programadores para desarrollar el software necesario. Para diseñar y documentar el software, se usan distintos técnicas y herramientas como los diagramas de casos de uso, pseudocódigo, diagramas de estructura entre otros. Con estas herramientas el analista comunica a los programadores lo que se desea programar.
También, el analista interactúa con el cliente para desarrollar una documentación efectiva, como manuales de procedimientos, ayudas en línea y preguntas frecuentes. La documentación ayuda al cliente como usar el sistema y que deben hacer en determinados casos.
En esta fase, los programadores tienen un papel importante, ya que diseñan, codifican y eliminan errores durante el desarrollo del sistema.

Pruebas y mantenimiento
Es necesario que antes de implementar el sistema, se le hagan pruebas. Es importante hacer pruebas para detectar errores de funcionamiento o de código antes de la entrega al cliente. Parte de las pruebas las realizan solo los programadores, y otra parte de las pruebas las realizan en conjunto el analista y los programadores. Se realizan pruebas con datos ficticios para determinar los errores que pudiesen existir.
El mantenimiento y documentación comienzan en esta fase y de manera rutinaria. Parte del trabajo del programador consiste en el mantenimiento del sistema.
Mucho de los procedimientos sistemáticos realizados por el analista durante el ciclo de desarrollo contribuye a que el mantenimiento sea mínimo.

Implementación y evaluación
Esta es la última fase del desarrollo de sistemas, y el analista participa en la implementación del sistema. En esta fase se capacita al cliente en el manejo del sistema. La capacitación la llevan a cabo los fabricantes (programadores) y el analista supervisa esta capacitación. La evaluación se lleva a cabo en cada una de las fases.

Es importante mencionar que el desarrollo de sistemas es cíclico. Cuando se termina una fase y se pasa a la siguiente, puede que surjan problemas lo que llevaría al analista a dar un paso atrás en el desarrollo de sistemas y modificar el trabajo realizado en fases anteriores.

Para este post se usó información contenida en el libro "Análisis y diseños de sistemas" de Kendall y Kendall y del sitio web de la "Red Escolar Nacional (RENa)" http://www.rena.edu.ve/cuartaEtapa/Informatica/Tema11.html