2008-08-19 11 views
7

¿Hay algún buen recurso en línea sobre cómo crear, mantener y pensar en escribir rutinas de prueba para el código de análisis numérico?¿Cómo probar las rutinas de análisis numérico?

Una de las limitaciones que puedo ver para probar la multiplicación de matrices es que las pruebas obvias (como tener una matriz como identidad) pueden no probar completamente la funcionalidad del código.

Además, existe el hecho de que generalmente se trata de grandes estructuras de datos también. ¿Alguien tiene algunas buenas ideas sobre formas de abordar esto, o tiene consejos sobre buenos lugares para mirar?

Respuesta

3

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

  1. Algunos métodos numéricos permiten alguna meta-pensamiento. Por ejemplo, las operaciones invertibles le permiten configurar casos de prueba para ver si el resultado se encuentra dentro de los límites de error aceptables del original. Por ejemplo, la matriz M-inversos veces la matriz M * vector aleatorio V debería resultar en V de nuevo, dentro de una cierta medida de error aceptable.
    Obviamente, este ejemplo ejercita la matriz inversa, la multiplicación de la matriz y la multiplicación matriz-vector. Me gustan las cadenas de este tipo porque puede generar bastantes casos de prueba aleatorios y obtener una cobertura estadística que sería un trabajo difícil para escribir a mano. Sin embargo, no ejercen operaciones individuales en aislamiento.

  2. Algunos métodos numéricos tienen una expresión de forma cerrada de su error. Si puede configurar una situación con una solución conocida, puede comparar la diferencia entre la solución y el resultado calculado, buscando una diferencia que exceda estos límites conocidos.

Fundamentalmente, esta pregunta ilustra el problema de que la prueba de métodos complejos requiere bastante conocimiento del dominio. Las referencias específicas requerirían información un poco más específica sobre lo que está probando. Definitivamente recomendaría que al menos tengas a mano el Steve Yegge's recommended book list.

1

Echa un vistazo a un libro por David Gries llamado The Science of Programming. Se trata de probar la corrección de los programas. Si quiere asegurarse de que sus programas sean correctos (hasta el punto de probar su corrección), este libro es un buen lugar para comenzar.

Probablemente no sea exactamente lo que está buscando, pero es la respuesta de la informática a una pregunta de ingeniería de software.

2

Si va a hacer cálculos matriciales, use LAPACK. Este es un código muy bien probado. Las personas muy inteligentes han estado trabajando en ello durante décadas. Han pensado profundamente en asuntos que los no iniciados nunca pensarían.

En general, recomendaría dos tipos de pruebas: sistemáticas y aleatorias. Por sistemática me refiero a explorar casos extremos, etc. Ayuda si puedes leer el código fuente. A menudo, los algoritmos tienen puntos de ramificación: calcule de esta manera los números en este rango, esta otra manera para los números en otro rango, etc. Pruebe valores cercanos a los puntos de ramificación en cualquier lado porque es donde el error de aproximación suele ser mayor.

Los valores de entrada aleatorios también son importantes. Si selecciona racionalmente todos los casos de prueba, puede evitar sistemáticamente algo de lo que no se da cuenta es un problema.A veces puede hacer un buen uso de los valores de entrada aleatorios, incluso si no tiene los valores exactos para contrastar. Por ejemplo, si tiene un código para calcular una función y su inversa, puede generar 1000 valores aleatorios y ver si al aplicar la función y su inversa lo colocan cerca de donde comenzó.

Cuestiones relacionadas