Recientemente, he estado presionando a mi grupo para que incluya más pruebas al escribir su código. Hubo varios errores importantes que tomaron mucho más tiempo para detectar de lo que probablemente era necesario hablar, porque no teníamos un buen régimen de pruebas.
Sin embargo, sospecho que sería útil tener las herramientas adecuadas para automatizar (o ayudar a simplificar) el proceso. Por otro lado, no conozco las diversas opciones para las suites de prueba de C ++ y cómo decidir entre ellas.
¿Existen pautas sobre qué buscar, y hay alguna que esté específicamente orientada a las aplicaciones numéricas?
Recientemente he estado usando googletest para probar un par de bibliotecas numéricas en las que trabajo, y estoy muy contento con eso. Puede escribir pruebas bastante simples muy rápidamente o puede escribir pruebas complicadas que requieren inicialización de datos, etc. También proporciona (como estoy seguro de que muchos otros lo hacen) formas de hacer fácilmente comparaciones de punto flotante en lugar de bit a bit.
fuente
Si está creando su código con CMake, entonces el mecanismo ctest sería la opción obvia. Le permite probar su código manualmente a través del comando
ctest
y también admite pruebas extensas nocturnas a través de CDash .fuente
Para nuestra biblioteca de C ++ de biología computacional ( Chaste ) utilizamos http://cxxtest.com/ . Esto es bastante simple de usar, funciona bien, proporciona algunas macros para probar con
assert()
declaraciones de estilo. Para la computación científica, estas son generalmente comparaciones directas simplesTS_ASSERT_EQUALS(a,b)
o con comparaciones numéricas conTS_ASSERT_DELTA(a,b,tolerance)
.Las macros adicionales se pueden escribir fácilmente usando estas básicas para comparar sus propios vectores / matrices de elección también. De manera útil, también puede verificar que su código arroje advertencias y mensajes de error apropiados en situaciones determinadas. Puede buscar algunos ejemplos en las
test
carpetas de nuestro código fuente aquí: https://chaste.cs.ox.ac.uk/trac/browser/trunkfuente