You are on page 1of 6

Ingenieria del software. Diseño.

FASE IV. DISEÑO DEL SISTEMA. GENERALIDADES

1.-FUNDAMENTOS DEL DISEÑO DEL SOFTWARE.

Concluida las primeras fases de la metodología (definición del problema, estudio


de viabilidad, y análisis) en las que se ha especificado con todo detalle el modelo lógico
del sistema nuevo, vamos a empezar a construirlo, primero mediante su diseño de alto
nivel, y después el diseño de bajo nivel o de detalle. Algunas metodologías consideran
estas dos actividades incluidas dentro de una fase llamada DISEÑO. Sin embargo
nosotros consideraremos dos fases que denominaremos Diseño del sistema y Diseño
detallado. Todo lo que tratemos en los siguientes apartados se refiere al proceso general
de diseño del nuevo sistema. El Diseño del sistema o diseño de alto nivel o diseño
preliminar se centra en la transformación de los requisitos de datos y la arquitectura del
software. El diseño detallado o de bajo nivel se centra en la construcción detallada de la
estructura de los datos y la representación algorítmica del software.

Si el analista debe asegurarse que ha entendido los requerimientos del usuario, el


diseñador debe asegurar que dichos requerimientos se puedan implantar. Así, el
objetivo del diseñador es producir un modelo o representación del sistema que se va a
construir. El proceso de desarrollo del modelo se lleva a cabo mediante la intuición y la
experiencia, así como mediante un conjunto de criterios que permiten determinar la
calidad de dicho modelo.

Aún siendo la informática una disciplina relativamente moderna, podemos decir


que el diseño ha sido la parte más abandonada de todo el proceso, y no se ha tomado en
serio como una actividad necesaria hasta hace unos treinta años.

A partir de los requisitos del sistema que se han expresado en la fase de Análisis
y nos han llevado a definir el modelo lógico del nuevo sistema, la/s fase/s de diseño
lleva/n a cabo: El diseño de los datos, el diseño arquitectónico, y el procedimental.

El diseño de los datos transforma el modelo obtenido como salida de la fase


anterior en las estructuras de datos que requerirá la implementación.

El diseño arquitectónico define las relaciones entre los elementos estructurales


del programa.

El diseño procedimental transforma los elementos estructurales en una


descripción del software.

Las fases de diseño, implementación ( y prueba) consumen del orden del 75 % o


más del total del coste del proyecto si exceptuamos el mantenimiento. En estas fases se
toman las decisiones que afectarán al éxito del proyecto, en cuanto a su calidad y
facilidad de mantenimiento, ya que, podemos decir, que durante el diseño del sistema se
toman las decisiones que aseguren la calidad del producto. Para evaluarla, se llevan a
cabo diferentes revisiones técnicas (Revisiones técnicas formales).

2.- EVOLUCIÓN DEL DISEÑO.


Ingenieria del software. Diseño. 2

En los últimos 30 años, la actividad de diseño del software ha ido evolucionando


a partir de un origen en el que se le daba importancia mínima:

- Primeramente se siguieron criterios que se centraban en el desarrollo de


programación modular y métodos para el desarrollo descendente del software.
- Estos criterios fueron evolucionando hacia lo que posteriormente se denominó
programación estructurada.
- Los pasos de la evolución siguieron avanzando en la dirección de los métodos
orientados a los flujos de datos y las estructuras de los datos.
- Los nuevos métodos proponen la orientación a objetos para la obtención del
diseño deseado.

Cada metodología de diseño tiene unas características que le son propias en


cuanto a método, notación y control de calidad. Sin embargo, todas las metodologías
tienen características comunes:
- Un mecanismo de traducción de la información a la representación del diseño.
- Una notación para representar los componentes funcionales y sus interfaces.
- Unas normas de refinamiento.
- Unos criterios de evaluación de la calidad.

Independientemente de la metodología, el diseñador (ingeniero de software)


debe de aplicar una serie de conceptos.

M.A. Jackson dijo: ”El comienzo de la sabiduría de un programador de


(ingeniero de software hoy) está en reconocer la diferencia entre obtener un programa
(sistema) que funcione y obtener uno que funcione correctamente”. Los conceptos
fundamentales del diseño de software proporcionan la base para que funcione
correctamente. Estos conceptos son:
Abstracción, Refinamiento, Modularidad, Arquitectura del software, Jerarquía
de control, Estructura de datos, Procedimientos del software, y Ocultamiento de
la información.

