如何系統性地保障軟件性能

摘要:軟件性能貫穿整個軟件開發過程,從需求到設計,到開發,到測試,最后到發布反饋,其作為軟件用戶的第一體驗顯得尤為重要。如何系統性地保障軟件性能呢?文中以QQ為例,分別闡述了在各個環節中把控性能的重要性。

【編者按】任何一款軟件開發離不開性能測試,性能作為軟件用戶的第一體驗顯得尤為重要。軟件性能貫穿整個軟件開發過程,從需求,到設計,到開發,到測試,最后到發布反饋。那么如何系統性地保障軟件性能呢?文中以QQ為例,分別闡述了在各個環節中把控性能的重要性。

一個正在持續增加新功能的軟件,尤其是類似QQ這種做為一個超大規模客戶端軟件,又隨時需要適應用戶要求和發展的需求,需要不斷的做快速的更新,開發節奏非常快。而且因為我們的用戶是海量用戶,用戶的軟硬件環境非常復雜。性能作為軟件的用戶第一體驗,如何去系統性地保障軟件的性能,對于QQ來說就變得非常重要。

那么要保障持續開發過程軟件的性能能夠得到保障應該做些什么呢?

1.需求階段開始考慮性能

首先從需求提出階段說起,需求提出階段應該要開始考慮性能問題了,產品經理提出需求之前,必須要系統性地了解哪些因素會影響到軟件的性能,這些因素包括但不限于:需求的處理時機,需求的處理數量,需求的處理是否涉及大的IO網絡,以及CPU。尤其是在使用特性上要思考清楚,比如涉及到消息記錄的需求,可能要考慮到有的用戶的消息記錄很大,比如涉及好友列表的需求,可能要考慮到有的用戶的好友列表很多等。

使用時機的話,比如需求是在登錄過程中那么可能要考慮該需求是否會影響到登錄速度,如果是在登錄后的話,是否會造成登錄后卡。

結合這些特征,對于一些從需求側就可能有問題的需求,要么考慮直接不做這個需求,要么考慮針對不同的使用特征做不同的處理,比如考慮到消息記錄可能有很大的情況,那么涉及消息記錄的需求盡量不要去讀取整個消息記錄。有的時候,也可以考慮切換需求處理的時機,比如在更新好友資料的需求,如果是做在登錄過程可能是會引起登錄過程很慢,那么需求可以修改成登錄過程先加載本地數據,登錄后某個空閑時機再去做必要的更新。

2.需求開發階段如何考慮性能

在一個需求開始開發之前,一個有經驗的程序員應該是要先做設計,在架構設計的過程,我們應該要考慮性能,讓架構能夠支持足夠的數據量,保持架構上能在各種場景都不會出現性能問題。各種處理分別是在什么時機進行也是要在設計的時候就想好的,只有性能出眾的架構才是很好的架構。

在實際開發的過程,要充分考慮用戶的使用場景和并發數量,比如開發一個火車票訂票系統,如果不考慮春運的時候的特殊情況,那么最終只會在春運的時候系統直接癱瘓。

可能這個時候有人會問,春運的時候就是有那么多用戶在訪問,系統就是支持不了那么應該怎么辦呢?至少可以從兩個方面去解決,一個方面可以考慮在訪問量很大的時候,只提供核心訂票等業務的支持,而網頁上的一些圖片什么的完全可以不提供拉取。另一方方面,可以考慮提供給系統最大支持量的用戶正常的服務,而可以對一些超出負載的用戶提出的服務短期內進行拒絕。設置可以提供一種排隊進入的機制。

3.測試階段如何關注性能

在測試階段我們還需要做什么來保障性能呢?

首先我想強調的是,測試是保證產品的性能最終是否達標的最后保障,所以這個環節一定要嚴格要求。

從信念上來說,只要開發同學有對代碼進行修改,那么都是要懷疑可能引入性能問題的,之前我們的一個打開好友聊天窗口的時候卡的一個性能問題,就是因為在桌面快捷圖標的時候在打開聊天窗口的過程加了一行代碼。

測試方法上,要注意用接近現實的一些數據來進行測試,包括前面說到的消息記錄的大小和好友列表的數目。另外要注意覆蓋各種使用場景。最后還有一點尤其要注意的是要注意用多種機器多種網絡環境多種軟件環境來測試,機器的話,主要包括性能好的機器和性能差的機器,機器的網絡環境的話要考慮網絡丟包比較大的一些情況,還要集合局域網廣域網以及中國的各大運營商之間的不同網絡場景。軟件環境的話,一方面包括不同的操作系統,一方面包括同時運行和安裝的軟件環境,比如殺毒軟件,安全軟件,或者是同時在運行一些大型游戲的情況。

當然最好的情況是,建立一系列的自動化測試框架,把一些我們平常關注的重要數據,比如QQ的登錄速度,登錄后卡不卡,打開好友聊天窗口的速度等等通過自動化跑出來。通過定期進行自動化測試,同時把數據進行各個歷史版本橫向比較,最后可以做到快速監控,最快速度發現性能問題。

4.反饋跟蹤如何關注性能

產品發布之后,依然還要繼續關注它的性能。一方面由于我們的用戶群體非常大,所以難免有些情況和使用場景沒有考慮周全,所以最后運營階段沒有問題的版本才是合格的版本。

我們一般通過定期關注微博,關注產品本身的反饋論壇,以及外面的一些相關論壇來收集信息。同時關注周邊的朋友,以及同事的反饋也是一個很重要的方面。

在用戶反饋有問題的時候,應該要及時去處理,處理方法一方面要先了解用戶的使用場景和使用情況,另一方面可以給用戶一些工具,通過這些工具去記錄當時的CPU,內存,IO的使用情況,當時是否界面有無響應等信息。同時工具最好能夠記錄在有性能問題的時候軟件正在忙什么,當時的堆棧以及系統調用函數是什么,有了這些信息就可以快速的解決問題了。

5.總結

整體來看,貫穿整個軟件開發的過程,從需求,到設計,到開發,到測試,最后到發布反饋,都得要持續關注軟件的性能,這樣才能得到一個系統性地保證。可見,性能優化是一個需要持續運營的過程。

原文來自:QQ客戶端團隊博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/447532.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/447532.shtml
英文地址,請注明出處:http://en.pswp.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 "提交說明" 提交成…