如何系统性地保障软件性能

摘要:软件性能贯穿整个软件开发过程,从需求到设计,到开发,到测试,最后到发布反馈,其作为软件用户的第一体验显得尤为重要。如何系统性地保障软件性能呢?文中以QQ为例,分别阐述了在各个环节中把控性能的重要性。

【编者按】任何一款软件开发离不开性能测试,性能作为软件用户的第一体验显得尤为重要。软件性能贯穿整个软件开发过程,从需求,到设计,到开发,到测试,最后到发布反馈。那么如何系统性地保障软件性能呢?文中以QQ为例,分别阐述了在各个环节中把控性能的重要性。

一个正在持续增加新功能的软件,尤其是类似QQ这种做为一个超大规模客户端软件,又随时需要适应用户要求和发展的需求,需要不断的做快速的更新,开发节奏非常快。而且因为我们的用户是海量用户,用户的软硬件环境非常复杂。性能作为软件的用户第一体验,如何去系统性地保障软件的性能,对于QQ来说就变得非常重要。

那么要保障持续开发过程软件的性能能够得到保障应该做些什么呢?

1.需求阶段开始考虑性能

首先从需求提出阶段说起,需求提出阶段应该要开始考虑性能问题了,产品经理提出需求之前,必须要系统性地了解哪些因素会影响到软件的性能,这些因素包括但不限于:需求的处理时机,需求的处理数量,需求的处理是否涉及大的IO网络,以及CPU。尤其是在使用特性上要思考清楚,比如涉及到消息记录的需求,可能要考虑到有的用户的消息记录很大,比如涉及好友列表的需求,可能要考虑到有的用户的好友列表很多等。

使用时机的话,比如需求是在登录过程中那么可能要考虑该需求是否会影响到登录速度,如果是在登录后的话,是否会造成登录后卡。

结合这些特征,对于一些从需求侧就可能有问题的需求,要么考虑直接不做这个需求,要么考虑针对不同的使用特征做不同的处理,比如考虑到消息记录可能有很大的情况,那么涉及消息记录的需求尽量不要去读取整个消息记录。有的时候,也可以考虑切换需求处理的时机,比如在更新好友资料的需求,如果是做在登录过程可能是会引起登录过程很慢,那么需求可以修改成登录过程先加载本地数据,登录后某个空闲时机再去做必要的更新。

2.需求开发阶段如何考虑性能

在一个需求开始开发之前,一个有经验的程序员应该是要先做设计,在架构设计的过程,我们应该要考虑性能,让架构能够支持足够的数据量,保持架构上能在各种场景都不会出现性能问题。各种处理分别是在什么时机进行也是要在设计的时候就想好的,只有性能出众的架构才是很好的架构。

在实际开发的过程,要充分考虑用户的使用场景和并发数量,比如开发一个火车票订票系统,如果不考虑春运的时候的特殊情况,那么最终只会在春运的时候系统直接瘫痪。

可能这个时候有人会问,春运的时候就是有那么多用户在访问,系统就是支持不了那么应该怎么办呢?至少可以从两个方面去解决,一个方面可以考虑在访问量很大的时候,只提供核心订票等业务的支持,而网页上的一些图片什么的完全可以不提供拉取。另一方方面,可以考虑提供给系统最大支持量的用户正常的服务,而可以对一些超出负载的用户提出的服务短期内进行拒绝。设置可以提供一种排队进入的机制。

3.测试阶段如何关注性能

在测试阶段我们还需要做什么来保障性能呢?

首先我想强调的是,测试是保证产品的性能最终是否达标的最后保障,所以这个环节一定要严格要求。

从信念上来说,只要开发同学有对代码进行修改,那么都是要怀疑可能引入性能问题的,之前我们的一个打开好友聊天窗口的时候卡的一个性能问题,就是因为在桌面快捷图标的时候在打开聊天窗口的过程加了一行代码。

