Pregunta

Hay buenos recursos en línea para saber cómo crear, mantener y pensar acerca de la escritura de rutinas de prueba para el análisis numérico de código?

Una de las limitaciones que puedo ver algo así como la prueba de la multiplicación de la matriz es que la evidente pruebas (como tener una matriz siendo la identidad) no se puede probar la funcionalidad del código.

También, está el hecho de que generalmente se trata de grandes estructuras de datos así.¿Alguien tiene algunas buenas ideas sobre maneras de acercarse a este, o los punteros a los mejores lugares para encontrarlos?

¿Fue útil?

Solución

Suena como si usted necesita pensar acerca de las pruebas en al menos dos maneras diferentes:

  1. Algunos de los métodos numéricos permiten algunos meta-pensamiento.Por ejemplo, invertible operaciones le permiten configurar los casos de prueba para ver si el resultado está dentro de los límites de error aceptable de la original.Por ejemplo, la matriz M-inversa los tiempos de la matriz M * vector aleatorio V debería resultar en V de nuevo, dentro de algunas de medida aceptable de error.
    Obviamente, este ejemplo de los ejercicios de la matriz inversa, la multiplicación de la matriz y de la matriz de vectores multiplicación.Me gusta cadenas como estas, ya que puede generar una gran cantidad de pruebas al azar de los casos y obtener la cobertura estadística que sería un slog a tener que escribir a mano.Que no hace ejercicio individual de las operaciones en el aislamiento, sin embargo.

  2. Algunos de los métodos numéricos han cerrado de forma de expresión de su error.Si se puede establecer una situación con un conocido de la solución, a continuación, puede comparar la diferencia entre la solución y el resultado calculado, en busca de una diferencia que supera estos límites.

Fundamentalmente, esta pregunta ilustra el problema de que las pruebas de métodos complejos, bien se requiere bastante conocimiento del dominio.Referencias específicas requeriría un poco más de información específica sobre lo que se está probando.Sin duda recomiendo que al menos se han Steve Yegge del libro recomendado de la lista en la mano.

Otros consejos

Si usted va a estar haciendo el cálculo de matrices, el uso de LAPACK.Esto está muy bien-probado el código.Personas muy inteligentes han estado trabajando en él durante décadas.Se ha pensado profundamente acerca de los problemas que los no iniciados jamás imaginaría.

En general, me gustaría recomendar dos tipos de pruebas:sistemática y aleatoria.Sistemáticas me refiero a la exploración de casos de borde etc.Sirve de ayuda si usted puede leer el código fuente.A menudo los algoritmos de puntos de ramificación:calcular de esta manera para los números en este rango, esta otra forma de números en otro rango, etc.Los valores de la prueba cerca de los puntos de ramificación en cualquier lado ya que es donde la aproximación de error es a menudo mayor.

Al azar de los valores de entrada son también importantes.Si usted racionalmente recoger todos los casos de prueba, que de manera sistemática puede evitar algo que no te das cuenta que es un problema.A veces se puede hacer un buen uso de azar de los valores de entrada, incluso si usted no tiene los valores exactos de la prueba en contra.Por ejemplo, si usted tiene código para calcular una función y su inversa, usted puede generar 1000 valores aleatorios y ver si la aplicación de la función y su inversa poner de nuevo cerca de donde comenzó.

Echa un vistazo a un libro por David Gries llama La Ciencia de la Programación.Se trata de demostrar la corrección de programas.Si usted quiere estar seguro de que sus programas son correctos (hasta el punto de demostrar su veracidad), este libro es un buen lugar para empezar.

Probablemente no sea exactamente lo que estás buscando, pero es la ciencia de la computación respuesta a una ingeniería de software que se trate.

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