如何测试软件发布版本之间的代码性能?

时间:2010-12-22 21:16:03

标签: c# .net performance

我正在用C#/ .NET开发软件,但我想也可以问其他编程语言的问题。如何在发布版本之间测试软件的性能?让我详细说明一下。

在软件的生产发布之前,我想比较软件的性能,以获得该软件早期版本中提供的一组功能。假设您正在讨论一个软件库项目(没有GUI),这会导致一个或多个dll的发布。如何实现这一目标?有哪些最佳做法?我不可能将当前的dll与之前的版本dll交换并运行相同的测试。

我能想到的一种方法是在主分支(用于当前版本)和早期版本分支中添加相同的性能测试,然后比较性能。我认为这样做有一些痛苦,但是可能。

我能想到的另一种方法是从lest release分支开始,删除在最后一次发布之后放入的新代码和功能,然后运行测试。我不认为这会产生正确的结果,更不用说这种方法比以前的方法更痛苦。

感谢您的其他想法。更喜欢C#/ .NET特定的答案。

编辑1:Thisthis是有些相关的问题。

4 个答案:

答案 0 :(得分:3)

我们有一套性能测试。这些只是NUnit测试。每个测试设置一些对象,启动计时器(秒表运行良好),执行我们感兴趣的操作(例如,加载某个屏幕的数据),然后将经过的时间写入CSV文件。 (NUnit记录每次测试需要多长时间,但是我们想要排除设置逻辑,在某些情况下会因测试而异 - 所以做我们自己的定时器和日志更有意义。)

我们经常在相同的硬件和网络环境中运行这些测试。我们将结果导入数据库。然后,很容易构建显示趋势的图表,或者说出大比例变化的图表。

答案 1 :(得分:2)

如果想要实际比较版本之间的性能,那么您将需要一些在不同版本中执行相同功能的测试。单元测试通常适用于此。

您可以做的另一个更活跃的事情是使用基于预定义性能阈值的日志记录来检测代码。例如,当您在旧版本中运行代码时,您会获得一个指标。然后向您的应用程序添加计时代码,这样如果相同的功能在任何时间点花费更长的时间,请记录消息(或广播呼叫者可以选择记录的事件)。当然,您不希望过度使用定时代码本身会导致性能下降。

我们在使用SQL调用的应用程序中执行此操作。我们有一个阈值表示任何单个sql调用应该采取的最大时间,如果有超过阈值的SQL调用,那么我们将其记录为警告。我们还使用相同的东西跟踪给定http请求中的sql调用数。您的目标应该是随着时间的推移降低阈值。

您可以将这些测试包装在#if部分中,以便不包含在生产中,但将它们投入生产也非常有用。

答案 2 :(得分:1)

您可以将测试结果附加到每个新版本的源控制文本文件中。这将为您提供每个版本性能的易于访问的历史记录。

您对分支和主干运行性能测试的想法基本相同,但保存结果可能会节省您来回切换工作副本的工作量。

答案 3 :(得分:0)

我们有一个特殊的设置,用户(或测试人员)可以启用。我们启用它,它会生成一个CSV文件,我们可以将其输入Excel并查看性能报告。

它会报告某些操作的个人数量以及他们花了多长时间。 Excel以一种很好的视觉方式为我们展示了这一点。

所有代码都是自定义的,唯一不利的是性能跟踪代码的开销,但是我们对它进行基准测试并且几乎没有。这是一个很好的优化,非常短。

如果遇到无法重现的性能问题,这种方法的优点还在于您可以从客户那里获得良好的反馈。