0% encontró este documento útil (0 votos)
331 vistas16 páginas

Diseño de Software PDF

Este documento describe los fundamentos del diseño de software. Explica que el diseño de software juega un papel importante en el desarrollo de software al permitir producir modelos del sistema que pueden evaluarse antes de generar código. Define diseño como "el proceso de definición de la arquitectura, componentes, interfaces y otras características de un sistema". Describe conceptos clave como abstracción, acoplamiento, cohesión, modularidad, encapsulamiento y separación de interfaz y aplicación, los cuales son fundamentales para el diseño de software.

Cargado por

Jesus Caro
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
331 vistas16 páginas

Diseño de Software PDF

Este documento describe los fundamentos del diseño de software. Explica que el diseño de software juega un papel importante en el desarrollo de software al permitir producir modelos del sistema que pueden evaluarse antes de generar código. Define diseño como "el proceso de definición de la arquitectura, componentes, interfaces y otras características de un sistema". Describe conceptos clave como abstracción, acoplamiento, cohesión, modularidad, encapsulamiento y separación de interfaz y aplicación, los cuales son fundamentales para el diseño de software.

Cargado por

Jesus Caro
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

IUPSM

DISEÑO DE SOFTWARE

A través de la historia de la ingeniería del software ha evolucionado un


conjunto de conceptos fundamentales de diseño de software, aunque el grado
de interés en cada concepto ha variado con los años, han pasado la prueba del
tiempo ofreciendo cada uno al ingeniero de software fundamentos sobre el cual
pueden aplicarse métodos de diseño más elaborados.

El diseño de Software juega un papel importante en el desarrollo de


software lo cual permite al ingeniero de software producir varios modelos del
sistema o producto de que se va a construir el mismo que forman una especie
de plan de la solución de la aplicación. Estos modelos puede evaluarse en
relación con su calidad y mejorarse antes de generar código, de realizar
pruebas y de que los usuarios finales se vean involucrados a gran escala. El
diseño es el sitio en el que se establece la calidad del software.

Diseño es definido como: "El proceso de definición de la arquitectura,


componentes, interfaces y otras características de un sistema o
componente que resulta de este proceso" [IEEE610.12-90].

Palabras Claves

Definición de Documentos de Software (IEEE)

SQAP: Software Quality Assurance Plan IEEE 730

SCMP: Software Configuration Management Plan IEEE 828

STD: Software Test Documentation IEEE 829

SRS: Software Requirements Specification IEEE 830

SVVP: Software Validation & Verification Plan IEEE 1012

SDD: Software Design Description IEEE 1016

Ing. Yajaira Sanabria


IUPSM

SPMP: Software Project Management Plan IEEE 1058

Fundamentos del Diseño de Software

 Conceptos generales de diseño.

El software no es el único campo donde el diseño se encuentra


inmiscuido. En general podemos ver el diseño como una forma para resolución
de problemas. El problema sin solución definitiva es interesante en términos de
comprensión del diseño. Un numero de otras nociones y conceptos son
también de interés en la comprensión del diseño en su sentido general,
objetivos, limitaciones, alternativas, representaciones y soluciones

 Contexto del diseño de software.

El diseño del software se encuentra en el núcleo técnico de la respectiva


ingeniería y se aplica de manera independiente al modelo de software que se
utilice. Una vez que se analizan y especifican los requisitos, el diseño del
software es la última acción de la ingeniería correspondiente dentro de la
actividad del modelado, la cual establece una plataforma para la construcción
(generación de código y prueba).

"El milagro más común de la ingeniería de software es la transición del


análisis al diseño y del diseño al código" Richard Due

 Proceso del Diseño de Software.

 Diseño Arquitectónico.

El diseño arquitectónico puede representarse al usar uno o más de


muchos modelos diferentes. Los modelos estructurales representan la
arquitectura como una colección organizada de componentes del programa.
Los modelos del marco de trabajo repetible incrementan el grado de
abstracción del diseño al intentar identificar marcos de trabajo repetibles del
diseño arquitectónico que se encuentran en tipos de aplicaciones similares.

Ing. Yajaira Sanabria


IUPSM

El diseño de la arquitectura de software se describe cómo se


