stringtranslate.com

Diseño de software

El diseño de software es el proceso de conceptualizar cómo funcionará un sistema de software antes de implementarlo o modificarlo. [1] El diseño de software también se refiere al resultado directo del proceso de diseño: los conceptos de cómo funcionará el software, que consisten tanto en documentación de diseño como en conceptos no documentados.

El diseño de software generalmente está dirigido por objetivos para el sistema resultante e implica planificación y resolución de problemas, incluida tanto la arquitectura de software de alto nivel como el diseño de algoritmos y componentes de bajo nivel .

En términos del proceso de desarrollo en cascada , el diseño de software es la actividad que sigue la especificación de requisitos y antes de codificar . [2]

Proceso general

El proceso de diseño permite al diseñador modelar varios aspectos de un sistema de software antes de que exista.

La creatividad, la experiencia pasada, el sentido de lo que constituye un "buen" software y el compromiso con la calidad son factores de éxito para un diseño competente. Sin embargo, el proceso de diseño no siempre es un procedimiento sencillo.

El modelo de diseño de software se puede comparar con un plano arquitectónico de una casa. Los planos de alto nivel representan la totalidad de la casa (por ejemplo, una representación tridimensional de la casa). Los planos de nivel inferior brindan orientación para construir cada detalle (por ejemplo, la instalación de plomería). De manera similar, el modelo de diseño de software proporciona una variedad de vistas de la solución de software propuesta.

Valor

La documentación de diseño de software se puede revisar o presentar para permitir que se ajusten las restricciones, especificaciones e incluso requisitos antes de la codificación . El rediseño puede ocurrir después de la revisión de una simulación o prototipo programado . Es posible diseñar software en el proceso de codificación, sin un plan o análisis de requisitos, [3] pero para proyectos más complejos esto es menos factible. Un diseño separado antes de la codificación permite a los diseñadores multidisciplinarios y expertos en la materia (PYME) colaborar con los programadores para producir software que sea útil y técnicamente sólido.

Análisis de requerimientos

Un componente del diseño de software es el análisis de requisitos de software (SRA). SRA es parte del proceso de desarrollo de software que enumera las especificaciones utilizadas en ingeniería de software .

El resultado del análisis son problemas más pequeños a resolver. Por el contrario, el diseño se centra en las capacidades y, por tanto, pueden existir múltiples diseños para el mismo problema. Dependiendo del entorno, el diseño a menudo varía, ya sea que se cree a partir de marcos confiables o se implemente con patrones de diseño adecuados .

Artefactos

Un proceso de diseño puede incluir la producción de artefactos tales como diagramas de flujo , casos de uso , pseudocódigo , modelo de lenguaje de modelado unificado y otros conceptos fundamentales de modelado . Para el software centrado en el usuario , el diseño puede implicar un diseño de la experiencia del usuario que genere un guión gráfico para ayudar a determinar esas especificaciones.

A veces el resultado de un proceso de diseño es la documentación del diseño .

Criterios de diseño

Los principios básicos de diseño permiten a un ingeniero de software navegar por el proceso de diseño. Davis [4] sugiere un conjunto de principios para el diseño de software, que se han adaptado y ampliado en la siguiente lista:

Conceptos de diseño

Los conceptos de diseño proporcionan al diseñador una base a partir de la cual se pueden aplicar métodos más sofisticados. Ha evolucionado un conjunto de conceptos de diseño que incluyen:

En su modelo de objetos, Grady Booch menciona la abstracción , la encapsulación , la modularización y la jerarquía como principios fundamentales del diseño de software. [5] El acrónimo PHAME (Principios de Jerarquía, Abstracción, Modularización y Encapsulación) se utiliza a veces para referirse a estos cuatro principios fundamentales. [6]

Consideraciones de diseño

Hay muchos aspectos a considerar en el diseño de un software. La importancia de cada consideración debe reflejar los objetivos y expectativas para los cuales se está creando el software. Algunos de estos aspectos son:

Lenguaje de modelado

