Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 1
o Características de transición:
- Interoperabilidad: intercambio de info con otras apps.
- Reutilización: cambio de propósito con modificaciones del software.
- Portabilidad: accesible desde diversos equipos.
o Características de revisión:
- Capacidad de mantenimiento: para corregir problemas futuros.
- Flexibilidad: poder ser modificado por desarrolladores.
- Extensibilidad: fácil de mejorar.
- Escalabilidad: fácil de actualizar.
- Modularidad: compuesto por módulos independientes.
- Capacidad de prueba: la prueba del software debe ser fácil.
La ingeniería del software es una metodología que representa el camino para desarrollar software de
manera sistemática.
Reúsa elementos, estandariza la organización, aplica procesos sistemáticamente, acelera y
profesionaliza el desarrollo.
En los años 70 empezó el Desarrollo Estructurado, en los 80 el Desarrollo orientado a Objetos, en los
90 las metodologías ágiles y en los 2000 se consolidaron estas últimas.
Modelo de construcción de Prototipos
• Ventajas
- Ayuda a identificar los requisitos
- Agrada tanto a los clientes como a los desarrolladores
• Inconvenientes
- El cliente considera al prototipo como el producto final, listo para usar.
- La calidad del software o la factibilidad de mantenimiento no se tienen en cuenta
- El desarrollador a menudo hace compromisos de implementación
Modelo Incremental
Modelo en espiral
• Crystal: metodologías en las que el tamaño del equipo (por colores) indica el método a utilizar.
• Dynamic Systems Development Method (DSDM): Iterativo e incremental. Trabajo con el
usuario.
5 fases:
- Estudio de viabilidad
- Estudio del negocio
- Modelo functional
- Diseño y construcción
- Implementación
Gestión predictiva
La gestión predictiva tiene como objetivo construir el producto planificado en el tiempo y con los
costes previstos. “La Forma más eficiente de hacer un trabajo, es hacerlo bien a la primera”.
Inconvenientes:
• Los proyectos reales rara vez siguen el flujo secuencial
• Es difícil establecer explícitamente al principio todos los requisitos
• Para ver resultados… hay que ser MUY pacientes
• Se producen estados de bloqueo
Gestión ágil
“Un buen plan ejecutado contundentemente hoy, es mejor que un plan perfecto ejecutado dentro de
un mes” - George Patton
Se valora el Producto mínimo viable.
El éxito depende del conocimiento y la experiencia de las personas y de la comunicación y
compromiso con el cliente.
Historias de usuario:
- Yo como <rol>
- Deseo <funcionalidad>
- Para <valor de negocio>
Las historias de usuario se usan para capturar la esencia del valor de negocio de un sistema usando
lenguaje cotidiano.
Deben cumplir INVEST : Independiente, Negociable, Valiosa, Estimable, Pequeña, Testeable.
Y seguir el formato CCC: Card Conversation Confirmation.
La historia solo define QUÉ haremos, no CÓMO lo haremos.
En el caso ideal, una historia de usuario requiere solo una tarea.
Los criterios de aceptación son descripciones explícitas que demostrarán cuando una historia de
usuario está finalizada.
- Dado <escenario>
- Cuando <acción>
- Entonces <respuesta>
Product Backlog:
Es un artefacto.
Debe cumplir DEEP: Detallada y Estimada apropiadamente, Emergente y Priorizada por necesidades.
La prioridad puede ser asignada numéricamente o con la técnica MoSCoW (must, should, could,
won’t)
No debemos crear historias épicas, sino tener historias cortas, de pequeñas tareas que lleguen al
mismo objetivo.
Sprint
NO es un artefacto, es un evento, de unas semanas de duración que pretende entregar algo que
funcione.
El Sprint está compuesto por una serie de historias de usuario que tendremos como objetivo para
completar y obtener un incremento.
Podemos hacer uso de tablones de trabajo para facilitar la organización.
Incremento
Es un artefacto.
Es el resultado de un sprint, así que debe estar completamente terminado, probado y usable.
Cada iteración debería implicar un incremento y requiere la validación del cliente.
Mapeo de Historias:
Roles:
- Usuarios (Implicado)
- Inversores (Implicado)
- Scrum Master (Comprometido, Scrum Team)
- Equipo de desarrollo (Comprometido, Scrum Team)
- Product Owner (Comprometido, Scrum Team)
• Product Owner:
- Es el Puente entre los comprometidos y los implicados. Representa al cliente.
Identifica las necesidades del cliente, conoce el entorno de negocio y toma decisiones
de producto por el cliente. Establece las prioridades.
- Es responsable del producto, de la pila, de la toma de decisiones, de las prioridades y
de la visión del producto. Evalúa el incremento.
- Es responsable económico (financiación, presupuesto, etc).
• Scrum Master:
- Asesora al product Owner y comunica de eventos durante el sprint.
- Intermedia entre el equipo y el cliente, vigila la metodología, modera las reuniones,
aprende y enseña.
- Resuelve los conflictos que el equipo no puede, fortalece el trabajo en equipo y lo
dirige.
• Equipo de Desarrollo:
- De 3 a 9 personas, para ser funcional y ágil.
- Son los responsables del desarrollo y están autoorganizados.
- Para cada sprint, eligen las historias a realizar, organizan las tareas. El Product Owner
no interfiere durante el Sprint.
- Se evita que sean especialistas, la dependencia externa y se confían en las
capacidades de cada uno, preguntando si es necesario.
- Responden como equipo y comparte lugar de trabajo.
Eventos
Son el sprint, el ciclo de trabajo/scrum diario, el final del sprint y su revisión y retrospectiva.
Planificación del Sprint:
• ¿Están claros y accesibles los recursos?
• ¿Hay una pila de producto priorizada? Priorizarla
• ¿El equipo conoce las tecnologías empleadas y el valor de negocio?
• ¿Disponibilidad del equipo?
• ¿Cuánto va a durar el Sprint?
• ¿Continúan las mismas condiciones de negocio y ambiente tecnológico?
• Asistentes: Product Owner, Equipo y Scrum Master.
Scrum Diario:
Reunión de 15 min, de pie, moderada por el líder del proyecto donde se mira el trabajo realizado el día
anterior, el trabajo a realizar ese día y sus necesidades.
La duración de la reunión es proporcional a la del sprint, cuanto más largo el sprint, más larga la
reunión (~4 horas/1 mes).
Retrospectiva de Sprint:
Evaluación de qué ha ido bien y mal en el sprint para aprender de ello.
~3 horas / 1 mes.
2.5 Control de versiones
La Head es un puntero que apunta al último commit de la rama actual. Si la rama a la que apunta no
es la master, es una Detached head.
El .gitignore es un fichero en el que puedes indicar que tipo de archivos quieres ignorar mediante
símbolos.
• Init: Inicializa un repositorio .git en el directorio indicado, contienes sus metadatos y crea un
head.
• Add: añade el fichero que se le indique al staging area
• Status: muestra el estado el repositorio, el último commit y las odificaciones pendientes de
enviar al repositorio.
• Reset: Deshace cambios. Se puede invocar para Head, para el índice de staging o en el
directorio de trabajo. Esencialmente, vuelve al commit anterior.
• Revert: crea un nuevo commit que contiene un estado previo del proyecto. De esta manera, no
afecta a los commits previos y el historial.
• Commit: Añade los cambios del staging área al repositorio. Usando -m podemos añadir un
comentario al commit. Si quieres añadir o corregir un comentario al último commit, usa --
amend.
• Rm: Elimina ficheros del repositorio del staging.
• Checkout: Se usa para cambiar entre ramas.
• Branch: Crea (<rama>), lista, y borra (-d o -D + <rama>) ramas.
• Merge: Combina 2 ramas y sus commits. Existen conflictos si hay ediciones de un mismo
trabajo en distintas ramas al hacer el merge.
• Remote add origin: relaciona un repositorio local con uno remoto.
• Clone: clona el repositorio en otro directorio.
• Pull: Obtiene el contenido de un repositorio remoto y lo integra en el local.
• Push: Publica el contenido del repositorio local en uno remoto.
• Log: Examina el historial. Tiene diversos parámetros para personalizar el resultado de la
búsqueda.
• Tag: referencias a puntos en un histórico.
• Blame: Muestra principalmente el autor de los últimos cambios.
• Clean: deshace cambios del directorio de trabajo.
• Request: envía una solicitud de incorporación de cambios en caso de colaboraciones.
2.6 Estrategias de gestión visual
En los proyectos TIC, los MUDAs habituales son la burocracia, la sobreproducción, el multiproyecto,
las esperas, los desajustes de capacidad y los bugs.
KANBAN
Es una tarjeta con órdenes que indican cómo debe hacerse el trabajo.
Para trabajar con Kanban, usualmente usamos tableros de tareas, con trabajo pendiente, en curso
(limitado) y terminado.
Work In process son las tareas máximas que se hacen simultáneamente.
Work in progress es el trabajo que se está realizando.
Hay que limitar correctamente el WIP para evitar gente ociosa, falta de productividad, exceso de
demanda, más tiempo de respuesta, etc.
Los Sistemas de flujo continuo no usan sprints para empaquetar tareas.
SCRUMBAN:
- Establecer periodos de entrega.
- Cálculo de velocidades.
- Comunicación ágil.
- Usar los roles que plantea SCRUM.
- Añadir el concepto de WIP a nuestro tablón de SCRUM.
- Utilizar la pila de producto.
- Plantearnos si nos interesa la pila de Sprints.
Leyes de Parkinson:
• "El trabajo se expande hasta llenar el tiempo de que se dispone para su realización".
• "Los gastos aumentan hasta cubrir todos los ingresos".
• "El tiempo dedicado a cualquier tema de la agenda es inversamente proporcional a su importancia"
(Parkinson la llamaba ley de la trivialidad).
2.5 Docker
Docker es un proyecto open source que permite empaquetar, transportar y ejecutar cualquier
aplicación como un contenido ligero. Es un sistema de virtualización que crea una capa de
abstracción con el SO.
El contexto de ejecución de la aplicación es un contenedor compuesto por un sistema de ficheros
con dependencias aisladas del SO, pero usando su kernel.
- Docker file
- Docker Image
- Docker container
- Demonio
- Persistencia de datos
Dockerfile: Archivo de texto que mediante comandos, le dice a Docker cómo construir una imagen.
Image: son plantillas que contienen todo lo necesario para ejecutar una aplicación. Cada instrucción
de la file es una capa, de esta manera, si hay un error, solo afectará a partir de la capa afectada.
Contenedor: encapsula el contenido de la imagen. Se ejecutan de manera aislada, cada uno con su
sistema independiente de archivos, y son portables.
Persistencia de datos: Si al eliminar un contenedor, queremos conservar su sistema de archivos,
podemos usar un bind mount (carpeta montada compartida con el anfitrión) o un volumen (carpeta
de almacenamiento exclusiva para contenedores).
Para el uso de Docker conviene usar DockerHub, para los tipos de aplicaciones, Docker CLI para la
interfaz de comandos y Docker Desktop por comodidad.
Aplicaciones Multi-contenedor
Docker Networks: Comunica contenedores para que trabajen juntos igual que en una red real, con
IPs y puertos.
Docker Compose: Herramienta para definir y gestionar aplicaciones multi-contedor, usando archivos
de configuración YAML.
Pila de enfoque:
Los criterios de evaluación de las HU deben seguir el modelo:
• Título
• Narrativa:
- <rol>
- <efecto>
- <propósito/beneficio>
Gherkin:
Escenarios:
• Dado <escenario>
• Cuando <acción>
• Entonces <resultado>
Así, siguiendo la pila de enfoque se van construyendo pruebas en BDD, que es básicamente como
código. La herramienta más destacada es Cucumber.
DevOps
Prácticas de desarrollo de software y operaciones TI coordinadas que pretenden acortar el ciclo de
desarrollo y proporcionar entregas de alta calidad.
Es complementaria al desarrollo ágil (Agile DevOps).
Su objetivo es comercializar antes y adaptarse al mercado, manteniendo estabilidad y mejorando el
tiempo de recuperación de errores.
Integración y entrega continua
Es el proceso de compilar y probar código mediante pruebas automáticas con cada commit (control
de versiones).
Los sistemas generan artefactos implementables, incluida la infraestructura y las aplicaciones.
3 Clean Code
Code Smells es el término que usamos para aquellos síntomas que indican que algo no se está
haciendo de forma correcta en el código.
La deuda técnica es la producida por solucionar las cosas rápido y no bien, lo que tendrá
consecuencias en el futuro.
En consecuencia, habrá menos tiempo para nuevas funcionalidades por invertirlo en correcciones.
La falta de documentación ES deuda técnica.
Principios SOLID:
• Single responsability: cada parte hace una cosa, el código es limpio y enfocado.
• Open/closed: cada parte debe estar abierta a extensiones y cerrada a modificaciones.
• Liskov sustitution: si A es subclase de B, podremos reemplazar B con A.
• Interface segregation: el cliente no debe depender de métodos que no usa.
• Dependency inversión: no deben existir dependencias entre módulos.
Principios básicos:
• Familiaridad: El usuario no debe aprender a usarla. Hay que usar estructuras y objetos
familiares.
• Consistencia: activación similar de operaciones similares, mismo formato en menús y uso de
comandos clásicos.
• Minimizar la sorpresa: El sistema no debe tener cambios bruscos y debe haber indicadores
visuales.
• Recuperación: seguridad en operaciones destructivas, opción de deshacer y checkpoints.
• Asistencia al usuario: feedback de errores, ayudas informáticas y de uso.
• Diversidad de usuarios: interfaz intuitiva, con atajos y adaptada a discapacidades.
La información debe estar claramente distribuida, simple y cómoda a la vista. Hay que cuidar la
posición y apariencia de los botones.
Las funcionalidades deben ser claras y los errores deben ser informados de forma concisa y
específica.
- Innovador
- Útil
- Estético
- Comprensible
- Discreto
- Honesto
- Duradero
- Consecuente
- Respetuoso
- Minimalista
Otras cualidades:
- Ético
- Eficaz
- Pragmático
- Elegante
De Don Norman:
- Visibilidad: de ella depende que un objeto sea percibido y entendido.
- Retroalimentación: las acciones deben tener una reacción (auditiva, verbal, táctil, etc).
- Viabilidad: el propósito de los elementos de ser claro.
- Restricciones: limitar las opciones disponibles al usuario.
- Mapeo: localización correcta de los elementos.
- Consistencia: los elementos deben seguir un mismo estándar/modelo/guía.
- Confirmación: en las operaciones críticas.
De Niesel and Molich:
- Consistencia y estándares
- Visibilidad del estado
- Encaje entre el sistema y el mundo
- Control de usuario
- Prevención y recuperación de errores
- Reconocimiento sobre memoria
- Flexibilidad y eficacia de uso
- Estética y diseño mínimo.
- Documentación y ayuda.
Color
Aporta atención, memoria, significa y reconocimiento.
Es lo más influyente entre los factores visuales y ante la elección de producto.
El color afecta a la psicología, por eso hay que tener en cuenta su combinación y su armonía
mediante monocromía, colores complementarios (opuestos), análogos (vecinos). Pero hay que tener
cuidado con los colores potentes, saturados y oponentes.
Proceso de diseño:
1. Boceto, define ideas y concepto.
2. Maqueta, presentación + profesional de ideas.
3. Implementación a partir de maquetas y herramientas.