¿Qué consejo le darías a un desarrollador senior que nunca escribió una prueba unitaria pero su código funciona correctamente en producción?

Meh Si una persona ha trabajado en una empresa durante años para obtener el estatus de senior y no ha escrito ningún caso de prueba, entonces realmente debería tratar de convencer a los líderes empresariales para que lo incorporen. Si el negocio quiere pruebas unitarias, entonces es mejor que crea que los desarrolladores escribirán pruebas. Si la empresa no quiere pruebas unitarias, entonces no debería escribir pruebas unitarias.

Triste pero cierto. Puede convencer al programador senior todo lo que quiera, pero si los gerentes y las personas que le pagan dinero no están a bordo, entonces no hay nada que el programador senior pueda hacer.

Irónicamente, esto se pierde en los programadores que piensan que siempre debes escribir pruebas y, si no lo estás, es en ese programador. Estos programadores que piensan que nunca deberían ocupar puestos de alto nivel o de liderazgo, porque cualquier programador que vaya en contra de los intereses comerciales no debería o probablemente no estará en la posición de gerencia por mucho tiempo.

Todavía recuerdo la entrevista en la que me preguntaron si había escrito pruebas en la compañía en la que estaba y me rechazaron, cuando tuve que mencionar que no. Luego, dentro del primer mes de un nuevo trabajo, estoy escribiendo pruebas unitarias y funcionales. Oh, la ironía. El hecho de que alguien diga que no, no significa que no pueda o no quiera.

Editar: siento que debería aclarar. La razón por la que no lo hice, es que si el programador senior no está escribiendo pruebas en su propio tiempo y nunca lo ha hecho, entonces probablemente no hay nada que pueda decir. Para ese programador, si tienen 3 errores por cada 1000+ líneas y su proyecto no es tocado por nadie más, entonces probablemente sientan y probablemente tengan razón de que tendrían un ROI más alto al no perder el tiempo, ya sea solos. o en la empresa escribiendo algo que sienten sería una pérdida de tiempo y dinero.

Lleva tiempo entrenar cómo escribir pruebas, hay muchos tipos de casos de prueba que proporcionan diferentes niveles de cobertura y ROI. Las pruebas unitarias son buenas, pero no atraparán todo. También necesita pruebas funcionales y pruebas del sistema. Cuantos más tipos de pruebas, mejor es la cobertura, más errores y regresiones se detectarán antes. Escribir bien las pruebas también requiere experiencia.

Un ejemplo de la vida real: nuestro programador principal tardó 2 días en escribir pruebas funcionales de xUnit. Estas pruebas fueron el mínimo y fueron bastante inútiles. Es decir, se perdieron alrededor de 16 horas por algo que podría haberse logrado utilizando Postman o el navegador en 5 minutos.

Una idea común es que es mejor hacerse pruebas que no hacerlo. Eso solo es cierto si el código nunca cambia. Las pruebas terribles, al igual que la documentación terrible, son peores que ninguna. Recuerde esto, si las pruebas no valen nada, entonces alguien tendrá que pasar tiempo preguntando, sacando la especificación original y si el código cambia, las pruebas deben actualizarse.

Eso puede parecer algo pequeño y lo es, si se hace tan pronto como cambie el código, pero el equipo del mundo real, no apostaría por ello. Debe detectarse con solicitudes de extracción, pero eso depende de la persona que realiza la solicitud de extracción para recordar que las pruebas deben agregarse o actualizarse.

Lo que estoy tratando de decir es que las pruebas son importantes porque establece una línea de base para los casos de uso que funcionan en qué condiciones. También son útiles para encontrar regresiones cuando ocurren y ahorra dinero. Los estudios han demostrado que cuanto antes encuentre un error y lo repare, más dinero se ahorrará.

Las pruebas tienen una manera de hacer que los programadores se atasquen en el pensamiento mágico, ya que las pruebas proporcionan una barrera mágica contra los errores. Nunca tendrá suficientes pruebas y nunca podrá probar todas las condiciones que el código podría fallar.

Si un programador puede escribir código que no requiere las pruebas unitarias mínimas, ¿por qué debería perder el tiempo confirmando que su código ya funciona? ¿Para otros? Si el programador está haciendo su trabajo, no debería tener que modificar su código en absoluto. Por supuesto, hay un toma y daca, pero los programadores experimentados lo saben y programan en consecuencia.

