Tarea: Construcción de los componentes
Disciplinas: ConstruccionConstrucción
Relaciones
Descripción principal

En general esta actividad se enfoca en la construcción de un componente específico, como ser un método, una clase o conjunto de clases (simples y cohesivas). Una parte del diseño del componente se realiza durante esta actividad.

Esta actividad se se repite varias veces durante una iteración e incluso de forma paralela (por ejemplo, por varios desarrolladores que están construyendo varios componentes de forma paralela).

Como recomendación, lo ideal es que esta tarea sea lo más pequeña posible (que el alcance sea bien pequeño). Esto permite que las actividades de construcción de los componentes, las pruebas de componentes (o unitarias) y reconsideraciones de diseño estén estrechamente relacionadas y que se retroalimenten en ciclos cortos.

Pasos
Revisar el diseño, los requerimientos y las pruebas asociadas a los componentes a construir

El primer paso a realizar involucra la revisión de la documentación relacionada con los componentes a construir, esto puede incluir:

En caso de dudas, se puede contactar al analista o a los interesados del proyecto que puedan evacuar dudas sobre la especificación de los requerimientos o los escenarios de negocio. También se puede contactar al arquitecto en caso de dudas con el diseño.


Determinar la estrategia

Determinar la estrategia de cómo se realizará la construcción de los componentes basada en el diseño y las pruebas.

Algunas opciones son:

  • Reutilizar algún componente o código existente (y adaptarlo/configurarlo en caso de ser necesario).
  • Modelar el diseño en detalle (utilizando alguna tecnología en particular) y generar el código fuente a partir del modelo (transformación del modelo). Ejemplo de tecnologías de este tipo puede ser GeneXus.
  • Escribir el código fuente en algún lenguaje de programación en particular.
  • Cualquier combinación de las opciones anteriores.
Escribir el código fuente

Para el caso de que se estén utilizando herramientas de modelado sofisticadas (como GeneXus por ejemplo), una parte del código fuente podrá ser generado a partir del modelo. Dependiendo de la herramienta de modelado, puede pasar que para completar la implementación sea necesario escribir algo de código luego de la transformación del modelo.

Para el caso en que se tenga que escribir código fuente, éste se deberá ajustar al diseño y al comportamiento esperado. Se debe intentar reutilizar y/o generar código automáticamente siempre que sea posible. Sin embargo, para completar la implementación generalmente va a ser necesario escribir algo de código. En tal caso, considerar los siguientes puntos:

  • Revisar los requerimientos relacionados. Debido a que la información de algunos requerimientos no se traduce directamente al diseño, se deben revisar los requerimientos para asegurarse de que los mismos se satisfagan en la implementación.
  • Refactorizar el código para mejorar su diseño interno. La refactorización es una técnica en la que se mejora la calidad del código mediante pequeños cambios seguros. Estos cambios no cambian el comportamiento o funcionalidad del componente, pero facilitan su comprensión y futura evolución/mantenimiento.
  • Mejorar los resultados de la implementación existentes como ser el rendimiento, la interfaz de usuario, la seguridad y otros aspectos no funcionales.
  • Agregar detalles faltantes, como ser: completar la lógica de operaciones/métodos, agregar clases de soporte y estructuras de datos.
  • Manejar las condiciones de borde (ya sea casos de éxito o de error).
  • Mejorar el tratamiento de circunstancias inusuales o estados de error.
  • Restringir el comportamiento (evitando que los usuarios o el código del cliente ejecuten flujos, escenarios o combinaciones de opciones no permitidas).
  • Agregare secciones críticas para código multihilo o reentrante.

Aunque los puntos anteriores enumeran muchas consideraciones diferentes, hay una manera clara de saber cuándo se el código fuente está terminado: la implementación está completa cuando pasa las pruebas de desarrollo. Cualquier otra consideración puede ser tenida en cuenta en una instancia de refactorización sobre el código para mejorarlo posteriormente a estar completo y correcto. Sin embargo, el costo de mejorar y refactorizar el código una vez que ya forma parte de la solución es mucho mayor que al momento de escribirlo por primera vez.

Revisar la implementación

Verificar que la implementación realizada se adecue a su propósito.

Revisar el código para determinar la idoneidad con la cual realiza su función prevista. Este es un paso de aseguramiento de la calidad que realiza adicionalmente al de las pruebas de desarrollo.

Considerar las siguientes estrategias:

  • Programación por pares. Al implementar el código en conjunto con otro desarrollador, el código se evalúa efectivamente a medida que se escribe.
  • Revisar el código buscando errores comunes. Se puede utilizar una lista de verificación (checklist) con los errores más comunes que el desarrollador comete como referencia.
  • Usar herramientas para verificar errores de implementación y código inapropiado. Por ejemplo, un analizador de código estático o configurar el compilador al nivel de advertencia (warning) más detallado.
  • Usar herramientas que puedan visualizar el código. Por ejemplo, las visualizaciones UML en el IDE de Eclipse, ayuda a los desarrolladores a identificar problemas de alto acoplamiento o dependencias circulares.
  • Realizar inspecciones de código informales y específicas. Una buena práctica es pedir a sus compañeros de equipo que revisen pequeñas partes críticas del código o código "entreverado". Evitar revisar grandes partes de código.
  • Trabajar en conjunto con los probadores de software (testers) para asegurarse de que la implementación sea comprobable y comprensible para los recursos de prueba.
  • Mejorar la implementación en función de los resultados de estas evaluaciones.
Comunicar las decisiones importantes

Comunicar el impacto que pudieran tener cambios inesperados en el diseño o en los requerimientos.

Los problemas y limitaciones que se descubran al momento de implementar los componentes deben ser comunicados al equipo. El impacto de los problemas descubiertos durante la implementación debe ser incorporado en las decisiones futuras.

Actualizar los requerimientos (en caso de que corresponda) para reflejar las ambigüedades que se hayan identificado y resuelto en la implementación para que puedan probarse correctamente y se puedan gestionar las expectativas de las partes interesadas adecuadamente. De la misma forma, actualizar el diseño para reflejar las nuevas restricciones y problemas descubiertos durante la implementación para asegurarse de que la nueva información se comunique a otros desarrolladores.

Por lo general, no es necesario realizar una solicitud de cambio si el cambio requerido es menor y es la misma persona quien está diseñando e implementando el/los componente(s) de código. Si el cambio requerido tiene un impacto no despreciable, puede ser necesario comunicar ese cambio al resto de los miembros del equipo a través de una solicitud de cambio.

Factores clave