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 resolución de problemas y planificación, incluyendo tanto la arquitectura de software de alto nivel como el diseño de componentes y algoritmos de bajo nivel .

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

Proceso general

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

La creatividad, la experiencia previa, el sentido de lo que hace que un software sea "bueno" 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 proporcionan una guía 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 puede revisarse o presentarse para permitir que se ajusten las restricciones, especificaciones e incluso requisitos antes de la codificación . El rediseño puede ocurrir después de una revisión de una simulación programada o un prototipo . 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 que los diseñadores multidisciplinarios y los expertos en la materia (SMEs) colaboren con los programadores para producir software que sea útil y técnicamente sólido.

Análisis de requisitos

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

El resultado del análisis son problemas más pequeños que resolver. En cambio, el diseño se centra en las capacidades, por lo que pueden existir múltiples diseños para el mismo problema. Dependiendo del entorno, el diseño suele variar, ya sea creado a partir de marcos confiables o implementado con patrones de diseño adecuados .

Artefactos

Un proceso de diseño puede incluir la producción de artefactos como diagramas de flujo , casos de uso , pseudocódigos , modelos de lenguaje de modelado unificado y otros conceptos fundamentales de modelado . En el caso del software centrado en el usuario , el diseño puede implicar el diseño de la experiencia del usuario, lo que genera 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 .

Principios 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. Se ha desarrollado 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 que se deben tener en cuenta en el diseño de un software. La importancia de cada consideración debe reflejar los objetivos y expectativas que se pretenden cumplir con 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 coherente 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. Algunos ejemplos de lenguajes de modelado gráfico para el diseño de software son:

Patrones de diseño

Un diseñador de software puede identificar un aspecto de 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 del 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 me hubiera limitado a especificarlo y no hubiera participado plenamente en su implementación inicial. El proceso de implementación me llevó constantemente a preguntas imprevistas y a nuevas ideas sobre cómo podrían mejorarse las especificaciones originales. [11]

Véase 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, Design Requirements Workshop (LNBIP 14), págs. 103-136. Springer-Verlag, pág. 109 doi :10.1007/978-3-540-92966-6_6.
  2. ^ Freeman, Peter; David Hart (2004). "Una ciencia del diseño para 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, EE. UU.: Addison Wesley. ISBN 0-201-89551-X. Recuperado el 30 de enero de 2015 .
  6. ^ Suryanarayana, Girish (noviembre de 2014). Refactorización para el diseño de software . Morgan Kaufmann. pág. 258. ISBN 978-0128013977.
  7. ^ Carroll, John, ed. (1995). Diseño basado en escenarios: visualización del trabajo y la tecnología en el desarrollo de sistemas . Nueva York: John Wiley & Sons. ISBN 0471076597.
  8. ^ Bell, Michael (2008). "Introducción al modelado orientado a servicios". Modelado orientado a servicios: análisis, diseño y arquitectura de servicios . Wiley & Sons. ISBN 978-0-470-14111-3.
  9. ^ Judith Bishop. "Patrones de diseño de C# 3.0: use 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á listo para los patrones de diseño de C#: formas elegantes, aceptadas y probadas 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: un enfoque práctico . McGraw-Hill. ISBN 0-07-365578-3.