Pregunta

Estoy en un equipo en el que estoy tratando de convencer a mis compañeros de equipo a adoptar TDD (como he visto trabajar en mi anterior equipo y la configuración es similar). Además, mi opinión personal es que, al menos en un principio, lo que realmente ayuda si ambos TDD y programación Par se realizan conjuntamente. De esta manera, dos inexpertos (en TDD) los desarrolladores pueden ayudarse entre sí, discutir qué tipo de pruebas para escribir y hacer buen progreso.

Mi manager, por el contrario, siente que si introducimos dos nuevas prácticas de desarrollo en el equipo a la vez, hay una buena probabilidad de que ambos podrían fallar. Por lo tanto, él quiere ser un poco más conservador e introducir cualquiera.

¿Cómo puedo convencerle de que ambos son complementarios y no ortogonal. O estoy equivocado?

¿Fue útil?

Solución

No estoy seguro de que tener más personas que no saben lo que están haciendo en TDD va a ayudar. Se va a descender rápidamente en los dos googlear el tema, o los dos discutiendo sobre exactamente qué es TDD / no lo es.

Creo que sería mejor de conseguir a alguien del equipo para convertirse en el evangelista para una determinada técnica (alguien va y lee sobre TDD, alguien va y lee sobre la programación en parejas) y tienen esas personas, entonces promueven y el juicio esas cosas. Sí, ambos pueden ocurrir al mismo tiempo, pero no tiene que ser utilizado en todo el equipo del proyecto. Usted podría tener un pequeño grupo de su equipo no la programación en parejas y luego informar sobre sus experiencias.

Otros consejos

Par programación es eficaz en el aprendizaje de una nueva práctica especialmente TDD

Por lo tanto, se puede tener ambas cosas con un compromiso. Hacer esto de una manera ágil, de forma incremental. Asumir la programación en parejas en primer lugar. Es el más fácil de los dos. Todas las prácticas después de la programación en parejas llegarán a ser mucho más fácil de aprender y serán adoptados por el equipo más rápido y con mayor consistentcy. La programación en parejas es una de las primeras, si no la primera práctica engineerring que debe adoptarse. Asegúrese de que se haga efectiva. A continuación se muestra una descripción de cómo hacer la programación en parejas.

En combinación de programación es una de las prácticas más potentes de un equipo de desarrollo puede utilizar en el desarrollo de software. El emparejamiento se produce con dos desarrollador desarrollar activamente una tarjeta de historia usando un solo ordenador y el teclado. Los gerentes se preocupan de que el uso de la programación emparejado se duplicará sus costos de programación. A primera vista, es comprensible por qué podrían pensar que - después de todos --Dos desarrolladores se les pide que trabajen juntos en la misma tarea. En la práctica, sin embargo, equipos ágiles que utilizan esta técnica de desarrollo han encontrado que el ligero aumento de los costes para el desarrollo inicial (15% según un estudio de la Universidad de Utah) son más que compensado por una reducción de defectos, una prueba más corta y menos costosa ciclo y menor necesidad de apoyo a la producción.