测试方法上,要注意用接近现实的一些数据来进行测试,包括前面说到的消息记录的大小和好友列表的数目。另外要注意覆盖各种使用场景。最后还有一点尤其要注意的是要注意用多种机器多种网络环境多种软件环境来测试,机器的话,主要包括性能好的机器和性能差的机器,机器的网络环境的话要考虑网络丢包比较大的一些情况,还要集合局域网广域网以及中国的各大运营商之间的不同网络场景。软件环境的话,一方面包括不同的操作系统,一方面包括同时运行和安装的软件环境,比如杀毒软件,安全软件,或者是同时在运行一些大型游戏的情况。

当然最好的情况是,建立一系列的自动化测试框架,把一些我们平常关注的重要数据,比如QQ的登录速度,登录后卡不卡,打开好友聊天窗口的速度等等通过自动化跑出来。通过定期进行自动化测试,同时把数据进行各个历史版本横向比较,最后可以做到快速监控,最快速度发现性能问题。

4.反馈跟踪如何关注性能

产品发布之后,依然还要继续关注它的性能。一方面由于我们的用户群体非常大,所以难免有些情况和使用场景没有考虑周全,所以最后运营阶段没有问题的版本才是合格的版本。

我们一般通过定期关注微博,关注产品本身的反馈论坛,以及外面的一些相关论坛来收集信息。同时关注周边的朋友,以及同事的反馈也是一个很重要的方面。

在用户反馈有问题的时候,应该要及时去处理,处理方法一方面要先了解用户的使用场景和使用情况,另一方面可以给用户一些工具,通过这些工具去记录当时的CPU,内存,IO的使用情况,当时是否界面有无响应等信息。同时工具最好能够记录在有性能问题的时候软件正在忙什么,当时的堆栈以及系统调用函数是什么,有了这些信息就可以快速的解决问题了。

5.总结

整体来看,贯穿整个软件开发的过程,从需求,到设计,到开发,到测试,最后到发布反馈,都得要持续关注软件的性能,这样才能得到一个系统性地保证。可见,性能优化是一个需要持续运营的过程。

原文来自:QQ客户端团队博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/447532.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 AMQP 协议

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 PS:更多详情见 AMQP主页 :http://www.amqp.org/ 。 一、AMQP 是什么 AMQP(Advanced Message Queuing…

广州市科目三电子路考--大观路通过经验

视频:大观路 : http://v.pps.tv/play_3EO9GY.html 大家好,我是2014年5月8日考科目三的,本人是90分通过考试,在掉头的时候死火被扣10分,下面我会说明为什么会被扣10分的。 大观路段考试,总体来…

SpringBoot:Actuator 监控管理工程各项信息

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 在微服务体系中,有很多工程相互作用,如果其中某一个Down 了,可能就不是那么容易快速定位 bug 所属了…

2013科目三道路驾驶技能通用评判标准

一般规定:道路驾驶技能考试满分为100分,成绩达到90分的为合格。 道路驾驶技能通用评判 不合格情形:考试时出现下列情形之一的,评判为不合格: a)不按规定使用安全带或者戴安全头盔的; b)遮挡、关闭车内音视频…

如果编程语言是超级英雄……

摘要:此前我们曾假设过如果编程语言是女人,如果编程语言是把刀,现在我们将编程语言设想成电影中的超级英雄会是怎样一番情景呢? 说到编程语言,当然是萝卜白菜,各有所爱。假如要你在钟爱的语言之前加个超级…

Springboot:监控与管理 Actuator

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 前言: Actuator是一个暴露自身信息的模块,主要实现对应用系统的监控与管理。主要有三大功能: …

视频编解码,bbv 缓冲区的上溢和下溢

使用硬件相似的数据处理.一般都是数据进来,处理后立即发出去的形式.所以一般有一个数据进,一个数据出,2个接口. 硬件处理基本都要求实时.数据进来,处理之后马上发处理,这个时间要求非常短,一般要求控制在好多毫秒以内,才能达到实时的要求.一般硬件每秒钟能够处理的数据大小,在…

