Récemment, j'ai poussé mon groupe à inclure plus de tests lors de l'écriture de leur code. Il y avait plusieurs bugs majeurs qui ont pris beaucoup plus de temps à attraper que probablement parler était nécessaire, car nous n'avions pas un bon régime de test en place.
Cependant, je pense qu'il serait certainement utile d'avoir les outils appropriés pour automatiser (ou pour aider à rationaliser) le processus. D'un autre côté, je ne connais pas les différentes options pour les suites de tests C ++, et comment décider entre elles?
Existe-t-il des directives sur ce qu'il faut rechercher - et y en a-t-il qui sont spécifiquement axés sur les applications numériques?
J'ai récemment utilisé googletest pour tester quelques bibliothèques numériques sur lesquelles je travaille et j'en suis très satisfait. Vous pouvez écrire des tests assez simples très rapidement ou vous pouvez écrire des tests compliqués qui nécessitent une initialisation des données, etc. Il fournit également (comme je suis sûr que beaucoup d'autres le font) des moyens de faire facilement des comparaisons à virgule flottante plutôt que sur le bit.
la source
Si vous construisez votre code avec CMake, le mécanisme ctest serait le choix évident. Il vous permet de tester votre code manuellement via la commande
ctest
, et prend également en charge des tests nocturnes approfondis via CDash .la source
Pour notre bibliothèque C ++ de biologie computationnelle ( Chaste ), nous utilisons http://cxxtest.com/ . C'est assez simple à utiliser, fonctionne bien, il fournit quelques macros pour tester avec
assert()
des instructions de style. Pour le calcul scientifique, il s'agit généralement de comparaisons directes simplesTS_ASSERT_EQUALS(a,b)
ou de comparaisons numériques avecTS_ASSERT_DELTA(a,b,tolerance)
.Des macros supplémentaires peuvent facilement être écrites en utilisant celles de base pour comparer vos propres vecteurs / matrices de votre choix. Utilement, vous pouvez également vérifier que votre code envoie des avertissements et des messages d'erreur appropriés dans des situations données. Vous pouvez parcourir quelques exemples dans les
test
dossiers de notre code source ici: https://chaste.cs.ox.ac.uk/trac/browser/trunkla source