Abstracción.
Cuando se considera una solución modular para cualquier problema, pueden
formularse muchos niveles de abstracción. El primer nivel, o nivel superior de la
abstracción, establece una solución en términos amplios usando un lenguaje en
el entorno del problema. En los niveles inferiores se sigue una orientación
dirigida más hacia los procesos y la implementación. Así, de una terminología
orientada al problema, se baja a una terminología orientada a la implementación.

Cada paso de un proceso de Ingeniería del Software es un refinamiento del nivel


de abstracción de la solución. Conforme nos movemos en los diferentes niveles
de abstracción, trabajamos para crear abstracciones de datos y de
procedimientos. Una abstracción procedimental es una cierta secuencia de
instrucciones que tiene una cierta función limitada y específica. Una abstracción
de datos, es una colección de datos que describen un objeto, elemento o
información.
Ingenieria del software. Diseño. 3

Los dos conceptos que se estudian a continuación (refinamientos sucesivos y


modularidad), están muy relacionados con el de abstracción. Conforme evoluciona el
diseño del software, cada nivel de módulos de la estructura del sistema representa un
refinamiento en el nivel de abstracción del software. De esta manera podemos
representar un objeto, elemento o información con deferentes niveles de detalle.

Refinamiento.
Esta es la primera estrategia de diseño descendente propuesta por Wirth (71).
Así la estructura de un programa se desarrolla en niveles sucesivos de
refinamiento. Cada paso del refinamiento implica algunas decisiones de diseño.

Modularidad.
El concepto de modularidad es de los más antiguos en cuanto a su aplicación al
diseño. Consiste en dividir las diferentes partes del software en componentes que
se integran para satisfacer los requerimientos del problema. En cierto modo
podemos decir que la modularidad es un atributo del software que hace que éste
sea intelectualmente manejable, ya que el software monolítico (un gran
programa formado por un solo módulo) es prácticamente inabarcable por un
desarrollador, por tanto conviene dividirlo en partes, incluso utilizando
diferentes niveles de abstracción y refinamientos sucesivos.

Por otra parte, también convine decir que un sistema se puede diseñar de forma
modular, incluso aunque su implementación tenga que ser monolítica, de esta
forma, el diseño tendrá las ventajas y las características relativas a la
modularidad.

Arquitectura del software.


Este concepto se refiere a dos características importantes del software:
- La estructura jerárquica de los componentes procedimentales (módulos).
- La estructura de los datos.

La arquitectura del software se obtiene mediante un proceso de partición que


relaciona los elementos de una solución con partes de un problema del mundo
real definido en el fase de análisis. La siguiente figura representa una transición
entre el análisis y el diseño:

P2 S1 S2 S3
P1
P3 P4
S4 S5
P5

Problema a resolver Solución propuesta

Sin embargo, un problema se puede resolver de diferentes maneras, utilizando


diferentes metodologías de diseño y cada una de las soluciones dadas al diseño
de un problema tendrá distinta estructura, para un mismo conjunto de requisitos.
No hay una respuesta fácil a la pregunta ¿Cual es el mejor?. Sin embargo, hay
características que permiten determinar la calidad de un modo global.
Ingenieria del software. Diseño. 4

Jerarquuía de Control.
Tambien llamada estructura de programa. Representa la organización de los
diferentes componentes del programa (módulos). Este problema corresponde al
diseño detallado, y lo veremos más adelante. Sin embargo, debemos decir que
hay varias notaciones para representar la jerarquía de control: En forma de arbol
o de diagramas jerárquicos.

Estructura de datos.
Es una representación de la relación lógica entre los items de datos. Como
inevitablemente la estructura de la información afectará al diseño procedimental
final, la estructura de los datos es tan importante como la de los programas en la
representación de la arquitectura del software.

La estructura de datos controla la organización, método de acceso, y las


diferentes alternativas de procesamiento para la información.

Procedimientos del software.


Se refiere a los detalles de procesamiento de cada módulo. Es por tanto un
concepto a tener en cuenta en la fase de diseño detallado

Ocultamiento de la información. (Diseño detallado).


El concepto de modularidad lleva al planteamiento de cómo hacer la
descomposición de una solución en el mejor conjunto de módulos. El principio
de ocultamiento de información sugiere que los módulos se han de caracterizar
por decisiones de diseño que los oculten unos a otros. Es decir, los módulos
deben especificarse y diseñarse de forma que la información (procedimientos y
datos) contenida dentro de un módulo sea inaccesible a otros módulos que no
necesitan tal información.

El ocultamiento de la información implica que para conseguir una modularidad


efectiva hay que definir un conjunto de módulos independientes, que se
comuniquen con los otros mediante la información que sea necesaria para
realizar la función del software.

3.- DISEÑO DE DATOS.