《Spring Cloud 与 Docker 微服务架构实战》笔记

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 PS:springcloud系列文章见:springcloud 系列,一看就会 。 在此,只是记录细碎知识点。 1…

视频测试序列下载:YUV文件

1、http://www.tkn.tu-berlin.de/research/vid/(此网站已经移走,正在寻找。) CIF: Akiyo、Bridge (far) 、Bridge (close) 、Bus 、Container 、Coastguard 、Flower 、Football 、Foreman 、Hall 、Highway 、Mobile & Cale…

MyBatis : Example 条件查询 in 用法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 只是记录下。 Example example new Example(UserxxxLog.class);Criteria createCriteria example.createCriteria();List<String&…

跨平台2D/3D游戏开发框架libGDX发布1.2.0更新

摘要&#xff1a;基于OpenGL (ES)的跨平台2D/3D游戏开发框架libGDX不仅开源免费&#xff0c;而且具有极为强大的兼容性和高效性&#xff0c;近日&#xff0c;libGDX发布全新1.2.0版本&#xff0c;除修复Bug之外&#xff0c;还新增了OpenGL性能分析、gdx-ai等一系列功能扩展和方…

不把C作为第一门语言是个好主意么?

摘要&#xff1a;不少人认为&#xff0c;第一门语言最好不要学C&#xff0c;而V众投发起人李智勇却不这么看。他认为如果真想做好开发&#xff0c;想更好地实现人生价值&#xff08;包括现金价值&#xff09;&#xff0c;那么打基础很必要&#xff0c;而从C语言&#xff0c;这种…

系统集成项目管理工程师(软考中级)重点知识、背诵版

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 为了入户广州报考了软考中级&#xff0c;一次通过。 以下为背诵笔记&#xff1a;

如何成为一位杰出的程序员

如何成为一名杰出的程序员&#xff0c;这是一个比较复杂的问题&#xff0c;什么叫杰出&#xff1f;下面我给你大家总结一下&#xff0c;文中说的一些观点&#xff0c;你可能不认同&#xff0c;没关系&#xff01;评论反馈一下&#xff01; 一、解决问题的能力和创新能力 个人…

JVM的新生代、老年代、MinorGC、MajorGC

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 参考&#xff1a; http://blog.csdn.net/flamezyg/article/details/44673951 http://www.blogjava.net/ldwblog/archive/2013/07/24/4…

Bash脚本:怎样一行行地读文件(最好和最坏的方法)

用bash脚本读文件的方法有很多。请看第一部分&#xff0c;我使用了while循环及其后的管道命令&#xff08;|&#xff09;(cat $FILE | while read line; do … )&#xff0c;并在循环当中递增 i 的值&#xff0c;最后&#xff0c;我得到了非我所想的 i 。主要的原因是&#xff…

解决:无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.报错如题&#xff1a; 无法获取实体类com.xxx.xx.xx.xx.dto.XxxDTO对应的表名 2. 报错原因&#xff0c;如下图红框中部分&#xff0c…

IDEA 查看最近修改、已提交文件

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 如图&#xff1a;点击 Version Control --> Repository --> 最左边蓝色圆圈 --> 选择一条提交日志&#xff1a;右边就…

程序员赚钱致富的6种方法

我认识一个朋友&#xff0c;也是程序员出身&#xff0c;他在一家还不错的外企上班&#xff0c;每个月工资收入也就差不多15K&#xff0c;五年的工作经验了&#xff0c;在他面前&#xff0c;我算是小弟。那天我们几个朋友一起打完球就去附近的饭馆吃饭&#xff0c;环境还不错&am…

解决:Changes not staged for commit:

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. git push 报错&#xff1a; 2. 提交时加上参数&#xff1a;-a &#xff0c;表示新增。 git commit -am "提交说明" 提交成…