【问题标题】:What form of testing should I perform?我应该执行什么形式的测试?
【发布时间】:2012-05-04 14:44:39
【问题描述】:

我想用 C/C++ 或 Java (可能是 Python)编写一个算法(一堆机器学习算法)。语言对我来说并不重要 - 我对以上所有内容都很熟悉。

对我来说重要的是测试。我想使用训练数据训练我的模型。所以我有测试输入,我知道输出应该是什么,并将它与模型的输出进行比较。这是一个什么样的测试?是单元测试吗?我该如何解决这个问题?我可以看到我可以编写一些代码来检查我需要检查的内容,但我想将测试与主代码分开。测试是一个发展良好的领域,我以前见过这样做,但我不知道这种特殊测试的名称和类型,以便我可以阅读它而不会造成混乱。如果您能告诉我这种测试方法叫什么,我将不胜感激。

【问题讨论】:

    标签: c++ unit-testing testing tdd automated-tests


    【解决方案1】:

    虽然这是一篇很老的帖子,但我的 2 美分 :)

    一旦您决定使用哪种算法方法(可以说是您的“评估协议”)并在单一边缘情况下测试了您的算法,您可能会对在多个数据集上运行算法的方法感兴趣并断言结果高于某个阈值(个别或平均等)

    这个tutorial 解释了如何在pytest 框架内完成它,这是python 中最流行的测试框架。它基于一个示例(比较多个数据集上的多项式拟合算法)。

    (我是作者,欢迎在github页面提供反馈!)

    【讨论】:

      【解决方案2】:

      它的单元测试。对控制器进行测试,并签入和签出代码,而不会真正弄乱您的开发代码。此过程也称为测试驱动开发 (TDD),您的每个开发周期都在进入下一个软件迭代或阶段之前进行测试。

      【讨论】:

        【解决方案3】:

        你最好的选择是观看测试大神http://misko.hevery.com/的心理测试视频

        Misko 视频链接:

        http://misko.hevery.com/presentations/

        阅读这份谷歌测试指南http://misko.hevery.com/code-reviewers-guide/

        已编辑:

        任何人都可以编写测试,它们真的很简单,编写测试没有什么魔力,你可以简单地做这样的事情:

        var sut = new MyObject();
        var res = sut.IsValid();
        if(res != true)
        {
          throw new ApplicationException("message");
        }
        

        这是当然的理论,现在我们有工具来简化测试,我们可以写这样的东西:

        new MyObject().IsValid().Should().BeTrue();
        

        但你应该做的是专注于编写可测试的代码,这就是神奇的关键

        只需遵循 Misko 的测试视频心理即可开始

        【讨论】:

          【解决方案4】:

          可能回溯测试,这意味着您有一些历史输入并在它们上运行您的算法以评估您的算法的性能。您自己使用的术语 - training data - 更为笼统,您可以搜索该术语以找到一些有用的链接。

          【讨论】:

            【解决方案5】:

            如果您正在编写机器学习项目,那么测试和培训过程并不是真正的测试驱动开发。你听说过协同进化吗?你的学习系统有一组谜题,它们本身也在不断发展。他们的适应度取决于他们对您的案件的混淆程度。

            例如,我想发展一个排序网络。我的学习系统是产生网络的程序。我的协同进化系统生成难以分类的输入。排序网络因产生正确的排序而获得奖励,而协同进化系统因在排序网络中触发了多少失败而获得奖励。

            我已经通过基因编程项目做到了这一点,并且效果很好。

            【讨论】:

              【解决方案6】:

              如果您的输入/输出位于整个程序的外部接口上,那就是黑盒系统测试。如果您要进入程序内部以放大特定功能,例如搜索功能,直接向该功能提供输入并观察行为,这就是单元测试。这可以在功能级别和/或模块级别完成。

              【讨论】:

                【解决方案7】:

                这听起来很像Test-Driven Development (TDD),您在生产代码之前创建unit-tests。这个网站上有很多关于这两个主题的详细答案。我已经链接了几个相关的问题来帮助您入门。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-05-31
                  • 1970-01-01
                  • 2011-11-19
                  • 1970-01-01
                  • 2019-10-25
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-06-01
                  相关资源
                  最近更新 更多