El documento presenta los fundamentos para el diseño de software. Explica que el diseño de software es importante para generar modelos del sistema antes de codificar y permite evaluar la calidad. Define conceptos clave como abstracción, modularidad, refinamiento, arquitectura de software, jerarquía de control, estructura de datos y ocultamiento de información. Finalmente, destaca que un buen diseño es esencial para que el sistema cumpla los requerimientos.
2. INTRODUCCION
El diseño de Software es imprescindible al momento de llevar a cabo
el desarrollo de software este da acceso al ingeniero de software para
generar 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.
3. DISEÑO DE SOFTWARE
¿Qué es el Diseño?
“Proceso de aplicar distintas
técnicas y principios con el
propósito de definir un
dispositivo, proceso o sistema
con los suficientes detalles
como para permitir
su realización física” (Según
Taylor)
El diseño es la parte central de la ingeniería del
software. Durante el diseño se desarrollan, revisan y
se documentan los refinamientos progresivos de las
estructuras de datos, de la estructura del programa y
de los detalles procedimentales. El diseño da como
resultado representaciones cuya calidad puede ser
evaluada.
El Diseño de software, consiste en definir y
formalizar la estructura del sistema con el
suficiente detalle como para permitir su
realización física.
4. FUNDAMENTOS PARA EL DISEÑO
DE SOTFWARE
1. ABSTRACCION
2. MODULARIDAD
3. REFINAMIENTO
2. ARQUITECTURA DEL SOFTWARE
3. JERARQUIA DE CONTROL
4. ESTRUCTURA DE DATOS
5. PROCEDIMIENTOS DE SOFTWARE
6. OCULAMIENTO DE INFORMACION
5. ABSTRACCION
Durante el proceso de diseño se debe
aplicar el concepto de abstracción en todos
los niveles de diseño.
Por ejemplo, para el sistema de control de
acceso del tema anterior tenemos:
En un primer nivel aparecen abstracciones
tales como Tarjeta, Mensajes, Órdenes, etc.
Inicialmente todos ellos son elementos
abstractos y su diseño se puede realizar sin
tener en cuenta al Sistema de Control de
Acceso concreto en el que se utilizaran. Con
esto conseguimos:
Facilitar los cambios futuros.
Posibilidad de reutilizarlo en diversos
sistemas.
En un segundo nivel aparecen nuevas
abstracciones como Clave, Control de Puerta,
Comprobar Clave, etc. a los cuales se
aplicaran los mismos criterios.
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.
6. En el diseño de los elementos software se pueden utilizar fundamentalmente tres formas de abstracción:
ABSTRACCIONES
Funcionales:
Sirven para crear
expresiones o acciones
parametrizadas mediante el
empleo de funciones o
procedimientos
Tipos abstractos
Sirven para crear los nuevos tipos de datos que se necesitan para
abordar el diseño del sistema. Por ejemplo, un tipo Tarjeta para
guardar toda la información relacionada con la tarjeta utilizada: clase
de tarjeta, identificador, clave de acceso, datos personales, etc.
Máquinas abstractas
Permiten establecer un
nivel de abstracción
superior a los dos
anteriores y en él se
define de una manera
formal el comportamiento
de una maquina. Un
ejemplo de este tipo de
abstracción seria un
intérprete de SQL para la
gestión de una base de
datos.
7. MODULARIDAD
Es el atributo particular del software
que permite que un programa sea
manejable de manera intelectual.
Se divide el software en componentes
identificables y tratables por separado,
denominados módulos, que están
integrados para satisfacer los requisitos
del programa.
Esta división permite encargar a
personas diferentes el desarrollo de cada
módulo y que todas ellas puedan trabajar
simultáneamente.
VENTAJAS
Claridad: siempre es más fácil entender y
manejar cada una de las partes de un sistema
que tratar de entenderlo como un todo
compacto.
Reducción de Costos: resulta más barato
desarrollar, depurar, documentar, probar y
mantener un sistema modular que otro que no lo
es, excepto si el número de módulos crece
innecesariamente.
Reutilización: si los módulos se diseñan
teniendo en cuenta otras posibles aplicaciones
resultara inmediata su reutilización.
8. REFINAMIENTO
El refinamiento sucesivo es una primera estrategia de diseño descendente propuesta por Niklaus
Wirth.
La arquitectura de un programa se
desarrolla en niveles sucesivos de
refinamiento de los detalles procedimentales.
Se desarrolla una jerarquía descomponiendo
una función de forma sucesiva hasta que se
llega a las sentencias del lenguaje de
programación.
La declaración describe la función o
la información conceptualmente, pero no
proporciona información sobre el
funcionamiento interno de la función o
sobre la estructura interna de la
información, sino que se va a realizando
sucesivamente, dando cada vez más
detalles.
9. ARQUITECTURA DEL SOFTWARE
La arquitectura del software se
refiere a dos características
importantes del software:
La estructura jerárquica de los
módulos del software
La estructura de los datos
La arquitectura del software se obtiene
mediante un proceso de partición, que relaciona
los problemas del mundo real (definidos en el
análisis de requerimientos) con las soluciones
software para resolver los problemas
software.
PROBLEMA A SER RESUELTO CON SOFTWARE SOLUCION DE SOFTWARE
10. 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.
11. JERARQUÍA DE CONTROL (ESTRUCTURA DEL PROGRAMA)
Representa la organización jerárquica de los módulos de un programa e implica una jerarquía de
control.
La representación de jerarquía se suele representar con diagramas de árbol, aunque también se
pueden utilizar otros tipos de notaciones.
ESTRUCTURA DE UN PROGRAMA
Anchura
Grado de salida
Profundidad
Grado de entrada
Profundidad: Número de niveles de control
Anchura: Amplitud global del control
Grado de salida: Número de módulos que controla un módulo
Grado de entrada: Número de módulos que controlan a un módulo
Visibilidad: Conjunto de componentes del programa que pueden ser
invocados por un módulo (Herencia en entornos de POO). Todos los
objetos serían visibles para el módulo
Conectividad: Conjunto de componentes a los que se invoca
directamente o se utilizan sus datos. (La ejecución de un módulo puede
suponer la ejecución de otro módulo)
12. ESTRUCTURA DE DATOS
La estructura de datos es una representación de la lógica que existe entre los elementos
individuales de información.. La estructura de datos es tan importante como la estructura del
programa en la representación de la arquitectura del software. La estructura de datos dicta la
organización, los métodos de acceso, el grado de asociatividad y las alternativas para el tratamiento
de la información.
Para el diseño deberemos
tener en cuenta las
estructuras fundamentales
que son: Registros,
Conjuntos, Formaciones,
Listas, Pilas, Colas, Árboles,
Grafos, Tablas, Ficheros.
13. PROCEDIMIENTOS DEL SOFTWARE
Procedimiento Dentro De Un
Módulo
El procedimiento debe
proporcionar una especificación
precisa del procesamiento,
incluyendo la secuencia de
sucesos, los puntos concretos
de decisiones, la repetición de
operaciones e incluso la
organización/estructura de los
datos.
Como existe una relación entre
la estructura y el procedimiento,
ya que el procesamiento de un
módulo puede suponer la
llamada a otros módulos. A esto
se le conoce como
representación procedimental
del software por capas
Procedimiento Realizado Por Capas
La estructura del programa define la
jerarquía de control,
independientemente de las
decisiones y secuencias de
procesamiento. El procedimiento del
software se centra en los detalles de
procesamiento de cada módulo
individual
14. OCULTAMIENTO DE INFORMACIÓN
El uso de ocultamiento de información en el diseño facilitará las
modificaciones, prueba y mantenimiento del software, ya que como la
mayoría de los datos y de los procedimientos están ocultos a otras partes
del software, será menos probable que los errores que se introduzcan
durante la modificación se propaguen a otros módulos del software.
es el principio de segregación de las decisiones de diseño en
un programa de computadora que tienen más probabilidades de cambiar,
protegiendo así otras partes del programa de modificaciones extensas si
se cambia la decisión de diseño. La protección implica proporcionar
una interfaz estable que protege el resto del programa de la
implementación (cuyos detalles es más probable que cambien). Escrito
de otra manera, el ocultamiento de información es la capacidad de evitar
que ciertos aspectos de una clase o componente de software sean
accesibles a sus clientes, utilizando características del lenguaje de
programación (como variables privadas) o una política de exportación
explícita.
15. DISEÑO ORIENTADO A OBJETOS
El diseño orientado a objetos (DOO) es una fase de
la metodología orientada a objetos para el desarrollo de
software.
Su uso induce a desarrolladores y programadores a pensar
en términos de objetos y responsabilidades, en vez de
procedimientos, cuando planifican el código.
Un objeto agrupa datos encapsulados y procedimientos para
representar una entidad. La "interfaz del objeto", esto es, las
responsabilidades del objeto, también se definen en esta
etapa.
Un programa orientado a objetos se caracteriza por la
interacción de esos objetos.
16. MANTENIMIENTO DE SOFTWARE
el mantenimiento de software es la modificación de
un producto de software después de la entrega,
para corregir errores, mejorar el rendimiento, u otros
atributos. El mantenimiento del software es una de las
actividades más comunes en la ingeniería de software.
El mantenimiento de software es también una de las
fases en el ciclo de vida de desarrollo de sistemas
(SDLC, sigla en inglés de system development life
cycle), que se aplica al desarrollo de software. La fase
de mantenimiento es la fase que viene después del
despliegue (implementación) del software en el campo.
17. CONCLUSION
El diseño del Software es esencial para la capacidad del sistema ya que este
puede desempeñar o no el total de requerimientos establecidos. Una falta en la
etapa de diseño puede traer problemas en todo el proyecto y provocar que este
caiga en una espiral de continuos cambios y de rehacer constantemente el
trabajo. A raíz de esto es que se deben realizar diversas pruebas para comprobar
si el Software desarrollado cumple con los estándares de calidad y garantía,
además de establecer una conclusión mas firme y saber si cumplirá con su
objetivo de manera optima o necesitaría mas complementos y desarrollo.