1. Cuando se “escribe” un programa, ¿se diseña software? ¿En qué difieren el diseño de software y la codificación? La diferencia radica en que el diseño de software es un modelo o representación, es el núcleo técnico del proceso de ingeniería del software y se aplica independientemente del paradigma de desarrollo utilizado. Agrupa el conjunto de principios, conceptos y prácticas que llevan al desarrollo de un sistema o producto de alta calidad. Una vez se haya analizado y especificado los requisitos del software en el diseño del software, ya se puede iniciar la fase de codificación. En esta etapa se tienen que traducir dichos algoritmos de diseño a un lenguaje de programación específico.
2. ¿Cómo se evalúa la calidad del diseño del software?
A través del proceso de diseño se evalúa la calidad de éste de acuerdo con la serie de revisiones técnicas que sugiere tres características que funcionan como guía para evaluar un buen diseño:
Debe implementar todos los requerimientos explícitos contenidos en el
modelo de requerimientos y dar cabida a todos los requerimientos implícitos que desean los participantes.
Debe ser una guía legible y comprensible para quienes generan el
código y para los que lo prueban y dan el apoyo posterior.
Debe proporcionar el panorama completo del software, y abordar los
dominios de los datos, las funciones y el comportamiento desde el punto de vista de la implementación.
3. Describa con sus propias palabras la arquitectura de software.
La arquitectura de software es un conjunto de patrones y abstracciones coherentes que proporcionan un marco definido y claro para interactuar con el código fuente del software. En otras palabras 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.
4. Describa con sus propias palabras la separación de problemas. ¿Hay
algún caso en el que no sea apropiada la estrategia de divide y vencerás? ¿Cómo afecta esto al argumento a favor de la modularidad. El concepto de separación de problemas sugiere que cualquier problema complejo puede manejarse con más facilidad si se subdivide en elementos susceptibles de resolverse u optimizarse de manera independiente. Esto quiere decir que al separar un problema en sus piezas más pequeñas y manejables, se requería menos trabajo o esfuerzo y tiempo para resolverlo. No es apropiada la estrategia de divide y vencerás cuando de divide los módulos en forma indefinida. Porque a medida que se incrementa el número de módulos, el esfuerzo (costo) asociado con su integración también aumenta. El costo total de software se incrementa por el número de módulos y por el costo de esfuerzo requerido para cada uno. No se dispone de una herramienta para predecir el número correcto de módulos para un sistema. Afectando esto al argumento a favor de la modularidad.
5. Analice la relación entre el concepto de ocultamiento de información
como atributo de la modularidad efectiva y el de independencia de los módulos. El concepto de ocultamiento de información dice que 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 y que intercambien sólo aquella información necesaria para lograr la función del software; el concepto de independencia de los módulos. Es el resultado directo del ocultamiento de información ya que trata de evitar la interacción excesiva entre módulos.
6. ¿”Rediseñar” significa que se modifica todo el diseño en forma iterativa?
Si no es así, ¿qué significa? 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. Busca de redundancias, elementos de diseño no utilizados, algoritmos ineficientes o innecesarios, estructuras de datos mal construido o inapropiado y cualquier otra falla del diseño que pueda corregirse para obtener un diseño mejor.