Proyecto de aula
Brayan Hincapie Monsalve
Tecnológico de Antioquia - IU
Facultad de ingenieria - Ingenieria en Software
Medellìn, Colombia
2023
Descripción del problema
El Tecnológico de Antioquia es una institución educativa con una comunidad de más de
10.000 estudiantes. Actualmente, los profesores utilizan una variedad de métodos para
asignar tareas a los estudiantes, incluyendo correo electrónico, mensajería instantánea y
papel. Esto puede ser confuso para los estudiantes, que pueden tener que buscar en varios
lugares para encontrar toda la información sobre sus tareas. Además, puede ser difícil para
los profesores mantener un registro de las tareas que han asignado a los estudiantes.
Un sistema de gestión de tareas móvil podría ayudar a resolver estos problemas. Un
sistema de este tipo permitiría a los profesores asignar tareas a los estudiantes de forma
rápida y sencilla. También permitiría a los estudiantes ver todas sus tareas en un solo lugar,
y realizar un seguimiento de su progreso. Además, un sistema de gestión de tareas podría
ayudar a los profesores a comunicar información sobre las tareas a los estudiantes, como
fechas de entrega, requisitos y recursos.
Planteamiento del problema
El problema que se plantea es cómo desarrollar un sistema de gestión de tareas móvil que
sea fácil de usar, eficaz y que satisfaga las necesidades de la comunidad educativa del
Tecnológico de Antioquia.
Formulación del problema
● ¿Cómo Implementar un sistema de gestión de tareas móvil que sea fácil de usar,
eficaz y que satisfaga las necesidades de la comunidad educativa del Tecnológico
de Antioquia.
Objetivo general
● Implementar un sistema de gestión de tareas móvil que sea fácil de usar, eficaz y
que satisfaga las necesidades de la comunidad educativa del Tecnológico de
Antioquia.
Objetivos específicos
● Analizar un sistema de gestión de tareas móvil que sea fácil de usar para los
profesores y los estudiantes.
● Diseñar interfaz gráfica del sistema.
● Desarrollar un sistema de gestión de tareas web y móvil que sea eficaz para ayudar
a los profesores a asignar tareas a los estudiantes y a los estudiantes a realizar un
seguimiento de su progreso.
● Probar el buen funcionamiento del sistema
Requisitos Generales
● gestión usuarios:
○ El administrador debe poder registrar, cambiar el estado de los usuarios y
gestionar los bugs que surjan.
● Gestión de tareas:
○ Los profesores deben poder crear, editar y eliminar tareas, incluyendo
detalles como título, descripción, fecha de entrega y recursos relacionados.
● Gestión de registros:
○ El sistema debe llevar un registro completo de todas las tareas asignadas,
incluyendo detalles como fechas de asignación y entrega, descripción de
tareas y calificaciones.
● Seguridad y privacidad:
○ Debe garantizar la seguridad de los datos de los estudiantes y profesores,
implementando medidas adecuadas de protección de la información personal
y académica.
● Accesibilidad:
○ El sistema debe ser accesible desde diferentes dispositivos y plataformas,
como computadoras de escritorio, celulares, etc.
Requisitos funcionales
● Registro de usuarios: El sistema debe permitir al administrador registrar a los
usuarios (Estudiantes y profesores) con información personal y académica
verificable.
● Inicio de sesión seguro: Debe haber un mecanismo de inicio de sesión seguro que
requieran credenciales válidas (nombre de usuario y contraseña) para acceder al
sistema.
● Asignación de tareas: El sistema debe permitir a los profesores asignar tareas
específicas a cursos o grupos de estudiantes, con la capacidad de establecer fechas
límite y requisitos.
● Visualización de tareas: Los estudiantes deben poder ver todas las tareas
asignadas a ellos, organizadas por cursos y fechas de entrega, de manera clara y
ordenada.
● Notificaciones de tareas: Los usuarios (profesores y estudiantes) deben recibir
notificaciones por correo electrónico o dentro del sistema sobre nuevas tareas
asignadas, cambios en las tareas existentes o recordatorios de fechas de entrega.
● Entrega de la tarea: Los usuarios (estudiantes) deben poder realizar la entrega de
la tarea que anteriormente el usuario(profesor) les asignó
● Seguimiento de progreso: Los estudiantes deben tener la capacidad de marcar el
estado de sus tareas (por ejemplo, en progreso, completada) y ver un resumen de
su progreso académico.
● Calificaciones y retroalimentación: Los profesores deben poder calificar y
proporcionar retroalimentación sobre las tareas entregadas por los estudiantes, y los
estudiantes deben poder acceder a sus calificaciones y comentarios.
● Búsqueda y filtro de tareas: Los usuarios deben tener la opción de buscar tareas
específicas por palabra clave, fecha de entrega o curso, y aplicar filtros para facilitar
la navegación.
Requisitos no funcionales
● Rendimiento: El sistema debe ser capaz de manejar simultáneamente múltiples
usuarios sin degradación significativa del rendimiento, incluso en momentos de alta
demanda, como el inicio de un nuevo semestre.
● Disponibilidad: El sistema debe estar disponible las 24 horas del día, los 7 días de
la semana, con un tiempo de inactividad planificado mínimo para mantenimiento.
● Seguridad: Debe implementarse una autenticación segura y protección de datos
para garantizar la seguridad y la privacidad de la información de los usuarios,
cumpliendo con estándares de seguridad de datos aplicables.
● Escalabilidad: El sistema debe ser escalable para adaptarse al crecimiento futuro
de la comunidad educativa, permitiendo la adición de nuevos usuarios y cursos sin
pérdida significativa de rendimiento.
● Tiempo de respuesta: El sistema debe responder a las solicitudes de los usuarios
de manera rápida y eficiente, con tiempos de carga de páginas y tareas mínimos.
● Usabilidad: La interfaz de usuario debe seguir principios de usabilidad, como la
consistencia en el diseño y la accesibilidad, para garantizar que los usuarios puedan
utilizar el sistema de manera efectiva y sin dificultades.
● Compatibilidad con navegadores: El sistema debe ser compatible con una
variedad de dispositivos móviles y tablets.
● Cumplimiento normativo: El sistema debe cumplir con regulaciones y estándares
legales y académicos, como la Ley de Protección de Datos y los requisitos de
accesibilidad web.
● Documentación y capacitación: Debe proporcionarse documentación detallada
para administradores, profesores y estudiantes, así como capacitación para
garantizar un uso eficiente del sistema.
● Mantenibilidad: El sistema debe ser fácil de mantener y actualizar, con una
estructura modular y una capacidad de actualización sin problemas para corregir
errores o agregar nuevas características.
Diagrama de Dominio
Diagrama de Casos de Usos
● Caso de uso Registro de usuarios
● Caso de uso Inicio de sesión
● Asignación de tareas
● Visualización de tareas
● Notificaciones de tareas
● Entrega de la tarea
● Seguimiento de progreso
● Calificaciones y retroalimentación
● Búsqueda y filtro de tareas
Casos de Uso
CU - CU Registro de usuarios
Dependencias CU Registro de usuarios
Actores Administrador
Secuencia Paso Acción
Normal 1 El administrador debe ingresar a agregar un nuevo usuario
2 El sistema valida
3 El sistema despliega formulario
4 El administrador debe diligenciar formulario
5 El sistema valida la información del formulario
6 El sistema registra los datos del usuario
7 El sistema arroja un mensaje al administrador de registro
exitoso
8 El sistema genera objeto del perfil del Cliente actualizada
Post - Condición El sistema ha registrado nuevo usuario
Excepciones Paso Acción
5 5.1 Si los campos están vacíos
1 El sistema arroja un mensaje señalando los campos
necesarios.
2 El sistema devuelve al cliente al paso 3
Documentación
Regla de Negocio
Normatividad
CU - CU Inicio de sesión seguro
Dependencias CU Inicio de sesión seguro
Actores Profesor, Estudiante
Secuencia Paso Acción
Normal 1 El usuario debe ingresar nombre de usuario
2 El usuario debe ingresar contraseña
3 El sistema valida
4 El sistema despliega página de inicio
Post - Condición El sistema ha iniciado sesión
Excepciones Paso Acción
3 3.1 Si los campos están vacíos
1 El sistema arroja un mensaje señalando los campos
necesarios.
2 El sistema devuelve al cliente al paso 1
3.2 Si uno de los campos es incorrecto
1 El sistema arroja un mensaje de error
2 El sistema devuelve al cliente al paso 1
Documentación
Regla de Negocio
Normatividad
CU - CU Asignación de tareas
Dependencias CU Asignación de tareas
Actores Profesor
Secuencia Paso Acción
Normal 1 El usuario debe seleccionar el grupo
2 El sistema valida
3 El usuario debe ingresar los detalles de la tarea
4 El sistema valida
5 El sistema despliega el mensaje de registro de tarea exitoso
Post - Condición El sistema ha asignado las tareas a los usuarios
Excepciones Paso Acción
4 3.1 Si los campos están vacíos
1 El sistema arroja un mensaje señalando los campos
necesarios.
2 El sistema devuelve al cliente al paso 3
Documentación
Regla de Negocio
Normatividad
CU - CU Visualización de tareas
Dependencias CU Visualización de tareas
Actores Profesor, Estudiante
Secuencia Paso Acción
Normal 1 El usuario debe ingresar a ver la tarea
2 El sistema valida
3 El sistema despliega la tarea
Post - Condición El sistema ha mostrado la tarea
Excepciones Paso Acción
3 3.1 Si el sistema no despliega la tarea
1 El sistema arroja un mensaje de error
2 El sistema devuelve al cliente al paso 1
Documentación
Regla de Negocio
Normatividad
CU - CU Notificaciones de tareas
Dependencias CU Notificaciones de tareas
Actores Estudiante
Secuencia Paso Acción
Normal 1 El sistema envía notificación al usuario de una nueva tarea
2 El usuario abre la notificaciòn
3 El sistema despliega la notificaciòn
Post - Condición El sistema ha notificado al usuario
Excepciones Paso Acción
Documentación
Regla de Negocio
Normatividad
CU - CU Entrega de la tarea
Dependencias CU Entrega de la tarea
Actores Estudiante
Secuencia Paso Acción
Normal 1 El usuario debe elegir la tarea
2 El sistema valida y despliega la tarea
3 El usuario debe subir la tarea
4 El sistema valida
5 El sistema despliega un mensaje de tarea entregada exitosamente
Post - Condición El sistema ha subido una tarea
Excepciones Paso Acción
4 5.1 Si los campos están vacíos
1 El sistema arroja un mensaje señalando los campos
necesarios.
2 El sistema devuelve al cliente al paso 3
Documentación
Regla de Negocio
Normatividad
CU - CU Seguimiento de progreso
Dependencias CU Seguimiento de progreso
Actores Estudiante
Secuencia Paso Acción
Normal 1 El usuario debe elegir la tarea
2 El sistema valida y despliega la tarea
3 El el usuario puede ver el progreso de la tarea
Post - Condición El sistema ha mostrado el progreso de la tarea
Excepciones Paso Acción
2 5.1 Si ocurre un error al validar
1 El sistema arroja un mensaje de error
2 El sistema devuelve al cliente al paso 1
Documentación
Regla de Negocio
Normatividad
CU - CU Calificaciones y retroalimentación
Dependencias CU Calificaciones y retroalimentación
Actores Profesor
Secuencia Paso Acción
Normal 1 El usuario debe elegir la tarea
2 El sistema valida y despliega la tarea
3 El el usuario debe emitir una calificación y retroalimentaciòn
4 El usuario debe darle al botón enviar
5 El sistema valida
Post - Condición El sistema ha subido la nota y la retroalimentaciòn
Excepciones Paso Acción
2 5.1 Si un campo esta vacio
1 El sistema arroja un mensaje de error
2 El sistema devuelve al cliente al paso 1
Documentación
Regla de Negocio
Normatividad
CU - CU Búsqueda y filtro de tareas
Dependencias CU Búsqueda y filtro de tareas
Actores Profesor, estudiante
Secuencia Paso Acción
Normal 1 El usuario debe seleccionar los filtros
2 El sistema valida y despliega la herramienta de filtros
3 El usuario debe llenar los filtros
4 El sistema valida
5 El sistema despliega las tareas que cumplan con esas características
Post - Condición El sistema ha buscado y filtrado las tareas
Excepciones Paso Acción
4 5.1 Si un campo esta vacio
1 El sistema arroja un mensaje de error
2 El sistema devuelve al cliente al paso 2
Documentación
Regla de Negocio
Normatividad
Análisis de Riesgo
Riesgo 1: Problemas de rendimiento del sistema
● Descripción: El sistema puede enfrentar problemas de rendimiento bajo cargas de
trabajo altas, lo que podría afectar la experiencia del usuario.
● Fase: Fase de Pruebas y Operación.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Equipo de Pruebas y Administrador del Sistema.
● Mitigación: Realizar pruebas exhaustivas de carga y rendimiento para identificar y
abordar problemas de rendimiento antes del lanzamiento. Utilizar técnicas de
escalabilidad y optimización de código.
Riesgo 2: Cambios en los requisitos durante el desarrollo
● Descripción: Los requisitos pueden cambiar a medida que se avanza en el
desarrollo, lo que puede afectar el cronograma y el presupuesto.
● Fase: Fase de Desarrollo.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Gerente de proyecto.
● Mitigación: Establecer un proceso de gestión de cambios sólido que permita
evaluar y aprobar los cambios antes de su implementación. Comunicar de manera
efectiva cualquier cambio a todas las partes interesadas.
Riesgo 3: Problemas de seguridad y privacidad de datos
● Descripción: Existe la posibilidad de brechas de seguridad o filtraciones de datos, lo
que podría poner en riesgo la información personal y académica de los usuarios.
● Fase: Fase de Desarrollo y Operación.
● Nivel de Riesgo: Alto.
● Impacto: Alto.
● Responsable: Equipo de Seguridad de la Información.
● Mitigación: Implementar medidas de seguridad robustas, como cifrado de datos,
autenticación de dos factores y auditorías de seguridad regulares. Cumplir con las
regulaciones de protección de datos aplicables.
Riesgo 4: Problemas en la gestión de versiones y control de cambios
● Descripción: La gestión de versiones y el control de cambios pueden ser
deficientes, lo que podría dar lugar a conflictos en el código y pérdida de
funcionalidad.
● Fase: Fase de Desarrollo.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Equipo de Desarrollo y Gerente de proyecto.
● Mitigación: Implementar un sistema de control de versiones robusto y un proceso
de gestión de cambios que requiera revisiones y aprobaciones antes de implementar
cambios en el código.
Riesgo 5: Cambios en la tecnología o plataformas
● Descripción: Cambios en tecnologías, lenguajes de programación o plataformas en
uso durante el desarrollo pueden requerir ajustes en el sistema, lo que podría
impactar el cronograma y los recursos.
● Fase: Fase de Desarrollo.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Equipo de Desarrollo y Gerente de proyecto.
● Mitigación: Mantenerse actualizado sobre las tendencias tecnológicas y evaluar las
implicaciones de cualquier cambio en la tecnología en el proyecto. Diseñar el
sistema de manera modular para facilitar futuras actualizaciones.
Riesgo 6: Dificultades en la adquisición de recursos de hardware y software
● Descripción: Puede haber demoras o dificultades en la adquisición de servidores,
software o recursos necesarios para el sistema.
● Fase: Fase de Implementación.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Gerente de proyecto.
● Mitigación: Realizar una planificación anticipada de adquisiciones y asegurarse de
tener proveedores confiables. Tener un plan de contingencia en caso de retrasos en
la adquisición.
Riesgo 7: Cambios en regulaciones legales o académicas
● Descripción: Cambios en regulaciones legales o académicas pueden requerir
modificaciones en el sistema para cumplir con nuevos requisitos.
● Fase: Fase de operación y mantenimiento.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado..
● Responsable: Equipo de Cumplimiento Legal.
● Mitigación: Mantenerse al tanto de las regulaciones actuales y anticipar posibles
cambios. Diseñar el sistema de manera que sea flexible y pueda adaptarse a futuros
cambios legales.
Riesgo 8: Falta de adopción por parte de los usuarios
● Descripción: Los profesores y estudiantes pueden no adoptar el sistema de gestión
de tareas, lo que limitaría su efectividad.
● Fase: Fase de operación y mantenimiento.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Equipo de Comunicación y Capacitación.
● Mitigación: Realizar campañas de concienciación y capacitación para mostrar los
beneficios del sistema a los usuarios. Recopilar comentarios y realizar mejoras
continuas.
Riesgo 9: Retrasos en el desarrollo o implementación
● Descripción: Pueden surgir retrasos en el desarrollo del sistema debido a
problemas técnicos, falta de recursos o cambios en los requisitos, lo que podría
afectar el cronograma del proyecto.
● Fase: Fase de Desarrollo e Implementación.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Gerente de proyecto.
● Mitigación: Realizar un seguimiento riguroso del progreso del proyecto, identificar
obstáculos tempranamente y ajustar el plan si es necesario. Tener un margen de
tiempo en el cronograma para posibles retrasos.
Riesgo 10: Falta de aceptación de las partes interesadas
● Descripción: Las partes interesadas, como la administración del Tecnológico de
Antioquia, pueden no estar satisfechas con el resultado final del proyecto.
● Fase: Fase de Implementación y Operación.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Gerente de proyecto y equipo de comunicación.
● Mitigación: Mantener una comunicación constante con las partes interesadas,
involucrarlas en el proceso y recopilar sus comentarios y expectativas desde el
principio del proyecto.
Riesgo 11: Fallos en la integración con sistemas existentes
● Descripción: Integrar el nuevo sistema con sistemas existentes (por ejemplo,
sistemas de gestión académica) puede resultar en problemas técnicos,
incompatibilidades o pérdida de datos.
● Fase: Fase de Implementación.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Equipo de Integración de Sistemas.
● Mitigación: Realizar pruebas exhaustivas de integración antes de la
implementación. Realizar copias de seguridad de datos críticos antes de la
integración.
Riesgo 12: Cambio de personal clave
● Descripción: La partida de miembros clave del equipo de proyecto o del personal
técnico durante el desarrollo podría afectar negativamente el proyecto.
● Fase: Durante todo el proyecto.
● Nivel de Riesgo: Moderado.
● Impacto: Moderado.
● Responsable: Gerente de proyecto y Departamento de Recursos Humanos.
● Mitigación: Mantener registros actualizados de los roles y responsabilidades.
Proporcionar capacitación cruzada para el personal clave y planificar de manera
proactiva la contingencia.
Riesgo 13: Requisitos mal definidos o cambiantes
● Descripción: Los requisitos pueden estar mal definidos inicialmente o cambiar a lo
largo del proyecto, lo que podría generar confusión y retrabajo.
● Fase: Durante todo el proyecto.
● Nivel de Riesgo: Moderado.
● Impacto: Alto.
● Responsable: Equipo de proyecto y Analistas de Sistemas.
● Mitigación: Establecer un proceso sólido de gestión de cambios y requerimientos
que permita revisar y aprobar cualquier cambio en los requisitos.
Riesgo 14: Falta de conocimientos técnicos en el equipo de desarrollo
● Descripción: El equipo de desarrollo puede carecer de habilidades técnicas
necesarias para implementar ciertas funcionalidades.
● Fase: Fase de desarrollo.
● Nivel de Riesgo: Bajo.
● Impacto: Alto.
● Responsable: Gerente de proyecto.
● Mitigación: Proporcionar capacitación adicional al equipo de desarrollo si es
necesario o considerar la contratación de personal con las habilidades requeridas.
Riesgo 15: Pérdida de datos críticos
● Descripción: Puede ocurrir la pérdida de datos críticos debido a errores humanos,
fallos técnicos o desastres naturales.
● Fase: Fase de operación.
● Nivel de Riesgo: Alto.
● Impacto: Alto.
● Responsable: Equipo de Seguridad de la Información y Administrador del Sistema.
● Mitigación: Implementar copias de seguridad regulares y redundancia de datos.
Planificar y probar la recuperación de desastres.
Diseño Móvil
El usuario entra a la aplicación con sus credenciales (usuario, contraseña). Si alguna de las
dos está incorrecta saldrá una alerta diciendo “Datos incorrectos, vuelve a intentarlo”
Estudiante
Al ingresar al sistema lo primero que verá es su nombre y correo institucional en la parte
superior derecha. al frente estará el botón de salida. En la parte de abajo se verá el título de
“Tareas” al frente estará la cara de [Link] diseño contará con un filtro para buscar
las tareas y abajo de este estará un buscador.
En la parte inferior verá todas las tareas que tiene asignadas, que al seleccionarlas se
expandirá.
Al usuario expandir la tareas podrá ver los datos asociados a esta: nombre de la tarea, el
profesor que la creó, fecha de entrega y la descripción de la tarea. En la parte inferior estará
un campo para agregar comentarios por parte del estudiante. Junto a dos botones: uno que
le permite subir documentos y el otro para enviar la tarea.
Al abrir la carta de notificaciones se desplegará una ventana donde se verá el nombre de la
materia y la descripción de la tarea.
Diseño móvil (usuario: Profesor)
Profesor
Al ingresar al sistema lo primero que verá es su nombre y correo institucional en la parte
superior derecha. al frente estará el botón de salida. En la parte de abajo se verá el título de
“asignaturas”. El diseño contará con un filtro para buscar las asignaturas y abajo de este
estará un buscador.
En la parte inferior verán todas asignaturas que tiene en el semestre que tienen el nombre
de la asignatura y grupo, que al seleccionarlas se expandirá. Viendo en la parte superior un
botón llamado “Asignar Tarea” y en la parte de abajo podrá ver todas las tareas que ha
asignado a ese grupo, con el nombre de la tarea y la fecha de entrega con un botón llamado
“Ver” para ver con más detalle.
Al seleccionar el botón “Asignar Tarea” se despliega una ventana en las cual el profesor
deberá ingresar: nombre de la tarea, fecha de entrega, descripción, si lo desea puede subir
un documento mediante un botón en forma de nueve. Al final contará con un botón para
confirmar la acción y subir la tarea.
Al darle clic al botón “Ver” se despliega la tarea y se podrá ver todos los estudiantes que
han entregado la tarea. Al desplegar al estudiante podrán ver el nombre y correo, los
comentarios que dejó el estudiante, un campo para asignar la nota y al frente un botón para
descargar el documento que dejó el estudiante. en la parte inferior el botón para guardar la
nota
Una vez que el profesor califique la tarea le saldrá un moal con una alerta indicando que la
calificación se realizó exitosamente. En la parte de abajo hay un botón para aceptar.
Estructura de código
1. Sign in
Frontend y backend
import React, { useState } from 'react';
import { View, Text, Image, StyleSheet } from 'react-native';
import { TextInput, Button } from 'react-native-paper';
import firebase from './firebaseConfig'; // Importa la configuración de
Firebase
const LoginScreen = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const handleSignIn = async () => {
try {
await [Link]().signInWithEmailAndPassword(email,
password);
// El usuario ha iniciado sesión correctamente
// Puedes redirigirlo a la pantalla principal de la aplicación
} catch (error) {
[Link]('Error de inicio de sesión:', error);
// Manejar el error, por ejemplo, mostrar un mensaje al usuario
}
};
return (
<View style={[Link]}>
<Image source={require('./[Link]')} style={[Link]} />
<TextInput
label="Email"
mode="outlined"
style={[Link]}
value={email}
onChangeText={(text) => setEmail(text)}
/>
<TextInput
label="Contraseña"
secureTextEntry
mode="outlined"
style={[Link]}
value={password}
onChangeText={(text) => setPassword(text)}
/>
<Button mode="contained" style={[Link]}
onPress={handleSignIn}>
Sign In
</Button>
<Text style={[Link]}>¿Olvidaste tu
contraseña?</Text>
</View>
);
};
const styles = [Link]({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
padding: 16,
},
logo: {
width: 120,
height: 120,
marginBottom: 20,
},
input: {
width: '100%',
marginBottom: 10,
},
loginButton: {
width: '100%',
marginTop: 10,
},
forgotPassword: {
marginTop: 20,
color: 'blue', // Puedes cambiar el color según tus preferencias.
},
});
export default LoginScreen;
Conexión a Base de Datos
import * as firebase from 'firebase';
const firebaseConfig = {
apiKey: 'TU_API_KEY',
authDomain: 'TU_DOMINIO.[Link]',
databaseURL: '[Link]
projectId: 'TU_PROYECTO_ID',
storageBucket: 'TU_BUCKET.[Link]',
messagingSenderId: 'TU_MENSAJERIA_ID',
appId: 'TU_APP_ID',
};
if (![Link]) {
[Link](firebaseConfig);
}
export default firebase;
2. Home Estidiante
● Componente Tareas
import React from 'react';
import { Card, Title, Paragraph } from 'react-native-paper';
const TaskCard = ({ task }) => (
<Card>
<[Link]>
<Title>{[Link]}</Title>
<Paragraph>{[Link]}</Paragraph>
<Paragraph>Fecha: {[Link]}</Paragraph>
</[Link]>
</Card>
);
export default TaskCard;
Front and back
// [Link]
import React, { useEffect, useState } from 'react';
import { View, Image, StyleSheet } from 'react-native';
import { Avatar, Button, Title, TextInput } from 'react-native-paper';
import firebase from './firebaseConfig';
import TaskCard from './TaskCard';
const HomeScreen = () => {
const [tasks, setTasks] = useState([]);
useEffect(() => {
const fetchTasks = async () => {
try {
const tasksSnapshot = await
[Link]().collection('tasks').get();
const tasksData = [Link](doc => ({ id: [Link],
...[Link]() }));
setTasks(tasksData);
} catch (error) {
[Link]('Error al obtener las tareas:', error);
}
};
fetchTasks();
}, []);
return (
<View style={[Link]}>
{/* Encabezado */}
<View style={[Link]}>
<[Link] size={80} source={require('./[Link]')} />
<View style={[Link]}>
<Title>Nombre del Estudiante</Title>
<Paragraph>correo@[Link]</Paragraph>
</View>
<Button icon="exit-to-app" onPress={() => [Link]('Salir')}
/>
</View>
{/* Sección de "Tareas" con tarjeta de notificaciones */}
<View style={[Link]}>
<Title>Tareas</Title>
<Card>
<[Link]>
<Title>Notificaciones</Title>
{/* Aquí podrías mostrar las notificaciones */}
</[Link]>
</Card>
</View>
{/* Filtrador por nombres de materias */}
<View style={[Link]}>
<TextInput label="Filtrar por materia" mode="outlined" />
</View>
{/* Buscador */}
<View style={[Link]}>
<TextInput label="Buscar tarea" mode="outlined" />
</View>
{/* Lista de tareas */}
<View style={[Link]}>
<Title>Todas las Tareas</Title>
{[Link](task => <TaskCard key={[Link]} task={task} />)}
</View>
</View>
{/* Modal de notificación */}
<Portal>
<Modal visible={modalVisible} onDismiss={handleCloseModal}
contentContainerStyle={[Link]}>
<Text
style={[Link]}>{selectedNotification?.subject}</Text>
<Text
style={[Link]}>{selectedNotification?.description}</Text>
<Button onPress={handleCloseModal}
style={[Link]}>
Cerrar
</Button>
</Modal>
</Portal>
);
};
const styles = [Link]({
container: {
flex: 1,
padding: 16,
},
header: {
flexDirection: 'row',
alignItems: 'center',
marginBottom: 16,
},
userInfo: {
marginLeft: 16,
flex: 1,
},
section: {
marginBottom: 16,
},
tasksSection: {
flex: 1,
},
taskCard: {
marginBottom: 8,
},
});
export default HomeScreen;
3. Tareas
import React, { useState, useEffect } from 'react';
import { Card, Title, Paragraph, Button, StyleSheet } from
'react-native-paper';
import CommentSection from './CommentSection';
import UploadTaskButton from './UploadTaskButton';
import firebase from './firebaseConfig';
const TaskCard = ({ task }) => {
const [expanded, setExpanded] = useState(false);
const handleToggleExpand = () => {
setExpanded(!expanded);
};
const fetchDataFromFirebase = async () => {
try {
const snapshot = await
[Link]().ref(`/tasks/${[Link]}`).once('value');
const taskData = [Link]();
// Hacer algo con los datos obtenidos, por ejemplo,
[Link](taskData)
} catch (error) {
[Link]('Error fetching data from Firebase', error);
}
};
useEffect(() => {
fetchDataFromFirebase();
}, []);
return (
<Card style={[[Link], { marginBottom: 8 }]}>
<[Link] style={[Link]}>
<Title>{[Link]}</Title>
<Paragraph>{[Link]}</Paragraph>
<Button onPress={handleToggleExpand}
style={[Link]}>
{expanded ? 'Ver menos' : 'Ver más'}
</Button>
{expanded && (
<>
<Paragraph>Profesor: {[Link]}</Paragraph>
<Paragraph>Fecha de entrega: {[Link]}</Paragraph>
<Paragraph>Descripción: {[Link]}</Paragraph>
{/* Sección de comentarios */}
<CommentSection taskId={[Link]} />
{/* Botones para subir documentos y enviar tarea */}
<UploadTaskButton taskId={[Link]} />
<Button mode="contained" onPress={() => [Link]('Enviar
tarea')} style={[Link]}>
Enviar Tarea
</Button>
</>
)}
{/* Modal de notificación */}
<Portal>
<Modal visible={modalVisible} onDismiss={handleCloseModal}
contentContainerStyle={[Link]}>
<Text
style={[Link]}>{selectedNotification?.subject}</Text>
<Text
style={[Link]}>{selectedNotification?.description}</Text>
<Button onPress={handleCloseModal}
style={[Link]}>
Cerrar
</Button>
</Modal>
</Portal>
</[Link]>
</Card>
);
};
const styles = [Link]({
taskCard: {
marginBottom: 8,
backgroundColor: '#00FF00', // Verde claro para la tarjeta de tarea
},
taskCardContent: {
backgroundColor: '#FFFFFF', // Fondo blanco para el contenido de la
tarjeta de tarea
},
expandButton: {
color: '#000000', // Texto negro para el botón de expansión
},
commentSection: {
marginVertical: 10,
},
commentInput: {
marginBottom: 10,
},
comment: {
marginVertical: 5,
},
uploadButton: {
marginVertical: 10,
backgroundColor: '#006400',
},
});
export default TaskCard;
● Componente comentarios
// [Link]
import React, { useState } from 'react';
import { View, TextInput, Button } from 'react-native-paper';
const CommentSection = ({ taskId }) => {
const [comment, setComment] = useState('');
const [comments, setComments] = useState([]);
const handleAddComment = () => {
setComments([...comments, comment]);
setComment('');
};
return (
<View style={{ marginVertical: 10 }}>
<TextInput
label="Agregar comentario"
value={comment}
onChangeText={text => setComment(text)}
multiline
/>
<Button onPress={handleAddComment}>Agregar Comentario</Button>
{/* Mostrar comentarios existentes */}
{[Link]((c, index) => (
<View key={index} style={{ marginVertical: 5 }}>
<Paragraph>{c}</Paragraph>
</View>
))}
</View>
);
};
export default CommentSection;
● Componente del botón
// [Link]
import React from 'react';
import { Button } from 'react-native-paper';
const UploadTaskButton = ({ taskId }) => {
const handleUpload = () => {
// Lógica para subir documentos asociados a la tarea
[Link]('Subir documentos para la tarea:', taskId);
};
return <Button onPress={handleUpload}>Subir Documentos</Button>;
};
export default UploadTaskButton;
4. Notificaciones
// [Link]
import React from 'react';
import { TouchableOpacity, Text, StyleSheet } from 'react-native';
const Notification = ({ subject, description, onPress }) => {
return (
<TouchableOpacity onPress={onPress} style={[Link]}>
<Text style={[Link]}>{subject}</Text>
</TouchableOpacity>
);
};
const styles = [Link]({
notification: {
backgroundColor: '#FFFFFF',
padding: 10,
marginVertical: 5,
borderRadius: 5,
},
notificationText: {
color: '#000000',
fontSize: 16,
},
});
export default Notification;
5. Home Profesor
● Componente asignatura
import React from 'react';
import { Card, Title, Paragraph } from 'react-native-paper';
const AsigCard = ({ task }) => (
<Card>
<[Link]>
<Title>{[Link]}</Title>
<Paragraph>{[Link]}</Paragraph>
<Paragraph>Fecha: {[Link]}</Paragraph>
</[Link]>
</Card>
);
export default AsigkCard;
Front and back
// [Link]
import React, { useEffect, useState } from 'react';
import { View, Image, StyleSheet } from 'react-native';
import { Avatar, Button, Title, TextInput } from 'react-native-paper';
import firebase from './firebaseConfig';
import TaskCard from './AsigCard';
const HomeScreen = () => {
const [tasks, setTasks] = useState([]);
useEffect(() => {
const fetchTasks = async () => {
try {
const tasksSnapshot = await
[Link]().collection('tasks').get();
const tasksData = [Link](doc => ({ id: [Link],
...[Link]() }));
setTasks(tasksData);
} catch (error) {
[Link]('Error al obtener las tareas:', error);
}
};
fetchTasks();
}, []);
return (
<View style={[Link]}>
{/* Encabezado */}
<View style={[Link]}>
<[Link] size={80} source={require('./[Link]')} />
<View style={[Link]}>
<Title>Nombre del Estudiante</Title>
<Paragraph>correo@[Link]</Paragraph>
</View>
<Button icon="exit-to-app" onPress={() => [Link]('Salir')}
/>
</View>
{/* Sección de "Tareas" con tarjeta de notificaciones */}
<View style={[Link]}>
<Title>Tareas</Title>
<Card>
<[Link]>
<Title>Notificaciones</Title>
{/* Aquí podrías mostrar las notificaciones */}
</[Link]>
</Card>
</View>
{/* Filtrador por nombres de materias */}
<View style={[Link]}>
<TextInput label="Filtrar por materia" mode="outlined" />
</View>
{/* Buscador */}
<View style={[Link]}>
<TextInput label="Buscar tarea" mode="outlined" />
</View>
{/* Lista de tareas */}
<View style={[Link]}>
<Title>Todas las Tareas</Title>
{[Link](task => <TaskCard key={[Link]} task={task} />)}
</View>
</View>
{/* Modal de notificación */}
<Portal>
<Modal visible={modalVisible} onDismiss={handleCloseModal}
contentContainerStyle={[Link]}>
<Text
style={[Link]}>{selectedNotification?.subject}</Text>
<Text
style={[Link]}>{selectedNotification?.description}</Text>
<Button onPress={handleCloseModal}
style={[Link]}>
Cerrar
</Button>
</Modal>
</Portal>
);
};
const styles = [Link]({
container: {
flex: 1,
padding: 16,
},
header: {
flexDirection: 'row',
alignItems: 'center',
marginBottom: 16,
},
userInfo: {
marginLeft: 16,
flex: 1,
},
section: {
marginBottom: 16,
},
tasksSection: {
flex: 1,
},
taskCard: {
marginBottom: 8,
},
});
export default HomeScreen;
6. Asignatura Profesor
import React, { useState, useEffect } from 'react';
import { Card, Title, Paragraph, Button, StyleSheet } from
'react-native-paper';
import CommentSection from './CommentSection';
import UploadTaskButton from './UploadTaskButton';
import firebase from './firebaseConfig';
const AsigCard = ({ task }) => {
const [expanded, setExpanded] = useState(false);
const handleToggleExpand = () => {
setExpanded(!expanded);
};
const fetchDataFromFirebase = async () => {
try {
const snapshot = await
[Link]().ref(`/tasks/${[Link]}`).once('value');
const taskData = [Link]();
// Hacer algo con los datos obtenidos, por ejemplo,
[Link](taskData)
} catch (error) {
[Link]('Error fetching data from Firebase', error);
}
};
useEffect(() => {
fetchDataFromFirebase();
}, []);
return (
<Card style={[[Link], { marginBottom: 8 }]}>
<[Link] style={[Link]}>
<Title>{[Link]}</Title>
<Paragraph>{[Link]}</Paragraph>
<Button onPress={handleToggleExpand}
style={[Link]}>
{expanded ? 'Ver menos' : 'Ver más'}
</Button>
{expanded && (
<>
<Paragraph>Profesor: {[Link]}</Paragraph>
<Paragraph>Fecha de entrega: {[Link]}</Paragraph>
<Paragraph>Descripción: {[Link]}</Paragraph>
{/* Sección de comentarios */}
<CommentSection taskId={[Link]} />
{/* Botones para subir documentos y enviar tarea */}
<UploadTaskButton taskId={[Link]} />
<Button mode="contained" onPress={() => [Link]('Enviar
tarea')} style={[Link]}>
Enviar Tarea
</Button>
</>
)}
{/* Modal de notificación */}
<Portal>
<Modal visible={modalVisible} onDismiss={handleCloseModal}
contentContainerStyle={[Link]}>
<Text
style={[Link]}>{selectedNotification?.subject}</Text>
<Text
style={[Link]}>{selectedNotification?.description}</Text>
<Button onPress={handleCloseModal}
style={[Link]}>
Cerrar
</Button>
</Modal>
</Portal>
</[Link]>
</Card>
);
};
const styles = [Link]({
taskCard: {
marginBottom: 8,
backgroundColor: '#00FF00', // Verde claro para la tarjeta de tarea
},
taskCardContent: {
backgroundColor: '#FFFFFF', // Fondo blanco para el contenido de la
tarjeta de tarea
},
expandButton: {
color: '#000000', // Texto negro para el botón de expansión
},
commentSection: {
marginVertical: 10,
},
commentInput: {
marginBottom: 10,
},
comment: {
marginVertical: 5,
},
uploadButton: {
marginVertical: 10,
backgroundColor: '#006400',
},
});
export default TaskCard;
● Componente comentarios
// [Link]
import React, { useState } from 'react';
import { View, TextInput, Button } from 'react-native-paper';
const CommentSection = ({ taskId }) => {
const [comment, setComment] = useState('');
const [comments, setComments] = useState([]);
const handleAddComment = () => {
setComments([...comments, comment]);
setComment('');
};
return (
<View style={{ marginVertical: 10 }}>
<TextInput
label="Agregar comentario"
value={comment}
onChangeText={text => setComment(text)}
multiline
/>
<Button onPress={handleAddComment}>Agregar Comentario</Button>
{/* Mostrar comentarios existentes */}
{[Link]((c, index) => (
<View key={index} style={{ marginVertical: 5 }}>
<Paragraph>{c}</Paragraph>
</View>
))}
</View>
);
};
export default CommentSection;
● Componente del botón
// [Link]
import React from 'react';
import { Button } from 'react-native-paper';
const UploadTaskButton = ({ taskId }) => {
const handleUpload = () => {
// Lógica para subir documentos asociados a la tarea
[Link]('Subir documentos para la tarea:', taskId);
};
return <Button onPress={handleUpload}>Subir Documentos</Button>;
};
export default UploadTaskButton;
Testing
● Prueba de integración: Esta prueba evalúa cómo los diferentes componentes del
sistema se integran entre sí. Es importante asegurarse de que todos los módulos y
funciones del sistema trabajen de manera coherente y sin conflictos.
● Prueba de unidad: Las pruebas de unidad se centran en evaluar el funcionamiento
individual de los componentes más pequeños del sistema, como funciones o
métodos específicos. Esto ayuda a identificar y corregir errores a nivel de código.
● Pruebas funcionales: Estas pruebas se centran en verificar si el sistema cumple
con los requisitos funcionales especificados en la documentación del proyecto. Se
prueban todas las funciones y características del sistema para garantizar que
funcionen según lo previsto.
● Prueba de caja negra: En esta prueba, se evalúa el sistema sin conocer su
estructura interna. Los evaluadores se centran en verificar que las entradas generen
las salidas esperadas y que todas las funciones y características sean coherentes
con los requisitos.
● Prueba de rendimiento: Esta prueba evalúa el rendimiento del sistema, como la
velocidad de carga de las páginas, la capacidad de respuesta y la capacidad de
manejar múltiples usuarios concurrentes. Se busca asegurar que el sistema funcione
de manera eficiente incluso en momentos de alta demanda.
● Prueba de regresión: Las pruebas de regresión se realizan después de las
actualizaciones o cambios en el sistema para asegurarse de que las modificaciones
no hayan introducido nuevos errores o afectado negativamente las funciones
existentes.
● Prueba de estrés: Esta prueba evalúa cómo el sistema responde bajo una carga
excesiva o condiciones extremas. Se busca determinar los límites de capacidad del
sistema y asegurarse de que pueda manejar situaciones de estrés sin errores
críticos.
Soporte y Mantenimiento:
Soporte:
● Actualizaciones y parches: Distribuir y aplicar actualizaciones de software,
parches y correcciones de errores a medida que surgen, para mantener el
sistema seguro y libre de problemas.
● Mantenimiento programado: Programar mantenimientos periódicos y
actualizaciones planificadas para minimizar el tiempo de inactividad y
garantizar un rendimiento óptimo.
● Soporte de usuario: Ayudar a los usuarios con preguntas relacionadas con
el uso del sistema, como problemas de inicio de sesión, navegación o
cualquier otro problema funcional.
● Evaluación y retroalimentación: Recopilar retroalimentación de los
usuarios para identificar áreas de mejora y realizar ajustes en el sistema
según sea necesario.
● Documentación de soporte: Proporcionar documentación detallada, guías
de usuario y recursos de capacitación para ayudar a los usuarios a
aprovechar al máximo el sistema.
1. Mantenimiento Preventivo:
● Actualizaciones regulares: Se deben programar actualizaciones periódicas
del sistema para incorporar nuevas características, mejorar la seguridad y
mantener la compatibilidad con las últimas tecnologías y navegadores.
● Respaldo de datos: Realizar copias de seguridad regulares de la base de
datos del sistema y de otros datos críticos para garantizar la recuperación en
caso de fallos.
● Evaluación de rendimiento: Monitorear el rendimiento del sistema para
identificar posibles cuellos de botella y realizar ajustes para mantener un
rendimiento óptimo.
● Pruebas de seguridad: Realizar pruebas de seguridad periódicas para
identificar y corregir vulnerabilidades y proteger los datos de usuarios y
profesores.
● Capacitación continua: Proporcionar capacitación continua a los usuarios y al
personal de soporte para asegurarse de que estén al tanto de las últimas
características y funcionalidades del sistema.
2. Mantenimiento Correctivo:
● Solución de errores: Atender y solucionar los errores y problemas que los
usuarios reporten, así como los identificados internamente.
● Actualización de seguridad: Corregir vulnerabilidades de seguridad tan pronto
como se detecten y emitir parches de seguridad según sea necesario.
● Solución de problemas de rendimiento: Abordar problemas de rendimiento
que puedan surgir, como tiempos de carga lentos o caídas del sistema.
3. Mantenimiento Predictivo:
● Análisis de datos: Utilizar herramientas de análisis para monitorear y analizar
el comportamiento del sistema y los patrones de uso, identificando
tendencias y problemas potenciales.
● Planificación a largo plazo: Basándose en el análisis de datos, planificar
actualizaciones y mejoras a largo plazo para mantener el sistema relevante y
efectivo.
● Investigación de tecnología emergente: Mantenerse al tanto de las
tecnologías emergentes y las mejores prácticas en desarrollo web y móvil
para anticipar y adaptarse a las tendencias del mercado.