我应该进行什么形式的测试?

时间:2012-04-23 23:45:00

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

我想用C / C ++编写一个算法(一堆机器学习算法),也许用Java编写,可能用Python编写。这种语言对我来说并不重要 - 我熟悉上述所有内容。

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

7 个答案:

答案 0 :(得分:0)

这听起来很像Test-Driven Development (TDD),您可以在生产代码之前创建unit-tests。关于这两个主题,本网站有许多详细的答案。我已经将一些相关的问题与你联系起来了。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

例如,我想改进排序网络。我的学习系统是生成网络的程序。我的共同演化系统产生难以排序的输入。分拣网络因产生正确的排序而获得奖励,并且共同进化系统因其在分拣网络中触发的故障而得到奖励。

我已经完成了遗传编程项目,并且效果很好。

答案 3 :(得分:0)

可能回测,这意味着您有一些历史输入并在其上运行算法来评估算法的性能。您自己使用的术语 - 训练数据 - 更为通用,您可以搜索它以找到一些有用的链接。

答案 4 :(得分:0)

你最好的选择是观察测试上帝http://misko.hevery.com/

中视频的心理

Misko视频链接:

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

请阅读此Google测试指南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测试视频的心理就可以开始

答案 5 :(得分:0)

其单元测试。控制器经过测试,代码可以检入和检出,而不会弄乱你的开发代码。此过程也称为测试驱动开发(TDD),您可以在进入下一个软件迭代或阶段之前测试每个开发周期。

答案 6 :(得分:0)

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

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

tutorial说明了如何在pytest框架内进行操作,该框架是python中最流行的测试框架。它基于一个示例(在多个数据集上比较多项式拟合算法)。

(我是作者,随时在github页面上提供反馈!)