进行 TDD 时的性能测试最佳实践?

标签 performance tdd automated-tests integration-testing

我正在做一个非常需要一些性能调整的项目。

如果我的优化没有提高程序的速度,我该如何编写失败的测试?

详细说明一下:

问题不在于发现要优化哪些部分。我可以为此使用各种分析和基准测试工具。

问题是使用自动化测试来记录特定优化确实具有预期效果。如果我以后可以使用测试套件来发现可能的性能回归,那也是非常可取的。

我想我可以运行我的分析工具来获取一些值,然后断言我优化的代码会产生更好的值。然而,一个明显的问题是基准值不是硬值。它们因本地环境而异。

那么,总是使用同一台机器做这种集成测试的答案是什么?如果是这样,您仍然需要考虑结果中的一些模糊性,因为即使在相同的硬件上,基准测试结果也会有所不同。那么如何考虑到这一点呢?

或者也许答案是保留旧版本的程序并比较前后的结果?这将是我的首选方法,因为它主要与环境无关。有没有人有这种方法的经验?我想,如果最新版本的性能至少与前一个版本一样好,那么如果所有测试都可以通过,那么只需要保留一个旧版本。

最佳答案

我怀疑应用 TDD 来驱动性能是一个错误。无论如何,使用它来获得良好的设计和工作代码,并使用在 TDD 过程中编写的测试来确保持续的正确性 - 但是一旦您拥有良好分解的代码和可靠的测试套件,您就处于良好状态调整,并应用不同的(与 TDD 不同的)技术和工具。

TDD 为您提供良好的设计、可靠的代码和测试覆盖安全网。这使您处于调优的好位置,但我认为由于您和其他人提到的问题,它根本不会带您在调优之路上走得更远。作为 TDD 的忠实拥护者和支持者以及实践者,我这么说。

关于进行 TDD 时的性能测试最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751626/

相关文章:

unit-testing - 我应该为每个断言创建一个新的测试方法吗?

ruby-on-rails - 测试用例中的随机查询执行时间

automated-tests - 如何按特定顺序运行 Robotium 测试?

java - 使用 MongoDB Java 驱动程序的索引不会提高性能

javascript - 原型(prototype)如何在引擎盖下工作?

javascript - 替换消息中出现的 n 次特定字符串

java - TestNG:一个@Test 有多个@DataProvider

C++ 渐近分析

java - 测试一个巨大的分解方法及其内部辅助方法

java - 如何根据枚举列表值运行每个浏览器驱动程序?