¿Cuál es mejor, un desarrollador de software que escribe las pruebas unitarias pero no cumple con la fecha límite del proyecto o un desarrollador de software que ignora las pruebas unitarias y cumple con la fecha límite del proyecto?

Si el desarrollador que omite las pruebas, la fecha límite para cumplir también tiene un código que funciona correctamente y cuyo código nunca necesitará extenderse, entonces ese.

Pero tampoco conozco ninguna situación así.

Esta falsa dicotomía es común en las personas que no se han familiarizado con las pruebas unitarias.

Una prueba unitaria es muy rápida de escribir. Puedes verme hacerlo en vivo en mi video tutorial [1], y no lo olvides, estoy disminuyendo la velocidad para hablar con la cámara.

La prueba también compensa el tiempo de prueba manual. Hacer girar la aplicación puede llevar cinco segundos de inicio, otro minuto de configuración de datos de prueba, otros quince segundos examinando la salida. Solo para encontrar un apagado por un error.

Prueba unitaria – 3 milisegundos.

Como la mayoría de las cosas, las computadoras hacen cosas mejor, más rápido, más barato, y eso se extiende a las pruebas.

Donde las pruebas se ponen difíciles es cuando se adaptan a un diseño enredado.

Notas al pie

[1] Cómo escribir una prueba de unidad TDD con Java | Vista desde la cara del código

¿Cuál es mejor, un desarrollador de software que escribe las pruebas unitarias pero no cumple con la fecha límite del proyecto o un desarrollador de software que ignora las pruebas unitarias y cumple con la fecha límite del proyecto?

La forma en que está formulada la pregunta, la respuesta que parece estar buscando es que está bien no escribir pruebas unitarias. ¡Envíalo! ¡Hiciste la fecha límite! ¡Felicidades!

Pero esa no es la respuesta real. La verdadera respuesta es “depende”.

Especialmente si no eres un desarrollador junior, parte de lo que te pagan es tu juicio cuando se trata de software. Una pequeña parte de eso es poder costar características con una precisión razonable. Eso significa que, a menos que sus características y programación estén impuestas externamente (lo cual es un error), la parte en la que no está escribiendo pruebas o no enviando a tiempo es probablemente su culpa, en cierta medida.

Es posible (¡en serio!) Que su código se descarte en gran medida y que esté perdiendo el tiempo hacia el final de su proyecto escribiendo pruebas cuando debería enviarlo. De nuevo, deberías estar usando tu juicio.

Sin embargo, ese no suele ser el caso. Por lo general, su código no es descartable. Si las cosas van bien, su empresa seguirá construyendo sobre el código que está enviando ahora durante años. Tal vez las personas externas dependerán del comportamiento del código. Y al no escribir pruebas, está acumulando deudas técnicas.

Debe darse cuenta de que no escribir esas pruebas unitarias tiene algunos inconvenientes:

  1. Es más probable que el código que está escribiendo no sea comprobable que si hubiera escrito las pruebas. Es más probable que termine con dependencias que son difíciles de romper, y con clases y métodos que hacen demasiado.
  2. Se vuelve más difícil cambiar el código en esa área con confianza. Cada vez que realice un cambio allí, puede romper algo que sus pruebas deberían detectar. Entonces, estás escribiendo “IOU 1 set of tests” y lo dejas caer en el frasco de cosas por hacer.
  3. Imagine este escenario: envía sin las pruebas. Te das cuenta de que has incurrido en deudas técnicas y tienes un elemento en el cronograma para escribir las pruebas, lo que obtienes rápidamente. Y descubres que las cosas no están del todo bien. El comportamiento en algunos casos no es lo que debería ser, y lo ha enviado. ¿Qué tan fácil es cambiar ese comportamiento ahora? (Nuevamente, la respuesta correcta es “depende”). ¿Qué tan probable es que alguien dependa de su comportamiento defectuoso, o evite su error, solo para descubrir que su solución se rompe si arregla su código más tarde?
  4. Incurrir en deudas técnicas rara vez es excepcional. Si su equipo es del tipo que lo alienta a incurrir en deudas para hacer el cronograma, está haciendo lo mismo con otros miembros de su equipo, y muchos de ellos escriben cada vez menos pruebas. Su código será mucho, mucho más difícil de mantener.

Un desarrollador solo cumple la fecha límite si completa todo el trabajo, incluidas las buenas pruebas unitarias. Un desarrollador que ignora las pruebas unitarias no tiene idea de si ha cumplido el plazo del proyecto o no, ya que su código no ha sido probado.

Muchos desarrolladores “rápidos” trabajan en empresas donde la responsabilidad de corregir errores está separada de la responsabilidad de la codificación inicial. En este tipo de organización, a otra persona se le puede asignar la tarea de corregir los errores que registran en el repositorio. De hecho, es una forma muy destructiva de trabajar, pero puede ganar la reputación de desarrollador como programador rápido si su jefe no está prestando demasiada atención. Tengo que decir que estos son algunos de mis compañeros de trabajo menos favoritos.

Es necesario terminar todo el trabajo. Si no puede cumplir con la fecha límite, no puede. Pero afirmar que se cumple el plazo cuando no has terminado el trabajo es solo una mentira.

More Interesting

¿Qué idiomas debo aprender para convertirme en desarrollador de software y desarrollador de sitios web?

¿Cuáles son algunas habilidades que aprende como desarrollador de software que son transferibles a la vida real?

¿La creación de mi propio lenguaje / compilador me hace mejor en el desarrollo de software? Si es así, ¿cómo?

¿Cuáles son las mayores diferencias al entrevistar a un recién graduado frente a un desarrollador de software con 1 año de experiencia?

Cómo obtener una carrera en desarrollo de software sin ser un experto en un marco específico

Cómo encontrar los mejores desarrolladores de aplicaciones móviles

¿El libro 'Programming Pearls' está desactualizado?

¿Para qué aspectos de su trabajo encuentra que el tamaño de la pantalla de un MacBook Air lo ralentiza y / o frustra?

En general, ¿cuáles son algunas cosas técnicas que necesitaría saber para ser un desarrollador de software exitoso?

¿Cuáles son algunos ejemplos en los que ir en contra del desarrollo de software funcionó la sabiduría convencional?

¿Libros como "Aprender C ++ en 21 días" o "Aprender Java en 20 días" no son útiles para los desarrolladores de software, y son situaciones prácticas suficientes para aprender todo lo que un desarrollador de software necesita?

¿Cómo se desarrolla el software de refuerzo de sonido?

Cómo convertirse en un desarrollador de software autodidacta

¿Debería considerar la ubicación como una ventaja como desarrollador de software en Londres?

¿Cuál es la diferencia entre los servicios de TI y el desarrollo de software?