descompone y como están organizados los componentes en el software.
[IEEEP1471-00]

 Diseño Detallado.

El diseño detallado se describe el comportamiento específico de estos


componentes.

 Técnicas Permitidas.

 Abstracción

Abstracción es el proceso o el resultado de la generalización de la reducción


del contenido de la información de un concepto o un fenómeno observable, por
lo general, con el fin de conservar únicamente la información que es relevante
para un propósito en particular. Cuando se considera una solución modular a
cualquier problema se pueden exponer muchos grados de abstracción.

En un alto grado de abstracción una solución se establece en términos


generales con el lenguaje del entorno del problema.

En los grados de menor abstracción se proporciona una descripción más


detallada de la solución.

En la medida en que se cambian los diferentes grados de abstracción se


trabaja para crear abstracciones procedimentales y de datos.

Abstracción Procedimental: Se refiere a una secuencia de instrucciones que


tiene una función específica y limitada.

Abstracción de Datos: Es una colección nombrada de datos que describe un


objeto de datos.

 Acoplamiento y Cohesión.
Ing. Yajaira Sanabria
IUPSM

Dentro del modelo de diseño es necesario que las clases de diseño colaboren
con alguna otra.

Es una medida de la interconexión entre los módulos de la estructura de un


programa. Depende de la complejidad de la interfaz entre los módulos, el punto
en el que se entra o se hace referencia al módulo y qué datos pasan a través
de la interfaz. Intentamos conseguir el menor nivel posible de acoplamiento.
Las conexiones sencillas entre los módulos hacen que el software sea más fácil
de entender y menos dado al efecto ola.

Acoplamiento: La fuerza de las relaciones entre los módulos.

Acoplamiento de datos: está subordinado al módulo y se accede a él por


medio de una lista convencional de argumentos a través de la cual se pasan
los datos.

Acoplamiento de marca: cuando en vez de argumentos simples se pasa una


porción de la estructura de datos se pasa por la interfaz del módulo.

Acoplamiento de control: se pasa un indicador de control (una variable que


controla las decisiones en el módulo subordinado).

Acoplamiento externo: cuando los módulos están atados a un entorno


externo al software. Por ejemplo, las I/O y los dispositivos.

Acoplamiento común: varios módulos hacen referencia a un área global de


datos.

Acoplamiento de contenido: un módulo hace uso de datos o de información


de control mantenidos dentro de los límites de otro módulo. Cuando se realiza
una bifurcación hacia la mitad de otro módulo.

Una clase de diseño cohesiva tiene un conjunto de responsabilidades pequeño


y enfocado, y aplica atributos y métodos de manera sencilla de implementar
dichas responsabilidades.

Ing. Yajaira Sanabria


IUPSM

Cohesión: Como están relacionados los elementos que conforman un modulo.

Es una extensión natural del concepto de ocultamiento de la información. Un


módulo con cohesión realiza una sola tarea dentro de un procedimiento de
software, requiriendo poca interacción con los procedimientos que se realizan
en otras partes del programa. Un módulo con cohesión debería hacer una sola
cosa.

Siempre debemos buscar la cohesión más alta, aunque la parte media del
espectro es a menudo aceptable.

Coincidencialmente cohesivo: un módulo que realiza un conjunto de tareas


poco relacionadas las unas con las otras.

Cohesión lógica: realiza tareas relacionadas lógicamente (produce todas las


salidas).

Cohesión temporal: contienen tareas relacionadas por el hecho de que todas


deben hacerse en el mismo intervalo de tiempo.

Cohesión procedimental: cuando los elementos de procesamiento están


relacionados y deben ejecutarse en un orden específico.

Cohesión de comunicación: todos los elementos de procesamiento se


concentran en un área de la estructura de datos.

 La descomposición y la modularización.

Los patrones de arquitectura y diseño de software materializan la modularidad;


es decir, el software se divide en componentes con nombres independientes y
que es posible abordar en forma individual. Estos componentes llamados
módulos se integran para satisfacer los requisitos del problema.

Modularidad: Es el atributo particular del software que permite que un


programa sea manejable de manera intelectual.

Ing. Yajaira Sanabria


IUPSM

