Cómo mejorar la prueba de su propio código [cerrado]

12

Hoy verifiqué un cambio en algún código que resultó no funcionar en absoluto debido a algo bastante estúpido pero muy crucial. Me siento muy mal por eso y espero finalmente aprender algo de él. Lo estúpido es que he hecho estas cosas antes y siempre me digo a mí mismo, la próxima vez no seré tan estúpido ... Luego sucede de nuevo y me siento aún peor por eso.

Sé que debes mantener la cabeza en alto y aprender de tus errores, pero esta es la cuestión: trato de mejorar, no veo cómo puedo evitar que sucedan estas cosas.

Entonces, ahora les pregunto: ¿Tienen ciertas reglas básicas cuando prueban su código?

Peter
fuente
1
Esto puede ayudar: programmers.stackexchange.com/questions/45479/…
Amir Rezaei

Respuestas:

17

Escriba pruebas antes de realizar cambios en el código.

Si su cambio propuesto es corregir un error, haga que la prueba falle al principio demostrando el error. Luego, asegúrese de que pase después de que haya solucionado el error. Si escribe la prueba después y solo la ha visto pasar, no puede estar seguro de que probó correctamente el error en primer lugar.

Si su cambio propuesto es cambiar la funcionalidad existente o agregar una característica, escriba algunas pruebas para garantizar una buena cobertura del área de código que va a cambiar. Asegúrese de que estas pruebas pasen antes de comenzar a cambiar el código y aún así pase cuando termine.

Alba
fuente
Este es realmente un buen consejo, puede llevar un poco más de tiempo corregir el error, pero no me hará cometer este tipo de errores nuevamente y me permitirá escribir un código más estable en general.
Peter
@ Peter debería ahorrar tiempo de mantenimiento a largo plazo. Debería gastar menos tiempo en las correcciones de prueba de humo manualmente y también las pruebas estarán en su lugar la próxima vez que se edite el código. A veces, incluso puede encontrar que escribir rápidamente una prueba unitaria que reproduzca el error puede hacer que sea más rápido depurar y corregir el error en primer lugar.
Alb
@ Peter A menudo me encuentro reproduciendo el error varias veces mientras lo soluciono. Escribir una pequeña prueba generalmente ahorra tiempo, sin mencionar que puede estar absolutamente seguro de que funciona (y funcionará en el futuro).
DasIch
Este es un consejo tan fantástico amigo, ¡muchas gracias!
Shaheer
@Alb o incluso a corto plazo.
3

¡No olvide probar los casos límite! Muchos errores se deben a que se probó la acción más común pero no a las menos comunes.

HLGEM
fuente
En mi opinión, la verdadera joya está en encontrar estos casos extremos. A menudo me sorprenden los errores que surgen de un sistema, solo porque no pensamos en un escenario particular.
Peter
2

Siga el asesoramiento técnico en las respuestas orientadas técnicamente; Es algo bueno. Mi respuesta es más sobre actitud.

Sentirse mal por cometer el tipo de error que cada desarrollador comete ocasionalmente es simplemente absurdo, y no le ayuda a no cometer ese tipo de error en el futuro. Mientras te sientas allí sintiéndote mal, la construcción todavía está rota, ¿sabes? Y luego su trabajo consiste en evitar errores, lo que sé que hace que levantarse de la cama por la mañana sea una aventura emocionante todos los días, ¿verdad?

He oído hablar de empresas en las que el registro de código roto es motivo de vergüenza pública. Ni siquiera puedo entender el tipo de pensamiento distorsionado, chico de fraternidad, de nivel secundario que conduciría a tal comportamiento. Difícilmente podría haber NADA más contraproducente para un líder o gerente de equipo.

Así que no te golpees. Todos lo hemos hecho. Probablemente me costaba medio día por semana en errores tontos, y he estado haciendo esto por (tos) durante mucho tiempo. Eso es lo que parece escribir código: constantemente te enfrentas a lo que parecen tus propias deficiencias. Lo que hace que un profesional sea un profesional no es la cualidad mítica de nunca cometer errores (incluidos los grandes a veces), sino cómo responden a los errores que cometen.

Si hay un mantra que podría inculcar en cada desarrollador con el que trabajo, es este: no eres tu código . Tú escribes el código. Lo escribes tan bien y eficientemente como puedas. Entonces te vas a casa. Si iguala su valor o autoestima como persona con la calidad de su código, simplemente se está perdiendo la idea de quién es realmente.

Dan Ray
fuente
Entiendo lo que dices de la vergüenza pública, pero al mismo tiempo es frustrante ser bloqueada debido a que la acumulación se rompe debido juandiaz no construyó todas las plataformas antes de registrarse.
tenpn
@tenpn - Totalmente. Pero la otra cara de lo que digo también es cierto sobre Joe Bloggs. Él tampoco es su código. Como colegas, tenemos que resistir el impulso de convertir a Joe en un idiota a nuestros ojos porque cometió un error que cualquiera de nosotros podría haber cometido.
Dan Ray
@tenpn en realidad, también podría culpar al sistema por no probar automáticamente la compilación antes de confirmar los cambios en el enlace troncal / maestro.
David
2
@tenpn - Ninguno de los dos está golpeando a tus compañeros de trabajo.
Dan Ray
1
¿Qué pasa si el cambio no rompe la compilación? Es de sentido común construir su código antes de registrarse. No es tan obvio probar su código de todas las formas posibles. Siempre hay algún escenario que no podrías tener. Justo hoy me encontré con un error de redondeo de coma flotante que ocurre solo si tienes los números correctos (incorrectos)
Peter
2

Otra práctica de prueba importante es escribir la prueba y asegurarse de que falle al menos una vez ANTES de escribir el código. Es muy fácil equivocarse y escribir una prueba de tautología que accidentalmente no prueba la condición que está buscando. Las garantías falsas son casi (y a veces peores) que ninguna garantía.

Uri
fuente
0

Una idea que he usado de vez en cuando es esta,

cree una rama y rompa su código, ejecute la prueba y asegúrese de que la prueba detecte el error.

Zachary K
fuente
0

¿Tiene ciertas reglas básicas cuando prueba su código?

  • Siempre pruebe su código en la unidad e intente alcanzar la mayor cobertura posible.

Algunos puntos generales adicionales:

  • Invierta algo de tiempo en diseño y planificación antes de comenzar a codificar
  • refactorice su código!
BЈовић
fuente