《软件性能测试过程详解与案例剖析(第二版)》第一章习题及答案
1,什么是软件性能?用户通常如何评估一个软件的性能?性能测试者的角度与用户角度有什么不同?
【简要解释】软件性能是指“软件响应及时度满足用户要求的程度”。用户对软件性能的关注通常只在于“响应时间”上,而对于性能测试者来说,除了关心影响时间外,还会从系统视角关心用户的使用场景,系统的最大容量,并发用户数,以及系统性能瓶颈所在。
2,当访问一个网站时,你发现该网站的响应速度非常慢,哪些因素可能导致了访问速度慢?前端测试和后端测试的区别
【简要解释】考虑一个HTTP请求从发出到完成(最终用户看到渲染完成后的页面)的全过程:浏览器所在系统解析域名(通过DNS),建立连接,发送HTTP 请求,得到响应的HTML结果后,浏览器解释HTML,获取外部资源,运行客户端脚本(JS脚本),最终完成对整个页面的渲染。这中间的每一个环节都可能导致访问速度慢。
3,网站A,每天有两个高峰时段。在第一个高峰时段,网站A有1000人同时在线,平均每人每2秒操作一次(点击一个链接);在另一个高峰时段,网站A有500人同时在线,平均每人每1秒操作一次(点击一个链接);
请问在这两个高峰时段,网站A的性能表现会是相同的吗?
【简要解释】如果计算两个高峰时段的QPS(Query Per Second,每秒收到的请求数),我们会发现两个高峰时段的QPS是一样的(都是500 h its/second)。从这个角度来说,在这两个高峰时段,网站的负载接近相同。但如果考虑到两个高峰时段用户操作的页面可能不同,以及两个时段中网站需要保持的连接数量不同(一个是1000个,一个是500个),显然在两种情况下网站A的性能表现不会完全相同。
4,仔细查看“性能下降曲线”,在负载增长到某个给定的负载量之前,随着用户数量的增加,系统响应时间基本不变。为什么会有这种现象?(提示:请参考理发师模型)
【简要解释】假设你家附近有个理发店,理发店一共有4个理发师,每个理发师需要15分钟完成对一个顾客的服务。显然,当顾客数量是1个到4个时,响应时间(服务时间)都是15分钟。只有当顾客数量超过4个时,顾客需要等待的时间才会出现线形增长。“性能下降曲线”的第一段基本可以用这个模型解释(把服务线程想象成理发师,进入的请求想象成顾客)。
5,本书1.3中列出了各种不同的性能测试方法和过程,你觉得各种模型各有什么样的侧重点?
【简要解释】各种性能测试工具给出的测试过程通常以工具为中心,围绕工具提供的功能来建立测试过程。依赖特定的测试工具,这些过程才能得到良好的实施。而PTGM过程不基于特定工具,而是尽量全面地描述性能测试的完整实施过程。
《软件性能测试过程详解与案例剖析(第二版)》第二章习题及答案
1,你认为本书为什么要将性能测试划分为各种不同的领域?
【简要解释】不同的性能测试目标决定了不同的性能测试方法。例如,如果以“能力验证”为性能测试的目标,就要求性能测试环境尽可能接近真实的使用环境;而对于以“调优”为目标的性能测试来说,只需要保证每次的测试环境相同即可。将性能测试划分为不同的领域能够帮助性能测试的设计和实施者选择合适的性能测试方法。
2,如果你被指派负责某系统的性能测试,该系统目前已有1000个用户,计划在3个月后开放给10000名用户,开发方希望通过性能测试了解当前系统是否能支持10000名用户,并尽可能到系统中哪些地方是可能的性能瓶颈。在这种情况下,你认为该性能测试应该落在哪些领域?
【简要解释】从该系统的性能期望上来说,其性能测试应该落在“能力验证”(确认系统是否能够支持10000名用户的访问)和“规划能力”(希望到系统中哪些地方是可能的性能瓶颈)上。
3,通常情况下,许多软件企业通过给系统一定的负载,运行较长时间来评估系统的稳定性。某系统在较大负载下持续工作了7天,应用系统仍然可以提供服务,你认为该系统稳定吗?如果不能判断的话,还需要哪些信息帮助你判断?
【简要解释】如果7天后我们只能观察到系统“可以提供服务”,那么很难确定系统有较好的稳定性。通常,对于稳定性测试来说,除了在大负载情况下进行持续测试外,在整个测试过程中,我们需要关心系统所有的“不稳定征兆”,例如系统可用资源是否持续减少,系统的响应时间是否持续变长,系统抛出的异常数量是否持续变多等等。
4,通过性能测试发现缺陷主要和并发处理有关,你遇到过哪些和并发有关的缺陷?
【简要解释】由于线程/进程互斥导致的死锁问题,由于并发导致的数据库死锁问题等等,以及由于并发导致的同步问题等,都是比较明显的与并发相关的缺陷。
5,回顾你曾经参与过的软件性能测试,它们都使用到了性能测试中的领域?
【简要解释】这个的答案就依赖于读者自己的经验了。
1,Windows上的性能计数值都可以通过Perfmon应用获得。请查Perfmon 的资料,并使用该工具观察Windows系统的资源状况。如果可能的话,使用C#等开发语言通过Perfmon使用的接口自行编写代码获取Window 上的性能计数值。
【简要解释】请自行实验。关于这部分的内容,通过google等搜索引擎也能到现成的代码。
2,如何才能让应用充分利用多CPU机器的计算能力?通过使用多线程方式能够充分利用多CPU设备的计算能力吗?为什么?
【简要解释】相对于单线程而言,通常,多线程可以使用进程的CPU使用更加充分。但如果考虑到多核设备或是多CPU设备,并非所有的操作系统都支持线程级的跨CPU调度。其实,这个问题还挺复杂的,不同的操作系统有不同的进程和线程模型,想要了解清楚的用户请自行查阅资料。
3,当查看某进程的内存使用时,通常都能看到“实际内存”和“虚拟内存”
两个指标,他们有什么区别?
【简要解释】这同样是一个与操作系统息息相关的问题。“实际内存”的值是指进程在运行过程中实际占用的物理内存的总数,而“虚拟内存”的值则是指该进程使用的逻辑内存中位于虚拟内存的部分。大多数操作系统都实现了进程的逻辑地址空间到物理地址空间的映射机制,并使用虚拟内存支持超过实际物理内存的可用内存空间。
4,如何通过内存计数器发现应用中存在的内存泄漏现象?
【简要解释】最简单的方法是通过内存计数器观察某进程的内存使用情况,如果进程的内存使用一直在增加,则很可能存在内存泄漏。但实际情况比这里提到的例子要复杂一些:例如,Java程序运行在JVM
虚拟机上,查看Java进程的内存占用情况时,看到的是JVM的内存占用情况,而JVM的内存分配机制与普通进程并不相同。
1,服务端性能测试工具的主要目标是什么?和Web前端性能测试工具相比,主要区别在哪里?
【简要解释】服务端性能测试工具的主要目标是获得服务端在给定负载下的响应时间(及其分解)数据。而Web前端性能测试工具关心的是Web应用的客户端运行所花费的时间(客户端脚本执行,浏览器的渲染等)。
2,服务端工具主要通过进程或是线程来模拟负载(让一个进程或是一个线程执行脚本,模拟一个用户行为)。你认为用进程和用线程模拟虚拟用户,
各有什么优缺点?
【简要解释】一般来说,使用线程模拟用户比使用进程模拟用户的开销小,但如果虚拟用户需要运行的脚本不是线程安全的,那就必须用进程而不是线程来模拟虚拟用户了。
3,如果你使用LoadRuner工具进行测试,请在录制开始后打开浏览器的设置项,你会发现其中“代理服务器”一栏被LoadRunner工具进行了设置。
LoadRunner为什么在录制时需要设置浏览器的相应项目?
【简要解释】因为LoadRunner的录制功能是通过把自己伪装成代理服务器实现的。在使用LoadRunner的录制功能时,LoadRunner会首先在本地的7777端口启动一个代理服务器(该代理服务器负责记录所有浏览器发送给服务器的数据),然后启动浏览器并将浏览器的代理服务器设置为指向本地的7777端口。这样,当用户在浏览器上操作时,LoadRunner就能获取到所有浏览器与服务器之间的通讯数据,从而实现录制功能。
4,如果你使用JMeter工具进行性能测试,请尝试使用JMeter进行一次录制。
JMeter为什么能够录制得到浏览器与服务器的交互?
【简要解释】JMeter的录制功能与LoadRunner的录制功能实现方式完全相同。
5,使用LoadRunner工具支持的Socket协议和HTTP协议都能够录制得到浏览器与服务器交互的过程,他们录制得到的结果有什么不同?从调试和使
用的角度来说,采用何种协议录制得到的脚本更有优势?为什么?
【简要解释】使用Socket协议录制得到的脚本中,数据以TCP数据包的形式被记录,而以HTTP协议录制时,形成的脚本具有更好的可读性,也能够更好地被修改(参数化或是关联)。显然,使用与应用相同的应用层协议进行录制,得到的脚本更直观,且更容易被修改。
6,使用Firebug或是Chrome的“开发者工具”对le.hk进行
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论