Se divide el software en componentes identificables y tratables por separado,


denominados módulos, que están integrados para satisfacer los requisitos del
programa.

Hay un número m de módulos que resultarían en un costo de desarrollo


mínimo, pero no tenemos la sofisticación necesaria para predecir m con
seguridad

 Encapsulación/Ocultar Información

Mediante la agrupación y empaquetado de los elementos y los detalles internos


de una abstracción, haciendo que estos detalles sean inaccesibles.

 Separación de la interfaz y la aplicación

La separación de la interfaz y la aplicación implica la definición de un elemento


especificando una interfaz pública, conoce a los clientes, aparte de los detalles
de cómo se realiza el componente.

 Suficiencia, integridad y primitivismo.

Los métodos asociados con una clase de diseño deben enfocarse en el


cumplimiento de un servicio para la clase.

Temas Claves en el Diseño de Software

A la hora de diseñar software hay una serie de cuestiones fundamentales que


se deben tomar en cuenta. Algunos relacionados con la calidad así como los
concernientes a la dirección como por ejemplo el rendimiento. Además de
cómo se descomponen, organizan los paquetes de los componentes de
software.

Esto es tan fundamental que en todo el proceso de diseño que se debe abordar
de una manera u otra.

Ing. Yajaira Sanabria


IUPSM

"[Aspectos] no suelen ser unidades de descomposición funcional del


software, sino más bien a las propiedades que afectan el desempeño o la
semántica de los componentes en el sistema en diferentes maneras "
(Kic97).

 Concurrencia:

La forma de descomponer el software en los procesos, tareas e hilos tratar


relacionarlos con la eficiencia, la atomicidad, la sincronización, y demás
cuestiones de programación.

 Control y manejo de Eventos

Cómo organizar los datos y el controlar el flujo, manejo de reactivo y temporal


de los acontecimientos a través de diversos mecanismos, tales como la
invocación implícita de llamadas y sus intentos.

 Distribución de Componentes

Cómo distribuir el software en el hardware, cómo los componentes se


comunican, cómo se puede usar una plataforma al utilizarse para hacer frente a
software heterogéneos.

 Error y Gestión de Excepciones Tolerancia a Fallos.

El análisis y la gestión del riesgo son una serie de pasos que ayudan al equipo
del software a comprender y a gestionar la incertidumbre.

Un riesgo es un problema potencial que puede ocurrir o no. Pero sin tener en
cuenta el resultado, realmente es una

buena idea es identificarlo, evaluar su

probabilidad de aparición, estimar

su impacto, y establecer un plan de contingencia por si ocurre el problema.

Ing. Yajaira Sanabria


IUPSM

Una estrategia considerablemente más inteligente para el control del riesgo es


ser proactivo. La estrategia proactiva empieza mucho antes de que comiencen
los trabajos técnicos. Se identifican los riesgos potenciales, se evalúa su
probabilidad y su impacto y se establece una prioridad según su importancia.
Después, el equipo de Software establece un plan para controlar el riesgo. El
primer objetivo es evitar el riesgo, pero como no se pueden evitar todos los
riesgos, el equipo trabaja para desarrollar un plan de contingencia que le
permita responder de una manera eficaz y controlada.

Estructura y Arquitectura de Software

En el sentido estricto, una arquitectura de software es "Una descripción de los


subsistemas y componentes de un sistema de software y las relaciones que
existen entre ellos" (Bus96: c6).

A mediados de 1990, la arquitectura empezó a emerger como una disciplina


más amplia que implica el estudio de las estructuras y las arquitecturas de
software en una forma más genérica, dando ideas interesantes sobre diseño
del software en diferentes niveles de abstracción.

Algunos de estos conceptos son muy útiles durante el diseño arquitectónico


(estilo de arquitectura), de software específico, así como en su diseño de
detalle (nivel inferior, patrones de diseño). Así también para el diseño de
sistemas genéricos lo que lleva a la concepción de las familias de los
programas (conocidas como líneas de productos). La mayoría de estos
conceptos pueden verse como intentos de describir, por tanto la reutilización
del diseño genérico del conocimiento.

El desarrollo de un sistema con gran cantidad de software requiere que este


