DESARROLLO DE
SILVIA VIVIANA FLÓREZ TORRES
UNIVERSIDAD AUTONOMA DE BUCARAMANGA
FACULTAD DE INGENIERÍA DE SISTEMAS
BUCARAMANGA
2005
DESARROLLO DE
SILVIA VIVIANA FLÓREZ TORRES
Tesis de Grado para optar al titulo
de
Ingeniera de Sistemas
Director
FERNANDO ANTONIO ROJAS MORALES
Ingeniero de Sistemas
Asesor
JAVIER ERNESTO MORENO GUALDRÓN
Ingeniero de Sistemas
UNIVERSIDAD AUTONOMA DE BUCARAMANGA
FACULTAD DE INGENIERÍA DE SISTEMAS
BUCARAMANGA
2005
El presente trabajo de grado lo dedico a mi Amado Padre, Germán
Alfonso Flórez Vesga, quien a través de sus valiosos trabajos y esfuerzos,
me ha brindado la oportunidad de acceder a
AGRADECIMIENTOS
Deseo
manifestar mis más sinceros agradecimientos a:
Mi Apreciado Director de Proyecto, Fernando
Antonio Rojas Morales, quien a través de sus diálogos ha logrado guiarme
hacia lo que yo he querido realizar como autora del proyecto, compartiéndome
constantemente los valiosos conocimientos que ha adquirido fruto de su
experiencia profesional en la dirección y en la ejecución de proyectos de
Ingeniería de Software.
Mi estimado asesor, Javier
Ernesto Moreno Gualdrón, por brindarme información acerca de las funciones
que desempeñan empresas dedicadas a la gestión del aprendizaje virtual.
Mis estimados evaluadores, Gareth
Barrera Sanabria y Juan Carlos García Ojeda, por aportarme sus valiosas
sugerencias y puntos de vista en lo que respecta a las presentaciones del
proyecto y a la corrección y mejora de los informes de avance del mismo.
A Walter Francisco Vargas Pérez, estimado compañero,
por ofrecerme su ayuda y asesoría en lo referente al funcionamiento y a las
mejoras potenciales del prototipo Eledge.
LISTA
DE TABLAS
Tabla
1. Productos finales del proyecto
Tabla
2. Funciones desempeñadas por las clases de Eledge-UNAB 4.0.
Tabla
3. Relaciones entre las clases de Eledge-UNAB 4.0
Tabla
4. Cantidad de relaciones establecidas entre cada clase y las demás
Tabla
5. Estrategia utilizada para el diseño de las plantillas de prueba
Tabla
6. Cuantificación de los resultados de la fase de pruebas de funcionalidad.
Tabla
9. Clases que contienen directamente el texto de sus interfases GUI
Tabla
10. Tipos de clases que componen el software Eledge-UNAB
Tabla
12. Contenido de las correcciones de traducción de idioma e internacionalización
del mismo
Tabla 14. Algunas estimaciones-estadísticas para el
mantenimiento
Tabla
16. Coste de las actividades de mantenimiento de software
Tabla
17. Paralelo entre funcionalidades de Eledge-UNAB 4.0 y WebCT.
Tabla
18. Fases y actividades del Modelo Lineal Secuencial
Tabla
19. Fases y actividades del Proceso Unificado de Desarrollo
Tabla
20. Características del Proceso
Unificado de Desarrollo
Tabla
21. Correcciones implementadas a nivel de fallas
Tabla
24. Convenciones del anexo F
Tabla
26. Convenciones del anexo G
Tabla
28. Convenciones del anexo H
Figura
1. Modelo Lineal Secuencial
Figura
2. Proceso Unificado de Desarrollo
Figura
3. Interacción de las Fases del Proceso Unificado de Desarrollo
Figura
4. Diagrama de casos de uso actualizado
Figura
5. Enfoque de ingeniería de software aplicado a las actividades de
Figura
6. Propuesta de diseño para la interfase GUI de Eledge
Figura
7. Indicadores estadísticos del costo del mantenimiento de software
Figura
8. Distribución de herramientas de Eledge-UNAB versión 4.0
Figura
9. Correos intercambiado en la estimación de una alternativa de corrección
Anexo
A. Paralelo entre funcionalidades de Eledge-UNAB 4.0 y WebCT
Anexo
B. Modelo Lineal Secuencial y Proceso Unificado de Desarrollo
Anexo
C. Tipos de prueba de software
Anexo
D. Evidencia de correos intercambiados en la estimación de una alternativa de
corrección.
Anexo
E. Documentación de las correcciones implementadas
Anexo
F. Diferencias entre las clases originales y corregidas (sin
Anexo
G. Diferencias entre los archivos de internacionalización (i18n)
Anexo
H. Diferencias entre las clases originales y corregidas
MANTENIMIENTO: modificación de un producto software después de su entrega al cliente o usuario para corregir defectos, para mejorar el rendimiento u otras propiedades deseables, o para adaptarlo a un cambio de entorno.
REINGENIERÍA: examen y modificación de un producto software o de ciertos
componentes, para reconstruirlo en una nueva forma usando para el análisis del
sistema existente técnicas de ingeniería inversa y, para la etapa de
reconstrucción, herramientas de ingeniería directa.
INGENIERÍA DIRECTA: transformación de un modelo en código a través de su
traducción a un determinado lenguaje de implementación.
INGENIERÍA INVERSA: análisis de un sistema para identificar sus componentes y las relaciones entre ellos, así como para crear representaciones del sistema en otra forma o en un nivel de abstracción más elevado. El proceso de construir especificaciones abstractas del código fuente de un sistema heredado, de manera que estas especificaciones puedan ser utilizadas para construir una nueva implementación del sistema hacia delante.
REESTRUCTURACIÓN DEL SOFTWARE: modificación del software para
hacerlo más fácil de entender y cambiar o menos susceptible de incluir errores
en cambios posteriores.
INTRODUCCIÓN
El desarrollo
de la fase de prueba y corrección de defectos del prototipo Eledge-UNAB versión
4.0 es un proyecto de gran envergadura para el soporte de los procesos
educativos de
A pesar de
los grandes logros obtenidos con la construcción de este prototipo[1], aún queda por desarrollar una fase
de prueba para la evaluación de sus operaciones actuales y la determinación de
los ajustes funcionales más adecuados a ser desarrollados, que permitan que
Eledge-UNAB versión 4.0 opere como prototipo de un sistema de gestión de
aprendizaje para el soporte de los procesos educativos de
La solución
que este proyecto ofrece a tal problemática se enmarca dentro de su objetivo
general, el cual consiste en ejecutar pruebas de funcionalidad a este prototipo
e implementarle correcciones con base en los resultados de tales pruebas. Para
materializar esta solución, el proyecto propone el estudio de los productos de
las fases de ingeniería de software que permitieron la construcción del
prototipo, así como la ejecución y documentación de pruebas rigurosas con
respecto a su funcionalidad, y la posterior implementación y documentación de
correcciones.
La relevancia del presente proyecto para la ingeniería
de sistemas radica en que sus resultados dan evidencia de la necesidad de
incrementar el aseguramiento de la calidad de los productos de software a
desarrollar en los proyectos de grado.
Con
el objetivo de diseñar una metodología de trabajo adecuada a la naturaleza y
propósito de este proyecto, se estudiaron los fundamentos conceptuales que
orientan la planeación y ejecución de los procesos de pruebas del prototipo
Eledge-Unab versión 4.0, así como las metodologías y técnicas de desarrollo de
software: Modelo Lineal Secuencial* y
Proceso Unificado de Desarrollo*.
El
contenido de esta sección está organizado de la siguiente forma: primero, se
presentan las metas e implicaciones generales del proceso de pruebas, luego la
descripción del tipo de prueba que se aplicará en el presente proyecto, a
saber: prueba de funcionalidad. Seguidamente, se incluye la esquematización
gráfica y la explicación de las características y fases involucradas en las dos
metodologías y técnicas de desarrollo ya mencionadas. Finalmente, se presenta
el diseño de la metodología a seguir para el desarrollo de este proyecto, de
manera gráfica y con una descripción y explicación de las etapas de su flujo de
trabajo.
En
el Anexo C, se exponen otros tipos de prueba cuya ejecución es bastante
acostumbrada, debido al impacto que ejercen en el proceso de determinación de
correcciones y mejoras de software; a saber: pruebas de caja negra, caja gris,
caja blanca, de unidades, de integración, de desarrolladores y artefactos, de
interfaz,
del
sistema, de funcionalidad, de utilidad, de regresión, de aceptación, de
instalación, y pruebas alfa y beta.
1.1 METAS E
IMPLICACIONES DE LAS PRUEBAS
El
objetivo de las pruebas es encontrar el mayor número de defectos, con el más
alto nivel de severidad posible. Probar un software
implica ejecutarlo en escenarios pre-diseñados y controlados, para detectarle
defectos pero no para validar si éste funciona. Es decir, mediante las pruebas se puede evidenciar si
existen o no defectos, pero jamás asegurar que no los hay. Por esto, un caso de
prueba sólo es exitoso cuando permite descubrir un defecto[2].
Sin
embargo, jamás podrá probarse un sistema a cabalidad. Esto se debe a que el
número de maneras en que éste puede ejecutarse es ilimitado, debido a la enorme
cantidad de combinaciones de datos que puede recibir de sus usuarios.
Es
apropiado hacer notar que, antes de comenzar expresamente la fase de pruebas,
el programador de la aplicación a probar realiza una depuración del código para
verificar que lo “más básico” del mismo, funciona. Luego, en la fase de pruebas
formales se comienzan a detectar defectos haciendo uso de un “criterio de
búsqueda” a la vez, el cual determina el tipo de prueba a realizar[3].
Las
pruebas son responsables de más de la mitad del tiempo dedicado a los
proyectos; por esto siempre es necesario realizarlas lo más pronto posible,
durante el proceso de desarrollo de la aplicación e inmediatamente después de
lanzarse una primera versión de la misma[4].
También
denominadas “pruebas de caja negra”, la ejecución de este tipo de pruebas toma
como parámetro de verificación y validación, la especificación de los
requisitos funcionales del software a evaluar; y tiene como propósito encontrar
los casos en los cuales éstos no se cumplan, partiendo del análisis de las
salidas visibles al usuario, generadas por el ingreso de combinaciones
controladas de datos[5].
Debido
a que la actividad de probar el 100% de las posibilidades de ejecución de un
software, tiene una complejidad infinita, es necesario precisar de un conjunto
de técnicas mediante las cuales se diseñen casos de prueba que consideren la
máxima cantidad de alternativas de entrada al sistema. Éstas técnicas se
denominan: clases de equivalencia o particiones
Las
clases de equivalencia son conjuntos de datos que al ingresar al sistema,
producen un mismo tipo de respuesta o comportamiento. La determinación de éstas
se logra identificando las condiciones de contenido y/o formato de las entradas
válidas* del sistema. Así, los datos que cumplen
con estas condiciones, corresponderán al rango de las clases de equivalencia
válidas; y los que no, pertenecerán a las clases de equivalencia inválidas.
Algunas de las directrices que ayudan a encontrar estas clases son:
Al manejar rangos de datos de entrada, definir tres clases de equivalencia: una para los datos que pertenecen al rango, otra para los datos inferiores a este rango y una última para los superiores a él.
En situaciones en que los datos de entrada tienen que ser de cierto tipo (como booleano), definir dos clases de equivalencia: una para los que cumplan con tal condición y otra para los que no[6].
Si se intuye que hay ciertos elementos de una clase de equivalencia que no son tratados de la misma manera por el sistema, hay que asignarlos a una clase de equivalencia distinta -una por cada variación en el tratamiento -.
Posteriormente, se asigna a cada clase de equivalencia, un número único que la identifique de las demás. Para comenzar a diseñar los casos de prueba, se tiene presente que, a mayor número de clases de equivalencia válidas dentro de un caso de prueba, mayor eficiencia de prueba. Por el contrario, al tratarse de clases de equivalencia no válidas, hay que crear un caso de prueba por cada una de ellas[7].
1.3
METODOLOGÍAS DE DESARROLLO DE SOFTWARE
1.3.1 Modelo Lineal Secuencial
Este
modelo de desarrollo de software consta de un conjunto de fases cuyo
seguimiento se realiza en una sola dirección, y su progreso se da en términos
de la completitud secuencial de cada una de ellas, a través del tiempo. No
considera la presencia de ciclos de realimentación iterativos e incrementales,
debido a que la ejecución de las actividades propias de cada fase se
circunscribe estrictamente al período de duración de ésta[8].
Figura 1. Modelo Lineal Secuencial
Fuente documental:
PRESSMAN, Roger. Ingeniería del software: un enfoque práctico. 5 ed.
Madrid: McGraw Hill, 1998.
En
1.3.2
Proceso Unificado de Desarrollo
El
modelo de trabajo que sigue el Proceso Unificado de Desarrollo se caracteriza
por incluir ciclos de realimentación positiva entre las actividades
pertenecientes a cada una de sus fases[9].
Esto posibilita que el equipo de desarrollo del software comience la
elaboración y/o refine los artefactos propios de cada fase, durante el
transcurso de todo el proyecto, como se muestra en
Figura 2. Proceso Unificado de Desarrollo
Fuente
documental: JACOBSON, Ivar. BOOCH, Grady. RUMBAUGH, James. El proceso unificado
de desarrollo de software. Madrid: Pearson Educación, 2000.
La naturaleza iterativa e
incremental del ciclo de realimentación general -que estructura la interacción
entre las fases de este modelo-, se ilustra a continuación, en
Figura 3. Interacción de las Fases del Proceso Unificado de Desarrollo
Fuente documental: JACOBSON, Ivar. BOOCH, Grady.
RUMBAUGH, James. El proceso unificado de desarrollo de software. Madrid:
Pearson Educación, 2000.
La descripción detallada de las tareas que se ejecutan en las
fases de este modelo, se presenta en el Anexo B.
2. DESARROLLO DEL PRODUCTO FINAL
En esta sección se presentan
los resultados del presente trabajo que, a la fecha y de acuerdo al cronograma
del proyecto, validan el cumplimiento de los objetivos específicos del mismo,
así como los productos que se corresponden con ellos y les proporcionan valor
agregado. Éstos resultados y productos
se explican de manera resumida en la tabla 1, y de manera detallada en las
sub-secciones que la siguen y/o en los Anexos y secciones que se especifican a
continuación.
Tabla 1. Productos finales del proyecto
Objetivo específico |
Resultado que lo valida (Aportes del Proyecto) |
Realizar
un estudio detallado de las herramientas, metodologías, documentación,
requisitos definidos; y fases de análisis, diseño e implementación del
prototipo generado en el proyecto: “Desarrollo de un Prototipo LMS*”,
dirigido por el Ing. Fernando Rojas Morales. |
Paralelo
entre funcionalidades de Eledge-UNAB 4.0 y WebCT (Anexo A). Estrategia de entendimiento del código fuente de Eledge-UNAB 4.0
(Sección 2.1): |
Objetivo
específico |
Resultado que lo valida (Aportes del Proyecto) |
|
|
2. Diseñar la metodología para la ejecución de
pruebas de funcionalidad y la implementación de correcciones en Eledge-UNAB
4.0, con base en un estudio del Proceso Unificado de Desarrollo y del Modelo
Lineal Secuencial. |
Modelo Lineal Secuencial y Proceso Unificado de
Desarrollo (Anexo B). |
3. Realizar un estudio de los tipos de pruebas de
software y seleccionar los más apropiados para validar y verificar la
funcionalidad de Eledge-UNAB 4.0. |
Tipos de prueba de software (Anexo C). |
4. Ejecutar y documentar pruebas rigurosas de
funcionalidad al prototipo Eledge-UNAB
4.0. |
Estrategia utilizada para el diseño de las
plantillas de prueba (Sección 2.2) Documentación
del proceso de prueba de funcionalidad del prototipo Eledge-UNAB 4.0 (Sección
2.3) Diseño de plantillas de pruebas para evaluar la
funcionalidad de Eledge y diligenciamiento de las plantillas de pruebas
diseñadas, para evaluar la funcionalidad de Eledge (Sección 2.3.1) Documentación de los resultados de la fase de
pruebas de funcionalidad, por cada caso de prueba (Sección 2.4): Especificación de las fallas y las
funciones a mejorar detectadas al seguir un proceso riguroso de pruebas de
funcionalidad (Sección 2.4.1) Especificación de los requisitos de
corrección y mejora correspondientes a cada una de las fallas de
funcionalidad detectadas (Sección 2.4.2) Cuantificación de los resultados de
la fase de pruebas de funcionalidad (Sección 2.4.3) |
5. Implementar y documentar las correcciones de
funcionalidad al prototipo Eledge-UNAB 4.0, con base en los resultados del
objetivo No. 4. |
Estrategia utilizada para la detección del mayor
número de defectos que producen la mayor cantidad de fallas (Sección 2.5) Estrategia utilizada para la estimación de las
alternativas de correcciones y su alcance (Sección 2.6) ü Identificación y priorización de
las funcionalidades de Eledge (Sección 2.6.1) Ingeniería inversa a nivel de diseño (Sección 2.7):
·
Estrategia utilizada para la discriminación de las clases en términos
de los tipos de funciones que desempeñan (Sección 2.7.5) Reingeniería
de Eledge >> Ingeniería directa (Sección
2.8): Documentación de las correcciones
implementadas en el prototipo (Sección 2.8.1): ·
Reestructuración de Eledge a nivel
de arquitectura (Sección 2.8.1.1)
Diagrama de
Clases actualizado según correcciones (Sección
2.9) Manual Técnico actualizado, a partir de los
productos del proyecto (Sección 2.10) Manual de Instalación actualizado, en términos de
claridad en el procedimiento de instalación y según lo realizado en el
proyecto (Sección 2.11) |
Fuente documental: autora del proyecto
Valores
agregados:
Algunas estimaciones–estadísticas para el mantenimiento (Sección
2.12)
Diagrama de
Paquetes y Descripción tabular de su diseño, como propuesta para la
reestructuración de Eledge a nivel de Arquitectura (Sección 2.13)
Propuesta de
Diseño para
2.1 Estrategia de entendimiento del código de Eledge-UNAB
4.0.
Como
estrategia para el entendimiento del código actual del prototipo Eledge-UNAB
versión 4.0, se tiene el siguiente procedimiento:
1.
Identificar
las clases que componen el prototipo.
2.
Para cada
clase identificada, definir su función principal en el funcionamiento del
prototipo.
3.
Identificar
la relación que cada clase tiene con las demás clases del prototipo.
4.
Priorizar el
entendimiento de cada clase según la cantidad de relaciones que tenga con las
demás, en orden descendente; de manera que primero se comprenda el
funcionamiento de las clases más invocadas por las demás (las más necesitadas),
y de último, el comportamiento de aquéllas con menor número de invocaciones
(las menos necesitadas).
Los
resultados de la ejecución de cada uno de estos pasos, son presentados en las
tres tablas que siguen (la tabla 2 expone los resultados de los pasos 1 y
2, la tabla 3 expone los del paso 3 y la
tabla 4 los del paso 4).
Tabla 2. Funciones desempeñadas por las clases de Eledge-UNAB 4.0.
NOMBRE
ARCHIVO (CLASE) |
DESCRIPCIÓN |
Calendar |
Realiza todas las funciones de un calendario donde
el docente: Crea y modifica eventos en los días seleccionados
del calendario Visualiza a los estudiantes del curso. Esta clase fue modificada para que la
información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Course |
Contiene la información de la configuración del
servidor y de la base de datos que es utilizada por casi el resto de módulos
servlets. Esta clase fue modificada para la plataforma
Eledge-UNAB. |
Email |
Para visualizar las direcciones de correo de los
estudiantes del curso Para que el docente envíe cualquier mensaje desde la
aplicación Para los estudiantes solo despliega la lista de
direcciones. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Home |
Cargar la página de inicio para el curso y para la
plataforma. La pagina es por defecto y el administrador y
docente pueden modificarlas. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
ManageContent |
Para que el docente pueda: Crear y editar el contenido del curso en temas Agregar páginas en esos temas a través de un editor
HTML Subir archivos para la ayuda del contenido del
curso. Esta clase es completamente nueva para la
plataforma Eledge-UNAB. |
ManageExam |
Para que el docente pueda: Crear, borrar y actualizar evaluaciones para el
curso Agregar y quitar preguntas de cada examen Definir parámetros de los exámenes. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Page |
Para crear la pagina Web del sistema Eledge. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Profile |
Mostrar los datos del usuario Recuperar la contraseña del usuario Crear nuevos usuarios en el sistema. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Scores |
Permite visualizar al usuario: Los exámenes que están asignados Aquellas actividades ya realizadas. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
TAPermission |
Dar los permisos que tienen los docentes asignados a
su perfil. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
CharHider |
Para insertar caracteres a las variables que la
requieran, para utilizarlos tanto en código HTML y sentencias SQL. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
Cursos |
Visualizar la lista de los cursos que hay en el
sistema Cargar el curso seleccionado por el usuario. Esta clase es completamente nueva para la
plataforma Eledge-UNAB. |
Exam |
Le indica al Compilador de Java y al Motor del
Servlet cómo nombrar cada Importación del servlet |
Install |
Reiniciar la base de datos una vez que la aplicación
haya sido utilizada. Esta clase es completamente nueva para la
plataforma Eledge-UNAB. |
Logger |
Para grabar logs, estos son registros del
funcionamiento acerca del sistema. Esta clase no fue modificada para la
plataforma Eledge-UNAB |
ManageCourse |
Permite: Definir parámetros del sistema Reiniciar la base de datos del sistema y la
información de los logs. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
ManageFiles |
Subir los archivos a los cursos -estos archivos son
guardados en carpetas en el servidor-. Esta clase es completamente nueva para la
plataforma Eledge-UNAB. |
Permission |
Esta clase es fundamental para la clase Permissions Tiene como función el permiso asignado para el
usuario. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
Question |
Gestionar las preguntas creadas para las
evaluaciones del curso Visualizar los formatos de las preguntas Crear, modificar y eliminar preguntas. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Student |
Esta clase tiene los parámetros de los estudiantes
(Usuarios) del sistema. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
TAS |
Crear el HasMap para los permisos de los docentes a
partir de los permisos definidos en el sistema. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Content |
Visualizar el contenido de los cursos seleccionados Proporciona el contenido en temas y en páginas, para
una buena navegación. Esta clase es totalmente nueva de la anterior
versión ya que proporciona más funciones. Esta clase es completamente nueva para la plataforma
Eledge-UNAB. |
DiscussionBoard |
Agregar mensajes al foro del curso por parte de los
estudiantes Revisarlos y contestarlos. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Gradebook |
Permite visualizar las calificaciones obtenidas por
los estudiantes en las actividades asignadas por el docente. Permite al docente manipular las notas y agregar más
notas a los estudiantes. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
InstallDB |
Crear la base de datos por primera vez Debe ser eliminada una vez haya cumplido su
finalidad. Esta clase es completamente nueva para la
plataforma Eledge-UNAB. |
Login |
Visualizar la página para el ingreso de un usuario Validar su existencia Crear una sesión para dicho usuario. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
ManageCursos |
Crear, gestionar los cursos del sistema Crear, editar, eliminar y exportar un curso. Esta clase es completamente nueva para la plataforma
Eledge-UNAB. |
ManageTAPermissions |
Proveer la interfase para los docentes Modificar los permisos Fijar nuevos permisos para el sistema. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
PermissionData |
Contiene la base de datos de los permisos definidos
en el sistema. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
RBStore |
Buscar el lenguaje indicado para la plataforma. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
Syllabus |
Visualiza la página de instrucciones de los
cursos. El docente puede modificarla con el editor HTML. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
Usuarios |
Gestionar los usuarios existentes del sistema Asignales los perfiles definidos por el
administrador Cambiar sus contraseñas de acceso. Esta clase es completamente nueva para la
plataforma Eledge-UNAB. |
ContentPacking |
Exportación del contenido del curso en el estándar
IMS Content Parking Crea el manifiesto, las paginas html (recursos), las
organizaciones Lo comprime en un archivo .ZIP Esta clase es completamente nueva para la
plataforma Eledge-UNAB. |
EledgeResources |
Contiene el idioma que utiliza el Eledge Agregar otros idiomas. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
Help |
Visualiza la página de ayuda para los profesores y
para los estudiantes Esta pagina es por defecto y el docente puede
modificarla por medio del editor HTML Esta pagina da a conocer respuestas de varios
interrogantes acerca del uso del sistema Eledge-UNAB. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
JSmethods |
Validar el formato HTML, insertando código
JavaScript. Esta clase no fue modificada para la
plataforma Eledge-UNAB |
Logout |
Permite terminar la sesión del usuario que esta
actualmente en el sistema. Esta clase no fue modificada para la
plataforma Eledge-UNAB |
ManageDiscussionBoard |
Permite que el docente cree y borre categorías para
el foro del curso. Esta clase fue modificada de tal manera que
la información que maneja pueda ser soportada para múltiples cursos de la
plataforma Eledge-UNAB. |
MultiPart |
Esta clase complementa a la clases ManageFiles para
subir los archivos de para un curso. Esta fue adaptada para la plataforma
Eledge-UNAB |
Permissions |
Controlar los permisos de los usuarios Contiene el HasMap de los permisos definidos por el
sistema. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
ResetCourse |
Se encarga de partes de la base de datos Sólo el administrador tiene acceso a esta clase Define qué registros desea borrar. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
TA |
Esta clase tiene los parámetros de los usuarios que
cumplan con las condiciones de Docentes. Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
WebPage |
Esta clase tiene los parámetros de las paginas para
gestionarlas en Esta clase no fue modificada para la
plataforma Eledge-UNAB. |
Fuente documental: autora del proyecto
A continuación, en la tabla 3 se
muestran las relaciones existentes entre todas y cada una de las clases que
componen el prototipo Eledge-UNAB versión 4.0.
Tabla 3. Relaciones entre las clases de Eledge-UNAB 4.0
CLASE |
RELACIONES |
Calendar |
Se asocia con Cursos |
CharHider |
Usada por Syllabus Usada por Home Usada por Content Usada por Exam |
Content |
Asociada (administrada por) con ManageContent Usa a ChartHider Usa a RBStore Asociada con Cursos Usa a Page |
ContentPacking |
Asociada con Cursos (Los cursos se exportan en
contentpacking) |
Course |
Usada por ManageCourse Usada por Cursos |
Cursos |
Usa a Course Asociada con Calendar Asociada con Help Asociada con Exam Asociada con Email Asociada con (administrada por) ManageCursos Asociada con DiscussionBoard Asociada con Scores Asociada con GradeBook Asociada con ManageFiles Asociada con Content Asociada con ContentPacking (se exportan en
ContentPacking) Asociada con Home Asociada con Syllabus |
DiscussionBoard (Foro) |
Asociada con Cursos Usa a Page Usa a RBStore Asociada con (administrada por)
ManageDiscussionBoard |
EledgeRecourses |
Usada por RBStore |
Email |
Asociada con Cursos Usa a Page Usa a RBStore Asociada con Logger |
Exam |
Asociada con Cursos Usa CharHider Usa a Page Usa a RBStore Usa a JSMethods Asociada con (administrada por) ManageExam Agrega por referencia a Question Asociada con Logger |
Gradebook |
Asociada con Cursos Usa a RBStore Usa a Page Usada por Scores |
Help |
Asociada con Cursos Usa a Page Usa a RBStore |
Home |
Usa a Page Usa a CharHider Usa a RBStore Asociada con Cursos |
Install |
Aislada |
Jsmethods |
Usada por Exam |
Logger |
Asociada con Exam Asociada con Email |
Login |
Usa a Student Usa a Page |
Logout |
|
ManageContent |
Asociada con (administra a) Content |
ManageCourse |
Asociada con ResetCourse Asociada con Usuarios Usa a Course |
ManageDiscussionBoard |
Asociada
con (administra a) DiscussionBoard |
ManageExam |
Asociada con (administra a) Exam |
ManageFiles |
Asociada con Cursos Usa a Page Usa a RBStore Usa a Multipart |
ManageTaPermissions |
Asociada con (modifica a) TAPermission |
MultiPart |
Agrega (Composición-por Valor) a UploadedFile Usada por ManageFiles |
Page |
Usa a WebPage Usada por Login Usada por ManageFiles Usada por Gradebook Usada por DiscussionBoard Usada por Content Usada por Syllabus Usada por Home Usada por Email Usada por Exam Usada por Help Usada por Calendar |
Permission |
Usada por Permissions Asociada con PermissionData |
PermissionData |
Asociada con Permission |
Permissions |
Usa a
Permission Es usada por TAS Asociada con Student |
Profile |
Asociada con Student Asociada con TA (TA la tiene) |
Question |
Agregada (por referencia) por Exam |
RBStore |
Usa a
EledgeResources Usada por Syllabus Usada por Home Usada por Content Usada por DiscussionBoard Usada por Calendar Usada por Gradebook Usada por Help Usada por Scores Usada por Exam Usada por Email Usada por ManageFiles |
ResetCourse |
Asociada con ManageCourse |
Scores |
Usa a Gradebook Asociada con Cursos Usa a RBStore |
Student |
Asociada con Permissions Asociada con Profile Asociada con TA (TA la tiene) Usada por Login Usada por Logout |
Syllabus |
Usa a Page Usa a CharHider Usa a RBStore Asociada con Cursos |
TA |
Asociada con (tiene a) Profile Asociada con (tiene a) Student Asociada con TAPermission |
TAPermission |
Asociada con TAS Asociada con (administrada por) ManageTAPermissions Asociada con TA |
TAS |
Usa a Permissions Asociada con TAPermission |
Usuarios |
Asociada con ManageCourse |
WebPage |
Usada por Page |
Fuente documental: autora del proyecto
Tabla 4. Cantidad de relaciones establecidas entre cada clase y las demás
CLASE |
CANTIDAD
DE RELACIONES CON CLASES EXTERNAS |
Calendar |
3 |
CharHider |
3 |
Content |
5 |
ContentPacking |
1 |
Course |
2 |
Cursos |
13 |
DiscussionBoard
(Foro) |
4 |
EledgeResourses |
1 |
Email |
4 |
Exam |
8 |
Gradebook |
4 |
Help |
3 |
Home |
4 |
Install |
0 |
Jsmethods |
1 |
Logger |
2 |
Login |
2 |
Logout |
1 |
ManageContent |
1 |
ManageCourse |
3 |
ManageDiscussionBoard |
1 |
ManageExam |
1 |
ManageFiles |
4 |
ManageTaPermissions |
1 |
MultiPart |
1 |
Page |
11 |
Permission |
2 |
PermissionData |
1 |
Permissions |
3 |
Profile |
2 |
Question |
1 |
RBStore |
11 |
ResetCourse |
1 |
Scores |
3 |
Student |
5 |
Syllabus |
4 |
TA |
3 |
TAPermission |
3 |
TAS |
2 |
Usuarios |
1 |
WebPage |
1 |
InstallDB |
0 |
Fuente documental: autora del proyecto
2.2 Estrategia utilizada para el diseño de las plantillas de prueba
Tabla 5. Estrategia utilizada para el diseño de las plantillas de prueba
Estrategia |
¿En qué
consiste la estrategia? |
Resultados
de la aplicación de
la estrategia |
Estrategia utilizada para
el diseño de las plantillas de prueba |
Tomar como guía el Manual de Usuario de Eledge, para
el diseño de: ·
El orden de pasos que ha de
seguirse para usar las opciones de Eledge. ·
Los procedimientos mediante los
cuales se verifique que lo desplegado en pantalla al seguir tales pasos, sea
lo correcto en términos de la funcionalidad establecida en el Manual de
Usuario de Eledge. ·
Las diferentes alternativas de
datos de entrada que pueden disparar eventos erróneos en términos de la
funcionalidad establecida en el Manual de Usuario de Eledge. |
Documentación
del proceso de prueba de funcionalidad del prototipo Eledge-UNAB 4.0 (Sección
2.3) Diseño de plantillas de pruebas
para evaluar la funcionalidad de Eledge y diligenciamiento de las plantillas
de pruebas diseñadas, para evaluar la funcionalidad de Eledge (Sección 2.3.1) Documentación de los resultados de la fase de
pruebas de funcionalidad, por cada caso de prueba (Sección 2.4): Especificación de las fallas y las
funciones a mejorar detectadas al seguir un proceso riguroso de pruebas de
funcionalidad (Sección 2.4.1) Especificación de los requisitos de
corrección y mejora correspondientes a cada una de las fallas de
funcionalidad detectadas (Sección 2.4.2) Cuantificación de los resultados de
la fase de pruebas de funcionalidad (Sección 2.4.3) |
Fuente documental: autora del proyecto
2.3 Documentación del proceso de prueba de funcionalidad del prototipo
Eledge-UNAB 4.0:
Esta documentación da evidencia del proceso seguido por la autora del proyecto,
para realizar las pruebas de funcionalidad del prototipo Eledge-UNAB versión
4.0. La manera en que se llevó a cabo este proceso de pruebas, es la siguiente:
primero, se dividieron los servicios generales del prototipo en funcionalidades
concretas, con base en el contenido del manual de usuario elaborado en el
proyecto anterior; segundo, se diseñaron las plantillas de pruebas para tales
funcionalidades, de manera que estas últimas pudieran ser manejadas como casos
de prueba; tercero, se documentaron las entradas utilizadas en cada caso de
prueba, así como sus respectivas salidas, en función de la secuencia de pasos
establecida en las plantillas de prueba. Finalmente, se documentaron los
resultados del diligenciamiento de tales plantillas, por parte de la autora del
proyecto, especificando las fallas de funcionalidad del prototipo y sus
correspondientes requisitos de corrección.
El diligenciamiento de las
plantillas para cada caso de prueba, se realizó teniendo en cuenta la secuencia
presentada a continuación:
1. Registro y Apertura de una Sesión
2. Acceso y Adición de Cursos
3. Edición de Páginas Web
4.
Gestión de Usuarios
5. Gestión y Uso de Exámenes
6. Gestión y Uso de Foros
7. Uso del Correo
8. Uso de
9.
Uso
de
10. Gestión
de Características de
La información propia de las
secciones 2.3.1, 2.4, 2.4.1 y 2.4.2, se condensa dentro del contenido del Anexo
I, de manera que se puedan apreciar ordenadamente los resultados de las
siguientes actividades:
·
Diseño de
plantillas de pruebas para evaluar la funcionalidad de Eledge y diligenciamiento
de las plantillas de pruebas diseñadas, para evaluar la funcionalidad de Eledge
·
Documentación de los resultados de la fase de
pruebas de funcionalidad, por cada caso de prueba.
·
Especificación de las fallas y las funciones a
mejorar detectadas al seguir un proceso riguroso de pruebas de funcionalidad
·
Especificación de los requisitos de corrección y
mejora correspondientes a cada una de las fallas de funcionalidad detectadas
2.4.3 Cuantificación de los
resultados de la fase de pruebas de funcionalidad
La
distribución de la cantidad detectada de puntos a corregir en el prototipo Eledge-UNAB
versión 4.0, en función de sus casos de prueba, se muestra a continuación, en
la tabla 6.
Tabla 6. Cuantificación de los resultados de la fase de pruebas de funcionalidad.
Caso
de Prueba |
Cantidad
total de Fallas detectadas |
Cantidad
total de Funciones a mejorar detectadas |
Registro y Apertura de una Sesión |
3 |
1 |
Acceso y Adición de Cursos |
24 |
4 |
Edición de Páginas Web |
1 |
0 |
Gestión de Usuarios |
3 |
5 |
Gestión y Uso de Exámenes |
62 |
11 |
Gestión y Uso de Foros |
10 |
3 |
Uso del Correo |
5 |
0 |
Uso
de |
9 |
1 |
Uso de |
1 |
0 |
Gestión
de Características de la Plataforma |
10 |
3 |
TOTAL |
128 |
28 |
Fuente documental: autora del proyecto
2.5 Estrategia utilizada para la detección del mayor número de defectos que
producen la mayor cantidad de fallas.
Como resultado del análisis de
las estrategias más adecuadas a seguir (en términos de costo/beneficio), para
la corrección de la mayor cantidad de fallas en el menor período de tiempo, se
determinó que el enfoque necesario consistía en corregir la raíz del problema y
no sólo sus manifestaciones y/o consecuencias; es decir, corregir
el defecto que ocasiona las fallas, en lugar de pretender “corregir” las
fallas como tales.
Lo anterior, en razón a que:
·
El defecto se constituye como la
causa de la falla
·
Un defecto puede ocasionar una o
varias fallas
·
La corrección de un defecto puede
repercutir en la corrección de más de una falla
Tabla 7. Estrategia para la detección del mayor número de defectos que producen la mayor cantidad de fallas.
Estrategia |
¿En qué consiste la estrategia? |
Resultados de la
aplicación de la estrategia |
Estrategia utilizada para la detección del mayor
número de defectos que producen la mayor cantidad de fallas. |
1. Identificar las funcionalidades que presta
Eledge 2. Priorizar estas funcionalidades según: ·
Cantidad de fallas detectadas en
cada una de ellas ·
La estimación del porcentaje de
servicios que cada una aporta a la
totalidad de los servicios de Eledge 3. Definir un paquete por cada funcionalidad
(descomposición de Eledge-UNAB en paquetes de clases, discriminados según la
funcionalidad que cumplen) 4. Priorizar cada paquete en términos de la
prioridad de su funcionalidad 5.
Agrupar las clases según la funcionalidad
que implementan. 6. Examinar
la arquitectura del código de las clases agrupadas en los paquetes que tienen
mayor prioridad. Criterios de discriminación de paquetes Los paquetes se utilizan para agrupar los archivos
de código fuente. Teniendo en cuenta el hecho de que, todo sistema grande ha de
dividirse en unidades más pequeñas, de modo que se facilite su mantenimiento
y que los equipos de trabajo no interfieran con el trabajo de los otros. Esta descomposición de Eledge-UNAB en paquetes de
clases, discriminados según la funcionalidad que cumplen, tiene como objetivo
adicional: Proporcionar a Eledge-UNAB una organización
arquitectónica que facilite su mantenimiento e incorporación de funcionalidad
a nivel de presentación, lógica e interacción con la base de datos |
Sección
2.6.1 Al aplicar esta estrategia se detectaron los siguientes
defectos: A nivel de Arquitectura: ·
El porcentaje de clases que
simultáneamente desempeñan funciones de un solo tipo, es 21 %. ·
El porcentaje de clases que
simultáneamente desempeñan funciones de dos tipos, es 18,5%. ·
El porcentaje de clases que simultáneamente
desempeñan funciones de tres tipos, es 60,5%. ·
Existe redundancia de código entre
diferentes clases. ·
Los códigos de definición y de
manipulación de la base de datos de Eledge, se relacionan de manera altamente
acoplada y bajamente cohesiva, puesto que en las mismas clases en que se
crean las tablas de la base de datos, simultáneamente se insertan datos. Esto
ocasiona dificultades en el proceso de pruebas de Eledge, porque cada vez que
se realizan cambios en los datos que esa clase inserta en las tablas de
Eledge, y luego se ejecuta tal clase (para probar tales cambios), se reinicia
el proceso de creación de tales tablas y se eliminan automáticamente todos
los datos que hasta el momento se hayan insertado en tales tablas. La pérdida
de este gran volumen de datos repercute en una pérdida de tiempo directamente
proporcional a tal volumen, durante el proceso de pruebas del software. ·
El código del 65% de las clases de Eledge incluye directamente
texto a desplegar a nivel de interfase GUI; es decir, éste no es capturado de
los archivos de Eledge que contienen texto en diferentes idiomas (archivos
tipo properties). Por tanto, no aparece en pantalla el texto correspondiente
al idioma configurado en la máquina, sino el incluido directamente en
el código de tales clases, el cual No es internacionalizable debido a que
siempre aparecerá en pantalla sin tener en cuenta el idioma configurado en la
máquina. ·
La arquitectura del código que gestiona las interfases de Eledge (Html
y JavaScript) posee un alto grado de acoplamiento y un bajo grado de cohesión
con respecto al código que gestiona la lógica (Java Servlets) y la interacción
con la base de datos (Sql). Este defecto dificulta el mantenimiento y la
escalabilidad (incorporación de nueva funcionalidad) a niveles de interfase y
lógica de Eledge. A nivel del grado en que la interfase
posibilita la funcionalidad del software: ·
Interfase poco intuitiva en cuanto
al orden de pasos que el usuario ha de seguir para realizar determinada
acción y usar las opciones de Eledge. |
Fuente documental: autora del proyecto
2.6 Estrategia utilizada para la estimación de las alternativas de
correcciones de los defectos y sus alcances
Estrategia |
¿En qué consiste la estrategia? |
Resultados de la aplicación de la estrategia |
Estrategia utilizada para la estimación de las
alternativas de correcciones y su alcance |
Proponer alternativas de corrección para cada uno de
los defectos detectados, y realizar la estimación de sus alcances. |
En la sección 2.12 se describen en detalle tales
alternativas, así como las actividades realizadas para la estimación de sus
alcances y los resultados de estas actividades. |
Fuente documental: autora del proyecto
2.6.1 Identificación y
priorización de las funcionalidades de Eledge
1. Configurar
el idioma del sistema
2. Gestión
de Usuarios
3. Acceso
y Adición de Cursos
4. Gestión
y Uso de Exámenes
5. Gestión
y Uso de Foros
6. Uso
de
7. Gestión
de Características de
8. Edición
de Páginas Web
9. Registro
y Apertura de una Sesión
10. Gestión
de Permisos
11. Uso
del Correo
12. Uso
de
13. Configurar
servidor y base de datos
14. Crear
logs
15. Crear
y cargar páginas web
16. Crear
y controlar base de datos
17. Crear
sentencias Sql y Html
2.7 Ingeniería inversa a nivel
de diseño
2.7.1 Diagrama de casos de uso
actualizado
Figura 4. Diagrama de casos de uso actualizado
Fuente documental: autora del proyecto
2.7.2 Clases que contienen directamente el texto
de sus interfases GUI
Tabla 9. Clases que contienen directamente el texto de sus interfases GUI
Clase |
|
Calendar |
SI |
CharHider |
SI |
Content |
SI |
Cursos |
SI |
DiscussionBoard |
SI |
Email |
SI |
Exima |
SI |
Gradebook |
SI |
Help |
SI |
Install |
SI |
InstallDB |
SI |
Logger |
SI |
ManageContent |
SI |
ManageCourse |
SI |
ManageCursos |
SI |
ManageDiscussionBoard |
SI |
ManageExam |
SI |
ManageFiles |
SI |
ManageTAPermissions |
SI |
Page |
SI |
Profile |
SI |
Question |
SI |
RBStore |
SI |
ResetCourse |
SI |
Scores |
SI |
Syllabus |
SI |
Usuarios |
SI |
Student |
SI |
ContentPacking |
NO |
Course |
NO |
EledgeResources |
NO |
Home |
NO |
Jsmethods |
NO |
Login |
NO |
Logout |
NO |
Multipart |
NO |
Permission |
NO
|
PermissionData |
NO |
Permissions |
NO |
TA |
NO |
TAPermission |
NO |
TAS |
NO |
WebPage |
NO |
TOTAL: |
28
clases de 43 (el 65%), contienen directamente el texto de sus interfases GUI. |
Fuente documental: autora del proyecto
2.7.3 Tipos de clases que componen el software Eledge-UNAB
Tabla 10. Tipos de clases que componen el software Eledge-UNAB
Nombre del
Paquete |
Clases |
Tipo
de Clase |
||
Interfase |
Control |
|||
Idioma |
RBStore |
|
X
|
|
EledgeResources |
|
X |
|
|
Usuarios |
Student |
X |
|
X |
Usuarios |
X |
X |
X |
|
Cursos |
ManageContent |
X |
X |
X |
Cursos |
X |
X |
X |
|
ManageFiles |
X |
X |
X |
|
MultiPart |
|
X |
X |
|
Content |
X |
X |
X |
|
ManageCursos |
X |
X |
X |
|
ContentPacking |
X |
X |
X |
|
Exámenes |
ManageExam |
X |
X |
X |
Scores |
X |
X |
X |
|
Exam |
X |
|
X |
|
Question |
X |
X |
X |
|
Gradebook |
X |
X |
X |
|
Foros |
DiscussionBoard |
X |
X |
X |
|
ManageDiscussionBoard |
X |
X |
X |
Agenda |
Calendar |
X |
X |
X |
CaracterísticasLMS |
ManageCourse |
X |
X |
X |
Edicion |
Syllabus |
X |
X |
X |
Sesiones |
Profile |
X |
X |
X |
Login |
X |
X |
X |
|
Logout |
X
|
X |
|
|
Permisos |
TAPermission |
X |
X |
X |
Permission |
|
X |
|
|
TA |
|
|
X |
|
TAS |
|
X |
|
|
ManageTAPermissions |
X |
|
X |
|
Permissions |
|
X |
X |
|
PermissionData |
|
X |
X |
|
Correo |
Email |
X |
X |
X |
Ayuda |
Help |
X |
X |
X |
ConfigServBD |
Course |
|
X |
|
Logs |
Logger |
X |
X |
X |
PaginasWeb |
Home |
X |
X |
X |
Page |
X |
|
X |
|
Jsmethods |
|
X |
|
|
WebPage |
|
X |
|
|
BaseDatos |
Install |
X |
X |
X |
InstallDB |
X |
X |
X |
|
ResetCourse |
X |
X |
X |
|
SqlHtml |
CharHider |
X |
X |
|
Fuente documental: autora del proyecto
2.7.4 Cuantificación del porcentaje de clases pertenecientes a
cada tipo: Interfase, Control y Entidad
·
El
porcentaje de clases que simultáneamente desempeñan funciones de un solo tipo,
es 21 %.
·
El porcentaje de clases que
simultáneamente desempeñan funciones de dos tipos, es 18,5%.
·
El porcentaje de clases que
simultáneamente desempeñan funciones de tres tipos, es 60,5%.
2.7.5 Estrategia utilizada para la discriminación de
las clases en términos de los tipos de funciones que desempeñan
Tabla 11. Estrategia para la discriminación de las clases en términos de los tipos de funciones que desempeñan
Estrategia |
¿En qué consiste la
estrategia? |
Resultados de la aplicación de la estrategia |
Estrategia utilizada para la discriminación de las
clases en términos de los tipos de funciones que desempeñan. |
Identificar los tipos de funciones que
desempeña cada clase, teniendo en cuenta los siguientes criterios de
discriminación: Clases
de tipo Interfase: ·
Gestionan el despliegue de las
interfases de usuario ·
Capturan los datos de entrada, a
través de las interfases de usuario ·
Interactúan con clases de tipo
Control, enviándoles los datos de entrada capturados, y desplegando los datos
de salida que aquellas clases le envían como resultado de sus procesamientos Clases
de tipo Control: o Manejan
las transacciones y los eventos asociados a los casos de uso o Encapsulan
el control de los casos de uso, los cálculos complejos y la lógica asociada a
cada caso de uso o “Ejecutan”
o “implementan” los casos de uso o Representan
comportamiento complejo no asociado a un objeto entidad específico ·
Secuencian los eventos recibidos de
la capa de interfase o presentación Clases
de tipo Entidad: o Definen
y/o manipulan las tablas de la base de datos, a través de lenguajes de
definición de datos (DDL) y lenguajes de manipulación de datos (DML) o Interactúan
con las clases de tipo Control o Encapsulan
el control de la lógica asociada a cada objeto Entidad |
Sección 2.7.3 |
Fuente documental: autora del proyecto
2.8 Reingeniería de Eledge >>
Ingeniería directa
2.8.1 Documentación de las
correcciones implementadas en el prototipo
Las correcciones implementadas
en el prototipo Eledge-UNAB versión 4.0, son introducidas en esta sección y
documentadas a profundidad en los Anexos
E, F, G y H.
2.8.1.1 Reestructuración
de Eledge a nivel de arquitectura
2.8.1.1.1 Desagregación de clases que desempeñan
funciones de despliegue de interfases
Aplicar mejores técnicas de programación, mediante
la desagregación de clases que desempeñan funciones de despliegue de
interfases. Esta desagregación consiste en trasladar las instrucciones que
manejan el despliegue de interfases, de algunas clases hacia nuevas clases,
mediante métodos dedicados exclusivamente al despliegue de interfases,
implementados en nuevas clases e invocados en las clases ya existentes de
Eledge que requirieron de modificación.
Trasladar las
instrucciones que manejan el despliegue de interfases, de algunas clases hacia
nuevas clases, mediante métodos dedicados exclusivamente al despliegue de
interfases, implementados en nuevas clases e invocados en las clases ya
existentes de Eledge que requirieron de modificación.
Esta actividad se realiza con el objetivo de facilitar
una posterior implementación de la alternativa de corrección planteada, porque
crea nuevas clases dedicadas exclusivamente a la gestión de las interfases GUI,
las cuales contienen todo el código Html y JavaScript que maneja Eledge y los
métodos Java que las conectan con las clases que originalmente incluían la
gestión de tales interfases. Esto facilita la detección del código Html y
Javascript que ha de contenerse en archivos *.Html, de manera que Eledge pueda
gestionar sus interfases como lo propone el enfoque de Jsp.
Esta desagregación de clases que desempeñan funciones
de despliegue de interfases, tiene como objetivo adicional: proporcionar a
Eledge-UNAB una organización arquitectónica que facilite su mantenimiento e
incorporación de funcionalidad a nivel de presentación, lógica e interacción
con la base de datos
Para realizar las anteriores actividades
(mantenimiento de Eledge), se aplicó el enfoque de ingeniería de software
presentado en la figura 5.
Figura 5. Enfoque de
ingeniería de software aplicado a las actividades de
mantenimiento
de Eledge.
Fuente
documental: PIATTINI, Mario. Calidad en el desarrollo y
mantenimiento del software. México: Alfaomega, 2003.
2.8.1.2 Traducción al
español de texto desplegado en: Inglés, y en Español e Inglés de manera
combinada
Las clases afectadas por las
correcciones del idioma, se afectaron, no porque pertenecieran al nuevo paquete
propuesto (nombrado ‘Idioma’), sino porque ese texto está incluido directamente
en tales clases (no es texto internacionalizable), y por tanto falta configurar
estas clases de manera que implementen el método de internacionalización para
desplegar el texto de sus correspondientes interfases.
Tabla 12. Contenido de las correcciones de traducción de idioma e internacionalización del mismo
Palabra
original |
Reemplazo |
Clases
afectadas |
Home |
Página de Inicio |
Calendar DiscussionBoard Exam ManageContent ManageCourse ManageDiscussionBoard ManageExam ManageFiles ManageTAPermissions Profile Scores Syllabus Usuarios |
Logout |
Cerrar sesión |
Install InstallDB |
Studiante |
Estudiante |
ProfileResourceBundle |
Eledge Logging Information: |
Información de Registro de Eledge: |
Logger |
ID |
Identificador |
GradebookResourceBundle |
Go To Current Month |
Ir al mes actual |
Calendar |
Upload |
Subir archivo |
ManageFiles |
Fuente
documental: autora del proyecto
2.8.1.3 Reemplazo de
texto poco intuitivo a texto más intuitivo en términos de su redacción
gramatical y de su coherencia con los nombres de las opciones de Eledge
Las
clases afectadas por las correcciones del idioma, se afectaron, no porque
pertenecieran al nuevo paquete propuesto (nombrado ‘Idioma’), sino porque ese
texto está incluido directamente en tales clases (no es texto
internacionalizable), y por tanto falta configurar estas clases de manera que
implementen el método de internacionalización para desplegar el texto de sus
correspondientes interfases.
Palabra
original |
Reemplazo |
Clases
afectadas |
Fichero de registro: |
Fichero y ruta del fichero de registro: |
LoggerResourceBundle |
Eledge Características del Curso |
Preferencias de presentación del software |
ManageCourseResourceBundle ManageCourse |
Nombre -
Valor Actual |
Característica
- Preferencia |
ManageCourseResourceBundle |
Limpiar el Curso |
Borrar información de |
ManageCourseResourceBundle |
Limpiar |
Borrar información de |
ManageCourseResourceBundle |
LogLevel: |
Nivel de información: |
LoggerResourceBundle Logger |
Gestión de APs |
Gestión de los permisos de usuario |
ManageTAPermissionsResourceBundle |
Información de los Permisos |
Información de los permisos de usuario |
ManageTAPermissionsResourceBundle |
Actualizar el conjunto de permisos de AP |
Actualizar el conjunto de permisos de usuario |
ManageTAPermissionsResourceBundle |
Puede crear varios perfiles de estas características
si le da a cada uno un identificador único. |
Puede crear varios perfiles de estas características
si le asigna a cada uno un identificador único. |
ManageTAPermissionsResourceBundle |
Si ha creado perfiles por defecto, debe seleccionar
uno de ellos y asignarlo a este AP para fijar sus permisos. |
Si ha creado perfiles por defecto, debe seleccionar
uno de ellos y asignarlo a este usuario para fijar los permisos de este
último. |
ManageTAPermissionsResourceBundle |
Asignar a este AP los permisos del Perfil por
Defecto seleccionado. |
Asignar a este usuario los permisos del Perfil por
Defecto seleccionado. |
ManageTAPermissionsResourceBundle |
Aquí se visualizan todos los estudiantes del LMS. |
A continuación se visualizan todos los usuarios del
sistema. |
Usuarios |
Estado |
Clase |
GradebookResourceBundle |
Actualizar Datos de Selección |
Actualizar datos del usuario seleccionado |
GradebookResourceBundle |
Borrar selección |
Borrar usuario seleccionado |
GradebookResourceBundle |
Esta opción borrará los datos del estudiante
seleccionado y sus calificaciones asociadas de la base de datos. |
Esta opción borrará el usuario seleccionado y todos
sus datos asociados, de la base de datos. |
GradebookResourceBundle |
(Dentro del menú del curso): Página de Inicio |
(Dentro del menú del curso): Página de Inicio del Curso |
Install: InstallDB: ManageTAPermissions |
Eledge Enlaces de |
Opciones del Menú del Curso |
ManageCourseResourceBundle ManageCourse |
Realice los cambios que desee en este área; después
haga click en el botón 'Actualizar Enlaces. |
Configure las opciones que desea incluir en el Menú
del Curso. Después haga clic en el botón “Actualizar cambios” |
ManageCourseResourceBundle |
Puede introducir enlaces, editarlos, ocultarlos o
eliminarlos definitivamente borrando su campo 'Nombre'. |
(Se eliminó este texto, debido a que su contenido no
se corresponde con la verdadera funcionalidad de Eledge-UNAB v. 4.0) |
ManageCourseResourceBundle |
Enlace# |
Número de opción |
ManageCourseResourceBundle |
Característica |
Opción |
ManageCourseResourceBundle |
Fuente documental: autora del proyecto
·
Documentación de las correcciones
implementadas (Anexo E)
·
Diferencias entre las clases
originales y corregidas (sin reestructuración de arquitectura) (Anexo F)
·
Diferencias entre los archivos de
internacionalización (i18n) originales y corregidos (Anexo G)
·
Diferencias entre las clases
originales y corregidas (con reestructuración de arquitectura) (Anexo H)
2.9
Diagrama de Clases actualizado según correcciones
2.10
Manual Técnico actualizado, a partir de los productos del proyecto
2.11
Manual de Instalación actualizado, en términos de claridad en el procedimiento
de instalación y según lo realizado en el proyecto
2.12 Reingeniería de Eledge >>
Ingeniería directa >> Algunas
estimaciones –estadísticas para el mantenimiento
Como
resultado del estudio de los defectos encontrados a nivel de arquitectura e
interfase de Eledge, se ha realizado una evaluación de las alternativas
propuestas para corregirlos, en términos del tiempo requerido para
implementarlas (en la forma de indicadores estadísticos), teniendo en cuenta
las implicaciones de sus alcances. Esta evaluación se realizó con el objetivo
de proporcionar documentación que facilite el mantenimiento a Eledge, en lo
referente a los requerimientos de comprensión del software e incorporación de
nueva funcionalidad.
Tabla 14. Algunas estimaciones-estadísticas
para el mantenimiento
Alternativa
de corrección |
Actividad
de estimación |
Resultados
de la actividad
de estimación |
Implementar la separación entre la capa de
presentación del software, y las capas lógica y de interacción con la base de
datos, así: Implementar las interfases de una manera similar a
como se hace en JSP. Pasar este código
(que actualmente está dentro de los servlets): Lo anterior, con el objetivo de proporcionar a
Eledge-UNAB una organización arquitectónica que facilite su mantenimiento y
escalabilidad (incorporación de nueva funcionalidad) a nivel de interfase y
lógica. |
Consultar al Ingeniero Carlos Sáenz, quien trabaja
en la universidad desde hace más La consulta tuvo como objetivo evaluar el alcance de
esta alternativa de corrección, y la factibilidad de su completa
implementación en términos del tiempo restante del proyecto. |
Lo que se miró fue la complejidad del código, la
cual se encuentra, al separar el código Java de Html. Al crear los Html lo
complejo es ir determinando cada variables y reconstruir el código en la
misma fuente de Java. Los correos que evidencian los resultados de esta
estimación, están documentados en el Anexo D. |
Reingeniería de Interfases |
|
Interfase más intuitiva en cuanto al orden de pasos
que el usuario ha de seguir para realizar determinada acción y usar las
opciones de Eledge. Este proyecto propone un diseño para la interfase
GUI de Eledge, con la intención de que ésta se pueda implementar siguiendo
los principios de desagregación de clases de tipo interfase, y la separación
entre la capa de presentación del software, y las capas lógica y de
interacción con la base de datos, de manera que se posibilite implementar las
interfases de una manera similar a como se hace en JSP, y se proporcione a
Eledge una organización arquitectónica que facilite su mantenimiento y
escalabilidad (incorporación de nueva funcionalidad) a nivel de interfase y
lógica. |
Desagregación de clases que desempeñan funciones de
despliegue de interfases: Trasladar
las instrucciones que manejan el despliegue de interfases, de algunas clases
hacia nuevas clases, mediante métodos dedicados exclusivamente al despliegue
de interfases, implementados en nuevas clases e invocados en las clases ya
existentes de Eledge que requirieron de modificación. Esta actividad se realiza con el objetivo de
facilitar una posterior implementación de la alternativa de corrección
planteada, porque crea nuevas clases dedicadas exclusivamente a la gestión de
las interfases GUI, las cuales contienen todo el código Html y JavaScript que
maneja Eledge y los métodos Java que las conectan con las clases que
originalmente incluían la gestión de tales interfases. Esto facilita la
detección del código Html y Javascript que ha de contenerse en archivos
*.Html, de manera que Eledge pueda gestionar sus interfases como lo propone
el enfoque de Jsp. Esta desagregación de clases que desempeñan
funciones de despliegue de interfases, tiene como objetivo adicional: Proporcionar a Eledge-UNAB una organización
arquitectónica que facilite su mantenimiento e incorporación de funcionalidad
a nivel de presentación, lógica e interacción con la base de datos. |
Estudio del grado de independencia entre las clases
que desempeñan funciones de Entidad, Interfase y Control. Este estudio está documentado en |
Los resultados de este estudio señalan que: ·
El porcentaje de clases que
simultáneamente desempeñan funciones de un solo tipo, es 21 %. ·
El porcentaje de clases que
simultáneamente desempeñan funciones de dos tipos, es 18,5%. ·
El porcentaje de clases que
simultáneamente desempeñan funciones de tres tipos, es 60,5%. Para 224 líneas: o Primera vez: 3,5 horas o Promedio de tiempo a partir de la segunda
vez: 3 horas Desagregar Todas las clases según el tipo de
función que desempeñan, y añadir las
nuevas clases requeridas para que cada una desempeñe sólo un tipo de
función, implicaría una reorganización del código contenido en el 79% de las
clases (60,5% + 18,5%); es decir, una reingeniería a nivel de arquitectura
cuyo alcance se extiende más allá del tiempo destinado a la fase de
correcciones. |
Diseño de
paquetes de software para Eledge, con el fin de proporcionar a Eledge
una organización arquitectónica que facilite: ·
Su mantenimiento y escalabilidad
(incorporación de nueva funcionalidad y reutilización de su propio código) ·
La eliminación de redundancia de
código entre diferentes clases, a nivel de interfase, lógica e interacción
con la base de datos. ·
Un bajo grado de acoplamiento y un
alto grado de cohesión entre los códigos de Interfase, Control y Entidad que
sus clases implementan. |
Con la intención de diseñar paquetes de software
para Eledge, se realizó: o Una clasificación de los archivos de
código fuente en términos de las funcionalidades que estos prestan. o Un estudio del grado de independencia
entre las clases que desempeñan funciones de Entidad, Interfase y Control. Este estudio está documentado en |
·
El porcentaje de clases que
simultáneamente desempeñan funciones de un solo tipo, es 21 %. ·
El porcentaje de clases que
simultáneamente desempeñan funciones de dos tipos, es 18,5%. ·
El porcentaje de clases que
simultáneamente desempeñan funciones de tres tipos, es 60,5%. Para implementar
un diseño de paquetes que facilite el mantenimiento y la escalabilidad
del software (incorporación de nueva funcionalidad y reutilización de su
propio código), se requiere: 1. Desagregar las clases que desempeñan más de
un tipo de función a la vez, y añadir las
nuevas clases requeridas para que cada una desempeñe sólo un tipo de
función, para lograr bajo acoplamiento y alta cohesión entre los códigos de
Interfase, Control y Entidad que éstas implementan. 2. Partir de la desagregación de clases en
términos del tipo de sus funciones, para eliminar la redundancia de código
entre varias de ellas, y reutilizarlo a través de llamados a métodos que
contengan tal código. |
Desagregación de clases que desempeñan funciones de
definición y de manipulación de la base de datos: Separar los códigos de definición y manipulación de
la base de datos, de manera que Todo el código de creación de tablas
sea ejecutado por una sola clase que crea todas las tablas de la base de
datos (una sola vez), y el código que manipula tales tablas se encuentre en
otras clases diferentes de ésta. |
Estudio del grado de independencia entre las clases
que desempeñan funciones de Entidad, Interfase y Control. Este estudio está documentado en |
Los resultados de este estudio señalan que: ·
El porcentaje de clases que
simultáneamente desempeñan funciones de un solo tipo, es 21 %. ·
El porcentaje de clases que
simultáneamente desempeñan funciones de dos tipos, es 18,5%. ·
El porcentaje de clases que
simultáneamente desempeñan funciones de tres tipos, es 60,5%. Para 224 líneas: o Primera vez: 3,5 horas o Promedio de tiempo a partir de la segunda
vez: 3 horas Desagregar Todas las clases según el tipo de
función que desempeñan y añadir las
nuevas clases requeridas para que cada una desempeñe sólo un tipo de
función, implicaría una reorganización del código contenido en el 79% de las
clases (60,5% + 18,5%); es decir, una reingeniería a nivel de arquitectura
cuyo alcance se extiende más allá del tiempo destinado a la fase de
correcciones. |
Internacionalización de las interfases GUI de Eledge |
Examen del enfoque utilizado en Eledge, para
implementar la internacionalización del texto desplegado en sus interfases
GUI. |
El código del 65% de las clases de Eledge incluye
directamente texto a desplegar a nivel de interfase GUI; es decir, éste no es
capturado de los archivos de Eledge que contienen texto en diferentes idiomas
(archivos de internacionalización, tipo properties). Por tanto, no aparece en
pantalla el texto correspondiente al idioma configurado en la máquina, sino
el incluido directamente en el código de tales clases, el cual No es
internacionalizable debido a que siempre aparecerá en pantalla sin tener en
cuenta el idioma configurado en la máquina. Para lograr que Todo el texto que se despliega en
pantalla sea internacionalizable, se requiere: ·
Crear variables por cada fragmento
de texto que se despliegue de manera continua (o secuencial) en la pantalla. ·
Implementar dentro del archivo de
internacionalización de cada una de las clases que constituyen tal porcentaje
(65%), las correspondientes asignaciones ‘variable = fragmento de texto’. (Se
toman estos ‘fragmentos de texto’ como los fragmentos de texto continuo que
directamente se incluyen dentro del código del 65% las clases) ·
Crear para cada una de las clases
que constituyen tal porcentaje (65%), métodos que reciban como argumentos los
nombres de cada una de esas variables, para que capturen el texto almacenado
en tales archivos ·
Reorganizar el código de tal
porcentaje de clases, de manera que éstas invoquen los métodos que capturan
el texto de tales archivos, cada vez que éstas requieran la presencia de ese
texto Tiempo promedio: 10 minutos, para la reorganización
de código en términos de lo descrito anteriormente, para los idiomas español
e inglés (los 2 idiomas que Eledge maneja actualmente). En promedio, para cada clase que constituye tal
porcentaje (65%), se requieren realizar 20 implementaciones del proceso
anteriormente descrito. |
Fuente documental: autora del proyecto
2.13 Ingeniería inversa a
nivel de diseño >> Diagrama de Paquetes y Descripción tabular de su
diseño, como propuesta para la reestructuración de Eledge a nivel de
Arquitectura.
Funcionalidad |
Nombre
del Paquete correspondiente |
Clases
que componen el paquete |
Configurar
el idioma del sistema |
Idioma |
RBStore |
|
EledgeResources |
|
Gestión
de Usuarios |
Usuarios |
Student |
|
Usuarios |
|
Acceso
y Adición de Cursos |
Cursos |
ManageContent |
|
Cursos |
|
|
ManageFiles |
|
|
MultiPart |
|
|
Content |
|
|
ManageCursos |
|
|
ContentPacking |
|
Gestión
y Uso de Exámenes |
Exámenes |
ManageExam |
|
Scores |
|
|
Exam |
|
|
Question |
|
|
Gradebook |
|
Gestión
y Uso de Foros |
Foros |
DiscussionBoard |
|
|
ManageDiscussionBoard |
Uso
de la Agenda |
Agenda |
Calendar |
Gestión
de Características de |
CaracterísticasLMS |
ManageCourse |
Edición
de Páginas Web |
Edicion |
Syllabus |
Registro
y Apertura de una Sesión |
Sesiones |
Profile |
|
Login |
|
|
Logout |
|
Gestión
de Permisos |
Permisos |
TAPermission |
|
Permission |
|
|
TA |
|
|
TAS |
|
|
ManageTAPermissions |
|
|
Permissions |
|
|
PermissionData |
|
Uso
del Correo |
Correo |
Email |
Uso
de |
Ayuda |
Help |
Configurar
servidor y base de datos |
ConfigServBD |
Course |
Crear
logs |
Logs |
Logger |
Crear
y cargar páginas web |
PaginasWeb |
Home |
|
Page |
|
|
JSmethods |
|
|
WebPage |
|
Crear
y controlar base de datos |
BaseDatos |
Install |
|
InstallDB |
|
|
ResetCourse |
|
Crear
sentencias Sql y Html |
SqlHtml |
CharHider |
Fuente documental: autora del proyecto
2.14 Reingeniería de Eledge >> Ingeniería directa >>
Reingeniería de Interfases >> Propuesta de
diseño para
Figura 6. Propuesta de diseño para la interfase GUI de Eledge
3. CONCLUSIONES Y RECOMENDACIONES
De la presente tesis de grado se concluye,
principalmente, que sus resultados dan evidencia de la necesidad de incrementar
el aseguramiento de la calidad de los productos de software a desarrollar en
los proyectos de grado. Como propuesta para incrementar tal aseguramiento de
calidad, se propone incluir como parte del documento del Anteproyecto, la
elaboración de un organigrama que establezca los roles y responsabilidades a
cumplir por los integrantes de los equipos de trabajo que desarrollan productos
de software en sus proyectos de grado. Se sugiere que en este organigrama se
definan, como mínimo, los roles de: constructor del software, ejecutor de las
pruebas del software, documentador del software y especialista temático, de
manera que un integrante del equipo pueda desempeñar uno o varios de estos
roles. Es muy importante crear conciencia al interior de la universidad, que
los proyectos de desarrollo de software, más que grupos de programadores,
requieren de la conformación de Equipos de Trabajo, preferiblemente
multidisciplinarios, con roles y responsabilidades claramente definidas y
asignadas.
3.1 Conclusiones de las actividades asociadas a
la ejecución de pruebas de funcionalidad:
Se deduce, como primer punto
de consideración, que la fase de pruebas de funcionalidad del software es un
proceso de naturaleza bastante incierta. Esta afirmación se fundamenta en el
hecho de que tal proceso se corresponde estrecha y directamente con el grado de
rigurosidad en el control de la calidad de los productos de las etapas de
desarrollo de tal software, y con el grado de
disponibilidad de éstos, en la
fase de detección y corrección de sus defectos.
En el marco de la realización
de este proyecto, el grado de disponibilidad de la documentación del proceso de
desarrollo de Eledge-UNAB 4.0, fue considerablemente bajo. En consecuencia, los
recursos actuales de documentación técnica de tal proceso, condicionan y
limitan la fase de detección y corrección de defectos, en términos de la
agilidad en la obtención de resultados más precisos[10].
En función de lo expresado
anteriormente, se deduce que para incrementar el grado de completitud de la
fase de detección y corrección de defectos de este proyecto, se requiere
de la asignación de una mayor cantidad de recursos humanos, de tiempo y de
documentación del proceso de desarrollo de Eledge-UNAB 4.0.[11]
Finalmente, se concluye que el
proceso de pruebas de funcionalidad a Eledge ha llevado a la autora (quizá por
las características de su perfil), a la realización de ingeniería inversa a las
fases de análisis y diseño del proceso de desarrollo del prototipo, produciendo
el diagrama de casos de uso (para la fase de análisis) y el diagrama de
paquetes con la descripción tabular de su diseño (para la fase de diseño).
3.2
Conclusiones de las actividades de mantenimiento realizadas a Eledge
3.2.1 Dentro
del marco de trabajo de Eledge:
1.
La estructura arquitectónica de
Eledge y el alto grado de acoplamiento entre las clases que lo componen (en
términos del tipo de sus funciones: Interfase, Control y Entidad), no han
permitido la incorporación de clases desagregadas (cuyas funciones son exclusivamente
de tipo Interfase), que compilan correctamente. Esto se manifiesta en que, al
integrar (cargar y ejecutar) tales clases con la totalidad del código de
Eledge, se generan excepciones que impiden la ejecución de las 7 clases, a
pesar de haber implementado dentro de éstas los módulos try-catch
correspondientes a cada una de las excepciones que arrojaban, siendo esto
validado por el compilador de Java Servlets utilizado, al desplegar mensajes
que informaban que todas las 7 clases compilaban correctamente (la estructura
de desacoplamiento implementada en las 7 clases era correcta con respecto al
código de las demás clases de Eledge, puesto que mediante ella se podían
invocar los métodos de éstas últimas).
2.
Partiendo de lo anterior, se
establece que las pruebas unitarias (de todas las clases modificadas y nuevas)
resultaron exitosas (compilaron correctamente), mientras que las pruebas de
integración (de todas las clases originales, modificadas y nuevas) resultaron
fallidas (por las razones descritas en el párrafo anterior).
3. Se
invirtieron 3 días en investigación para detectar las causas de la generación
de las excepciones que impiden la ejecución de las 7 clases desagregadas, y de
esta manera dar respuesta al siguiente cuestionamiento: ¿Por qué se generan
excepciones en las pruebas de integración de código mientras que en las pruebas
unitarias no?
4. Con
base en esta investigación se determinó que el diseño arquitectónico de Eledge
no favorece la detección de excepciones y el manejo de las mismas, en la etapa
de integración de clases que sí funcionan por separado. Para lograr esta
detección, se requiere un alto grado de pericia en el lenguaje de Java
Servlets, que actualmente no se dispone).
5. Con
base en la anterior determinación, se decidió invertir el tiempo restante del
proyecto en la corrección del mayor número de defectos de Eledge, y en la
documentación del análisis de Ingeniería de Software realizado para justificar
estas decisiones.
6. Partiendo
de las anteriores argumentaciones, se ha concluido que, en términos de relación
costo / beneficio, es más conveniente realizar una reingeniería a Eledge a
nivel de diseño y programación (comenzar desde cero), en lugar de continuar
incorporándole funcionalidad, lo cual se traduce finalmente en un aumento de la
complejidad de su código.
3.2.2 Dentro
del marco de trabajo de
1. Es
indispensable, al iniciar el desarrollo de un software, y a nivel de diseño
arquitectónico, tener clara la manera en que éste manejará (arrojará y atrapará)
las excepciones, para que, al integrar todos sus módulos de código (originales,
modificados y nuevos) y realizarle mantenimiento, se sepa qué excepciones son
las que se generarán, cuáles serán sus causas y qué acción se disparará para
atraparlas y prevenir que el código no pueda seguir ejecutándose.
2. Mediante
este proyecto se pudo experimentar y comprender el por qué de los
siguientes hechos:
El mantenimiento es la parte más
costosa del ciclo de vida del sw.:
60-90% del coste total (y coste creciente).
·
El coste relativo de reparar un
defecto aumenta en las últimas etapas del ciclo de vida (de
En algunas empresas coste del 95%. Esta realidad se constituye como una barrera o limitación del mantenimiento
(no se pueden
desarrollar nuevos productos software).
·
El coste del mantenimiento se
corresponde directamente con:
§
Oportunidades de desarrollo que se
pierden.
§
Insatisfacción del cliente cuando no
se puede atender en un tiempo aceptable una petición de reparación que parece
razonable.
§
Los errores ocultos que se introducen
al cambiar el software durante el mantenimiento reducen la calidad global del
producto.
§
Perjuicio en otros proyectos de
desarrollo cuando la plantilla tiene que dejarlos, total o parcialmente, para
atender peticiones de mantenimiento.
§
Los siguientes indicadores
estadísticos:
Figura 7. Indicadores estadísticos del costo del mantenimiento de software
Fuente documental: PIATTINI,
Mario. Calidad en el desarrollo y mantenimiento del software. México:
Alfaomega, 2003.
Las dificultades del mantenimiento se materializan en:
§
El hecho de que cambio tras cambio,
los programas tienden a ser menos estructurados.
Ausencia de documentación.
·
Mediante
este proyecto se ha logrado disminuir esta última dificultad, en razón a que se
ha elaborado documentación que contiene: Diagramas de paquetes y Descripción
tabular de su diseño, y Nuevo diagrama de casos de uso.
·
La realidad de que no existen
registros de pruebas, lo cual repercute en la imposibilidad de ejecutar pruebas
de regresión.
Esta última
dificultad ha sido eliminada mediante este proyecto, en razón al proceso de
pruebas rigurosas de funcionalidad que se realizó, y a la documentación de las
fallas y a sus correspondientes requisitos de corrección y mejora.
·
Las actividades de mantenimiento
tienen el siguiente coste:
Tabla 16. Coste de las actividades de mantenimiento de software
Fuente
documental: PIATTINI, Mario. Calidad en el desarrollo y
mantenimiento del software. México: Alfaomega, 2003.
Nótese
cómo la comprensión del software y la comprensión de los cambios suponen casi
un 50% del coste total de mantenimiento
3. Con
base en los anteriores indicadores estadísticos sobre el costo del
mantenimiento del software, este proyecto proporciona un caso práctico que
comprueba y evidencia lo siguiente:
·
El mantenimiento del software es una
etapa bastante costosa, especialmente cuando no se dispone de documentación del
código ni de la presencia del Equipo de Trabajo desarrollador del software.
·
Dentro del marco de trabajo del
mantenimiento del software, el tiempo destinado a la modificación del mismo
(modificación de su código y actualización de su documentación) es muy poco
(supone un 25% de las actividades del mantenimiento), incluso si se dispone de
la documentación del software para poder estudiarla antes de implementarle
modificaciones (para realizar mantenimiento a Eledge sólo se contó con su
Diagrama de Clases)[12].
Teniendo en
cuenta las dos últimas conclusiones, y con el fin de proporcionar mayor
facilidad para la realización de posteriores mantenimientos a Eledge (en lo
referente a comprensión del software y de los cambios a realizar), se
elaboró documentación que contiene: Diagramas de paquetes y Descripción
tabular de su diseño, y Nuevo diagrama de casos de uso.
Con el objetivo de aprovechar
la máxima cantidad posible del tiempo destinado a la modificación de Eledge, el
50% de este tiempo se invirtió en la reestructuración de Eledge a nivel de
arquitectura. Sin embargo, esta operación no fue suficiente para lograr tal
aprovechamiento de tiempo, puesto que esta reestructuración no resultó
funcional en razón a la generación de excepciones que impidieron la ejecución
de las 7 clases reestructuradas (desagregadas).
3.3 Mediante la realización de este proyecto se lograron los
siguientes beneficios, que se circunscriben dentro entorno global de la
comunidad interesada en
·
Se logró corroborar en la práctica,
lo que la autora del proyecto ha aprendido en teoría, acerca de las
dificultades y de los costos reales del mantenimiento de software.
·
Se documentó el aprendizaje del
proceso (específicamente en la gestión, ejecución y comunicación interpersonal
al definir criterios de decisión referentes al mantenimiento, pruebas,
documentación de software, reingeniería, ingeniería inversa, ingeniería directa,
reestructuración de código), como fruto de un Aprendizaje de Ingeniería de
software en la práctica, y con la intención de consolidarlo en
documentación para posteriores proyectos de mantenimiento.
·
Se registraron los criterios de
decisión aplicados durante el transcurso del proyecto, las estrategias
utilizadas para llegar a éstos, los ajustes realizados y los giros que
produjeron en las actividades de mantenimiento, como producto de una disciplina
en el seguimiento de los productos del proyecto.
·
En razón a que el proyecto tuvo sus
raíces en un terreno no tan firme, inhóspito y de exploración (debido a que sus
actividades se enfocaron en el mantenimiento de un software desarrollado por
terceros), que demanda flexibilidad mental, surgió la necesidad de realizar
ajustes al alcance y a la planeación del mismo, los cuales fueron posibilitados
gracias a la flexibilidad de las tareas involucradas en el mantenimiento del
software.
·
Teniendo en cuenta la brusquedad de
los ajustes y giros realizados a las actividades del proyecto, y lo difícil de
tomar decisiones en un terreno no tan firme (por las razones anteriormente
expresadas), la relación de comunicación entre el Director y
·
Para
o
En razón a que la labor del
mantenimiento de Eledge se hizo muy trabajosa, y los beneficios en cuanto a la posibilidad
de incorporación de funcionalidad a partir de su estado actual no han sido tan
grandes, resulta mucho más conveniente hacerle reingeniería de software que un
mantenimiento que parta desde su estado actual; inclusive, vale la pena
considerar la posibilidad de comenzar tal reingeniería desde cero, considerando
la posibilidad de reutilizar bloques de su código actual, de una manera
consciente, y haciendo ajustes importantes (como el manejo de excepciones)
antes de la reutilización de código.
BRAUDE, Eric J. Ingeniería de software : una perspectiva orientada a objetos. México : Alfaomega, 2004. p. 29, 30, 31.
CALES, José. HURTADO, Rocío. Tomografía del e-learning en las universidades europeas [online], Edición no. 48, Diciembre 2004. Disponible en Internet: http://www.elearningamericalatina.com/radiografias/rad_9.php
DÍAZ, Ricardo. OLARTE Sara. VARGAS, Walter. Desarrollo de un prototipo LMS. Tesis, 2004. Facultad de Ingeniería de Sistemas, Universidad Autónoma de Bucaramanga.
E-learning América Latina [online]. Disponible en Internet: http://www.elearningamericalatina.com
ESPINOSA, Lina. SERRANO, Luis Carlos. Desarrollo de un prototipo de cursos virtuales con el estandar IMS (Instruction Management Systems). Tesis, 2004. Facultad de Ingeniería de Sistemas, Universidad Autónoma de Bucaramanga.
FLÓREZ, Rocío. Investigación de herramientas Courseware GNU aplicadas a la educación virtual o a distancia. Tesis, 2004. Facultad de Ingeniería de Sistemas, Universidad Autónoma de Bucaramanga.
FRANCO, Elizabeth. Sistema inteligente para la evaluación de hardware y software de usuario final en UNAB virtual. Tesis, 2003. Facultad de Ingeniería de Sistemas, Universidad Autónoma de Bucaramanga.
GALVIS, Julian. LIZARAZO, Juan. Desarrollo de un prototipo Web para la evaluación colaborativa de plataformas E-Learning. Tesis, 2004. Facultad de Ingeniería de Sistemas, Universidad Autónoma de Bucaramanga.
HELLERS,
Nicolás. Los juegos seducen al
e-learning [online], Edición no. 49, Enero
2005. Disponible en Internet:
http://www.elearningamericalatina.com/edicion/enero1_2005/na_2.php
HELLERS,
Nicolás. Rapid Learning: una tendencia para el 2005 [online], Edición no. 49, Enero 2005. Disponible en Internet: http://www.elearningamericalatina.com/edicion/enero1_2005/na_1.php
HUNTER, Jason. Java Servlet programming. 1 ed. Ucrania, Sebastopol : O'Reilly, 2001. p. 11–23.
INSTITUTO
COLOMBIANO DE NORMAS TÉCNICAS Y CERTIFICACIÓN.
Tesis y otros trabajos de grado. Bogotá
: ICONTEC, 2002.
JACOBSON, Ivar. BOOCH, Grady. RUMBAUGH, James. El proceso unificado de desarrollo de software. Madrid: Pearson Educación, 2000. p. 23-39, 45-46, 50, 52.
PRESSMAN, Roger. Ingeniería del software: un enfoque práctico. 5 ed. Madrid: McGraw Hill, 1998. p. 28-29.
PIATTINI, Mario. Análisis y Diseño de Aplicaciones Informáticas de Gestión. México: Alfaomega, 2000. p. 17-21, 24, 26-27.
PIATTINI, Mario. Calidad en el desarrollo y mantenimiento del software. México: Alfaomega, 2003. p. 51-69.
SUBOTOVSKY, Santiago. El cambio cultural, un gran desafío para el e-learning [online], Edición no. 50, Febrero 2005. Disponible en Internet: http://www.elearningamericalatina.com/edicion/febrero1_2005/tr_1.php.
SUBOTOVSKY, Santiago. La fuerza del e-learning global se
sintió en Berlín [online], Edición no. 49, Enero 2005.
Disponible en Internet:
http://www.elearningamericalatina.com/edicion/enero1_2005/tr_1.php
CÓRICA, José Luis. En Latinoamérica hay un vacío
legal en torno al e-learning [online], Edición no. 32, Marzo
2004. Disponible en Internet:
http://www.elearningamericalatina.com/edicion/marzo1_2004/tr_1.php
E-learning América Latina.
Actualidad del e-Learning en Colombia [online], Edición no. 44, Septiembre
2004. Disponible en Internet: http://www.elearningamericalatina.com/edicion/septiembre2_2004/tr_1.php
HELLERS, Nicolás. Expertos debatieron el futuro del e-learning
[online], Edición no. 47, Diciembre 2004. Disponible en
Internet: http://www.elearningamericalatina.com/edicion/diciembre1_2004/tr_1.php
PODLESKER, Christián. Actualidad de las TIC en la
educación latinoamericana [online], Edición
no. 45, Octubbe 2004. Disponible
en Internet: http://www.elearningamericalatina.com/edicion/octubre1_2004/tr_1.php
SFORZA, Daniella. HELLERS, Nicolás. Debemos conocer y
entender a los alumnos virtuales [online], Edición no. 50, Febrero 2005.
Disponible en Internet: http://www.elearningamericalatina.com/edicion/febrero1_2005/tr_2.php
SUBOTOVSKY, Santiago. El e-learning es fundamental para la capacitación corporativa [online], Edición no. 48, Diciembre 2004. Disponible en Internet:
http://www.elearningamericalatina.com/edicion/febrero1_2005/na_1.php
Anexo A. Paralelo entre funcionalidades de Eledge-UNAB 4.0 y WebCT
A continuación se presenta el
conjunto de esquemas y tablas elaborado para organizar el conocimiento
adquirido acerca de los módulos de servicios ofrecidos por Eledge-Unab 4.0 para
las diferentes clases de usuarios, a saber: administradores del prototipo,
profesores, estudiantes y estudiantes privilegiados. Se incluye un paralelo
comparativo de los tipo de herramientas y servicios brindados por Eledge-Unab
4.0 y la plataforma WebCT, así como un listado de las herramientas generales
que debe incluir un LMS y la manera como Eledge-Unab 4.0 satisface tales
requerimientos.
Figura 8. Distribución de herramientas de Eledge-UNAB versión 4.0
Fuentes documentales:
DÍAZ, Ricardo. OLARTE Sara.
VARGAS, Walter. Desarrollo de un prototipo LMS. Tesis, 2004. Facultad de
Ingeniería de Sistemas, Universidad Autónoma de Bucaramanga.
Autora del proyecto.
Tabla 17. Paralelo entre funcionalidades de Eledge-UNAB 4.0 y WebCT.
CLASIFICACIÓN
DE LOS SERVICIOS – TABLA COMPARATIVA
CATEGORÍA |
SERVICIOS |
||
|
ELEDGE-UNAB
4.0 |
||
Herramientas de distribución de contenidos Editor de contenidos “on-line”. Repositorios de archivos de imágenes, de video y de
texto como biblioteca “on-line”. Inserción de hipervínculos, imágenes y videos. Administración de calendario de contenidos. |
Contenidos del curso y materiales relacionados: Programa – Calendario - Módulo de contenidos Glosario – Buscar – Recopilar – Administrar archivos:
Añadir, descargar, cambiar y organizar los archivos
del curso. Cargar - Crear
- Editar - Copiar - Mover - Cambiar nombre - Borrar
- Comprimir - Descomprimir - Descargar Desarrollar contenidos del curso para alumnos con
herramientas como: Programa y Módulo de contenidos. Agrupar los contenidos y herramientas del curso,
mediante Páginas de Organización. Personalizar (editar) la página principal del curso. Cambiar el contenido del curso. Actualizar las vistas de los alumnos de los módulos
de contenidos del curso: Administrar copias de seguridad del curso. Importar y exportar contenido de IMS. Configurar curso: cambiar
su aspecto y funcionamiento. Nombre del profesor - Idioma
- Formato de datos numérico - Formato horario - Presentación
del Menú del curso - Página de inicio del profesor - Enlaces
del profesor - Editar Menú del curso - Editar página de
bienvenida - Personalizar colores del curso - Modificar/añadir
imagen de fondo - Modificar estilo de iconos - Sustituir icono
individual - Personalizar novedades del curso Administrar las fichas de los alumnos y ayudantes
del profesor. Gestión de alumnos - Seguimiento
de alumnos - Gestión de ayudantes del profesor - Seguimiento de
páginas - Copia de seguridad del curso - Reiniciar curso - Compartir
acceso - Importar contenido - Exportar contenido |
Modulo de contenidos Establecer los contenidos del curso. Asignación de herramientas para el curso. Seguimiento del estudiante. Administrar, editar y borrar Contenidos. Modulo de Exportación Exportación del contenido de cursos a otras
plataformas cumpliendo con el estándar IMS. Importación de archivos HTML o HTM (contenidos) para
modificarlos o agregarlos. Compartir Información: Exportación de los contenidos
de cada curso Docente: Administrar el contenido de los cursos al que
pertenece Definir la estructura del curso Agregar el contenido del curso Administrar la lista de notas de los alumnos del
curso Definir que alumnos pertenecen al curso Editar las paginas de inicio del curso, de ayuda y
de instrucciones. Personalizar la presentación al programa que
dirigirá, en la parte inferior de la página, aparece solo para
administradores e instructores un enlace para editar el contenido de la
misma. Edición de Contenido. administrador
o profesor editar el contenido en formato HTML. El editor HTML ayuda al
usuario a editar. Contenido del Curso. listar
los temas que el profesor o administrador creó, para ingresar en uno
especifico y gestionarlo, y poder seguir agregando nuevos temas. Añadir / Editar Temas del Contenido: profesor
o administrador crean fácilmente los contenidos de los temas. Para importar
archivos HTML ya creados hacia la plataforma, ahorrando el trabajo de
volverlos a crear si estos ya existen. Contenido del curso. lista
de temas disponibles del curso, para que los explore. Administrar Contenidos:
Docente y Administrador montan, editan y eliminan el
contenido HTLM del curso. El contenido se monta de forma estructurada y
ordenada para poder exportar en IMS. Definir herramientas que se usarán para el curso. Exportación del Contenido:
Administrador y Docente exportan el contenido del curso en IMS para uso en
otras plataformas LMS. Ver Cursos: Docente y
Estudiante ven el contenido de un curso específico, e interactuan con sus
herramientas. Modulo de cursos Crear, editar, listar administrar y eliminar los
cursos. Asignación de profesores y estudiantes al curso. Manejo de múltiples cursos. Administrar Currículo Personalización del curso por parte del
administrador o profesor. Personalizar la barra de herramientas del curso. Profesor - Mis Cursos. Listar los cursos a los cuales el
instructor esta inscrito para aprender o asignado para dirigir. Estudiante - Mis
Cursos: lista de cursos inscritos por él o por un profesor o
administrador de la aplicación. Qué cursos tiene inscritos y cuales puede agregar. Cuando se agrega un curso este es eliminado
del área de cursos sin asignar. Administrar Cursos:
Administrador crea, describe y elimina cursos en la plataforma. Asignación Docentes al Curso:
Administrador asigna uno o varios docentes al curso, y los dá de baja. Asignar Cursos: Estudiante
asignarse a los cursos existentes en la plataforma, pero éste debe contar con
los permisos necesarios para esta acción. Asignar Estudiantes al Curso:
Docente asigna estudiantes a su curso, y los dá de baja. Administrador - Mis Cursos. Mostrar
todos los cursos creados en la plataforma, gestionarlos y exportarlos a otras
plataformas. |
|
Herramientas de comunicación y colaboración Foros de discusión por curso. Sala de “chat” por curso. Formación de grupos de trabajo. Comunicación privada con el tutor. Miembros del curso. Novedades y calendario del curso. |
Herramientas de Comunicación Correo - Foro
de debate – Charla - Pizarra Trabajos - Calendario
- Charla - Recopilar - Módulos de contenido - Foro de
debate - Glosario - Correo - Mis calificaciones - Mi
progreso - Páginas de organización - Exámenes y cuestionarios
- Buscar - Autoevaluaciones - Páginas personales de alumnos
- Grupos de trabajo - Programa - Pizarra |
Herramientas de Comunicación: Foros de Discusión, Correo, montar y administrar
recursos (cronograma estudiante, exámenes) Docente crea foros,
exámenes Estudiante: participa
en foros Definir Herramientas: las
del curso, como Exámenes, Foros, Ayuda, Instrucciones, Puntuaciones, E-mail y
Agenda. Ayudas interactivas para el manejo de la plataforma
(soporte en línea al usuario). |
|
Herramientas de administración y asignación de
permisos Otorgamiento de permisos y autorizaciones. Asignación de permisos por perfil de usuario. Administración personal de perfile de usuario. Proceso de inscripción. Planes de carrera y paquetes de cursos. |
Administrar curso: Hacer seguimiento del progreso de los alumnos. |
Definir permisos (roles) usuario. Permisos;
Administrador asigna a los profesores los permisos de gestión de la
plataforma. Crear Perfiles de usuario:
Administrador crea nuevos perfiles de usuario en la plataforma y define los
permisos adecuados. Asignar Permisos: asignar
permisos a los perfiles de usuario existentes, los permisos definen el acceso
de herramientas de administración del curso y de la plataforma. Consulta, modifica usuarios del sistema. Asignación de los perfiles de usuario especiales a
los usuarios. Crea perfiles de usuario. Administrar, eliminar y listar Usuarios. Administrador: admin
usuarios, permisos y perfiles de usuario Administrar Usuarios: Administrador
crea, elimina y modifica usuarios en la base de datos, cambia sus contraseñas
de acceso y les asigna el perfil de usuario. Asignar o dar de baja al profesor o estudiante. Interfase adecuada/personalizada para cada tipo de
usuario (administrador, profesor, docente) para que cumpla sus funciones. Herramientas de Administración: Autentificación,
Autorización al curso, Registros de cursos, Asignación de usuarios al curso Administración de múltiples cursos Diseño del plan de estudios: Accesibilidad
complaciente, Administración del plan de estudios, Apariencia a la medida Administrador:
interactua con cualquier curso. Estudiantes. Muestra los
usuarios registrados en el curso, y los que potencialmente pueden hacer parte
de él. Profesores: Muestra los
usuarios asignados al curso, y los que potencialmente pueden dirigirlo. |
|
Herramientas de seguimiento y evaluación Estadísticas y ficha personal por alumno. Seguimiento de cada actividad. Sistemas de exámenes editables por el docente o
tutor. Reportes de actividad. |
Herramientas de evaluación Trabajos – Autoevaluación – Exámenes - Mis
calificaciones Herramientas de estudio Páginas personales - Grupos de trabajo - Mi progreso
- Exámenes y cuestionarios Generación informes: Publicación notas |
Modulo de contenidos Seguimiento del estudiante. Puntaje y pruebas automatizadas, Herramientas de evaluación en línea Herramientas de Productividad: Calendario,
Orientación / Ayuda, Progreso del estudiante |
|
Grupos de usuarios: |
Administrador - Diseñador - Profesor - Estudiante |
Estudiante Privilegiado, Estudiante, Visitante,
Congelado, Administrador, Profesor |
|
Fuente documental: autora del
proyecto
Anexo B. Modelo Lineal Secuencial y Proceso Unificado de Desarrollo
En la tabla 18 se presentan
las fases que el Modelo Lineal Secuencial abarca, se describen las tareas
específicas que han de cumplirse en cada una de ellas y las ventajas y
desventajas que sugiere su dinámica de trabajo. La descripción detallada de las
tareas que se ejecutan en las fases del Proceso Unificado de Desarrollo, así
como sus características y ventajas, también es expuesta a continuación, en las
tablas 22 y 23.
Tabla 18. Fases y actividades del Modelo Lineal Secuencial
Fase |
Actividades |
Ventajas |
Desventajas |
Ingeniería y Modelado de Sistemas / Información |
Establecer requisitos del Sistema (Organización) del
que forma parte el software. Asignar al software algún subgrupo de estos
requisitos. Realizar Análisis del Dominio de |
Apropiado cuando los requisitos se han entendido
correctamente, y cuando éstos no cambiarán durante el proceso de desarrollo. Puede ser combinada y adaptada con otras
metodologías de desarrollo de software. |
Es difícil que el cliente exponga explícitamente los
requisitos, y desde el principio. No facilita el manejo de la incertidumbre al
comienzo del proyecto de desarrollo del software. |
Análisis de Requisitos del Software |
Comprender el dominio de información del software,
su función, comportamiento, rendimiento e interconexiones. |
Proporciona una plantilla con métodos para el
análisis, diseño, codificación, pruebas y mantenimiento. |
Las versiones progresivas del software sólo se
podrán ver hasta que estén muy avanzadas. |
Diseño |
Centrarse en los atributos del programa: estructura
de datos, arquitectura del software, representaciones de interfaz y detalle
procedimental (algoritmo). Traducir requisitos a una representación de software
donde pueda evaluarse su calidad antes de codificarse. |
|
No apto para desarrollar software escalable porque
no estructura iteraciones incrementales para mejorarlo. |
Generación de Código |
Traducir el diseño a una forma legible por la
máquina. |
|
Cada una de sus fases se debe cumplir en su
totalidad para seguir a la siguiente. |
Pruebas |
Detectar errores Asegurar que la entrada produce los resultados
requeridos. |
|
No permite la participación de los clientes en el
desarrollo de software. |
Mantenimiento |
Aplicar las anteriores fases a un programa ya
existente y no a uno nuevo. |
|
|
Fuente documental: PRESSMAN,
Roger. Ingeniería del software: un enfoque práctico. 5 ed. Madrid: McGraw Hill, 1998.
Tabla 19. Fases y actividades del Proceso Unificado de Desarrollo
Fases |
Actividades |
Inicio |
·
Descripción del producto final ·
Análisis de Negocio para el
producto (relación costo-beneficio) ·
Determinación de las principales
funciones del sistema para sus usuarios más importantes ·
Análisis de las alternativas de
arquitectura ·
Determinación del plan del proyecto ·
Análisis del costo de desarrollo
del producto ·
Identificación y priorización de
los riesgos más importantes ·
Planificación detallada de la fase
de Elaboración ·
Estimación del proyecto |
Elaboración |
·
Especificación detallada de la
mayoría de casos de uso del producto ·
Diseño de la arquitectura del
sistema ·
Realización de los casos de uso más
críticos identificados en la fase de Inicio ·
Responder si son suficientemente
estables los casos de uso, la arquitectura y el plan del proyecto ·
Responder si están suficientemente
controlados los riesgos ·
Resolver si se tiene la capacidad
para comprometer el desarrollo del proyecto mediante un contrato |
Construcción |
·
Crear el producto ·
Añadir el software terminado a la
arquitectura ·
Responder si el producto cumple
suficientemente las necesidades de algunos usuarios para hacer una primera
entrega |
Transición |
·
Convertir el producto en una
versión Beta ·
Grupo de usuarios experimentados
prueba el producto e informa deficiencias ·
Corregir problemas ·
Incorporar mejoras ·
Fabricación ·
Formación del cliente ·
Línea de ayuda / asistencia ·
Categorizar los defectos: o
Los que tienen suficiente impacto
en la operación como para justificar una versión incrementada o
Los que pueden corregirse en la
siguiente versión normal |
Fuentes documentales:
BRAUDE, Eric J. Ingeniería de software : una
perspectiva orientada a objetos. México
: Alfaomega, 2004. p. 29, 30, 31.
JACOBSON,
Ivar. BOOCH, Grady. RUMBAUGH, James. El proceso unificado
de desarrollo de software. Madrid: Pearson Educación, 2000.
PRESSMAN, Roger s. Ingeniería de software: un enfoque
práctico. Madrid
: cGraw Hill, 2002. p. 20, 21.
El modelo del Proceso
Unificado de Desarrollo se precia de las características y ventajas que se
listan y resumen a continuación, en
Tabla 20. Características del Proceso Unificado de Desarrollo
Características |
Ventajas |
Dirigido por Casos de uso |
Proporciona una guía para ordenar las actividades de
un equipo desarrollador de software. |
Es Iterativo / Incremental |
Permite la dirección de tareas de cada desarrollador
por separado y del equipo como un todo. |
Usa UML para preparar todos los esquemas de un
sistema software |
Especifica los artefactos que deben desarrollarse. |
Cada ciclo concluye con una Versión del producto
para los clientes |
Ofrece criterios para el control y medición de los
productos y actividades del proyecto. |
Cada ciclo consta de cuatro fases: Inicio, Elaboración, Construcción,
Transición |
Puede especializarse para una gran variedad de
software, áreas de aplicación, tipos de organizaciones, niveles de aptitud y
tamaños de proyecto. |
Cada fase se subdivide en Iteraciones. |
Usa UML para preparar todos los esquemas de un
software. |
Cada versión constituye un producto para su entrega |
Permite reducir el costo del riesgo a los costos de
un solo incremento. |
Cada fase termina con un Hito |
Permite reducir el riesgo de no sacar el producto al
mercado en el horario previsto. |
Los cinco flujos de trabajo tienen lugar sobre las
cuatro fases. |
Facilita la identificación de riesgos en fases
tempranas del desarrollo. |
En cada iteración: Se especifican los casos de uso relevantes Se crea un diseño usando la arquitectura como guía Se implementa el diseño mediante componentes Se verifica qué componentes satisfacen los casos de
uso. |
Acelera el ritmo del esfuerzo de desarrollo al
facilitar la entrega de resultados claros a corto plazo. |
|
Permite refinar los requisitos en Iteraciones
sucesivas. |
Fuentes documentales:
BRAUDE, Eric J. Ingeniería de
software : una perspectiva orientada a objetos.
México : Alfaomega, 2004.
JACOBSON, Ivar. BOOCH, Grady. RUMBAUGH, James. El
proceso unificado de desarrollo de software. Madrid: Pearson Educación, 2000.
PRESSMAN, Roger. Ingeniería del
software: un enfoque práctico. 5 ed. Madrid: McGraw Hill, 1998.
Anexo C. Tipos de prueba de software
Los intentos por clasificar
las tareas que cubren las fases de prueba de software en general, producen
resultados bastante imprecisos porque éstas, en vez de dividirse, se
complementan entre sí. A continuación se presentan los tipos de prueba de
software que, debido al impacto que ejercen en el ciclo de desarrollo de
software, son bastante frecuentadas.
Pruebas de Unidades
El objetivo de estas pruebas
es garantizar que los bloques de construcción del sistema sean totalmente
confiables.
Pruebas de caja blanca
La meta de esta clase de
pruebas es determinar cuáles son las líneas de código que tienen más
probabilidad de contener defectos. Su proceso general involucra la división del
diseño del sistema para encontrar sus rutas de ejecución y sus módulos de
control y procesamiento de datos. De manera seguida se crean casos de prueba
que realicen seguimiento a estos caminos y que permitan ejecutar sus módulos
por separado.
Para el presente proyecto, no
se considera prudente ni sensato el compromiso con las pruebas de caja blanca
en razón de que:
1
El objetivo de las pruebas de caja
blanca es determinar si se está construyendo correctamente el sistema,
descubriendo casos en los que no se cumplan los requisitos de cada segmento,
rama, condición/decisión y bucle del código.
2
El cumplimiento de ese objetivo
requeriría de un conocimiento y experiencia previos igual o mayor que los de
quienes construyeron la versión 1.3 de Eledge, guiados y asesorados por su
autor, Charles A. Wight.
Pruebas de caja gris
Estas pruebas, como su nombre
lo indica, incluyen aspectos de las pruebas de caja negra y caja blanca.
Prueba de Regresión
Estas pruebas determinan si la
funcionalidad de una aplicación sigue vigente luego de haberle añadido código.
Es decir, responde a la pregunta “¿es el software actual el mismo de antes pero
con funcionalidad añadida?” Esto lo logra mediante la verificación de que el
sistema siga pasando exitosamente las pruebas que se le practicaron justo antes
de introducirle modificaciones.
Por lo anterior, este tipo de
pruebas son llevadas a cabo de manera muy frecuente, dentro del proceso del
desarrollo de la aplicación. En caso de que el tiempo no sea un factor de
holgura en la ejecución de estas pruebas, se deben escoger las que ofrezcan
mayor probabilidad de encontrar defectos.
Pruebas de Integración
Las pruebas de integración son
llevadas a cabo durante el período de desarrollo de un sistema y al finalizar
la implementación de sus módulos y/o versiones de evolución. Este tipo de
pruebas es muy practicado en proyectos que requieren implementar sus
aplicaciones a través del trabajo simultáneo de varios equipos de programadores,
que construyen los módulos del sistema por separado.
A manera de ilustración, estas
pruebas comienzan con la detección de fallos a nivel de cada componente de la
aplicación, para luego ir evaluando el comportamiento de aquéllos a medida que
se integran unos con otros.
Finalmente, se verifica y
valida el sistema en función de la interacción de sus módulos, al ser
integrados como un todo.
Debido al carácter incremental
del método que sugieren estas pruebas, es muy conveniente iniciarlas tan pronto
como se desarrolle la primera versión de cada uno los módulos que compondrán la
aplicación final.
A medida que se van probando y
corrigiendo estos módulos, se incluyen en un conjunto que contiene los otros
módulos que ya han sido validados exitosamente. A este conjunto se le denomina
“la base”. Es decir, se van integrando uno a la vez, conforme van siendo
evaluados y corregidos -si es del caso-. Esta base es el producto resultante de
la prueba de los módulos, y constituye la versión actual del software a
desarrollar.
Estas pruebas son hechas en
conjunto con las de regresión, de manera que si los componentes integrados en
Pruebas de Desarrolladores y
Artefactos
Estas pruebas tienen como
objetivo asegurar que dentro del proceso de pruebas de integración, se
incluyan: el modelo de casos de uso, los casos de prueba, procedimientos de
prueba, el informe de las pruebas, el plan de pruebas, los componentes de las
pruebas y los defectos encontrados.
Los roles que participan en
este tipo de pruebas son el del Ingeniero de pruebas, el de componentes y el
ejecutor de la prueba.
Prueba de Interfaz
Para verificar y validar las
interfases de un sistema, este tipo de prueba propone invocar los métodos que
aquéllas implementan, de manera combinada y secuencial. Esto es útil siempre y
cuando las combinaciones de invocación a métodos que se elijan, estén ajustadas
al contexto en el cual adquieren sentido, ya que, de otra manera, sería poco
factible –e irrelevante- predecir el resultado de tal prueba.
Pruebas del Sistema
Estas pruebas marcan la fase
terminal del proceso de pruebas de integración, y toman como parámetro de
validación de la aplicación, los requisitos a partir de los cuales ésta fue
creada. Debido a que lo que se busca es determinar si tales requerimientos se
cumplen o no, es necesario contar con casos de prueba que se precien de un alto grado de rigurosidad.
Dado que las pruebas del
sistema aseguran que los requerimientos se cumplen, deben validar de modo
sistemático cada requerimiento. Se requiere una escritura de pruebas
considerable para forzar la demostración de cada requerimiento. En este punto
también se validan los casos de uso.
Los tipos de pruebas del
sistema son: de volumen, de utilidad, de desempeño, de configurabilidad, de
compatibilidad, de confiabilidad / disponibilidad, de seguridad, de uso de
recursos, de aptitud de instalación, de funcionalidad y de carga o tensión.
Prueba de Utilidad
Las pruebas de utilidad tienen
como objetivo verificar que el sistema esté en conformidad con la especificación
de sus requisitos, y asegurar la aceptación del producto desarrollado, por
parte de sus clientes y usuarios.
El método que estas pruebas
proponen seguir para lograr aquello, es otorgar una medida al grado de
satisfacción que expresan los usuarios del software, con respecto a su
funcionamiento, cuando lo están usando “en vivo y en directo”.
Los criterios que se tienen en
cuenta para validar la aplicación, en la ejecución de estas pruebas son:
accesibilidad, facilidad de navegación, rapidez de respuesta, eficiencia y
comprensión del producto a evaluar.
Pruebas de Aceptación
El objetivo general de esta
clase de prueba es obtener una constancia del cliente mediante la cual él
informa que recibió la aplicación en conformidad a lo estipulado en el contrato
de negocio. En este contexto, las pruebas se realizan en presencia del cliente
y son ejecutadas en la configuración hardware que él va a utilizar para correr
la aplicación. La práctica de estas pruebas es pertinente en los casos en que
se haya acordado que la organización cliente pagará cierto tipo de avances,
logrados dentro del proceso de desarrollo de la aplicación final.
Pruebas de Instalación
Cuando una aplicación se
ejecuta en distintos entornos, se presentan grandes posibilidades de que se generen
errores en la misma. En vista de ello, las pruebas de instalación buscan
validar el software directamente desde la máquina final, para luego practicar
las Pruebas del Sistema anteriormente descritas. Es conveniente aclarar que, de
no ser posible realizar este tipo de pruebas en la configuración de hardware
cliente, es preciso llevarlas a cabo en plataformas que se ajusten y/o
representen fielmente el tipo de máquinas que éste empleará.
Pruebas Alfa y Beta
Estas pruebas se realizan
involucrando la participación del cliente en la ejecución de las Pruebas del
Sistema. Concretamente, las pruebas alfa se llevan a cabo con un grupo
confiable de usuarios, no necesariamente pertenecientes a la organización
cliente. Esto se hace con la idea de que el usuario informe sobre los defectos
que encuentra en aquélla sin que esto afecte la imagen o reputación de la
misma. Posteriormente a la finiquitación de estas pruebas, siguen las pruebas
tipo beta.
Por el contrario, las
versiones beta del sistema sí son probadas por una porción de la comunidad
final de clientes (o del público al que el producto va dirigido). Normalmente,
las personas que se ofrecen a practicar estas pruebas lo hacen con el propósito
de ganar comprensión acerca del funcionamiento del producto por el cual están
pagando. Estas pruebas son ejecutadas inmediatamente antes del lanzamiento
final de la aplicación. En la actualidad, las versiones beta son frecuentemente
distribuidas hacia un extenso público, a través de Internet. Esto se realiza
típicamente con el ánimo de generar publicidad, ofreciendo un adelanto de los
servicios que la aplicación ofrecerá; el efecto colateral de esta actividad es
en parte, lograr que el usuario potencial del software se familiarice con su
interfaz y funcionalidad, de manera que en el futuro, se convierta en un fuerte
candidato para la compra de las versiones mejoradas del producto.
A modo de síntesis, las
pruebas alfa se constituyen como la primera fase del período de pruebas, mientras
que las pruebas beta delimitan la segunda fase del mismo.
Anexo D. Evidencia de
correos intercambiados en la estimación
de una alternativa de corrección.
Figura 9. Correos intercambiado en la estimación de una alternativa de corrección
Fuente documental: autora del proyecto
Anexo E. Documentación de las correcciones implementadas
Las diferencias entre la totalidad de
clases originales y corregidas (sin reestructuración de arquitectura), se
exponen en el Anexo F.
Las diferencias entre la totalidad de
los archivos de internacionalización (i18n) originales y corregidos, se exponen
en el Anexo G.
Las diferencias entre la totalidad de
clases originales y corregidas (con reestructuración de arquitectura), se
exponen en el Anexo H.
Correcciones a fallas:
Tabla 21. Correcciones implementadas a nivel de fallas
Falla |
Corrección |
Clase
afectada |
Líneas
de código afectadas |
Independientemente de cómo estén configuradas en la
máquina local, las características regionales de: idioma, país, fecha y hora,
aparecen sólo en inglés. |
La
fecha y hora aparecen en pantalla dependiendo de cómo estén configuradas en
la máquina local, las características regionales de: idioma, país, fecha y
hora. |
Usuarios Exam Gradebook Scores |
|
El
Administrador se puede borrar a sí mismo de la base de datos de usuarios del
prototipo. Esta falla se genera si, estando en la sesión de Administrador, se
accede a la sección “Usuarios” y se eliminan todos los usuarios que aparecen
en pantalla. |
El
sistema Eledge no debe permitir que los usuarios de tipo Administrador se
borren a sí mismos y/o a otros Administradores, de la base de datos. El
Administrador debe borrarse de la base de datos a través del sistema de
gestión de la base de datos ‘Eledge’. |
Usuarios |
|
El permiso “Condicional” para ver
los correos de los usuarios no está funcionando: al asignarse este nivel de
permiso a un profesor que sí tiene estudiantes asignados, a éste no le
aparecen los correos de tales estudiantes. |
Al
asignársele a un profesor - que sí tiene estudiantes en su curso X- el nivel
de permiso “condicional” para ver correos, ahora sí le aparecen los correos
de sus estudiantes del curso X. El
código corrector se ubica entre las líneas 208 y 243, de la clase
‘Email.java’. |
Email |
|
No salen las cuentas de correo de
usuarios tipo ‘visitante’ ni ‘congelado’, dentro de la lista de correos de
los cursos en los que éstos están inscritos. |
Aparecen las cuentas de correo de usuarios tipo
‘visitante’ ni ‘congelado’, dentro de la lista de correos de los cursos en
los que éstos están inscritos. |
Email |
|
Fuente documental: autora del proyecto
Correcciones a los Defectos a nivel del grado en que
Defecto:
·
Interfase poco intuitiva en cuanto al
orden de pasos que el usuario ha de seguir para realizar determinada acción y
usar las opciones de Eledge.
Correcciones implementadas:
Tabla 22. Correcciones implementadas a los Defectos a nivel del grado en que
Clase |
Archivo
i18n |
Corrección
implementada |
Calendar |
CalendarResourceBundle |
·
Adición de: |
str_bar1=Página
de Inicio |
||
str_bar2=>> Agenda |
||
str_noAutho=Sin Autorización |
||
str_noAuthoMsg1=Lo sentimos, pero no es un usuario
registrado y no puede acceder a esta opción. Regístrese entrando a
"Registrar Usuario". |
||
str_noAuthoMsg2=Si olvido la contraseña, entre a
"Registrar Usuario". Si no puede, contacte a su docente o
administrador. |
||
str_noAuthoMsg3=Muchas Gracias. |
||
str_goCurrMonth=Ir al mes actual |
||
str_ContrPanel=Panel de control |
||
str_help = Ayuda |
||
str_calendar_title = Agenda para: |
||
|
CalendarResourceBundle_en |
·
Adición de: |
str_bar1=Home |
||
CharHider |
CharHiderResourceBundle |
·
Creación del archivo ‘CharHiderResourceBundle’, dentro
del conjunto de archivos de internacionalización de las interfases de Eledge ·
Adición de: |
str_servlet_info=Este modulo servlet de Eledge es
usado para reemplazar los caracteres enmarcados con comilla sencilla, con su
equivalente en cadena de caracteres (para introducir cadenas de caracteres en
la base de datos), o con su caracter especial equivalente en HTML (para incluir comillas sencillas en elementos de
formularios web). |
||
CharHiderResourceBundle_en |
·
Creación del archivo
‘CharHiderResourceBundle_en’, dentro del conjunto de
archivos de internacionalización de las interfases de Eledge ·
Adición de: |
|
str_servlet_info=This Eledge servlet module is used
to replace single quotation mark characters with the string literal
equivalent (for entering strings into the database) or with the HTML special
character equivalent (for including single quotes in web form elements). |
||
Content |
ContentResourceBundle |
·
Adición de: |
str_bar1=Página de Inicio |
||
str_courseCont=>> Contenido del Curso |
||
str_themeCont=Contenido del tema |
||
|
|
str_theme=Tema |
|
|
str_themList=Lista de temas disponibles del curso |
|
|
str_selecThem=Seleccione el tema del curso que
guste, y de clic en Ingresar o sobre el título del tema. |
|
|
str_toNavig= Para navegar por el contenido del tema,
use los bótones Atras y Siguiente. |
|
|
str_toEdit= Para Editar o Agregar una nueva página,
de clic en Editar/Añadir Nueva Página. |
|
|
str_toRemove= Si desea eliminar la página actual, de
clic en Eliminar. |
|
|
str_toEditThem=Para
editar el título del tema o la breve descripción del tema, de clic en Editar |
|
|
str_toRemThem=Si desea
eliminar el tema con sus respectivos contenidos por completo, de clic en
Eliminar. |
|
|
str_entThem=Ingresar |
|
|
str_ediThem=Editar |
|
|
str_toRemoveBtn=Eliminar |
|
|
str_toEditBtn=Editar/Añadir
Nueva Página |
|
|
str_nextBtn=Siguiente> |
|
|
str_previBtn=<Atrás |
EledgeResources |
|
Implementación
del método ‘getCharHiderBundle’, para la extracción del texto asignado a las
variables del archivo ‘CharHiderResourceBundle’ creado para la
internacionalización de la interfase de la clase CharHider: public static RBStore
getCharHiderBundle() { RBStore rb= new RBStore();
rb.setBaseName("CharHiderResourceBundle"); return
rb; } |
Help |
HelpResourceBundle |
·
Adición de: |
str_help10_text =La primera persona que registra una
{0}Nueva Cuenta de Estudiante{1} en el curso adquiere el rol de coordinador/a
del mismo, y se le asignan privilegios para añadir contenidos al curso, ver
puntuaciones, y asignar a otros su mismo rol o el que desee (en el servlet
Lista de |
||
str_help10_title = Para uso del Administrador y/o
Profesor |
||
Home |
HomeResourceBundle |
·
Eliminación y traslado de lo
siguiente, hacia HelpResourceBundle: |
|
|
str_home2_text=La primera persona que registra una
{0}Nueva Cuenta de Estudiante{1} en el curso adquiere el rol de coordinador/a
del mismo, y se le asignan privilegios para añadir contenidos al curso, ver
puntuaciones, y asignar a otros su mismo rol o el que desee (en el servlet
Lista de str_home2_title= Para uso del Administrador y/o Profesor a ‘HelpResourceBundle’ con los nombres:
‘str_help10_text’ y ‘str_help10_title’, respectivamente |
|
|
·
Adición de: |
str_home0_title=Bienvenida/o |
||
str_home0_texta=Por favor agregue esta página a sus
Marcadores para que le resulte más sencillo volver a ella en el futuro. Dése
cuenta, que |
||
str_home0_textb=Debe entrar siempre por esta página
al sitio web, puesto que las noticias se envíaran aquí. |
||
str_home1_title= Cuenta de Usuario |
||
str_home1_text=Si esta es su primera visita a este
sitio web y es usted un/a estudiante, profesor o ayudante, haga click, por
favor en el enlace {0}Cuenta de Usuario{1} de la barra de navegación para
registrar una {0}nueva cuenta de usuario{1} en la clase. |
||
|
|
str_db_created_ok=La base
de datos de la clase se creó correctamente. |
Fuente documental: autora del proyecto
Defecto:
·
El código del 65% de las
clases de Eledge incluye directamente texto a desplegar a nivel de
interfase GUI; es decir, éste no es capturado de los archivos de Eledge que
contienen texto en diferentes idiomas (archivos tipo properties). Por tanto, no
aparece en pantalla el texto correspondiente al idioma configurado en la
máquina, sino el incluido directamente en el código de tales clases, el
cual No es internacionalizable debido a que siempre aparecerá en pantalla sin
tener en cuenta el idioma configurado en la máquina.
Correcciones
implementadas:
·
Se crearon variables por cada
fragmento de texto que se despliega de manera continua (o secuencial) en la
pantalla.
·
Se implementaron, dentro del archivo
de internacionalización de cada una de las clases que constituyen tal
porcentaje (65%), las correspondientes asignaciones ‘variable = fragmento de
texto’. (Se toman estos ‘fragmentos de texto’ como los fragmentos de texto
continuo que directamente se incluyen dentro del código del 65% las clases)
·
Se crearon, para cada una de las
clases que constituyen tal porcentaje (65%), métodos que reciben como
argumentos los nombres de cada una de esas variables, para que capturen el
texto almacenado en tales archivos
·
Se reorganizó el código de tal
porcentaje de clases, de manera que éstas invoquen los métodos que capturan el
texto de tales archivos, cada vez que éstas requieran la presencia de ese texto
Los
resultados de estas correcciones se exponen de manera detallada en los Anexos F
y G.
Correcciones
a los Defectos a nivel de Reestructuración de Arquitectura de Código:
Defectos:
·
La arquitectura del código que gestiona las interfases de Eledge (Html y
JavaScript) posee un alto grado de acoplamiento y un bajo grado de cohesión con
respecto al código que gestiona la lógica (Java Servlets) y la interacción con
la base de datos (Sql). Este defecto dificulta el mantenimiento y la
escalabilidad (incorporación de nueva funcionalidad) a niveles de interfase y
lógica de Eledge.
·
El porcentaje de clases que simultáneamente
desempeñan funciones de un solo tipo, es 21 %.
·
El porcentaje de clases que
simultáneamente desempeñan funciones de dos tipos, es 18,5%.
·
El porcentaje de clases que
simultáneamente desempeñan funciones de tres tipos, es 60,5%.
·
Existe redundancia de código entre
diferentes clases.
Correcciones
implementadas:
Trasladar las
instrucciones que manejan el despliegue de interfases, de las clases que
desempeñan más de un tipo de función (en términos de Interfase, Control y
Entidad), hacia nuevas clases creadas, de manera que estas últimas implementen
métodos dedicados exclusivamente al despliegue de interfases, los cuales sean
invocados por parte de las clases que originalmente desplegaban tales
interfases de manera altamente acoplada con funciones de tipo Control y
Entidad.
Clase original |
Tipos de funciones de la clase original |
Clase corregida |
Tipos de funciones de la clase corregida |
Clase creada |
Tipos de funciones de la clase creada |
Student (631 líneas) |
Interfase y Entidad |
Student (664 líneas) |
Entidad |
StudentInterfase (120 líneas) |
Interfase |
Calendar (794 líneas) |
Interfase, Control y Entidad |
Calendar (805 líneas) |
Control y Entidad |
CalendarInterfase (863 líneas) |
Interfase |
Content (471 líneas) |
Interfase, Control y Entidad |
Content (538 líneas) |
Control y Entidad |
ContentInterfase (460 líneas) |
Interfase |
CharHider (126 líneas) |
Interfase y Control |
CharHider (155 líneas) |
Control |
CharHiderInterfase (93 líneas) |
Interfase |
ContentPacking (507 líneas) |
Interfase, Control y Entidad |
ContentPacking (485 líneas) |
Control y Entidad |
ContentPackingInterfase (334 líneas) |
Interfase |
Cursos (196 líneas) |
Interfase, Control y Entidad |
Cursos (200 líneas) |
Control y Entidad |
CursosInterfase (155 líneas) |
Interfase |
DiscussionBoard (1300 líneas) |
Interfase, Control y Entidad |
DiscussionBoard (1453 líneas) |
Control y Entidad |
DiscussionBoardInterfase (1070 líneas) |
Interfase |
Fuente documental: autora del
proyecto
Anexo F. Diferencias entre
las clases originales y corregidas (sin reestructuración de arquitectura)
Este anexo
contiene una muestra representativa del trabajo elaborado para dar a conocer
detalladamente las diferencias entre las clases originales y corregidas, sin
reestructuración de arquitectura. El contenido completo de este trabajo se
encuentra disponible en el CD del presente proyecto.
Convenciones a utilizar en las tablas contenidas en este
anexo:
Tabla 24. Convenciones del anexo F
Color |
Significado |
Negro |
Contenido Exacto |
Rojo |
Contenido
Diferente |
Azul |
Contenido
que no existe en el otro lado (en el otro archivo) |
Fuente documental: autora del proyecto
COMPARACIÓN
DE ARCHIVO
Fecha:03/11/2005 11:36:31 a.m.
Modo: Todas las Líneas
Archivo Izquierdo: CodigoOriginal\Exam.java
Archivo Derecho: CodigoModificado\Exam.java
1 |
package Eledge; // this tells the java compiler and servlet
engine how to name each servlet |
= |
3 |
package Eledge; // this tells the java compiler and servlet
engine how to name each servlet |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2 |
import
java.io.*; |
|
4 |
import
java.io.*; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 |
import
java.sql.*; |
|
5 |
import
java.sql.*; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
4 |
import
java.util.*; |
|
6 |
import
java.util.*; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
5 |
import
java.util.Calendar; |
|
7 |
import
java.util.Calendar; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
6 |
import
java.util.Date; |
|
8 |
import
java.util.Date; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
7 |
import
java.text.SimpleDateFormat; |
|
9 |
import
java.text.SimpleDateFormat; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
8 |
import
javax.servlet.http.*; |
|
10 |
import
javax.servlet.http.*; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
9 |
import
javax.servlet.*; |
|
11 |
import
javax.servlet.*; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
10 |
import
java.text.MessageFormat; |
|
12 |
import
java.text.MessageFormat; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
<> |
13 |
import
java.util.Locale; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
14 |
import
java.text.DateFormat; |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
59 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> Examenes</em><br><br>"+res.getString("str_account_frozen").concat(res.getString("str_contact_instructor")),student)); |
<> |
66 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Página de
Inicio</a> >> Exámenes</em><br><br>"+res.getString("str_account_frozen").concat(res.getString("str_contact_instructor")),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
68 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Home</a> >> Examenes</em><br><br>"+err.toString(),student)); |
<> |
75 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Página de Inicio</a> >>
Exámenes</em><br><br>"+err.toString(),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
80 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> Examenes</em><br><br>"+examSelectForm(student),student)); |
<> |
87 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Página de
Inicio</a> >> Exámenes</em><br><br>"+examSelectForm(student),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
94 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> Examenes</em><br><br>"+res.getString("str_account_frozen").concat(res.getString("str_contact_instructor")),student)); |
<> |
101 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Página de Inicio</a> >>
Exámenes</em><br><br>"+res.getString("str_account_frozen").concat(res.getString("str_contact_instructor")),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
102 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Home</a> >> <a
href='"+Course.name+".Exam'>Examenes</a> >> Examen
Error</em><br><br>"+err.toString(),student)); |
<> |
109 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Página de Inicio</a> >> <a
href='"+Course.name+".Exam'>Exámenes</a> >> Error </em><br><br>"+err.toString(),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
113 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> Examenes</em><br><br>"+examSelectForm(student),student)); |
<> |
120 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Página de
Inicio</a> >> Exámenes</em><br><br>"+examSelectForm(student),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
122 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> <a href='"+Course.name+".Exam'>Examenes</a> >>
No Examen</em><br><br>"+res.getString("str_select_valid_exam"),student)); |
<> |
129 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Página de
Inicio</a> >> <a href='"+Course.name+".Exam'>Exámenes</a>
>> No existe el Examen</em><br><br>"+res.getString("str_select_valid_exam"),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
128 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> <a href='"+Course.name+".Exam'>Examenes</a> >>
"+getExamTitle(assignmentNumber)+"</em><br><br>"+printExam(student,assignmentNumber,request.getRemoteAddr()),student)); |
<> |
135 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Página de
Inicio</a> >> <a href='"+Course.name+".Exam'>Exámenes</a>
>> "+getExamTitle(assignmentNumber)+"</em><br><br>"+printExam(student,assignmentNumber,request.getRemoteAddr()),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
135 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> <a href='"+Course.name+".Exam'>Examenes</a> >>
"+getExamTitle(assignmentNumber)+"</em><br><br>"+gradeExam(student,assignmentNumber,possibleScore,code,request),student)); |
<> |
142 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Página de Inicio</a> >> <a
href='"+Course.name+".Exam'>Exámenes</a> >>
"+getExamTitle(assignmentNumber)+"</em><br><br>"+gradeExam(student,assignmentNumber,possibleScore,code,request),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
139 |
out.println("<em class='bar-body'><a
href='"+Course.name+".Home'>Home</a> >> <a
href='"+Course.name+".Exam'>Examenes</a> >> Examen
Error</em><br><br>"+Page.create(res.getString("str_dont_understand"),student)); |
<> |
146 |
out.println("<em class='bar-body'><a
href='"+Course.name+".Home'>Página de Inicio</a> >> <a
href='"+Course.name+".Exam'>Exámenes</a> >> Error</em><br><br>"+Page.create(res.getString("str_dont_understand"),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
145 |
SimpleDateFormat df = new
SimpleDateFormat("MMM dd, yyyy h:mm a"); //i18n sensible? |
|
153 |
//SimpleDateFormat df = new
SimpleDateFormat("MMM dd, yyyy h:mm a"); //i18n sensible? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
154 |
//La variable df se reemplazó por 'fullDateFormatCO, de tipo DateFormat |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
158 |
// Get the current system date and time. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
147 |
Date now = new Date(); |
|
159 |
Date date = new Date(); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
162 |
/* SV |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
163 |
// Create an
Spanish/Colombia locale using the constructor. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
164 |
Locale
localeES = new Locale("es", "CO" ); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
166 |
Corrección: desplegar la fecha y hora en el formato determinado por el locale
configurado en la máquina local. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
168 |
SV */ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
170 |
//Inicio de la Corrección |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
172 |
Locale locale = Locale.getDefault(); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
174 |
// Get a date time
formatter for display in |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
175 |
DateFormat fullDateFormatCO = |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
176 |
DateFormat.getDateTimeInstance( |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
177 |
DateFormat.FULL, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
178 |
DateFormat.FULL, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
179 |
locale); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
148 |
buf.append("<br>" +
df.format(now)); |
|
181 |
buf.append("<br>" +
fullDateFormatCO.format(date)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
183 |
//Fin de la Corrección |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
195 |
if
(deadline.before(now)) // this is an expired exam |
<> |
232 |
if
(deadline.before(date)) // this is an expired exam |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
209 |
if
(allowWorkAhead || available.before(now) || student.getIsInstructor()) { |
<> |
246 |
if
(allowWorkAhead || available.before(date) || student.getIsInstructor()) { |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
227 |
buf.append("\n<td>"
+ df.format(deadline) + "</td>"); |
<> |
264 |
buf.append("\n<td>"
+ fullDateFormatCO.format(deadline) + "</td>"); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
284 |
Calendar now = Calendar.getInstance(); |
<> |
324 |
Calendar date = Calendar.getInstance(); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
295 |
if (!now.after(then))
{ // not yet eligible for new exam |
<> |
335 |
if (!date.after(then))
{ // not yet eligible for new exam |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
296 |
out.println(Page.create(mf.format(mfArgs).concat(res.getString("str_exam_dlInterval")).concat("<br>").concat(res.getString("str_current_time")).concat(now.getTime().toString()).concat("<br>").concat(res.getString("str_next_exam_availability")).concat(then.getTime().toString()).concat("<hr>").concat(res.getString("str_exam_dlTip")),student)); |
|
336 |
out.println(Page.create(mf.format(mfArgs).concat(res.getString("str_exam_dlInterval")).concat("<br>").concat(res.getString("str_current_time")).concat(date.getTime().toString()).concat("<br>").concat(res.getString("str_next_exam_availability")).concat(then.getTime().toString()).concat("<hr>").concat(res.getString("str_exam_dlTip")),student)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
298 |
returnValue = now.after(then); |
<> |
338 |
returnValue = date.after(then); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
320 |
SimpleDateFormat df = new
SimpleDateFormat("MMM dd, yyyy h:mm a"); //i18n sensible? |
|
362 |
//SimpleDateFormat df = new
SimpleDateFormat("MMM dd, yyyy h:mm a"); //i18n sensible? |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
363 |
//La variable df se reemplazó por 'fullDateFormatCO, de tipo DateFormat |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
371 |
//Date now = new Date(); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
325 |
Date now = new Date(); |
|
372 |
Date date = new Date(); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
374 |
// Create an Spanish/Colombia locale using the
constructor. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
375 |
Locale localeES = new
Locale("es", "CO" ); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
378 |
DateFormat fullDateFormatCO = |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
379 |
DateFormat.getDateTimeInstance( |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
380 |
DateFormat.FULL, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
381 |
DateFormat.FULL, |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
382 |
localeES); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
326 |
buf.append("<br>" +
df.format(now)); |
|
385 |
buf.append("<br>" +
fullDateFormatCO.format(date)); |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
474 |
SimpleDateFormat df = new
SimpleDateFormat("MMM dd, yyyy h:mm a"); //i18n sensible? |
|
535 |
//SimpleDateFormat df = new
SimpleDateFormat("MMM dd, yyyy h:mm a"); //i18n sensible? |
||||||||||||||||||||||||||||||||
|
|
|
536 |
//La variable df se reemplazó por 'fullDateFormatCO, de tipo DateFormat |
||||||||||||||||||||||||||||||||
|
|
|
538 |
// Create an Spanish/Colombia locale using the
constructor. |
||||||||||||||||||||||||||||||||
|
|
|
539 |
Locale localeES = new
Locale("es", "CO" ); |
||||||||||||||||||||||||||||||||
|
|
|
541 |
DateFormat fullDateFormatCO = |
||||||||||||||||||||||||||||||||
|
|
|
542 |
DateFormat.getDateTimeInstance( |
||||||||||||||||||||||||||||||||
|
|
|
543 |
DateFormat.FULL, |
||||||||||||||||||||||||||||||||
|
|
|
544 |
DateFormat.FULL, |
||||||||||||||||||||||||||||||||
|
|
|
545 |
localeES); |
||||||||||||||||||||||||||||||||
479 |
Date now = new Date(); |
<> |
550 |
Date date = new Date(); |
||||||||||||||||||||||||||||||||
480 |
buf.append("<br>" +
df.format(now)); |
|
551 |
buf.append("<br>" +
fullDateFormatCO.format(date)); |
||||||||||||||||||||||||||||||||
920 |
Date now = new Date(); |
<> |
991 |
Date date = new Date(); |
||||||||||||||||||||||||||||||||
922 |
log.paranoid("now.getTime() yields: " +
now.getTime(),"Exam:elapsedMinutes"); |
<> |
993 |
log.paranoid("date.getTime() yields: " +
date.getTime(),"Exam:elapsedMinutes"); |
||||||||||||||||||||||||||||||||
924 |
long elapsedMilliseconds = now.getTime() -
dateTaken.getTime(); |
<> |
995 |
long elapsedMilliseconds = date.getTime() -
dateTaken.getTime(); |
||||||||||||||||||||||||||||||||
964 |
Date now = new Date(); |
<> |
1035 |
Date date = new Date(); |
||||||||||||||||||||||||||||||||
1137 |
buf.append("<table border=1
cellspacing=0><thead><b>Exams</b></thead>"); |
<> |
1208 |
buf.append("<table border=1
cellspacing=0><thead><b>Exámenes</b></thead>"); |
||||||||||||||||||||||||||||||||
Fuente documental: autora del proyecto
Anexo G. Diferencias entre
los archivos de internacionalización (i18n) originales y corregidos
Este anexo
contiene una muestra representativa del trabajo elaborado para dar a conocer
detalladamente las diferencias entre los archivos de internacionalización
originales y corregidos. El contenido completo de este trabajo se encuentra
disponible en el CD del presente proyecto.
Convenciones a utilizar en las tablas contenidas en este
anexo:
Tabla 26. Convenciones del anexo G
Color |
Significado |
Negro |
Contenido Exacto |
Rojo |
Contenido
Diferente |
Azul |
Contenido
que no existe en el otro lado (en el otro archivo) |
Fuente
documental: autora del proyecto
COMPARACIÓN
DE ARCHIVO
Fecha:06/11/2005 10:32:09 a.m.
Modo: Todas las Líneas
Archivo Izquierdo: ArchivosOriginales\i18n\HelpResourceBundle.properties
Archivo Derecho: ArchivosModificados\i18n\HelpResourceBundle.properties
2 |
str_help2_text=Haga
click en el enlace Mi Cuenta en la barra de navegación y entre en el sistema,
si es necesario. Edite el formulario que contiene la información que
corresponde a su cuenta. Una vez haya terminado, haga click en el botón
Envíar para guardar los cambios que haya realizado. |
<> |
2 |
str_help2_text=Haga
clic en la opción "Registrar Usuario" de la barra de navegación
superior. Diligencie el formulario que contiene la información que
corresponde a su cuenta. Una vez haya terminado, haga clic en el botón Envíar
para guardar los cambios que haya realizado. |
5 |
str_help3_text=Haga
click en el enlace Mi Cuenta en la barra de navegación y entre en el sistema,
si es necesario. Edite el formulario que contiene la información que
corresponde a su cuenta. Una vez haya terminado, haga click en el botón
Envíar para guardar los cambios que haya realizado. |
<> |
5 |
str_help3_text=Haga
clic en el enlace Mi Cuenta en la barra de navegación y entre en el sistema,
si es necesario. Edite el formulario que contiene la información que
corresponde a su cuenta. Una vez haya terminado, haga clic en el botón Envíar
para guardar los cambios que haya realizado. |
10 |
str_help5_text=Haga
click en el enlace Mi Cuenta en la barra de navegación e introduzca su número
de identificación de estudiante en el formulario titulado Recuperar
Contraseña . Se le formulará la pregunta que introdujera en el apartado
Pregunta Secreta cuando creó su cuenta. Si su respuesta es correcta, se le
mostrará su contraseña. Si es capaz de entrar en el sistema aunque haya
olvidado su contraseña (p.ej. usando un cookie de entrada) podrá editar su
cuenta para fijar una contraseña nueva. |
<> |
10 |
str_help5_text=Haga
clic en el enlace Mi Cuenta en la barra de navegación e introduzca su número
de identificación de estudiante en el formulario titulado Recuperar
Contraseña . Se le formulará la pregunta que introdujera en el apartado
Pregunta Secreta cuando creó su cuenta. Si su respuesta es correcta, se le
mostrará su contraseña. Si es capaz de entrar en el sistema aunque haya
olvidado su contraseña (p.ej. usando un cookie de entrada) podrá editar su
cuenta para fijar una contraseña nueva. |
12 |
str_help6_text=Las
contraseñas son sensibles a mayúsculas y minúsculas, asegúrese, por tanto, de
que las está tecleando con exactitud. Asegúrese, igualmente, de que la tecla
de Activar Mayúsculas de su teclado no se ha pulsado por error. Si estos
consejos no sirven, haga click en el enlace Mi Cuenta en la barra de
navegación siga las instrucciones para recuperar una contraseña que se
haya perdido. |
<> |
12 |
str_help6_text=Las
contraseñas son sensibles a mayúsculas y minúsculas, asegúrese, por tanto, de
que las está tecleando con exactitud. Asegúrese, igualmente, de que la tecla
de Activar Mayúsculas de su teclado no se ha pulsado por error. Si estos
consejos no sirven, haga clic en el enlace Mi Cuenta en la barra de
navegación siga las instrucciones para recuperar una contraseña que se
haya perdido. |
14 |
str_help7_text=Haga
click en el enlace Puntuaciones en la barra de navegación. Las puntuaciones
que se le mostrarán en una tabla son las que se utilizan para determinar su
puntuación global en el curso. |
<> |
14 |
str_help7_text=Haga
clic en el enlace Puntuaciones en la barra de navegación. Las puntuaciones
que se le mostrarán en una tabla son las que se utilizan para determinar su
puntuación global en el curso. |
17 |
str_help0_text=Si
está experimentando problemas al navegar por este sitio, revise por favor las
siguientes Preguntas Frecuentes. Puede ser que encuentre ahí respuestas a los
problemas que ha tenido. Use la función Encontrar Texto de su navegador para
buscar en la página la palabra clave que represente su problema. Si aún así,
no encuentra solución, envíe un email al/la coordinador. Si cree que se ha
producido un bug (error) en el programa recopile toda la información posible
sobre el mismo y realice un informe de bug con Sistema de Aprendizaje Abierto
Eledge. |
<> |
17 |
str_help0_text=Si
está experimentando problemas al navegar por el sistema, por favor revise las
siguientes "Preguntas Frecuentes". Aquí puede encuentrar respuestas
a los problemas que ha tenido. Use la función "Encontrar Texto" de
su navegador para buscar en la página la palabra clave que represente su
problema. Si aún así, no encuentra solución, envíe un correo electrónico al
Administrador del sistema. |
19 |
str_help1_text=Haga
click en el enlace Mi cuenta en la barra de navegación y siga las
instrucciones para Crear una Cuenta Nueva de Estudiante. |
<> |
19 |
str_help1_text=Haga
clic en el enlace Mi cuenta en la barra de navegación y siga las
instrucciones para Crear una Cuenta Nueva de Estudiante. |
|
|
|
23 |
str_help10_title=Para
uso del Administrador y/o Profesor |
Fuente documental: autora del
proyecto
Anexo H. Diferencias
entre las clases originales y corregidas
(con
reestructuración de arquitectura)
Este anexo
contiene una muestra representativa del trabajo elaborado para dar a conocer
detalladamente las diferencias entre las clases originales y corregidas, con
reestructuración de arquitectura. El contenido completo de este trabajo se
encuentra disponible en el CD del presente proyecto.
Convenciones a utilizar en las tablas contenidas en este
anexo:
Tabla 28. Convenciones del anexo H
Color |
Significado |
Negro |
Contenido Exacto |
Rojo |
Contenido
Diferente |
Azul |
Contenido
que no existe en el otro lado (en el otro archivo) |
Fuente documental: autora
del proyecto
COMPARACIÓN DE ARCHIVO
Fecha:03/11/2005 01:03:35 p.m.
Modo: Todas las Líneas
Archivo Izquierdo: CodigoOriginal\Clases\Calendar.java
Archivo Derecho: CodigoModificado\Calendar.java
13 |
package Eledge; // this tells the java compiler and servlet
engine how to name each servlet |
|
13 |
package Eledge; // this tells the java compiler and servlet
engine how to name each servlet |
14 |
import
java.io.*; |
|
14 |
import
java.io.*; |
15 |
import
java.sql.*; |
|
15 |
import
java.sql.*; |
16 |
import
java.util.*; |
|
16 |
import
java.util.*; |
17 |
import
java.text.*; |
|
17 |
import
java.text.*; |
18 |
import
javax.servlet.http.*; |
|
18 |
import
javax.servlet.http.*; |
19 |
import
javax.servlet.*; |
|
19 |
import
javax.servlet.*; |
20 |
import
java.text.MessageFormat; |
|
20 |
import
java.text.MessageFormat; |
22 |
public class Calendar extends HttpServlet { |
= |
23 |
public class Calendar extends HttpServlet { |
23 |
|
|
24 |
|
24 |
private RBStore res = EledgeResources.getCalendarBundle(); |
|
25 |
private RBStore res = EledgeResources.getCalendarBundle(); |
|
|
|
27 |
CalendarInterfase interfase = new CalendarInterfase(); |
27 |
protected String titleBar = Course.name + " "
+res.getString("str_calendar_title"); // label shown on the top bar
of the Calendar |
<> |
31 |
|
28 |
protected
String cTFontsColor = "#000000"; // black |
|
|
|
29 |
protected String cTopBarColor = "#B0D8FF"; //
Eledge sandstone |
|
|
|
30 |
protected String cDayBarColor = "#B0D8FF"; //
Eledge sandstone |
|
|
|
31 |
protected String cOutDayColor = "#DDDDDD"; //
gray |
|
|
|
32 |
protected String cTodaysColor = "#D0D0D0"; //
lighter gray |
|
|
|
33 |
protected String cBGCellColor = "#FFFFFF"; //
white |
|
|
|
34 |
protected
String cDtFontColor = "#000000"; // black |
|
|
|
35 |
protected String timeFormat = "HH:mm"; // use
"HH:mm" for 24-hr format or "h:mma" for 12-hr AM/PM
format |
|
|
|
36 |
protected String dateFormat = "M/d/yy"; // or may
changed to some other form such as "d-M-yyyy" |
|
|
|
42 |
protected SimpleDateFormat dfTimeField = new
SimpleDateFormat(timeFormat); |
<> |
37 |
|
43 |
protected SimpleDateFormat dfDateField = new
SimpleDateFormat(dateFormat); |
|
38 |
|
44 |
SimpleDateFormat dfMonthYear = new SimpleDateFormat("MMMM
yyyy"); // used for the title bar |
|
|
|
45 |
SimpleDateFormat dfMonthName = new
SimpleDateFormat("MMMM"); //
used for next/last month navigation |
|
|
|
46 |
SimpleDateFormat dfMySQLDate = new
SimpleDateFormat("yyyy-MM-dd"); // matches format used by MySQL
database |
|
|
|
47 |
SimpleDateFormat dfMySQLTime = new
SimpleDateFormat("HH:mm");
//format used by MySQL database |
|
|
|
48 |
SimpleDateFormat dfDayOfMonth = new
SimpleDateFormat("d");
// used for writing date numerals in the calendar |
|
|
|
49 |
String time0000 = dfTimeField.format(new
java.util.Date(25200000)); // 00:00 (beginning of day in local time
format) |
|
39 |
String time0000 = interfase.dfTimeField.format(new
java.util.Date(25200000)); // 00:00 (beginning of day in local time
format) |
50 |
String time2359 = dfTimeField.format(new
java.util.Date(111540000)); // 23:59 (end of day in local time format) |
|
40 |
String time2359 = interfase.dfTimeField.format(new
java.util.Date(111540000)); // 23:59 (end of day in local time format) |
76 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Home</a> >> Agenda</em><br><br>"+ |
<> |
|
|
77 |
"<head><title>Sin Autorización</title></head>"
+ |
|
|
|
78 |
"<body>" + |
|
68 |
|
79 |
"<p>Lo sentimos, pero no es un usuario registrado y no puede
acceder a esta opción.Registrese entrando a My Profiles.</p>"
+ |
|
69 |
//MÉTODO 1 |
80 |
"<p>Si olvido la contraseña entre a My Profiles. Si no
puede contacte a su docente o administrador.</p>" + |
|
70 |
|
81 |
"<p>Muchas Gracias.</p>"+ |
|
71 |
interfase.noAuthoMsg(student, out); |
82 |
"</body></html>",student)); |
|
72 |
|
95 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Home</a> >> Agenda</em><br><br>"+err.toString(),student)); |
<> |
85 |
|
|
|
|
87 |
//MÉTODO 2 |
|
|
|
89 |
interfase.bar(err, student,
out); |
117 |
out.println(Page.create("<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> Agenda</em><br><br>"+res.getString("str_no_visitor"),student)); |
<> |
112 |
|
|
|
|
113 |
//MÉTODO 3 |
|
|
|
115 |
interfase.barNoVisitor( student, out ); |
125 |
thisDate =
dfDateField.parse(request.getParameter("date")); |
<> |
124 |
thisDate =
interfase.dfDateField.parse(request.getParameter("date")); |
129 |
log.sparse("Caught:
" + e.getMessage(),"Calendar:doGet"); |
|
129 |
log.sparse("Caught: " +
e.getMessage(),"Calendar:doGet"); |
130 |
out.println(Page.create("<em class='bar-body'><a
href='"+Course.name+".Home'>Home</a> >> Agenda</em><br><br>"+res.getString("str_error_parse_date"),student)); |
|
130 |
|
|
|
|
131 |
//MÉTODO 4 |
|
|
|
133 |
interfase.barErrDate(student, out); |
141 |
"<em
class='bar-body'><a href='"+Course.name+".Home'>Home</a>
>> Agenda</em><br><br>"+tableHeader(thisMonth) +
tableCells(thisMonth, student) + tableFooter(thisMonth),student)); |
|
145 |
|
Fuente documental: autora del proyecto
Este anexo
contiene una muestra representativa del trabajo de diseño de plantillas de pruebas, documentación de los resultados de las pruebas, especificación
de las fallas y las funciones a mejorar detectadas y especificación de los
correspondientes requisitos de corrección y mejora. El contenido completo de este
trabajo se encuentra disponible en el CD del presente proyecto.
El diligenciamiento de las plantillas para cada caso de
prueba, se realizó teniendo en cuenta la secuencia presentada a continuación[13]:
1.
Registro y
Apertura de una Sesión
2.
Acceso y
Adición de Cursos
3.
Edición de
Páginas Web
4. Gestión de Usuarios
5.
Gestión y Uso
de Exámenes
6.
Gestión y Uso
de Foros
7.
Uso del
Correo
8.
Uso de
9. Uso de
10. Gestión de Características de
CASO: REGISTRO Y APERTURA DE UNA SESIÓN
Encontrar defectos de
funcionalidad en las opciones que ofrece el prototipo para el registro de
usuarios en su base de datos, y para el inicio y cierre de las sesiones de los
mismos.
Ninguno
Respuesta esperada del sistema
Resultado (Acertado /Fallido): Acertado
Respuesta del sistema (si resultó
fallida):
Respuesta esperada del sistema
Resultado (Acertado /Fallido): Acertado
Respuesta del sistema (si resultó
fallida):
Validación con diferentes datos de cada
una de las casillas que solicitan información.
CASILLA |
DATO |
ENVÍO DE DATO |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Nombre de usuario |
KDFDJS |
|
|
|
|
Contraseña |
DFDS |
|
|
|
|
Confirmar contraseña |
DFDS |
|
|
|
|
Nombre |
FSDA |
|
|
|
|
Apellidos |
|
|
|
|
|
Email |
DFSSD |
|
|
|
|
Pregunta secreta |
DA |
|
|
|
|
Respuesta secreta |
#FASD |
Hacer clic en “Enviar datos de cuenta de Studiante” |
Error.
Falte parte de la información o es incorrecta. Debe
introducir sus apelllidos.
Si ha creado ya una cuenta de estudiante debe entrar en el
sistema con esa cuenta antes de intentar modificar los datos de la misma. ¿Qué el sw diga todos los datos que están erróneos de una
vez o no? |
Acertado |
|
Nombre de usuario |
KDFDJS |
|
|
|
|
Contraseña |
DFDS |
|
|
|
|
Confirmar contraseña |
DFDS |
|
|
|
|
Nombre |
FSDA |
|
|
|
|
Apellidos |
DFDS |
|
|
|
|
Email |
DFSSD |
|
|
|
|
Pregunta secreta |
DA |
|
|
|
|
Respuesta secreta |
#FASD |
Hacer clic en “Enviar datos de cuenta de Studiante” |
Error.
Falte parte de la información o es incorrecta. La
dirección email que suministró no parece válida.
|
Acertado |
|
Nombre de usuario |
KDFDJS |
|
|
|
|
Contraseña |
DFDS |
|
|
|
|
Confirmar contraseña |
DFDS |
|
|
|
|
Nombre |
FSDA |
|
|
|
|
Apellidos |
DFDS |
|
|
|
|
Email |
DFSSD@gmail.com |
|
|
|
|
Pregunta secreta |
DA |
|
|
|
|
Respuesta secreta |
#FASD |
Hacer clic en “Enviar datos de cuenta de Studiante” |
Si ha creado ya una cuenta de estudiante debe entrar en el
sistema con esa cuenta antes de intentar modificar los datos de la misma. |
Acertado |
|
Nombre de usuario |
KDFDJS |
|
|
|
|
Contraseña |
DFDSdd |
|
|
|
|
Confirmar contraseña |
DFDSdd |
|
|
|
|
Nombre |
FSDA |
|
|
|
|
Apellidos |
DFDS |
|
|
|
|
Email |
DFSSD@gmail.com |
|
|
|
|
Pregunta secreta |
DA |
|
|
|
|
Respuesta secreta |
#FASD |
Hacer clic en “Enviar datos de cuenta de Studiante” |
Error.
Falte parte de la información o es incorrecta. No parece
que la contraseña sea válida. Debe tener
entre 6 y 12 caracteres y coincidir exactamente con la que haya introducido
en el campo Confirmar.
Si ha creado ya una cuenta de estudiante debe entrar en el
sistema con esa cuenta antes de intentar modificar los datos de la misma. |
Acertado |
|
Nombre de usuario |
#FASD |
|
|
|
|
Contraseña |
DFDSdd |
|
|
|
|
Confirmar contraseña |
DFDSdd |
|
|
|
|
Nombre |
FSDA |
|
|
|
|
Apellidos |
DFDS |
|
|
|
|
Email |
DFSSD@gmail.com |
|
|
|
|
Pregunta secreta |
DA |
|
|
|
|
Respuesta secreta |
#FASD |
Hacer clic en “Enviar datos de cuenta de Studiante” |
Bienvenid@ al Eledge Espacio Web de
|
Acertado |
|
Nombre de usuario |
#FASD |
|
|
|
|
Contraseña |
DFDSdd |
|
|
|
|
Confirmar contraseña |
DFDS |
|
|
|
|
Nombre |
FSDA |
|
|
|
|
Apellidos |
DFDS |
|
|
|
|
Email |
DFSSD@gmail.com |
|
|
|
|
Pregunta secreta |
DA |
|
|
|
|
Respuesta secreta |
#FASD |
Hacer clic en “Enviar datos de cuenta de Studiante” |
Error.
Falte parte de la información o es incorrecta. No parece que la contraseña sea válida. Debe tener entre 6 y 12 caracteres y coincidir exactamente
con la que haya introducido en el campo Confirmar. Si ha creado ya una cuenta de estudiante debe entrar en el
sistema con esa cuenta antes de intentar modificar los datos de la misma. |
Acertado |
|
o
Hacer clic en
“Logout”
o
Hacer clic en “Mi
Perfil”
Validación con diferentes datos de cada
una de las casillas que solicitan información.
CASILLA |
DATO |
ENVÍO DE DATO |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Casilla adyacente a “Recuperar Contraseña” |
Nombre de usuario con el que se creó una cuenta nueva de
estudiante |
Hacer clic en “Recuperar Contraseña” |
Recuperación
de Contraseña Perdida
Para acreditar su identidad teclee, por favor, la
respuesta correcta a su pregunta secreta: |
Acertado |
|
Casilla adyacente a “Mostrar mi Contraseña” |
La respuesta correcta a su pregunta secreta |
Hacer clic en “Mostrar mi Contraseña” |
Su contraseña es : (la contraseña con la que se creó la cuenta de estudiante) Ha entrado en el sistema correctamente y puede continuar
operando. |
Acertado |
|
Hacer clic
en “Atrás” (en la barra de navegación del browser), Dos Veces |
|||||
Casilla adyacente a “Recuperar Contraseña” |
DFJDFEE |
Hacer clic en “Recuperar Contraseña” |
Recuperación
de Contraseña Perdida
Para acreditar su identidad teclee, por favor, la
respuesta correcta a su pregunta secreta: |
Acertado |
|
Hacer clic
en “Atrás” (en la barra de navegación del browser) |
|||||
Casilla adyacente a “Recuperar Contraseña” |
Nombre de usuario con el que se creó una cuenta nueva de
estudiante |
Hacer clic en “Recuperar Contraseña” |
Recuperación
de Contraseña Perdida
Para acreditar su identidad teclee, por favor, la
respuesta correcta a su pregunta secreta: |
Acertado |
|
Casilla adyacente a “Mostrar mi Contraseña” |
Un dato diferente de la respuesta correcta a su pregunta
secreta |
Hacer clic en “Mostrar mi Contraseña” |
Su respuesta es incorrecta. La respuesta debe coincidir exactamente con la que
introdujo cuando creó su cuenta de estudiante. Si no puede recordar su contraseña ni la respuesta
secreta, debe hablar con el coordinador para que le asigne una nueva contraseña. |
Acertado |
|
Validación con diferentes datos de cada
una de las casillas que solicitan información.
CASILLA |
DATO |
ENVÍO DE DATO |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó
fallida) |
Pregunta secreta que nadie podría acertar salvo usted |
Dato diferente del contenido actualmente en esta casilla. |
|
|
|
|
Respuesta correcta a la pregunta secreta |
Dato diferente del contenido actualmente en esta casilla. |
Hacer clic en “Enviar datos de cuenta de estudiante” |
Gracias.
Su cuenta de estudiante se ha actualizado adecuadamente. |
Acertado |
|
Verificación de datos.
CASILLA |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Pregunta secreta que nadie podría acertar salvo usted |
Valor introducido en esta casilla, la última vez (en la
anterior tabla) |
Acertado |
|
Respuesta correcta a la pregunta secreta |
Valor introducido en esta casilla, la última vez (en la
anterior tabla) |
Acertado |
|
Validación con diferentes datos de cada
una de las casillas que solicitan información.
CASILLA |
DATO |
ENVÍO DE DATO |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Nombre de Usuario |
Nombre de usuario con el que se creó una nueva cuenta de
estudiante. |
|
|
|
|
Contraseña |
(ningún dato) |
Hacer clic en “Entrar ahora” |
Entrada Fallida. Utilice el botón 'Atrás' de su navegador
e inténtelo de nuevo. |
Acertado |
|
Hacer clic
en “Atrás” (en la barra de navegación del browser) |
|||||
Nombre de usuario |
(ningún dato) |
|
|
|
|
Contraseña |
La contraseña con la que se creó una nueva cuenta de
estudiante. |
Hacer clic en “Entrar ahora” |
Entrada Fallida. Utilice el botón 'Atrás' de su navegador
e inténtelo de nuevo. |
Acertado |
|
Hacer clic
en “Atrás” (en la barra de navegación del browser) |
|||||
Nombre de Usuario |
JJJJJJJ |
|
|
|
|
Contraseña |
JJJJJJJ |
Hacer clic en “Entrar ahora” |
Entrada Fallida. Utilice el botón 'Atrás' de su navegador
e inténtelo de nuevo. |
Acertado |
|
Hacer clic
en “Atrás” (en la barra de navegación del browser) |
|||||
Nombre de Usuario |
(ningún dato) |
|
|
|
|
Contraseña |
(ningún dato) |
Hacer clic en “Entrar ahora” |
Entrada Fallida. Utilice el botón 'Atrás' de su navegador
e inténtelo de nuevo. |
Acertado |
|
Hacer clic
en “Atrás” (en la barra de navegación del browser) |
|||||
Nombre de Usuario |
Nombre de usuario con el que se creó una nueva cuenta de
estudiante. |
|
|
|
|
Contraseña |
La contraseña con la que se creó una nueva cuenta de
estudiante. |
Hacer clic en “Entrar ahora” |
Bienvenida/o Por favor agregue esta página a sus Marcadores para que le
resulte más sencillo volver a ella en el futuro. Dése cuenta, que |
Acertado |
|
Respuesta esperada del sistema
y
luego (automáticamente):
Resultado (Acertado /Fallido): Acertado
Respuesta del sistema (si resultó
fallida):
Validación con diferentes datos de cada
una de las casillas que solicitan información.
CASILLA |
DATO |
ENVÍO DE DATO |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Nombre de Usuario |
El nombre de usuario con el que se creó una nueva cuenta
de estudiante. |
|
|
|
|
Contraseña |
La contraseña con la que se creó una nueva cuenta de
estudiante. |
Hacer clic en “Entrar ahora” |
Bienvenida/o Por
favor agregue esta página a sus Marcadores para que le resulte más sencillo
volver a ella en el futuro. Dése cuenta, que |
Acertado |
|
Verificación de datos.
CASILLA |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Su nombre de usuario para este sitio |
Nombre de usuario con el que se creó una nueva cuenta de
estudiante |
Acertado |
|
Nombre |
El nombre con el que se creó una nueva cuenta de
estudiante |
Acertado |
|
Apellidos |
Apellidos con los que se creó una nueva cuenta de
estudiante |
Acertado |
|
Email |
El Email con el que se creó una nueva cuenta de estudiante |
Acertado |
|
Pregunta secreta que nadie podría acertar salvo usted |
|
Acertado |
|
Respuesta correcta a la pregunta secreta |
|
Acertado |
|
Validación con diferentes datos de cada
una de las casillas que solicitan información.
CASILLA |
DATO |
ENVÍO DE DATO |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Contraseña |
Dato diferente del contenido actualmente en esta casilla. |
|
|
|
|
Confirmar contraseña |
El mismo dato introducido en la casilla “Contraseña” |
Hacer clic en “Enviar datos de cuenta de Studiante” |
Gracias.
Su cuenta de estudiante se ha actualizado adecuadamente
|
Acertado |
|
o
Hacer clic en
“Logout”
o
Hacer clic en
“Login”
Validación con diferentes datos de cada
una de las casillas que solicitan información.
CASILLA |
DATO |
ENVÍO DE DATO |
RESPUESTA ESPERADA DEL SISTEMA |
RESULTADO (Acertado / Fallido) |
RESPUESTA DEL SISTEMA (si resultó fallida) |
Nombre de Usuario |
Nombre de usuario con el que se creó una nueva cuenta de
estudiante |
|
|
|
|
Contraseña |
La nueva contraseña de su cuenta de estudiante |
Hacer clic en “Entrar ahora” |
Bienvenida/o Por favor agregue esta página a sus Marcadores para que le resulte más
sencillo volver a ella en el futuro.
|
Acertado |
|
Resultados del Caso de Prueba
Fallas encontradas:
1.
En
la página “Registrar Usuario”, en la casilla adyacente a “Recuperar
Contraseña”, al introducir un Seudónimo de usuario no registrado, aparece el
mensaje:”El número de identificación del/
Corrección: En la página “Registrar Usuario”, en la casilla adyacente a
“Recuperar Contraseña”, al introducir un Seudónimo de usuario no registrado,
debe aparecer el mensaje:
”El Seudónimo de Usuario introducido no está registrado en el sistema”.
2.
En
la sesión de un usuario al que no se le permite cambiar datos de su cuenta de
usuario, si se hace clic en “Registrar Usuario” y se modifican datos de su
cuenta, y luego se hace clic en “Enviar datos de cuenta de nuevo usuario”,
entonces aparece el mensaje: “Lo sentimos, no puede cambiar datos en la cuenta
de usuario tipo 'visitante'. Contacte al Administrador del sistema.”
Corrección: en la sesión de un usuario al que no se le permite cambiar
datos de su cuenta de usuario (usuario tipo ‘Visitante’), si se hace clic en
“Registrar Usuario”, debe aparecer el mensaje: “No puede cambiar datos en la
cuenta de usuario tipo 'visitante'. Contacte al Administrador del sistema.”, en
reemplazo del mensaje: “Modifique los datos de su cuenta en la parte inferior
de la página. Todos los campos son obligatorios. Cuando haya finalizado, haga
clic en el botón 'Enviar datos de Cuenta Nueva de Usuario', con el fín de
guardarlos en la base de datos del curso. Gracias.”.
Esto con el propósito de que el usuario sepa que no se le permite cambiar
sus datos.
3.
Cuando
se hace clic en “Registrar Usuario” sin haber iniciado ninguna sesión de
usuario, y luego se hace clic en “aquí” (en la sección “Editar cuenta de
usuario Existente”), entonces se solicitan los datos para iniciar sesión
y luego aparece la pantalla de bienvenida.
Corrección: La pantalla que ha de aparecer inmediatamente después de
iniciar sesión (habiendo hecho clic en “Editar cuenta de usuario Existente
>> aquí”, previamente), No debe ser la de bienvenida sino la de “Editar
cuenta de usuario”, y la cual debe contener solamente:
Funciones a mejorar:
1.
Al
haber introducido datos erróneos en el formulario de Registro de Usuario, el
sistema no menciona todos los datos erróneos introducidos (para fines de
corrección, por parte del usuario).
Mejora: el sistema debe mencionar todos los datos erróneos introducidos,
de una vez (para fines de corrección, por parte del usuario).
[1]
Como resultado del proyecto de grado titulado “Desarrollo de un prototipo LMS”, y elaborado en
el año 2004 en
*Se estudiaron estas técnicas y metodologías de desarrollo de
software, debido a que ambas presentan aspectos que -al combinarse como propone
el diseño metodológico del proyecto-, se complementan entre sí y resultan
adecuados para el logro de los objetivos general y específicos del presente
trabajo. El Modelo Lineal Secuencial soporta una secuencia de actividades que
se ajustan a los procesos por los que el prototipo ha de pasar para ser
mejorado. El Proceso Unificado de Desarrollo, por su parte, propone ciclos
iterativos entre las fases de pruebas y correcciones del prototipo, que
reflejan la naturaleza (incremental e iterativa) del proceso intermedio que las
relaciona -y que el Modelo Lineal Secuencial no tiene en cuenta-.
[2] BRAUDE, Eric J. Ingeniería de software : una perspectiva orientada a objetos. México : Alfaomega, 2004. p.29, 30, 31.
[3] PRESSMAN, Roger s. Ingeniería de software: un enfoque práctico. Madrid : McGraw Hill, 2002. p. 20, 21.
[4]
PIATTINI, Mario. Calidad en el desarrollo y mantenimiento del software. México:
Alfaomega, 2003. p. 51-69.
[5] PIATTINI, Mario. Análisis y Diseño de Aplicaciones Informáticas de Gestión. México: Alfaomega, 2000. p. 17-21, 24, 26-27.
*Entrada válida es aquélla que genera una
salida que posibilita la ejecución del sistema, de conformidad con su
especificación de requisitos funcionales.
[6] PIATTINI, Mario. Calidad en el desarrollo y mantenimiento del software. México: Alfaomega, 2003. p. 51-69.
[7] PIATTINI, Mario. Análisis y Diseño de Aplicaciones Informáticas de Gestión. México: Alfaomega, 2000. p. 17-21, 24, 26-27.
[8] PRESSMAN, Roger S. Ingeniería de software: un enfoque práctico. Madrid : McGraw Hill, 2002. p. 20, 21.
PRESSMAN, Roger s. Ingeniería de software: un enfoque práctico. Madrid : McGraw Hill, 2002. p. 20, 21.
BRAUDE, Eric J. Ingeniería de software : una perspectiva orientada a objetos. México : Alfaomega, 2004. p. 29, 30, 31.
[9] JACOBSON, Ivar. BOOCH, Grady. RUMBAUGH, James. El proceso unificado de desarrollo de software. Madrid: Pearson
Educación, 2000 p. 23-39, 45-46, 50, 52. [8].
[10] Este hecho se fundamenta en la falta de disponibilidad de los diagramas de: secuencia, colaboración, casos de uso, estados, actividades, componentes y despliegue (aunque se contó con el diagrama de clases).
[11] Se hace referencia al defecto y no a la falla, debido a que el primero se constituye como la causa de la segunda. En razón a que un defecto puede ocasionar una o más fallas, la corrección de un defecto puede repercutir en la corrección de más de una falla.
[12] Este hecho se fundamenta en la falta de disponibilidad de los diagramas de: secuencia, colaboración, casos de uso, estados, actividades, componentes y despliegue (aunque se contó con el diagrama de clases).
[13]El diligenciamiento de las plantillas para cada caso de prueba, se realizó teniendo en cuenta esta secuencia, en razón a que en el seguimiento de ciertos casos de prueba se introducen datos que son requeridos por otros casos de prueba, para su correcto diligenciamiento.