Diseño de Software

Ubuntu 10.10 Netbook Edition - Software Center...

Ubuntu 10.10 Netbook Edition – Software Center Application (Photo credit: DanieVDM)

El diseño de software es un proceso de resolución de problemas y la planificación de una solución de software. Después de que el propósito y las especificaciones del software están determinados, los desarrolladores de software diseñan o utilizan y desarrollar un plan para una solución. Incluye componentes de bajo nivel y los problemas de implementación de algoritmos, así como la vista arquitectónica.

Visión de Conjunto

El análisis de requisitos de software (SRA) paso de un proceso de desarrollo de software proporciona las especificaciones que se utilizan en la ingeniería de software. Si el software es “semiautomático” o centrado en el usuario, diseño de software puede implicar el diseño de experiencia de usuario dando un story board para ayudar a determinar las especificaciones. Si el software está completamente automatizado (es decir, no hay ningún usuario o interfaz de usuario), un diseño de software puede ser tan simple como un diagrama de flujo o de texto que describe una serie programada de acontecimientos. También hay métodos semi-estándar como Lenguaje de Modelado Unificado y los conceptos fundamentales de modelado. En cualquier caso, parte de la documentación del plan es generalmente el producto del diseño.

Un diseño de software puede ser independiente de la plataforma o específico de plataforma, en función de la disponibilidad de la tecnología llamada por el diseño.

El diseño de software puede ser considerado como poner solución al problema (s) en la mano utilizando las capacidades disponibles. Por lo tanto la diferencia principal entre el análisis de software y diseño es que el resultado del análisis de un problema de software será más pequeños problemas a resolver y no debe desviarse tanto, aún si no se lleva a cabo por diferentes miembros del equipo o incluso totalmente por grupos diferentes. Pero ya que el diseño depende de las capacidades, podemos tener diferentes diseños para el mismo problema en función de las capacidades del medio ambiente que será la sede de la solución (si se trata de otros sistemas operativos, web, móvil o incluso el paradigma de la computación en nube nuevo). La solución dependerá también del entorno de desarrollo utilizado (Si usted construye una solución desde cero o usando marcos fiables (frameworks) o al menos poner en práctica algunos patrones de diseño adecuados)

Temas de diseño de software

 – Conceptos de diseño

Los conceptos de diseño proporcionar el diseñador de software con una base desde la que los métodos más sofisticados se pueden aplicar. Un conjunto de conceptos fundamentales del diseño ha evolucionado. Ellos son:

Abstracción – Abstracción es el proceso o resultado de la generalización mediante la reducción del contenido de información de un concepto o un fenómeno observable, generalmente con el fin de retener la información que es relevante sólo para un propósito particular.

Refinamiento – Es el proceso de elaboración. Una jerarquía es desarrollado por la descomposición de una declaración macroscópica de la función de una manera gradual hasta que los estados de lenguaje de programación se alcanzan. En cada paso, una o varias instrucciones de un programa dado se descomponen en instrucciones más detalladas. Abstracción y refinamiento son complementarios c

Modularidad – Arquitectura de software se divide en componentes llamados módulos.

Arquitectura de Software – Se refiere a la estructura general del software y las formas en que la estructura que proporciona integridad conceptual para un sistema. Una arquitectura de software bien dará un buen retorno de la inversión con respecto a los resultados esperados del proyecto, por ejemplo, en términos de rendimiento, calidad, calendario y coste.

Controlar Jerarquía – una estructura de programa que representa la organización de un componente de programa e implica una jerarquía de control.

Estructural Partitioning – La estructura del programa se puede dividir tanto horizontal como verticalmente. Particiones horizontales definir las distintas ramas de la jerarquía modular para cada función del programa principal. Particionamiento vertical sugiere que el control y el trabajo deben distribuirse de arriba hacia abajo en la estructura del programa.

Estructura de datos – Es una representación de la relación lógica entre los elementos individuales de datos.

Procedimiento de Software – Se centra en el procesamiento de cada módulo individualmente

Ocultación de la información – Los módulos deben ser especificados y diseñados de manera que la información contenida dentro de un módulo no se puede acceder a otros módulos que no tienen ninguna necesidad de esa información.

 – Consideraciones de diseño

Hay muchos aspectos a considerar en el diseño de una pieza de software. La importancia de cada uno debe reflejar los objetivos que el software está tratando de lograr. Algunos de estos aspectos son:

Compatibilidad – El software es capaz de operar con otros productos que están diseñados para la interoperabilidad con otro producto. Por ejemplo, una pieza de software puede ser compatible hacia atrás con una versión anterior de sí mismo.

Extensibilidad – Las nuevas capacidades pueden ser añadidas al software sin grandes cambios en la arquitectura subyacente.

La tolerancia a fallos – El software es resistente a y capaz de recuperarse de fallo del componente.