Un lenguaje de modelado se puede utilizar para expresar información, conocimiento o sistemas en una estructura definida por un conjunto consistente de reglas. Estas reglas se utilizan para la interpretación de los componentes dentro de la estructura. Un lenguaje de modelado puede ser gráfico o textual. Ejemplos de lenguajes de modelado gráfico para diseño de software incluyen:

Patrones de diseño

Un diseñador de software puede identificar un aspecto del diseño que otros han visitado y quizás incluso resuelto en el pasado. Una plantilla o patrón que describe una solución a un problema común se conoce como patrón de diseño . La reutilización de dichos patrones puede aumentar la velocidad de desarrollo de software. [9]

Código como diseño

La dificultad de utilizar el término "diseño" en relación con el software es que, en cierto sentido, el código fuente de un programa es el diseño del programa que produce. En la medida en que esto sea cierto, "diseño de software" se refiere al diseño del diseño. Edsger W. Dijkstra se refirió a esta superposición de niveles semánticos como la "novedad radical" de la programación informática, [10] y Donald Knuth utilizó su experiencia escribiendo TeX para describir la inutilidad de intentar diseñar un programa antes de implementarlo:

T E X habría sido un completo fracaso si simplemente lo hubiera especificado y no hubiera participado plenamente en su implementación inicial. El proceso de implementación me llevó constantemente a preguntas imprevistas y a nuevos conocimientos sobre cómo se podrían mejorar las especificaciones originales. [11]

Ver también

Referencias

  1. ^ Ralph, P. y Wand, Y. (2009). Una propuesta para una definición formal del concepto de diseño. En Lyytinen, K., Loucopoulos, P., Mylopoulos, J. y Robinson, W., editores, Taller de requisitos de diseño (LNBIP 14), págs. Springer-Verlag, pág. 109 doi :10.1007/978-3-540-92966-6_6.
  2. ^ Hombre libre, Peter; David Hart (2004). "Una ciencia del diseño de sistemas intensivos en software". Comunicaciones de la ACM . 47 (8): 19-21 [20]. doi :10.1145/1012037.1012054. S2CID  14331332.
  3. ^ Ralph, P. y Wand, Y. Una propuesta para una definición formal del concepto de diseño. En Lyytinen, K., Loucopoulos, P., Mylopoulos, J. y Robinson, W., (eds.), Ingeniería de requisitos de diseño: una perspectiva de diez años: Springer-Verlag, 2009, págs. 103-136
  4. ^ Davis, A: "201 principios de desarrollo de software", McGraw Hill, 1995.
  5. ^ Booch, Grady; et al. (2004). Análisis y diseño orientado a objetos con aplicaciones (3ª ed.). MA, Estados Unidos: Addison Wesley. ISBN 0-201-89551-X. Consultado el 30 de enero de 2015 .
  6. ^ Suryanarayana, Girish (noviembre de 2014). "Refactorización para olores de diseño de software ". Morgan Kaufman. pag. 258.ISBN 978-0128013977.
  7. ^ Carroll, John, ed. (1995). Diseño basado en escenarios: visión del trabajo y la tecnología en el desarrollo de sistemas . Nueva York: John Wiley & Sons. ISBN 0471076597.
  8. ^ Campana, Michael (2008). "Introducción al modelado orientado a servicios". Modelado orientado a servicios: análisis, diseño y arquitectura de servicios . Wiley e hijos. ISBN 978-0-470-14111-3.
  9. ^ Judith Obispo. "Patrones de diseño de C# 3.0: utilice el poder de C# 3.0 para resolver problemas del mundo real". Libros de C# de O'Reilly Media . Consultado el 15 de mayo de 2012 . Si desea acelerar el desarrollo de sus aplicaciones .NET, está preparado para los patrones de diseño de C#: formas elegantes, aceptadas y comprobadas de abordar problemas de programación comunes.
  10. ^ Dijkstra, EW (1988). "Sobre la crueldad de enseñar realmente ciencias de la computación" . Consultado el 10 de enero de 2014 .
  11. ^ Knuth, Donald E. (1989). "Notas sobre los errores de TeX" (PDF) .

^ Roger S. Pressman (2001). Ingeniería de software: el enfoque de un profesional . McGraw-Hill. ISBN 0-07-365578-3.