Si bien puede parecer contrario a la intuición de que tener programadores se emparejan y trabajan juntos mejora la productividad, hay una serie de razones por las que esta técnica realmente funciona He aquí por qué (pensar en el viejo dicho, "dos cabezas piensan mejor que una."):

  • Mejora de la calidad - El emparejamiento anima revisión de código. Muchos errores quedan atrapados medida que se escriben. programación emparejado significa revisión de código continuo realizado por dos personas que están comprometidas con la calidad del código y están trabajando juntos para identificar y corregir errores en todo momento. Un estudio realizado por la Universidad de Utah encontró que el número final de defectos encontrados en código se redujo en un 15% en promedio para el código escrito por pares.
  • Menos tiempo "pegado" - La programación es duro. A menudo, los desarrolladores se esfuerzan por encontrar una solución y pasan más tiempo de lo que deberían "pegado". Tener una pareja a una lluvia de ideas con y ponerse de acuerdo para buscar ayuda si es necesario reduce la cantidad de tiempo no productivo atrapado tratando de encontrar una solución.
  • Menos tiempo empleado en distracciones -. Un desarrollador es menos probable que pase tiempo en llamadas telefónicas personales o navegar por la web, correo electrónico o vacaciones cuando él o ella está trabajando con un socio
  • Dos perspectivas se aplican a los problemas - Los diferentes niveles de experiencia, diferentes estilos de resolución de problemas, habilidades diferentes auxiliares todas aumentan las posibilidades de resolver un problema más rápido. El estudio realizado por la Universidad de Utah también identificó un mejor diseño general y la menor longitud de código para el software escrito por pares.
  • Menos miedo a lo desconocido - Cuando se empareja con otro desarrollador que es más fácil hacer frente a un problema o tratar de conseguir una manija en la nueva tecnología de lo que es cuando se trabaja solo. También obtienen, con el tiempo, una mejor comprensión de toda la aplicación. Al final, el proyecto termina con varias personas la comprensión de cada pieza del sistema como resultado del emparejamiento.
  • Es menos probable que construir en el Ámbito de aplicación - A menudo, los desarrolladores de buen grado agregan funcionalidad no se abordan en los requisitos. Cuando se trabaja con un par, el segundo desarrollador es más probable que mantenga su compañero / a en la tarea.
  • Mejora de la dinámica de equipo - Debido al enfoque emparejado, las personas aprenden a trabajar juntos. Ellos hablan con más frecuencia y experimentan un mejor flujo de información. mejorar la dinámica del equipo como resultado. De hecho, hemos encontrado que la mejor experiencia de formación de equipos alrededor está trabajando en conjunto para producir software de su cliente está muy entusiasmado. A todos nos gusta ser parte de un equipo exitoso.
  • Eliminación de Silos de Knoconocimien -. el conocimiento de dominio, el conocimiento del código o prácticas se propagan rápidamente a través del par del equipo y desarrollador unos con otros sobre una base de rotación

Una vez que el equipo está cómodo con el emparejamiento, a continuación, tomar el TDD. A Destription sigue:

Test-Driven Development (TDD) es una práctica de la ingeniería de desarrollo de software que consiste en breve ráfaga de desarrollo en un nuevo caso de prueba que cubre la mejora deseada o una nueva funcionalidad se escribe primero, luego el código de producción necesaria para pasar se lleva a cabo la prueba, y, finalmente, el software está rediseñado para adaptarse a los cambios. La disponibilidad de pruebas antes de desarrollo real asegura una rápida reacción después de cualquier cambio. Los profesionales hacen hincapié en que el desarrollo basado en pruebas es un método de diseño de software, y no simplemente un método de ensayo. desarrollo basado en pruebas es una poderosa práctica y un importante contribuyente a la reducción de defectos encontrados más tarde en el ciclo de vida. Un nuevo equipo es altamente recomendable para combinar con un profesional de experiencia TDD o recibir coaching.e TDD lo contrario

