Esto sucede de una de dos maneras:
“Integración”: en algún momento hacia el final de un proyecto, grandes bloques de código de trabajo / probado son reunidos por sus diversos equipos y se ejecutan como una unidad. Esto generalmente produce algunos problemas: malentendidos sobre las interfaces entre ellos, competencia por los recursos (tiempo de CPU, memoria, etc.) y resalta los errores que no habían encontrado previamente. En general, este tipo de proyecto tiene integración con dispositivos físicos de hardware, por lo que un paso de “integración” es algo inevitable. La integración puede ser fácil si las interfaces entre las partes están realmente bien diseñadas y documentadas, o puede ser la sentencia de muerte de un gran proyecto que deja la integración hasta el final y no le da suficiente tiempo para solucionar los errores.
Sin embargo, esa es la forma pasada de moda.
- ¿Cuál es la arquitectura básica de software de sitios como Weebly y Wix?
- ¿Hay mucho papeleo involucrado en la ingeniería de software?
- ¿Qué se necesitaría para construir un cliente BitTorrent similar a uTorrent?
- ¿En qué idioma de software funcionan los semáforos?
- ¿Cómo maneja la responsabilidad que ha acumulado en un rol de ingeniería?
“Integración continua”: esta es la forma más moderna de proceder. Al comienzo de un gran proyecto, generalmente en las primeras semanas después de que se realiza el trabajo de diseño, todos crean un software llamado “El producto mínimo viable” (MVP). El MVP tiene cada uno de los módulos en su lugar, pero con cada uno haciendo lo menos posible para implementar la interfaz acordada.
Entonces, por ejemplo, en una tienda en línea, hay un módulo que calcula el precio de venta y otro que calcula el costo de envío y un tercero que muestra el precio total y muestra los detalles del producto … también habría otros módulos.
Antes de que la compañía se convierta en grandes equipos de programadores, los ingenieros principales se reúnen en los primeros días del proyecto y definen cómo esas tres piezas de software se hablarían entre sí … ¿usarán redes? ¿Usarán “AJAX”, será una API “RESTful”, nos comunicaremos con XML o JSON?
Luego, cuando se diseñan las interfaces, el equipo de “calcular el precio de venta” escribe tal vez un programa de 10 líneas que devuelve $ 10 como precio, sin importar el código de producto que se le pase. El equipo de “calcular el costo de envío” escribe 10 líneas que devuelven $ 1 por el costo de envío, sin importar cuál sea el producto. El equipo que está escribiendo el código de “pantalla” le pregunta a los otros dos módulos los dos costos, los suma y “muestra” el total junto con una descripción del producto: “Lorem ipsum dolor sit amet …” escribiéndolo como texto ASCII para “Stdout”.
Este código se depura y prueba. ¿La rutina de visualización muestra $ 11 como el costo total? Siaaahhhh!
Una vez que el MVP funciona, cada equipo puede aumentar el personal y comenzar a desarrollar sus propios módulos en detalle. El equipo de “precio de venta” puede configurar una base de datos de precios SQL, consultar eso y devolver un mejor precio. El equipo de visualización agrega algunos elementos de GUI agradables y el equipo de costos de envío escribe el código para averiguar a dónde irá el paquete y cuánto pesa, y consulta los sitios web de USPS / FedEx / UPS para obtener los costos de envío … y el MVP se transforma gradualmente en la final producto de escaparate a medida que cada pequeña pieza pasa gradualmente del código basura al artículo terminado.
Dado que tenemos un MVP, el equipo de precios de venta puede continuar escribiendo su código SQL, incluso antes de que los precios que generan puedan mostrarse de una manera bonita porque ya hay un módulo de “visualización” que funciona … aunque de una manera fea. El equipo de visualización puede consultar un precio y mostrarlo, aunque el precio siempre sea de $ 10.
Muchas empresas utilizan enfoques de “desarrollo ágil”, lo que requiere que cada equipo envíe una versión “funcional” de su código al repositorio del equipo al final de cada período de “sprint” de 2 o 3 semanas. Al comienzo de un nuevo sprint, todos toman el último código del repositorio del otro equipo y trabajan con eso a partir de ese momento. Esto garantiza que no haya sucedido nada desagradable en las interfaces entre subproyectos y que todo el producto será funcional con un máximo de dos semanas de esfuerzo.