¿Cómo trabajan varios programadores en el mismo proyecto al mismo tiempo?

Muchas respuestas sobre los sistemas de control de versiones aquí, sin embargo, creo que esta no es la parte más importante.

Los sistemas de versiones simplemente rastrean el historial, no evitan conflictos. ¡El buen proceso de desarrollo previene conflictos!

En realidad, este es un problema muy grande para muchos equipos: demasiados desarrolladores que trabajan con la base de código única y causan demasiada interferencia. Como resultado, todos se vuelven menos productivos.

Los “conflictos” no están limitados por los “conflictos de fusión de código”. Por ejemplo, si alguien rompe la construcción y todos los demás miembros del equipo no pueden trabajar durante ese período, esto también es una especie de “conflicto”.

Algunas reglas simples a seguir:

  1. Divide la base de código en pequeños módulos. Asigne personas a los módulos, de modo que solo un desarrollador cambie el código de un solo módulo.
  2. Los módulos proporcionan API y dependen de la API de los demás. Esa API debe ser compatible con versiones anteriores. Si necesita cambiar el comportamiento de un método, no modifique el método existente, agregue uno nuevo. De lo contrario, sus compañeros de equipo necesitarán ajustar sus módulos en consecuencia de inmediato.
  3. Mantenga los módulos lo más independientes posible: debería poder desarrollar, probar, construir y liberar su módulo incluso si ningún otro módulo funciona.

Por supuesto, estas son condiciones ideales y, en el caso real, siempre tendrá que comprometerse, pero la idea general sigue siendo la misma: para aumentar la escalabilidad del equipo, debe reducir el acoplamiento. Y demuestra ser la única forma de involucrar a un equipo realmente grande.

Inventamos herramientas de control de fuente solo para este propósito. No es una coincidencia que la misma persona responsable de administrar el equipo de programadores más grande de la historia también haya desarrollado el programa de control de fuente más respetado (por supuesto, es decir Linus Torvalds, el kernel de Linux® y Git).

Sin embargo, normalmente no tendrá a varias personas trabajando precisamente en el mismo módulo o función.

En primer lugar, si alguien depende de una función, los cambios que se realicen nunca deberían afectar a los usuarios de esa función, excepto en casos extraordinarios y raros. “Si un cambio hace que los programas del usuario se rompan, es un error”.

¿Trabajando simultáneamente en el mismo archivo? Por lo general, cada persona trabaja en su propia copia completa del programa, prueba sus cambios y luego envía un parche con los cambios al responsable o al líder del grupo de trabajo para que se integre. Una vez fusionados en la copia de línea de base (o maestra ), cada programador extrae esos cambios.

Qué “sistemas” están en uso, son una cuestión de comunicación o liderazgo de proyecto. Los voluntarios pueden autoorganizarse, donde una organización más grande puede tener varios compañeros de equipo responsables de sus propios módulos (“propiedad del módulo”) o tener algún mecanismo (por ejemplo, un “scrum” diario o similar) para asumir ciertas responsabilidades.

Veamos uno por uno:

  1. A los programadores se les encargaría instrucciones claras sobre qué hacer y cuándo completar. Esto hace que los programadores conozcan sus deberes y responsabilidades. En resumen, es puramente delegar y asignar las tareas al individuo.
  2. La gestión / mantenimiento de la base del código se realiza mediante herramientas como los sistemas de control de versiones, como svn, cvs, git.

3. La comunicación es clave para tener éxito. Los programadores individuales tienen que marcar adecuadamente a sus supervisores inmediatos si no pueden continuar. Cuando el individuo se abstiene de comunicarse, todo el sistema se bloquea.

Cuando usa las herramientas, la comunicación es implícita; Sucede automáticamente.

4. Para que cualquier proceso sea eficiente, como individuo, uno debe comprender su alcance de trabajo, a quién contactar si enfrentan desafíos y cuándo completar las tareas. Con todo esto, el individuo cuando se comunica con su supervisor inmediato con el progreso completo del trabajo diario, entonces se establece el proceso básico.

¡Vota amablemente si esto ayuda!

Por lo general, al usar software de control de versiones como Git, Subversion, Team Foundation Server, etc., el equipo tendría una estrategia de sucursal / fusión.

Para un ejemplo básico, en Git, habría una rama maestra. Cuando se va a implementar una nueva característica, un programador se bifurca de la rama maestra, implementa y compromete la característica, y se fusiona nuevamente con la maestra.

Una mejor versión de esto es usar rebases y ramificaciones. Vea aquí para una guía en profundidad -> http://nvie.com/posts/a-successf

Control de versiones como Git, mantener cosas en muchos archivos diferentes, buena modularidad del código, tener diferentes desarrolladores que trabajen en diferentes características o secciones del código al mismo tiempo, paciencia, comunicación y muchas pruebas.

Los conflictos aún suceden. La ganancia de tener múltiples desarrolladores trabajando en el proyecto no es proporcional al número de desarrolladores. Es menos que eso.

Desarrolle software mejor, juntos. Si no está familiarizado con el control de versiones, y con Git específicamente, GitHub tiene un excelente tutorial sobre cómo comenzar: Configurar Git · Ayuda de GitHub

More Interesting

¿Cuál es el mejor conjunto de herramientas automatizadas para la modernización heredada?

¿Con qué compañías de software y servicios y sitios web son populares y los desarrolladores de software los utilizan?

¿Cómo se pueden reducir los costos de desarrollo de software mediante el uso de comentarios?

¿Cómo se sienten los ingenieros de software de EE. UU. En el Área de la Bahía sobre H1B y Trump?

¿Cuáles son los lenguajes y habilidades de programación más buscados actualmente?

¿Cómo es que Adobe Flash Player nunca tiene competidores? ¿Es este software tan difícil de hacer y actualizar?

¿Podría realmente convertirme en desarrollador de software en algún momento en el futuro cercano?

¿Cuál es el motor de juegos 3D de código abierto más avanzado?

¿Es buena la informática con enfoque en la ciencia de datos? He oído que los programas de ciencia de datos no son buenos porque la ciencia de datos todavía está evolucionando. ¿Cuál es mejor, inteligencia artificial, sistemas inteligentes o ingeniería de software?

¿Es posible diseñar un controlador DMA usando VHDL? ¿Qué software es mejor Xilinx u otros?

¿Cómo es la pista de ingeniería de software del Bloc? ¿Vale la pena la inversión?

¿Qué hace un ingeniero a diario?

Me gustaría diseñar una aplicación. ¿Es necesario aprender conceptos de bases de datos?

¿Qué puedo usar para almacenar información del producto?

¿En qué se diferencian las pruebas de software de la garantía de calidad?