性能分析
性能分析是另外一种技术,是以收集程序运行时信息为手段研究程序行为的分析方法。性能分析的目的在于决定程序的哪个部分应该被优化,从而提高程序的速度或者内存使用效率。在新 Build 出现性能问题时,找出原因是至关重要的。通常,引起问题的原因基本是:
·源代码的变更:如可能是不必要的模块影响了性能,也可能是算法的改变影响了性能。
·测试代码的变更:如增加的用来改善代码覆盖率的测试用例可能导致变慢,也有可能这部分代码特别容易影响速度。
·测试数据的变更:如大量的测试数据(或者不常见的数据)可能对代码产生压力,导致瓶颈。
·环境的变更:如网络连接变慢。
我们应该使用一些能与测试协同工作的性能监控工具,设计专门的测试用例来测量性能,主动发现性能问题。通过性能监控工具,可以度量并分析在程序中所花费的时间,从而识别"热点"和无效的代码,找出应用程序的性能瓶颈;而且还可以立刻看到做出代码变更时所表现的不同性能,这样我们可以利用真实的代码而不是猜测来对程序的性能进行最优化操作。比如找出一个算法需要改良的位置后,把不同的优化方案放在虚拟机上运行,可以立刻分辨出找出孰优孰劣。通常,使用性能监控工具进行性能分析的步骤如下:
1. 设置基准,以对比特定数量自动化测试的期望值和实际值。
2. 使用处理过的程序运行自动化测试。
3. 收集数据。必须保证自动化测试在不崩溃的情况下,能够稳定运行足够合理的时间。
4. 分析收集到的数据,确定哪些测试或者方法看起来有问题。
5. 识别和研究这些问题,看看是否可以修正,然后重复整个过程。
Quantify是市场上流行的性能监控的工具之一,下图给出使用 Quantify 进行测试时自动生成的Callgraph。在Callgraph中,Quantify 收集有关哪些方法是调用者还是子调用者,以及这些调用花费了多长时间的信息,突出显示出最耗时间的代码路径。借助这些信息,可以清楚地找到代码中的“热点”,以确定是否有需要优化。
总结
在进行程序开发时,采用良好的设计和一致的编程规范是防止内存问题第一道也是最重要的措施。在此前提下,采用一些运行时分析软件可以很好地帮助开发人员发现忽略的内存问题,这应该成为软件自动化测试中的一个重要组成部分。