Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UNIDAD IZTAPALAPA
CIENCIAS BÁSICAS E INGENIERÍA
LICENCIATURA EN COMPUTACIÓN
3
INTRODUCCIÓN
El lenguaje de programación Java es muy usado para desarrollar aplicaciones de
software y es un estándar en la industria, por lo tanto tiene un lugar importante en la
formación de un estudiante de la Licenciatura en Computación. Existen también
metodologías (procesos) de programación para promover la mejora continua en la
calidad del software que un programador produce, dos de las mas importantes y que
hoy en día se han ganado un lugar importante en la industria son los llamados:
Personal Software Process (PSP) y Team Software Process (TSP), con los
cuales se aspira a mejorar la calidad de las implementaciones de software que se
elaboran y por ende la calidad del código generado por los programadores. Capability
Maturity Model for Software (también conocido como CMM o SW-CMM) ha sido el
modelo usado por muchas organizaciones para identificar las mejores practicas de
programación y es útil para incrementar la madurez del proceso de desarrollo de buen
software. El manejo de PSP y TSP sirve de base para obtener una acreditación CMM o
SW-CMM.
4
Programación Extrema. La programación extrema o eXtreme Programming (XP)
es una aproximación a la ingeniería de software formulada por Kent Beck, se trata de
un proceso ágil de desarrollo de software.
5
OBJETIVOS
El Sistema de Administración Escolar que se pretende entregar, para su uso en
un ambiente funcional que pueda ser usado desde cualquiera de las sucursales con las
que cuenta el colegio. Que se use para manejar las operaciones tanto de inscripción,
pago de servicios, información sobre cursos, mantenimiento de la información del
personal, de la información de los alumnos, de la información de cada trimestre, de la
información de los cursos que se dan en el trimestre entre otras más.
• Análisis de Requerimientos
• Diseño del Sistema
• Construcción del Prototipo
• Pruebas del Sistema
6
METODOLOGÍA
Ha sido necesario seguir los lineamientos propuestos por el TSP para construir
el Sistema de Administración Escolar Coronet Hall (SAECH). Es por ello que se han
asignado responsables de varios cargos, entre ellos:
• Encargado de Diseño
• Encargado de Proceso
• Encargado de Calidad
• Encargado de Proyecto
• Encargado de Soporte
• Interfaz con el Cliente
• Encargado de Pruebas
• Encargado de Implementación
• Representante de Equipo
También en la etapa del lanzamiento del proyecto, se hizo una planificación haciendo
uso de la herramienta Project 2003 (Office 2003); en esta planificación del tiempo
para la primera entrega de la versión de la aplicación SAECH, se decidió llevarlo en
ciclos, es decir se dividió en ciclos de que constaban de dos semanas cada uno. Para
cada uno de estos ciclos se planeo cuales eran lo módulos que se debían de entregar al
finalizar dichos ciclos.
Para el desarrollo de cada uno de los módulos, se asigno una pareja, la cual realizaría
eXtreme Programming (XP). Esto quiere decir, que las personas que conforman la
pareja deben trabajar juntas, además de llevar registros de tiempos y defectos mientras
se este desarrollando el módulo asignado.
7
ACTIVIDADES REALIZADAS
Antes de llevar a cabo las juntas TSP se llevó a cabo la recopilación de
información relacionada con la arquitectura que iba a servir de base para la
programación del sistema. Paso seguido se dividió esta información entre los
integrantes del equipo para comenzar a aprenderla y después capacitar a los demás en
esa área en particular.
Una vez que se dejo al grupo esta aplicación para su estudio, se procedió a llevar
a cabo las juntas relativas a la especificación TSP. Por cada una de estas juntas (las
cuales fueron cinco) se registro una minuta.
8
MINUTA 1
El propósito de esta junta es fijar las metas del equipo y definir los roles dentro
de él.
No todas las preguntas han sido contestadas aún; para la junta del lunes, que es
cuando se asignaran los casos de uso globales se espera comiencen a aparecer dudas. Y
será sobre esas dudas que se planeara lo que mas convenga para resolverlas.
9
MINUTA 2
1. Planeación
2. Diseño
3. Casos de Prueba
1. PLAN (Planeación).
2. HLD (Análisis de Requerimientos).
3. HLDR (Revisión de Análisis de Requerimientos).
4. DLD (Diseño).
5. DLDR (Revisión de Diseño).
6. DLDI (
7. CODE (Codificación).
8. CODER (Revisión de Codificación).
9. COMPILE (Compilación).
10. UNIT TEST (Pruebas Unitarias).
11. INT TEST (Pruebas de Integración).
12. PM (Post Mortem).
• Análisis
Formas CU
Pantallas
Diagrama de Navegación de Pantallas
Modelo de Datos
• Diseño
Diagrama de Secuencia
Diagrama de Clases Dinámicas
Diseño de Pruebas
• Unitarias
• Integración
• Aceptación
• Implementación
Codificación
Compilación
10
Las pruebas automatizadas se aplicaran a las clases de negocio. Las revisiones se
ha propuesto que se lleven a cabo en el LIS con horario a sugerir.
11
MINUTA 3
De igual forma, todo el código será revisado por la pareja de programación así
como por todo el equipo.
El manual de usuario debe ser completo y sencillo para su fácil comprensión por
parte del usuario. Dicho manual debe cumplir con la siguiente estructura:
1. Yield = 70%
2. Densidad de defectos < 20 defectos/KLOC
3. Productividad = 40 LOC/HR
12
MINUTA 4
Durante esta junta se trataron los puntos de calidad y riesgos. Se acordó que los
responsables de calidad e interfaz muestren un demo de las pantallas para la semana en
curso.
Titular Suplente
Nancy Méndez Martínez José Alfredo González Olivares
La siguiente tabla resume los riesgos que se detectó podrían ocurrir durante el
desarrollo del proyecto:
13
MINUTA 5
Durante la siguiente junta se hará una integración para evaluar que tan
complicado es agregar las clases a la interfaz principal. Talia Ramos, Rolando Venegas y
un servidor llevamos unas clases en calidad de demostración para hacer la integración.
Salvador Cázarez trajo la interfaz principal.
También dentro de las juntas se llego a un acuerdo en que se iban a manejar postit,
dentro de cada uno de los ciclos que se habían planeado. La forma en que se utilizaron
fue que casa pareja iba a tomar un post–tic y ahí escribiría la siguiente información:
Y cada uno de estos postit se pegaba en un recuadro que tenía la siguiente forma:
Módulos Módulos
planeados y que se terminados
van a terminar durante el ciclo
durante el ciclo
Módulos Módulos
planeados y que no incompletos
se van a terminar
durante el ciclo
14
Con el uso de esta herramienta, cada uno de los integrantes del equipo sabía como iba
cada uno de los módulos asignados a cada pareja, en relación a las fases del proceso.
Con esto nos dábamos una idea de cómo iba el proyecto, que tan atrasados íbamos, y en
que módulos en específico. Por cada ciclo se generaba un nuevo postit y un nuevo
cuadro en donde colocar dichos postit.
Ya que se realizaron las juntas, el procesos que se iba a seguir, la documentación que se
iba ir generando para cada fase, y ya asignados lo módulos a las parejas, entonces se
empezó con todo el desarrollo de cada uno de ellos.
15
DESARROLLO
El siguiente diagrama (Fig. 1) explica cada uno de los módulos que conforman la
aplicación SAECH. Cada uno de ellos, ya asignada a una pareja, es desarrollado
individualmente, para poder ser integrado con los demás al final y así poder tener una
versión de dicha aplicación
Aspirante
Alumno
Coordinador
Prerregistro
Consultas
Mantenimiento
Inscripción
Reinscripción
Profesor
Profesores
Pagos
Administrativo Cierres
16
ANÁLISIS DE REQUERIMIENTO Y DISEÑO DE LOS CASOS DE USO SAECH
CU - PRERREGISTRO
CASO DE USO
NIVEL ALCANCE
Resumen muy general Organización (caja negra)
Resumen Organización (caja blanca)
X Actividad de Usuario X Módulo
Detalle Método
DESCRIPCIÓN BREVE
ACTORES
Actor Principal Usuario Internet
Actores Secundarios
EVENTOS QUE LO INICIAN
1 El Usuario de Internet presiona “Si no es Alumno de Coronet Hall, pulse aquí”
FLUJO DE EVENTOS PRIMARIO
1 El Usuario de Internet presiona “Si no es Alumno de Coronet Hall, pulse aquí”
2 El sistema despliega la pantalla donde se muestra el formulario para la inserción de datos
personales.
3 El Usuario de Internet selecciona el Curso de su interés eligiéndolo de un listado.
4 El Usuario de Internet inserta sus datos personales: nombre, apellido paterno, apellido
materno, fecha de nacimiento; dirección con calle, número, colonia, delegación, código
postal, teléfono, RFC, CURP y e-mail; aunque estos tres últimos no son obligatorios.
5 El Usuario de Internet inserta la información solicitada en la encuesta, indicando como se
entero del colegio, Estudios, Actividad, puesto que desempeña, nombre de la empresa, giro
de la empresa, domicilio de la empresa con calle y número, colonia, delegación, código
postal, teléfono de la empresa, nombre de su jefe inmediato, cargo del jefe; aunque estos
datos no son obligatorios.
6 El Usuario de Internet presiona el botón “enviar datos”
7 El sistema inserta los datos en la base de datos del Colegio y genera el número de folio con
el cual queda registrado ese Usuario.
8 El sistema despliega en pantalla al Usuario su número de folio con el cual quedo registrado y
le indica que debe conservarlo para su inscripción.
9 El Usuario regresa a la pantalla principal o cierra el programa.
17
FLUJO DE EVENTOS ALTERNATIVOS
Si el Usuario de Internet no inserta los datos que son obligatorios, el sistema despliega otra
4.1 ventana pidiendo los datos que hacen falta.
PRECONDICIONES
1 Ninguno
POSCONDICIONES
1 El Alumno tiene un número de folio para hacer su Inscripción.
DOCUMENTACIÓN ADJUNTA
1 Diagrama de navegación de Pantallas
1 Modelo de Caso de Uso
1 Diagrama de Secuencia
1 Diagrama de Clases Dinámicas
MODELO DE INTERFAZ
18
19
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
Inicio
No es valido
Si es valido
Preregistro Enviar Validacion Base de
Datos
Folio
Folio
Folio
Fin
20
DIAGRAMA DE SECUENCIA
21
DIAGRAMA DE CLASES DINÁMICAS
Preregistro.
ConsultaPreregistro
VOCandidato
Folio : Integer
ApellidoPaterno : String
ApellidoMaterno : String Validación
Nombre : string
Calle : String Validacion()
Número : String EnviarDatos()
Colonia : String Limpiar campos() PreregistroBean
CodigoPostal : String
Delegacion : String InsertarAspirante()
Telefono : String getFolio()
RFC : String getNombre()
CURP : String getApellidoPaterno()
CorreoElectronico : String getApellidoMaterno()
Folio
FechaNacimiento : String
Curso : String
ComoSeEntero : String <<evento>> Salir()
Profesionista : String
Actividad : String
Puesto : String
Empresa : String
Giro : String
CalleNumeroEmpresa : String
ColoniaEmpresa : String
DelegacionEmpresa : String
CodigoPostalEmpresa : String
TelefonoEmpresa : String
JefeInmediato : String
CargoJefe : String
getFolio()
setFolio()
getApellidoPaterno()
setApellidoPaterno()
getapellidoMaterno()
setapellidoMaterno()
getNombre()
setNombre()
getCalle()
setCalle()
getNúmero()
setNumero()
getColonia()
setColonia()
getCodigoPostal()
setCodigoPostal()
getDelegacion()
setDelegación()
getTelefono()
setTelefono()
getRFC()
setRFC()
getCURP()
setCURP()
getCorreoElectrónico()
setCorreoElectrónico()
getFechaNacimiento()
setFechaNcimiento()
getCurso()
setCurso()
getComoSeEntero()
setComoSeEntero()
getPrpfesionista()
setProfesionista()
getActividad()
setActividad()
getPuesto()
setPuesto()
getEmpresa()
setEmpresa()
getGiro()
setGiro()
getCalleNumeroEmpresa()
setCalleNumeroEmpresa()
getColoniaEmpresa()
setColoniaEmpresa()
getCodigoPostalEmpresa()
setCodigoPostalEmpresa()
getDelegacionEmpresa()
setDelegacionEmpresa()
getTelefonoEmpresa()
setTelefonoEmpresa()
getJefeInmediato()
setJefeInmediato()
getCargoJefe()
setCargoJefe()
22
CU – MANTENIMIENTO HORARIOS - ALTAS
CASO DE USO
NIVEL ALCANCE
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Escenario ideal de alta de Horarios
ACTORES
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
POSCONDICIONES
1 Un nuevo horario ha sido agregado y dado de Alta.
DOCUMENTACIÓN ADJUNTA
Diagrama de Navegación de Pantallas
Modelo de Datos.
23
Porcentaje de efectividad del proceso actual 0%
MODELO DE INTERFAZ
24
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
cancelar
ingreso de datos
Aceptar [ campos llenos y horario no
existente] / generación de ID y
guardado en BD
Alta de horario mensaje de confirmación
Seleccion de la opción Alta
de horario del menu de
mantenimiento
aceptar
aceptar [ materia existente]
DIAGRAMA DE SECUENCIA
agregaHorario( )
4) El Sistema genera un Id de
agregaHorario( )
Horario.
agregaHorario( )
5) El Sistema registra el Horario
con los datos seleccionados.
25
DIAGRAMA DE CLASES DINÁMICAS
CiMenu CiAltaHorarios
voHorario : VOHorario CnHorario Horario
HorarioHome
<<event>> altaMateria() voHorario : VOHorario voHorario : VOHorario
<<event>> modificaMateria() show()
mensajeExito() getDataHorario() getDataHorario() Horario create()
<<event>> eliminaMateria()
<<event>> altaHorario() limpiaCampos() agregaHorario() agregaHorario()
<<event>> altaHorario() close()
HorarioBean
voHorario : VOHorario
sessionContext : SessionContext
getDataHorario()
agregaHorario()
ejbCreate()
ejbRemove()
VOHorario
ejbActivate()
idHorario : Integer ejbPassivate()
descripcion : String setSessionContext()
dia : String
horaInicio : Date
horaFin : Date
VOHorario()
void setIdHorario()
void setDescripcion()
void setDia()
void setHoraInicio()
void setHoraFin()
Integer getIdHorario()
String getDescripcion()
String getDia()
Date getHoraInicio()
Date getHoraFin()
26
CU – MANTENIMIENTO HORARIOS - BAJAS
CASO DE USO
NIVEL ALCANCE
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Escenario ideal de baja de Horarios
ACTORES
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
27
MODELO DE INTERFAZ
listaHorarios
mensajeConfirmación
mensajeOK
28
DIAGRAMA DE NAVEGACION DE PANTALLAS
Eliminar
bajaHorarios listaHorarios mensajeConfirmación
Cancelar
Aceptar
mensajeOK
Aceptar
Cancelar
DIAGRAMA DE SECUENCIA
eliminaHorario( ) eliminaHorario( )
5) El sistema elimina de la base de eliminaHorario( )
datos el horario
mensajeExito( )
6) El sistema despliega un mensaje
de transacción realizada
close( )
Fin de caso close( )
29
DIAGRAMA DE CLASES DINÁMICAS
HorariosBean
voHorario : VOHorario
CiTablaEliminaHorarios voDetalleHorario : VODetalleHorario
CnHorarios
voHorario : VOHorario Horarios
voHorario : VOHorario
voHorarios : VOHorarios getListaHorarios()
CiMenu voDetalleHorario : VODetalleHorario
show() eliminaHorario()
botonEliminar() getListaHorarios() ejbCreate()
getListaHorarios()
close() mensajeConfirmacion() eliminaHorario() ejbRemove()
eliminaHorario()
botonAceptar() validaHorario() ejbActivate()
validaHorario()
mensajeExito() modificaHorario() ejbPassivate()
modificaHorario()
close() setSessionContext()
validaHorario()
modificaHorario()
HorariosHome
create()
VODetalleHorario
VOHorarios Dia : Integer
IdHorario : Integer HoraInicio : Date
ClaveHorario : String HoraFinal : Date
Descripcion : String IdHorario : Integer
30
CU – MANTENIMIENTO HORARIOS - CAMBIOS
CASO DE USO
NIVEL ALCANCE
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Escenario ideal de Cambio de Horarios
ACTORES
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
31
Porcentaje de transacciones totales que cubre el caso: 14.23%
Porcentaje de efectividad del proceso actual 0%
MODELO DE INTERFAZ
listaModificación pantallaModificaciónHorarios
mensajeConfirmación mensajeError
mensajeOK
32
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
mensajeError
Aceptar validaciónKO
validaciónOK
Cancelar
mensajeConfirmación
Aceptar
mensajeOK
Aceptar
33
DIAGRAMA DE SECUENCIA
4) El P. A. redefine :
a)Días de la semana. Ingreso de datos nuevo horario
b)Hora de inicio y final de cada día.
c)Descripción del horario
validaHorario( )
5) El Sistema valida que no exista un horario generado con
los datos definidos.
validaHorario( ) validaHorario( )
VODetalleHorario
CiDetalleHorario
Dia : Integer VOHorarios
voHorario : VOHorario HorariosHome
HoraInicio : Date IdHorario : Integer
voDetalleHorario : VODetalleHorario
HoraFinal : Date ClaveHorario : String
create()
IdHorario : Integer Descripcion : String
show()
validaCampos()
void setHoraInicio() void setIdHorario()
opname()
void setHoraFinal() void setClaveHorario()
mensajeExito()
void setDia() void setDescripcion()
void setIdHorario() Integer getIdHorario()
Integer getDia() String getClaveHorario()
Date getHoraInicio() String getDescripcion()
Date getHoraFinal()
Integer getIdHorario()
34
CU – MANTENIMIENTO TRIMESTRE – ALTAS
CASO DE USO
NIVEL ALCANCE
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Escenario ideal para dar de alta un nuevo trimestre
ACTORES
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
35
Porcentaje de transacciones totales que cubre el caso: 16.66%
Porcentaje de efectividad del proceso actual 0%
Alta Mensaje
trimestre de éxito
Op. Alta trimestre del
Aceptar[ Datos llenos, clave no
submenú del menú trimestres
existente ] / trimestre guardado en la BD
mantenimiento
Cerrar
Aceptar
Mensaje de
error en datos
36
DIAGRAMA DE SECUENCIA
Ingreso de datos
2 El P.A. ingresa:
a) Clave del trimestre
b) Descripción.
c) Fecha de inicio.
d) Fecha de fin del trimestre.
<<event>> Aceptar
3 El P.A. da clic en el botón
de Aceptar.
agregaTrimestre(voTrimestre)
5 El Sistema registra el
trimestre con los datos ingresados.
agregaTrimestre(voTrimestre)
agregaTrimestre(voTrimestre)
mensajeExito()
6 El Sistema muestra un
mensaje de confirmación con la clave
del trimestre generado.
limpiaCampos()
8 Fin de Caso.
37
DIAGRAMA DE CLASES DINÁMICAS
CiAltaTrimestre CnTrimestre
CiMenu Trimestre
voTrimestre : VOTrimestre voTrimestre : VOTrimestre voTrimestre : VOTrimestre
<<event>> altaTrimestre() show()
<<event>> bajaTrimestre() agregaTrimestre() agregaTrimestre()
<<event>> aceptar() eliminaTrimestre()
<<event>> modificaTrimestre() void mensajeExito() eliminaTrimestre()
modificaTrimestre() modificaTrimestre()
void limpiaCampos() obtenListaTrimestre() obtenListaTrimestre()
VOTrimestre TrimestreBean
ClaveTrimestre : integer TrimestreHome voTrimestre : VOTrimestre
Descripcion : String sessionContext : SessionContext
FechaInicio : Date trimestreCreate()
FechaFin : Date ejbCreate()
Status : String ejbRemove()
ejbActivate()
VOTrimestre() ejbPassivate()
setClaveTrimestre() setSessionContext()
setDescripcion() agregaTrimestre()
setFechaInicio() eliminaTrimestre()
setFechaFin() modificaTrimestre()
setStatus() obtenListaTrimestre()
getClaveTrimestre()
getDescripcion()
getFechaInicio()
getFechaFin()
getStatus()
38
CU – MANTENIMIENTO TRIMESTRES - BAJAS
CASO DE USO
Nivel Alcance
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
Descripción Breve
Escenario ideal para eliminar los trimestres existentes en la Base de Datos.
Actores
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
Documentación Adjunta
Diagrama de Navegación de Pantallas
Modelo de Datos.
39
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
Selecciona registro
Opción Eliminar Cancelar
del menú
mantenimiento
de trimestres Eliminar[ Registro seleccionado ] Mensaje de
Grid con los trimestres
existentes confirmación
Aceptar
Eliminar[Registro no seleccionado] Cerrar
Mensaje
de Error
DIAGRAMA DE SECUENCIA
inicializaLista()
<<event>>Eliminar
3 El P.A. da clic en eliminar.
mensajeConfirmacion()
4 El Sistema muestra un mensaje de
confirmación de Eliminación
.
5 El Sistema elimina el trimestre eliminaTrimestre(voTrimestre)
seleccionada por el P.A. de la Base de Datos. eliminaTrimestre(voTrimestre)
eliminaTrimestre(voTrimestre)
mensajeExito()
6 Fin de Caso.
40
DIAGRAMA DE CLASES DINÁMICAS
CiAltaTrimestre CnTrimestre
CiMenu Trimestre
voTrimestre : VOTrimestre voTrimestre : VOTrimestre voTrimestre : VOTrimestre
<<event>> altaTrimestre() show()
<<event>> bajaTrimestre() agregaTrimestre() agregaTrimestre()
<<event>> aceptar() eliminaTrimestre()
<<event>> modificaTrimestre() void mensajeExito() eliminaTrimestre()
modificaTrimestre() modificaTrimestre()
void limpiaCampos() obtenListaTrimestre() obtenListaTrimestre()
VOTrimestre TrimestreBean
ClaveTrimestre : integer TrimestreHome voTrimestre : VOTrimestre
Descripcion : String sessionContext : SessionContext
FechaInicio : Date trimestreCreate()
FechaFin : Date ejbCreate()
Status : String ejbRemove()
ejbActivate()
VOTrimestre() ejbPassivate()
setClaveTrimestre() setSessionContext()
setDescripcion() agregaTrimestre()
setFechaInicio() eliminaTrimestre()
setFechaFin() modificaTrimestre()
setStatus() obtenListaTrimestre()
getClaveTrimestre()
getDescripcion()
getFechaInicio()
getFechaFin()
getStatus()
41
CU – MANTENIMIENTO TRIMESTRE – CAMBIOS
CASO DE USO
Nivel Alcance
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
Descripción Breve
Escenario ideal para modificar la información de los trimestres.
Actores
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
42
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
Mensaje
Aceptar / Actualizacion de grid de éxito
y limpia campos
Mensaje
de error
Cerrar
DIAGRAMA DE SECUENCIA
mensajeExito()
close()
8)El sistema muestra un mensaje de éxito.
Fin de Caso.
close()
43
DIAGRAMA DE CLASES DINÁMICAS
VOMateria
MateriaHome
nombre : String
clave : Integer
descripcion : String Materia Create()
CiDetalleMateria
duracion : String
voOldMateria : VOMateria predecesor : String
voNewMateria : VOMateria
VOMateria()
show() void setNombre()
llenaCampos() void setClave()
mensajeConfirmacion() void setDescripcion()
close() void setDuracion()
mensajeExito() void setpredecesor()
String getNombre()
Integer getClave()
String getDescripcion()
String getDuracion()
String getPredecesor()
44
CU – MANTENIMIENTO MATERIAS - ALTAS
CASO DE USO
Nivel Alcance
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
Descripción Breve
Escenario ideal para dar de alta una nueva asignatura.
Actores
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
45
Porcentaje de transacciones totales que cubre el caso: 16.66%
Porcentaje de efectividad del proceso actual 0%
MODELO DE INTERFAZ
46
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
DIAGRAMA DE SECUENCIA
<<evento>> Aceptar
3)El P.A. da cl ic en el botón de Aceptar.
agregaMateria( voMateria)
4)El Sistema genera un Id. de Materia.
agregaMateria( voMateria)
5)El Sistema registra la materi a con los datos
ingresados.
agregaMateria( voMateria)
mensajeExito( )
6)El Sistema muestra un mensaje de
confirmación con Id de Materi a generado.
limpiaCampos( )
7)El Sistema se prepara para capturar un nueva
materi a.
Fin de Caso.
47
CU-MANTENIMIENTO MATERIAS - BAJAS
CASO DE USO
NIVEL ALCANCE
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Escenario ideal para eliminar las materias existentes en la Base de Datos.
ACTORES
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
48
MODELO DE INTERFAZ
49
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
Cancelar
Selecciona Materia
Cerrar
Aceptar
Mensaje
de Error
DIAGRAMA DE SECUENCIA
iniciaListaMaterias()
50
DIAGRAMA DE CLASES DINÁMICAS
CiEliminaMateria Materia
CiMenu voMateria : VOMateria CnMateria
voMateria : VOMateria MateriaHome
voMateria : VOMateria
<<event>> altaMateria() void show() void agregaMateria()
<<event>> modificaMateria() <<evento>> elimina() void agregaMateria() Materia Create()
void modificaMateria()
<<event>> eliminaMateria() void iniciaListaMaterias() void getListaMateria() void getListaMateria()
<<event>> altaHorario() void close() void modificaMateria() void eliminaMateria()
<<event>> altaHorario() void mensajeConfirmacion() void eliminaMateria()
void mensajeExito()
VOMateria
MateriaBean
nombre : String
clave : Integer voMateria : VOMateria
descripcion : String sessionContext : SessionContext
duracion : String
predecesor : String ejbCreate()
ejbRemove()
VOMateria() ejbActivate()
void setNombre() ejbPassivate()
void setClave() setSessionContext()
void setDescripcion() agregaMateria()
void setDuracion()
void setpredecesor()
String getNombre()
Integer getClave()
String getDescripcion()
String getDuracion()
String getPredecesor()
51
CU-MANTENIMIENTO MATERIAS - CAMBIOS
CASO DE USO
NIVEL ALCANCE
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Escenario ideal para modificar la información de las asignaturas.
ACTORES
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
POSCONDICIONES
1 La actualización de la información de la materia en la Base de Datos.
DOCUMENTACIÓN ADJUNTA
Diagrama de Navegación de Pantallas
Modelo de Datos.
52
Porcentaje de efectividad del proceso actual 0%
MODELO DE INTERFAZ
53
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
Cancelar
Mensaje de
Mensaje
Confirmación
de Error
Cerrar
Mensaje
de Éxito
Aceptar / Actualiza Grid Aceptar / Datos Modificados
DIAGRAMA DE SECUENCIA
mensajeExito()
close()
8)El sistema muestra un mensaje de éxito.
Fin de Caso.
close()
54
DIAGRAMA DE CLASES DINÁMICAS
VOMateria
MateriaHome
nombre : String
clave : Integer
descripcion : String Materia Create()
CiDetalleMateria
duracion : String
voOldMateria : VOMateria predecesor : String
voNewMateria : VOMateria
VOMateria()
show() void setNombre()
llenaCampos() void setClave()
mensajeConfirmacion() void setDescripcion()
close() void setDuracion()
mensajeExito() void setpredecesor()
String getNombre()
Integer getClave()
String getDescripcion()
String getDuracion()
String getPredecesor()
55
CU - MANTENIMIENTO ALUMNOS
CASO DE USO
NIVEL ALCANCE
Resumen muy general X Organización (caja negra)
Resumen Organización (caja blanca)
X Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Este caso de uso describe la modificación de la información del Alumno inscrito en el colegio
(Modificación o Cambios) o su cambio de Status de “Activo” a “Inactivo” (Eliminación o Baja).
ACTORES
Actor Principal Mostrador
Actores Secundarios
6 El Sistema habilita los campos de texto que contienen la información del Alumno.
7 El Mostrador modifica la información de Alumno y da clic en el botón “Actualizar
Información”.
8 El Sistema actualiza la información del alumno en la base de datos y pasa 10.
9 El Sistema cambia el status del Alumno de “Activo a “Inactivo”.
10 Fin de caso
56
FLUJO DE EVENTOS ALTERNATIVOS
Búsqueda de un Alumno para obtener su matricula por medio de su nombre.
3.1 El Mostrador da clic en el botón “Buscar Matricula”.
3.2 El Mostrador ingresa el Apellido Paterno, Apellido Materno o Nombre del alumno para iniciar
la búsqueda (La búsqueda se puede realizar por cualquiera de los campos anteriores o por
los 3 juntos).
3.3 El Mostrador da clic en el botón “Buscar”.
3.4 El Sistema realiza la búsqueda de las coincidencias del nombre que ingreso el Mostrador,
las muestra en una tabla donde despliega todas las coincidencias con los Apellidos o
Nombre(s).
3.5 El Mostrador selecciona un registro de la tabla para obtener la matricula y da clic en el botón
“Obtener Matricula”.
3.6 El Sistema obtiene la matricula del registro seleccionado, lo muestra en el campo de
Matricula y cambia del Panel de Búsqueda al Panel de BC Alumno
3.7 Regresa a 4 (Flujo Principal).
PRECONDICIONES
1 El Alumno debe tener una matricula.
2 El Alumno debe estar inscrito en el Colegio y tenga Status “Activo”
POSCONDICIONES
1 Si realizaron cambios, la información del Alumno se “Actualiza” en la base de datos.
2 Si se elimino del Colegio, el Alumno presenta Status “Inactivo” en la base de datos.
DOCUMENTACIÓN ADJUNTA
Diagrama de Casos
Diseño de Pantallas
Diagrama de Navegación de Pantallas
Modelo de Datos
Diagrama de Secuencia
Diagrama de Clases
57
MODELO DE INTERFAZ
58
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
btnLimpiaCampos
btnElimninarAlumno( String Matricula )
btnActualizarInfromacionAlumno( VOAlumno voOldAlumno, VOAlumno voNewAlumno )
btnObtenerAlumno( String matricula ) / VOAlumno voAlumno
Menú btnEditarInformacionAlumno
Mantenimiento/Alumnos Pantalla de BC
Alumnos
btnBuscarMatricula
Pantalla de Búsqueda
btnCancelarBusqueda
Alumno
btnObtenerMatricula / String matricula
59
DIAGRAMA DE SECUENCIA
BAJAS O CAMBIOS
Alumnos( )
1. El Mostrador elige la opción "Alumnos" del
Menú "Mantenimiento". CiPanelAlumnos( )
2. El Sistema despliega la pantalla BC
(Bajas/Cambios) de Alumnos.
ingresarMatricula( )
3. El Mostrador ingresa la matricula del Alumno
en el campo de texto "Matricula" y da clic en el
botón "Obtener Alumn btnObtenerAlumno( )
o". obtenerAlumno(String matricula)
obtenerAlumno()
4. El Sistema busca la información del Alumno y la
despliega en los campos de texto
correspondientes con los campos deshabilitados.
llenaCamposAlumno(VOAlumno voAlumno)
dehabilitaCamposAlumno( )
habilitaCamposAlumno( )
6. El Sistema habilita los campos de texto que
contienen la información del Alumno.
60
DIAGRAMA DE SECUENCIA
btnBuscarMatricula( )
3.1 El Mostrador da clic en el botón "Buscar
Matricula". panelBusqueda( )
3.2 El Mostrador ingresa el Apellido Paterno,
Apellido Materno o Nombre del alumno para iniciar
la búsqueda (La búsqueda se puede realizar por ingresaNombreAlumno( )
cualquiera de los campos anteriores).
3.3 El Mostrador da clic en el botón "Buscar".
inicializaTablaAlumnos(ArrayList listaCoincidenciasAlumnos)
obtenMatricula( )
3.6 El Sistema obtiene la matricula del registro
seleccionado, lo muestra en el campo de Matricula setMatricula(String matricula)
y cambia del Panel de Búsqueda al Panel de BC
Alumno
Regresa a 4 panelAlumno( )
CiMenu
<<eventoMenu>> Inscripcion()
<<accionUsuario>> Alumnos()
CiPanelAlumnos
<<show>> CiPanelAlumnos()
<<accionUsuario>> ingresarMatricula()
<<eventoBoton>> btnObtenerAlumno()
llenaCamposAlumno(VOAlumno voAlumno)()
dehabilitaCamposAlumno()
<<eventoBoton>> btnEditarCampos()
<<eventoBoton>> btnEliminarAlumno() CnAlumnos
habilitaCamposAlumno() obtenerAlumno(String matricula)()
<<accionUsuario>> modificaInformacionAlumno() actualizaAlumno(VOAlumno voOldAlumno, VOAlumno voNewAlumno)()
<<eventoBoton>> btnActualizarInfromacionAlumno() eliminaAlumno(String matricula)()
<<eventoBoton>> btnBuscarMatricula() buscarCoincidenciasAlumno(String paternoBusqueda, String busquedaMaterno, String busquedaNombre)()
<<accionUsuario>> ingresaNombreAlumno() getContext()
<<eventoBoton>> btnBuscar()
inicializaTablaAlumnos(ArrayList listaCoincidenciasAlumnos)()
<<accionUsuario>> seleccionaRegistro()
<<eventoBoton>> btnObtenerMatricula()
AlumnosInterfaz
obtenMatricula()
obtenMatricula() obtenerAlumno(String Alumno) : VOAlumno
setMatricula(String matricula)() actualizaAlumno(VOAlumno voOldAlumno, VOAlno voNewAlumno) : bololean
<<show>> panelBusqueda() eliminaAlumno(String matricula) : boolean
<<show>> panelAlumno() getConcidenciasAlumno(String apellidoPaterno, String apellidoMaterno, String nombre) : ArrayList
getAlumnos() : ArrayList
<<uses>>
<<instantiate>> <<uses>>
AlumnosBean
AlumnosHome ejbCreate()
VOAlumno
create() setSessionContext()
ejbRemove()
setMatricula(String matricula) <<instantie>> ejbActivate()
getMatricula() : String ejbPassivate()
setApellidoPaterno(String apellidoPaterno) getAlumnos() : ArrayList
getApellidoPaterno() : String obtenerAlumno(String Alumno) : VoAlumno
setApellidoMaterno(String apellidoMaterno) actualizaAlumno(VOAlumno voOldAlumno, VOAlumno voNewAlumno) : boolean
getApellidoMaterno() : String eliminaAlumno(String matricula) : boolean
setNombre(String nombre) getCoincidenciasAlumno(String paternoBusqueda, String maternoBusqueda, String nombreBusqueda) : ArrayList
getNombre() : String
setCalle(String calle)
<<instantie>>
getCalle() : String
setNumero(String numero)
getNumero() : String
setColonia(String colonia)
getColonia() : String
setCodigoPostal(String codigoPostal})
getCodigoPostal() : String
setDelegacion(String delegacion)
getDelegacion() : String <<instantiate>>
setTelefono(String telefono)
getTelefono() : String
setFechaNacimiento(String fechaCumple)
getFechaNacimiento() : String
setCorreoElectronico(String correo)
getCorreoElectronico() : String
setTipoIngreso(String tipoIngreso)
getTipoIngreso() : String
setFechaRegistro(String fechaRegistro)
getFechaRegistro() : String
setIdSucursal(Integer idSucursal)
getIdSucursal() : Integer
setStatus(String status)
getStatus() : String
61
CU – MANTENIMIENTO SUCURSALES - ALTAS
CASO DE USO
NIVEL ALCANCE
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Escenario ideal de alta de Sucursales
ACTORES
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
62
Porcentaje de transacciones totales que cubre el caso: 14.23%
Porcentaje de efectividad del proceso actual 100%
MODELO DE INTERFAZ
63
mensajeErrorSucursal
validacionKO
CapturaKO
mensajeErrorCaptura
DIAGRAMA DE SECUENCIA
agregaSucursal(voSucursal) agregaSucursal(voSucursal)
7.-El Sistema genera un Id de Sucursal.
8.-El Sistema registra la Sucursal con los datos
capturados.
mensajeExito( )
9.-El Sistema muestra un mensaje de confirmación con Id
de Sucursal generado.
limpiaCampos( )
10.-El Sistema se prepara para capturar una nueva Sucursal
11.-Fin de Caso.
64
DIAGRAMA DE CLASES DINÁMICAS
SucursalBean
voSucursal : VOSucursal
sessionContext : SessionContext
SucursalHome
ejbCreate()
VOSucursal
ejbRemove()
IdSucursal : Integer Sucursal create() ejbActivate()
ClaveSucursal : String ejbPassivate()
Nombre : String setSessionContext()
Descripcion : String getDataSucursal()
Telefono : String agregaSucursal()
VOSucursal()
void setIdSucursal()
void setClaveSucursal()
void setNombre()
void setDescripcion()
void setTelefono()
Integer getIdSucursal()
String getClaveSucursal()
String getNombre()
String getDescripcion()
String getTelefono()
65
CU – MANTENIMIENTO SUCURSALES – BAJAS
MODELO DE CASO DE USO
Nivel Alcance
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
Descripción Breve
Escenario ideal de baja de Sucursales
Actores
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
66
MODELO DE INTERFAZ
67
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
KO
listaDeSucursales mensajeConfirmacionEliminacion
eliminar
OK
mensajeEliminacionOK
KO
DIAGRAMA DE SECUENCIA
mensajeExito()
close()
68
DIAGRAMA DE CLASES DINÁMICAS
CnEliminacionSucursal
CiEliminacionSucursal voSucursal : VOSucursal
VOSucursal()
void setIdSucursal()
void setClaveSucursal()
void setNombre()
void setDescripcion()
void setTelefono()
Integer getIdSucursal()
String getClaveSucursal()
String getNombre()
String getDescripcion()
String getTelefono()
69
CU – MANTENIMIENTO SUCURSALES – CAMBIOS
MODELO DE CASO DE USO
Nivel Alcance
Resumen muy general * Organización (caja negra)
Resumen Organización (caja blanca)
* Actividad de Usuario Módulo
Detalle Método
Descripción Breve
Escenario ideal de cambios a Sucursales
Actores
Actor Principal Personal Administrativo (P. A.)
Actores Secundarios
70
MODELO DE INTERFAZ
71
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
modif icar
listaSucursales modif icacionSucursales modif icar conf irmacionCambios
cancelar
OK
cancelar
mensajeOK
DIAGRAMA DE SECUENCIA
Selecciona Sucursal
3.-El usuario elige una sucursal y oprime el
botón modificar Modificar show(voSucursal)
initFields()
4.-El sistema despliega los detalles de la
sucursal
Ingreso de Nuevos Datos
5.- El usuario captura los cambios y oprime
modificar Modificar
mensajeConfirmacion()
6.-El sistema pide al usuario confirmación
Aceptar
7.-El usuario confirma la modificación validaCampos()
8.-El Sistema valida que los campos estén
correctamente capturados modificaSucursal(voSucursal) modificaSucursal(voSucursal)
9.-El sistema actualiza la información en la
base de datos
mensajeExito()
10.-El sistema muestra un mensaje de
confirmación close()
11.-Fin de caso
close()
72
DIAGRAMA DE CLASES DINÁMICAS
CiTablaModificacionSucursal
CiMenu
(from Al taSucursal )
show()
<<event>> Seleccion Sucursal()
<<event>> Cambio de Sucursal() <<event>> Modificar()
<<event>> Alta de Sucursal() initTable()
close()
CiModificacionSucursal CnModificacionSucursal
voSucursal : VOSucursal voSucursal : VOSucursal
show() getDataSucursal()
initFields() validaCampos()
<<event>> IngresoDatos() modificaSucursal()
<<event>> Modificar() SucursalBean
mensajeConfirmacion() (from Al taSucursal )
<<event>> Aceptar() voSucursal : VOSucursal
mensajeExito() sessionContext : SessionContext
close()
Sucursal ejbCreate()
(from Al taSucursal ) ejbRemove()
voSucursal : VOSucursal ejbActivate()
ejbPassivate()
VOSucursal
getDataSucursal() setSessionContext()
(from Al taSucursal )
agregaSucursal() getDataSucursal()
IdSucursal : Integer modificaSucursal() agregaSucursal()
ClaveSucursal : String
modificaSucursal()
Nombre : String
Descripcion : String
Telefono : String
SucursalHome
VOSucursal() (from Al taSucursal )
void setIdSucursal()
void setClaveSucursal()
Sucursal create()
void setNombre()
void setDescripcion()
void setTelefono()
Integer getIdSucursal()
String getClaveSucursal()
String getNombre()
String getDescripcion()
String getTelefono()
73
CU – INSCRIPCIÓN
CASO DE USO
NIVEL ALCANCE
Resumen muy general X Organización (caja negra)
Resumen Organización (caja blanca)
X Actividad de Usuario Módulo
Detalle Método
DESCRIPCIÓN BREVE
Este caso describe el proceso para incorporar a una persona o Candidato al Instituto Coronet
may.
ACTORES
Actor Principal Mostrador
Actores Secundarios
74
FLUJO DE EVENTOS ALTERNATIVOS
Flujo Alterno Buscar Folio del Candidato
3.1 El Mostrador da clic en el botón Buscar Folio.
3.1. El Sistema despliega la pantalla de Busca Folio.
1
3.1. El Mostrador ingresa Apellido Paterno, Materno y Nombre(s) del Candidato.
2
3.1. El Mostrador da clic en el botón Buscar.
3
3.1. El Sistema despliega en la tabla las coincidencias encontradas.
4
3.1. El Mostrador selecciona un registro de la tabla.
5
3.1. El Mostrador da clic en el botón Obtener Folio.
6
3.1. El Sistema regresa la pantalla inscripción y pone el folio en el campo folio.
7
3.1. Regresa 4
8
NOTAS
La Matricula consta de 10 dígitos. Ejemplo: 2005010001
75
La Matricula se forma de la siguiente manera:
• Los primeros 4 dígitos son el año en curso (2005).
• Los siguientes 2 dígitos son la Sucursal donde se esta inscribiendo (01).
• Los últimos 4 dígitos se van auto incrementando desde 0001 hasta 9999 (0001).
MODELO DE INTERFAZ
76
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
btnEditar
btnLimpiarCampos
btnBuscarCandidato( folio ) / voCandidato
btn InscribirCandidato( voAlumno, idSucursal, folio,voEncuesta ) / matricula
tabInscripcion
Pantalla de Pantalla de
Menú Inscripción Inscripción btnInscribirAlumnoACurso( VOAlumno ) Reinscripcion
btnLlenarEncuesta
Pantalla Llenar
Encuesta btnGuardarEncuesta / voEncuesta
btnCancelarEncuesta Pantalla
btnObtenerFolio / folio Buscar Folio
btnCancelarBusqueda
77
DIAGRAMA DE SECUENCIA: CASO CUANDO EL CANDIDATO NO SE PRERREGISTRO
oCiPanelInscripcion :
: Mostrador
CiPanelInscripcion
capturaDatosCandidato
eventoLlenarEncuesta( )
3.2.2.1 El Mostrador da click en el botón
Llenar Encuesta. panelBusquedaFolio.setVisible()
3.2.2.2 El sistema despliega pantalla para
llenar la encuenta del alumno.
inicializaComboCursos( )
getListaMaterias( )
getMaterias( )
llenarEncuesta( )
3.2.2.3 El Mostrador llena la encuesta.
getEncuesta( )
78
DIAGRAMA DE SECUENCIA: BÚSQUEDA DEL FOLIO DEL CANDIDATO
getCoincidenciasCandidatos(, , )
setModeloTabla()
create() : Inscripcion
CiReinscripcion
VOAlumno
<<s how>> CiReinscripcion(String matricula)
setMatricula(String matricula)
VOCandidato getMatricula() : String DIncripcionBean
setApellidoPaterno(String apellidoPaterno)
setFolio(Integer folio) getApellidoPaterno() : String ejbCreate()
getFolio() : Integer setApellidoMaterno(String apellidoMaterno) setSes sionContext()
setApellidPaterno(String apellidoPaterno) getApellidoMaterno() : String ejbRemove()
getApellidoPaterno() : String setNombre(String nombre) ejbActivate()
setApellidoMaterno(String apellidoMaterno) getNombre() : String ejbPas sivate()
getApellidoPaterno() : String setCalle(String calle) getCandidato(Integer folio) : VOCandidato
setNombre(String nombre) getCalle() : String inscriburAlumno(VOAlumno voAlumno, VOEncues taAlumno voEncuestaAlumno, Integer idSucursal, Integer folio) : String
getNombre() : String setNumero(String numero) getCoincidenciasCandidato(String apPaterno, String apMaterno, String nombre) : ArrayLis t
setCalle(String calle) getNumero() : String getMaterias() : ArrayList
getCalle() : String setColonia(String colonia)
setNumero(String numero) getColonia() : String
setColonia(String Colonia) setCodigoPostal(String codigoPostal})
getColonia() : String getCodigoPostal() : String
setDelegacion(String delegacion) setDelegacion(String delegacion)
getDelegacion() : String getDelegacion() : String
setTelefono(String telefono) setTelefono(String telefono)
getTelefono() : String getTelefono() : String
setCodigoPostal(String codigoPostal) setFechaNacimiento(String fechaCumple)
getCodigoPostal() : String getFechaNacimiento() : String
setFechaNacimiento(String fechaCumple) setCorreoElectronico(String correo)
getFechaNacimiento() : String getCorreoElectronico() : String
setCorreoElectronico(String correo) setTipoIngreso(String tipoIngres o)
... getTipoIngreso() : String
setFechaRegistro(String fechaRegistro)
getFechaRegistro() : String
setIdSucursal(Integer idSucursal)
getIdSucursal() : Integer
setStatus(String status)
getStatus() : String
79
CU - REINSCRIPCIÓN
CASO DE USO
Nivel Alcance
Resumen muy general Organización (caja negra)
Resumen X Organización (caja blanca)
X Actividad de Usuario Módulo
Detalle Método
Descripción Breve
Proceso de reinscripción de un cliente a un nuevo curso en la institución.
Actores
Actor Principal Empleado
Actor Secundario Sistema
Eventos que lo inician
1 El empleado selecciona la opción “Reinscripción” del menú “Cliente” de la barra de menús
de la interfaz principal
Flujo de eventos primario
1 El empleado teclea la matrícula del cliente en el campo de texto destinado a la matricula y
pulsa Aceptar. El botón de “Inscripción” permanece deshabilitado,
2 El sistema despliega la información del cliente (Nombre) así como también los posibles
cursos que puede tomar (en un combo), dependiendo de aquellos que ya haya tomado,
además de un campo de texto vacío que servirá para ir colocando la clave de cada curso
según se vaya seleccionando. Se habilita el botón “Inscripción”.
3 El empleado selecciona un curso del combo.
4 El sistema muestra la clave del curso en el campo de texto “Clave” y además una tabla con
información asociada a ese curso en particular (Grupo, Horario, Profesor de Gramática,
Profesor de Comprensión, Disponibilidad). Se habilita el botón “Inscribir”
5 El empleado selecciona un registro de la tabla (lo cual corresponde a un grupo asociado a
este curso) y pulsa el botón “Inscribir”
6 El sistema muestra un aviso para que el empleado confirme la acción que se llevará a cabo
7 El empleado pulsa el botón “Sí”
8 El sistema muestra un informe con los datos que se acaban de actualizar en la base de
datos (Curso inscrito, Grupo, Profesor de Gramática, Profesor de Comprensión, Horario) y
aparece el botón “Imprimir” con el cual se puede imprimir un resumen con esta información
para el cliente
9 El empleado presiona el botón “Nuevo” o el botón “Imprimir”
10 El sistema limpia la pantalla (se dejan de ver la información actual) y el campo de la
matricula
11 Fin de Caso
80
Flujo de eventos alternativos
1 La matricula introducida no se encuentra en la base de datos o el cliente no recuerda su
número de matrícula
1.1 El empleado presiona el botón “Buscar…”
1.2 El sistema muestra campos de texto para filtrar la búsqueda (Nombre, Apellido Paterno,
Apellido Materno, Sucursal) y los botones “Iniciar búsqueda” y “Limpiar campos”
1.3 El empleado llena estos campos y presiona el botón “Iniciar búsqueda”
1.4 El sistema muestra una tabla con datos sobre el cliente (Sucursal, Nombre, Apellido
Paterno, Apellido Materno, Matrícula, Teléfono, Correo Electrónico)
1.5 El empleado selecciona un registro de la tabla y pulsa el botón “Seleccionar”
1.6 El sistema muestra los datos del cliente (para el flujo normal, paso 2)
Precondiciones
1 Haber entrado al sistema con suficientes privilegios para poder llevar a cabo la reinscripción
Poscondiciones
1 Se crea un saldo negativo en la cuenta del cliente
2 Se actualiza la disponibilidad del grupo al que acaba de inscribirse el cliente
3 Se asocia el cliente con el grupo que él acaba de elegir
Documentación Adjunta
1 Diseño de Pantallas
2 Diagrama de Navegación de Pantallas
3 Diagrama de Secuencia
4 Modelo de Datos
81
MODELO DE INTERFAZ
Reinscripción - SAECH
Archivo Cliente Caja Mantenimiento Consultas Ayuda
Aceptar
Matrícula
Buscar...
Información Disponible
Nombre Trimestre
Sucursal Lunes Martes Miércoles Jueves Viernes Prof. Gramática Prof. Comprensión Disponibilidad
Terminar Inscribir
Reinscripción - SAECH
Archivo Cliente Caja Mantenimiento Consultas Ayuda
Aceptar
Matrícula
Buscar...
Búsqueda
Nombre Sucursal
Apellido Paterno
Limpiar campos Iniciar búsqueda
Apellido Materno
Resultados
Sucursal Nombre Apellido Paterno Apellido Materno Matrícula Teléfono Correo electrónico
Seleccionar
Terminar
82
Error en la búsqueda
Aceptar
Error al guardar
Aceptar
83
Confirmación de reinscripción
Si No
Error de validación
Aceptar
84
DIAGRAMA DE NAVEGACIÓN DE PANTALLAS
Aceptar/elegirCurso
Imprimir
InscribirNuevo
Elige Reinscripcion Ventana Ventana
Menu Reinscripcion Resumen
Inscribir
Buscar Alumno
Aceptar
Salir
Ventana
Salir Busqueda
Salir
Menu
Menu
DIAGRAMA DE SECUENCIA
Escenario
oICapturaMatricula : oNCapturaMatricula : cteReinscripcion :
Normal Empleado :
PanelReinscripcion CnReinscripcion beanReinscripcion
Empleado
Aceptar
1. El empleado teclea la matrícula del cliente en getDatosAlumno(String)
el campo de texto destinado a la matricula y validaMatricula(String)
pulsa Aceptar. El botón de "Inscripción"
permanece deshabilitado.
getDatosCliente(String)
2. El sistema despliega la información del cliente
showInformacion( )
(Nombre) así como también los posibles cursos
que puede tomar (en un combo), dependiendo de
aquellos que ya haya tomado, además de un
campo de texto vacío que servirá para ir
colocando la clave de cada curso según se vaya
seleccionando. Se habilita el botón "Inscripción".
8. El sistema muestra un informe con los datos showResumen( ) setPreferenciaCliente(String, String, String)
que se acaban de actualizar en la base de datos
(Curso inscrito, Grupo, Profesor de Gramática,
Profesor de Comprensión, Horario) y aparece el
botón "Imprimir" con el cual se puede imprimir un
resumen con esta información para el cliente. nuevo/imprimir( )
85
DIAGRAMA DE CLASES DINÁMICAS
PanelReinscripcion
(from Use Case View)
pnlImagen : JPanel
pnlMatricula : JPanel
pnlDatosAlumno : JPanel
pnlDatosCursos : JPanel
lblMatricula : JLabel
lblNombre : JLabel CnReinscripcion
lblCursosDisponibles : JLabel (from Use Case View)
lblFecha : JLabel matriculaInt : Integer
lblTrimestre : JLabel matriculaString : String
txtMatricula : JTextField
txtNombre : JTextField getDatosAlumno()
txtTrimestre : JTextField validaMatricula()
txtFecha : JTextField obtenerDatosPrimerIngreso()
cmbCursosDisponibles : JComboBox validaMatricula()
btnAceptar : JButton buscaAlumno()
btnBuscar : JButton inscribirAlumno()
btnTerminar : JButton getSucursales()
btnInscribir : JButton
tblDatosCursos : JTable
evtAceptar()
actualizarCursosDisponibles()
initComponents()
inscribir()
beanReinscripcion
(from Use Case View)
getDatosCliente()
getDatosCurso()
setPreferenciaCliente()
86
CU - PAGOS
CASO DE USO
Nivel Alcance
Resumen muy general Organización (caja negra)
Resumen Organización (caja blanca)
X Actividad de Usuario X Módulo
Detalle Método
Descripción Breve
Se realizan los pagos correspondientes a cada uno de los conceptos a seleccionar de acuerdo a
cada alumno, generando la factura correspondiente al alumno.
Actores
Actor Principal
Administrador
Actores Secundarios
Eventos que lo inician
1 El Administrador presiona Pagos para la realización de un pago.
2 El Sistema muestra la interfaz grafica de Pagos.
Flujo de eventos primario
1 El administrador captura la matricula del alumno y presiona el botón Aceptar.
2 El sistema verifica si la matricula es la correcta y si el alumno existe en la base de datos.
3 El sistema despliega el nombre del alumno, el RFC y el trimestre.
El sistema verifica si el alumno tiene adeudos de pago, si tiene adeudos muestra un mensaje
4
de confirmación de pago.
5 El administrador presiona en el mensaje de confirmación de adeudo el botón Aceptar.
6 El sistema muestra el concepto de pago que adeuda el alumno.
El administrador introduce la cantidad que el alumno pagara a su adeudo y presiona el botón
7
Pagar.
El sistema valida la cantidad a pagar; si la cantidad es mayor a cero o la cantidad a pagar no
8
rebasa el monto a pagar.
El sistema despliega en la tabla “Conceptos por Pagar” los datos del concepto de pago que
9
el alumno pagara. Los datos son: Clave, Descripción, Cantidad, Precio, Descuento y Abono.
El sistema calcula el monto total del pago del alumno los cuales son subtotal, IVA y total; el
10
sistema muestra los valores en la pantalla.
11 El administrador selecciona un concepto de pago.
12 El Sistema verifica si al concepto de pago se le puede aplicar descuento y/o cantidad.
Si se le puede aplicar descuento y/o cantidad al concepto de pago el administrador
13
seleccionara el descuento y/o la cantidad al concepto de pago seleccionado.
14 El administrador introduce la cantidad de Pago/Abono y selecciona el botón Agregar.
El sistema valida la cantidad a pagar; si esta dentro del descuento incluido, la cantidad es
15
mayor a cero o la cantidad a pagar no rebasa el monto a pagar.
El sistema despliega en la tabla “Conceptos por Pagar” los datos del concepto de pago que
16
el alumno pagara. Los datos son: Clave, Descripción, Cantidad, Precio, Descuento y Abono.
El Sistema calcula el monto total del pago del alumno los cuales son subtotal, IVA y total; el
17
sistema muestra los valores en pantalla.
Si el alumno desea realizar otro pago, el administrador regresa al paso 11 las veces que sea
18
necesario.
87
El administrador selecciona la forma en que el alumno realizara el pago, tarjeta de crédito,
19
cheque o efectivo.
20 El administrador elige el botón generar recibo.
21 El sistema muestra un mensaje de confirmación de pago.
22 El administrador presiona el botón aceptar.
23 El sistema inserta los datos generados de la factura en la base de datos.
24 El sistema muestra un mensaje de confirmación de pago realizado.
25 El administrador presiona el botón aceptar.
26 El sistema limpia los campos.
27 Fin de caso
Flujo de eventos alternativos
2.1 Si la matricula es invalida despliega un mensaje de error.
2.2 Si el alumno no esta registrado se despliega un mensaje de error.
5.1 Si el alumno no desea pagar los adeudos el administrador presiona el botón cancelar.
8.1 Si la cantidad a pagar no es correcta el sistema envía un mensaje de error.
8.2 El administrador selecciona el botón Aceptar.
Si al concepto de pago no se le puede aplicar el descuento y/o cantidad el sistema no
12.1
permite al administrador seleccionar cualquiera de las dos opciones.
14.1 Si el Administrador desea cancelar el concepto de pago presiona el botón Cancelar.
Si el Administrador desea eliminar un concepto de pago ya agregado a la tabla
14.1.1 “Conceptos por Pagar”, este selecciona el concepto de pago a eliminar y presiona el botón
eliminar.
El sistema elimina los datos del concepto de pago eliminado de la tabla “Conceptos por
14.1.2
Pagar”.
15.1 Si la cantidad a pagar no es correcta el sistema envía un mensaje de error.
15.2 El administrador selecciona el botón Aceptar.
22.1 El administrador selecciona el botón cancelar.
22.2 El sistema limpia todos los campos de la pantalla de pagos.
Precondiciones
1 El Alumno ya tenga una matrícula (Se haya Inscrito)
Poscondiciones
1 El Alumno tiene únicamente el horario a un curso
Documentación Adjunta
1 Modelo de Interfaz
1 Modelo de Caso de Uso
1 Diagrama de Navegación de Pantallas.
1 Modelo de Estados
1 Diagrama de Colaboración
1 Modelo de Secuencia
1 Diagrama de Clases Dinámicas
Porcentaje de transacciones totales que cubre el caso: _____20_______________
Porcentaje de efectividad del proceso actual: _________70______________
88
MODELO DE INTERFAZ
ERROR: Matricula
Erronea Si / No
Confirma
Eliminacion
Inicio EliminaConceptodePago
Pagos Aceptar
Aceptar
Recibo
Genera Recibo
Aceptar
Fin
adeudo
ERROR: Usuario BuscaAlumno
Invalido SI/NO
Confirma Adeudo
Alumno
89
DIAGRAMA DE SECUENCIA
seleccionaPagos
jMenuItemPagosActionPerformed()
Capturamatricula /
PresionaBotonAceptar
validaMatricula(String matricula)
getAlumno(String matricula)
getAlumno(String matricula)
return(VOAlumno)
return(VOAlumno)
showDatosAlumno()
mensajeConfirmacionAdeudo()
Presiona Boton Aceptar
getRegistroMovimientos(String matricula,
String idConcepto) getRegistroMovimientos(String matricula,
String idConcepto)
return(ArrayList(VOMovimiento))
return(VOMovimiento)
showAdeudoExistente()
IntroduceCantidadPagar
/ Presiona Aceptar
validaPrecio(String precio)
inicializaTablaDetallePago(lista
DetallePago(VOConcpetoPago))
calculaCuentas()
show(Subtotal,IVA,Total)
seleccionaConceptoPago
PermiteDescuento(bandera)
ingresaDescuento /
ingresaAbono
inicializaTablaDetallePago(listaDetalle
Pago(VOConceptoPago))
calculaCuentas()
show(Subtotal,IVA,Total)
seleccionaFormaDePago
presionaBotonGenerarRecibo
showConfirmacionPago()
presionaBotonAceptar
construyeRegistros()
return(ArrayList(VOMovimiento))
construyeEventos()
return(ArrayList(VOEventoPago))
actualizaeventoPago(String matricula,
String fecha, String hora) actualizaeventoPago(String matricula,
String fecha, String hora)
True
True
setRegistoMovimientos(ArrrayList(
VOMovimiento))
setRegistroMovimientos(VOMovimiento)
True
True
setEventoPago(ArrayList(VOEventoPago))
setEventoPago(VOEventoPago)
True
True
showConfirmacionDePago()
presionaBotonAceptar
limpiaCampos()
90
DIAGRAMA DE CLASES DINÁMICAS
PagosBean
VOPago : VoPago
VOAlumno : VOAlumno
VOInscripcionCurso
VOConceptoPago
sessionContext : SessionContext
VOMovimiento void ejbCreate()
idSucursal : String VOAlumno void ejbRemove()
VOEventoPago idMovimiento : String VOConceptoPago matricula : String void ejbActivate()
idEventoPago : String matricula : String idConcepto : String apellidoPaterno : String void ejbPassivate()
matricula : String idConcepto : String descripcion : String apellidoMaterno : String void ejbSessionContext()
fecha : String monto : String permitedescuento : String nombre : String VOAlumno getAlumno()
hora : String cantidad : String precio : String calle : String VOInscripcionCurso getInscripcionCurso()
descripcion : String fecha : String numero : String VOEventoPago getEventoPago()
status : String hora : String VOConcpetoPago() colonia : String ArrayList getRegistroMovimientos()
idConcepto tipoMovimiento : String String getIdConcepto() codigoPostal : String ArrayList getListaConceptos()
tipoPago : String String getDescripcion() delegacion : String void setEventoPago()
VOEventoPago() String getPermiteDescuento() telefono : String VOMovimiento getRegistroMovimientos()
String getMatricula() VOMovimiento() String getPrecio() RFC : String void setRegistroMovimientos()
void setMatricula() Stringn getIdSucursal() void setIdConcepto() CURP : String void actualizaEventoPago()
String getIdEventoPago() String getIdMovimiento() void setDescripcion() correoElectronico : String VOConceptoPago getConcepto()
void setIdEventoPago() String getMatricula() void setPermiteDescuento() fechaNacimiento : String VOConceptoPago verificaDescuento()
String getFecha() String getIdConcepto() void setPrecio() fechaRegistro : String
void setFecha() String getMonto() tipoIngreso : String
String getHora() String getCantidad() status : String VoInscripcionCurso
void setHora() String getFecha() idSucursal : Integer matricula : String
String getDescripcion() String getHora()
idInscripcionCurso : String
void setDescripcion() String getTipoMovimiento() String getMatricula() idCurso : String
String getStatus() String getTipoPago() String getApellidoPaterno() trimestre : String
void setStatus() void setIdSucursal() String getApellidoMaterno() calificacionG1 : String
String getIdConcepto() void setIdMovimiento() String getNombre() calificacionG2 : String
void setIdConcepto() void setMatricula() String getCalle() calificacionC1 : String
void setIdConcepto() String getNumero() calificacionC2 : String
void setMonto() String getColonia() fechaInscripcion : String
void setCantidad() String getCodigoPostal()
void setFecha() String getDelegacion() VOInscripcionCurso()
void setHora() String getTelefono() String getMatricula()
void setTipoMovimiento() String getRFC() String getidInscripcionCurso()
void setTipoPago() String getCURP() String getCurso()
String getCorreoElectronico() String getTrimestre()
String getFechaNacimiento() String getCalificacionG1()
String getFechaRegistro() String getCalificacionG2()
String getTipoIngreso() String getCalificacionC1()
String getStatus() String getCalificacionC2()
Integer getIdSucursal() String getFechaInscripcion()
void setMatricula() void setMatricula()
void setApellidoPaterno() void setidInscripcionCurso()
void setApellidoMaterno() void setCurso()
void setNombre() void setTrimestre()
void setCalle() void setCalificacionG1()
void setNumero() void setCalificacionG2()
void setColonia() void setCalificacionC1()
void setCodigoPostal() void setCalificacionC2()
void setDelegacion() void setFechaInscripcion()
void setTelefono()
void setRFC()
void setCURP()
void setCorreoElectronico()
void setFechaNacimiento()
void setFechaRegistro()
void setTipoIngreso()
void setStatus()
void setIdSucursal()
91
CU – CIERRES
CASO DE USO
Nivel Alcance
Resumen muy general Organización (caja negra)
Resumen x Organización (caja blanca)
Actividad de Usuario Módulo
x Detalle Método
Descripción Breve
Este caso de uso permite generar tres tipos de cierre de caja al terminar el cajero su sesión.
Ayudado por un asistente.
Actores
Actor Principal Cajero
Actores Secundarios
Eventos que lo inician
1 El cajero elige de la ventana de Pagos la opción “Generar Cierre”
Flujo de eventos primario
1 El Sistema presenta la ventana del "Asistente de Cierre" Con un párrafo explicativo de
los pasos a seguir para generar los Cierres.
2 El Cajero pulsa el botón Siguiente.
3 El Sistema presenta una ventana con el detalle de Cierre de Productos (CU-CIERRE_1)
4 El Cajero Consulta la información generada por el Sistema y Pulsa Siguiente
5 El Sistema cierra la ventana y a continuación presenta una ventana con el detalle de Cierre
de la Editorial (CU-CIERRE_2)
6 El Cajero Consulta la información generada por el Sistema y Pulsa Siguiente.
7 El Sistema cierra la ventana y a continuación presenta una ventana con el detalle de Cierre
General (CU-CIERRE_3)
8 El Cajero Consulta la información generada por el Sistema y Pulsa Imprimir.
9 El cajero acepta la impresión.
10 El cajero pulsa el botón terminar.
92
1 Diagrama de Navegación de Pantallas
2 Layout de Pantalla de Asistente de Cierre
3 Diagrama de Secuencia
4 Diagrama de Colaboración
MODELO DE INTERFAZ
Cierres
Cancelar
Pantalla de Asistente Siguiente Pantalla de Cierre
de Cierres Productos
Siguiente
Cancelar
Pantalla de
Cierre Editorial
Siguiente
Cancelar
Cancelar
Aceptar
93
DIAGRAMA DE SECUENCIA
6 El Cajero Consulta la
información generada por el onCli ckSi guiente( )
Sistema y Pulsa Siguiente.
show()
7 El Sistema cierra l a ventana y a
continuación presenta una
ventana con el detalle de Cierre
General (CU-CIERRE_3) CerrarVentana()
8 El Cajero Consulta la
información generada por el
Sistema y Pulsa Imprimi r. onClickImprimir( )
ImprimirCierre( )
ImprimirPagina( )
94
DIAGRAMA DE CLASES DINÁMICAS
CICierres CNCierres
VoCierre
idsucursal : String = ""
fecha : String = ""
hora : String = ""
<<void>> getIdSucursal()
<<void>> getFecha()
<<void>> getHora()
<<String>> setIdSucursal()
<<String>> setFecha()
<<String>> setHora()
<<String>> voProductos()
VoCierreEditorial VoCierreProductos
idConcepto : String = "" idConcepto : String = ""
descripcion : String = ""; descripcion : String = ""
cantidad : Sting = "" cantidad : Sting = ""
precio : String = "" precio : String = "
tipoPago : String = "" tipoPago : String = "
95
CU – CIERRES - PRIMER PANTALLA
CASO DE USO
Nivel Alcance
Resumen muy general Organización (caja negra)
Resumen x Organización (caja blanca)
Actividad de Usuario Módulo
x Detalle Método
Descripción Breve
Este caso de uso permite generar el tipo de cierre de caja no. uno
Actores
Actor Principal Cajero
Actores Secundarios
Eventos que lo inician
1 El cajero ha ejecutado el paso 2 de CU-Cierre_0
Flujo de eventos primario
1 El Sistema presenta una ventana donde aparece un detalle del cierre con los siguientes
datos:
i) Fecha de este cierre.
ii) En la parte media de la ventana los siguientes conceptos:
i.e.1) Número de Cambios de Horario e ingresos por este
concepto.
i.e.2) Número de Constancias e ingresos por este concepto.
i.e.3) Número de Credenciales e ingresos por este concepto.
i.e.4) Número de Exámenes extraordinarios e ingresos por
este concepto.
i.e.5) Número de Exámenes de Admisión e ingresos por este
concepto.
i.e.6) Número de Reposiciones de Tarjeta e ingresos por este
concepto.
ii.7) Número de Tarjetas Beca e ingresos por este concepto.
ii.8) Número de Tarjetas de Horario Mixto e ingresos por este
concepto.
ii.9) Número de Diplomas e ingresos por este concepto.
ii.10) Número de Cuotas de Laboratorio e ingresos por este
concepto.
iii) En la parte inferior derecha de la ventana desplegado aparecerá el
total por estos
conceptos.
iv) Del lado inferior izquierdo, dos campos con el nombre e ID del cajero
que genera el cierre.
2 El Cajero consulta la información que le interese y continúa con el CU-Cierre_0.
3 Fin de la Transacción.
Flujo de eventos alternativos
96
1.1 La clave verificada por el Sistema no coincide
1.2 El Sistema regresa al caso de uso CU-Cierre_0
Precondiciones
1 Debe haberse iniciado una sesión como cajero
Documentación Adjunta
1 Layout de Pantalla Cierre Productos
MODELO DE INTERFAZ
97
CU – CIERRES - SEGUNDA PANTALLA
CASO DE USO
Nivel Alcance
Resumen muy general Organización (caja negra)
Resumen x Organización (caja blanca)
Actividad de Usuario Módulo
x Detalle Método
Descripción Breve
Este caso de uso permite generar el tipo de cierre de caja no. dos (Libros vendidos durante el
turno de caja)
Actores
Actor Principal Cajero
Eventos que lo inician
1 El cajero ha ejecutado el paso no. 4 de CU-Cierre_0
Flujo de eventos primario
1 El Sistema presenta una ventana donde aparece un detalle con los siguientes datos:
iii) Fecha en que se llevó a cabo el cierre (Encabezado).
iv) En la parte mediana de la ventana los siguientes conceptos:
ii.1) Número de Cursos 101 e ingresos por este concepto.
ii.2) Número de Cursos 201 e ingresos por este concepto.
ii.3) Número de Cursos 301 e ingresos por este concepto.
ii.4) Número de Cursos 401 e ingresos por este concepto.
ii.5) Número de Cursos 501 e ingresos por este concepto.
ii.6) Número de Cursos Intensivo (ingles lógico 100 hrs. en
casa) e ingresos por este concepto.
ii.7) Número de Libros de Texto e ingresos por este concepto.
ii.8) Número de libros de Tarea e ingresos por este concepto.
ii.9) Número de CD’s e ingresos por este concepto.
ii.10) Número de Cassettes e ingresos por este concepto.
iii) En la parte inferior derecha de la ventana desplegado aparecerá el
total por estos
conceptos.
v) Del lado inferior izquierdo, dos campos con el nombre e ID del
cajero que genera el cierre.
98
Flujo de eventos alternativos
Precondiciones
1 Debe haberse iniciado una sesión como cajero
Poscondiciones
1
Documentación Adjunta
1 Modelos de Interfaz
MODELO DE INTERFAZ
99
CU – CIERRES - TERCERA PANTALLA
CASO DE USO
Nivel Alcance
Resumen muy general Organización (caja negra)
Resumen x Organización (caja blanca)
Actividad de Usuario Módulo
x Detalle Método
Descripción Breve
Este caso de uso permite generar el tipo de cierre de caja no. tres
Actores
Actor Principal Cajero
Eventos que lo inician
1 El cajero ha ejecutado el paso no. seis de CU-Cierre_0
Flujo de eventos primario
1 El Sistema presenta una ventana donde aparece tres rejillas con los siguientes datos:
vi) Fecha en que se llevó a cabo el cierre (Encabezado).
vii) En la parte izquierda de la ventana los siguientes conceptos:
ii.1) Número de Cursos 101 y cantidad.
ii.2) Número de Cursos 201 y cantidad
ii.3) Número de Cursos 301 y cantidad.
ii.4) Número de Cursos 401 y cantidad.
ii.5) Número de Cursos 501 y cantidad
ii.6) Número de Cursos Intensivo y cantidad
ii.7) Número de SP I y cantidad.
ii.8) Número de SP II y cantidad.
ii.9) Número de SP III y cantidad.
ii.10) Número de Literatura I y cantidad.
ii.11) Número de Literatura II y cantidad.
ii.12) Número de TC I y cantidad.
ii.13) Número de TC II y cantidad.
ii.14) Número de TC III y cantidad.
ii.15) Número de TC IV y cantidad.
ii.16) Número de Becas y cantidad.
viii) En la parte derecha superior de la ventana los siguientes conceptos
1) Numero de Inscripciones e ingreso por este concepto.
2) Número de Re-inscripciones e ingreso por este concepto.
3) Numero de ½ Becas e ingreso por este concepto.
4) Numero de 1/4 Becas e ingreso por este concepto.
5) Numero de Recomendados e ingreso por este concepto.
6) Numero de Descuentos e ingreso por este concepto.
7) Numero de A cuenta e ingreso por este concepto.
8) Numero de Resto e ingreso por este concepto.
ix) En la parte derecha inferior de la ventana los siguientes conceptos
1) Total de Cheques e ingreso por este concepto.
100
2) Total de Tarjetas e ingreso por este concepto.
3) Total de Efectivo e ingreso por este concepto.
x) En la parte inferior derecha de la ventana desplegada aparecerá el
gran total por estos conceptos.
xi) Del lado inferior izquierdo, dos campos con el nombre e ID del
cajero que genera el cierre.
Precondiciones
1 Debe haberse iniciado una sesión como cajero
Poscondiciones
1
Documentación Adjunta
1 Layout de Pantallas de Cierre General e Impresión
MODELO DE INTERFAZ
101
102
MODELO DE DATOS GENERAL SAECH
Encuesta
IdEncuesta
Folio(FK)
IdCurso(FK)
ComoSeEntero Candidato
Actividades Folio
SoyProfesionista 1 1 ApellidoPaterno 1
EstoyInscrito ApellidoMaterno
GiroEmpresa Nombre
NombreEmpresa Calle
DireccionEmpresa Numero
DelegacionEmpresa Colonia ConceptoPago Movimiento
ColoniaEmpresa CodigoPostal Idconcepto IdMovimiento
CodigoPostalEmpresa Delegacion Descripcion Matricula(Fk)
Puesto Telefono Clave IdConcepto(FK)
TelefonoTrabajo RFC Precio 1 *
Saldo
JefeInmediato CURP Cantidad
CargoJefeInmediato CorreoElectronico Fecha
ColegiaturaCubierta FechaNacimiento TipoPago
TipoMovimiento
*
Materia
IdMateria
Nombre
DetalleHorari
Descripcion
Horario 1 * o 1
Clave
Duracion 1 IdHorario IdHorario InscripcionCurso
Descripcion 1 Alumno
Predecesor Dia
Matricula Matricula
HoraInicio
Folio(FK) IdInscripcionCurso(FK)
1 HoraFin IDCurso(FK)
1
Trimestre
1 CalificacionG1
CalificacionG2
Profesor CalificacionC1
* CalificacionC2
IdProfesor FechaInscripcion
Nombre
ApellidoPaterno
1 *
ApellidoMaterno
*
Calle
Colonia Curso
Numero IdCurso
Delegacion * IdMateria(FK) MensajeClase
CodPostal IdHorario(FK) IdCurso(FK)
RFC IdProfesorG(FK) IdMensaje
2 *
CURP IdProfesorC(FK) 1 * Mensaje
CorreoElectronico IdSucursal(Fk) FechaPublicacion
TelefonoCasa * Aula
TelefonoOficina
TelefonoCelular 1
Usuario
Administrativo
1 IdUsuario
IdAdministrativo
Login
1 Nombre
Contraseña
Sucursal ApellidoPaterno
IdAdministrativo(FK)
1 1 ApellidoMaterno
IdSucursal 1 Matricula(FK)
ClaveSucursal IdProfesor(FK)
Nombre 1
Descripcion *
Telefono
MensajeSucursal
IdMensaje
IdUsuario(FK)
IdSucursal(FK)
Mensaje
FechaPublicacion
FechaCaducidad
103
CONCLUSIONES
Referente con el TSP (Team Software Process), al trabajar en equipo fue de gran
utilidad, ya que, en este caso el equipo en general, se dio cuenta de lo difícil que es
trabajar varían personas en un proyecto, y que a su vez los problemas que por ciertas
circunstancias tuvimos durante el desarrollo, también se les presentan a las grandes
organizaciones, tanto para poder cumplir las metas que se definieron desde un
principio en el lanzamiento del proyecto, hacer que se cumplan dichas metas, y poder
relacionarse con otro tipo de persona que posiblemente pueden tener las mismas o
diferentes ideas. Ya hablando del proceso en si de TSP, nos dimos cuenta que es, de
cierta forma ideal para poder desarrollar sistemas en equipo, ya que si se siguen los
lineamientos que este establece, se le puede dar un seguimiento al proyecto, de tal
forma que se conoce el estado en el que se encuentra y poder dar una evaluación a
dicho proyecto.
El contacto con el cliente también fue un aspecto muy importante durante el desarrollo
del sistema, ya que pudimos conocer como es el trato real con el cliente, y aprendimos a
levantar requerimientos reales. Aunque cuando el equipo tomó el proyecto, se nos
entregaron requerimientos que con el transcurso del tiempo fueron cambiando, cada
vez que se mostraba una versión al cliente, y eso nos afectaba mucho ya que si el
cambio era muy brusco se tenía que volver a hacer el análisis y diseño, y ver que
también esos cambios no le afectaran a algún otro módulo. En esa parte de integrar
todo fue muy tediosa ya que por no seguir el estándar de codificación, a veces los
104
módulos individualmente funcionaban, pero ya integrados con otros empezaban a
fallar y eso nos demoraba bastante.
Creemos que el desarrollo del Sistema SAECH, nos permitió darnos cuenta de cómo
pudieran ser las cosas ya en un ámbito más laboral o para trabajar en una organización
o empresa. Tanto lo que se aprendió en PSP y TSP nos va a servir como base para
empezar a desarrollar más en forma sistemas y ver que se puede mejorar, en este caso
el proceso, de tal forma que si el proceso que seguimos no funciona para lo que
deseamos, hacer las modificaciones pertinentes al proceso para que al seguirlo, se
cumplan las metas que se proponen desde un principio.
En general el sistema nos ayudó mucho en la formación académica, gracias a que fue un
proyecto real, se realizó con cuidado y nos dejó un reflejo de lo que será nuestra labor
como programadores.
105
PROPUESTA DE MEJORA DEL PROCESO (PIP)
Número Descripción del Problema
de PIP
1 En el proceso inicial no se considero el tiempo necesario para aprender a
desarrollar páginas Web con herramientas como JSP.
2 No se considero ningún asesor para el desarrollo de páginas JSP y tuvimos
problemas para generar páginas que intercambian y actualizan
información de forma dinámica en tiempo real.
3 Otro problema que se presento fue que los requerimiento de algunos
módulos asignado, no estaban completos, además que hubo una ocasión
en que se tuvo que regresar a realizar el análisis y diseño, ya que lo que se
había entregado no estaba completo.
4 Otro problema que se presentó es que no se siguió el proceso, como se
había acordado en las juntas que se realizaron después del lanzamiento del
Proyecto. Además que debido al tiempo que se había definido para la
primera entrega del sistema, no se siguió con el proceso.
5 No se tomaron tiempos, ni tamaños y tampoco se llevo un registro de los
defectos que estuvimos obteniendo durante el desarrollo del módulo.
Además que no se siguieron las fases del proceso, sobre todo las fases de
revisión, y es ahí donde no se hizo el filtrado de defectos. Aunque la
mayoría de los defectos fueron de codificación y fáciles de resolver.
Aunque si se nos presentaron algunos de diseño, aunque muy pocos, pero
más difíciles de encontrar y resolver.
6 Se prolongo la fecha para liberar el módulo sin errores, además que
conforme se liberaba una versión, a causa de los requerimientos, se tuvo
que estar haciendo mantenimiento, hasta que ya cumplía con lo
especificado por el cliente.
7 La relación de trabajo de algunas parejas no fue la que se desearía para
poder trabajar de forma más dinámica, dado que las ideas que uno
proponía al otro no le convencían.
8 Los requerimientos eran muy escasos y por eso la implementación se hizo
poco eficiente.
9 La herramienta para hacer el despliegue de los EJB en el servidor
(DeployTool) también tiene errores por lo que se complicó encontrar los
errores al hacer pruebas, principalmente las de integración.
10 La tecnología de los EJB no se dominaba a un nivel lo suficientemente
avanzado como para desarrollar de una manera rápida y adecuada.
11 No se siguió correctamente el proceso de TSP, ya que no se tomaron
tiempos de desarrollo, ni se midió el tamaño del código, no se hicieron
revisiones, no se contaron defectos introducidos y no se realizaron PIP’s
para cada ciclo del proyecto.
12 Se enfrento con dificultades al aplicar XP al inicio de la realización del
diseño de la aplicación.
13 Se obtuvieron errores en la codificación debido al escaso conocimiento de
los EJB.
106
2 Crear un grupo, con los integrantes del proyecto, que dedique tiempo a
la investigación de temas que no dominan los integrantes del proyecto, y
establecer sesiones en las que se expondrán estos temas.
3 La propuesta que nosotros proponemos para poder resolver este tipo de
problema, es que cuando se asignen módulos, revisar con cuidado los
requerimientos de módulo, revisar que estén completos, entendibles, y
que en caso que haga falta alguna cosa (ya sea Modelo de Datos, Diseño
de Pantallas, etc.) revisar lo que se tiene, que este bien y realizar lo que
haga falta, ya sea Diseño de pantallas, Diagramas de Secuencia,
Diagramas de Clases, Modelo de Datos, Caso de Uso, etc. Para tener todo
completo y así continuar con la siguiente fase del Proceso.
4 Con referente a seguir el proceso que se define para el equipo, es realizar
un plan de proyecto en el cual se contemplen todas las fases del proceso
y de cierta forma proporcionar el tiempo, ya que como no se tiene
historia de cuanto tiempo se puede tardar en cada fase.
Ya que se tenga una estimación, cumplir con los tiempos que se
definieron y no saltarse ninguna fase, ya que eso pone desorden y ya
estando en la etapa de pruebas, el tiempo en ésta se alarga mucho, a
causa de los defectos que se van encontrando por un mal análisis y
diseño del caso.
107
rotar de pareja.
13 Si no se tiene un amplio conocimiento sobre esta tecnología, lo mejor
sería no correr el riesgo de usarla y utilizar otra tecnología con la cual se
este mas familiarizado, otra solución propuesta es la de antes de ponerse
a codificar, estimar un tiempo para la curva de aprendizaje con respecto
a la tecnología.
108
Notas y Comentarios
• Tuvimos errores de programación debido a que no se siguió el proceso,
el extreme programming fue muy difícil de llevar a cabo, ya que los
horarios de los integrantes diferían demasiado.
• Lo bueno de desarrollar en parejas, es que si se reduce mucho la
introducción de errores, aunque no se tomaron tiempos, y en tiempos se
tiene un registro de los defectos generados, el desarrollo del módulo fue
más rápido.
• La realización de pruebas automatizadas resulto de muy buena ayuda, ya
que nos ayudaba a encontrar las fallas del módulo, en donde ocurría el
error y que es lo que causaba que no funcionara de forma correcta, eso
también nos agradó bastante.
• Trabajar en equipo también fue bueno, y mas cuando todos teníamos
idea de lo que cada quien estaba realizando, es decir, todos conocíamos
el sistema, quien estaba trabajando en que módulo y si había algún
problema se discutía para poder encontrar una solución para ello.
• Con el uso de los Post-Tit, en donde escribíamos como íbamos, en que
versión de los módulos nos encontramos, la fase en que estábamos, etc.
Fue también buena, aunque a veces se nos pasaba actualizarlo y hacer
anotaciones para que los demás estuvieran enterados de lo que estaba
haciendo cada pareja. Así nos dábamos cuenta de que tan bien o mal
íbamos en la aplicación.
• Durante el proyecto nos encontramos con muchos errores de
programación y de integración debido a que no se siguió el proceso,
además no tomábamos en cuenta el tiempo de integración, y es por eso
que hubo ocasiones en las que nos quedábamos hasta muy tarde para
terminar entregables que eran para el otro día, todo esto se debió a que
no hubo una buena organización, ni disciplina de parte del equipo.
• El uso de XP fue complicado al inicio del caso de uso que se realizó, pero
con el tiempo al implementar este proceso se facilito esta tarea; además
de que al aplicarlo aprendimos que al realizar este proceso se mojara la
calidad en las distintas etapas como son planeación, diseño, codificación
y pruebas.
• Otro proceso que se dificulto fue el seguimiento de ciclos en la vida del
sistema ya que no pudimos aplicarlo completamente como fueron
planeadas las distintas tareas. Aunque este proceso ayuda a llevar un
control de los distintos casos de uso y las personas que realizan cada uno
de ellos, los entregables de cada etapa, etc.
109