Al diseñar un sistema informático se tienen en cuenta los cinco elementos fundamentales que componen el hardware: la unidad aritmético-lógica, la unidad de control, la memoria, la entrada y la salida. La unidad aritmético-lógica realiza operaciones aritméticas y compara valores numéricos. La unidad de control dirige el funcionamiento de la computadora recibiendo instrucciones del usuario y transformándolas en señales eléctricas que puedan ser comprendidas por los circuitos del ordenador. La combinación de la unidad aritmético-lógica y la unidad de control se denomina unidad central de procesamiento, o CPU (siglas en inglés). La memoria almacena instrucciones y datos. Las secciones de entrada y salida permiten respectivamente que la computadora reciba y envíe datos. Sin embargo se necesitan arquitecturas diferentes de hardware debido a las necesidades especializadas de los distintos sistemas y usuarios.
Además del diseño del hardware, se debe considerar los sistemas operativos que harán funcionar el sistema. El software, como los lenguajes de programación y los sistemas operativos, hace que los detalles de la arquitectura del hardware resulten invisibles para el usuario. Sin embargo la Arquitectura de Software define los aspectos estructurales como una composición de componentes, las estructuras globales de control, los protocolos de comunicación, la sincronización y acceso a los datos, la asignación de la funcionalidad a los elementos del diseño, la composición de estos elementos, su distribución física, su escalabilidad y su desempeño
A continuación se va a tratar el temas de cualidades de diseño y elementos de buen diseño de software, abarcando, diseño de datos, diseño arquitectónico, diseño de interfaz y diseño de procesamiento.
Para
lograr un buen diseño de software se deben tomar en cuentan los ciertos
lineamientos:
o
Debe tener una arquitectura (empleo
de estilos o patrones arquitectónicos)
o
Debe ser modular (dividido de manera
lógica en elementos o subsistemas)
o
Debe contener distintas
representaciones de datos, arquitectura, interfaces
o
Debe conducir a estructuras de datos
apropiadas para las clases a implementar
o
Debe contener independientes
componentes que tengan características funcionales
o
Debe conducir a interfaces que
reduzcan la complejidad de las conexiones entre los componentes y el ambiente
externo.
o
Debe obtenerse con el uso de un
método motivado por la información obtenida durante el análisis de los
requerimientos del software
o
Debe representarse con una notación
que comunique con eficacia su significado
- Diseño
Diseño
como verbo "diseñar" se refiere al proceso de creación y desarrollo
para producir un nuevo objeto o medio de comunicación (objeto, proceso,
servicio, conocimiento o entorno) para uso humano. Diseñar requiere
principalmente consideraciones funcionales y estéticas. Esto necesita de
numerosas fases de investigación, análisis, modelado, ajustes y adaptaciones
previas a la producción definitiva del objeto. Además comprende multitud de
disciplinas y oficios dependiendo del objeto a diseñar y de la participación en
el proceso de una o varias personas.
- Diseño de Software
·
Es una descripción de la estructura del
software que se va a implementar, los datos que son parte del sistema, las
interfaces entre los componentes del sistema, y algunas veces, los algoritmos
utilizados.
·
Los diseñadores no obtienen inmediatamente un
diseño detallado, sino que lo desarrollan de manera iterativa a través de
diversas versiones.
·
El proceso de diseño incluye agregar
formalidad y detalles durante el desarrollo del diseño, y regresar a los
diseños anteriores y corregirlos.
- En el diseño de Software están:
1. Diseño de datos transforma el modelo de dominio de la información, creado
durante el análisis, en las estructuras de datos necesarias para implementar el
software.
Primeramente la Influencia de la estructura de datos
en la estructura del programa y en la complejidad de los procedimientos,
también la ocultación de la información y Abstracción Datos bien diseñados
conducen a mejor estructura del programa en cuanto a la Modularidad efectiva y
Reducción de la complejidad procedimental.
·
Principios de
Wasserman (1996) para el diseño de datos:
-Los principios
sistemáticos del análisis aplicado a la función y al comportamiento también
deben aplicarse a los datos.- Deben identificarse todas las estructuras de
datos y las operaciones que se han de realizar sobre cada una de ellas.-Debe
establecerse y usarse un diccionario de datos para definir el diseño de los
datos y del programa-Deben posponerse las decisiones de datos de bajo nivel
hasta el diseño detallado - 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- Se debe desarrollar una biblioteca de estructuras de datos
útiles y de las operaciones que se les pueden aplicar -El diseño del software y
el lenguaje de programación deben soportar la especificación y la realización
de tipos abstractos de datos.
2. Diseño arquitectónico:
define la relación entre los principales elementos estructurales del programa.
Los sistemas grandes
siempre se descomponen en subsistemas que suministran algún conjunto
relacionado de servicios. El proceso de
diseño inicial para identificar estos subsistemas y establecer un marco de
trabajo para el control y comunicación de los subsistemas se llama diseño
arquitectónico y lo que produce este proceso de diseño es una descripción de la
Arquitectura de Software. La descomposición arquitectónica es necesaria para
estructurar y organizar la especificación.
Arquitectura del sistema de software
Se
obtiene mediante un proceso de partición que relaciona los elementos de una
solución de software con partes de un problema del mundo real definido
implícitamente durante el análisis de los requisitos. La solución aparece
cuando cada parte del problema está resuelta mediante uno o más elementos de
software. El diseño y la especificación completa de la estructura de los
sistemas de software, según Shaw y Garlan (Shaw y Garlan, 1996), se está
transformando en un aspecto de más importancia que la escogencia de los
algoritmos y las estructuras de datos, en virtud del tamaño y la complejidad de
estos es la actualidad. Diseñar la arquitectura del software, según estos
mismos autores, es definir los aspectos estructurales como una composición de
componentes, las estructuras globales de control, los protocolos de
comunicación, la sincronización y acceso a los datos, la asignación de la
funcionalidad a los elementos del diseño, la composición de estos elementos, su
distribución física, su escalabilidad y su desempeño.
La arquitectura
define al sistema en términos de elementos computacionales y de las
interacciones entre ellos. La arquitectura muestra la correspondencia entre los
requerimientos de sistemas y los elementos del sistema construido, proveyendo
así una exposición racional para las decisiones de diseño.
• ELEMENTOS
COMPUTACIONALES: Son entidades tales como clientes, servidores, bases de
datos, filtros y capas de un sistema jerárquico. Son además, una parte
encapsulada del sistema de software, donde cada uno tiene una interfaz.
• INTERACCIONES:
Ocurren entre los elementos a nivel de diseño, pudiendo ser tan simples como
las llamadas a procedimientos o variables de acceso, o tan complejas y
semánticamente ricas como los protocolos del modelo cliente/servidor, los
protocolos de acceso a las bases de datos (Shaw y Garlan, 1996).
• Una relación,
además denota una conexión entre los componentes. Una relación puede ser
estática o dinámica.
– Relaciones
estáticas. Se muestran en el código fuente, ellas reflejan la colocación de los
componentes dentro de la arquitectura.
– Relaciones
dinámicas. Tratan con las conexiones temporales y las interacciones dinámicas
entre los componentes. Ellas no son fácilmente visibles a partir del código
fuente.
• PROPIEDAD
FUNCIONAL. Tiene que ver con un aspecto de la funcionalidad del sistema, como
su nombre lo indica. Está usualmente relacionada con un requerimiento.
• PROPIEDAD NO
FUNCIONAL. Trata de una característica del sistema que no está cubierta en la
descripción funcional del mismo. Típicamente se refiere a aspectos tales como
confiabilidad, compatibilidad, costo, facilidad de uso, etc.
Cualidades de los diseños de las arquitecturas
Cualidades de los diseños de las arquitecturas
• Conformidad funcional: Según Pressman (Pressman, 1998) una
arquitectura de calidad debe implementar todos los requisitos explícitos
contenidos en el modelo de análisis debe acomodar todos los requisitos
implícitos que desea el cliente. Además, debe proporcionar una idea completa de
que es el software, enfocando los dominios de los datos, las funciones y los
comportamientos. Según Lawrence (Lawrence, 1998) la arquitectura del software
le dice a los usuarios exactamente lo que el sistema de software hará.
• Adaptabilidad. Esta característica
la propone (Sommerville, 1998) al señalar que ella mide cuan fácil es hacer
cambios en una arquitectura; de seguro, esto implica componentes poco
acoplados. En su opinión, un sistema de software adaptable tiene una alta
trazabilidad; esto quiere decir, que hay una relación clara entre los
diferentes niveles de abstracción.
·Modularidad: Sin considerar el enfoque de
diseño utilizado (estilo arquitectural) (Lawrence, 1998), el proceso de
descomposición separa el diseño en partes que lo componen, llamadas módulos o
componentes. Se dice que un sistema es modular cuando cada actividad del
sistema de software es ejecutada exactamente por un componente y cuando las
entradas y las salidas de los componentes están bien definidas. Los módulos se
organizan jerárquicamente como resultado de la descomposición.
• Abstracción: La noción
psicológica de abstracción permite concentrarse en un problema a un nivel de
generalización independiente de los detalles de nivel inferior, la abstracción
también permite trabajar con conceptos y términos que son familiares en el
entorno del problema sin tener que transformarlos en una estructura poco
familiar. Cada fase del proceso de ingeniería del software es un refinamiento
en el nivel de abstracción de la solución software. Finalmente se alcanza el
nivel inferior de abstracción cuando se construye el código. Propone tres (3)
niveles de abstracción: – Abstracción procedimental. Es una secuencia dada de
instrucciones que tiene una función específica y limitada. – Abstracción de
datos. Es una colección determinada de datos que describen un objeto de datos.
– Abstracción de control. Implica un mecanismo de control del programa sin
especificar detalles internos.
·
Entendible: Sommerville (Sommerville, 1998)
señala que un sistema antes de hacerle un cambio debe ser entendido. En su
opinión este entendimiento estará afectado por: La cohesión, el acoplamiento,
la nominación, la documentación y la complejidad; inclusive, señala que la
complejidad tiene una relación directa con su fácil entendimiento.
•Cohesión: Es una consecuencia
del ocultamiento de la información. Un módulo con cohesión (Pressman, 1998)
realiza solamente una tarea, requiriendo poca interacción con el resto de los
procedimientos que se realizan en el resto del sistema de software. Según
Sommerville (Sommerville, 1998) la cohesión es deseable debido a que una unidad
(componente) representa una parte simple de solución. Si es necesario cambiar
el sistema, la parte correspondiente está en un solo lugar y lo que se desee
hacer con él estará encapsulado en él. Según Lawrence (Lawrence, 1998) la meta
es hacer que los componentes sean lo más cohesivos posible
·
Acoplamiento: Está relacionado con la
cohesión. Es un indicador de la fuerza de interconexión entre los componentes o
elementos de la arquitectura (Sommerville, 1998). Sistemas altamente acoplados
tienen una fuerte interconexión, lo que se refleja en una gran dependencia
entre los componentes. Los sistemas poco acoplados, por otro lado, tienen poca
relación entre sus componentes o elementos. La meta (Lawrence, 1998) es
mantener el acoplamiento en el nivel más bajo posible; la conectividad sencilla
entre módulos da como resultado un software que es más fácil de comprender y
menos propenso al “efecto onda” (Stevens et al., 1975) producido cuando los
errores aparecen en una posición y se propagan a lo largo del sistema.
·
Rediseño: Se examina el código existente en busca de
redundancias, elementos no utilizados, algoritmos ineficientes o innecesarios ,
estructuras de datos mal construidas, ect
·
Patrones: Un patrón de diseño describe una estructura de
diseño que resuelve un problema particular dentro de un contexto específico. Se
debe tomar en cuenta si el patrón es aplicable al trabajo que se realiza, si
puede volverse a usar y si sirve de guía para desarrollar un patrón distinto en
estructura.
3. Diseño de interfaz:
describe cómo se comunica el software consigo mismo, con los sistemas que
operan con él y con los operadores que lo emplean.
El diseño de
interfaz de usuario o ingeniería
de la interfaz es el
diseño de computadoras,
aplicaciones, máquinas, dispositivos de comunicación móvil, aplicaciones de software, y
sitios web enfocado en la experiencia de usuario y la interacción.
Su objetivo es que las aplicaciones o los objetos sean
más atractivos y además, hacer que la interacción con el usuario sea lo más
intuitiva posible, conocido como el diseño centrado en el usuario. En este
sentido las disciplinas del diseño industrial y gráfico se encargan de que la
actividad a desarrollar se comunique y aprenda lo más rápidamente, a través de
recursos como la gráfica, los pictogramas, los estereotipos y la simbología,
todo sin afectar el funcionamiento técnico eficiente. Internet es
un medio de comunicación donde la ninterfaz tiene un papel fundamental en el
entorno gráfico. Una vez definida la interfaz de usuario como espacio que media
la relación de un sujeto, un ordenador o sistema interactivo, se produce una
interrelación entre el usuario, sistema o el dispositivo, permitiendo a este
(usuario) manejar o interactuar en función de lo que busca
Cualidades para el Diseño de Interfaces de Usuario:
- Anticipación: Las
aplicaciones deberían intentar anticiparse a las necesidades del usuario y
no esperar a que el usuario tenga que buscar la información, recopilarla o
invocar las herramientas que va a utilizar.
- Autonomía: La
computadora, la IU y el entorno de trabajo deben estar a disposición del
usuario. Se debe dar al usuario el ambiente flexible para que pueda
aprender rápidamente a usar la aplicación. Sin embargo, está comprobado
que el entorno de trabajo debe tener ciertas cotas, es decir, ser
explorable pero no azaroso.
·
Percepción del Color: Aunque se utilicen convenciones
de color en la IU, se deberían usar otros mecanismos secundarios para proveer
la información a aquellos usuarios con problemas en la visualización de colores
- Valores por Defecto: No
se debe utilizar la palabra "Defecto" en una aplicación o
servicio. Puede ser reemplazada por "Estándar" o "Definida
por el Usuario", "Restaurar Valores Iniciales" o algún otro
término especifico que describa lo que está sucediendo. Los valores por
defecto deberían ser opciones inteligentes y sensatas. Además, los mismos
tienen que ser fáciles de modificar.
Elementos de diseño de una interfaz
Elementos
|
Caracteristicas
|
Contexto
|
Distribución y diseño del sitio
|
Contenido
|
Contenido Texto, imágenes, sonido y video que
contiene el sitio
|
Comercio
|
Capacidades del sitio para permitir las
transacciones comerciales
|
Comunidad
|
Formas en que el sitio permite la comunicación de
usuario a usuario a usuario
|
Comunicación
|
. Comunicación Formas en que el sitio permite la
comunicación de sitio a usuario, de usuario a sitio o en ambas direcciones
|
Conversión
|
Capacidad del sitio para adaptarse a distintos
usuarios o permitir que los usuarios lo personalicen
|
Conexión
|
Grado en el que el sitio está vinculado a otros
|
4.
Diseño procedimental:
transforma elementos estructurales de la arquitectura del programa en una
descripción procedimental de los componentes de software.
Un componente de software individual
es un paquete de software, un servicio web, o un módulo que encapsula un
conjunto de funciones relacionadas (o de datos).La reusabilidad es una importante característica
de un componente de software de alta calidad. Los programadores deben diseñar e
implementar componentes de software de una manera tal que diversos programas
puedan reutilizarlos. Además, cuando los componentes de software interactúan
directamente con los usuarios, debe ser considerada la prueba de usabilidad
basada en componentes. Toma un significativo esfuerzo y conciencia para
escribir un componente de software que sea efectivamente reutilizable. El
componente necesita estar: completamente documentado, probado a fondo y tiene
que ser robusto - con una comprensiva comprobación para la validez de la
entrada, capaz de devolver mensajes de error apropiados o códigos de retorno,
diseñado con conciencia de que será puesto en usos imprevistos
CONCLUSIÓN
Para lograr un buen diseño de software se deben tomar en cuentan los ciertos lineamientos:
- Debe tener una arquitectura (empleo de estilos o patrones arquitectónicos)
- Debe ser modular (dividido de manera lógica en elementos o subsistemas)
- Debe contener distintas representaciones de datos, arquitectura, interfaces
- Debe conducir a estructuras de datos apropiadas para las clases a implementar
- Debe contener independientes componentes que tengan características funcionales
- Debe conducir a interfaces que reduzcan la complejidad de las conexiones entre los componentes y el ambiente externo.
- Debe obtenerse con el uso de un método motivado por la información obtenida durante el análisis de los requerimientos del software
- Debe representarse con una notación que comunique con eficacia su significado
BIBLIOGRAFIA
Pérez Maria A. Mendoza M. Luis. SISTEMAS DE INFORMACIÓN II TEORÍA. Documento en línea. Disponible en: http://prof.usb.ve/lmendoza/Documentos/PS-6116/Teor%EDa%20PS6116%20Arq.%20de%20Software.pdf
Documento disponible en línea en: http://www.arqhys.com/construccion/diseno-elementos.html
Documento disponible en línea en:http://www.ciens.ucv.ve:8080/genasig/sites/disist/archivos/clase2.pdf
Documento disponible en línea: http://es.slideshare.net/landeta_p/1-3-ingenieria-software-y-patrones-de-diseo





