martes, 18 de mayo de 2010

DISEÑO Y ARQUITECTURA DE PRODUCTOS DE SOFTWARE


Es un conjunto de sistemas de software que comparten un conjunto común y gestionado de aspectos que satisfacen las necesidades específicas de un segmento de mercado o misión y que son desarrollados a partir de un conjunto común de activos fundamentales [de software] de una manera preescrita”

La idea básica:

*Ensamblaje de partes de software previamente elaboradas
*Inspirada en los procesos de producción de sistemas físicos
*Producción de aviones, vehículos, computadores, aparatos electrónicos, etc.
*Fundamentada en la Reutilización de Software
*Asume la existencia de una industria de partes

DESCOMPOSICIÓN MODULAR

El diseño modular propone dividir el sistema en partes diferenciadas y definir sus interfaces. sus
ventajas: claridad, reducción de costos y reutilizacion
Los pasos a seguir son:
1. Identificar los módulos
2. Describir cada módulo
3. Describir las relaciones entre módulos
Una descomposicion modular debe poseer ciertas cualidades mínimas para que se pueda considerar suficiente válidad.
1. Independencia funcional
2. Acoplamiento
3. Cohesión
4. Comprensibilidad
5. Adaptabilidad
Para medir la independencia funcional hay dos criterios:acoplamiento y cohesión

ARQUITECTURAS DE DOMINIO ESPECÍFICO

