Tarea: Diseñar la solución
El propósito de esta actividad es describir los componentes del sistema para que puedan soportar el comportamiento requerido. Deben ser de alta calidad y ajustarse adecuadamente a la arquitectura.
Disciplinas: DiseñoDiseño
Relaciones
Descripción principal

En esta actividad se especifica el diseño detallado de una parte del sistema, no del sisstema como un todo. Debe tomar como entrada un pequeño subconjunto de los requerimientos del sistema. Los requerimientos que impulsan el diseño pueden ser requerimientos funcionalesl (basados ​​en escenarios de uso u otro tipo), requerimientos no funcionales, o una combinación de ambos.

Esta actividad se puede realizar en algún contexto específico, como ser especificar los elementos de acceso a la base de datos necesarios para algún escenario de uso del sistema. En este caso, la actividad podría aplicarse nuevamente más tarde para tratar un contexto diferente con los mismos requerimientos (por ejemplo, el diseño de la interfaz de usuario). Tener en cuenta que para construir un requerimiento que sea de valor para los usuarios, en general todos los contextos deberán diseñarse e implementarse. Por ejemplo, para completar una parte de la funcionalidad del sistema, debe diseñarse e implementarse en todos sus contextos (perspectivas o aspectos), incluida la interfaz de usuario, las reglas de negocio, el acceso a la base de datos, etc.

Para mayor cohesión e integridad, esta actividad se describe como un paso end-to-end (de punta a punta) para diseñar un requerimiento de uso del sistema. En la práctica, esta tarea se realizará de forma repetida, a medida que implementen porciones de código, se realice más diseño en función de lo aprendido, etc. Es recomendable que esta actividad se realice de forma muy cercana a la implementación del software.

Si se está diseñando un elemento o componente relevante a la arquitectura, se debe referenciar a este diseño en la descripcion de la arquitectura.

Pasos
Revisar y entender los requerimientos en detalle

Examinar los casos de uso relevantes y la especificación de requerimientos para comprender el alcance y las expectativas de la actividad de diseño a realizar. Se debe trabajar con los interesados del proyecto y los analistas para aclarar la información ambigua o faltante. 

Si se determina que los requisitos son incompletos o incorrectos, se debe trabajar en conjunto con los analistas, interesados y usuarios para mejorar los requerimientos y potencialmente requerir una solicitud de cambio para actualizar o refinar los requerimientos.

Revisar y comprender la arquitectura

Revisar la descripción de arquitectura para identificar cambios y mejoras a la arquitectura. Ver Directriz: Trabajar en conjunto con el arquitecto en caso de existir alguna incertidumbre sobre la comprensión de las partes relevantes de la arquitectura o sobre la estrategia de diseño.

Este paso se puede omitir si no hubo cambios en la arquitectura en la iteración anterior.

Identificar los elementos a diseñar

Identificar qué elementos deben colaborar para proporcionar el comportamiento requerido por los requerimientos. Una buena estrategia es comenzar con las abstracciones clave identificadas en la descripción de la arquitectura, el diseño, la especificación de requerimientos (filtrado de sustantivos) para derivar los elementos que se necesitarían para cumplir con los requerimientos.

Los elementos existentes del diseño actual deben examinarse para ver si deben participar en la colaboración con los nuevos a diseñar. Es un error diseñar todos los elementos nuevos en cada ejecución de esta actividad.

Determinar la forma de colaboración de los elementos a diseñar

Se debe revisar el requerimiento o escenario a diseñar, distribuyendo las responsabilidades a los elementos participantes, asegurándote de que tengan las relaciones necesarias para colaborar o comunicarse entre sí.

Estas responsabilidades pueden ser simples declaraciones de comportamiento asignadas a elementos, no necesitan ser especificaciones de métodos/funciones detalladas con parámetros, etc. Del mismo modo, las relaciones solo se pueden definir en este paso. Este paso consiste en garantizar que se cree un modelo de calidad que sea lo suficientemente robusto como para cumplir con los requerimientos.

Revisar la descripción de la arquitectura y el diseño actual para crear una colaboración consistente. Trabajar con el arquitecto para comprender los detalles y las motivaciones de la arquitectura. Reutilizar los comportamientos o relaciones existentes o aplicar una estructura similar para simplificar el diseño del sistema general.

Diseñar el comportamiento interno de los elementos grandes o complejos
Se recomienda diseño con más detalle los componentes grandes o con gran complejidad interna. Esto podría implicar el diseño de un algoritmo que podría ser necesario para cumplir con el comportamiento. Puede ser útil diseñar detallar los diferentes estados del elemento en el transcurso de su vida útil para garantizar su correcto comportamiento en diversos contextos. Puede ser útil describir una máquina de estados en estos casos.
Comunicar el diseño

Se debe comunicar el diseño del sistema a todos los interesados que necesiten entenderlo (en particular a los desarrolladores). Trabajar en colaboración siempre es mejor que revisar el diseño una vez que está completo.

Pueden utilizarse algunas de las siguientes alternativas de especificación del diseño para comunicarlo:

  • Modelos formales especificados en UML.
  • Diagramas informales que representan la estructura estática y capturan el comportamiento dinámico.
  • Código anotado que comunica información sobre la estructura estática (esto se puede complementar con descripciones textuales del comportamiento colaborativo entre los módulos de código).
  • Modelos de datos para describir el esquema de la base de datos.

Ejemplos de roles que necesitarán comprender el diseño del sistema:

  • Desarrolladores que implementarán una solución basada en el diseño.
  • Arquitectos que pueden revisar el diseño para asegurarse de que se ajusta y es coherente con la arquitectura (o incluso pueden ser oportunidades de mejora para la misma).
  • Otros diseñadores que pueden evaluar la aplicabilidad del diseño a otras partes del sistema.
  • Desarrolladores u otros diseñadores que trabajarán en otras partes del sistema que dependerán de los elementos diseñados en esta actividad.
  • Otros revisores que evaluarán la calidad del diseño y adherencia a los estándares/políticas de la organización.
Evaluar el diseño

Evaluar el diseño en relación al acoplamiento con otros componentes, la cohesión y otras medidas de calidad de diseño.

Considar varias perspectivas desde las cuales evaluar el diseño, para asegurarse de que sea un diseño de alta calidad. Trabajar con otros miembros del equipo técnico. Una parte independiente puede proporcionar una nueva perspectiva. Trabaje en conjunto con el especialista de calidad y el arquitecto para proporcionar perspectivas sobre la calidad del diseño y la adherencia a la arquitectura.

Al momento de identificar potenciales revisores del diseño, se recomienda tener en cuenta que si alguien puede agregar valor al revisar el diseño, entonces tal vez podrían haber agregado aún más valor al participar activamente en el trabajo de diseño en sí. Si se identifican defectos de diseño, los mismos deben ser corregidos mejorando el diseño.

Factores clave