sea visto desde diferentes perspectivas. Diferentes usuarios (usuario final,
analistas, desarrolladores, integradores, jefes de proyecto...) siguen diferentes
actividades en diferentes momentos del ciclo de vida del proyecto, lo que da
lugar a las diferentes vistas del proyecto, dependiendo de qué interese más en
cada instante de tiempo.
Ing. Yajaira Sanabria
IUPSM

La arquitectura es el conjunto de decisiones significativas sobre:

 La organización del sistema


 Selección de elementos estructurales y sus interfaces a través de los
cuales se constituye el sistema.
 El Comportamiento, como se especifica las colaboraciones entre esos
componentes.
 Composición de los elementos estructurales y de comportamiento en
subsistemas progresivamente más grandes.
 El estilo arquitectónico que guía esta organización: elementos estáticos
y dinámicos y sus interfaces, sus colaboraciones y su composición.

 Estructuras Arquitectónicas y Puntos de Vista.

Durante las diferentes facetas o etapas del software deben ser descritos y
documentados.

"Una vista representa un aspecto parcial de la arquitectura de un software


mostrando las propiedades del sistema de software".

La arquitectura que no debe centrarse únicamente en la estructura y en el


comportamiento, sino que abarque temas como el uso, funcionalidad,
rendimiento, capacidad de adaptación, reutilización, capacidad para ser
comprendida, restricciones, compromisos entre alternativas, así como aspectos
estéticos. Para ello se sugiere una arquitectura que permita describir mejor los
sistemas desde diferentes vistas, donde cada una de ellas es una proyección
de la organización y la estructura centrada en un aspecto particular del sistema.

La vista de casos de uso comprende la descripción del comportamiento del


sistema tal y como es percibido por los usuarios finales, analistas y encargados
de las pruebas y se utilizan los diagramas de casos de uso para capturar los
aspectos estáticos mientras que los dinámicos son representados por
diagramas de interacción, estados y actividades.

Ing. Yajaira Sanabria


IUPSM

La vista de diseño comprende las clases, interfaces y colaboraciones que


forman el vocabulario del problema y de la solución. Esta vista soporta
principalmente los requisitos funcionales del sistema, o sea, los servicios que el
sistema debe proporcionar. Los aspectos estáticos se representan mediante
diagramas de clases y objetos y los aspectos dinámicos con diagramas de
interacción, estados y actividades.

La vista de procesos comprende los hilos y procesos que forman mecanismos


de sincronización y concurrencia del sistema cubriendo el funcionamiento,
capacidad de crecimiento y el rendimiento del sistema. Con UML, los aspectos
estáticos y dinámicos se representan igual que en la vista de diseño, pero con
el énfasis que aportan las clases activas, las cuales representan los procesos y
los hilos.

La Vista de implementación comprende los componentes y los archivos que


un sistema utiliza para ensamblar y hacer disponible el sistema físico. Se ocupa
principalmente de la gestión de configuraciones de las distintas versiones del
sistema. Los aspectos estáticos se capturan con los diagramas de
componentes y los aspectos dinámicos con los diagramas de interacción,
estados y actividades.

La vista de despliegue de un sistema contiene los nodos que forman la


topología hardware sobre la que se ejecuta el sistema. Se preocupa
principalmente de la distribución, entrega e instalación de las partes que
constituyen el sistema. Los aspectos estáticos de esta vista se representan
mediante los diagramas de despliegue y los aspectos dinámicos con diagramas
de interacción, estados y actividades.

 Patrones de Diseño (Patrones Micro arquitectónicos).

"Cada patrón describe un problema que ocurre una y otra vez en nuestro
entorno, así como la solución a este problema, de tal ,modo que esta
solución se pueda aplicar esta solución un millón de veces, sin hacer lo
mismo dos veces" Christopher Alexander.
Ing. Yajaira Sanabria
IUPSM

Los patrones de diseño hacen que sea más fácil reutilizar buenos diseños y
arquitecturas. Al expresar como patrones de diseño técnicas que ya han sido
probadas, las estamos haciendo más accesibles para los desarrolladores de
nuevos sistemas. Los patrones de diseño nos ayudan a elegir las alternativas
del diseño que hacen que un sistema sea reutilizable, y evitar aquellas que
dificultan dicha reutilización.

