Performance 执行TDD时的性能测试最佳实践?
我正在做一个项目,它非常需要一些性能调整 如果我的优化没有提高程序的速度,如何编写失败的测试 详细说明一下: 问题不在于发现要优化的部件。为此,我可以使用各种分析和基准测试工具 问题在于使用自动化测试来证明特定优化确实达到了预期效果。如果我可以使用测试套件来发现以后可能出现的性能退化,这也是非常可取的 我想我可以运行我的分析工具来获得一些值,然后断言我的优化代码会产生更好的值。然而,这一点的明显问题是,基准值并不是硬值。它们因当地环境而异 那么,总是使用同一台机器进行这种集成测试的答案是什么呢?如果是这样,您仍然需要考虑结果中的一些模糊性,因为即使在相同的硬件上,基准测试结果也可能会有所不同。那么如何考虑这一点呢Performance 执行TDD时的性能测试最佳实践?,performance,tdd,automated-tests,integration-testing,Performance,Tdd,Automated Tests,Integration Testing,我正在做一个项目,它非常需要一些性能调整 如果我的优化没有提高程序的速度,如何编写失败的测试 详细说明一下: 问题不在于发现要优化的部件。为此,我可以使用各种分析和基准测试工具 问题在于使用自动化测试来证明特定优化确实达到了预期效果。如果我可以使用测试套件来发现以后可能出现的性能退化,这也是非常可取的 我想我可以运行我的分析工具来获得一些值,然后断言我的优化代码会产生更好的值。然而,这一点的明显问题是,基准值并不是硬值。它们因当地环境而异 那么,总是使用同一台机器进行这种集成测试的答案是什么呢?
或者答案可能是保留旧版本的程序,并比较前后的结果?这将是我的首选方法,因为它主要与环境无关。有人有过这种方法的经验吗?我想,如果所有测试都能通过,并且最新版本的性能至少与前一版本一样好,那么只需要保留一个旧版本。首先,您需要为可接受的性能建立一些标准,然后您需要设计一个在使用现有代码时不符合该标准的测试,然后,您需要调整代码的性能,直到它通过测试。您可能会有多个性能标准,当然您应该有多个测试。记录当前代码的运行时间
if (newCode.RunningTime >= oldCode.RunningTime) Fail
在许多服务器应用程序(可能不是您的情况)中,性能问题仅在并发访问和负载下出现。因此,测量例程执行的绝对时间并试图改进它并没有多大帮助。即使在单线程应用程序中,这种方法也存在问题。测量绝对例行时间依赖于平台提供的时钟,这些是:;你最好依靠一个常规动作的平均时间 我的建议是:
- 使用分析来识别执行次数最多、花费时间最多的例程李>
- 使用诸如或之类的工具来详细说明具有代表性的测试用例,模拟并发访问,将应用程序置于压力之下,并测量(更重要的是)吞吐量和平均响应时间。这将使您更好地了解从外部角度看应用程序的行为
虽然您可以使用单元测试来建立应用程序的一些非功能方面,但我认为上面给出的方法将在优化过程中提供更好的结果。当在单元测试中放置与时间相关的断言时,您必须选择一些非常近似的值:时间可能因运行单元测试所使用的环境而异。您不希望测试失败仅仅因为您的一些同事使用了劣质硬件
调整就是要找到合适的东西进行调整。您已经有了一个正常运行的代码,因此在事后放置与性能相关的断言,而不建立关键的代码部分,可能会导致您在优化应用程序的非关键部分上浪费大量时间。在CI server中运行测试+评测。您还可以定期运行负载测试 您关心的是差异(正如您所提到的),所以它不是定义一个绝对值。有一个额外的步骤,将此运行的性能度量与上次生成的性能度量进行比较,并将差异报告为%。你可以对重要的时间变化发出警告 如果你关心绩效,你应该有明确的目标,你想达到并坚持这些目标。您应该在整个系统上进行测试。即使您的应用程序逻辑很快,您也可能会遇到视图问题,导致您无法实现目标。您也可以将其与差异方法相结合,但对于这些方法,您对时间变化的容忍度会降低
请注意,您可以在dev计算机上运行相同的进程,只需使用该计算机上以前的运行,而不是开发人员之间的共享运行。我怀疑将TDD应用于驱动性能是一个错误。无论如何,使用它来获得良好的设计和工作代码,并使用在TDD过程中编写的测试来确保持续的正确性——但一旦您拥有了经过良好考虑的代码和一套可靠的测试,您就可以进行良好的调整,并应用不同的(与TDD不同的)技术和工具
TDD为您提供了良好的设计、可靠的代码和测试覆盖率安全网。这将为您提供一个进行调优的好地方,但我认为,由于您和其他人所提到的问题,这不会让您在调优的道路上走得更远。我说,作为TDD的狂热支持者和实践者。对于调优本身,您可以直接比较旧代码和新代码。但不要把两份都放在身边。这听起来像是一场噩梦。而且,您只会将一个版本与另一个版本进行比较。功能的改变可能会降低您的功能,这是用户可以接受的
就我个人而言,我从未见过“必须比上一个版本快”这样的性能标准,因为它很难衡量 您会说“严重需要性能调整”。哪里哪些问题?哪些功能?谁说,企业,用户?什么是可接受的性能?3秒?2秒?50毫秒 任何性能分析的起点