Pregunta

Dos preguntas sobre las pruebas unitarias.

  1. He estado escribiendo pruebas unitarias para un tiempo, sin embargo, son por lo general a clases de prueba que ya había escrito. Hace poco leí un artículo (Le importaría un artículo de edad) que dice usted debe escribir pruebas unitarias antes comenzar a escribir su código.

    ¿alguien realmente siga este ¿metodología? Parece como un buen idea sobre el papel, pero en la práctica es que?

  2. En caso de que escribir pruebas unitarias para ver cómo su método de asas mala / entrada maliciosa? Obviamente usted quiere pruebas de escritura en contra de las funciones que están destinados específicamente para manejar "usuario" de entrada para ver cómo se maneja mal de entrada / malicioso, pero ¿qué pasa con las funciones que nunca debería tener este tipo de entrada que se les pasa? ¿En qué punto se traza la línea?
¿Fue útil?

Solución

La metodología de escribir pruebas unitarias antes de que las clases se llama Test-Driven Development (TDD ) y fue popularizado por Kent Beck en la década de 2000. La idea es que se escribe un ensayo que describe la funcionalidad que necesita. Inicialmente, esta prueba fallará. A medida que escribe su clase, se pasa la prueba. Usted refactoriza su prueba para añadir funcionalidad más deseada, a continuación, refactorizar la clase para hacer este nuevo paso de la prueba. Su clase ha cumplido sus objetivos tan pronto como pasan las pruebas. Por supuesto, esto se amplía hasta más allá de las clases también.

En cuanto a qué tipos de pruebas para escribir, que depende de si está probando una API pública o una API privada. API públicas deberían tener más extensas pruebas escritas para asegurar que la entrada es bien formada, sobre todo si usted no confía plenamente los usuarios de la API. APIs privadas (métodos que sólo son llamados por su código) probablemente puede escapar sin estas pruebas -. Sospecharía que puede confiar en su propio equipo de desarrollo para no pasar malos datos a ellos

Otros consejos

Test Driven Desarrollo es un concepto bastante generalizada. La idea básica es que usted está tratando de escribir sólo el código que es necesario cumplir con algún requisito para el software. Por lo tanto, se escribe una prueba para el requisito, y luego el código para hacer que el paso de la prueba.

Yo personalmente no utilizan TDD, pero sé que la gente que lo hace. Mi opinión personal es que es muy útil si usted está trabajando en algo que es más impulsado por las aplicaciones, como una interfaz de base de datos o usuario. Pero, por algo que es más pesado algoritmo (como un modelo de la física), me parece que me rompe el hilo de sus pensamientos y se interpone en el camino.

Escribiendo las pruebas unitarias primera es una práctica bastante común. Una gran ventaja es que usted no acaba de escribir pruebas de que su código pasará, sino más bien las pruebas que definen lo que es importante, lo que está tratando de lograr, y lo que quiere asegurarse de que no va a suceder. Le puede ayudar a dar cuerpo a su diseño. Además, se puede vet la paja con los interesados ??externos antes de código.

En cuanto a lo que pone a prueba a escribir, que es un poco subjetiva basada en el tiempo que tiene. Yo no iría código de investigación de antecedentes loco por escenarios que nunca se enfrentará. Dicho esto, es increíble lo que hace que la entrada de código que "nunca va a verlo". Por lo tanto, más pruebas son mejores, pero definitivamente hay rendimientos decrecientes en algún momento.

El idioma que se está codificando en materia. lenguajes dinámicos requieren más pruebas debido a que el compilador detectará menos problemas y los errores pueden ser más difíciles de pista (ya que pueden propagarse más tarde de la emisión inicial de entrada). Al menos, esta es mi opinión.

También hace una diferencia donde la entrada está viniendo. El público en general debe considerarse positivamente malicioso (es decir. La web), los empleados deben ser incompetente asumido, e incluso compañeros de codificadores (y usted!) Se debe asumir que ser al menos descuidado. Pero el peligro disminuye a medida que se acerque a su círculo interior.

  

¿alguien realmente sigue esta metodología?

Sí.

  

Parece una buena idea sobre el papel, pero en la práctica es?

Sí.

  

En caso de que escribir pruebas unitarias para ver cómo su método de asas mala / entrada maliciosa?

Sí.

  

¿Qué hay de funciones que nunca debería tener este tipo de entrada que se les pasa? ¿En qué punto se traza la línea?

Cuando se mueve de software para la psicosis.

Se puede - si se quiere - pruebas de escritura para situaciones imposibles. Sin embargo, está perdiendo su tiempo y su empleador está en una forma obvia.

escribir pruebas para los definidos casos de uso. Y eso es todo.

Usted no constituyen casos de prueba al azar basado en su imaginación.

¿Qué pasa si? ¿Qué pasa si los definidos casos de uso son incompletos? Gorrón. Usted escribe ensayos para la, contractual, interfaz de funcionario público - y nada más

.

¿Qué pasa si el diseño es inadecuado y se da cuenta de que la interfaz dada está lleno de especificaciones incompletas, las contradicciones y los agujeros de seguridad? Esto no tiene nada que ver con las pruebas. Esto es sólo la programación. Un mal diseño es un mal diseño.

¿Qué pasa si algún sociópata malicioso toma su código y lo utiliza de una manera que supera (o de otro modo no cumple) las especificaciones definidas? Gorrón. El sociópata gana. Ellos fueron capaces de poner su código en la situación imposible que no prueba para. ellos comprar una cerveza por ser tan inteligente.

Hay una diferencia de mentalidad entre la prueba y la prueba-antes-después. Escribir pruebas antes es una forma de diseño , en el que se está diseñando la interfaz de su código y definir el comportamiento esperado. Cuando a continuación, escribir código que pasa las pruebas, que valida su diseño. Y al final del desarrollo, le sucede que tiene un conjunto de pruebas que ya existen!

Con la prueba después, tienes que tener cuidado de evitar la trampa de escribir pruebas de que su código existente pasará. Es un enfoque diferente, y no es obtener la mayor cantidad de ella como la prueba antes de la versión.

Ya hay un un buen grupo bastante de respuestas, pero me gustaría decir una más piensan que el número de la pregunta 2.

Si usted hace sus unittest código "impulsada por los datos", que no deberia importa si el código está probando "malo" o la entrada de "bueno". Lo que importa es que usted tiene gran conjunto de datos suficientes que cubre tanto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top