有人做过时间单元测试吗?
我什至不确定这样的术语是否已被创造,但重点是测试操作是否在时间限制内执行。我有一些算法,我想测试它们的执行时间是否按预期增加,我想类似的测试可以用于 IO,以及什么不是,有点像 test_timeout 之类的。
然而,由于硬件会影响执行速度,因此它看起来并不微不足道。所以我想知道是否有人以前尝试过这种事情,是否可以分享他们的经验。
Thanks
Edit:尝试编制一份在这种情况下需要注意的事项清单
只是我的经验中的一些注释...我们关心许多组件的性能,并且有一个非常类似单元测试的框架来练习和计时它们(事后看来,我们应该只使用CppUnit
or boost::test
就像我们对单元测试所做的那样)。我们将这些称为“组件基准测试”而不是单元测试。
- 我们没有指定时间上限,然后通过/失败......我们只是记录时间(这部分与客户不愿意实际给出硬性能要求有关,尽管性能是他们非常关心的事情!) 。 (我们过去曾尝试过通过/失败,但体验很差,尤其是在开发人员机器上......由于电子邮件到达或某些内容在后台建立索引而导致太多误报)
- 致力于优化的开发人员只需致力于缩短相关的基准测试时间,而无需构建整个系统(与单元测试非常相似,让您专注于代码库的一小部分)。
- 大多数基准测试都会测试某些事物的多次迭代。资源的延迟创建可能意味着组件的首次使用可能需要相当多的与其相关的“设置时间”。我们注销“第一次”、“平均后续”和“平均所有”次数。确保您了解它们之间任何显着差异的原因。在某些情况下,我们会根据具体情况明确对设置时间进行基准测试。
- 应该是显而易见的,但是:只需为您真正关心的代码计时,而不是测试环境设置时间!
- 对于基准测试,您最终会比在单元测试中测试更多的“真实”案例,因此测试设置和测试运行时往往是一个lot longer.
- 我们有一台自动测试机器每晚运行所有基准测试并发布所有结果的日志。理论上,我们可以绘制图表或标记低于目标性能的组件。实际上,我们还没有时间进行类似的设置。
- 您确实希望这样的自动测试机器完全摆脱其他职责(例如,如果它也是您的 SVN 服务器,则有人进行大量检查将使您看起来像是出现了巨大的性能回归)。
- 考虑除时间之外您可能想要进行基准测试的其他标量,并计划从一开始就支持它们。例如“达到的压缩比”、“天网AI IQ”……
- 不要让人们对低于最低规格的硬件进行基准数据分析。我见过浪费时间的设计决策,因为在某人的垃圾笔记本上运行基准测试,而在目标平台(高端服务器)上运行会表明完全不同的东西!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)