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