¿Qué hace un buen probador? La diferencia entre un estudiante y un ingeniero de control de calidad realmente bueno es simple: el estudiante quiere terminar. Un buen ingeniero de pruebas quiere que el programa esté equivocado .
Y eso es básicamente por qué este último encuentra errores mientras que el primero no. Si desea escribir un código bueno y mayormente libre de errores, también debe desear que su programa sea incorrecto. Si desea romperlo, probablemente encontrará formas de romperlo. Encontrará contraejemplos para analizar entradas, encontrará condiciones de desbordamiento que rompen sus bucles, y así sucesivamente.
Yo diría que probablemente te lleve alrededor del 70%. El otro 30% es práctica y técnica . Para ser realmente bueno escribiendo código libre de errores, usted (en primer lugar) debe haber alcanzado una especie de masa crítica, donde ha visto la mayoría de las variaciones de los errores “comunes” que ocurren en el tipo de código que escribe. Esto viene de la experiencia. Más allá de eso, hay otras cosas que hacen la vida más fácil. Algunos consejos que creo son útiles:
- Eleve la mayor cantidad de su programa a funciones puras, funciones que no tienen efectos secundarios. Es más fácil razonar sobre las funciones si sabe que simplemente proporciona argumentos y obtiene resultados. Cualquier mutación en el estado del programa introduce la posibilidad de que un comportamiento sutil que altere el estado se encuentre más adelante. Por lo general, no vale la pena, solo garantice que sea una función pura y evite cambiarla si es posible.
- En relación con el n. ° 1, use lenguajes que lo alienten a usar funciones puras . No tiene que ser un lenguaje como Haskell o Scheme, aunque eso ciertamente ayuda. También puedes usar un lenguaje como Ruby y Python.
- Minimizar la contabilidad . Para los bucles, la iteración del puntero, algo así, es tu enemigo. Si cambia la estructura subyacente de algo, cualquier cosa que acceda a esa estructura (como un bucle for) puede fallar. Siempre que sea posible, debe abstraer todo lo que se ve en la estructura de un objeto en su propia función / método, en lugar de usar bucles desnudos.
- En relación con ese punto, recuerde verificar siempre todo lo que toca un objeto cuando lo cambia . Es decir, si cambia alguna estructura en un objeto, asegúrese de que todo lo que toque esta subestructura también se cambie correspondientemente. Esto solo causa una increíble cantidad de errores.
Eso debería ayudarte a comenzar. Buena suerte.
- Sea x una fórmula, ¿probar si x es válido que ~ x no debe ser satisfactoria?
- ¿Por qué la prueba por contradicción se considera una prueba débil en matemáticas?
- ¿Cuáles son sus puntos de vista sobre cómo el determinismo y la lógica podrían / deberían aplicarse a la sociedad?
- ¿Cuántas millas tiene un carrito de compras en su vida útil?
- ¿Por qué los lenguajes de programación no tienen 3 valores para booleanos: verdadero, falso y ‘no me importa’?