有人做过时间单元测试吗?
我甚至不确定这种术语是否被创造出来,但重点是测试操作是否在时间限制内执行.我有一些算法,我想测试他们的执行时间是否按预期增加,我想类似的测试可以用于IO,什么不是,有点像test_timeout或其他东西.
但是,由于硬件会影响执行速度,因此它似乎并不重要.所以我想知道是否有人曾经尝试过这种事情,如果他们愿意分享他们的经验.
谢谢
编辑:尝试编译在这种情况下需要处理的事项列表
从我的经验中得到的一些注释......我们关心我们许多组件的性能,并且有一个非常类似于测试的框架来锻炼和计时(事后看来,我们应该使用CppUnit
或者boost::test
像我们一样用于单元测试).我们将这些称为"组件基准"而不是单元测试.
我们没有指定时间上限然后通过/失败...我们只是记录时间(这部分与客户不愿意实际提供硬性能要求有关,尽管性能是他们非常关心的事情!) .(我们过去曾尝试通过/失败并且遇到了糟糕的经历,特别是在开发人员计算机上......由于电子邮件到达或者后台正在编写索引而导致错误警报太多
致力于优化的开发人员可以在不必构建整个系统的情况下完成相关的基准测试时间(与单元测试非常相似,让您专注于代码库的一点).
大多数基准测试都会测试几次迭代迭代.懒惰的资源创建意味着组件的首次使用可以具有与之相关的更多"设置时间".我们注销"第一","平均后续"和"平均所有"时间.确保您了解这些之间任何重大差异的原因.在某些情况下,我们明确将设置时间作为个案进行基准测试
应该是显而易见的,但是:只需要实际关注的代码,而不是测试环境的设置时间!
对于基准你最终测试"真实"的情况下,很多比你在做单元测试,所以测试设置和测试运行时往往会被很多时间.
我们有一台自动测试机器每晚运行所有基准测试并发布所有结果的日志.从理论上讲,我们可以对其进行图形化,或者将其标记为低于目标性能的组件.在实践中,我们还没有开始设置这样的东西.
你确实希望这样一个自动测试机器完全没有其他职责(例如,如果它也是你的SVN服务器,那么进行大量结账的人会让你看起来像是一个巨大的性能回归).
考虑除了时间之外您可能想要进行基准测试的其他标量,并计划从一开始就支持它们.例如,"达到压缩比","天网AI IQ"......
不要让人们对子最小规格硬件上的基准数据进行任何分析.我已经看到浪费时间浪费'由于对某人的垃圾游戏进行基准测试而进行的设计决策,当目标平台上运行 - 高端服务器 - 会表明完全不同的东西!