软件性能的生命周期

影响软件性能的要素有很多,在需求阶段就应该对软件性能进行分析,在设计阶段要充分考虑软件架构设计对性能的影响,在测试阶段要充分验证软件的性能表现是否满足需求。

  一、需求阶段的性能分析

  从业务角度分析,如果一个系统上线后使用人数比较多,而且后期数据量比较大(如电信、金融证券等对外开放的系统),就有必要做好性能测试,因为这些系统对于实时性交互要求比较高,对系统的响应时间、并发用户数等要求都比较高,并且从数据角度分析,系统上线几年后存量数据一般都是千万级数据量,因此前期性能设计与验证对业务系统的后期正常运行维护至关重要。

  在软件开发前期的需求分析阶段,需求分析师与客户业务人员沟通时,要明确提出各项性能指标,包括系统业务交易的使用频度、系统并发用户量、业务数据量评估等各项指标。然后对系统的响应时间、用户数和资源使用进行分析。

  1、响应时间分析

  响应时间的需求调研分析,例如查询类的交易需要在多少秒之内响应,对于URL连接或者刷新整个网页的时间,它是一个非常重要的度量值,因为它是直接体现用户体验的一个指数。

  它同时也是最不容易测量的度量值,因为它比其他的度量值更容易发生变化。我们需要了解响应时间的区域分布。例如:一般月底是发工资的时候,查询当前账户额度是用户这段时间最常用的功能,这段时间的系统响应时间估计比平常响应时间慢些,而对于电信之类的报表查询,省内公司查询当月本省各个分公司、分点的销售额情况,总公司查询全国各省的总销售额情况,这时数量级别相差甚大,查询时响应时间也相对比较慢。这些情况对于指导服务器分布、负载均衡、数据库的设计都非常重要。

  2、用户数分析

  用户数分析,主要分析评估系统上线后的总用户数、平均每天在线用户数等情况,具体可分析:哪些交易每天都有用户在执行业务交易,这些用户一般占系统总人数的比例是多少;哪些交易会在月底、季末或者年底高频率并发使用;哪些交易用户使用得比较少,但却是相关重要人物(如上级领导)重点关注的交易。这些用户数分析结果,可为后续的性能测试设计中,针对混合场景的用户数配比设计提供有力的参考依据。

  3、资源使用分析

  资源使用分析用于衡量系统资源使用率的情况,反映系统的最底层性能情况,对于容量规划比较有指导作用,同时它也是比较容易理解的性能度量值。

  二、设计开发阶段的性能分析与验证

  大部分项目的性能问题是设计出来的,而不是开发和测试出来的。要获得性能良好的软件系统,需要根据需求分析及设计规划,进行系统的规模分析和完整的性能分析,预估性能瓶颈点,提出解决方案,最后通过架构师、程序设计人员等角色进行评审验证并确认,保障性能目标的达成。

  在代码开发阶段,需要根据设计方案,在开发过程中关注性能瓶颈点,进行相应的白盒测试,通过代码分析和评审等手段,确认性能瓶颈并解决。需要不断地分析和总结性能问题和解决方案,形成性能方面的代码编写规范,从而在研发阶段的早期就能确保把软件系统在性能方面的风险降到最低。

  系统设计与代码实现的很多细节都会对软件系统性能起到关键的作用。例如,在数据查询界面设计时,需要考虑查询方式是模糊查询还是精确查询、如何设计查询分页展现、对象的创建以及释放问题等。

  在采用具体实现技术时,也需要注意性能细节,例如 Hibernate 中对大数据量查询时,需慎用 list() 或者 iterator() 遍历返回查询结果。

  在采用Java等托管语言开发软件系统时,需要注意对象的生成和对象大小问题,否则容易导致产生大量对象实例,系统不仅要花时间生成对象,还可能要花时间对这些对象进行垃圾回收和处理,生成过多的对象将会对程序的性能带来很大的影响。

  在数据库设计上也有很多细节会对后期系统性能表现有决定性的影响,例如:对历史查询是否分区、如何分区性能更好;如何设计批量数据抽取转换的方式,以保证减少或消除等待;如何设计索引,减少全表扫描、提高SQL查询效率;编写良好的SQL语句以便提高重用率、减少数据库解析。

  三、统测试阶段的性能验证与优化

  性能问题越早发现、修改,越能保证系统上线后的稳定性,因此应该在软件生命周期的不同阶段进行软件性能测试。

  性能测试大致可以分为单元性能测试、集成性能测试、系统性能测试、多套系统互联接口性能测试等。其中,对一套系统进行的系统性能测试,也就是在特定的环境下、一定量的数据情况下,进行的系统级的性能测试,是最常用的,也是最为测试人员所熟悉的一种性能测试。

  系统性能测试阶段的一般测试过程如下:在系统功能被确认后,模拟真实生产环境进行软件系统的部署(包括硬件设备、操作系统、网络搭建、负载均衡部署、中间件部署、数据库部署等),然后再根据前期的性能测试需求分析结果及测试策略定义的方法,模拟一定量的虚拟并发用户数,进行压力测试,同时监控分析系统是否满足预期的性能指标,识别性能可能出现的瓶颈点(应用代码、网络设备、硬件设备、操作系统、中间件配置、数据库等),并进行性能优化处理,调优后再进行复测,确保软件系统最终达到性能要求。

