Aspecto Ingeniería de Sistemas Ingeniería de Software
Diseña y gestiona sistemas Se especializa en el
Enfoque
complejos (hardware, desarrollo de software
principal
software, redes, procesos). confiable y eficiente.
Más amplio (integra
Más específico (ciclo de
Alcance tecnología, procesos y
vida del software).
personas).
Requisitos, diseño,
Hardware, software,
Component codificación, pruebas y
infraestructura, procesos
es mantenimiento de
empresariales.
software.
Ingeniero de software
Rol Ingeniero de sistemas
(especialista en desarrollo
profesional (visión global de TI).
de aplicaciones).
Diferencias entre ing de software y sistemas(Arriba)
Principios de ing de software
1. Abstracción
o Simplificar problemas complejos dividiéndolos en componentes
manejables.
o Ejemplo: Usar diagramas de clases en UML para modelar sistemas.
2. Modularidad
o Dividir el software en módulos independientes para facilitar el
mantenimiento y la reutilización.
o Ejemplo: Microservicios en arquitecturas modernas.
3. Ocultamiento de información (Encapsulamiento)
o Ocultar detalles internos de un módulo, exponiendo solo interfaces
necesarias.
o Ejemplo: Clases en POO con atributos privados y métodos públicos.
4. Acoplamiento bajo y cohesión alta
o Acoplamiento bajo: Mínima dependencia entre módulos.
o Cohesión alta: Cada módulo debe tener una única responsabilidad
clara.
5. Separación de intereses (SoC - Separation of Concerns)
o Dividir el sistema en partes que se enfoquen en aspectos específicos (ej:
frontend/backend).
Caracteristicas de la ingeniería de software
Características de la Ingeniería de Software
1. Enfoque sistemático y disciplinado
o Uso de metodologías estructuradas (Cascada, Ágil, Espiral).
2. Orientación a la calidad
o Cumplir estándares (ISO 25010) en usabilidad, rendimiento y seguridad.
3. Base en procesos definidos
o Ciclo de vida del software (requisitos, diseño, codificación, pruebas,
mantenimiento).
4. Adaptabilidad a cambios
o Flexibilidad para ajustarse a nuevos requisitos.
5. Enfoque en el usuario final
o Diseño centrado en UX/UI para mejor experiencia.
1. Metodologías Tradicionales (Lineales o
Predictivas)
Definición:
Son enfoques secuenciales y rígidos, donde cada fase debe completarse
antes de pasar a la siguiente. Ideales para proyectos con requisitos bien
definidos y poco cambiantes.
Subtipos:
🔹 Modelo en Cascada (Waterfall)
Características:
o Fases secuenciales: Requisitos → Diseño → Implementación → Pruebas →
Mantenimiento.
o Documentación exhaustiva en cada etapa.
o 🔹 Modelo Espiral (Spiral Model)
Características:
o Combina desarrollo iterativo con análisis de riesgos.
o Cada ciclo incluye: Planificación → Análisis de riesgos → Desarrollo →
Evaluación.
2. Metodologías Ágiles (Iterativas y
Adaptativas)
Definición:
Enfoques flexibles que promueven el desarrollo incremental, la
colaboración con el cliente y la adaptación a cambios.
Subtipos:
🔹 Scrum
Características:
o Trabajo en Sprints (iteraciones cortas, 2-4 semanas).
o Roles: Scrum Master, Product Owner, Equipo de Desarrollo.
o Artefactos: Product Backlog, Sprint Backlog, Incremento.
Ventajas:
o Alta adaptabilidad.
Desventajas:
o Requiere compromiso del equipo.
🔹 Kanban
Características:
o Tablero visual (To Do, In Progress, Done).
o Límite de trabajo en progreso (WIP).
o 🔹 Extreme Programming (XP)
Características:
o Desarrollo basado en pruebas (TDD).
o Programación en parejas (Pair Programming).
o Entregas frecuentes.
Aspecto Metodología Tradicional Metodología Ágil
Secuencial (lineal) – Cada
Iterativo e incremental –
fase debe completarse
Enfoque Desarrollo en ciclos
antes de pasar a la
cortos (Sprints).
siguiente.
Flexibilidad Rígida – Los cambios son Adaptable – Los
costosos y difíciles de requisitos pueden
Aspecto Metodología Tradicional Metodología Ágil
implementar. evolucionar.
Documentació Extensa y detallada desde Justo lo necesario
n el inicio. ("documentación viva").
Entrega del Al final del proyecto Entregas parciales y
Producto (entregable completo). funcionales frecuentes.
Participación Limitada, principalmente al Colaboración constante
del Cliente inicio y al final. (feedback continuo).
Gestión de Reactiva (se identifican Proactiva (se ajusta en
Riesgos tarde). cada iteración).
Ciclo en Metodología Tradicional: ¿Dónde ocurre?
En el modelo tradicional secuencial puro (Cascada), el ciclo solo
existe en:
Fase de Mantenimiento: Si se detectan errores o nuevos requisitos, se
vuelve a la fase de Requisitos, reiniciando el flujo.
Ejemplo:
1. El cliente reporta un bug en producción → Vuelve a Requisitos para
documentarlo.
2. Luego pasa
a Desarrollo (modificaciones), Implementación (parche), Pruebas y
Mantenimiento nuevamente.
Arquitecturas para Aplicaciones Web
1. Monolítica
Definición:
Toda la aplicación (frontend, backend, base de datos) está en un solo
bloque.
Ejemplo: Aplicaciones tradicionales en PHP o Java EE.
✔ Ventajas:
Simple de desarrollar y desplegar.
Ideal para aplicaciones pequeñas.
✖ Desventajas:
Difícil escalar (todo se escala junto).
Mantenimiento complejo a medida que crece.
2. Arquitectura MVC (Modelo-Vista-Controlador)
Definición:
Separa la lógica en 3 capas:
o Modelo (datos y lógica de negocio).
o Vista (interfaz de usuario).
o Controlador (gestión de peticiones).
Ejemplo: Frameworks como Laravel, Django, Ruby on Rails.
✔ Ventajas:
Organización clara del código.
Fácil mantenimiento.
✖ Desventajas:
Puede volverse complejo en aplicaciones grandes.
3. Arquitectura de Microservicios
Definición:
La aplicación se divide en pequeños servicios independientes, cada uno
con su propia base de datos y lógica.
Ejemplo: Netflix, Uber.
✔ Ventajas:
Escalabilidad individual por servicio.
Tecnologías diferentes por servicio (ej: [Link] + Python).
Mayor tolerancia a fallos.
✖ Desventajas:
Complejidad en gestión (orquestación, comunicación).
Mayor consumo de recursos.
4. Arquitectura Serverless (Sin Servidor)
Definición:
El código se ejecuta en funciones temporales (ej: AWS Lambda, Azure
Functions).
No hay gestión de servidores.
✔ Ventajas:
Pago solo por uso.
Escalado automático.
✖ Desventajas:
Limitaciones en ejecución (tiempo máximo, cold starts).
Dependencia del proveedor de nube.
🔹 Arquitecturas para la Nube (Cloud)
1. Arquitectura Cliente-Servidor (Clásica)
Definición:
Frontend (cliente) y Backend (servidor) separados.
Ejemplo: Aplicaciones web tradicionales con API REST.
✔ Ventajas:
Simple y bien entendida.
✖ Desventajas:
El servidor puede ser un cuello de botella.
🔷 1. Requerimientos Funcionales (RF)
Definición: Acciones específicas que el sistema debe realizar.
Ejemplos
Usuario: "El sistema debe permitir iniciar sesión con email y
contraseña."
Sistema: "El sistema debe enviar un correo de confirmación al registrar
un usuario."
Negocio: "El sistema debe aplicar un descuento del 10% en compras
mayores a $100."
🔷 2. Requerimientos No Funcionales (RNF)
Definición: Criterios de calidad, rendimiento y restricciones del
sistema.
Subtipos y Ejemplos
Tipo Ejemplo
Rendimiento "El sistema debe responder en menos de 2 segundos bajo 1,000 usuarios."
"La base de datos debe escalar automáticamente en AWS durante picos de
Escalabilidad
tráfico."
Usabilidad "La interfaz debe ser usable en menos de 5 minutos sin entrenamiento."
Seguridad *"Los datos deben cifrarse en tránsito (TLS 1.2+) y en reposo (AES-256)."*
Disponibilida
"El sistema debe estar operativo 99.99% del tiempo (SLA)."
d
🔷 3. Requerimientos de Usuario
Definición: Necesidades expresadas por los usuarios finales.
Ejemplos
"Como paciente, quiero agendar citas médicas online para evitar filas."
"Como administrador, necesito bloquear usuarios con intentos fallidos
de login."
🔷 4. Requerimientos de Sistema
Definición: Condiciones técnicas que el sistema debe cumplir.
Ejemplos
*"El backend debe usar Python 3.8+ y Django 4.0."*
"La API debe soportar JSON y XML en las respuestas."
🔷 5. Requerimientos de Negocio
Definición: Objetivos empresariales que el sistema debe apoyar.
Ejemplos
"El sistema debe reducir el tiempo de procesamiento de pedidos en un
30%."
"Debe integrarse con SAP para sincronizar inventarios."
🔷 6. Requerimientos de
Seguridad (Subcategoría crítica de RNF)
Definición: Normas para proteger datos y accesos.
Ejemplos
"Autenticación con MFA (Google Authenticator)."
"Auditoría de logs para cumplir con GDPR."
"Protección contra SQL Injection y XSS."
📌 Resumen de Clasificación
Tipo Enfoque Ejemplo
"Registrar usuarios con validación de
Funcionales ¿Qué hace el sistema?
email."
No
¿Cómo lo hace? "Tiempo de respuesta <1s."
Funcionales
Usuario Necesidades humanas "Quiero filtrar productos por color."
Sistema Restricciones técnicas "Compatibilidad con Docker y Kubernetes."
Objetivos
Negocio "Reducir costos operativos en un 20%."
organizacionales
Seguridad Protección de datos "Encriptación end-to-end para chats."
1. Definición de Calidad de Sistemas
La calidad de sistemas se refiere al conjunto de características y
propiedades que determinan si un sistema (software, hardware o
integrado) cumple con los requisitos establecidos y satisface las
necesidades de los usuarios. Implica evaluar aspectos como
funcionalidad, rendimiento, seguridad, usabilidad y mantenibilidad.
2. Atributos de Calidad
Los atributos de calidad son las características medibles que definen la
eficacia de un sistema. Se clasifican en dos categorías principales:
A. Atributos Operacionales (Relacionados con el funcionamiento del
sistema)
1. Rendimiento (Performance)
o Capacidad del sistema para procesar solicitudes en un tiempo aceptable.
o Ejemplo: Un sitio web que carga en menos de 2 segundos.
2. Disponibilidad (Availability)
o Tiempo en que el sistema está operativo y accesible.
o Ejemplo: Un servidor con un uptime del 99.9%.
3. Confiabilidad (Reliability)
o Capacidad del sistema para funcionar sin fallos en un período
determinado.
o Ejemplo: Un sistema bancario que no presenta errores en transacciones.
4. Seguridad (Security)
o Protección contra accesos no autorizados y vulnerabilidades.
o Ejemplo: Un sistema con autenticación de dos factores (2FA).
5. Escalabilidad (Scalability)
o Capacidad de adaptarse a un aumento de carga sin degradar el
rendimiento.
o Ejemplo: Una aplicación que soporta 1 millón de usuarios simultáneos.
B. Atributos de Evolución (Relacionados con el mantenimiento y
adaptación)
6. Mantenibilidad (Maintainability)
o Facilidad para corregir errores y realizar actualizaciones.
o Ejemplo: Un código modular con documentación clara.
7. Portabilidad (Portability)
o Capacidad de migrar el sistema a diferentes entornos.
o Ejemplo: Una aplicación que funciona en Windows, Linux y macOS.
8. Reusabilidad (Reusability)
o Posibilidad de reutilizar componentes en otros proyectos.
o Ejemplo: Librerías de código abierto como React o TensorFlow.
9. Interoperabilidad (Interoperability)
o Capacidad de interactuar con otros sistemas.
o Ejemplo: Un API REST que se integra con múltiples plataformas.
3. Parámetros de Calidad (Métricas para
Evaluar Atributos)
Los parámetros son indicadores cuantificables que miden los atributos
de calidad:
Atributo Parámetro (Métrica) Ejemplo de Medición
Rendimiento Tiempo de respuesta (ms) 200 ms por solicitud
Disponibilidad Tiempo de actividad (uptime %) 99.95% en un mes
Tasa de fallos (MTBF - Mean Time
Confiabilidad 500 horas sin fallos
Between Failures)
0 vulnerabilidades en el
Seguridad Número de vulnerabilidades críticas
último scan
Puntaje de 20 (baja
Mantenibilidad Complejidad ciclomática del código
complejidad)
Número de usuarios concurrentes
Escalabilidad 10,000 usuarios simultáneos
soportados
4. Ejemplos Prácticos
Sistema de E-commerce (Ej: Amazon)
o Rendimiento: Páginas que cargan en menos de 1.5 segundos.
o Disponibilidad: 99.99% uptime incluso en temporadas altas.
o Seguridad: Encriptación SSL y protección antifraude.
Aplicación Móvil (Ej: WhatsApp)
o Confiabilidad: Mensajes entregados sin pérdida de datos.
o Interoperabilidad: Funciona en iOS, Android y navegadores web