Los patrones de creación tienen que ver con el proceso de creación, estructural
o de comportamiento.

Calidad en el análisis, diseño y evaluación del software

 Calidad de atributos

Varios atributos son generalmente considerados importantes que permiten


obtener un diseño de software con alta calidad, existen algunas características
que son ( mantenible, portabilidad, probable) y (correctos, robusto). Cabe
destacar que existen diferencias entre calidad de atributos que son
(rendimiento, seguridad, funcionalidad y usabilidad), y los que son (portabilidad,
reutilización, integralidad y pruebas), y las características relacionadas con la
arquitectura (integridad conceptual, correcto, completo).

 Calidad en análisis y evaluación de técnicas

Varias técnicas y herramientas pueden ayudar a mejorar la calidad de diseño


de software:

Diseño de software.- Para este tipo se puede aplicar al diseño de software


informal y semi informal tomando un grupo base, técnicas que permiten
verificar la calidad de diseño de los artefactos que pueden ser (vista de la
arquitectura, diseño -inspección, técnicas y requerimientos).

Análisis estático.- Para este tipo se puede aplicar al diseño de software informal
y semi informal que permite evaluar algo simple utilizando análisis automáticos
de casos de pruebas.
Ing. Yajaira Sanabria
IUPSM

Simulación y prototipos.- Son técnicas dinámicas que permiten evaluar un


diseño la característica de simulación, o la flexibilidad del prototipo.

Diseño de software

Muchas notaciones y lenguajes existen para representar el diseño de artefactos


de software. Algunos describen un diseño estructural organizado, otros
representan el inicio del software. Estas notaciones son generalmente usadas
durante un diseño natural y se pueden usar durante ambos casos. Una
representan notaciones que son usadas en el contexto de específicos métodos
en las estrategias de diseño y métodos de sub áreas, pero estas categorías
son categorizadas en notaciones para describir la estructura estática y la
dinámicas vistas.

Software diseño estrategias y métodos

Existen varias estrategias en el desarrollo del software que permiten mejorar el


diseño de procesos, a diferencia con las estrategias generales, métodos que
son específicos en generar estrategias y proveen notación para ser usados en

Métodos y descripción del proceso. Los métodos utilizados son medias que
permiten transferir conocimiento y como un framework que permiten testear la
ingeniería del software.

 Estrategias generales

Las estrategias generales son usadas en el diseno de procesos son dividios y


refinados permitiendo lograr una alta estracion de datos y información para esto
utilizando heurísticas usando para esto patentes y patentes de lenguajes

Herramienta (gsBase(ie))

Es una herramienta de desarrollo y explotación de propósito general que se


puede utilizar para crear soluciones para ingeniería, cálculo, gestión, diseño

Ing. Yajaira Sanabria


IUPSM

gráfico, educación, etc. Incluye novedosas ideas originales que le harán su


trabajo mucho más fácil.

Permite construir soluciones integrales para empresas (ERP's, CRM's, B2B,


B2C, ...) minimizando el tiempo invertido, recursos hardware y costes de
desarrollo.

La comunicación entre cliente y servidor se puede establecer por redes locales


internas, Internet o redes privadas. Los recursos mínimos de comunicaciones
necesarios hacen posible usar distintas tecnologías de comunicación: ADSL,
GPRS, UMTS, RTB, Frame Relay, 3G, RDSI, etc.

Para diseñar, incluye un IDE (Integrated Development Environment) que


permite crear y modificar aplicaciones de una forma rápida y ágil a la par que
dar soporte a instalaciones

El sistema de programación gsBase incorpora una idea novedosa y original


(ventanas dinámicas) que permite, sin tener conocimientos de programación
orientada a objetos, realizar o diseñar programas con dichas atribuciones de
una forma elegante y resolver problemas de gran complejidad de una forma
muy fácil.

Todos los desarrollos realizados son reutilizables y el sistema permite que en el


desarrollo de aplicaciones, participen grupos de personas (trabajo en grupo
cooperativo). La claridad del lenguaje de programación utilizado permite, sin
problemas, que un técnico pueda interpretar rápidamente lo que otro ha
desarrollado (garantizado).

