來源:51Testing軟件測試網
前言:之前一直做的軟件質量工作,有過一些經驗和一些不太一樣的思路,盡管與現(xiàn)在從事產品運營不同,但無論是內涵還是聯(lián)系,都是非常緊密的,無論如何,我都會繼續(xù)關注產品的質量問題。
上周跟一朋友闡述性能中并發(fā)的概念,嘰里咕嚕一大通,完了興致勃勃地讓她總結一下,她說了一句:感覺你研究的東西太初級,并發(fā)這種概念,太簡單,沒什么好說的。我聽了差點沒暈倒,估計她也暈了,真是失敗。
并發(fā)真的這么簡單?性能真的如我們所理解的那樣?
也許并不像我們想象的那么簡單,之所以我們去探究這些基本的概念,是因為在實際的工作中,我們發(fā)現(xiàn),很多問題到后知后覺才發(fā)現(xiàn),根源在于概念沒有統(tǒng)一,抑或沒有理解,而無論作為研發(fā)人員,還是顧問、銷售人員,我們除了自己理解,還需要與客戶交流溝通,因此,深刻理解并能通俗易懂的表達出來是非常重要的。
由于軟件性能的范圍比較大,我們將選取幾個典型的問題進行探究,相關概念的理解與分析將逐步進行公開。
● 如何考察性能
這個問題相信很多同事都了然于心了,基本都有自己的理解,我們也很少接到不懂性能的反饋,但很多人甚至包括客戶,都把響應時間或者并發(fā)用戶作為衡量性能的惟一依據,支持10000并發(fā)?性能好!響應時間1秒?性能好!有些時候我們也會接到客戶一些要求,讓我們哭笑不得,某次一客戶就要求我們的產品支持10000并發(fā),有點汗,哈哈。
實際上性能是一項工程,嚴格地說,性能是在某一個特定環(huán)境下,系統(tǒng)所表現(xiàn)出來的上限事務處理能力。如果我們將這個問題細化,性能取決于具體環(huán)境,取決于系統(tǒng)架構,取決于軟件與服務器的優(yōu)化等等,也就是,我們所提供的內部測試報告是具備一定的前提的(在一定的網絡或硬件環(huán)境下),如果我們的架構是包含了10臺機器的集群,而客戶方提供的卻是2臺PC機,這種條件下還要求測試結果保持一致,就有點為難了。
盡管性能有很多范圍、指標、概念,比如響應時間、吞吐量、并發(fā)用戶、軟硬件負荷等等,但對普通用戶來說,并發(fā)用戶數與響應時間這兩個概念還是非常直觀與普通,認可度也非常高,搞清楚這兩個概念非常重要。后面我們會逐步闡述其他概念。
● 理解壓力
在談起并發(fā)這個概念之前,我們先來說說壓力,對系統(tǒng)而言,性能問題歸根到底,都會體現(xiàn)為實實在在的壓力。因此,我們一般說的“你這個系統(tǒng)的性能極限能到多少?”,其內在含義指的就是“系統(tǒng)所能承受的極限壓力是多少”。
那么壓力究竟是什么呢?
我突然想起天天坐的地鐵,沒有比坐地鐵這件事情更便于形容性能與壓力了,哈哈。話說我每天在立水橋南上地鐵,絕對是考驗體力耐力心理素質的事情啊(說岔了)。
我們可以把一班地鐵列車看成是一個被測的系統(tǒng),對于這個系統(tǒng)而言,其壓力顯而易見,就是列車中所有的人,比如北京地鐵5號線,每列車的定員人數是1424人,折合每節(jié)車廂237人(當然包括站著的),而極限容納是1820人,折合每車廂303人,這個總承受人數。
其實就是系統(tǒng)(也就是列車)的特大設計承受壓力(也就是吞吐量了),當然,北京地鐵比較變態(tài),超員現(xiàn)象比較嚴重,我每天占用的面積還不超過10平方厘米(腳踮起來了),實際極限負荷估計超過2000了。對列車而言,超過極限負荷是比較危險的,要么是拉不動(這個估計可能性不大),要么人擠壞(君不見每天爭吵哀嚎無數)。
如果超出設計負荷值,系統(tǒng)就會存在危險,危險是多方面的,因此,一般的,系統(tǒng)應該具備超出負荷的處理預案,對照到地鐵,高峰時期就會進行限流。
搞清楚這個問題后,再來看看常規(guī)的系統(tǒng),就好理解了,系統(tǒng)的壓力是什么呢?壓力是對被測系統(tǒng)而言的,只要系統(tǒng)在處理事務,就有壓力,這種壓力不僅僅體現(xiàn)在網絡上(數據的吞吐),還體現(xiàn)在服務器上(如CPU、內存等),因此,我們不要混淆了吞吐量與壓力的關系,應該這么說,在一些web系統(tǒng)上,吞吐量可以在一定程度上反映系統(tǒng)承受的數據壓力。
另外,我們需要清楚,壓力不等于性能,壓力只是檢驗性能的一種手段,對一個性能良好的系統(tǒng),在一定的壓力下,應該可以保持正常運轉,如果超過負荷,則應該分流或化解壓力,這也是我們需要檢驗的。
● 理解并發(fā)
說完壓力,我們已經知道,壓力其實就是一種作用力,當然,還可以理解為一種量的度量,比如列車的承載數,既然有量,就肯定有速度,承載總量(吞吐量)是一定的,但速度卻是變化的,我們早晚高峰的時候去乘地鐵,當然是擁擠非常,但如果你晚上11點去做地鐵,我可以很高興地告訴你,你還會有座位!
原因在于,早晚高峰時坐地鐵的人多,深夜時坐地鐵的人少(這不是廢話嗎)。我們再來想想,高峰的時候可能同一時間擠進門的人很多,基本上門有多大,同時擠進去的人就能把門給塞滿。
那么這個并發(fā)(虛擬用戶)是什么呢?
并發(fā)是有場景條件的,要看我們考察的是什么事情,我們再來想象一下地鐵,在整個地鐵大廳里(包括列車),有剛剛進站的,有正在買票的,有正在登車的,有坐在車上的,還有閑逛的,這么多人,但對列車有壓力的,其實就是已經在車上的這些人(包括擠車的),如果我們考察性能的系統(tǒng)就是列車,很顯然,重點關心的就只需要看看車上現(xiàn)有的這些人。
再次強調,并發(fā)跟考察的具體場景是有關系的,即并發(fā)做什么,并發(fā)這個詞,原始的翻譯是concurrent,意為同時發(fā)生的,或同時存在的。至于同時做什么,要看我們定義了,同時在地鐵大廳里,同時在地鐵上,同時在擠地鐵,考察的事情不一樣,并發(fā)的意義就不一樣。
對地鐵這個系統(tǒng)而言,每個時間都有新來的人,也有走的人,大家做的事情基本都相同,乘地鐵。假定某個時刻地鐵大廳中有10000人,檢票口候車的有100人,剛剛開走的地鐵上乘有2000人,那此時對考察的系統(tǒng)(列車)而言,并發(fā)就是2000人,而如果考察的是檢票處,則并發(fā)為100人,同樣,如果考察的系統(tǒng)是地鐵大廳,那此時的并發(fā)就是10000人。這種并發(fā)我們一般稱之為“廣義并發(fā)”。
廣義并發(fā)有點類似與通常我們所說的在線用戶,但存在關鍵的區(qū)別,即并發(fā)用戶針對的是某一件事務,譬如注冊、登錄、上傳、瀏覽等,而在線用戶是一個很泛的概念,一般包括前面所述的所有事務,可以理解為一個事務集合。
在性能的理論中,還有一個概念,simultaneously,翻譯為同步的,當前,為方便計算,我們一般把“同步”理解為“同1秒”,也就是說,這個同步的就是單位時間內發(fā)生的數量。也即我們通常所說的“狹義并發(fā)”。需要注意的是,實際的測試中經常會遇到被測事務響應時間低于這個1秒的單位時間,此時的并發(fā)計算仍需要按1秒計算,具體參見“我們的定義”中的說明。
很多時候,我們(特別是客戶)往往搞混了這兩個并發(fā)的概念。對系統(tǒng)來說,廣義的并發(fā)實際上是在一個時間內操作事務的虛擬用戶,而狹義的并發(fā)指的是單位時間內向系統(tǒng)發(fā)起請求的虛擬用戶,前者是“存在”,后者是“請求”,勿容置疑,壓力不僅僅受成功發(fā)出請求的用戶帶來的壓力,同時也受“存在”的用戶影響。
換種理解方式,并發(fā)考察的是系統(tǒng)的處理能力,上限能支持多少用戶同時處理某件事務,而不是壓力發(fā)出端發(fā)出的請求。
除此之外,并發(fā)作為一個量化的指標,是對應著具體的取值的,因此,很多系統(tǒng)會去尋求特大并發(fā),實際上,我們來回顧5號線的承載力的例子,核定載客1424人,這種情況可能考慮到乘客的感受(還算舒服,站著也算,哈哈)
● 理解我們的定義
在我們已經做過的很多測試中,都有并發(fā)這個概念,當然也包括我們很多開發(fā)人員,所謂的并發(fā)是怎么定義的呢?
客觀的說,我們的定義比較接近于“廣義并發(fā)”,但有所不同。這與我們的考察對象(web系統(tǒng))、衡量事務(通常我們衡量的都是單個事務,很少把多個事務放在一起處理,原因在于盡量避免事務的耦合性所帶來的影響)有關,具體到地鐵的例子,如果我們考察的系統(tǒng)指“地鐵大廳”,那么我們所謂的并發(fā)一般通常指同時進入地鐵大廳的人。而如果我們考察的系統(tǒng)指“地鐵列車”,那么我們所謂的并發(fā)則指同時進入站臺的人。
在實際的產品測試中,比如我們在測試IDS登錄的時候,如果說,支持800并發(fā),其涵義為“支持800個虛擬用戶同時進行登錄操作”,需要說明的是,這個同時并非指同一秒,要知道,并發(fā)本身是沒有單位的。在800并發(fā)下的結果如何,要看響應時間,這個問題本文不進行仔細闡述。如有興趣可以參考相關資料。
測試中,我們也會考慮“狹義并發(fā)”的情況,但狹義并發(fā)需要考慮到被測系統(tǒng)的入口,比如,假定地鐵總共有10個入口且全部開放,每個入口只能容納1個人進出,則“狹義并發(fā)”下特大值就是10?不一定!因為我們還沒有考慮速度問題,前面提到,狹義并發(fā)的單位是秒,如果每個人經過每個入口的耗時就是1s,則特大“狹義并發(fā)”值就是10,如果經過的時間少于1秒呢?還是按1秒算,比如還是這個情景,乘客經過入口的耗時假定為0.1秒,則特大狹義并發(fā)就是10/0.1=100了。
簡單點說,我們可以這么理解實際工作中的并發(fā),被測的事務總得有人(其實就是虛擬的用戶)來做,對吧,同時允許多少用戶來做這件事情呢?這個多少用戶就是我們需要的并發(fā)值。
詳詢:王萍老師18988787201
詳詢:小文老師18988787201
王萍老師 | 小文老師 |
《中華考試網軟件測試培訓》
《教育軟件測試培訓頻道》
《軟件測試培訓課程——深圳川石》
《深圳川石軟件性能測試培訓》
《深圳川石企業(yè)性能測試(PL&LR)提升班》
《持續(xù)集成自動化測試UFT Selenium提升班》
《深圳源昊寶安軟件測試培訓班》
《深圳凌岳軟件自動化測試培訓班》
《深圳博睿軟件安全測試培訓》
《深圳達內軟件測試培訓學?!?/a>