En mi primer trabajo como desarrollador de software, mi equipo utilizó agile / scrum para administrar nuestro flujo de trabajo del proyecto y funcionó bastante bien. Tenía algunos mentores experimentados que me pusieron en el camino correcto: les debo una gran deuda de gratitud. Trabajé allí durante algunos años, luego pasé a una nueva oportunidad hace un par de meses.
Avance rápido a mi trabajo actual. Trabajo en una universidad bajo la dirección de un profesor. Como estoy en una universidad, casi todos los programadores son estudiantes (¡son baratos y abundantes!) Mi jefe tiene experiencia en administración, pero no en desarrollo de software, y el equipo de software no siempre está en la mente de mi jefe . Estas condiciones han creado el entorno perfecto para crear software de muy baja calidad. Los proyectos de software parecen funcionar un poco deshonesto, no han pensado en diseñar y han empleado algunas prácticas realmente aterradoras. Sé que las cosas podrían ser mejores.
Quiero implementar un proceso de desarrollo para ayudar a todos a encaminar, aumentar la calidad del código e implementar un software más estable. No estoy seguro de por dónde empezar.
Estoy no buscando, por ejemplo, para las respuestas como "Uso Scrum", "constituirá una comisión de Kanban", o "Tome un vistazo a ágiles!" (aunque las ideas son apreciadas). Más específicamente, espero obtener información sobre cómo implementar un proceso de desarrollo para este entorno de trabajo. Los empleados generalmente trabajan entre 1 y 2 años antes de continuar, generalmente no tienen experiencia y las reuniones diarias que incluyen a todos son casi imposibles de programar.
¿Cómo se fomenta la calidad, la eficiencia y la comunicación en tal lugar de trabajo?
Actualización: después de leer algunas de las respuestas y comentarios, pensé en proporcionar algunos antecedentes adicionales.
Yo no me considero un maestro en el arte de desarrollo de software, pero yo soy lo suficientemente experimentado para reconocer una mala programación cuando lo vea. Puedo determinar si un desarrollador tiene talento o no después de pasar solo un minuto o dos trabajando con él. Me siento cómodo con mis propias habilidades para encontrar una manera de resolver un problema de manera inteligente , sin embargo, el área en la que realmente me falta experiencia es la gestión de proyectos en la que participan otros desarrolladores (es por eso que les pido a todas ustedes maravillosas personas Consejo).
Lo hice sonar como si cada estudiante que entra en esta oficina es un completo imbécil. Aquí ha habido algunos malos huevos, pero la mayoría de los estudiantes que he conocido son inteligentes, quieren aprender y les apasiona el trabajo. Sin embargo, algunos recién están comenzando y no saben lo que no saben. Y eso esta bien. Cuando comencé a programar, ¡no estaba mejor!
Respuestas:
Se tarda más en limpiar un error que en comprobarlo previamente. Si se trata de desarrolladores que (posiblemente) no están calificados o que desconocen las buenas prácticas, eso significa que no deberían ser capaces de alterar la base de código (maestra) hasta que alguien con experiencia haya examinado su código.
No querías una explicación de las metodologías, así que déjame echar un vistazo a esa parte: usa tareas ágiles para configurar diferentes características que se pueden desarrollar de forma independiente.
Comience a usar ramas de características, para que todos trabajen en una rama separada. Cuando finaliza una tarea, el desarrollador no puede fusionar su código con la rama maestra. Si está utilizando Git, aún pueden iniciar una solicitud de extracción. De lo contrario, utilice cualquier método de seguimiento de tareas finalizadas (/ ramas) que más le convenga.
Luego llegamos al proceso de revisión . Su pregunta es un poco vaga sobre si también hay desarrolladores experimentados en cuyo juicio se puede confiar más que en el de los estudiantes. Entonces déjenme explicarlo de cualquier manera:
Si hay desarrolladores experimentados, realice la tarea de revisar el código de las tareas terminadas. Si es bueno, pueden fusionarlo en la rama maestra. Si no es así, pueden refactorizarlo ellos mismos o dar retroalimentación al desarrollador sobre lo que debe mejorarse.
Si no hay desarrolladores experimentados, entonces siempre tendrás problemas. Si no hay nadie para detectar el código bueno del código malo, es imposible mantener la calidad del código.
Lo mejor que puede hacer es tener reuniones de revisión, donde los desarrolladores presenten y expliquen su implementación frente a los otros desarrolladores. Si bien esto no puede garantizar la prevención de todos los problemas (por ejemplo, si todos los desarrolladores tienen la misma idea errónea sobre las buenas prácticas, seguirá previniendo la mayoría de los problemas (por ejemplo, si al menos un desarrollador tiene la idea correcta y puede articularla; o cuando el problema surge) de desarrolladores que entienden el problema de manera diferente entre sí)
fuente
Lo más importante para ese tipo de entorno donde las personas son nuevas y es probable que se vayan es la revisión obligatoria del código.
Ayudan a difundir el conocimiento de lo que debe hacerse. Ayudan a evitar que el peor código ingrese a la base de código. Promueven la coherencia en la implementación.
Porque con tanta rotación e inexperiencia, la comunicación es más importante de lo que suele ser.
fuente
Es más una idea que una solución, pero encuentre una sección crítica de la base de código que contenga características y elementos similares a los proyectos que los desarrolladores de sus estudiantes podrían hacer y límpiela MUY bien. Un gran problema con los nuevos desarrolladores es que no conocen las normas y convenciones de la base de código, y buscarán otro código para tener una idea de cómo configurar el suyo. Tener muchos desarrolladores nuevos trabajando en una base de código desordenada significa que verán el desorden y pensarán que es aceptable o la mejor manera de hacer las cosas. Las malas prácticas se perpetúan incluso en un entorno de alta rotación.
Al tener al menos una sección de código prístina y bien escrita (o incluso solo un archivo), puede decirle a los desarrolladores de sus estudiantes que la usen como un ejemplo de mejores prácticas. Dígales que estará encantado si pueden escribir código similar a ese, y que gran parte del otro código podría no ser un buen ejemplo de la forma correcta de hacer las cosas.
Agregar comentarios u otra documentación con una explicación de por qué las cosas se hacen de cierta manera también ayudará a los nuevos desarrolladores a ponerse al día más rápidamente con mejores prácticas de código.
fuente
Integración continua -
Este es un marco práctico y conceptual para la implementación incremental y flexible de herramientas de equipo, habilidades y procesos.
CI es la idea de un flujo de trabajo desde la escritura del código hasta la implementación. Estas tareas son conceptuales y en realidad independientes.
CI es automatización, en particular. Esto tiene profundas implicaciones para la calidad y la productividad, comenzando en el punto donde se escribe el código en la pantalla.
Espere ser el agente de cambio a tiempo completo. Conviértete en el líder; no solo un gerente, no simplemente el codificador senior.
Ser estratégico
Ser táctico
El camino a la calidad
Examen de la unidad
Control de versiones
Revisiones de código
Refactorización
Captura tu entorno
Una palabra sobre el proceso
Ágil (y sus subgéneros como Scrum): Olvídalo. "Eres ágil, no lo haces ágil". Vea esto por Dave Thomas, uno de los firmantes originales del Manifiesto Ágil .
Dados los equipos pequeños e inexpertos, mi sentido arácnido se dispara cuando veo herramientas de integración de equipos como Visual Studio Team Services. Mi experiencia es limitada aquí, pero siento la imposición de procesos rígidos, superfluos y estúpidos. Sé que muchos usan estas cosas con gran efecto, pero ten cuidado de comprar potencialmente una solución en busca de un problema.
Una palabra sobre herramientas
Solo yo. No de esas "Mejores herramientas de software ahora ...".
Jenkins
Una herramienta de integración de CI. Basado en la web, ampliamente utilizado. Esencialmente, a través de una GUI web, configura y personaliza las diversas tareas y el orden de ejecución, como compilar, ejecutar pruebas unitarias y actualizar el control de versiones. Es muy a la carta, por lo que es adecuado para su entorno naciente de CI.
Control de versiones
Prefiero Mercurial sobre Git. Esta publicación de blog es la razón por la que elegí originalmente Mercurial: Git es MacGyver, Mercurial es James Bond
La subversión es buena. Mercurial y Git tienen una arquitectura diferente que es superior a la de Subversion.
Entorno de desarrollo integrado
Aquí hay una gran consideración si todos usan diferentes herramientas de codificación: No existe tal cosa como texto sin formato
Una palabra sobre una biblioteca profesional
Internet es amplio, poco profundo y desorganizado.
fuente
Propongo usar otra metodología para administrar su proceso, ya que, como usted dice, es imposible programar reuniones (¡lo cual es absolutamente importante para scrum!). Todavía no hay nada malo para hacer un buen concepto, por lo que todos saben lo que está sucediendo (probablemente también usando un prototipo de vert) y el modelo de cascada. De cualquier manera, la comunicación es la mayor parte del trabajo.
fuente
Te animo a que uses el control de fuente si aún no lo has hecho. Esto le permite ver lo que fue registrado por cada desarrollador y permite retroceder donde se introdujo un error.
Instalaría algún tipo de conjunto de pruebas. Podría ser un desarrollo impulsado por pruebas en el que escribe pruebas para cada función que está cometiendo, o podría ser una forma automatizada de ejecutar sus aplicaciones y hacer que envíen los resultados a un archivo que se pueda comparar con el deseado salida. Si esto se ejecuta después de cada confirmación, o se ejecuta al menos una vez por noche, encontrará regresiones rápidamente.
Lo último que haría es implementar 2 políticas: 1) todas las compilaciones deben tener advertencias configuradas con errores y todos los errores activados 2) Todo el código debe pasar por el analizador estático sin producir ningún error o advertencia antes de que se confirme. Incluso haría de esto una acción previa al compromiso. Estas 2 cosas evitarán que el código se vuelva horrible rápidamente de varias maneras comunes. (No atrapan todo, pero atrapan mucho).
Esto también preparará a sus estudiantes para cómo será el trabajo en el "mundo real" y les inculcará algunos hábitos razonablemente buenos.
fuente