Para la definición de ventanas dinámicas se usa el nuevo concepto de grupos o


agrupaciones de controles. Los campos de entrada, botones, textos,. de una
determinada ventana de gestión de archivo se definen por grupos, no de forma
individual como hacen la mayoría de lenguajes de programación, en los
problemas del mundo real los controles casi siempre van agrupados (por

Ing. Yajaira Sanabria


IUPSM

ejemplo para una ficha de clientes: datos de identificación, datos económicos,


condiciones de venta, etc).

Gran parte del trabajo de diseño de aplicaciones consiste en la creación de


ventanas para la gestión de archivos (creación de registros, modificación,
selección, borrado, consulta, etc.). gsBase estandariza y generaliza este tipo de
ventanas haciendo su diseño inmediato, el sistema incluye un potente control
de grid, controles de entrada, listas, árboles, chek-boxes, cuadros de radio,
mensajes, imágenes, botones, textos, sliders, etc.

La potente arquitectura cliente/servidor gsBase permite el trabajo concurrente


de miles de usuarios, hablamos de usuarios conectados de forma permanente
al servidor y realizando procesos simultáneos (no se trata de conexiones
esporádicas como ocurre en servidores web). gsBase es por tanto, la mejor
solución para Medianas y Grandes Empresas, por su escalabilidad, potencia,
robustez, seguridad y necesidades mínimas de hardware y comunicaciones.

Los resultados e informes gráficos en gsBase tienen una calidad y potencia


excepcional. Diagramas de barras, de tarta, de líneas o de áreas son
construidos parametrizando una simple función en gsBase. La integración de
dichos elementos en ventanas, informes o documentos es muy sencilla y
funcional.

Ing. Yajaira Sanabria


IUPSM

 Características.

gsBase es un sistema de desarrollo de software para crear aplicaciones cliente-


servidor

Crear todo tipo de aplicaciones para empresas y administración pública

Diseñar sistemas centralizados para trabajo en local y/o remoto o por Internet

Las instalaciones de sus clientes finales podrán ser de 1 a miles de usuarios


concurrentes (Pymes o grandes empresas).

gsBase es la mejor herramienta para crear soluciones ASP (Alquiler de


Software).

 Ventajas.

 Facilidad en diseño: cientos de ideas nuevas para el desarrollo.


 Tiempo mínimo de aprendizaje para el desarrollo.
 Amplios recursos para el aprendizaje en el diseño.
 Posibilidad de partir de aplicaciones ya diseñadas. Una vez adquirido el
diseño, no pagará royalties.
 Evaluación de las aplicaciones on-line trabajando con nuestros
servidores de demostración el tiempo que necesite.
 Posibilidad de dirección de proyectos por parte de nuestros ingenieros
 Accesibilidad a sus datos y aplicaciones a nivel mundial para ejecución o
mantenimiento
 Sistema seguro y automatizado de distribución de sus aplicaciones.

Ing. Yajaira Sanabria


IUPSM

 Mínimos recursos de hardware y comunicaciones.


 Facilidad de instalación y mantenimiento.
 Sistema tolerante a fallos.
 Trabajo en multi-idioma del sistema y sus aplicaciones.
 Posibilidad de vender sus aplicaciones y módulos de aplicaciones
diseñados.
 Publicación en gsBase Resource Center.
 Gestión de licencias automática, es posible deslicenciar en un ordenador
y volver a licenciar en otro.
 Los técnicos de desarrollo no son imprescindibles: lo que uno ha
diseñado, puede mantenerlo otro sin problemas.

Bibliografía

[1] Swebok_Ironman_June_23_ 2004

[2] http://www.info-ab.uclm.es/asignaturas/42530/pdf/M1tema2.pdf

[3] http://es.wikipedia.org/wiki/Ingenier%C3%ADa_de_software

[4] http://www.monografias.com/trabajos28/proyecto-uml/proyecto-uml.shtml

[5] PRESSMAN Roger S., 2005. Ingeniería de Software. Un enfoque práctico.


Sexta edición. 2005, Estados Unidos.

Ing. Yajaira Sanabria

También podría gustarte