缓存问题对软件测试工作的影响

发表于:2021-12-22 08:56

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:青烟小生x    来源:知乎

分享:
  我们都知道软件要运行必须安装在硬件上才可以,硬件是软件运行的环境,是软件的载体,以及软件运行结果的体现。软件运行的好坏,会受到硬件的严重制约,在这些硬件中常见有CPU、内存、硬盘等,CPU、内存、硬盘这些对软件使用的影响大家在日常生活中应该都深有体会,比如果国产手机厂商每次进行旗舰新品手机发布会时,总会以某某超级芯片全球首发为重要卖点,或者首次使用DDR5的手机作为卖点。这些无不体现着硬件对软件的影响程度。除了以上这些常见的硬件外,缓存对软件的使用体验,也会起着重要的作用。
  那今天我们就来聊聊缓存在软件测试工作中,对测试的影响。
  1.缓存的概念
  缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。
  CPU缓存(CacheMemory)位于CPU与内存之间的临时存储器,它的容量比内存小但交换速度快。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。由此可见,在CPU中加入缓存是一种高效的解决方案,这样整个内存储器(缓存+内存)就变成了既有缓存的高速度,又有内存的大容量的存储系统了。缓存对CPU的性能影响很大,主要是因为CPU的数据交换顺序和CPU与缓存间的带宽引起的。
  2.缓存的工作原理
  缓存的工作原理是当CPU要读取一个数据时,首先从缓存中查找,如果找到就立即读取并送给CPU处理;如果没有找到,就用相对慢的速度从内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。
  3.缓存对性能测试的影响
  介于缓存的工作原理,我们在对软件进行测试时,一定要考虑到缓存对系统的影响,这其中最主要的影响是性能上的影响,因为缓存最主要的作用是加速CPU读取数据,CPU回将读取频繁的数据从内存复制到缓存,方便下次继续读取,读取的速率比从内存中要快很多,如果缓存中没有需要的数据,则会去内存中读取,如果内存中也没有需要的数据,则会去硬盘中读取,然后放到内存中去计算。
  我们在做性能测试时,如果我们每次都做重复性的相同的操作时,那CPU会直接从缓存读取,而不是从内存中读取数据,也不是从硬盘中读取,用户在实际使用软件时,每次操作可能都是查询不同的数据,比如说淘宝用户,每次搜索商品名称时,搜索存在很大的不确定性,淘宝用户不会搜索同一个商品连续搜10次。因此如果我们想验证搜索商品的事务响应时间,就应该每次搜索不同的商品,这样才能更加接近真实用户的实际使用场景。我们在做性能测试时,录制了搜索商品的脚本,商品名称就固定不便了,如果每次搜索相同的商品,只有第一次搜索对应商品是从硬盘中读取数据的,后边都是从缓存中读取数据的,这样就不能真实反映用户场景,因此我们需要对商品名称进行参数化,让脚本每次运行时,搜索不同的商品,这样就不会出现这种缓存约束了。
  缓存除了CPU缓存还有,硬盘缓存,硬盘缓存跟CPU缓存起的作用类似,硬盘会班读取频繁的数据放到硬盘缓存中,以加快读取数据的速率,因此在性能测试中,对产品性能产生的影响和CPU缓存类似,所以在性能测试过程中如果遇到查询数据的场景,最好是将查询内容参数,让系统每次都能查询不同的数据。
  4.网络缓存
  缓存的概念其实很广,除了上边提到的CPU缓存和硬盘缓存,其实还有网络缓存,比如浏览器上的缓存,应用程序后台的缓存都是网络缓存。
  WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户访问延迟增大,WWW服务质量日益显现出来。缓存技术被认为是减轻服务器负载、降低网络拥塞、增强WWW可扩展性的有效途径之一,其基本思想是利用客户访问的时间局部性(TemproralLocality)原理,将客户访问过的内容在Cache中存放一个副本,当该内容下次被访问时,不必连接到驻留网站,而是由Cache中保留的副本提供。
  5.网络缓存的好处
  Web内容可以缓存在客户端、代理服务器以及服务器端。研究表明,缓存技术可以显著地提高WWW性能,它可以带来以下好处:
  (1)减少网络流量,从而减轻拥塞。
  (2)降低客户访问延迟,其主要原因有:
  ①缓存在代理服务器中的内容,客户可以直接从代理获取而不是从远程服务器获取,从而减小了传输延迟;
  ②没有被缓存的内容由于网络拥塞及服务器负载的减轻而可以较快地被客户获取。
  (3)由于客户的部分请求内容可以从代理处获取,从而减轻了远程服务器负载。
  (4)如果由于远程服务器故障或者网络故障造成远程服务器无法响应客户的请求,客户可以从代理中获取缓存的内容副本,使得WWW服务的鲁棒性得到了加强。
  6.网络缓存造成的影响
  Web缓存系统也会带来以下问题:
  (1)客户通过代理获取的可能是过时的内容。
  (2)如果发生缓存失效,客户的访问延迟由于额外的代理处理开销而增加。因此在设计Web缓存系统时,应力求做到Cache命中率最大化和失效代价最小化。
  (3)代理可能成为瓶颈。因此应为一个代理设定一个服务客户数量上限及一个服务效率下限,使得一个代理系统的效率至少同客户直接和远程服务器相连的效率一样。
  介于以上情况,我们在软件测试过程中也要尽量避免网络缓存的约束,做功能测试时,尤其是系统代码更新了后,我们最好是将自己的网络缓存清一下,然后在去测试。在做性能测试时,也尽量将网络缓存清理掉。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号