由于我不知道我的代码将运行在什么样的系统,我该如何编写使用系统的潜力,它的准绳业绩比较基准的部署时间。

我的意思是,如果一个系统能够运行件的每秒1000次的代码,我想测试,以确保是正值接近1000尽可能下。如果只能做500,那么这就是我想它比对率。

如果它有助于使答案更具体的,我使用JUnit4。

感谢您。

有帮助吗?

解决方案

一个测试意味着你有一个通过/失败阈值。对于性能测试,这意味着太慢,你失败了,速度不够快,你通过。如果你失败了,你开始做返工。

如果您不能失败,那么你标杆,而不是实际测试。

当你谈论“系统能够运行的”你必须定义“能人”。你可以使用任何大量的硬件性能基准。油石,Dhrystone的,等等,都是受欢迎的。或者,也许你有一个数据库密集型应用程序,那么你可能想看看TPC基准。或者,也许你有一个网络密集型应用程序和要使用的netperf。或GUI密集型应用程序,要使用某种图形基准。

任何这些给你某种“能力”的测量。选择一个或多个。他们都是很好的。同样值得商榷。向你的竞争对手,并远离你同样偏颇。

一旦你运行基准,然后你可以运行软件,看看系统实际执行。

您可以 - 如果你收集到足够的数据 - 建立一些基准数字和你的业绩数字有一定相关性。你会看到各种变化的根据工作量,硬件配置,操作系统版本,虚拟机,数据库服务器等。

使用不够盒子有足够不同的配置足够的数据,你将最终能够开发出性能模型,说:“给这个硬件,软件,调整参数和配置,我希望我的软件做每秒[X]交易“。这就是“能人”坚实的定义。

一旦你的模型,你就可以对能力比较数量的软件。除非你有一个非常完整的模型,你真的不知道哪个系统能够甚至每秒运行一段代码1000次。

其他提示

我不会用于性能测试单元测试有几个原因。

首先,单元测试不应该依赖于周围的系统/代码。性能测试在很大程度上取决于硬件/ OS上的,所以很难得到统一的措施,这将是两个开发人员工作站使用,构建服务器等。

其次,单元测试应该执行真快。当你这样做性能测试,你通常需要有相当大的数据集,并重复运行,以平均数几次/摆脱开销等等的数量。这些都对快速测试方法的思路工作。

布赖恩同意时,他说的单元测试是不恰当的方式做性能测试即可。但是我放在一起,可以用来作为集成测试以在不同的系统配置/环境中运行一个简单的例子。点击注意,只是给的什么可以在这方面做的想法,并没有提供效果都不够精确备份任何官方声明有关系统的性能。

import static org.junit.Assert.*;
import org.junit.Test;

package com.stackoverflow.samples.tests {

    @Test
    public void doStuffRuns500TimesPerSecond() {
        long maximumRunningTime = 1000;
        long currentRunningTime = 0;
        int iterations = 0;

        do {
            long startTime = System.getTimeMillis();

            // do stuff

            currentRunningTime += System.getTimeMillis() - startTime;
            iterations++;
        }
        while (currentRunningTime <= maximumRunningTime);

        assertEquals(500, iterations);
    }
}

我做对即发往实时系统中是花了太长时间来计算一个正确的答案是失败的代码测试了一段时间的测量。

我所做的就是情节三角洲CPU时间的考验接手最近的版本。注意,CPU时间不是实时的。实际值并不重要太多 - 重要的是它有多大改变。

如果我提交修改的算法,其显著改变了运行时间为测试我可以很容易地放大到导致它的具体变更。我真正关心的是这些景点 - 不一定是绝对值。有相当经常许多权衡在实时系统和这些不能总是被表示到测试框架作为一个简单的比较。

纵观绝对时间和规范他们起初似乎是合理的,但在现实中你的系统和目标系统将非线性之间的转换 - 例如缓存压力,交换使用,磁盘速度在目标系统上等可能导致时间为测试在不同的阈值作为系统发生爆炸。

如果你绝对需要一个测试是准确的在这方面,复制到目标系统,当你希望它是在使用它作为一个试验奴隶,而是在一个类似的环境。

在我的情况下,它实际上可以下载固件到DSP,远程关开机它,阅读从一个串口响应,或看到没有任何反应,因为它崩溃!

- jeffk ++

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top