desarrollo basado en pruebas requiere que una unidad de prueba automatizado, definir los requisitos del código, se escribe antes de cada aspecto del propio código. Estas pruebas contienen afirmaciones que son verdaderas o falsas. Ejecutar las pruebas proporcionan una confirmación rápida de comportamiento correcto ya que el código evoluciona y se refactorizado. frameworks de pruebas basadas en el concepto xUnit proporcionan un mecanismo para crear y ejecutar conjuntos de casos de prueba automatizados. Ciclo de desarrollo basado en pruebas:. La siguiente secuencia se basa en el libro Test-Driven Development por ejemplo, que muchos consideran como el texto de origen canónico sobre el concepto en su forma moderna

  1. Escribir una prueba. En desarrollo basado en pruebas, cada nueva tarjeta historia comienza con la escritura de una prueba. Esta prueba fallará porque está escrito antes de que la característica se ha implementado. Con el fin de escribir una prueba, el desarrollador debe entender la especificación y los requisitos de la función claramente. Esto se puede lograr a través de tarjetas de Historia con los criterios de aceptación para especificar cuándo los requisitos ha sido se encuentran. Esto también podría implicar un invariante, o modificación de una prueba existente. Esta es una característica diferenciadora de desarrollo basado en pruebas frente a las pruebas de unidad de escritura después de que el código está escrito:. Hace que el enfoque desarrollador de los requisitos antes de escribir el código, una diferencia sutil pero importante
  2. Ejecutar todas las pruebas y ver si la nueva falla. Esto valida que el arnés de prueba está funcionando correctamente y que la nueva prueba no pasa por error sin que sea necesario ningún código nuevo. La nueva prueba también falla por la razón esperada. Este paso pone a prueba la prueba en sí, en sentido negativo:. Descarta la posibilidad de que la nueva prueba pasará siempre, y por lo tanto ningún valor
  3. escribir código. El siguiente paso es escribir un código que hará que la prueba pase. El nuevo código escrito en esta etapa no será perfecto y puede, por ejemplo, pasar la prueba de una manera poco elegante. Esto es aceptable porque los pasos posteriores van a mejorar y perfeccionar la misma. Es importante que el código escrito solamente está diseñado para pasar la prueba; no más lejos (y por lo tanto no probado) funcionalidad debería predecirse y 'permitió' en cualquier etapa.
  4. Ejecutar las pruebas automatizadas y ver a tener éxito. Si ahora pasan todos los casos de prueba, el programador puede estar seguro de que el código cumple con todos los requisitos probados. Este es un buen punto de partida para comenzar el paso final del ciclo.
  5. código Refactor. Ahora el código se puede limpiar como sea necesario. Volviendo a ejecutar los casos de prueba, el desarrollador puede estar seguro de que la refactorización no está dañando cualquier funcionalidad existente. El concepto de la eliminación de la duplicación es un aspecto importante de cualquier diseño de software. En este caso, sin embargo, también se aplica a la eliminación de la duplicación entre el código de prueba y el código de producción-., Por ejemplo, números mágicos o cadenas que se repiten en ambos, con el fin de hacer que el paso de la prueba en el paso 3

Repetir

A partir de otra nueva prueba, el ciclo se repite entonces para impulsar la funcionalidad. El tamaño de los pasos puede ser tan pequeño como el desarrollador le gusta, o conseguir más grande si s / él se siente más seguro. Si el código escrito para satisfacer una prueba no hace bastante rápido así, entonces el tamaño de paso puede haber sido demasiado grande, y tal vez los pasos comprobables más pequeños se debe utilizar en su lugar. Al usar bibliotecas externas, es importante no hacer incrementos que son tan pequeñas como para ser efectiva simplemente probar la propia biblioteca, a menos que haya alguna razón para creer que la biblioteca está libre de errores o no está suficientemente completa de funciones para cubrir todas las necesidades de la programa principal está escrito.

Estilo de evolución Hay varios aspectos a la utilización de desarrollo basado en pruebas, por ejemplo, los principios de "Keep It Simple, Stupid" (beso) y "No vas a lo necesitan" (YAGNI). Al centrarse en escribir sólo el código necesario para pasar las pruebas, los diseños pueden ser más limpio y más claro que a menudo se logra mediante otros métodos. Basado en pruebas de desarrollo requiere que el programador a fallar en primer lugar los casos de prueba. La idea es asegurarse de que la prueba de que realmente funciona y puede coger un error. Una vez que esto se muestra, el ciclo normal se iniciará. Esto se ha acuñado el "Desarrollo Mantra Test-Driven", conocido como rojo / verde / rojo significa refactor donde fallan y el verde es pase. desarrollo basado en pruebas repite constantemente las etapas de adición de casos de prueba que no, que pasa a ellos, y refactorización. La recepción de los resultados de las pruebas que se espera en cada etapa refuerza el modelo mental del programador del código, aumenta la confianza y aumenta la productividad