====================================分割线================================

最新内容请见作者的GitHub页:http://qaseven.github.io/

时间: 2024-10-02 18:32:52

软件性能的生命周期的相关文章

iOS应用生命周期

作为应用程序的委托对象,AppDelegate类在应用生命周期的不同阶段会回调不同的方法.首先,让我们先了解一下iOS 应用的不同状态及它们彼此间的关系,见图1 .                                                                                                             图1 iOS应用状态图 下面简要介绍一下iOS 应用的5种状态.  Not Running(非运行状态).应用没有运

thread-线程的生命周期的问题

问题描述 线程的生命周期的问题 private boolean flag = true; new Thread(new Runnable(){ public void run(){ while(flag){ try{ Thread.sleep(1000); System.out.println("输出"); }catch(InterruptedException e){ } } } }).start(); 线程里面只有一个while循环,当while循环停止以后,这个线程是否还在运行?

IIS处理asp.net请求和asp.net的页面生命周期

当一个客户端页面访问IIS试图获取一些信息的时候,发生了什么事情?一个请求在通过了HTTP管道后又发生了什么?本文主要是描述这两个过程,即IIS处理asp.net请求和asp.net的页面生命周期.欢迎大家积极拍砖,共同学习,共同进步. 首先我们要弄清楚两个非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的来自客户端的请求并给出响应.它是IIS下asp.net应用程序的核心. 2, application pool. 它是worke

Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器

原教程: http://cn.vuejs.org/guide/instance.html http://cn.vuejs.org/guide/syntax.html 本博文是在原教程的基础上加上实例,并尝试说明的更详细. (十)Vue实例的生命周期 如图:(我自己翻译的中文版,英文版请查看本博文顶部的,第一个链接) (八)传入的数据绑定 先创建一个对象(假如是obj),然后将他传入Vue实例中,作为data属性的值,那么 ①obj的值的变化,将影响Vue实例中的值的变化: ②相反一样: ③可以在

ASP.NET控件的执行生命周期

阶段 控件需要执行的操作 要重写的方法或事件 初始化 初始化在传入 Web 请求生命周期内所需的设置. Init 事件(OnInit 方法) 加载视图状态 在此阶段结束时,就会自动填充控件的 ViewState 属性,控件可以重写LoadViewState 方法的默认实现,以自定义状态还原. LoadViewState 方法 处理回发数据 处理传入窗体数据,并相应地更新属性. 注意:只有处理回发数据的控件参与此阶段. LoadPostData 方法(如果已实现IPostBackDataHandl

IIS处理Asp.net请求和Asp.net页面生命周期说明

首先我们要弄清楚两个非常重要的概念: 1, worker process(w3wp.exe). worker process管理所有的来自客户端的请求并给出响应.它是IIS下asp.net应用程序的核心. 2, application pool. 它是worker process的容器,IIS5及之前的IIS版本均没有application pool的概念.每一个application pool对应着一个worker process,在IIS Metabase中维护着Application Po

ASP.NET AJAX客户端生命周期分析(理论篇)

一.引言 微软的ASP.NET AJAX框架,作为一个相对比较完善的AJAX框架,有许多方面值得我们作深入研究.本文中,我们将结合一个具体的例子试图探究ASP.NET AJAX框架的客户端生命周期过程. [注]阅读本文最好要结合"ASP.NET应用程序生命周期概述"和"ASP.NET页面生命周期概述"两篇文章共同学习. 二.ASP.NET AJAX客户端生命周期原理 因为ASP.NET AJAX框架在开发思路上极大地借鉴了ASP.NET 2.0的开发技术,而且将会被

ASP.NET AJAX客户端生命周期分析(实践篇)

一.引言 在上篇中,我们对微软的ASP.NET AJAX框架的客户端生命周期过程作了理论上的分析.在本篇中,我们要结合一个具体示例针对页面的客户端生命周期期间有关重要事件的发生顺序进行剖析. 二.举例 (一)说明 下面的这个例子展示了在一个有两个嵌套的UpdatePanel控件的页面的客户端事件将被如何引发.请注意点击父面板中的按钮与内嵌的UpdatePanel控件中按钮之间的区别.在父面板中的按钮将引起父面板的更新,而嵌在内部的面板将被删除并重新创建.内嵌面板的按钮点击仅引起内嵌面板的更新.

ASP.NET:掌握Web窗体的生命周期与状态管理

asp.net|web 如果你具有使用 Active Server Pages (ASP) 的经验,你将认识到 ASP 是线性处理模型.ASP 页是按从上到下的顺序处理的.ASP 代码和静态 HTML 的每一行都按其在文件中的显示顺序进行处理.在往返行程中用户操作导致页被发送到服务器.因为此操作导致往返行程,所以服务器必须重新创建该页.在重新创建该页后,将通过与以前相同的从上到下的顺序对该页进行处理,因此,该页未表现出真正的事件驱动行为.若要创建事件驱动体验,你需要显式设计它.此外,你必须在最基