那么测试人员应该如何发现数据库相关的性能问题呢?
首先要分析什么会引起数据库的性能问题,一般来说有两个主要原因:数据库的设计和SQL语句。
数据库的设计又分为数据库的参数配置和逻辑结构设计,前一种比较好解决,后一种则是测试人员需要关注的,糟糕的表结构设计会导致很差的性能表现。例如,没有合理地设置主键和索引则可能导致查询速度大大降低。没有合理地选择数据类型也可能导致排序性能降低。
低效率的SQL语句是引起数据库性能问题的主要原因之一,其中又包括程序请求的SQL语句和存储过程、函数等SQL语句。对这些语句进行优化能大幅度地提高数据库性能,因此是测试人员需要重点关注的对象。
技巧:可以借助一些工具来帮助找出有性能问题的语句,例如SQL Best Practices Analyzer、SQLServer数据库自带的事件探查器和查询分析器、LECCO SQLExpert等。
软件的“极限考验”——压力测试
是否想知道软件系统在某方面的能力可以达到一个怎样的极限呢?软件项目的管理者以及市场人员会尤其关心压力测试的结果,想知道软件系统究竟能达到一个怎样的极限。压力测试(stress testing)就是一种验证软件系统极限能力的性能测试。
压力测试与负载测试(load testing)的区别在于,负载测试需要进行多次的测试和记录,例如随着并发的虚拟用户数的增加,系统的响应时间、内存使用、CPU使用情况等方面的变化如何。压力测试的目的很明确,就是要找到系统的极限点。在系统崩溃或与指定的性能指标不符时的点,就是软件系统的极限点。
说明:实际上,在做性能测试的过程中不会严格区分这些概念,它们的界限有些模糊。对于测试人员来说,更关心的是如何满足性能需求,如何进行性能测试。
经常碰到性能需求不明确的情况。用户通常不会明确地提出性能需求,在进行需求分析和设计时也通常把性能考虑在后面。即使提出了性能上的要求,也是很模糊的,例如:“不能感觉到明显的延迟”。
对于不明确的性能需求,通常需要进行的不是极限测试,而是负载测试,需要逐级验证系统在每一个数据量和并发量的情况下的性能响应,然后综合分析系统的性能表现形式。