如何使用我自己的代码轻松地在我自己的文章中重现已发布的结果

计算科学 再现性
2021-12-18 00:15:12

我编写了一个程序/库,用于在文章中获取结果。(在这里,但我的问题一般性的。)我有一些我经常使用的测试ctest(运行需要几分钟)。为了重现文章中的一些表格或数字,我必须构建一个脚本或一个简单的驱动程序,它可能运行 10 分钟,有时甚至更长,所以我不想拥有这部分常规测试套件。同时,我想确保文章的结果可以是:

  • 后来转载
  • 确保在我继续开发库后它们仍然给出相同/正确的结果

目前,我尝试将一个小型驱动程序作为常规测试套件的一部分运行,如果我想重现文章中的结果,我会取消注释其中的一些行。当然,我永远不知道哪些确切的行以及是否必须调整其他一些参数才能获得与文章中完全相同的结果。

我还尝试了一个 Python 脚本来计算文章中的确切数字/表格。这样的脚本通常在库更新后停止工作,因为它没有定期运行(花费太多时间)。

我想到的最好方法是拥有一个 Fortran(或 C/C++)示例,该示例将定期编译(作为库的一部分),但不会在常规测试套件中运行。这样,至少我知道它编译得很好(因此希望也能运行)。作为常规测试套件的一部分,我将测试一些简单(较小)的示例。

处理这个问题的最佳方法是什么?

1个回答

在 deal.II 中,我们有一个由常规 Unix Makefile 驱动的测试套件。它有一个运行所有常用测试的默认目标,以及一个用于昂贵测试的单独目标。运行每个测试都是使用通用规则完成的,但默认目标仅为某些测试调用通用规则,而昂贵的目标则为昂贵的测试调用它。因为这一切都是使用通用规则完成的,所以它必须在任何给定时间都是最新的;可能过时的只能是测试名称列表。

更新:上面的文字在 2012 年是正确的。自 2014 年以来,deal.II 测试套件基于 CTest,但总体思路仍然有效。