Arquitectura
* La Arquitectura del Software es el diseño de mas 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 el marco
* Una arquitectura de software se selecciona y diseña con base en
objetivos 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 la mantenibilidad,
auditabilidad, 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 mas
recomendables de implementar con ciertas tecnologías mientras que otras
tecnologías no son aptas para determinadas arquitecturas. Por ejemplo, no es viable emplear una arquitectura de software de
tres capas para implementar sistemas en tiempo real.
* 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 tendra
asignada cada tarea.
La arquitectura de software, tiene que ver con el diseño y la
implementación de estructuras de software de alto nivel. Es el resultado
de ensamblar un cierto número de elementos arquitectónicos de
forma adecuada para satisfacer la mayorfuncionalidad y requerimientos de
desempeño de un sistema, así como
requerimientos no funcionales, como
la confiabilidad,escalabilidad, portabilidad,
y disponibilidad.
-------- ----- ------ ----- ----- ------
Modelos o vistas
Toda arquitectura de software debe describir diversos aspectos del
software. Generalmente, cada uno de estos aspectos se describe de una manera
mas 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 estatica: describe qué componentes tiene
la arquitectura.
* La visión funcional: describe qué hace cada componente.
* La visión dinamica: 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 mas 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 losmodelos 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).
Arquitecturas mas comunes
Generalmente, no es necesario inventar una nueva arquitectura de software para
cada sistema de información. Lo habitual es adoptar una arquitectura
conocida en función de sus ventajas e inconvenientes para cada caso en
concreto. Así, las arquitecturas mas universales son:
* Monolítica. Donde el software se estructura en
grupos funcionales muy acoplados.
* Cliente-servidor. Donde el software reparte su carga de
cómputo en dos partes independientes pero sin reparto claro de
funciones.
* Arquitectura de tres niveles. Especialización de la arquitectura
cliente-servidor donde la carga se divide en tres partes (o capas) con un reparto claro de funciones: una capa para la
presentación (interfaz de usuario), otra para el calculo (donde
se encuentra modelado el negocio) y otra para el almacenamiento (persistencia).
Una capa solamente tiene relación con la siguiente.
-------- ----- ------ ----- ----- ------
Introducción
ISO/IEC 12207 establece un proceso de ciclo de
vida para el software que incluye procesos y actividades que se
aplican desde la definición de requisitos, pasando por la
adquisición y configuración de los servicios del sistema, hasta la finalización de
su uso. Este estandar tiene como objetivo principal
proporcionar una estructura común para que compradores, proveedores,
desarrolladores, personalde mantenimiento, operadores, gestores y
técnicos involucrados en el desarrollo de software usen un
lenguaje común. Este lenguaje común se
establece en forma de procesos bien definidos.
Estructura
La estructura del
estandar ha sido concebida de manera que pueda ser adaptada a las
necesidades de cualquiera que lo use. Para
conseguirlo, el estandar se basa en dos principios fundamentales:
Modularidad y responsabilidad. Con la modularidad se pretende conseguir
procesos con un mínimo acoplamiento y una
maxima cohesión. En cuanto a la responsabilidad, se busca
establecer un responsable para cada proceso,
facilitando la aplicación del
estandar en proyectos en los que pueden existir distintas personas u
organizaciones involucradas, no importando el uso que se le de a este.
Procesos
Los procesos se clasifican en tres tipos: Principales, de soporte y de la
organización. Los procesos de soporte y de organización deben
existir independientemente de la organización y del proyecto
ejecutado. Los procesos principales se instancian de acuerdo
con la situación particular.
* Procesos principales.
* Adquisición.
* Suministro.
* Desarrollo.
* Operación.
* Mantenimiento.
* Procesos de soporte.
* Documentación
* Gestión de la configuración.
* Aseguramiento de calidad.
* Verificación.
* Validación.
* Revisión conjunta.
* Auditoría.
* Resolución de problemas.
* Procesos de la organización.
* Gestión.* Infraestructura.
* Mejora.
* Recursos Humanos.
El proceso de desarrollo del
software
Un proceso de desarrollo de software tiene como
propósito la producción eficaz y eficiente de un producto
software que reúna los requisitos del
cliente. Dicho proceso, en términos globales se
muestra en la Figura 2 [3]. Este proceso es
intensamente intelectual, afectado por la creatividad y juicio de las personas
involucradas [4]. Aunque un proyecto de desarrollo de software es
equiparable en muchos aspectos a cualquier otro proyecto de ingeniería,
en el desarrollo de software hay una serie de desafíos adicionales,
relativos esencialmente a la naturaleza del producto obtenido. A continuación se explican algunas particularidades
asociadas al desarrollo de software y que influyen en su proceso de
construcción.
Un producto software en sí es complejo, es practicamente inviable
conseguir un 100% de confiabilidad de un programa por pequeño que sea. Existe una inmensa combinación de factores
que impiden una verificación exhaustiva de las todas posibles
situaciones de ejecución que se puedan presentar (entradas, valores de
variables, datos almacenados, software del sistema, otras aplicaciones
que intervienen, el hardware sobre el cual se ejecuta, etc.).
Un producto software es intangible y por lo general
muy abstracto, esto dificulta la definición del producto y sus requisitos, sobre todo
cuando no se tiene precedentes en productos software similares. Esto hace que
los requisitos sean difíciles de consolidar
tempranamente. Así, los cambios en los requisitos son inevitables, no
sólo después de entregadoen producto sino también durante el proceso de desarrollo.
Ademas, de las dos anteriores, siempre puede señalarse la
inmadurez de la ingeniería del
software como
disciplina, justificada por su corta vida comparada con otras disciplinas de la
ingeniería. Sin embargo, esto no es mas que un
inútil consuelo.
Figura 1: proceso de desarrollo de software.
El proceso de desarrollo de software no es único.
No existe un proceso de software universal que sea
efectivo para todos los contextos de proyectos de desarrollo. Debido a esta
diversidad, es difícil automatizar todo un
proceso de desarrollo de software.
A pesar de la variedad de propuestas de proceso de software, existe un conjunto de actividades fundamentales que se encuentran
presentes en todos ellos [4]:
1. Especificación de software: Se debe definir la funcionalidad y
restricciones operacionales que debe cumplir el software.
2. Diseño e Implementación: Se diseña y construye el software
de acuerdo a la especificación.
3. Validación: El software debe validarse, para asegurar que cumpla con
lo que quiere el cliente.
4. Evolución: El software debe evolucionar, para adaptarse a las
necesidades del
cliente.
Ademas de estas actividades fundamentales, Pressman [1] menciona un conjunto de “actividades protectoras”, que se
aplican a lo largo de todo el proceso del
software. Ellas se señalan a
continuación:
* Seguimiento y control de proyecto de software.
* Revisiones técnicas formales.
* Garantía de calidad del software.
* Gestión de configuración del software.
* Preparación y producción de documentos.
* Gestiónde reutilización.
* Mediciones.
* Gestión de riesgos.
Pressman [1] caracteriza un proceso de desarrollo de
software como
se muestra en la Figura 3. Los elementos involucrados se describen a
continuación:
* Un marco común del
proceso, definiendo un pequeño número de actividades del marco de
trabajo que son aplicables a todos los proyectos de software, con independencia
del
tamaño o complejidad.
* Un conjunto de tareas, cada uno es una colección de tareas de
ingeniería del
software, hitos de proyectos, entregas y productos de trabajo del
software, y puntos de garantía de calidad, que permiten que las
actividades del marco de trabajo se adapten a las características del proyecto de software y los requisitos del equipo del
proyecto.
* Las actividades de protección, tales como garantía de calidad del software, gestión de configuración del software y medición, abarcan el modelo del proceso. Las
actividades de protección son independientes de cualquier actividad del marco de trabajo y aparecen durante todo el proceso.
Figura 2: Elementos del
proceso del software
Otra perspectiva utilizada para determinar los elementos del proceso de desarrollo de software es
establecer las relaciones entre elementos que permitan responder Quién
debe hacer Qué, Cuando y Cómo debe hacerlo [5].
Figura 3: Relación entre elementos del proceso del software
En la Figura 4 se muestran los elementos de un proceso de desarrollo de
software y sus relaciones. Así las interrogantes se responden de la
siguiente forma
Quién: Las Personas participantes en el proyecto de desarrollo
desempeñando uno o mas Roles