Una de las pocas cosas en las que la mayoría de los desarrolladores de software están de acuerdo es que no debe confiar en que el código funcione correctamente a menos que lo pruebe. Si no lo prueba, puede tener errores ocultos que solo le causarán más trabajo en el futuro.
Entiendo cómo probar mi código normal, pero ¿cómo debo probar mi código de prueba para asegurarme de que pueda encontrar e informar errores de manera efectiva cuando estén presentes? Personalmente, he sido lo suficientemente estúpido como para escribir casos de prueba erróneos que pasarían cuando no deberían hacerlo, lo que en primer lugar anula el propósito de mis pruebas de escritura. Afortunadamente, encontré y arreglé los errores a tiempo, pero según el mantra de pruebas, parece que ningún conjunto de pruebas estaría completo sin tener su propio conjunto de pruebas para asegurarse de que funcionó.
Me parece que la mejor manera de hacer esto sería asegurarme de que la prueba falla para el código defectuoso. * Si paso 2 minutos alternando agregando errores al código y asegurándome de que falla, debería tener un grado aceptable de confianza de que las pruebas 'funcionan'. Esto me lleva a mi segunda pregunta: ¿Cuáles son buenas maneras de introducir errores para asegurarse de que los casos de prueba los atrapen? Debo comentar al azar las declaraciones, asegurarme de que if-elsese ejecuta la rama incorrecta de una negando su condición y cambiar el orden de ejecución del código con efectos secundarios, etc., hasta que esté satisfecho de que mis pruebas atraparán máserrores comunes? ¿Cómo validan los desarrolladores profesionales que sus pruebas realmente hacen lo que se supone que deben hacer? ¿Asumen que las pruebas funcionan o también se toman el tiempo para evaluarlas? Si es así, ¿cómo prueban las pruebas?
No estoy sugiriendo que las personas pasen tanto tiempo probando sus pruebas y luego probando las pruebas para sus pruebas que en realidad nunca escriben el código real, pero he hecho cosas lo suficientemente estúpidas como para sentir que podría beneficiarme un poco de 'meta-pruebas', y tenía curiosidad sobre la mejor manera de hacerlo. :RE
* Podría verificar si la prueba pasa al probar el código 'libre de errores', pero usar el código como una especificación para la prueba parece bastante al revés ...