Podemos decir que el diseño de los datos es casi la actividad más importante de
las tres que se realizan en la fase de diseño. El impacto de la estructra de datos sobre la
estructura de programa y la complejidad procedimental, hace que el diseño de los datos
tenga una gran influencia en la calidad del software. Las distintas metodologías resaltan
distintos aspectos del diseño de los datos, pero los principios de ocultamiento de la
información y de abstracción de datos son la base de los métodos de diseño de datos.
Independientemente de las técnicas de diseño usadas, los datos bien diseñados pueden
conducir a una mejor estructura de programa, a una modularidad efectiva y a una
complejidad procedimental reducida.
Ingenieria del software. Diseño. 5

Wasserman propuso una serie de principios que se pueden usar para especificar
y diseñar los datos. Entre ellos, podemos citar:
1.- Deben identificarse todas las estructuras de datos y las operaciones que se
han de realizar sobre cada una de ellas.
2.- Debe establecerse y usarse un diccionario de datos para definir el diseño de
los datos y de la aplicación.
3.- Las decisiones de diseño de los datos a bajo nivel debe posponerse hasta el
diseño detallado. - Para el diseño de los datos puede seguirse un procedimiento de
refinamiento sucesivo, ya que un enfoque descendente para el diseño de los datos
proporciona unas ventajas semejates a las del diseño descendente para el diseño del
software.
4.- La representación de una estructura de datos sólo debe ser conocida por los
módulos que hagan uso directo de los datos contenidos en la estructura.
5.-Se debe desarrollar una biblioteca de estructuras de datos útiles y de las
operaciones que se les pueden aplicar. - Las estructuras y sus operaciones deben verse
como un recurso para el diseño de software.

4.- DISEÑO ARQUITECTÓNICO.

Su objetivo es desarrollar una estructura de programa modular y representar las


relaciones de control entre los módulos. Además el diseño arquitectónico mezcla la
estructura de programas y la estructura de datos y define las interfaces que facilitan el
flujo de datos a lo largo del programa. Esta actividad, permite que el desarrollador se
centre primero en las características generales del problema, y más adelante, en los
detalles del mismo.

5.- DISEÑO PROCEDIMENTAL.

Se lleva a cabo despues de haber establecido la estructura del programa y de los


datos. Teóricamente la especificación de los procedimientos, que define los detalles
algorítmicos de la aplicación, se debería hacer en lenguaje natural, pero, esto no es
conveniente por las propias características de éste. El diseño procedimental debe
especificar los detalles de los procedimientos sin ambigüedad, para lo que se han
desarrollado diversos métodos, como ya veremos.
Ingenieria del software. Diseño. 6

6.- ACTIVIDADES A REALIZAR DURANTE LA FASE DE DISEÑO.

a) Adquisición del software y del hardware: El usuario final y la dirección deben


estar involucrados en esta actividad. Las tareas a realizar son:
- Búsqueda de opciones y selección de alternativas técnicas.
- Solicitud de información a los proveedores.
- Estudio de las ofertas recibidas.

b)Desarrollo del diseño físico: Esta actividad debe cumplir los siguientes
objetivos:
- Los usuarios finales deben estar envueltos en el diseño físico.
- El diseño físico debe ser estar de acuerdo con las directivas dadas por la
empresa.
- El diseño debe cumplir completamente los requerimientos expresados en la
fase de análisis.
- Los componentes que se deben diseñar durante esta fase son:
.- Información y datos: Organización y formato de entradas y salidas.
.- Almacenamiento de la información: Definición del formato,
organización y acceso de los ficheros y bases de datos que usará el sistema.
.- Usuarios finales.
.- El equipo físico. Hardware.
.- La especificación completa de los programas.
.- Los controles internos en lo que se refiere a seguridad del sistema.

Las tareas a realizar en esta fase son:


* diseño de los ficheros y las bases de datos.
* Diseño de las salidas.
* Diseño de las entradas.
* Diseño del interfaz de usuario.
* Diseño de métodos y procedimientos: Sistemas en Batch, on-line, centralizado
o distribuido. Esta tarea se refiere a la especificación de “COMO” exactamente
trabajará el nuevo sistema, respondiendo a las preguntas ¿Quien hace qué?, ¿Cuando?,
¿Donde?.....
* Diseño de los programas, de tal manera que una vez realizadas las tareas
anteriores, se puedan dar las especificaciones a los programadores para que puedan
llevar a cabo la codificación. Para ello hay que determinar la estructura de los
programas.
* Revisión del diseño. Antes de presentar el diseño final, hay que preparar un
plan de implementación, y una análisis costes beneficios final. La revisión deberá
hacerse ante los usuarios finales, y la dirección técnica y de gestión...

You might also like