Es necesario comprender las ventajas y desventajas delas diferentes arquitecturas de sistemas distribuidos. Aquí se tratan dos tipos genéricos de arquitecturas de sistemas distribuidos: Arquitectura cliente-servidor.
En este caso el sistema puede ser visto como un conjunto de servicios que se proporcionan a los clientes que hacen uso de dichos servicios. Los servidores y los clientes se tratan de forma diferente en estos sistemas.
Arquitecturas de objetos distribuidos. Para esta arquitectura no hay distinción entre servidores y clientes, y el sistema puede ser visto como un conjunto de objetos que interaccionan cuya localización es irrelevante.
No hay distinción entre un proveedor de servicios y el usuario de estos servicios.
Los componentes en un sistema distribuido pueden implementarse en diferentes lenguajes de programación y pueden ejecutarse en tipos de procesadores completamente diferentes. Los modelos de datos, la representación de la información y los protocolos de comunicación pueden ser todos diferentes.
DISEÑO SOFTWARE ARQUITECTURA MULTIPROCESADOR
Un sistema multiproceso o multitarea es aquel que permite ejecutar varios procesos de forma concurrente, la razón es porque actualmente la mayoría de las CPU’s sólo pueden ejecutar un proceso cada vez. La única forma de que se ejecuten de forma simultánea varios procesos es tener varias CPU’s (ya sea en una máquina o en varias, en un sistema distribuido.

La ventaja de un sistema multiproceso reside en la operación llamada cambio de contexto. Esta operación consiste en quitar a un proceso de la CPU, ejecutar otro proceso y volver a colocar el primero sin que se entere de nada.

El multiproceso no es algo difícil de entender: más procesadores significa más potencia computacional.
Un conjunto de tareas puede ser completado más rápidamente si hay varias unidades de proceso ejecutándolas en paralelo. Esa es la teoría, pero otra historia es la práctica, como hacer funcionar el multiproceso, lo que requiere unos profundos conocimientos tanto del hardware como del software.
Es necesario conocer ampliamente como están interconectados dichos procesadores, y la forma en que el código que se ejecuta en los mismos ha sido escrito para escribir aplicaciones y software que aproveche al máximo sus prestaciones.
Para lograrlo, es necesario modificar varias facetas del sistema operativo, la organización del código de las propias aplicaciones, así como los lenguajes de programación.
Ventajas
• Es económica.
• El uso de componentes comúnmente disponibles, en grandes cantidades, permite ofrecer mayor rendimiento, a un precio menor que el de máquinas con procesadores especialmente diseñados (como por ejemplo las máquinas de procesadores vectoriales y de propósito específico).
• Adicionalmente, las computadoras paralelas son inherentemente escalables, permitiendo actualizarlas para adecuarlas a una necesidad creciente.
• Las arquitecturas “tradicionales” se actualizan haciendo los procesadores existentes obsoletos por la introducción de nueva tecnología a un costo posiblemente elevado. Por otro lado, una arquitectura paralela se puede actualizar en términos de rendimiento simplemente agregando más procesadores.
Desventajas

• En ocasiones se menciona también la limitante física; existen factores que limitan la velocidad máxima de un procesador, independientemente del factor económico.
• Barreras físicas infranqueables, tales como la velocidad de la luz, efectos cuánticos al reducir el tamaño de los elementos de los procesadores, y problemas causados por fenómenos eléctricos a pequeñas escalas, restringen la capacidad máxima de un sistema uniprocesador, dejando la opción obvia de colocar muchos procesadores para realizar cálculos cooperativamente.

DISEÑO DE ARQUITECTURA CLIENTE-SERVIDOR



Este modelo es un prototipo de sistemas distribuidos que muestra como los datos y el procesamiento se distribuye a lo largo de varios procesadores. Es una forma de dividir las responsabilidades de un sistema de información separando la interfaz del usuario de la gestión de la información.
El funcionamiento básico de este modelo consiste en que un programa cliente realiza peticiones a un programa servidor, y espera hasta que el servidor de respuesta de un cliente
En la arquitectura C/S el remitente de una solicitud es conocido como cliente. Sus características son:
• Es quien inicia solicitudes o peticiones, tienen por tanto un papel activo en la comunicación (dispositivo maestro o amo).
• Espera y recibe las respuestas del servidor.
• Por lo general, puede conectase a varios servidores a la vez.
• Normalmente interactúa directamente con los usuarios finales mediante una interfaz gráfica de usuario.
Características de un servidor En los sistemas C/S el receptor de la solicitud enviada por cliente se conoce como servidor.
Sus características son:
• Al iniciarse esperan a que lleguen las solicitudes de los clientes, desempeñan entonces un papel pasivo en la comunicación (dispositivo esclavo).
• Tras la recepción de una solicitud, la procesan y luego envían la respuesta al cliente. • Por lo general, aceptan conexiones desde un gran número de clientes (en ciertos casos el número máximo de peticiones puede estar limitado).
• No es frecuente que interactúen directamente con los usuarios finales.

Ventajas
• Centralización del control: Los accesos, recursos y la integridad de los datos son controlados por el servidor de forma que un programa cliente defectuoso o no autorizado no pueda dañar el sistema.
• Escalabilidad: Se puede aumentar la capacidad de clientes y servidores por separado.
• Fácil mantenimiento
Desventajas
• La congestión del tráfico (a mayor número de clientes, más problemas para el servidor).
• El software y el hardware de un servidor son generalmente muy determinantes. Un hardware regular de un ordenador personal puede no poder servir a cierta cantidad de clientes.
Normalmente se necesita software y hardware específico, sobre todo en el lado del servidor, para satisfacer el trabajo. Por supuesto, esto aumentará el costo.

DISEÑO DISTRIBUIDO

Un sistema distribuido es una colección de computadoras independientes; es decir autónomas, que aparecen ante los usuarios del sistema como una única computadora.
Algunos ejemplos de sistemas distribuidos son:
• Una red de estaciones de trabajo en un departamento de una universidad o compañía, donde además de cada estación personal, podría existir una pila de procesadores en el cuarto de máquinas, que no estén asignados a usuarios específicos sino que se utilicen de manera dinámica cuando sea necesario.
• Una fábrica de robots, donde los robots actúan como dispositivos periféricos unidos a la misma computadora central.
• Un banco con muchas sucursales por el mundo, cada oficina tiene una computadora maestra para guardar las cuentas locales y el manejo de las transacciones locales, la cuál se puede comunicar con cualquier computadora de la red. Las transacciones hechas se realizan sin importar dónde se encuentre la cuenta o el cliente.

DISEÑO SOFTWARE TIEMPO REAL

El software de tiempo real esta muy acoplado con el mundo externo, esto es, el software de tiempo real debe responder al ámbito del problema en un tiempo dictado por el ámbito del problema.
Debido a que el software de tiempo real debe operar bajo restricciones de rendimiento muy rigurosas, el diseño del software esta conducido frecuentemente, tanto por la arquitectura del hardware como por la del software, por las características del sistema operativo, por los requisitos de la aplicación y tanto por los extras del lenguaje de programación como prospectos de diseño.
La computadora digital se ha convertido en una maquina omnipresente en al vida diaria de todos nosotros.
Las computadoras nos permiten ver juegos, así como contar el tiempo, optimizar el gasto de gasolina de nuestras ultimas generaciones de coches y programar a nuestros aparatos.
Todas estas interacciones con las computadoras sean útiles o intrusivas son ejemplos de computación de tiempo real.
La computadora esta controlando algo que interactua con la realidad sobre una base de tiempo de hecho, el tiempo es la esencia de la interacción