引言
一个例子
我们先看一个例子,以了解对”规则”做单元测试的特点。我们有一个性能调优工具 WPA, 它能够将与性能相关的参数的值进行评估并推荐最优值。它的评估和推荐最优值算法都是基于”规则”的。
Java 虚拟机的初始堆大小(JVM initial heap size)是一个影响 JVM 的性能的关键参数。性能调优工具 WPA 有一套规则对“ JVM initial heap size ”的值进行评估(参见清单 1)。评估的结果有 5 个级别。级别“ 1 ”表示设置良好,可提高性能;级别“ 5 ”表示设置很差,会降低性能。
清单 1. JVM initial heap size rating algorithm
view plaincopy to clipboardprint? 1. Rating3UpperBounds = 1024 2. Rating3LowerBounds = 48 3. Rating5UpperBounds = 1536 4. Rating5LowerBounds = 32 5. Rating3Multiplier = 4 6. Rating5Multiplier = 3 7. 8. absoluteMaximumValue= Math.min(currentMemoryPoolSize, overallMemoryOnPartition) 9. / Rating3Multiplier 10. if (initialHeapSize > absoluteMaximumValue) { 11. return 4; 12. } 13. if ((initialHeapSize < Rating5LowerBounds) || 14. (initialHeapSize > Rating5UpperBounds)) { 15. rating = severe problem (5) 16. } 17. else if ((initialHeapSize < Rating3LowerBounds) || 18. (initialHeapSize > Rating3UpperBounds)) { 19. rating = probable problem (3) 20. } 21. …… 22. } 23. if (initialHeapSize * Rating5Multiplier > currentMemoryPoolSize) 24. { 25. return severe problem (5) 26. } 27. else if(initialHeapSize*Rating3Multiplier > currentMemoryPoolSize) 28. { 29. return max(rating, 3) 30. } 31. else if(initialHeapSize*Rating2Multiplier > currentMemoryPoolSize) 32. else { 33. return max(rating, 1) 34. } |
在这一套规则中,有三个输入参数:“initialHeapSize”(“JVM initial heap size”的值),“currentMemoryPoolSize” (内存池的值)和“overallMemoryOnPartition”(物理内存的值)。为了得到这些值,我们需要使用 Application Server 和 OS 提供的 API 。在使用这些 API 的时候,我们必须构造出 API 所需的运行环境。
在这一套规则中,包含很多不同的条件(见“ IF-ELSE ”语句)。在测试时(单元测试和功能测试),我们需要至少 24 组测试数据以覆盖所有的阀值(threshold value)和等价类(equivalent class)。参见表 1。