Espacio exclusivo para desarrolladores

Te invitamos a visualizar el contenido y esperamos que te ayude.

¿De que se trata?

Son aquellas que abarcan las bases teóricas de la información y la computación, así como su aplicación en sistemas computacionales.

LTAP

El futuro ingeniero no puede estar ajeno a estos cambios, ya que impactan en el espectro de decisiones que deben tomarse durante el proceso de construcción de software.

¿Qué es PHP?

PHP (acrónimo recursivo de PHP: Hypertext Preprocessor) es un lenguaje de código abierto muy popular especialmente adecuado para el desarrollo web y que puede ser incrustado en HTML.

El gran mundo tecnológico

Conoce y actualizate sobre los ultimos avances.

miércoles, 15 de abril de 2015

Cualidades de diseño y elementos de buen diseño

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

 •  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