DISEÑOS
ARQUITECTURA DE APLICACIONES
DEFINICION
Una arquitectura de aplicaciones describe los patrones y las técnicas que se utilizan para diseñar y desarrollar aplicaciones.
La arquitectura le proporciona un plan y las prácticas recomendadas que debe seguir al momento de diseñar una aplicación, de modo que obtenga una aplicación bien estructurada.
CARACTERISTICAS
En una arquitectura de aplicaciones habrá servicios de frontend y de backend.
El desarrollo de frontend se refiere a la experiencia del usuario con la aplicación
El desarrollo de backend implica proporcionar acceso a los datos, los servicios y otros sistemas actuales que permiten el funcionamiento de la aplicación.
Hay muchos lenguajes de programación que se utilizan para desarrollar los sistemas de software.
Algunos de ellos se pueden utilizar para diseñar ciertos tipos de aplicaciones, como Swift para las aplicaciones móviles o JavaScript para el desarrollo del frontend.
JavaScript, combinado con HTML y CSS, es uno de los más populares para el desarrollo de aplicaciones web en la actualidad
Otros lenguajes de programación conocidos son Ruby, Python, Swift, TypeScript, Java, PHP y SQL, entre otros. El lenguaje que se utilice para diseñar una aplicación dependerá del tipo de aplicación, los recursos de desarrollo disponibles y los requisitos.
PATRONES
Los patrones de diseño de software pueden ayudarlo a diseñar una aplicación. Un patrón es la solución replicable a cierto problema.
Puede vincularse con otros para crear arquitecturas de aplicaciones más generales. En lugar de volver a crear toda la infraestructura completa, puede usar los patrones de diseño actuales, lo cual además garantiza que todo funcione como es debido.
VENTAJAS
Las arquitecturas modernas de aplicaciones suelen tener un bajo acoplamiento y utilizan microservicios e interfaces de programación de aplicaciones (API) para conectar los servicios, los cuales proporcionan la base para las aplicaciones nativas de la nube.
El desarrollo nativo de la nube es una forma de acelerar el diseño de aplicaciones nuevas, optimizar las actuales y proporcionar un desarrollo uniforme y una experiencia de gestión automatizada en las nubes privadas, públicas e híbridas.
En la actualidad, las principales arquitecturas de aplicaciones, basadas en las relaciones entre los servicios, son la arquitectura monolítica y N-tier (con conexión directa), los microservicios (sin acoplamiento) y las arquitecturas basadas en eventos y orientadas al servicio (de bajo acoplamiento).
MONOLITICA
son pilas de aplicaciones únicas que contienen todas las funciones dentro de cada aplicación. Tienen conexión directa, tanto en la interacción entre los servicios como en la manera en que se desarrollan y distribuyen.
MICROSERVIDORES
no son solo un tipo de arquitectura, sino también un modo de abordar la escritura del software. Con ellos, las aplicaciones se dividen en sus elementos más pequeños, que son independientes entre sí. Cada uno de dichos elementos o procesos es un microservicio.
BASADA EN EVENTOS
En un sistema como este, la captura, la comunicación, el procesamiento y la permanencia de los eventos son la estructura central de la solución. Esto difiere del modelo tradicional basado en solicitudes.
DISEÑO DE INTERFACES DE USUARIO
DEFINICION
Es el medio que a través del cual el usuario interactúa con un dispositivo tecnológico
TIPOS DE INTERFACES
Software
Es aquella que brinda información sobre los procesos y herramientas de control, la cual puede ser observada fácilmente por el usuario en la pantalla de su dispositivo
Hardware
Engloba todos aquellos elementos que permiten ingresar, procesar y entregar datos, como los famosos teclados y “ratones”, así como las pantallas.
Software-Hardware
Dentro de la interfaz del usuario, esta es la que sirve de puente entre la máquina y las personas.
CARACTERISTICAS
Claridad
Una buena interfaz transmite la información de manera precisa para evitar que el usuario cometa errores durante la interacción
Concisión
Se trata de darle al usuario solo la información que necesita y pide.
Coherencia
Esta característica es la que hace intuitiva una interfaz, permitiéndole a la persona crear patrones de uso de manera sencilla y práctica
Flexibilidad
Una buena interfaz también se caracteriza por permitir que el usuario restaure elementos y deshaga acciones.
Atractivo Visual
Cuando se trata de experiencia del usuario, nunca puede subestimarse la importancia del atractivo visual. Además de tener grandes funcionalidades, una buena interfaz es agradable a la vista.
ARQUITECTURA DE SISTEMAS DISTRIBUIDOS
DEFINICION
Es la arquitectura más citado cuando se discuten lo sistemas distribuidos. Es el modelo mas importante y sigue siendo el mas utilizado
VENTAJAS
La confiabilidad que facilita la repartición de la carga de trabajo entre las distintas computadoras con bases y sus ffunciones y capacidades
Tienen mayor poder de computo
En la economía, estos sistemad por lo general funcionan con miroprocesadores que tienen una relación de calidad/precio mas interesante y atractiva que una computadora centraizada
Una Distribución interesante que puedo hacer uso de aplcaciones de manera reomata
DESVENTAJAS
SEGURIDAD
Se necesita de esquemas de seguridad muy robustos
REDES
Existen problemas de transmision de datos muy comunes
TOLERANCIA A FALLOS
Puede existir fallas operativas y de componentes
CARACTERISTICAS
ARQUITECTURA BASADA EN OBJETOS: En esencia, cada objeto corresponde y estos componentes estan conectados
ARQUITECTURA EN CAPAS: Un componente en una determinada capa que puede llamar a componentes en la capa inmediata interior
ARQUITECTURA CENTRADA EN DATOS: Los procesos se comunican a través de un repositorio o medio común
DISEÑO ARQUITECTONICO
DEFINICION
Es la primera etapa en el proceso de software, es un enlace entre la ingeniería, el diseño y la ingeniería de requerimientos.
Se interesa por entender cómo debe organizarse un sistema y cómo tiene que diseñarse la estructura global de ese sistema.
PATRON ARQUITECTONICO
Se puede considerar como una descripción abstracta estilizada de buena práctica, que se ensayó y puso a prueba en diferentes sistemas y entornos.
Ayudan a validar nuestro sistema.
Establecen un lenguaje común.
Ahorran tiempo.
CARACTERISTICAS
Arquitectura en pequeño: se interesa por la arquitectura de programas individuales.
Arquitectura en grande: se ocupa de sistemas empresariales complejos.
VENTAJAS
Comunicación entre participantes: puede usarse como enfoque para discusiones.
Análisis del sistema: tienen un efecto profundo sobre si el sistema puede o no cubrir requerimientos críticos.
Reutilización a gran escala: la arquitectura del sistema es la misma para sistemas con requerimientos similares.
DESARROLLO
REUTILIZACION DEL SISTEMA
Es el proceso de creación de sistemas de software a partir de un software existente, en lugar de tener que rediseñar desde el principio.
Reutilización del sistema de aplicación
Todo un sistema de aplicación puede reuti- lizarse al incorporarlo sin cambios en otros sistemas o al configurar la aplicación para diferentes clientes
Reutilización de componentes
Los componentes de una aplicación, que varían en tamaño desde subsistemas hasta objetos individuales, pueden reutilizarse
Reutilización de objetos y funciones
funciones Pueden reutilizarse los componentes de soft- ware que implementan una sola función, tal como una función matemática, o una clase de objeto
VENTAJAS
Reducir el tiempo de desarrollo.
Reducir los costos.
Mayor fiabilidad
Desventajas
Resistencia del personal
Pobre soporte metodológico
En muchas empresas no existe plan de reutilización (No se considera prioritario)
Características
Funcionalidad.- Es más probable que se reutilice un componente de software que exhiba unas prestaciones que se puedan aplicar en muchos contextos
Independencia
.- Un componente sólo será reutilizable si es suficientemente independiente de cualquier aplicación particular.
Robustez
• Su incorporación a muchos entornos diferentes no debe comprometer su corrección ni su eficiencia.
• El diseñador del componente debe controlar completamente su conexión con las otras unidades externas.
Seguridad frente a fallos
.- El usuario del componente debe conocer siempre cualquier fallo cuando éste ocurra.
Beneficios
Incrementa la dependencia.- Software reutilizado, que ha sido probado y comprobado en los
sistemas de trabajo, debería ser más confiable que el nuevo software.
Reduce el riesgo de procesos.- El costo del software existente ya es conocido, considerando que
los costes de desarrollo son siempre una cuestión de criterio.
Uso efectivo de especialistas.- En vez de hacer el mismo trabajo una y otra vez, los especialistas
de aplicaciones pueden desarrollar un software reutilizable que encapsula su conocimiento
Ejemplo
Java, ha sido designado para hacer uso completo de los avances en redes distribuidas. Java es un lenguaje que trae una nueva dimensión a la reutilización de software también. Sin duda, la característica clave de Java que ayuda a la reutilización de software es su genuina orientación orientada a objetos. Pero Java introduce capacidades adicionales que soportan la reutilización:
• Java es arquitectura neutral: la capacidad de reutilización es aumentada al tener una simple aplicación que es inmediatamente utilizable en múltiples plataformas.
• Java es portable: . La reutilización es mejorada debido a que la implementación no es más dependiente del hardware.
que Java pueda ser reutilizado sin recompilación aún si el entorno ha cambiado.
INGENIERIA DE SOFTWARE BASADA EN COMPONENTES
Un componente es una unidad de composición de aplicaciones software, que posee un conjunto de interfaces y un conjunto de requisitos, y que ha de poder ser desarrollado, adquirido, incorporado al sistema y compuesto con otros componentes de forma independiente, en tiempo y espacio
FUNDAMENTOS
Componentes independientes
que se especifican por completo mediante sus interfaces
Estándares de componentes
Definen, a un nivel mínimo, cómo deben especificarse las interfaces de componentes y cómo se comunican estos últimos
Middleware
El middleware para soporte de componentes maneja eficientemente los conflictos de bajo nivel y permite enfocarse en problemas relacionados con la aplicación.
Un proceso de desarrollo
que se engrana con la ingeniería de software basada en componentes. Usted necesita un proceso de desarrollo que permita la evolución de Requerimiento.
Características
La modularidad, la reusabilidad y componibilidad son características muy relevantes de la tecnología de programación basada en componentes, en las cuales coincide con la tecnología orientada a objetos de la que puede considerarse una evolución. No obstante en esta tecnología también se requiere robustez debido a que los componentes deben operar en entornos muchos más heterogéneos.
Ventajas
El análisis del riesgo se hace de forma explícita y clara. Une los mejores elementos de los restantes modelos. - Reduce riesgos del proyecto - Incorpora objetivos de calidad - Integra el desarrollo con el mantenimiento.
Desventajas
• Genera mucho tiempo en el desarrollo del sistema - Modelo costoso –Requiere experiencia en la identificación de riesgos
• Inconvenientes
• Genera mucho trabajo adicional. Cuando un sistema falla se pierde tiempo y coste dentro de la empresa. Exige una cierta habilidad en los analistas (es bastante difícil).
Beneficios
Simplifica las pruebas.- Permite que las pruebas sean ejecutadas probando cada uno de los componentes antes de probar el conjunto completo de componentes ensamblados.
Simplifica el mantenimiento del sistema. Cuando existe un débil acoplamiento entre sus componentes, el desarrollador puede actualizar y/o adicionar componentes según sea requerido, sin afectar otras partes del sistema.
Mayor calidad. Dado que un componente puede ser construido y luego optimizado continuamente por un experto u organización, la calidad de una aplicación basada en componentes mejorará con el paso del tiempo.
Ejemplo
El Skype es un viejo conocido en el universo de las comunicaciones, pero fueron sus renovaciones las responsables por poner la aplicación en la lista de los “TOP 5” de mejores experiencias con UX Design de 2017.
Utilizado por millones de personas alrededor del mundo, Skype puso la experiencia del usuario como prioridad, posibilitando obtener una aplicación más natural, práctico y repleto de nuevas funcionalidades. Todo eso permite facilitar el chat y proporcionar una apariencia mucho más moderna a la aplicación. Este tema trabaja directamente con el medio en que cada persona interactúa con una aplicación, software o programa. Está asociado directamente a la interacción entre el usuario y el dispositivo en cuestión.
DESARROLLO DE SISTEMAS CRITICOS
Un sistema es una colección intencionada de componentes interrelacionados que trabajan juntos para alcanzar un objetivo común. Estos sistemas pueden incluir software , hardware y ser utilizados por personas. Los sistemas técnicos basados en computadoras incluyen hardware y software , pero no consideran que los usuarios y los procesos operativos sean parte del sistema. Los sistemas socio-técnicos incluyen a los sistemas técnicos, así como los procesos operativos y las personas que interactúan con el sistema técnico. Los sistemas socio-técnicos se rigen por las políticas y las normas de una organización.
Características
Confiabilidad.- Es una de las características más importantes que debe poseer este tipo de sistemas, ya que sin ello puede producirse una pérdida de confianza por parte del cliente, los costes económicos y de información de las pérdidas pueden ser enormes.
Mantenimiento.- Cuando un sistema se encuentre en mantenimiento este se debe realizar mediante condiciones específicas y el sistema debe volver a su actividad normal en un plazo determinado de tiempo.
Ventajas
Este tipo de sistemas deban ser altamente
confiables en lo que se refiere a disponibilidad, fiabilidad, corrección, rendimiento, precisión, seguridad y protección.
Desventajas
1. El hardware del sistema puede fallar debido a errores en su diseño.
2. El software del sistema puede fallar debido a errores en su especificación, diseño o implementación.
3. Los operadores del sistema pueden provocar fallos en el sistema debido a un uso incorrecto del mismo.
Beneficios
-Disponibilidad- El sistema esté activo y en funcionamiento y que sea capaz de proporcionar servicios útiles en todo momento.
-Fiabilidad- Durante un determinado periodo de tiempo, el sistema funcione correctamente tal y como el usuario espera, debe poseer estas dos características:
Corrección- La información sea proporcionada al cliente con el nivel de detalle preciso.
Precisión- La información que se proporciona se hace cuando es requerida.
-Seguridad- Evite consecuencias catastróficas sobre su entorno.
-Protección- El sistema es capaz de resistir ataques premeditados o accidentales, la protección debe cumplir.
Ejemplo
Cajero automático: Nuestro proyecto está basado en un Desarrollo de Sistema Crítico, porque en nuestro sistema de cajero, el software y el hardware son dos cosas interdependientes. Sin hardware, nuestro sistema de software solo sería una idea de conocimiento humano para satisfacer necesidades bancarias. Mientras que sin el software, el hardware sólo es un conjunto de dispositivos electrónicos inertes colocado fuera de bancos o ciertas zonas específicas.
EVOLUCION DE SOFTWARE
El desarrollo de software no se detiene cuando se entrega, si no que continua a lo largo de la vida de este. Después de distribuir un sistema, inevitablemente debe modificarse con la finalidad de mantenerlo útil.
Características
Capacidad para priorizar las tareas.
Comportamiento temporal conocido.
Proporciona comunicación y sincronización entre tareas.
Ventajas
Sencillos e intuitivos y adaptados al caso concreto de la organización.
Disminución de errores.
El sistema es flexible.
Desventajas
A veces las soluciones no responden de forma satisfactoria a las necesidades reales.
Existen cientos de software que se desarrollan con metodologías tradicionales de cascada (waterfall) y fracasan o sus resultados son mediocres.
La mayoría de las veces el Talón de Aquiles está en la incapacidad para lidiar con rapidez con los cambios sucesivos que sugiere el cliente de acuerdo a cómo evolucionan sus necesidades.
Beneficios
Se contará únicamente con aquella información, requerimientos necesarios y funcionalidades exclusivas de la empresa. Evitando así funciones innecesarias que no se utilizan cotidianamente.
Ejemplo
HMI (Interfaz Hombre-Máquina), donde sus gráficos han evolucionado a un concepto más minimalistas, con las siguientes características:
Simplificando los entornos gráficos.
Eliminando los destellos y parpadeos que funcionaban como indicadores en el caso de producirse eventos en el sistema.
Sin multitud de colores
Mostrando sólo los parámetros necesarios para que el operario pueda realizar una lectura rápida sin distracciones.