Mantenibilidad – Una medida de la facilidad con que modificó el software es a través de correcciones de errores o modificaciones funcionales. Mantenibilidad alta puede ser el producto de la modularidad y extensibilidad.

Modularidad – el software resultante comprende bien definidos, componentes independientes. Esto conduce a una mejor capacidad de mantenimiento. Los componentes pueden ser entonces implementado y probado en el aislamiento antes de ser integrados para formar un sistema de software deseado. Esto permite que la división del trabajo en un proyecto de desarrollo de software.

Packaging – Material impreso, tales como la caja y manuales debe coincidir con la forma de presentación para el mercado objetivo y se debe mejorar la usabilidad. Toda la información de compatibilidad debe ser visible en el exterior del paquete. Todos los componentes necesarios para su uso deben ser incluidos en el paquete o se especifica como un requisito en el exterior del paquete.

Confiabilidad – El software es capaz de realizar una función requerida bajo condiciones establecidas por un período especificado de tiempo.

Reutilización – el software es capaz de añadir características adicionales y la modificación con una ligera modificación o no.

Robustez – El software es capaz de operar bajo estrés o tolerar entrada impredecible o no válido. Por ejemplo, puede ser diseñado con una capacidad de resistencia a condiciones de baja memoria.

Seguridad – El software es capaz de soportar actos hostiles e influencias.
Usabilidad – La interfaz de usuario del software debe ser utilizable por su facilidad de destino / audiencia. Los valores predeterminados para los parámetros deben ser elegidos de modo que son una buena elección para la mayoría de los usuarios.

 – Modelado de lenguaje

Un lenguaje de modelado es cualquier lenguaje artificial que se puede utilizar para expresar la información o conocimiento o sistemas en una estructura que se define por un conjunto consistente de reglas. Las reglas se utilizan para la interpretación del significado de los componentes en la estructura. Un lenguaje de modelado puede ser gráfico o textual. Ejemplos de lenguajes de modelado gráfico para el diseño de software son:

Business Process Modeling Notation (BPMN) es un ejemplo de un lenguaje de modelado de procesos.

EXPRESS EXPRESS G-(ISO 10.303-11) es un estándar internacional para fines generales lenguaje de modelado de datos.

Extended Empresa Modeling Language (EEML) se utiliza comúnmente para el modelado de procesos de negocio a través de una serie de capas.

Diagrama de flujo es una representación esquemática de un algoritmo o un proceso por etapas,
Conceptos Fundamentales de modelado (FMC) lenguaje de modelado de software para sistemas intensivos.

IDEF es una familia de lenguajes de modelado, el más notable de los cuales incluyen IDEF0 para el modelado funcional, IDEF1X para el modelado de información, y IDEF5 ontologías para modelado.

Jackson programación estructurada (JSP) es un método para la programación estructurada sobre la base de las correspondencias entre la estructura de flujo de datos y la estructura del programa
LePUS3 es un lenguaje orientado a objetos Descripción visual de diseño y un lenguaje de especificación formal que es adecuado principalmente para el modelado orientado a objetos grandes (Java, C + +, C #) programas y patrones de diseño.

Lenguaje de Modelado Unificado (UML) es un lenguaje de modelado general para describir el software tanto estructural como de comportamiento. Tiene una notación gráfica y permite la extensión con un perfil (UML).

Aleación (lenguaje de especificación) es un lenguaje de propósito general para expresar especificación complejas limitaciones estructurales y de comportamiento en un sistema de software. Proporciona un lenguaje conciso basado en lógica de primer orden relacional.

Modelado de Sistemas Idioma (SysML) es un nuevo lenguaje de propósito general para el modelado de ingeniería de sistemas.

Los patrones de diseño

Un diseñador de software o arquitecto puede identificar un problema de diseño que ha sido resuelto por otros antes. Una plantilla o patrón que describe una solución a un problema común que se conoce como un patrón de diseño. La reutilización de estos patrones puede acelerar el proceso de desarrollo de software, habiendo sido probado y demostrado en el pasado.

Uso

La documentación del diseño del software puede ser crítica o presentado para permitir limitaciones, las especificaciones y requisitos incluso ser ajustado antes de la programación. Rediseño puede ocurrir después de la revisión de una simulación programada o prototipo. Es posible diseñar software en el proceso de programación, sin un plan de análisis o requisito, pero para proyectos más complejos esto no sería considerado un enfoque profesional. Un diseño independiente antes de la programación permite a los diseñadores multidisciplinarios y expertos en la materia (PYME) que colabore con los programadores altamente calificados para el software que es a la vez útil y técnicamente.

Traducción:  en.wikipedia.org/wiki/Software_design

Anuncios

Acerca de Gabriel Niño

Escribo sobre temas que llamen mi atención no siguiendo ninguna regla en particular, gracias por visitarme.
Esta entrada fue publicada en Internet y Web y etiquetada , , , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s