Arquitectura de Software: El Proceso de Desarrollo de Software Etapas Del Proceso
Arquitectura de Software: El Proceso de Desarrollo de Software Etapas Del Proceso
Arquitectura de Software: El Proceso de Desarrollo de Software Etapas Del Proceso
El proceso de desarrollo tradicional tiene etapas muy marcadas, que tienen entradas, procesos y
salidas que funcionan como entradas de la siguiente etapa.
En la etapa de diseño y desarrollo estamos concentrados en encontrar cuáles son los problemas
que queremos resolver. Estos problemas los podemos dividir en dos grandes tipos de problemas.
2. La conformidad.
3. Tolerancia al cambio.
4. Invisibilidad.
Roles
Es importante que diferenciemos el ROL del puesto de trabajo, hay roles que pueden ser
desarrollados por la misma persona.
Experto del dominio: En una metodología tradicional, es la persona a la que acudimos para
entender las necesidades del negocio. En metodologías Ágiles --> stakeholders.
Gestor del proyecto / facilitador: Llevan al equipo a través del proceso iterativo e incremental,
entender lo que pasa con el equipo y motivar el avance en el desarrollo del producto.
El no crear este diseño desde etapas tempranas del desarrollo puede limitar severamente el que el
producto final satisfaga las necesidades de los clientes. Además, el costo de las correcciones
relacionadas con problemas en la arquitectura es muy elevado. Es así que la arquitectura de
software juega un papel fundamental dentro del desarrollo.
El arquitecto de software debe gestionar los siguientes puntos para cada Stakeholder:
• Encontrar los riegos más altas que afecten en el desarrollo del sistema (Cliente)
• Modularización y flexibilidad del sistema que se está desarrollando (Manager)
• Modularidad, mantenibilidad y capacidad de cambio del software (Dev)
• Desisdir estrategias para la disponibilidad del sistema (Usuario)
• Que el sistema pueda ser modularizado y cada una destas partes pueda ser probado de forma
fácil (QA).
Entender el problema
Problema:
Detalla ¿que es lo que se va a resolver? (y qué no se va a resolver) sin entrar en detalles del
“cómo”. -> (analisis del problema)
El espacio del problema nos ayuda a entender que es lo que vamos a resolver y exactamente como
imaginamos como esto va agregar un valor a nuestros usuarios sin entrar en detalle de cómo lo va
a resolver el sistema.
Idea: ¿Qué queremos resolver?
Solución:
Brinda el detalle del ¿“cómo” se va a resolver?, reflejando los detalles del problema detectado y
evitando resolver problemas que no se quiere o necesita resolver. --> (detalles técnicos)
Se refleja en el espacio del problema y trata de resolverlo teniendo en cuenta todos los detalles
técnicos necesarios.
Consta de:
Diseño: todo lo referente a la planificacion del software, desde diseño UI, UX hasta diseño
de sistemas
Requerimientos
Los dividimos en 2 grandes grupos:** requerimientos del producto** (los que vienen fijados por
las partes interesadas) y los requeremientos de proyecto (fechas de entregas, planes,
disponibilidad de recursos humanos, etc).
R. Productos:
Negocio: reglas de negocios alimentadas por los requerimientos del mismo. Ejemplo si quiero
conectar a personas que venden con personas que compran en un proyecto de market_place, el
sistema deberia tener la posibilidad de que los usuarios puedan subir artículos.
Usuario tiene que ver con las funcionalidades que va a requerir el usuario del sistema. Siguiendo
con el ejemplo del Market-place
sería que el usuario tuviera un panel de control y pueda autogestionarse la cuenta.
Funcional
¿qué cosas tienen que pasar operativamente? Ejempo que el sistema pueda cobrar a una tarjeta
de credito luego de concretar una venta.
El sistema debe ser capaz de procesar N transacciones por segundo. Esto se medirá por
medio de la herramienta SoapUI aplicada al Software Testing de servicios web.
El sistema debe ser capaz de operar adecuadamente con hasta 100.000 usuarios con
sesiones concurrentes.
Los datos modificados en la base de datos deben ser actualizados para todos los usuarios
que acceden en menos de 2 segundos.
Riesgos:
Identificarlo
Estimar su impacto
Intenta tratar los riesgos con posibles escenarios de fracaso y que pasaría en caso de que ese
riesgo se haga real.
Son aquellos que podemos atacar de forma estándar o que ya otros los
han atacado y solucionado.
Restricciones
Cuando empezamos a trabajar, no vamos a tener disponibles todas las tecnologías, plataformas,
patrones de diseño, infraestructura, porque hay ciertas restricciones que nos da el contexto.
Usualmente, estas restricciones están dadas por las partes interesadas [stakeholders], que nos
van a poner limitaciones que tengan que ver con su ecosistema, o su contexto de negocio, o
regulaciones o legales.
Limitaciones por integraciones con otros sistemas, por ejemplo, la aplicación necesita conexión
a internet, eso nos va a limitar en la capacidad o contexto de despligue.
El ciclo de vida: A medida que crece la aplicación es más difícil de cambiar.
Panorama Arquitectónico
Hay muchas librerías, muchos frameworks, mucho conocimiento arquitectónico implícito entre las
comunidades.
Cada uno de los componentes hacen invocaciones a los componentes externos y estos retornan
información.
Programa y subrutinas --> Instrucciones secuenciales que el programa ejecutaba una por una.
Luego se hacían instrucciones de salto, de aquí surgieron las funciones que son bloques de código
que podemos invocar en cualquier momento.
Orientado a objetos --> la abstracción es mayor en comparación con el paradigma anterior, se usa
para aplicaciones que ya sabemos que vamos a usar durante mucho tiempo. La abstracción ya no
es la subrutina, ahora tenemos objetos que se hacen llamados entre si y esperan respuestas.
Estilos: Flujo de datos
Lote secuencial
Lo importante es ejecutar una pieza de código y que al final de esa pieza todo lo procesado pase a
la siguiente pieza.
Tubos y filtros
Tenemos un flujo de datos continuo en dónde cada aplicación recibe continuamente esos datos,
los procesa y le da salida a otra aplicación o al final de ésta.
Pizarrón:
Es un estilo común; Se trata de que una cantidad de componentes comparte una misma
base de datos. de Ejemplo: aplicaciones que poseen comunicación por Internet.
Existen dos grandes familias que tienen que ver con la forma en que se comunican los
componentes. (la invocación implicaita y explícita)
Invocación implícita:
Se tienen varios componentes y se cuenta con un BUS de eventos en el cual los componentes van
a escribir algunos eventos y luego el BUS los comunica a los componentes que les conciernan
dichos eventos. Existen varios tipos de BUS.
Tipos de BUS:
Publicar/suscribir: en donde el componente inicial es el que publica un evento y los componentes
que estan suscritos reciben la notificación de dicha publicación.
Orientado a servicios (Enterprise Service BUS): en este caso el BUS es un componente inteligente,
en el que los componentes notifican al BUS a través de eventos y el BUS decide a quien notificar
dichos eventos.
Invocación explícita:
Se tienen componentes desarrollados individualmente pero que todos se conocen entre sí, dichos
componentes tiene que publicar que via de comunicación existirá para comunicarse entre ellos y a
que se dedica cada uno.
Comparando estilos: ¿Cómo elijo?
Estilos monolíticos.
1. **Eficiencia: **Al tener un solo artefacto se puede ser optimizado de manera más
personalizada. // En estilos distribuido, es un problema debido a los canales de
comunicación, red, intenet que comunican los componentes.
Estilos distribuidos.
4. Adaptabilidad: Al ser distribuido se puede detewctar mucho más fácil qué componente
necesita ser adaptado del sistema y es más fácile realizar esa actualización // en monolítos
puede ser mucho más complicado, como lanzar una app en un sistema operativo
diferente.
Tener en cuenta los requisitos, los objetivos de negocio / arquitectura de software, atributos de
calida/ Estrategias de arquitectura, Escenarios/ Desiciones arquitectonicas. Con el fin de analizar
que sacrificios, riesgos y no riesgos cuento y como impacta en mi proyecto