En realidad, existen tantas variaciones en estos procesos como empresas existen. Significado: cada empresa tiene convenciones un poco diferentes a otras, pero existen algunas mejores prácticas comunes que generalmente se utilizan en la mayoría de los lugares.
Mejores prácticas que siempre son útiles
- Todo el código fuente del proyecto y todo lo que se requiere para construirlo está bajo control de versiones (también llamado control de fuente). Cualquiera debería poder construir el proyecto completo con un solo clic.
Además, los archivos innecesarios (archivos de objetos o binarios compilados) no deben agregarse al repositorio, ya que se pueden regenerar con bastante facilidad y solo desperdiciarían espacio en el repositorio.
- Todos los desarrolladores deben actualizar y comprometerse con el control de versiones varias veces al día. Sobre todo cuando han terminado la tarea en la que están trabajando y la han probado lo suficiente como para saber que no contiene errores triviales.
- Nuevamente: cualquiera debería poder construir el proyecto con un solo clic. Esto es importante y facilita la prueba para todos. Gran ventaja si los no programadores (por ejemplo, el jefe) también pueden hacerlo. (Les hace sentir poder ver exactamente en qué está trabajando el equipo).
- Cada desarrollador debe probar la nueva función o corrección de errores que están agregando antes de enviarlas al repositorio.
- Configure un servidor que regularmente (en intervalos predeterminados) se actualice desde el repositorio e intente compilar todo en todo el proyecto . Si falla, envía correos electrónicos al equipo junto con las últimas confirmaciones al control de versiones (desde qué confirmación no se pudo compilar) para ayudar a depurar el problema.
Esta práctica se denomina integración continua y las compilaciones también se denominan compilaciones nocturnas .
(Esto no implica que los desarrolladores no deban compilar y probar el código en sus propias máquinas. Como se mencionó anteriormente, deberían hacerlo).
- Obviamente, todos deberían estar familiarizados con el diseño / arquitectura básica del proyecto, por lo que si se necesita algo, los diferentes miembros del equipo no tienen que reinventar la rueda. Escribir código reutilizable es algo bueno.
- Se necesita algún tipo de comunicación entre los miembros del equipo. Todos deben ser conscientes de lo que hacen los demás, al menos un poco. Mientras más, mejor. Es por eso que el standup diario es útil en los equipos SCRUM.
- La prueba unitaria es una muy buena práctica que hace que probar la funcionalidad básica de su código automáticamente.
- Un software de seguimiento de errores (a veces llamado software de seguimiento del tiempo ) es un medio muy bueno para realizar un seguimiento de los errores que hay y las tareas que tienen los diferentes miembros del equipo. También es bueno para las pruebas: los probadores alfa / beta de su proyecto podrían comunicarse con el equipo de desarrollo de esta manera.
Estas cosas simples aseguran que el proyecto no se salga de control y que todos trabajen en la misma versión del código. El proceso de integración continua ayuda cuando algo sale terriblemente mal.
También evita que las personas envíen cosas que no se compilan en el repositorio principal.
Si desea incluir una nueva función que tardaría días en implementarse y evitaría que otras personas construyan (y prueben) el proyecto, utilice la función de ramas de su control de versiones.
Si eso no es suficiente, puede configurarlo para que también realice pruebas automatizadas, si eso es posible con el proyecto en cuestión.
Algunos pensamientos mas
La lista anterior puede ser muy pesada a primera vista. Le recomiendo que lo siga según sea necesario : comience con un control de versiones y un rastreador de errores, luego configure el servidor de integración continua, si lo necesita. (Si es un proyecto grande, lo necesitará muy pronto). Empiece a escribir pruebas unitarias para las partes más importantes. Si no es suficiente, escribe más.
Algunos enlaces útiles:
Integración continua , Las compilaciones diarias son tus amigos , Control de versiones , Prueba unitaria
Ejemplos:
Para el control de versiones, hoy en día tiendo a usar Git para mis proyectos personales. Subversion también es popular y, por ejemplo, VisualSVN es bastante fácil de configurar si usa un servidor Windows. Para el cliente, TortoiseSVN funciona mejor para muchas personas. Aquí hay una comparación entre Git y SVN.
Para el software de seguimiento de errores, Jira y Bugzilla son muy populares. También usamos Mantis en un lugar de trabajo anterior.
Para el software de integración continua, existe Teamcity para uno (también, CruiseControl y su contraparte .NET son notables).
Responda a su pregunta "¿quién decide el diseño principal del proyecto?"
Por supuesto, ese sería el desarrollador principal.
En las empresas, el desarrollador líder es la persona que habla con la gente de finanzas / marketing del proyecto y decide la arquitectura de acuerdo con la capacidad financiera de la empresa, las características planificadas, los requisitos de los usuarios y el tiempo disponible.
Es una tarea compleja y, por lo general, participan más de una persona. A veces, a los miembros del equipo también se les pide que participen o intercambien ideas sobre el diseño de todo el proyecto o partes específicas.