¿Se pueden aplicar los principios de desarrollo basados ​​en pruebas para construir una arquitectura de software?

TDD no le dirá qué componentes construir. Pero puede usar los principios TDD para perfeccionar su arquitectura. Sin embargo, el uso de los principios TDD es más beneficioso si no considera que la “arquitectura” está limitada al diseño del software.

La cuestión es que cada vez que construyes algo, comienzas a hacer suposiciones. Estás confiando en tu instinto para hacer esas suposiciones. En un modelo de desarrollo de Waterfall, pasaste tiempo durante la fase de análisis haciendo POCs para examinar esas suposiciones.

Sin embargo, cuando se encuentra en un mundo ágil, no desea realizar costosos esfuerzos de POC por adelantado, porque es probable que las suposiciones que haya investigado puedan cambiar. En cambio, debe pensar en examinar sus suposiciones en un ecosistema que emplea Entrega Continua. Realiza una suposición, construye el sistema a partir de la suposición, la lanza a producción y luego ve si tu suposición es válida en el mundo real. Si no lo hace, revierte, o vuelves a diseñar. Agile se basa en su capacidad para realizar pequeños cambios de forma iterativa y rápida. Esto le permite diseñar su sistema como una iteración de experimentos: – hipotetizar, implementar, observar. Claro, no puedes construir todo de esta manera, y debes tomar algunas decisiones importantes por adelantado. Sin embargo, puede posponer las pequeñas suposiciones hasta que necesite

Entonces, ¿cómo ayuda TDD? Bueno, si va a hacer suposiciones arquitectónicas y lanzar código experimental a la producción basado en suposiciones, es mejor que se asegure de que sus experimentos no afecten la propuesta comercial de su producto … o si lo hacen, debe saber immeditelt Entonces, por ejemplo, supongamos que tiene 2 enfoques para un algoritmo que hace que su sitio venda más Widgets, y no puede decidir entre los 2, usted construye 1 y lo lanza a producción. Una vez lanzado, debe poder medir qué tan bien está funcionando ese algoritmo y recopilar métricas.

Esto es esencialmente TDD a nivel arquitectónico. Cada vez que hace una suposición, diseña una prueba que prueba la suposición. Implementa esa prueba junto con la implementación de la función. Una vez que la función se lanza a producción, ejecuta las pruebas que le indican si sus suposiciones se mantienen.

Existen otras técnicas de entrega continua que pueden ayudarlo en esto. Por ejemplo, puede usar pruebas A / B. Puede lanzar una función implementada en base a una suposición a A, y luego ejecutar sus pruebas en A antes de lanzarla al público en general. Si está utilizando bliki: BlueGreenDeployment, puede ejecutar sus pruebas mientras mueve los usuarios de Azul a Verde. Si las pruebas fallan, puede comenzar a moverlas nuevamente a Azul.

Creo que estás confundiendo la estrategia técnica y las tácticas de implementación.
TDD es una forma de gestionar el riesgo durante un proceso de implementación, mientras que la arquitectura de software es una actividad centrada en el diseño de sistemas de información que cumplan con la funcionalidad y la forma predefinidas.

More Interesting

¿Cuál es el CGPA mínimo requerido para una maestría en ingeniería de software en Canadá?

¿Cuáles son las habilidades clave que busca en un desarrollador de software?

¿Cuál es la diferencia entre un modelo utilizado en ingeniería de software orientado a objetos y un diagrama UML? ¿Cómo se asocian?

¿Cuál es el equipo de desarrollo de SugarCRM más grande?

¿Por qué seguí siendo rechazado después de una entrevista in situ para el rol de ingeniero de control de calidad en Silicon Valley?

Para el desarrollo de software, ¿en qué circunstancias se debe utilizar el pensamiento funcional y en qué situación se debe utilizar el pensamiento orientado a objetos?

¿Cuál de las metodologías SDLC es más adecuada para un proyecto relacionado con la seguridad del hogar?

¿Cómo decido entre CS o EE?

¿Qué es mejor: desarrollador de juegos o ingeniero de software?

¿Puedo hacer una entrevista con Java incluso si no tengo experiencia en Java en mi currículum (C / C ++, SystemVerilog) para un puesto de ingeniero de software?

¿Es común que las grandes empresas contraten ingenieros de software para escribir aplicaciones especializadas para su empresa?

¿Cuál es el mejor software para que un principiante aprenda a ingresar a la industria de efectos visuales?

¿Por qué hay fotos de animales o pájaros en la portada de los libros de software?

¿Es mejor codificar con el equipo que administra o administrar un equipo que codifica?

¿Cómo entrar en el desarrollo de software de las pruebas? ¿Puede sugerir qué habilidades se necesitan en función de la tendencia actual en la industria de TI?