Arquitectura de Software
Arquitectura de Software
Arquitectura de Software
- Arquitectura de software
https://www.youtube.com/watch?v=7ukajubprdE (1)
https://www.youtube.com/watch?v=rWh7RtVJzhA (2)
En los inicios de la informática, la programación se consideraba un arte y se
desarrollaba como tal debido a la dificultad que entrañaba para la mayoría de
las personas, pero con el tiempo se han ido descubriendo y desarrollando
formas y guías generales, con base a las cuales se puedan resolver los
problemas. A estas, se les ha denominado arquitectura de software, porque,
a semejanza de los planos de un edificio o construcción, estas indican la
estructura, funcionamiento e interacción entre las partes del software.
La arquitectura de software es el diseño de más alto nivel de la estructura de
un sistema.
Una arquitectura de software, también denominada arquitectura lógica, consiste
en un conjunto de patrones y abstracciones coherentes que proporcionan un
marco definido y claro para interactuar con el código fuente del software.
Una arquitectura de software se selecciona y diseña con base en objetivos
(requisitos) y restricciones. Los objetivos son aquellos prefijados para el
sistema de información, pero no solamente los de tipo funcional, también otros
objetivos como el mantenimiento, la auditoría, flexibilidad e interacción con
otros sistemas de información. Las restricciones son aquellas limitaciones
derivadas de las tecnologías disponibles para implementar sistemas de
información. Unas arquitecturas son más recomendables de implementar con
ciertas tecnologías mientras que otras tecnologías no son aptas para
determinadas arquitecturas.
La arquitectura de software define, de manera abstracta, los componentes que
llevan a cabo alguna tarea de computación, sus interfaces y la comunicación
entre ellos. Toda arquitectura debe ser implementable en
una arquitectura física, que consiste simplemente en determinar
qué computadora tendrá asignada cada tarea.
Modelos o vistas
Toda arquitectura de software debe describir diversos aspectos del software.
Generalmente, cada uno de estos aspectos se describe de una manera más
comprensible si se utilizan distintos modelos o vistas. Es importante destacar
que cada uno de ellos constituye una descripción parcial de una misma
arquitectura y es deseable que exista cierto solapamiento entre ellos. Esto es
así porque todas las vistas deben ser coherentes entre sí, evidente dado que
describen la misma cosa.
Cada paradigma de desarrollo exige diferente número y tipo de vistas o
modelos para describir una arquitectura. No obstante, existen al menos tres
vistas absolutamente fundamentales en cualquier arquitectura:
La visión estática: describe qué componentes tiene la arquitectura.
La visión funcional: describe qué hace cada componente.
La visión dinámica: describe cómo se comportan los componentes a lo largo
del tiempo y como interactúan entre sí.
Las vistas o modelos de una arquitectura de software pueden expresarse
mediante uno o varios lenguajes. El más obvio es el lenguaje natural, pero
existen otros lenguajes tales como los diagramas de estado, los diagramas de
flujo de datos, etc. Estos lenguajes son apropiados únicamente para un modelo
o vista. Afortunadamente existe cierto consenso en adoptar UML (Unified
Modeling Language, lenguaje unificado de modelado) como lenguaje único
para todos los modelos o vistas. Sin embargo, un lenguaje generalista corre el
peligro de no ser capaz de describir determinadas restricciones de un sistema
de información (o expresarlas de manera incomprensible).
Generalidades
La gran cantidad de organizaciones de desarrollo de software implementan
metodologías para el proceso de desarrollo. Muchas de estas organizaciones
pertenecen a la industria armamentística, que en los Estados Unidos necesita
un certificado basado en su modelo de procesos para poder obtener un
contrato.
El estándar internacional que regula el método de selección, implementación y
monitoreo del ciclo de vida del software es ISO 12207.
Durante décadas se ha perseguido la meta de encontrar procesos
reproducibles y predecibles que mejoren la productividad y la calidad. Algunas
de estas soluciones intentan sistematizar o formalizar la aparentemente
desorganizada tarea de desarrollar software. Otros aplican técnicas de gestión
de proyectos para la creación del software. Sin una gestión del proyecto, los
proyectos de software corren el riesgo de demorarse o consumir un
presupuesto mayor que el planeado. Dada la cantidad de proyectos de
software que no cumplen sus metas en términos de funcionalidad, costes o
tiempo de entrega, una gestión de proyectos efectiva es algo imprescindible.
Algunas organizaciones crean un grupo propio (Software Engineering Process
Group, abreviado SEPG) encargado de mejorar los procesos para el desarrollo
de software en la organización.
Despliegue y mantenimiento
El despliegue comienza cuando el código ha sido suficientemente probado, ha
sido aprobado para su liberación y ha sido distribuido en el entorno de
producción.
Entrenamiento y soporte para el software es de suma importancia y algo que
muchos desarrolladores de software descuidan. Los usuarios, por naturaleza,
se oponen al cambio porque conlleva una cierta inseguridad, es por ello que es
fundamental instruir de forma adecuada a los futuros usuarios del software.
El mantenimiento o mejora de un software con problemas recientemente
desplegado, puede requerir más tiempo que el desarrollo inicial del software.
Es posible que haya que incorporar código que no se ajusta al diseño original
con el objetivo de solucionar un problema o ampliar la funcionalidad para un
cliente. Si los costes de mantenimiento son muy elevados puede que sea
oportuno rediseñar el sistema para poder contener los costes de
mantenimiento.
Arquitecto de software
Determina las estructuras de la aplicación y las tecnologías con las que se
construirá la aplicación. Está encargado del aseguramiento de la calidad,
mejorar continuamente la arquitectura. Gestiona los requerimientos no
funcionales, asume la dirección técnica para asegurar que todos los aspectos
de la arquitectura se estén desarrollando de manera correcta.
Debe ser una persona con un innato sentido de liderazgo, dispuesto a formar a
los integrantes del equipo, dispuesto a recibir y aplicar abiertamente
recomendaciones.
1. Patrón de capas
2. Patrón cliente-servidor
Este patrón consiste en dos partes; un servidor y múltiples clientes. El
componente del servidor proporcionará servicios a múltiples componentes del
cliente. Los clientes solicitan servicios del servidor y el servidor proporciona
servicios relevantes a esos clientes. Además, el servidor sigue escuchando las
solicitudes de los clientes.
Uso
Aplicaciones en línea como correo electrónico, uso compartido de documentos y
banca.
3. Patrón maestro-esclavo
Este patrón consiste en dos partes; maestro y esclavos. El componente
maestro distribuye el trabajo entre componentes esclavos idénticos y calcula el
resultado final de los resultados que devuelven los esclavos.
Uso
En la replicación de la base de datos, la base de datos maestra se considera
como la fuente autorizada y las bases de datos esclavas se sincronizan con
ella.
Periféricos conectados a un bus en un sistema informático (unidades maestra y
esclava).
4. Patrón de filtro de tubería
Este patrón se puede usar para estructurar sistemas que producen y procesan una secuencia de
datos. Cada paso de procesamiento se incluye dentro de un componente de filtro. Los datos
que se procesarán se pasan a través de las tuberías. Estas tuberías se pueden utilizar para el
almacenamiento en búfer o con fines de sincronización.
Uso
Compiladores Los filtros consecutivos realizan análisis léxico, análisis sintáctico y generación de
código.
https://www.youtube.com/watch?v=A8AJ_bb7Oec (4)
https://www.youtube.com/watch?v=plr1H4rFg_g (5)