¿Cómo los ingenieros de software o codificadores juntan su código para hacer su aplicación?

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.

“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.

Esto sucede todos los días en la mayoría de las compañías de software del mundo. Hoy hablaré sobre las herramientas comunes para esto y lo dividiré en partes.

La parte práctica , tener varios ingenieros contribuyendo con su parte al código, eventualmente haciendo que funcione correctamente después de que todas las piezas estén juntas. Lo más probable es que haya una base de código (o puede decir, un producto). A veces, un producto se divide en varias bases de código, pero incluso si ese es el caso, todos son parte de todo para dar forma al producto.

Hay una cosa llamada control de versiones , herramientas que lo ayudan a controlar, sí, acertó, las versiones de su código. Un buen ejemplo sería Git. Es gratis y es el sistema de control de versiones más aceptado y utilizado.

Ahora, daré un ejemplo práctico que, nuevamente, es ampliamente aceptado pero no obligatorio. Digamos que ambos trabajamos en un producto de software junto con varios otros ingenieros. Hay una cosa llamada rama . Una rama de Git contiene código. Puede tener una cantidad infinita de ramas en su repositorio.

Nuestro repositorio Git tendrá tres ramas por ahora:

  • master : de donde el servidor de producción extrae el código y lo sirve a los clientes en la web.
  • prueba : el código listo para la producción se encuentra aquí, el producto se probará bien antes de ser empujado al maestro para la producción en vivo.
  • desarrollo : rama base para el desarrollo continuo, en la que se basan las otras ramas de características.

“Otras ramas de características, ¿qué?”, Explicaré. Los desarrolladores pueden crear una nueva sucursal. Una nueva sucursal siempre se basará en otra sucursal. Entonces, si un ingeniero comienza a trabajar en un sistema de inicio de sesión de usuario, por ejemplo, creará una rama llamada “característica / inicio de sesión de usuario”, por ejemplo. Esta rama probablemente derivará de la rama de “desarrollo”. En esta rama puede hacer cambios, comprometerlos, empujarlos, etc. Después de terminar su trabajo en el sistema, fusionará su código nuevamente en el desarrollo. A veces puede haber conflictos de fusión (donde varios ingenieros trabajaron en la misma pieza de código, pero eso es demasiado complicado por ahora). Una vez que se haya completado la fusión, o dentro de un marco de tiempo fijo, el código se enviará a “prueba” para la prueba y, finalmente, se enviará a “maestro” y se activará.

Ahora la otra parte, la parte de gestión de proyectos , que realmente varía de una organización a otra. Volveré a dar un ejemplo, de una pequeña empresa. Hay un producto Ese producto tiene un propósito. El CEO, CTO y Product Owner han establecido una meta para el año. Existe una hoja de ruta que establece un marco de tiempo (muy optimista) para ciertas características del producto. El propietario del producto, por ejemplo (o cualquier otra persona que no sea ingeniero), se asegurará de que comprenda cómo aplicar sus motivos al producto. A veces ven cosas que el ingeniero promedio no ve, porque ese no es su trabajo y es mejor escribiendo código. Cosas como el modelo de negocio, el éxito del cliente, el diseño o simplemente cómo quieren que sea el producto. Son una parte importante de la cadena.

El equipo coordinará utilizando herramientas de comunicación directa y gestión de proyectos (Atlassian JIRA, YouTrack, Trello, etc.) y se les asignarán tareas. Estas tareas son representaciones a corto plazo de la hoja de ruta más grande. Las tareas generalmente se convierten en código que crea una nueva característica, mantiene una característica existente o corrige un error en una característica. Existen varias metodologías que se utilizan en la industria, como Agile, SCRUM, Kanban y más.

Ese es el proceso de desarrollo de software, en pocas palabras.

De cualquier manera se compila con éxito. 🙂 Por lo general, hay alguna forma de organización basada en carpetas para los diferentes módulos de una aplicación, para aplicaciones más complejas.

Al hablar entre ellos, al definir interfaces (conexiones) entre el trabajo de cada uno, al tener un buen marco de prueba para garantizar que todo siga compilando y se ejecute correctamente después de que se envíen los cambios a la copia maestra del código.

Comunicándose Incluso si usted y su equipo comprenden el enunciado del problema, su enfoque será muy diferente. Para llegar a un lugar donde tenga una aplicación que funcione, el equipo necesita hablar y acordar cómo ellos y el sistema se hablarán entre sí.

More Interesting

¿Es más difícil convertirse en un ingeniero de software que un probador de software?

¿Debería el archivero informático guardar el malware para futuras investigaciones y análisis?

¿Cuáles son las diversas propiedades de corrección de los modelos de software que se verifican con mayor frecuencia durante la verificación del modelo?

Cómo crear una función de retraso en C o C incrustado

Actualmente estoy implementando Intercom en nuestra plataforma, y ​​me gustaría conocer las experiencias de otras personas con Intercom. ¿Cuáles fueron los problemas con los que te encontraste?

¿Cuál es el mejor curso en software?

¿Qué prácticas ágiles puedes usar con éxito en cualquier tipo de proyecto?

¿Cuál es el futuro de un probador manual en Apple?

¿Se considera ingeniero a una persona con un Certificado de Ingeniería de Software de Harvard Extension School?

¿Alguna vez has visto un prototipo de software "desechable" en realidad desechado cuando llegó el momento de desarrollar el sistema de producción?

¿Cuál es la lista de habilidades que debe tener todo ingeniero de software integrado?

¿Podemos crear un cerebro artificial?

¿Cuál es el proceso que se sigue en las empresas de TI al desarrollar software? ¿Cómo se divide el equipo? ¿Cómo se hace el trabajo en sprints?

¿Cuál es un porcentaje de tarifa justa para un corredor de software que conecta a clientes y desarrolladores?

¿Puedo seguir siendo ingeniero de software si no apruebo los cursos básicos y avanzados de estructuras de datos y algoritmos en la universidad?