Con eso, mi justificación para escribir pruebas, es que a menudo solo toman un poco más de tiempo que las pruebas manuales y preferiría no tener que probar manualmente lo mismo más de una vez. Soy flojo, escribir pruebas me permite ser flojo, así que escribo pruebas. Aunque en su mayor parte, la mayoría de las pruebas serán verdes la primera vez.

Para mí, si puedo encontrar incluso un error del esfuerzo, entonces valió la pena.

NO TOQUE EL CÓDIGO.

Es extremadamente raro … de hecho es un milagro … que su código de producción tenga clientes activos y cero defectos conocidos.

En el momento en que haces un cambio, ese sueño se acaba. Introducirás algún tipo de regresión, que te obligará a hacer otro cambio, y otro, y otro …

Nunca podrás volver a decir que el código es perfecto.

¿Está interesado en escribir pruebas unitarias y necesita asesoramiento? ¿O es el único en su equipo que no escribe pruebas unitarias?

Si es lo primero, dígale que lea algunas guías / vea algunos videos, con su experiencia y conocimiento, no debería tomarle mucho tiempo leerlo.

Si es lo último, explíquele que si bien su código funciona ahora, tal vez no lo haga algún día, y cuando ese día llegue todo su código se convertirá en código heredado y para cuando esté causando estragos en algún otro lugar de trabajo, usted Estaré limpiando después de que él intente escribir pruebas en código no comprobable …

Solo uno: “escribir pruebas unitarias”.

¿Por qué? De modo que cuando Joe Blow introduce cambios que rompen su código de una manera oscura, no inmediatamente obvia, a veces años después, cuando el autor original ya dejó la compañía, el problema queda atrapado de inmediato.

¡Comience a escribir pruebas unitarias!

Es genial que su código haya funcionado en producción hasta ahora, pero nunca se puede saber qué será en el futuro.

Estoy seguro de que habrá situaciones en las que las pruebas unitarias serían extremadamente útiles.

Usted puede leer más aquí.

Si usted es un ingeniero que nunca escribió una prueba unitaria, entonces no es un desarrollador senior.

Por definición.

Lo siento.

El consejo, entonces, es aprender para qué son las pruebas unitarias y desarrollar un grado de profesionalismo sobre los sistemas que usted pone en producción.

Aprende a escribir pruebas unitarias. Entonces comienza a hacerlo. Después de todo, ¡tu código funciona!

Escribe una prueba unitaria.

More Interesting

¿Existe una simulación por computadora para cuestiones económicas y sociales?

¿Qué es mejor: Macbook Pro o Thinkpad T450 para informática?

¿Puede la notación musical (cualquiera que elija) considerarse Turing Complete?

¿Qué intereses debe tener un informático?

¿Qué tan bien defienden las especificaciones profundas o los sistemas informáticos verificados formalmente que se ejecutan en unidades de estado sólido contra ataques avanzados de canal lateral?

Solo hay tantos componentes que puede meter en un chip de computadora. ¿Se ha alcanzado el límite o hay otra forma de hacer una computadora?

¿Cuál es una buena idea para una muestra de código de rieles para la posición de nivel de entrada?

UNIX pasa argumentos a través de la pila. Linux sigue la convención MSDOS pasando argumentos a través de registros. ¿Por qué?

¿El Máster en línea en Informática (OMSCS) es solo para estadounidenses?

¿Pueden las computadoras superar las capacidades cognitivas humanas cuando superan cierto poder computacional?

¿Por qué una tubería más profunda podría traer velocidades de reloj más rápidas?

¿Qué son los personajes de escape?

¿Es técnicamente posible tener un adaptador USB-C hembra a micro-macho USB? Muchos conectores micro USB> USB-C, pero ninguno lo hace al revés.

¿Cuáles son las cosas específicas que necesito aprender sobre los algoritmos de aprendizaje automático si solo quiero concentrarme en el lado de la aplicación?

¿Cómo afecta el bloqueo global del intérprete al rendimiento en aplicaciones Python de subprocesos múltiples?