Tiene usted toda la razón en que par-programación será de gran ayuda cuando se está aprendiendo algo nuevo. Estoy de acuerdo con usted en que debe empujar con fuerza para hacer ambas cosas.

Tal vez la mejor manera de ponerlo hacia fuera para su gerente es no quiere decir que usted está pidiendo para introducir estas dos cosas nuevas al mismo tiempo. En su lugar, sugieren que se siente la manera más eficiente para empezar a aplicar TDD es, al mismo tiempo conseguir el trabajo hecho, es tomar sólo dos desarrolladores como el "equipo de investigación TDD" y hacer que trabajen juntos para conseguir las herramientas adecuadas establecidas, aprender el técnicas, las prueban, y averiguar lo que hay que hacer para aplicarlos en su entorno. Una vez que tenga que trabajar, y tienen dos personas que tienen un poco de experiencia con ella, a continuación, hacer que se separan y cada uno sentarse con otro desarrollador durante unos días para que ese otro desarrollador al día sobre las nuevas técnicas. Repita hasta que todos los desarrolladores han aprendido TDD.

no convencen. decirle las razones por las que piensa que ambos trabajan juntos, tal vez presentar algunos datos que confirman esto, y que él decida. Si es necesario convencer a todos que es una buena idea, apuesto que nadie se va a llevar a ella demasiado bien. oposición natual.

programación en parejas lo personal he encontrado que funciona mejor con una experiencia y una experiencia.

Es decir, me gustaría apuntar a una diferencia en la habilidad / exp de programadores en lugar de tratar de igualar de manera uniforme experto.

los más experimentados obtiene más provecho de ella de la explicación y se ven obligados a estructurar pensamientos, mientras que los inexpertos obtiene la oportunidad de intercambiar ideas y recoger 'mejores prácticas'.

como para TDD, yo soy un gran fan. Una vez más exp ayuda a los inexpertos, ya que ayuda realmente llevar a cabo el punto de la prueba. Es decir, que no quieren probar absolutamente todo ... añade el foco. A menudo me encuentro con personas están escribiendo pruebas sin centrarse en lo que están tratando de lograr.

Las pruebas unitarias son esenciales imo ... después de todo, algunos miembros del personal no será que hay dentro de 2 años. ¿Cómo se puede modificar el código existente si no hay nada para verificar su función en contra?

Bueno, según el gerente, se puede apuntar a algunos argumentos en la literatura XP que estas prácticas son interdependientes. Por ejemplo, si usted no tiene pruebas unitarias sólidas, no refactorizar sin piedad.

Yo sugeriría que uno se aproxima de forma incremental, en el que la pareja sólo sería con el propósito de averiguar TDD, al igual que cualquier esfuerzo de colaboración en un nuevo problema difícil, no es que "todo el desarrollo de la producción se hace en parejas."

Mientras que una práctica no requiere el otro, hay una manera de 'astuto' para introducir tanto un poco a la vez.

Comience con el objetivo de implementar TDD usando uno de los marcos xUnit disponibles. Encontrar un compañero de trabajo compatibles y preguntar si por espacio de una hora al día que estarían dispuestos a trabajar con usted. "Shawn, estoy tratando de esta nueva herramienta, ¿me ayudará a cabo para asegurarse de que estoy haciendo lo correcto?" funciona muy bien.

Después de un par de días con Shawn, repetir con Susan ...

hacerlo de todos modos. Si el gestor de capturas que el emparejamiento, decir las palabras mágicas "Código opinión"
Asunción: Es evidente que la pareja debe ser disciplinado / centrado lo suficiente y producir el código de trabajo al final de la sesión

Escribir algunas pruebas que dan atención a los fallos existentes en la base de código - a continuación, les muestran a su jefe, creo que pronto podría estar de acuerdo TDD es una buena idea

!
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top