欢迎来到天天文库
浏览记录
ID:41410968
大小:58.60 KB
页数:4页
时间:2019-08-24
《性能测试的六个阶段》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、性能测试的六个阶段在软件开发生命周期屮,必须进行性能测试的阶段包括:•单元测试•应用集成测试•应用集成负载测试•生产阶段测试•生产阶段负载测试•容量评佔当前的软件工程方法论把开发工作分解为亞代的过程。每次亞代都指定了一套必须实现的用例。典型的模式是,第一-次的叠代过程实现了应用的框架并且确保提供了组件间的通信功能。随后的叠代在第一次叠代建立的框架上增加应用的功能。因为叠代是由所实现的用例(或部分用例)定义的,所以每次叠代都对性能测试有相应的要求。用例定义了额外的测试步骤和SLA的变动范围,QA应该基于此SLA进行测试。因此
2、,所有后文的性能测试讨论都应该被应用于各个叠代过程。区分每次證代工作的控制因素就是用例。单元测试在把组件提交到集成阶段之前,每个开发人员必须对他们的组件进行性能单元测试。传统的单元测试仅仅重视功能而忽略性能。在单元测试期间,性能单元测试意味着需要用以下的工具分析组件:•Memoryprofiler•Codeprofiler•CoverageprofilerMemoryprofiler在川例开始前和在川例结束后运行垃圾回收并且记录堆的快照。从这些数据屮,我们能看到用例的内存影响及该用例在内存屮留下的具体对象列表。开发人员需要
3、检查那些对象以确认在用例执行完成后那些对彖就应该保留在内存中。当用例完成后,如果对象被疏忽而留在堆中,那么这就是Java内存泄漏,并「1.我们这些称为游离对象,有时也可称为遗留对象引用。卜•一个需要寻找的内存问题称为对象循坏。在用例执行期间,所记录的细粒度的堆的采样信息,结合创建和删除的数址,说明了对象被创建和删除的次数。如果对象被迅速地创建并删除,那么它将给JVM带来非常大的压力。每个被创建及删除的对象仅能由垃圾捜集冋收,并且对彖循环显著地增加垃圾回收的频率。这种情况通常发生在一个循环或嵌套循环内部的对象创建的情况。让我
4、们看看以卜•的代码:for(inti=0;ivobject.size();i++){for(intj=0;jthreshold){//Dosomething}}}在这个例子中,外部循环遍历object中的所有项目,并且每个项目都遍历object2的所有项Ro如果object包含1000个项冃并FLobject2也
5、包含了1000个项H,那么被定义在循环内部的代码将被执行1000"000次,或1百万次。在这种代码下,阈限变量将每次在内部循环运行时(当该对象的引用超出作用域范围时对象将被销毁)被分配和销毁。如果你在Memoryprofiler里看到这个代码,你将看到一百万个阈限实例被创建并被销毁。代码应该用如卜•的方式重写来消除这种情况:intthreshold=system・getThreshold();intthreshold=system.getThreshold();for(intj=0;j6、){if(object[i].getThing()-object2[j].getOtherThing()>threshold){//Dosomething}}现在,对与一百万次循坏,阈限变量只分配一次。阈限变量的影响从至关重要变为微不足道。在基于Web应用中,我们经常看到的关于对象循环的场景是在在请求的上下文中创建对象。在单次使用情况下,这并不是问题,不过一但当用户的负载显著增加时,这个问题就很快变得很明显。你必须做出的决定是,这个对象是否需要基于每个请求创建,或者如果一旦它被创建,那么可被缓冲以被随后的请求重用。如果对这7、个问题的回答是后者,那么你可以消除该对象的循坏使川问题。图1显示当对象循坏发空时堆的视图。图仁对象循环可通过查看一个细粒度的堆采样数据而可视化地识别出来。红色圈定的堆的区域表明,此时内存中对彖止被迅速地创建和释放,这预示了潜在的对彖循环问题。应用集成测试在组件通过单元测试,被认为可以满足要求而加入到应用之后,下一步是将他们集成到一个单独的应用中。当每次叠代结束时就是集成阶段,主要是确定不同组件是否可以一起发挥作用来满足叠代用例。在功能集成测试完成以麻而且应用满足功能方面的用例之后,下一步对整个集成进行性能测试。这种测试不是8、负载测试,更准确地说是小规模虚拟用户。虚拟用户执行我们原先定义的功能:尽量通过均衡的和有代表性的服务请求模拟最终用户。该测试的用户负载是在一个性能测试计划中定义和记录的,该计划是由应用技术负责人和应用业务负责人联合决定的。该测试的目的并不是为了分析M用,而是识别应用的问题,譬如资源竞争,过多的游历对象,
6、){if(object[i].getThing()-object2[j].getOtherThing()>threshold){//Dosomething}}现在,对与一百万次循坏,阈限变量只分配一次。阈限变量的影响从至关重要变为微不足道。在基于Web应用中,我们经常看到的关于对象循环的场景是在在请求的上下文中创建对象。在单次使用情况下,这并不是问题,不过一但当用户的负载显著增加时,这个问题就很快变得很明显。你必须做出的决定是,这个对象是否需要基于每个请求创建,或者如果一旦它被创建,那么可被缓冲以被随后的请求重用。如果对这
7、个问题的回答是后者,那么你可以消除该对象的循坏使川问题。图1显示当对象循坏发空时堆的视图。图仁对象循环可通过查看一个细粒度的堆采样数据而可视化地识别出来。红色圈定的堆的区域表明,此时内存中对彖止被迅速地创建和释放,这预示了潜在的对彖循环问题。应用集成测试在组件通过单元测试,被认为可以满足要求而加入到应用之后,下一步是将他们集成到一个单独的应用中。当每次叠代结束时就是集成阶段,主要是确定不同组件是否可以一起发挥作用来满足叠代用例。在功能集成测试完成以麻而且应用满足功能方面的用例之后,下一步对整个集成进行性能测试。这种测试不是
8、负载测试,更准确地说是小规模虚拟用户。虚拟用户执行我们原先定义的功能:尽量通过均衡的和有代表性的服务请求模拟最终用户。该测试的用户负载是在一个性能测试计划中定义和记录的,该计划是由应用技术负责人和应用业务负责人联合决定的。该测试的目的并不是为了分析M用,而是识别应用的问题,譬如资源竞争,过多的游历对象,
此文档下载收益归作者所有