5.1.6 性能测试可以发现的问题
表5-2展示可以通过性能测试发现的问题类型。
表5-2 性能测试可以发现的问题类型
问题类别 |
问题描述 |
内存问题 |
是否存在内存泄漏C/C++ |
是否有太多的临时对象Java |
|
是否有太多的操作设计生命周围的对象Java |
|
数据库问题 |
是否有数据库死锁Dead Lock |
是否经常出现长事务Long Transaction |
|
线程/进程问题 |
是否出现线程与进程同步失败 |
其他问题 |
是否出现资源竞争导致死锁 |
是否因为没有正确处理异常(如超时等)导致系统死锁 |
5.1.7 性能调优
经过性能测试后发现性能没有达到预期结果,当排除表5-2出现的错误外,如果仍旧不能解决问题,就要考虑性能调优了。性能调优如图5-17所示,主要包括应用程序诊断和系统调优,虽然性能调优是主要由开发人员解决,但是软件测试工程师也必须有一些了解。下面分别来看调优的使用方法。
图5-17 性能调优
1.代码调优[Microsoft1]
代码调优是最先想到的性能调优,大学中都学过《数据结构》和《算法分析》,选择一个好的算法就是调优的手段。从程序方面考虑,影响一个程序的性能需要从时间复杂度和空间复杂度来考虑。
案例5-10:嵌套函数。
让我们先来看以下代码:
function f(){ … f(); … }
大学都学过《数据结构》课程大学里都学过:任意一个嵌套函数,都可以用一个循环实现,并且使用循环的性能要比使用嵌套的性能好很多。这样我们就可以把代码改为:
function f(){ … while(){ } … }
接下来确定功能是否正确,再重新测试一下性能。
2.SQL语句调优
除了对代码进行优化,还可能对SQL语句进行优化,比如:
(1)select*from contact where username like 'ver%';
要优于:
select*from contact where username like '%ver%';
(2)合理利用数据库自带变量。
如Oracle产品,通过自带列rowid,可加快翻页显示的速度。
select * from titlewhere name like'%ver%'androwid<=1040 and rowid>1020
(3)合理建立索引。
索引的合理建立也可大大提高数据库的查询速度。
案例5-11:Oracle的rowid字段。
某BBS产品分页显示后台Oracle数据库中存储的数据,在进行容量测试的时候发现数据量小于50000,速度是正常的,但是达到甚至超过50000,性能就发生了很大地降低。分析发现数据库查询语句为:
select * from paper wheregroupname=2;
程序把数据库表中数据全部取出来,然后根据所显示的页数把相应的数据调用到相应的页面,由此可见这样的软件性能是比较低的。研发工程师考虑到Oracle数据库中含有隐藏字段rowid可以解决这个问题,把代码改为:
select * from paper wheregroupname=2 and rowid<=(PageNo+1)*20 and rowid> PageNo *20;
这样根据所要显示的页号遍历变量PageNo来决定调用多少数据到内存中,这样性能就得到了很大的提高。
3.其他调优方法
除了对代码、数据库进行调优方法外,还可以采用以下调优方法:
- 硬件的调优;
- 应用服务器的调优;
- 数据库服务器配置的调优;
- 操作系统的调优;
- 前端机器的调优;
- ……
5.1.8 性能测试角色
一个性能测试团队可能包括以下成员:
- 项目经理
Ø 计划软件测试时间,监督项目进度。
Ø 项目经理自己了解性能测试,进行合理的性能测试时间安排。
Ø 通过“进度”度量获得项目经验数据,据此做出正确的时间安排。
Ø 指定软件测试经理根据项目进度安排性能测试进度。
- 需求分析工程师
Ø 撰写性能测试需求。
Ø 用户可能不明确提出性能方面的需求,需求分析工程师需要指导用户确定性能需求。
Ø 系统用户数。
Ø 在不同用户数量级别的并发用户数下,系统的响应时间和服务器的资源利用率。
Ø 系统的处理能力。
- 系统架构师
Ø 根据需求做出正确的系统架构设计。
- 开发工程师
Ø 根据架构设计的要求进行编码。
- 软件测试经理
Ø 制定并组织评审性能测试计划。
Ø 组织资源。
Ø 跟踪项目进度。
Ø 处理性能测试过程中遇到的各种问题。
- 高级性能测试工程师
Ø 制定性能测试方案。
Ø 分析软件测试结果。
- 性能测试工程师
Ø 开发Vuser Script。
Ø 运行性能测试。
Ø 提交性能测试结果。
Ø 进行回归测试。
顾翔凡言:
不是好的工作会给你带来好的心情,而是好的心情会给你带来好的工作。