完善软件压力测试 避免系统崩溃恶果 软件测试
讲到测试,人们脑海中首先浮现的是针对软件正确性的测试,即常说的功能测试。但是软件仅仅只是功能正确是不够的。在实际开发中,还有许多其它的非功能因素在起着决定性作用。比如软件响应速度,影响软件响应速度的因素很多,有些是因为算法不够高效,有些可能受用户并发数的影响。
在我所负责的测试项目中,程序功能能够满足客户需求,但当把程序交付客户使用时,由于客户网络应用环境复杂,而我们在压力测试时没有周密考虑各种可能发生的情况,软件程序在巨大负载下频繁崩溃,使测试团队饱受客户和老板的抱怨。由此,我认识到随着网络环境的复杂性和多样性,压力测试是软件质量保证的重要元素之一,绝对不能马虎了事。
什么是压力测试?
在软件功能测试中,白盒和黑盒技术用于对正常程序功能和性能进行详尽的检查和测试。而压力测试(Stree Testing)则是用来对付非正常的情况。
(1)什么是压力测试
压力测试是指模拟巨大的工作负荷来测试应用程序在峰值情况下如何执行操作。例如模拟实际软硬件环境,在超出用户常规负荷下,长时间运行测试工具来测试被测系统的可靠性,和测试被测系统的响应时间,目的是在极限负载下识别程序的弱点。
在众多类型的软件测试中,压力测试主要是以软件响应速度为测试目标,尤其是针对在较短时间内大量并发用户访问时软件的抗压能力。因此,压力测试是在一种需要反常数量、频率或资源下运行系统。由于我们之前对“反常”这个关键词没有理解好,只进行了常规的测试,在这一点上客户的批评让我们感到非常汗颜,说我们是“头发长,见识短”。
(2)压力测试和负载测试的区别
在这次项目测试前,我一直对压力测试和负载测试存在着一定程度的混淆。经过这次系统崩溃后,我对压力测试和负载测试的区别有了新的认识。压力测试是在超常规负荷条件下,长时间连续运行系统,检验应用程序的各种性能表现和反应。负载测试是指测试应用程序在常规负荷下,确认响应时间和其它的性能和表现。
实际上,压力测试也是从比较小的负载开始,逐渐增加模拟用户的数量,直到应用程序响应时间超时。压力测试的特点是长时间连续运行,增加超负荷(并发,循环操作,多用户)来测试什么时候系统会产生异常,以及异常处理能力,找出瓶颈所在。现在的我终于明白到其实压力测试实际上就是超常规的负载测试。
(3)压力测试的核心原则
一个有效的压力测试需要遵循一些核心的基本原则,这些原则可以让我们在测试过程中时刻提醒我们压力测试是否还有更多的极端可能。
①重复:最明显且最容易理解的压力原则就是测试的重复。换句话说,重复测试就是一遍又一遍地执行某个操作或功能。功能测试是验证一个操作能否正常执行,而压力测试则是确定一个操作能否在长时间内每次执行时都正常。
②并发:并发是同时执行多个操作的行为。换句话说,就是在同一时间执行多个测试用例。功能测试或单元测试几乎不会与任何并发设计结合。因此,压力系统必须超越功能测试,要同时遍历多条代码路径。
③量级:压力测试另一个重要原则就是要给每个操作增加超常规的负载量。就是说压力测试可以重复执行一个操作,但是在操作自身过程中也要尽量给程序增加负担,增加操作的量级。一般来说,单独的高强度操作重复自身可能发现不了代码错误,但与其他压力测试方法(如并发和量级)结合在一起时,将可以增加发现错误的机会。
④随机:意思是任何压力测试都应该多多少少具有一些随机性。例如随机组合前面三种压力测试原则,然后变化出无数种测试形式,就能够在每次测试运行时应用许多不同的代码路径来进行压力测试。当一个压力测试结合的原则越多,测试执行的时间越长,就可以遍历越多的代码路径,发现的错误也会越多。
压力测试对系统的重要作用
我们对应用程序进行压力测试时经常会出现这种情况,就是测试到了最后却发现不明白测试结果有什么意义?实际上,当我们都不明白压力测试的意义时,我们就不能设计出各种极限测试用例。
压力测试不同于功能测试,软件的正确性并不是它的测试重点,它所看重的是软件的执行效率,尤其是短时间内访问用户数爆炸性增长时软件的响应速度。因此,明白压力测试的作用,对我们高效完成压力测试有至关重要的指导意义。