Un colega no está dispuesto a utilizar pruebas unitarias y, en su lugar, opta por una prueba rápida, se la pasa a los usuarios y, si todo está bien, se publica en vivo. No hace falta decir que algunos errores sí pasan.
Mencioné que deberíamos pensar en usar pruebas unitarias, pero ella estaba en contra una vez que se dio cuenta de que tendría que escribirse más código. Esto me deja en la posición de modificar algo y no estar seguro de que el resultado sea el mismo, especialmente porque su código es spaghetti y trato de refactorizarlo cuando tengo la oportunidad.
Entonces, ¿cuál es el mejor camino para mí?
refactoring
unit-testing
billy.bob
fuente
fuente
Respuestas:
Ella no conoce los beneficios de las pruebas unitarias y eso es lo que necesita cambiar:
Tendrás que demostrarle que mejorará su trabajo, no solo el tuyo. Eso será difícil, probablemente tratará de concentrarse en cada aspecto negativo que pueda encontrar si tiene miedo al cambio.
Puede tratar de discutir con ella sobre todos los beneficios y escuchar todos sus argumentos en contra. Espere hasta que termine de hablar antes de comenzar a hablar usted mismo.
Para prepararse, debe buscar en P.SE o Google todo lo relacionado con la gestión o los desarrolladores están preocupados por las pruebas unitarias y compilar las respuestas que utilizará durante sus conversaciones con su colega.
Solo escucharla y proporcionarle pruebas de que mejorará su trabajo lo ayudará mucho. Usted demuestra que le preocupa su opinión y le proporciona todos los datos que necesita para analizar la situación y, finalmente, cambiar de opinión.
fuente
Escribe una prueba unitaria (no se lo digas)
Espere hasta que la cosa se rompa, deje que haga pruebas manuales durante dos días, luego saque las pruebas de su unidad y encuentre el error en tres segundos.
Ponerse a cubierto...
fuente
rm -rf
los directorios de prueba de fuente y unidad, manteniendo solo las pruebas funcionales, y simplemente haciendo que pasen nuevamente una por una.La automatización, de lo contrario, las tareas manuales deberían ser atractivas para cualquier programador.
Entonces no está "escribiendo más código", está haciendo menos manualmente.
fuente
(Uno de) los puntos de las pruebas automatizadas es la repetibilidad . Si hace una prueba rápida a mano, puede hacerlo más rápido que escribir lo mismo que una prueba unitaria (al menos para un principiante en pruebas unitarias, cualquier persona con experiencia en pruebas unitarias puede producir pruebas bastante rápido).
Pero, ¿qué pasa cuando mañana, o la próxima semana, se hace un pequeño (o gran ...) cambio en el código? ¿Repetiría con gusto su colega las mismas pruebas manuales una y otra vez después de cada cambio, para asegurarse de que no se rompa nada? ¿O preferiría ella "codificar y rezar"?
Cuanto más se cambie el código, más pagarán las pruebas unitarias su inversión inicial . No lleva mucho tiempo obtener el lado positivo, incluso sin que las pruebas realmente detecten errores. Pero también lo hacen regularmente: en este punto, se vuelven invaluables. Y una vez que alguien experimenta esa sensación de seguridad y confianza en el código que proporciona una prueba de unidad exitosa, generalmente no hay vuelta atrás.
Si está convencida, pero tiene miedo de aventurarse en la nueva área, ofrézcale una sesión de programación en pareja para escribir juntos sus primeras pruebas unitarias . Elija una clase que no sea demasiado difícil de probar pero lo suficientemente compleja como para que valga la pena probarla.
Sin embargo, si no está convencida, es posible que deba seguir recopilando datos concretos . Tales hechos pueden ser
Recopile algunos de esos datos, luego muéstrele educadamente los resultados. Si todavía no son suficientes para convencerla, es posible que deba analizar el problema y compartir la evidencia recopilada con la gerencia. Ese solo debería ser su último recurso, pero a veces no hay otra manera.
fuente
Escriba una cobertura de prueba básica para los peores pedazos de su código, realice un repaso basado en esas pruebas, luego haga un caso con la administración de que las pruebas unitarias en compilaciones continuas mejorarán la productividad. Los cambios son más fáciles cuando lo ordena un empleador en lugar de ser evangelizados por un solo desarrollador.
No sé cómo expresar esto correctamente, pero: si estás refactorizando su código "cuando tienes la oportunidad" ... bueno, probablemente piense que eres un poco imbécil por involucrarte en "su negocio" , por lo que es menos probable que te escuche con la mente abierta. En mi experiencia, las personas se apegan a lo que han hecho, incluso cuando no es terriblemente bueno.
fuente
Para jugar defensor de los demonios: ella tiene un punto. Por lo general lo pongo como:
Las pruebas automáticas resuelven los problemas de mucho código con aún más código.
Razón fundamental:
Ahora, hay algunos argumentos para disparar contra eso fácilmente. Permítanme abordar los que se me ocurren:
tamaño versus simplicidad: por supuesto, es posible acortar y empeorar el código. Sin embargo, eso es solo un problema cuando se comparan bases de código con diferentes relaciones de brevedad vs simplicidad, para la discusión se puede suponer que de alguna manera podríamos controlar este factor.
Las pruebas unitarias lo presionan para reducir las dependencias, y estoy de acuerdo empíricamente en que reducir las dependencias puede mitigar los problemas de tamaño del código (en el sentido de que en dos bases de código de tamaño similar, la que tiene más interdependencias es peor). Sin embargo , al tiempo que reduce las dependencias entre las unidades de código de producción, introduce el acoplamiento entre la prueba y la unidad misma.
TL; DR: No creo que las pruebas unitarias sean malas; Pregunto: ¿hay un punto de equilibrio en el que las pruebas duelen que esté correlacionado con la cantidad de código?
fuente
Creo que estás en una posición difícil. He estado en un equipo donde la gente no escribiría pruebas unitarias, o peor, horribles pruebas unitarias no mantenibles. Pero todos sabían que las pruebas unitarias son buenas.
Por lo tanto, lograr que el conjunto de pruebas unitarias del equipo fuera de buena calidad fue un camino largo y difícil. Siempre en busca de dónde se podrían mejorar las cosas, comunicando ideas, compartiendo experiencias.
Por otro lado, tiene un desarrollador que ni siquiera se ha dado cuenta del beneficio. Y luego también codifica el código de espagueti. Supongo que una de las razones más importantes en este caso particular es el hecho de que escribir buenas pruebas unitarias obliga a un diseño débilmente acoplado. Por lo tanto, conseguir que escriba la prueba podría mejorar a la larga el código "real".
Pero creo que al final, es una decisión del equipo (¿No sé cuántos son ustedes en el equipo?). Si el equipo puede llegar a un consenso de que debería haber un conjunto de pruebas de unidad que cubra bien, entonces todos deben conformarse, compartir experiencias y dejar que su equipo crezca fuerte juntos.
Sin embargo, si el equipo no puede llegar a un consenso de que debería estar escribiendo pruebas unitarias, entonces sugiero que encuentre un equipo de desarrollo diferente para trabajar;)
fuente
¿Es ella la jefa?
Si es así ... está un poco atrapado a menos que pueda convencerla de los beneficios que básicamente se encuentran en la línea de "una onza de prevención vale una libra de cura". Los errores pasan. TDD ayuda a mitigar eso mediante la creación de resultados consistentes.
¿No es ella la jefa?
¿Cuáles son los estándares de codificación donde trabaja? ¿Por qué se le permite escupir código de espagueti? Presente un caso de negocios al jefe diciendo "Pasaremos MUCHO menos tiempo en los errores si pasamos un poco más de tiempo en TDD" Convencer a alguien que pueda imponer el cambio con un caso de negocios.
Documente casos en los que TDD podría haber ahorrado tiempo y $$ DINERO $$.
Este error se presentó solo. Habría sido atrapado antes de irse a vivir. Pasar 2 horas de prevención nos habría ahorrado 10 horas de cura. Ha sucedido aquí y aquí y aquí. Esas 10 horas de trabajo que le habrían ahorrado a la compañía 30 horas hombre. Eso es tanto dinero.
fuente
¿Por qué?
Ellos crearon el problema. Deberían resolverlo.
¿Qué gerente está permitiendo que esto suceda? ¿Por qué el código de error de otra persona es ahora tu problema?
Tienes un colega y un gerente que están haciendo que esto suceda. Y al limpiar su desorden, usted es un participante dispuesto y activo.
Nada cambiará si no sienten el dolor de la mala calidad.
fuente
Ella tiene bastante razón, las pruebas unitarias son "más código".
Sin embargo, simplemente se debe escribir más código para asegurarse de que el programa funcione como debería (una y otra vez). No es tiempo perdido. Es tanto una parte del sistema como sus componentes principales.
Desafíala en:
fuente
Hablando como uno que actualmente hace código de producción, seguido de pruebas unitarias en lugar de TDD, lo que no parece encajar bien en mi lugar actual (he hecho TDD en algunos proyectos, pero lo veo como otra herramienta en la vieja bolsa, no una bala de plata) ...
Puede ser una venta difícil. Todavía no he podido vender a mis compañeros de trabajo en pruebas unitarias. Sé que tiendo a cometer muchos más errores en mi código de prueba de unidad que en mi código de producción. Por lo tanto, es un poco frustrante tener que pasar tanto tiempo arreglando el código de prueba de la unidad ... Sin embargo, es un buen seguro cuando se modifica el código. Gran manera de probar las condiciones de borde automáticamente.
fuente
Muéstrele cuánto ayudan las pruebas unitarias al crear pruebas unitarias usted mismo.
Como San Francisco dijo una vez: "Predica siempre. Cuando sea necesario, usa palabras".
Si ella ve que su código está usando pruebas unitarias, y que puede resolver errores más rápidamente con las pruebas unitarias, entonces puede cambiar de opinión. Pero, puede que no.
No importa el resultado, ella no te ve como empujándole algo que no estás dispuesto a hacer. Eso es lo que tienes que cambiar, la percepción de que no estás liderando con el ejemplo.
fuente