C++ 为研究人员简化算法测试。

C++ 为研究人员简化算法测试。,c++,scripting,real-time,C++,Scripting,Real Time,我在一个团队工作,该团队的工作内容包括大量的研究开发和完整的运输代码 我有一半的时间开发在实时系统上运行的流程(介于软实时和硬实时、中实时之间?) 另一半我为那些根本不关心代码的研究人员编写或优化流程 目前我正在研究一个过程,我必须将它分成两个不同的分支 一个团队有一个研究版本,一个生产版本,偶尔需要与研究代码合并,以便在生产中获得最新和最好的版本 要测试这些流程,您需要设置一个半复杂的测试环境,以便在正确的时间(实时系统)将我们分析的数据发送到流程 我在想我该怎么做: 意念 实施 试验 后藤1

我在一个团队工作,该团队的工作内容包括大量的研究开发和完整的运输代码

我有一半的时间开发在实时系统上运行的流程(介于软实时和硬实时、中实时之间?)

另一半我为那些根本不关心代码的研究人员编写或优化流程

目前我正在研究一个过程,我必须将它分成两个不同的分支

一个团队有一个研究版本,一个生产版本,偶尔需要与研究代码合并,以便在生产中获得最新和最好的版本

要测试这些流程,您需要设置一个半复杂的测试环境,以便在正确的时间(实时系统)将我们分析的数据发送到流程

我在想我该怎么做:

  • 意念
  • 实施
  • 试验
  • 后藤1号
  • 对我的同事来说,尽可能轻松、快速、无痛地骑自行车

    我的一个想法是在这些长时间运行的进程中嵌入一种脚本语言。 因此,随着流程的运行,他们可以调整实际的算法&它的参数

    我立刻看了看:

    • Lua(有用)
    • Python(有用)
    这两种方法似乎都是可行的,实际上可能完全解决给定的问题

    还有什么好主意吗

    在1-2行更改后重新编译,重新部署到测试环境并重新启动都很糟糕


    这个系统相当复杂,希望我解释得有几分得体。

    我不确定我是否理解您的系统,但是如果构建和部署太复杂,也许您可以将其自动化?如果部署是完全自动的,这能解决问题吗


    我不明白脚本语言如何解决这个问题?如果您更改了算法,您仍然需要从头开始计算,不是吗?

    听起来您需要的是或类似的东西;每次接触基线代码时,它都会重建并重新运行测试。

    嵌入Lua比嵌入Python容易得多

    • Lua从一开始就被设计成嵌入式;Python的可嵌入性是事后移植的

    • Lua比Python小20倍,也更简单


    您对构建过程的描述不多,但使用真正强大的make版本可以显著简化构建和测试。我用的是安德鲁·休姆的,但你最好还是花点时间去掌握格伦·福勒的,这可以动态地增加依赖性,消除对单独配置步骤的需要。我通常不推荐nmake,因为它有点复杂,但很明显,Fowler和他的团队已经将nmake解决方案内置到许多可伸缩性和可移植性问题中。对于您的特定情况,可能值得努力掌握它。

    如果您可以通过脚本更改足够多的程序,而无需完全重新编译,那么您可能应该考虑将系统拆分为更小的部分。您可以有一个处理数据加载等的“服务器”,然后是执行实际处理的客户机代码。每次系统加载新数据时,它都可以检查并查看客户机代码是否已重新编译,如果是这样,则使用它


    我认为这将有几个优点,其中最大的优点是整个系统将不那么复杂。现在你用一种语言而不是两种语言工作。当从Python或Lua模式移动到C++模式时,人们就不太可能会把事情搞得一团糟。通过在系统中嵌入其他语言,您也会面临依赖它的风险。如果使用Python或Lua来TWAX程序,那么这些语言在部署的时候要么变成依赖,要么需要将东西备份到C++。如果你选择将东西移植到C++,那么在切换过程中会出现bug的另一个机会。p> 系统已设置好,因此您可以启动流程并等待数据。数据以每N分钟的周期输入系统。我曾设想,我将在任何数据接收事件上阅读脚本。因此,您可以在更新期间或中间进行更改,下一次更新将与您的新更改一起运行。虽然构建系统并不十分出色,但这并不是真正的问题。您的实时系统是什么平台?Linux,所有IO都有定制的内部库。生产系统运行在内部Linux集群上。我有buildbot设置,用于持续集成。但结果并非真正可测试。这更像是一个科学家不得不坐下来分析结果的例子,听起来测试过程本身就是你的问题;让一位科学家参与进来似乎并不理想。为什么不建立一个测试集合,将已知输入与已知输出进行比较?研究领域是天气,算法的开发主要是为了改进算法。虽然这是一个好主意,但为已知良好的输入和输出生成完整的案例数据可能比节省时间要多。您不能从过去的数据中捕获测试案例吗?我们目前使用的是一个相当复杂的基于make的构建系统。正如您所描述的,它使用动态依赖关系,这非常好。好的建议。我更倾向于卢阿,我同意你的观点。