我正在做一个非常需要一些性能调整的项目。
如果我的优化没有提高程序的速度,我该如何编写失败的测试?
详细说明一下:
问题不在于发现要优化哪些部分。我可以为此使用各种分析和基准测试工具。
问题是使用自动化测试来记录特定优化确实具有预期效果。如果我以后可以使用测试套件来发现可能的性能回归,那也是非常可取的。
我想我可以运行我的分析工具来获取一些值,然后断言我优化的代码会产生更好的值。然而,一个明显的问题是基准值不是硬值。它们因本地环境而异。
那么,总是使用同一台机器做这种集成测试的答案是什么?如果是这样,您仍然需要考虑结果中的一些模糊性,因为即使在相同的硬件上,基准测试结果也会有所不同。那么如何考虑到这一点呢?
或者也许答案是保留旧版本的程序并比较前后的结果?这将是我的首选方法,因为它主要与环境无关。有没有人有这种方法的经验?我想,如果最新版本的性能至少与前一个版本一样好,那么如果所有测试都可以通过,那么只需要保留一个旧版本。
最佳答案
我怀疑应用 TDD 来驱动性能是一个错误。无论如何,使用它来获得良好的设计和工作代码,并使用在 TDD 过程中编写的测试来确保持续的正确性 - 但是一旦您拥有良好分解的代码和可靠的测试套件,您就处于良好状态调整,并应用不同的(与 TDD 不同的)技术和工具。
TDD 为您提供良好的设计、可靠的代码和测试覆盖安全网。这使您处于调优的好位置,但我认为由于您和其他人提到的问题,它根本不会带您在调优之路上走得更远。作为 TDD 的忠实拥护者和支持者以及实践者,我这么说。
关于进行 TDD 时的性能测试最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751626/