CICLO DE VIDA DESARROLLO DE SOFTWARE: ETAPA DE DISEÑO
von María José Gutierrez Fonseca
1. Definición
1.1. 2. m. Proyecto, plan que configura algo. 3. m. Concepción original de un objeto u obra destinados a la producción en serie.
1.2. El diseño de software agrupa el conjunto de principios, conceptos y prácticas que llevan al desarrollo de un sistema o producto de alta calidad.
2. Clases de diseño
2.1. Pueden desarrollarse cinco tipos diferentes de clases de diseño, cada una de las cuales representa una capa distinta de la arquitectura del diseño. • Clases de usuario de la interfaz. Definen todas las abstracciones necesarias para la interacción humano-computadora (IHC). En muchos casos, la IHC ocurre dentro del contexto de una metáfora (por ejemplo, cuaderno de notas, formato de orden, máquina de fax, etc.) y las clases del diseño para la interfaz son representaciones visuales de los elementos de la metáfora. • Clases del dominio de negocios. Es frecuente que sean refinamientos de las clases de análisis definidas antes. Las clases identifican los atributos y servicios (métodos) que se requieren para implementar algunos elementos del dominio de negocios.
2.2. • Clases de proceso. Implantan abstracciones de negocios de bajo nivel que se requieren para administrar por completo las clases de dominio de negocios. Clases de diseño • Clases persistentes. Representan almacenamientos de datos (por ejemplo, una base de datos) que persistirán más allá de la ejecución del software. • Clases de sistemas. Implantan las funciones de administración y control del software que permiten que el sistema opere y se comunique dentro de su ambiente de computación y con el mundo exterior.
3. CONCEPTOS DE DISEÑO
3.1. “El principio de la sabiduría [para un ingeniero de software] es reconocer la diferencia que hay entre hacer que un programa funcione y lograr que lo haga bien”. Los conceptos fundamentales del diseño del software proveen la estructura necesaria para “hacerlo bien”. Abstracción Cuando se considera una solución modular para cualquier problema, es posible plantear muchos niveles de abstracción. En el más elevado se enuncia una solución en términos gruesos con el uso del lenguaje del ambiente del problema. En niveles más bajos de abstracción se da la descripción más detallada de la solución.
3.2. Arquitectura La arquitectura del software alude a “la estructura general de éste y a las formas en las que ésta da integridad conceptual a un sistema”. En su forma más sencilla, la arquitectura es la estructura de organización de los componentes de un programa (módulos), la forma en la que éstos interactúan y la estructura de datos que utilizan. Sin embargo, en un sentido más amplio, los componentes se generalizan para que representen los elementos de un sistema grande y sus interacciones. Patrones Un patrón de diseño describe una estructura de diseño que resuelve un problema particular del diseño dentro de un contexto específico y entre “fuerzas” que afectan la manera en la que se aplica y en la que se utiliza dicho patrón.
3.3. Ocultamiento de información El principio del ocultamiento de información sugiere que los módulos se “caractericen por decisiones de diseño que se oculten (cada una) de las demás”. En otras palabras, deben especificarse y diseñarse módulos, de forma que la información (algoritmos y datos) contenida en un módulo sea inaccesible para los que no necesiten de ella. Independencia funcional El concepto de independencia funcional es resultado directo de la separación de problemas y de los conceptos de abstracción y ocultamiento de información. Debe diseñarse software de manera que cada módulo resuelva un subconjunto específico de requerimientos y tenga una interfaz sencilla cuando se vea desde otras partes de la estructura del programa. Es lógico preguntar por qué es importante la independencia. Rediseño Una actividad de diseño importante que se sugiere para muchos métodos ágiles es el rediseño, técnica de reorganización que simplifica el diseño (o código) de un componente sin cambiar su función o comportamiento. El rediseño es el proceso de cambiar un sistema de software en forma tal que no se altera el comportamiento externo del código [diseño], pero sí se mejora su estructura interna.
4. ¿Por qué es importante?
4.1. El diseño permite modelar el sistema o producto que se va a construir. Este modelo se evalúa respecto de la calidad y su mejora antes de generar código; después, se efectúan pruebas y se involucra a muchos usuarios finales. El diseño es el lugar en el que se establece la calidad del software.
4.2. ¿Cuáles son los pasos?
4.3. 1. En primer lugar, debe representarse la arquitectura del sistema o producto. 2. Después se modelan las interfaces que conectan al software con los usuarios finales, con otros sistemas y dispositivos, y con sus propios componentes constitutivos. 3. Por último, se diseñan los componentes del software que se utilizan para construir el sistema.
4.4. ¿Cuál es el producto final?
4.5. El trabajo principal que se produce durante el diseño del software es un modelo de diseño que agrupa las representaciones arquitectónicas, interfaces en el nivel de componente y despliegue.
5. ¿Qué es el diseño de software?
5.1. El diseño es lo que casi todo ingeniero quiere hacer. Es el lugar en el que las reglas de la creatividad se unen para formular un producto o sistema. El diseño crea una representación o modelo del software, pero, a diferencia del modelo de los requerimientos, el modelo de diseño proporciona detalles sobre arquitectura del software, estructuras de datos, interfaces y componentes que se necesitan para implementar el sistema
5.2. ¿QUIEN LO HACE?
5.3. Ingenieros de software llevan a cabo cada una de las tareas del diseño.