unit testing - tutorial - ¿Cómo persuades a otros a escribir pruebas unitarias?
unit test c# ejemplo (13)
Dos formas: convencer al gerente del proyecto de que la prueba unitaria mejora la calidad Y ahorra tiempo en general, luego haga que haga que las pruebas unitarias sean obligatorias.
O espere una crisis de desarrollo justo antes de una fecha de lanzamiento importante, donde todos tienen que trabajar horas extras y fines de semana para terminar las últimas características y eliminar los últimos errores, solo para descubrir que acaban de introducir más errores. Luego señale que con las pruebas unitarias correctas no tendrían que trabajar así.
Otra situación en la que las pruebas unitarias pueden mostrarse como indispensables es cuando realmente se entregó un lanzamiento y resulta ser un error grave debido a cambios de última hora.
He estado infectado con la prueba durante mucho tiempo, pero parece que la mayoría de los desarrolladores con los que trabajo nunca lo han probado o lo han descartado por una razón u otra, con argumentos que suelen ser que agrega una sobrecarga al desarrollo o no necesita molestarse
Lo que más me molesta de esto es que cuando me paso para hacer cambios en su código, me cuesta mucho ponerlo a prueba, ya que tengo que aplicar refactorizaciones para que sea comprobable y, a veces, acabo teniendo que hacer un montón de trabajo solo para poder probar el código que voy a escribir
Lo que quiero saber es, ¿qué argumentos utilizarías para persuadir a otros desarrolladores para que comiencen a escribir pruebas unitarias? La mayoría de los desarrolladores que he introducido lo llevan bastante bien, ven los beneficios y continúan usándolo. Sin embargo, estos siempre parecen ser los buenos desarrolladores, que ya están interesados en mejorar la calidad de su código y, por lo tanto, pueden ver cómo lo hace la prueba unitaria.
¿Cómo persuadir al resto de la abigarrada tripulación? No estoy buscando una lista de beneficios de prueba ya que sé cuáles son estos, pero qué técnicas has utilizado o utilizarías para que otras personas se unan a bordo. También se aprecian consejos sobre cómo persuadir a la administración para que asuma un papel activo
Haga cumplidos para que uno escriba más pruebas y produzca buenos resultados y muestre el mejor a los demás y pídales que produzcan el mismo o mejor resultado que este.
Hay más de un lado en esa pregunta, supongo. Encuentro que realmente convencer a los desarrolladores para que comiencen a usar las pruebas no es tan difícil, porque la lista de ventajas de usar las pruebas a menudo habla por sí misma. Cuando dice eso, es una gran barrera para realmente ponerme en marcha y me parece que la curva de aprendizaje a menudo es un poco abrupta, especialmente para los programadores principiantes. Lanzar frameworks de prueba, mentalidad de prueba de TDD y framework de burla a alguien que aún no se siente cómodo con C #, .Net o la programación en general, podría ser demasiado para manejar.
Trabajo como consultor y, por lo tanto, a menudo tengo que abordar el problema de implementar TDD en una organización. Afortunadamente, cuando las empresas me contratan a menudo es debido a mi experiencia en ciertas áreas, y por lo tanto, podría tener una pequeña ventaja cuando se trata de llamar la atención de las personas. O tal vez es solo que es un poco más fácil para mí que un extraño ingrese a un equipo nuevo y diga "¡Hola! He probado TDD en otros proyectos y sé que funciona". ¿O tal vez es mi persuasión / terquedad? :) De cualquier manera, a menudo no me resulta muy difícil convencer a los desarrolladores para que comiencen a escribir pruebas. Sin embargo, lo que encuentro difícil es enseñarles a escribir buenas pruebas unitarias. Y como usted señala en su pregunta; para mantenerse en el camino correcto.
Pero he encontrado un método que creo que funciona bastante bien cuando se trata de enseñar pruebas unitarias. He escrito sobre esto aquí , pero la esencia es sentarse y hacer un par de programación. Y al hacer la programación de los pares, comienzo a escribir la prueba unitaria primero. De esta manera les muestro un poco cómo funciona el marco de prueba, cómo estructurar las pruebas y, a menudo, algún uso de la burla. Las pruebas unitarias deben ser simples, por lo tanto, en general, la prueba debe ser bastante fácil de entender, incluso para los desarrolladores más jóvenes. La peor parte para explicar es a menudo la burla, pero utilizar marcos de burla fáciles de leer como Moq ayuda mucho. Luego, cuando se escribe la prueba (y nada se compila o pasa) entrego el teclado a mi codificador compañero para que pueda implementar la funcionalidad. Simplemente le digo a él / a él; "¡Haz que se vuelva ecológico!" Luego pasamos a la siguiente prueba: escribo la prueba, el ''próximo-a-ser-infectado-infectado'' junto a mí escribe la funcionalidad.
Ahora, es importante entender que en este punto el desarrollador (es) que está enseñando probablemente aún no esté convencido de que esta es la forma correcta de codificar. El punto donde la mayoría de los desarrolladores parecen ver la luz (verde) es cuando una prueba falla debido a algunos cambios en el código que nunca pensaron que rompería ninguna funcionalidad. Cuando la prueba que cubre esa funcionalidad explota, es cuando tienes un TDD''er leal en tu equipo. O al menos es mi experiencia, pero como siempre; su kilometraje variará :)
He descubierto que "evangelizar" o predicar raramente funciona. Como han dicho otros, haga su camino para su propio código, haga saber que lo hace, pero no intente obligar a otros a hacerlo. Si las personas preguntan al respecto, sea solidario y útil. Ofrézcase para hacer algunos seminarios durante la hora del almuerzo o espectáculos informales de perros y pony. Eso hará mucho más que solo quejarse a su gerente o a los otros desarrolladores de que tiene dificultades para escribir pruebas para el código que escribieron.
Lento y constante: no cambiará de la noche a la mañana.
Una vez me di cuenta de que en un lugar donde trabajé, la aceptación de las revisiones entre pares mejoró enormemente. Mi grupo simplemente lo hizo y dejó de intentar que otros lo hicieran. Eventualmente, la gente comenzó a preguntar acerca de cómo obtuvimos parte del éxito que obtuvimos. Entonces fue más fácil.
La calidad habla por sí misma. Si tiene más éxito que los demás, eso es todo lo que necesita decir.
Las personas (y los procesos) no cambian sin uno o más puntos de dolor. Por lo tanto, es necesario que termine con los puntos críticos y demuestre cómo las pruebas unitarias podrían ayudar a lidiar con ellos.
Si no puede encontrar puntos de dolor significativos, entonces las pruebas unitarias pueden no agregar mucho valor a su proceso actual.
Como lo implica Steve Lott, la entrega de mejores resultados que los otros miembros del equipo también ayudará. Pero sin los puntos dolorosos, mi experiencia es que las personas no cambiarán.
Si los desarrolladores están viendo que los desarrolladores "exitosos" están escribiendo pruebas unitarias, y aún no lo están haciendo, sugiero que las pruebas unitarias formen parte del ciclo de vida de desarrollo formal.
Por ejemplo, no se puede registrar nada hasta que se escriba y revise una prueba unitaria.
Solo tienes que acostumbrarte al mantra "¡si no se prueba, el trabajo no está hecho!"
Editar: Para agregar un poco más de carne a mi gracioso comentario anterior, ¿cómo puede alguien saber si en realidad están terminados si no han probado su trabajo?
Ten en cuenta que tendrás una batalla para convencer a otros si no se permite el tiempo en la estimación para la prueba del código desarrollado.
Una división de uno a uno entre el esfuerzo para la codificación y la de las pruebas parece ser un buen número.
HTH
aclamaciones,
Robar
Use una herramienta de cobertura de prueba. Hazlo muy visible. De esa forma, todos pueden ver fácilmente la cantidad de código en cada área que se pasa, falla y no se prueba.
Entonces puede iniciar una cultura donde "no probado" es un signo de mala codificación, "fallido" es un signo de trabajo en progreso y "aprobado" es un signo de código terminado.
Esto funciona mejor si también haces "prueba primero". Entonces "no probado" se convierte en "olvidaste el paso 1".
Por supuesto, no necesita una cobertura de prueba del 100%. Pero de un área tiene una cobertura del 1% y otra tiene un 30%, usted tiene una métrica para la cual el área tiene más probabilidades de fallar en la producción.
Usted mencionó que su gerente está a bordo con pruebas unitarias. Si ese es el caso, entonces ¿por qué no lo está imponiendo? No es su trabajo hacer que todos sigan el ejemplo o que se lo enseñen y, de hecho, otros desarrolladores a menudo se sentirán molestos si intentan presionarlos. Para que sus compañeros desarrolladores escriban pruebas unitarias, el gerente tiene que enfatizarlo fuertemente . Es posible que esa parte de ese énfasis se centre en la educación en la implementación de pruebas unitarias, donde podrías terminar siendo el educador y eso es genial, pero la administración de eso es todo.
Si se encuentra en un entorno en el que el grupo decide el estilo de implementación, entonces tendrá más voz en cómo debería ser la dinámica del grupo. Si te encuentras en ese tipo de entorno y el grupo no quiere enfatizar las pruebas unitarias mientras lo haces, entonces tal vez te encuentres en el grupo / compañía equivocado.
Liderar con el ejemplo Si puede obtener evidencia de que hay menos regresión en el código de unidad probada que en otro lugar.
Obtener el control de calidad y la aceptación de la administración para que su proceso exija pruebas unitarias.
Esté preparado para ayudar a otros a comenzar con las pruebas unitarias: proporcione asistencia, proporcione un marco para que puedan comenzar fácilmente, ejecute una presentación introductoria.
Tenemos un marco de prueba que incluye la ejecución automatizada del conjunto de pruebas cada vez que alguien comete un cambio. Si alguien comete un código que no pasa las pruebas, a todo el equipo se le envía un correo electrónico con los errores.
Esto lleva a que se solucionen errores introducidos bastante rápido.
Probablemente la respuesta de reefnet_alex te ayude: ¿Vale la pena el esfuerzo de las pruebas unitarias?
Creo que fue Fowler quien dijo: "Las pruebas imperfectas, ejecutarse con frecuencia, son mucho mejores que las pruebas perfectas que nunca se escriben en absoluto". Interpuse esto como si me diera permiso para escribir pruebas donde creo que serán más útiles, incluso si el resto de la cobertura de mi código es tristemente incompleto.