Dicc De Datos
yohaALVAREZ2 de Agosto de 2014
2.728 Palabras (11 Páginas)171 Visitas
La complejidad de los sistemas de software
Según Grady Booch, la complejidad de los sistemas de software se deriva de cuatro elementos:
• Complejidad del dominio del problema: Los problemas que se intentan resolver son inherentemente complejos, con una gran cantidad de requisitos que compiten entre sí. Por ejemplo esto se produce cuando el cliente trata de explicar al desarrollador del sistema lo que el necesita, ya que los dos hablan lenguajes diferentes. el cliente le cuesta mucho dar con precisión los requerimientos que el necesita al programador. En casos muy extremos, el cliente tiene una débil idea de lo que quiere que contenga el software.
• La dificultad de gestionar el proceso de desarrollo: Los desarrolladores de software enfrentan el reto de dar a los usuarios la impresión de simplicidad, esto es reducir al mínimo la complejidad externa. Este reto les obliga a incrementar el tamaño de los sistemas, a inventar mecanismos ingeniosos, o a reutilizar diseños y código ya existentes. La escritura del software o el desarrollo del software requiere de una escritura amplia, en grandes cantidades, y si hay un software anterior mucho mejor ya no mas se toman las bases del mismo, pero para poder realizar esto se necesita a varios programadores que intervengan en el desarrollo, pero también se necesita que este equipo de desarrolladores sea lo más pequeño posible, porque después vienen las complicaciones.
• La posible flexibilidad a través del software: La elaboración de software es una actividad muy laboriosa porque empuja al desarrollador a construir por sí mismo prácticamente todos los bloques fundamentales sobre los que se apoyan las abstracciones de más alto nivel. Esto es propiciado, en gran medida, por la existencia de pocos estándares para el control de calidad. El software desarrollado debe ofrecer flexibilidad para poder expresar cualquier tipo de abstracción. Los sistemas orientados a objetos ofrecen esta flexibilidad, además rendimiento y la funcionalidad requerida para la implementación práctica.
• Los problemas de caracterizar el comportamiento de sistemas discretos: Los comportamientos de la mayoría de los objetos se representan por sistemas analógicos en los que, a través de funciones continuas, pequeños cambios en las entradas siempre producen pequeños cambios en las salidas.
Por el contrario, puesto que el software se ejecuta en computadoras digitales, se tienen sistemas con un número finito de estados discretos. En sistemas grandes, este número puede crecer a cantidades enormes. Como no existen herramientas matemáticas para modelar el comportamiento completo de los grandes sistemas discretos, se debe aceptar la pérdida de cierto grado de confianza en cuanto a que las salidas sean correctas.
Recursos de Software de sistemas complejos
Blanchard considera que un sistema es “una combinación de recursos (como seres humanos, materiales, equipos, software, instalaciones, datos, etc.) integrados de forma tal que cumplan una función específica en respuesta a una necesidad designada de un usuario”. No sólo incluye los recursos utilizados directamente en el cumplimiento de la misión (esto es, equipo principal, software operativo, personal usuario), sino también los diferentes elementos del apoyo (como por ejemplo: equipos de apoyo y prueba, repuestos y requisitos relacionados de inventario, personal de mantenimiento e instalaciones). Esta es una definición genérica que incluye todo tipo de sistemas. Desde sistemas en los que no existen «recursos software» hasta aquellos otros en los que ésos son los elementos fundamentales para conseguir la funcionalidad pretendida. Llamamos recurso software a un programa o conjunto de programas ejecutables que proporcione algunas de las funciones requeridas por el sistema.
Desde esta perspectiva tan amplia, un sistema se considerará como sistema de software cuando sus recursos software constituyan su elemento básico y la fuente de su funcionalidad básica. Dicho de otro modo, cuando en el proceso de desarrollo sean los recursos software los que determinan el proceso general de desarrollo de todo el sistema y cuando su ejecución pueda realizarse sobre una plataforma hardware genérico. La complejidad de un sistema tal y como queda descrito a partir de la definición de Blanchard depende no sólo de las múltiples interacciones entre los recursos de que consta sino también de la forma en la que puede evolucionar en respuesta a las necesidades del entorno. Pues bien, el control de la complejidad de un sistema depende generalmente de las funciones dependientes de sus recursos software y de como éstas se adapten al mundo externo.
En este caso se trata sobre los sistemas de software complejos entendidos como aquellos cuyo desarrollo no es abordable por una única persona y en los que no existe seguridad absoluta de que se han implementado fielmente los requisitos exigidos por el usuario ni de que se ejecuta correctamente. La ingeniería de sistemas de software pretende, justamente, incrementar esta seguridad durante el proceso de desarrollo hasta alcanzar un nivel de confianza similar al existente en otras ingenierías.
Características de los sistemas de Software complejos
Las características más relevantes de los sistemas de software complejos son las siguientes:
a) Tamaño: Intuitivamente todos suponemos que el tamaño condiciona el desarrollo de un sisma. Más difícil es acotar el concepto de tamaño y caracterizar en función de él los sistemas actuales.
La primera decisión reside en determinar en que se aplica el concepto de tamaño. Durante mucho tiempo y aun este concepto se aplica al código fuente (escrito en un lenguaje de programación utilizado por el implementador).
El tamaño final del sistema de software ha sido también empleado para conocer los requisitos de infraestructura de ejecución o comunicación y por comparación con otros sistemas, aspectos de presentaciones en tiempos de ejecución.
No obstante lo anterior, en el desarrollo de un sistema de software en el que hayan empleado generadores de código (programas especializados que, a partir de una especificación de muy alto nivel de lo que el usuario desea, son capaces de generar código fuente en lenguaje de programación convencional) en el proceso de construcción el tamaño no puede emplearse como una medida relativa del esfuerzo necesario. Si el código es parcialmente generado de forma automática, el esfuerzo del diseñador se desplaza hacia el diseño o la especificación de requisitos del sistema.
b) Vida útil: Aun hoy día, muchos sistemas críticos en la Banca, Defensa entre otros fueron concebidos en una época en la que muchas de las técnicas actuales no existían o no eran ampliamente utilizadas.
Es común encontrarse con sistemas con mas de 25 años de vida útil, obviamente, en este periodo han sufrido un sinfín de modificaciones, adiciones y sustituciones de funciones, pero ahí siguen. Que los sistemas tengan larga vida hace que un porcentaje apreciable del esfuerzo y de costes se desplacen desde las fases de desarrollo a las de mantenimiento o evolución del mismo.
El concepto de evolución no debe entenderse como algo negativo. Por el contrario es un elemento básico para asegurar su utilidad futura. Como consecuencia la evolución debe considerarse desde el principio del desarrollo. Téngase presente que no es sencillo controlar la evolución de un sistema de software que no ha sido diseñado para ello.
c) Información manipulada: Todo sistema de software necesita manipular información durante su ejecución; por información entendemos datos, textos, imágenes que deban ser procesados o transmitidos. En alguno de ellos, no obstante, el volumen de información necesario obliga a que la atención en el desarrollo se centre en su captura, almacenamiento estructurado, procesamiento y actualización. Los sistemas complejos requieren que en su arquitectura de estos datos y procedimientos de gestión del mismo.
La gestión de la información no solo implica que un modulo los mantenga sino que puede ser compartida entre varios, estar replicada o distribuida en varios emplazamientos donde el sistema se ejecute y casi siempre requiere de paquetes especializados.
d) Estructura Interna: Un sistema de software posee una estructura interna en el que las funciones a realizar se agrupan en módulos u objetos con cierta interacción entre ellos. Los sistemas de software complejos suelen estar compuestos por módulos que operan concurrentemente entre si y, en muchos casos, sus módulos se ejecutan en lugares geográficos distantes. n
Gran parte de los lenguajes de programación clásicos poseen un conjunto de construcciones cuya finalidad es determinar el orden de ejecución de las instrucciones. Todos ellos comparten la idea de que cada momento solo ejecuta una instrucción. Esta restricción se ha trasladado a las técnicas de diseño limitado el modelado.
En el caso de los sistemas de software complejos, la necesidad de disponer de módulos que actúen concurrentemente o de forma distribuida ya no es ocultable o prescindible. Los diseñadores deben disponer de técnicas que permitan definir y controlar la concurrencia entre módulos del sistema o incluso entre subsistemas diferenciados asegurando que la interacción entre ellos se
...